1 /***************************************
2 $Header: /home/amb/routino/src/RCS/translations.c,v 1.10 2010/07/03 10:58:37 amb Exp $
4 Load the translations from a file and the functions for handling them.
6 Part of the Routino routing software.
7 ******************/ /******************
8 This file Copyright 2010 Andrew M. Bishop
10 This program is free software: you can redistribute it and/or modify
11 it under the terms of the GNU Affero General Public License as published by
12 the Free Software Foundation, either version 3 of the License, or
13 (at your option) any later version.
15 This program is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU Affero General Public License for more details.
20 You should have received a copy of the GNU Affero General Public License
21 along with this program. If not, see <http://www.gnu.org/licenses/>.
22 ***************************************/
29 #include "functions.h"
30 #include "translations.h"
34 /* Global variables - default English values */
36 char *translate_copyright_creator[2]={"Creator","Routino - http://www.routino.org/"};
37 char *translate_copyright_source[2] ={NULL,NULL};
38 char *translate_copyright_license[2]={NULL,NULL};
40 char *translate_heading[9]={"South","South-West","West","North-West","North","North-East","East","South-East","South"};
41 char *translate_turn[9] ={"Very sharp left","Sharp left","Left","Slight left","Straight on","Slight right","Right","Sharp right","Very sharp right"};
43 char *translate_highway[Way_Count]={"","motorway","trunk road","primary road","secondary road","tertiary road","unclassified road","residential road","service road","track","cycleway","path","steps"};
45 char *translate_route_shortest="Shortest";
46 char *translate_route_quickest="Quickest";
48 char *translate_html_waypoint="<span class='w'>Waypoint</span>";
49 char *translate_html_junction="Junction";
51 char *translate_html_title="%s Route";
52 char *translate_html_start[2]={"Start","At %s, head %s"};
53 char *translate_html_segment[2]={"Follow","%s for %.3f km, %.1f min"};
54 char *translate_html_node[2]={"At","%s, go %s heading %s"};
55 char *translate_html_stop[2]={"Stop","At %s"};
56 char *translate_html_total[2]={"Total","%.1f km, %.0f minutes"};
58 char *translate_gpx_desc ="%s between 'start' and 'finish' waypoints";
59 char *translate_gpx_name ="%s Route";
60 char *translate_gpx_step ="%s on '%s' for %.3f km, %.1 min";
61 char *translate_gpx_final="Total Journey %.1f km, %d minutes";
63 char *translate_gpx_start="START";
64 char *translate_gpx_inter="INTER";
65 char *translate_gpx_trip="TRIP";
66 char *translate_gpx_finish="FINISH";
71 /*+ The language that is to be stored. +*/
72 static const char *store_lang=NULL;
74 /*+ This current language is to be stored. +*/
77 /*+ The chosen language has been stored. +*/
81 /* The XML tag processing function prototypes */
83 //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding);
84 //static int RoutinoTranslationsType_function(const char *_tag_,int _type_);
85 static int languageType_function(const char *_tag_,int _type_,const char *lang);
86 //static int GPXType_function(const char *_tag_,int _type_);
87 static int GPXFinalType_function(const char *_tag_,int _type_,const char *text);
88 static int GPXStepType_function(const char *_tag_,int _type_,const char *text);
89 static int GPXNameType_function(const char *_tag_,int _type_,const char *text);
90 static int GPXDescType_function(const char *_tag_,int _type_,const char *text);
91 //static int HTMLType_function(const char *_tag_,int _type_);
92 static int HTMLTotalType_function(const char *_tag_,int _type_,const char *string,const char *text);
93 static int HTMLStopType_function(const char *_tag_,int _type_,const char *string,const char *text);
94 static int HTMLSegmentType_function(const char *_tag_,int _type_,const char *string,const char *text);
95 static int HTMLNodeType_function(const char *_tag_,int _type_,const char *string,const char *text);
96 static int HTMLStartType_function(const char *_tag_,int _type_,const char *string,const char *text);
97 static int HTMLTitleType_function(const char *_tag_,int _type_,const char *text);
98 //static int CopyrightType_function(const char *_tag_,int _type_);
99 static int GPXWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string);
100 static int HTMLWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string);
101 static int RouteType_function(const char *_tag_,int _type_,const char *type,const char *string);
102 static int HighwayType_function(const char *_tag_,int _type_,const char *type,const char *string);
103 static int HeadingType_function(const char *_tag_,int _type_,const char *direction,const char *string);
104 static int TurnType_function(const char *_tag_,int _type_,const char *direction,const char *string);
105 static int CopyrightLicenseType_function(const char *_tag_,int _type_,const char *string,const char *text);
106 static int CopyrightSourceType_function(const char *_tag_,int _type_,const char *string,const char *text);
107 static int CopyrightCreatorType_function(const char *_tag_,int _type_,const char *string,const char *text);
110 /* The XML tag definitions */
112 /*+ The CopyrightCreatorType type tag. +*/
113 static xmltag CopyrightCreatorType_tag=
115 2, {"string","text"},
116 CopyrightCreatorType_function,
119 /*+ The CopyrightSourceType type tag. +*/
120 static xmltag CopyrightSourceType_tag=
122 2, {"string","text"},
123 CopyrightSourceType_function,
126 /*+ The CopyrightLicenseType type tag. +*/
127 static xmltag CopyrightLicenseType_tag=
129 2, {"string","text"},
130 CopyrightLicenseType_function,
133 /*+ The TurnType type tag. +*/
134 static xmltag TurnType_tag=
136 2, {"direction","string"},
140 /*+ The HeadingType type tag. +*/
141 static xmltag HeadingType_tag=
143 2, {"direction","string"},
144 HeadingType_function,
147 /*+ The HighwayType type tag. +*/
148 static xmltag HighwayType_tag=
150 2, {"type","string"},
151 HighwayType_function,
154 /*+ The RouteType type tag. +*/
155 static xmltag RouteType_tag=
157 2, {"type","string"},
161 /*+ The HTMLWaypointType type tag. +*/
162 static xmltag HTMLWaypointType_tag=
164 2, {"type","string"},
165 HTMLWaypointType_function,
168 /*+ The GPXWaypointType type tag. +*/
169 static xmltag GPXWaypointType_tag=
171 2, {"type","string"},
172 GPXWaypointType_function,
175 /*+ The CopyrightType type tag. +*/
176 static xmltag CopyrightType_tag=
180 {&CopyrightCreatorType_tag,&CopyrightSourceType_tag,&CopyrightLicenseType_tag,NULL}};
182 /*+ The HTMLTitleType type tag. +*/
183 static xmltag HTMLTitleType_tag=
186 HTMLTitleType_function,
189 /*+ The HTMLStartType type tag. +*/
190 static xmltag HTMLStartType_tag=
192 2, {"string","text"},
193 HTMLStartType_function,
196 /*+ The HTMLNodeType type tag. +*/
197 static xmltag HTMLNodeType_tag=
199 2, {"string","text"},
200 HTMLNodeType_function,
203 /*+ The HTMLSegmentType type tag. +*/
204 static xmltag HTMLSegmentType_tag=
206 2, {"string","text"},
207 HTMLSegmentType_function,
210 /*+ The HTMLStopType type tag. +*/
211 static xmltag HTMLStopType_tag=
213 2, {"string","text"},
214 HTMLStopType_function,
217 /*+ The HTMLTotalType type tag. +*/
218 static xmltag HTMLTotalType_tag=
220 2, {"string","text"},
221 HTMLTotalType_function,
224 /*+ The HTMLType type tag. +*/
225 static xmltag HTMLType_tag=
229 {&HTMLWaypointType_tag,&HTMLTitleType_tag,&HTMLStartType_tag,&HTMLNodeType_tag,&HTMLSegmentType_tag,&HTMLStopType_tag,&HTMLTotalType_tag,NULL}};
231 /*+ The GPXDescType type tag. +*/
232 static xmltag GPXDescType_tag=
235 GPXDescType_function,
238 /*+ The GPXNameType type tag. +*/
239 static xmltag GPXNameType_tag=
242 GPXNameType_function,
245 /*+ The GPXStepType type tag. +*/
246 static xmltag GPXStepType_tag=
249 GPXStepType_function,
252 /*+ The GPXFinalType type tag. +*/
253 static xmltag GPXFinalType_tag=
256 GPXFinalType_function,
259 /*+ The GPXType type tag. +*/
260 static xmltag GPXType_tag=
264 {&GPXWaypointType_tag,&GPXDescType_tag,&GPXNameType_tag,&GPXStepType_tag,&GPXFinalType_tag,NULL}};
266 /*+ The languageType type tag. +*/
267 static xmltag languageType_tag=
270 languageType_function,
271 {&CopyrightType_tag,&TurnType_tag,&HeadingType_tag,&HighwayType_tag,&RouteType_tag,&HTMLType_tag,&GPXType_tag,NULL}};
273 /*+ The RoutinoTranslationsType type tag. +*/
274 static xmltag RoutinoTranslationsType_tag=
275 {"routino-translations",
278 {&languageType_tag,NULL}};
280 /*+ The xmlDeclaration type tag. +*/
281 static xmltag xmlDeclaration_tag=
283 2, {"version","encoding"},
288 /*+ The complete set of tags at the top level. +*/
289 static xmltag *xml_toplevel_tags[]={&xmlDeclaration_tag,&RoutinoTranslationsType_tag,NULL};
292 /* The XML tag processing functions */
295 /*++++++++++++++++++++++++++++++++++++++
296 The function that is called when the CopyrightCreatorType XSD type is seen
298 int CopyrightCreatorType_function Returns 0 if no error occured or something else otherwise.
300 const char *_tag_ Set to the name of the element tag that triggered this function call.
302 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
304 const char *string The contents of the 'string' attribute (or NULL if not defined).
306 const char *text The contents of the 'text' attribute (or NULL if not defined).
307 ++++++++++++++++++++++++++++++++++++++*/
309 static int CopyrightCreatorType_function(const char *_tag_,int _type_,const char *string,const char *text)
311 if(_type_&XMLPARSE_TAG_START && store)
313 XMLPARSE_ASSERT_STRING(_tag_,string);
314 XMLPARSE_ASSERT_STRING(_tag_,text);
316 translate_copyright_creator[0]=strcpy(malloc(strlen(string)+1),string);
317 translate_copyright_creator[1]=strcpy(malloc(strlen(text)+1),text);
324 /*++++++++++++++++++++++++++++++++++++++
325 The function that is called when the CopyrightSourceType XSD type is seen
327 int CopyrightSourceType_function Returns 0 if no error occured or something else otherwise.
329 const char *_tag_ Set to the name of the element tag that triggered this function call.
331 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
333 const char *string The contents of the 'string' attribute (or NULL if not defined).
335 const char *text The contents of the 'text' attribute (or NULL if not defined).
336 ++++++++++++++++++++++++++++++++++++++*/
338 static int CopyrightSourceType_function(const char *_tag_,int _type_,const char *string,const char *text)
340 if(_type_&XMLPARSE_TAG_START && store)
342 XMLPARSE_ASSERT_STRING(_tag_,string);
343 XMLPARSE_ASSERT_STRING(_tag_,text);
345 translate_copyright_source[0]=strcpy(malloc(strlen(string)+1),string);
346 translate_copyright_source[1]=strcpy(malloc(strlen(text)+1),text);
353 /*++++++++++++++++++++++++++++++++++++++
354 The function that is called when the CopyrightLicenseType XSD type is seen
356 int CopyrightLicenseType_function Returns 0 if no error occured or something else otherwise.
358 const char *_tag_ Set to the name of the element tag that triggered this function call.
360 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
362 const char *string The contents of the 'string' attribute (or NULL if not defined).
364 const char *text The contents of the 'text' attribute (or NULL if not defined).
365 ++++++++++++++++++++++++++++++++++++++*/
367 static int CopyrightLicenseType_function(const char *_tag_,int _type_,const char *string,const char *text)
369 if(_type_&XMLPARSE_TAG_START && store)
371 XMLPARSE_ASSERT_STRING(_tag_,string);
372 XMLPARSE_ASSERT_STRING(_tag_,text);
374 translate_copyright_license[0]=strcpy(malloc(strlen(string)+1),string);
375 translate_copyright_license[1]=strcpy(malloc(strlen(text)+1),text);
382 /*++++++++++++++++++++++++++++++++++++++
383 The function that is called when the TurnType XSD type is seen
385 int TurnType_function Returns 0 if no error occured or something else otherwise.
387 const char *_tag_ Set to the name of the element tag that triggered this function call.
389 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
391 const char *direction The contents of the 'direction' attribute (or NULL if not defined).
393 const char *string The contents of the 'string' attribute (or NULL if not defined).
394 ++++++++++++++++++++++++++++++++++++++*/
396 static int TurnType_function(const char *_tag_,int _type_,const char *direction,const char *string)
398 if(_type_&XMLPARSE_TAG_START && store)
402 XMLPARSE_ASSERT_INTEGER(_tag_,direction,d);
403 XMLPARSE_ASSERT_STRING(_tag_,string);
408 XMLPARSE_INVALID(_tag_,direction);
410 translate_turn[d]=strcpy(malloc(strlen(string)+1),string);
417 /*++++++++++++++++++++++++++++++++++++++
418 The function that is called when the HeadingType XSD type is seen
420 int HeadingType_function Returns 0 if no error occured or something else otherwise.
422 const char *_tag_ Set to the name of the element tag that triggered this function call.
424 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
426 const char *direction The contents of the 'direction' attribute (or NULL if not defined).
428 const char *string The contents of the 'string' attribute (or NULL if not defined).
429 ++++++++++++++++++++++++++++++++++++++*/
431 static int HeadingType_function(const char *_tag_,int _type_,const char *direction,const char *string)
433 if(_type_&XMLPARSE_TAG_START && store)
437 XMLPARSE_ASSERT_INTEGER(_tag_,direction,d);
438 XMLPARSE_ASSERT_STRING(_tag_,string);
443 XMLPARSE_INVALID(_tag_,direction);
445 translate_heading[d]=strcpy(malloc(strlen(string)+1),string);
452 /*++++++++++++++++++++++++++++++++++++++
453 The function that is called when the HighwayType XSD type is seen
455 int HighwayType_function Returns 0 if no error occured or something else otherwise.
457 const char *_tag_ Set to the name of the element tag that triggered this function call.
459 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
461 const char *type The contents of the 'type' attribute (or NULL if not defined).
463 const char *string The contents of the 'string' attribute (or NULL if not defined).
464 ++++++++++++++++++++++++++++++++++++++*/
466 static int HighwayType_function(const char *_tag_,int _type_,const char *type,const char *string)
468 if(_type_&XMLPARSE_TAG_START && store)
472 XMLPARSE_ASSERT_STRING(_tag_,type);
473 XMLPARSE_ASSERT_STRING(_tag_,string);
475 highway=HighwayType(type);
477 if(highway==Way_Count)
478 XMLPARSE_INVALID(_tag_,type);
480 translate_highway[highway]=strcpy(malloc(strlen(string)+1),string);
487 /*++++++++++++++++++++++++++++++++++++++
488 The function that is called when the RouteType XSD type is seen
490 int RouteType_function Returns 0 if no error occured or something else otherwise.
492 const char *_tag_ Set to the name of the element tag that triggered this function call.
494 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
496 const char *type The contents of the 'type' attribute (or NULL if not defined).
498 const char *string The contents of the 'string' attribute (or NULL if not defined).
499 ++++++++++++++++++++++++++++++++++++++*/
501 static int RouteType_function(const char *_tag_,int _type_,const char *type,const char *string)
503 if(_type_&XMLPARSE_TAG_START && store)
505 XMLPARSE_ASSERT_STRING(_tag_,type);
506 XMLPARSE_ASSERT_STRING(_tag_,string);
508 if(!strcmp(type,"shortest"))
509 translate_route_shortest=strcpy(malloc(strlen(string)+1),string);
510 else if(!strcmp(type,"quickest"))
511 translate_route_quickest=strcpy(malloc(strlen(string)+1),string);
513 XMLPARSE_INVALID(_tag_,type);
520 /*++++++++++++++++++++++++++++++++++++++
521 The function that is called when the HTMLWaypointType XSD type is seen
523 int HTMLWaypointType_function Returns 0 if no error occured or something else otherwise.
525 const char *_tag_ Set to the name of the element tag that triggered this function call.
527 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
529 const char *type The contents of the 'type' attribute (or NULL if not defined).
531 const char *string The contents of the 'string' attribute (or NULL if not defined).
532 ++++++++++++++++++++++++++++++++++++++*/
534 static int HTMLWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string)
536 if(_type_&XMLPARSE_TAG_START && store)
538 XMLPARSE_ASSERT_STRING(_tag_,type);
539 XMLPARSE_ASSERT_STRING(_tag_,string);
541 if(!strcmp(type,"waypoint"))
543 translate_html_waypoint=malloc(strlen(string)+1+sizeof("<span class='w'>")+sizeof("</span>"));
544 sprintf(translate_html_waypoint,"<span class='w'>%s</span>",string);
546 else if(!strcmp(type,"junction"))
547 translate_html_junction=strcpy(malloc(strlen(string)+1),string);
549 XMLPARSE_INVALID(_tag_,type);
556 /*++++++++++++++++++++++++++++++++++++++
557 The function that is called when the GPXWaypointType XSD type is seen
559 int GPXWaypointType_function Returns 0 if no error occured or something else otherwise.
561 const char *_tag_ Set to the name of the element tag that triggered this function call.
563 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
565 const char *type The contents of the 'type' attribute (or NULL if not defined).
567 const char *string The contents of the 'string' attribute (or NULL if not defined).
568 ++++++++++++++++++++++++++++++++++++++*/
570 static int GPXWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string)
572 if(_type_&XMLPARSE_TAG_START && store)
574 XMLPARSE_ASSERT_STRING(_tag_,type);
575 XMLPARSE_ASSERT_STRING(_tag_,string);
577 if(!strcmp(type,"start"))
578 translate_gpx_start=strcpy(malloc(strlen(string)+1),string);
579 else if(!strcmp(type,"inter"))
580 translate_gpx_inter=strcpy(malloc(strlen(string)+1),string);
581 else if(!strcmp(type,"trip"))
582 translate_gpx_trip=strcpy(malloc(strlen(string)+1),string);
583 else if(!strcmp(type,"finish"))
584 translate_gpx_finish=strcpy(malloc(strlen(string)+1),string);
586 XMLPARSE_INVALID(_tag_,type);
593 /*++++++++++++++++++++++++++++++++++++++
594 The function that is called when the CopyrightType XSD type is seen
596 int CopyrightType_function Returns 0 if no error occured or something else otherwise.
598 const char *_tag_ Set to the name of the element tag that triggered this function call.
600 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
601 ++++++++++++++++++++++++++++++++++++++*/
603 //static int CopyrightType_function(const char *_tag_,int _type_)
609 /*++++++++++++++++++++++++++++++++++++++
610 The function that is called when the HTMLTitleType XSD type is seen
612 int HTMLTitleType_function Returns 0 if no error occured or something else otherwise.
614 const char *_tag_ Set to the name of the element tag that triggered this function call.
616 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
618 const char *text The contents of the 'text' attribute (or NULL if not defined).
619 ++++++++++++++++++++++++++++++++++++++*/
621 static int HTMLTitleType_function(const char *_tag_,int _type_,const char *text)
623 if(_type_&XMLPARSE_TAG_START && store)
625 XMLPARSE_ASSERT_STRING(_tag_,text);
627 translate_html_title=strcpy(malloc(strlen(text)+1),text);
634 /*++++++++++++++++++++++++++++++++++++++
635 The function that is called when the HTMLStartType XSD type is seen
637 int HTMLStartType_function Returns 0 if no error occured or something else otherwise.
639 const char *_tag_ Set to the name of the element tag that triggered this function call.
641 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
643 const char *string The contents of the 'string' attribute (or NULL if not defined).
645 const char *text The contents of the 'text' attribute (or NULL if not defined).
646 ++++++++++++++++++++++++++++++++++++++*/
648 static int HTMLStartType_function(const char *_tag_,int _type_,const char *string,const char *text)
650 if(_type_&XMLPARSE_TAG_START && store)
652 XMLPARSE_ASSERT_STRING(_tag_,string);
653 XMLPARSE_ASSERT_STRING(_tag_,text);
655 translate_html_start[0]=strcpy(malloc(strlen(string)+1),string);
656 translate_html_start[1]=malloc(strlen(text)+1+sizeof("<span class='b'>")+sizeof("</span>"));
657 sprintf(translate_html_start[1],text,"%s","<span class='b'>%s</span>");
664 /*++++++++++++++++++++++++++++++++++++++
665 The function that is called when the HTMLNodeType XSD type is seen
667 int HTMLNodeType_function Returns 0 if no error occured or something else otherwise.
669 const char *_tag_ Set to the name of the element tag that triggered this function call.
671 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
673 const char *string The contents of the 'string' attribute (or NULL if not defined).
675 const char *text The contents of the 'text' attribute (or NULL if not defined).
676 ++++++++++++++++++++++++++++++++++++++*/
678 static int HTMLNodeType_function(const char *_tag_,int _type_,const char *string,const char *text)
680 if(_type_&XMLPARSE_TAG_START && store)
682 XMLPARSE_ASSERT_STRING(_tag_,string);
683 XMLPARSE_ASSERT_STRING(_tag_,text);
685 translate_html_node[0]=strcpy(malloc(strlen(string)+1),string);
686 translate_html_node[1]=malloc(strlen(text)+1+2*sizeof("<span class='b'>")+2*sizeof("</span>"));
687 sprintf(translate_html_node[1],text,"%s","<span class='t'>%s</span>","<span class='b'>%s</span>");
694 /*++++++++++++++++++++++++++++++++++++++
695 The function that is called when the HTMLSegmentType XSD type is seen
697 int HTMLSegmentType_function Returns 0 if no error occured or something else otherwise.
699 const char *_tag_ Set to the name of the element tag that triggered this function call.
701 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
703 const char *string The contents of the 'string' attribute (or NULL if not defined).
705 const char *text The contents of the 'text' attribute (or NULL if not defined).
706 ++++++++++++++++++++++++++++++++++++++*/
708 static int HTMLSegmentType_function(const char *_tag_,int _type_,const char *string,const char *text)
710 if(_type_&XMLPARSE_TAG_START && store)
715 XMLPARSE_ASSERT_STRING(_tag_,string);
716 XMLPARSE_ASSERT_STRING(_tag_,text);
718 translate_html_segment[0]=strcpy(malloc(strlen(string)+1),string);
719 translate_html_segment[1]=malloc(strlen(text)+1+2*sizeof("<span class='b'>")+2*sizeof("</span>"));
722 q=translate_html_segment[1];
724 while(*p!='%' && *(p+1)!='s')
728 strcpy(q,"<span class='h'>%s</span>"); q+=sizeof("<span class='h'>%s</span>")-1;
733 strcpy(q,"<span class='d'>"); q+=sizeof("<span class='d'>")-1;
743 /*++++++++++++++++++++++++++++++++++++++
744 The function that is called when the HTMLStopType XSD type is seen
746 int HTMLStopType_function Returns 0 if no error occured or something else otherwise.
748 const char *_tag_ Set to the name of the element tag that triggered this function call.
750 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
752 const char *string The contents of the 'string' attribute (or NULL if not defined).
754 const char *text The contents of the 'text' attribute (or NULL if not defined).
755 ++++++++++++++++++++++++++++++++++++++*/
757 static int HTMLStopType_function(const char *_tag_,int _type_,const char *string,const char *text)
759 if(_type_&XMLPARSE_TAG_START && store)
761 XMLPARSE_ASSERT_STRING(_tag_,string);
762 XMLPARSE_ASSERT_STRING(_tag_,text);
764 translate_html_stop[0]=strcpy(malloc(strlen(string)+1),string);
765 translate_html_stop[1]=strcpy(malloc(strlen(text)+1),text);
772 /*++++++++++++++++++++++++++++++++++++++
773 The function that is called when the HTMLTotalType XSD type is seen
775 int HTMLTotalType_function Returns 0 if no error occured or something else otherwise.
777 const char *_tag_ Set to the name of the element tag that triggered this function call.
779 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
781 const char *string The contents of the 'string' attribute (or NULL if not defined).
783 const char *text The contents of the 'text' attribute (or NULL if not defined).
784 ++++++++++++++++++++++++++++++++++++++*/
786 static int HTMLTotalType_function(const char *_tag_,int _type_,const char *string,const char *text)
788 if(_type_&XMLPARSE_TAG_START && store)
790 XMLPARSE_ASSERT_STRING(_tag_,string);
791 XMLPARSE_ASSERT_STRING(_tag_,text);
793 translate_html_total[0]=strcpy(malloc(strlen(string)+1),string);
794 translate_html_total[1]=strcpy(malloc(strlen(text)+1),text);
801 /*++++++++++++++++++++++++++++++++++++++
802 The function that is called when the HTMLType XSD type is seen
804 int HTMLType_function Returns 0 if no error occured or something else otherwise.
806 const char *_tag_ Set to the name of the element tag that triggered this function call.
808 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
809 ++++++++++++++++++++++++++++++++++++++*/
811 //static int HTMLType_function(const char *_tag_,int _type_)
817 /*++++++++++++++++++++++++++++++++++++++
818 The function that is called when the GPXDescType XSD type is seen
820 int GPXDescType_function Returns 0 if no error occured or something else otherwise.
822 const char *_tag_ Set to the name of the element tag that triggered this function call.
824 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
826 const char *text The contents of the 'text' attribute (or NULL if not defined).
827 ++++++++++++++++++++++++++++++++++++++*/
829 static int GPXDescType_function(const char *_tag_,int _type_,const char *text)
831 if(_type_&XMLPARSE_TAG_START && store)
833 XMLPARSE_ASSERT_STRING(_tag_,text);
835 translate_gpx_desc=strcpy(malloc(strlen(text)+1),text);
842 /*++++++++++++++++++++++++++++++++++++++
843 The function that is called when the GPXNameType XSD type is seen
845 int GPXNameType_function Returns 0 if no error occured or something else otherwise.
847 const char *_tag_ Set to the name of the element tag that triggered this function call.
849 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
851 const char *text The contents of the 'text' attribute (or NULL if not defined).
852 ++++++++++++++++++++++++++++++++++++++*/
854 static int GPXNameType_function(const char *_tag_,int _type_,const char *text)
856 if(_type_&XMLPARSE_TAG_START && store)
858 XMLPARSE_ASSERT_STRING(_tag_,text);
860 translate_gpx_name=strcpy(malloc(strlen(text)+1),text);
867 /*++++++++++++++++++++++++++++++++++++++
868 The function that is called when the GPXStepType XSD type is seen
870 int GPXStepType_function Returns 0 if no error occured or something else otherwise.
872 const char *_tag_ Set to the name of the element tag that triggered this function call.
874 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
876 const char *text The contents of the 'text' attribute (or NULL if not defined).
877 ++++++++++++++++++++++++++++++++++++++*/
879 static int GPXStepType_function(const char *_tag_,int _type_,const char *text)
881 if(_type_&XMLPARSE_TAG_START && store)
883 XMLPARSE_ASSERT_STRING(_tag_,text);
885 translate_gpx_step=strcpy(malloc(strlen(text)+1),text);
892 /*++++++++++++++++++++++++++++++++++++++
893 The function that is called when the GPXFinalType XSD type is seen
895 int GPXFinalType_function Returns 0 if no error occured or something else otherwise.
897 const char *_tag_ Set to the name of the element tag that triggered this function call.
899 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
901 const char *text The contents of the 'text' attribute (or NULL if not defined).
902 ++++++++++++++++++++++++++++++++++++++*/
904 static int GPXFinalType_function(const char *_tag_,int _type_,const char *text)
906 if(_type_&XMLPARSE_TAG_START && store)
908 XMLPARSE_ASSERT_STRING(_tag_,text);
910 translate_gpx_final=strcpy(malloc(strlen(text)+1),text);
917 /*++++++++++++++++++++++++++++++++++++++
918 The function that is called when the GPXType XSD type is seen
920 int GPXType_function Returns 0 if no error occured or something else otherwise.
922 const char *_tag_ Set to the name of the element tag that triggered this function call.
924 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
925 ++++++++++++++++++++++++++++++++++++++*/
927 //static int GPXType_function(const char *_tag_,int _type_)
933 /*++++++++++++++++++++++++++++++++++++++
934 The function that is called when the languageType XSD type is seen
936 int languageType_function Returns 0 if no error occured or something else otherwise.
938 const char *_tag_ Set to the name of the element tag that triggered this function call.
940 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
942 const char *lang The contents of the 'lang' attribute (or NULL if not defined).
943 ++++++++++++++++++++++++++++++++++++++*/
945 static int languageType_function(const char *_tag_,int _type_,const char *lang)
949 if(_type_&XMLPARSE_TAG_START)
951 XMLPARSE_ASSERT_STRING(_tag_,lang);
953 if(!store_lang && first)
955 else if(store_lang && !strcmp(store_lang,lang))
963 if(_type_&XMLPARSE_TAG_END && store)
973 /*++++++++++++++++++++++++++++++++++++++
974 The function that is called when the RoutinoTranslationsType XSD type is seen
976 int RoutinoTranslationsType_function Returns 0 if no error occured or something else otherwise.
978 const char *_tag_ Set to the name of the element tag that triggered this function call.
980 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
981 ++++++++++++++++++++++++++++++++++++++*/
983 //static int RoutinoTranslationsType_function(const char *_tag_,int _type_)
989 /*++++++++++++++++++++++++++++++++++++++
990 The function that is called when the XML declaration is seen
992 int xmlDeclaration_function Returns 0 if no error occured or something else otherwise.
994 const char *_tag_ Set to the name of the element tag that triggered this function call.
996 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
998 const char *version The contents of the 'version' attribute (or NULL if not defined).
1000 const char *encoding The contents of the 'encoding' attribute (or NULL if not defined).
1001 ++++++++++++++++++++++++++++++++++++++*/
1003 //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding)
1009 /*++++++++++++++++++++++++++++++++++++++
1010 The XML translation parser.
1012 int ParseXMLTranslations Returns 0 if OK or something else in case of an error.
1014 const char *filename The name of the file to read.
1016 const char *language The language to search for (NULL means first in file).
1017 ++++++++++++++++++++++++++++++++++++++*/
1019 int ParseXMLTranslations(const char *filename,const char *language)
1023 store_lang=language;
1025 if(!ExistsFile(filename))
1027 fprintf(stderr,"Error: Specified translations file '%s' does not exist.\n",filename);
1031 FILE *file=fopen(filename,"r");
1035 fprintf(stderr,"Error: Cannot open translations file '%s' for reading.\n",filename);
1039 retval=ParseXML(file,xml_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_ERRNONAME|XMLPARSE_RETURN_ATTR_ENCODED);
1046 if(language && !stored)
1047 fprintf(stderr,"Warning: Cannot find translations for language '%s' using English instead.\n",language);