Routino SVN Repository Browser

Check out the latest version of Routino: svn co http://routino.org/svn/trunk routino

ViewVC logotype

Annotation of /trunk/src/translations.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 426 - (hide annotations) (download) (as text)
Sat Jun 26 19:26:47 2010 UTC (14 years, 8 months ago) by amb
File MIME type: text/x-csrc
File size: 34987 byte(s)
Changed URLs to http://www.routino.org/

1 amb 361 /***************************************
2 amb 426 $Header: /home/amb/CVS/routino/src/translations.c,v 1.9 2010-06-26 19:26:27 amb Exp $
3 amb 361
4     Load the translations from a file and the functions for handling them.
5    
6     Part of the Routino routing software.
7     ******************/ /******************
8     This file Copyright 2010 Andrew M. Bishop
9    
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.
14    
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.
19    
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     ***************************************/
23    
24    
25     #include <stdio.h>
26     #include <string.h>
27     #include <stdlib.h>
28    
29     #include "functions.h"
30     #include "translations.h"
31     #include "xmlparse.h"
32    
33    
34     /* Global variables - default English values */
35    
36 amb 426 char *translate_copyright_creator[2]={"Creator","Routino - http://www.routino.org/"};
37 amb 375 char *translate_copyright_source[2] ={NULL,NULL};
38     char *translate_copyright_license[2]={NULL,NULL};
39 amb 361
40 amb 375 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"};
42    
43 amb 411 char *translate_highway[Way_Count]={"","motorway","trunk road","primary road","secondary road","tertiary road","unclassified road","residential road","service road","track","cycleway","path","steps"};
44 amb 361
45 amb 378 char *translate_route_shortest="Shortest";
46     char *translate_route_quickest="Quickest";
47 amb 361
48 amb 378 char *translate_html_waypoint="<span class='w'>Waypoint</span>";
49     char *translate_html_junction="Junction";
50    
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"};
57    
58 amb 411 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";
62    
63 amb 361 char *translate_gpx_start="START";
64     char *translate_gpx_inter="INTER";
65     char *translate_gpx_trip="TRIP";
66     char *translate_gpx_finish="FINISH";
67    
68    
69     /* Local variables */
70    
71     /*+ The language that is to be stored. +*/
72     static const char *store_lang=NULL;
73    
74     /*+ This current language is to be stored. +*/
75     static int store=0;
76    
77     /*+ The chosen language has been stored. +*/
78     static int stored=0;
79    
80    
81     /* The XML tag processing function prototypes */
82    
83 amb 373 //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 amb 378 //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 amb 373 static int GPXWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string);
100 amb 378 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 amb 411 static int HighwayType_function(const char *_tag_,int _type_,const char *type,const char *string);
103 amb 373 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 amb 375 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);
108 amb 361
109    
110     /* The XML tag definitions */
111    
112 amb 375 /*+ The CopyrightCreatorType type tag. +*/
113     static xmltag CopyrightCreatorType_tag=
114     {"creator",
115     2, {"string","text"},
116     CopyrightCreatorType_function,
117     {NULL}};
118    
119     /*+ The CopyrightSourceType type tag. +*/
120     static xmltag CopyrightSourceType_tag=
121     {"source",
122     2, {"string","text"},
123     CopyrightSourceType_function,
124     {NULL}};
125    
126     /*+ The CopyrightLicenseType type tag. +*/
127     static xmltag CopyrightLicenseType_tag=
128     {"license",
129     2, {"string","text"},
130     CopyrightLicenseType_function,
131     {NULL}};
132    
133 amb 361 /*+ The TurnType type tag. +*/
134 amb 367 static xmltag TurnType_tag=
135 amb 361 {"turn",
136     2, {"direction","string"},
137 amb 367 TurnType_function,
138 amb 361 {NULL}};
139    
140     /*+ The HeadingType type tag. +*/
141 amb 367 static xmltag HeadingType_tag=
142 amb 361 {"heading",
143     2, {"direction","string"},
144 amb 367 HeadingType_function,
145 amb 361 {NULL}};
146    
147 amb 411 /*+ The HighwayType type tag. +*/
148     static xmltag HighwayType_tag=
149     {"highway",
150     2, {"type","string"},
151     HighwayType_function,
152     {NULL}};
153    
154 amb 378 /*+ The RouteType type tag. +*/
155     static xmltag RouteType_tag=
156     {"route",
157     2, {"type","string"},
158     RouteType_function,
159 amb 361 {NULL}};
160    
161 amb 378 /*+ The HTMLWaypointType type tag. +*/
162     static xmltag HTMLWaypointType_tag=
163     {"waypoint",
164 amb 361 2, {"type","string"},
165 amb 378 HTMLWaypointType_function,
166 amb 361 {NULL}};
167    
168 amb 378 /*+ The GPXWaypointType type tag. +*/
169     static xmltag GPXWaypointType_tag=
170     {"waypoint",
171     2, {"type","string"},
172     GPXWaypointType_function,
173     {NULL}};
174    
175 amb 375 /*+ The CopyrightType type tag. +*/
176     static xmltag CopyrightType_tag=
177     {"copyright",
178     0, {NULL},
179     NULL,
180     {&CopyrightCreatorType_tag,&CopyrightSourceType_tag,&CopyrightLicenseType_tag,NULL}};
181    
182 amb 378 /*+ The HTMLTitleType type tag. +*/
183     static xmltag HTMLTitleType_tag=
184     {"title",
185     1, {"text"},
186     HTMLTitleType_function,
187 amb 361 {NULL}};
188    
189 amb 378 /*+ The HTMLStartType type tag. +*/
190     static xmltag HTMLStartType_tag=
191     {"start",
192     2, {"string","text"},
193     HTMLStartType_function,
194     {NULL}};
195    
196     /*+ The HTMLNodeType type tag. +*/
197     static xmltag HTMLNodeType_tag=
198     {"node",
199     2, {"string","text"},
200     HTMLNodeType_function,
201     {NULL}};
202    
203     /*+ The HTMLSegmentType type tag. +*/
204     static xmltag HTMLSegmentType_tag=
205     {"segment",
206     2, {"string","text"},
207     HTMLSegmentType_function,
208     {NULL}};
209    
210     /*+ The HTMLStopType type tag. +*/
211     static xmltag HTMLStopType_tag=
212     {"stop",
213     2, {"string","text"},
214     HTMLStopType_function,
215     {NULL}};
216    
217     /*+ The HTMLTotalType type tag. +*/
218     static xmltag HTMLTotalType_tag=
219     {"total",
220     2, {"string","text"},
221     HTMLTotalType_function,
222     {NULL}};
223    
224     /*+ The HTMLType type tag. +*/
225     static xmltag HTMLType_tag=
226     {"output-html",
227     0, {NULL},
228     NULL,
229     {&HTMLWaypointType_tag,&HTMLTitleType_tag,&HTMLStartType_tag,&HTMLNodeType_tag,&HTMLSegmentType_tag,&HTMLStopType_tag,&HTMLTotalType_tag,NULL}};
230    
231 amb 361 /*+ The GPXDescType type tag. +*/
232 amb 367 static xmltag GPXDescType_tag=
233 amb 361 {"desc",
234     1, {"text"},
235 amb 367 GPXDescType_function,
236 amb 361 {NULL}};
237    
238     /*+ The GPXNameType type tag. +*/
239 amb 367 static xmltag GPXNameType_tag=
240 amb 361 {"name",
241     1, {"text"},
242 amb 367 GPXNameType_function,
243 amb 361 {NULL}};
244    
245     /*+ The GPXStepType type tag. +*/
246 amb 367 static xmltag GPXStepType_tag=
247 amb 361 {"step",
248     1, {"text"},
249 amb 367 GPXStepType_function,
250 amb 361 {NULL}};
251    
252     /*+ The GPXFinalType type tag. +*/
253 amb 367 static xmltag GPXFinalType_tag=
254 amb 361 {"final",
255     1, {"text"},
256 amb 367 GPXFinalType_function,
257 amb 361 {NULL}};
258    
259     /*+ The GPXType type tag. +*/
260 amb 367 static xmltag GPXType_tag=
261 amb 361 {"output-gpx",
262     0, {NULL},
263     NULL,
264 amb 378 {&GPXWaypointType_tag,&GPXDescType_tag,&GPXNameType_tag,&GPXStepType_tag,&GPXFinalType_tag,NULL}};
265 amb 361
266     /*+ The languageType type tag. +*/
267 amb 367 static xmltag languageType_tag=
268 amb 361 {"language",
269     1, {"lang"},
270 amb 367 languageType_function,
271 amb 411 {&CopyrightType_tag,&TurnType_tag,&HeadingType_tag,&HighwayType_tag,&RouteType_tag,&HTMLType_tag,&GPXType_tag,NULL}};
272 amb 361
273     /*+ The RoutinoTranslationsType type tag. +*/
274 amb 367 static xmltag RoutinoTranslationsType_tag=
275 amb 361 {"routino-translations",
276     0, {NULL},
277     NULL,
278 amb 367 {&languageType_tag,NULL}};
279 amb 361
280 amb 367 /*+ The xmlDeclaration type tag. +*/
281     static xmltag xmlDeclaration_tag=
282 amb 361 {"xml",
283     2, {"version","encoding"},
284     NULL,
285     {NULL}};
286    
287    
288     /*+ The complete set of tags at the top level. +*/
289 amb 367 static xmltag *xml_toplevel_tags[]={&xmlDeclaration_tag,&RoutinoTranslationsType_tag,NULL};
290 amb 361
291    
292     /* The XML tag processing functions */
293    
294    
295     /*++++++++++++++++++++++++++++++++++++++
296 amb 375 The function that is called when the CopyrightCreatorType XSD type is seen
297    
298     int CopyrightCreatorType_function Returns 0 if no error occured or something else otherwise.
299    
300     const char *_tag_ Set to the name of the element tag that triggered this function call.
301    
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.
303    
304     const char *string The contents of the 'string' attribute (or NULL if not defined).
305    
306     const char *text The contents of the 'text' attribute (or NULL if not defined).
307     ++++++++++++++++++++++++++++++++++++++*/
308    
309     static int CopyrightCreatorType_function(const char *_tag_,int _type_,const char *string,const char *text)
310     {
311     if(_type_&XMLPARSE_TAG_START && store)
312     {
313     XMLPARSE_ASSERT_STRING(_tag_,string);
314     XMLPARSE_ASSERT_STRING(_tag_,text);
315    
316     translate_copyright_creator[0]=strcpy(malloc(strlen(string)+1),string);
317     translate_copyright_creator[1]=strcpy(malloc(strlen(text)+1),text);
318     }
319    
320     return(0);
321     }
322    
323    
324     /*++++++++++++++++++++++++++++++++++++++
325     The function that is called when the CopyrightSourceType XSD type is seen
326    
327     int CopyrightSourceType_function Returns 0 if no error occured or something else otherwise.
328    
329     const char *_tag_ Set to the name of the element tag that triggered this function call.
330    
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.
332    
333     const char *string The contents of the 'string' attribute (or NULL if not defined).
334    
335     const char *text The contents of the 'text' attribute (or NULL if not defined).
336     ++++++++++++++++++++++++++++++++++++++*/
337    
338     static int CopyrightSourceType_function(const char *_tag_,int _type_,const char *string,const char *text)
339     {
340     if(_type_&XMLPARSE_TAG_START && store)
341     {
342     XMLPARSE_ASSERT_STRING(_tag_,string);
343     XMLPARSE_ASSERT_STRING(_tag_,text);
344    
345     translate_copyright_source[0]=strcpy(malloc(strlen(string)+1),string);
346     translate_copyright_source[1]=strcpy(malloc(strlen(text)+1),text);
347     }
348    
349     return(0);
350     }
351    
352    
353     /*++++++++++++++++++++++++++++++++++++++
354     The function that is called when the CopyrightLicenseType XSD type is seen
355    
356     int CopyrightLicenseType_function Returns 0 if no error occured or something else otherwise.
357    
358     const char *_tag_ Set to the name of the element tag that triggered this function call.
359    
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.
361    
362     const char *string The contents of the 'string' attribute (or NULL if not defined).
363    
364     const char *text The contents of the 'text' attribute (or NULL if not defined).
365     ++++++++++++++++++++++++++++++++++++++*/
366    
367     static int CopyrightLicenseType_function(const char *_tag_,int _type_,const char *string,const char *text)
368     {
369     if(_type_&XMLPARSE_TAG_START && store)
370     {
371     XMLPARSE_ASSERT_STRING(_tag_,string);
372     XMLPARSE_ASSERT_STRING(_tag_,text);
373    
374     translate_copyright_license[0]=strcpy(malloc(strlen(string)+1),string);
375     translate_copyright_license[1]=strcpy(malloc(strlen(text)+1),text);
376     }
377    
378     return(0);
379     }
380    
381    
382     /*++++++++++++++++++++++++++++++++++++++
383 amb 361 The function that is called when the TurnType XSD type is seen
384    
385 amb 367 int TurnType_function Returns 0 if no error occured or something else otherwise.
386 amb 363
387 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
388    
389 amb 361 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
390    
391     const char *direction The contents of the 'direction' attribute (or NULL if not defined).
392    
393     const char *string The contents of the 'string' attribute (or NULL if not defined).
394     ++++++++++++++++++++++++++++++++++++++*/
395    
396 amb 373 static int TurnType_function(const char *_tag_,int _type_,const char *direction,const char *string)
397 amb 361 {
398     if(_type_&XMLPARSE_TAG_START && store)
399     {
400     int d;
401    
402 amb 373 XMLPARSE_ASSERT_INTEGER(_tag_,direction,d);
403     XMLPARSE_ASSERT_STRING(_tag_,string);
404 amb 361
405 amb 363 d+=4;
406 amb 361
407     if(d<0 || d>8)
408 amb 373 XMLPARSE_INVALID(_tag_,direction);
409 amb 361
410     translate_turn[d]=strcpy(malloc(strlen(string)+1),string);
411     }
412 amb 363
413     return(0);
414 amb 361 }
415    
416    
417     /*++++++++++++++++++++++++++++++++++++++
418     The function that is called when the HeadingType XSD type is seen
419    
420 amb 367 int HeadingType_function Returns 0 if no error occured or something else otherwise.
421 amb 363
422 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
423    
424 amb 361 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
425    
426     const char *direction The contents of the 'direction' attribute (or NULL if not defined).
427    
428     const char *string The contents of the 'string' attribute (or NULL if not defined).
429     ++++++++++++++++++++++++++++++++++++++*/
430    
431 amb 373 static int HeadingType_function(const char *_tag_,int _type_,const char *direction,const char *string)
432 amb 361 {
433     if(_type_&XMLPARSE_TAG_START && store)
434     {
435     int d;
436    
437 amb 373 XMLPARSE_ASSERT_INTEGER(_tag_,direction,d);
438     XMLPARSE_ASSERT_STRING(_tag_,string);
439 amb 361
440 amb 363 d+=4;
441 amb 361
442     if(d<0 || d>8)
443 amb 373 XMLPARSE_INVALID(_tag_,direction);
444 amb 361
445     translate_heading[d]=strcpy(malloc(strlen(string)+1),string);
446     }
447 amb 363
448     return(0);
449 amb 361 }
450    
451    
452     /*++++++++++++++++++++++++++++++++++++++
453 amb 411 The function that is called when the HighwayType XSD type is seen
454    
455     int HighwayType_function Returns 0 if no error occured or something else otherwise.
456    
457     const char *_tag_ Set to the name of the element tag that triggered this function call.
458    
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.
460    
461     const char *type The contents of the 'type' attribute (or NULL if not defined).
462    
463     const char *string The contents of the 'string' attribute (or NULL if not defined).
464     ++++++++++++++++++++++++++++++++++++++*/
465    
466     static int HighwayType_function(const char *_tag_,int _type_,const char *type,const char *string)
467     {
468     if(_type_&XMLPARSE_TAG_START && store)
469     {
470     Highway highway;
471    
472     XMLPARSE_ASSERT_STRING(_tag_,type);
473     XMLPARSE_ASSERT_STRING(_tag_,string);
474    
475     highway=HighwayType(type);
476    
477     if(highway==Way_Count)
478     XMLPARSE_INVALID(_tag_,type);
479    
480     translate_highway[highway]=strcpy(malloc(strlen(string)+1),string);
481     }
482    
483     return(0);
484     }
485    
486    
487     /*++++++++++++++++++++++++++++++++++++++
488 amb 378 The function that is called when the RouteType XSD type is seen
489 amb 363
490 amb 378 int RouteType_function Returns 0 if no error occured or something else otherwise.
491 amb 363
492 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
493    
494 amb 363 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
495    
496 amb 361 const char *type The contents of the 'type' attribute (or NULL if not defined).
497    
498     const char *string The contents of the 'string' attribute (or NULL if not defined).
499     ++++++++++++++++++++++++++++++++++++++*/
500    
501 amb 378 static int RouteType_function(const char *_tag_,int _type_,const char *type,const char *string)
502 amb 361 {
503     if(_type_&XMLPARSE_TAG_START && store)
504     {
505 amb 373 XMLPARSE_ASSERT_STRING(_tag_,type);
506     XMLPARSE_ASSERT_STRING(_tag_,string);
507 amb 361
508     if(!strcmp(type,"shortest"))
509 amb 378 translate_route_shortest=strcpy(malloc(strlen(string)+1),string);
510 amb 361 else if(!strcmp(type,"quickest"))
511 amb 378 translate_route_quickest=strcpy(malloc(strlen(string)+1),string);
512 amb 361 else
513 amb 373 XMLPARSE_INVALID(_tag_,type);
514 amb 361 }
515 amb 363
516     return(0);
517 amb 361 }
518    
519    
520     /*++++++++++++++++++++++++++++++++++++++
521 amb 378 The function that is called when the HTMLWaypointType XSD type is seen
522 amb 375
523 amb 378 int HTMLWaypointType_function Returns 0 if no error occured or something else otherwise.
524 amb 375
525     const char *_tag_ Set to the name of the element tag that triggered this function call.
526    
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.
528 amb 378
529     const char *type The contents of the 'type' attribute (or NULL if not defined).
530    
531     const char *string The contents of the 'string' attribute (or NULL if not defined).
532 amb 375 ++++++++++++++++++++++++++++++++++++++*/
533    
534 amb 378 static int HTMLWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string)
535     {
536     if(_type_&XMLPARSE_TAG_START && store)
537     {
538     XMLPARSE_ASSERT_STRING(_tag_,type);
539     XMLPARSE_ASSERT_STRING(_tag_,string);
540 amb 375
541 amb 378 if(!strcmp(type,"waypoint"))
542     {
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);
545     }
546     else if(!strcmp(type,"junction"))
547     translate_html_junction=strcpy(malloc(strlen(string)+1),string);
548     else
549     XMLPARSE_INVALID(_tag_,type);
550     }
551 amb 375
552 amb 378 return(0);
553     }
554    
555    
556 amb 375 /*++++++++++++++++++++++++++++++++++++++
557 amb 361 The function that is called when the GPXWaypointType XSD type is seen
558    
559 amb 367 int GPXWaypointType_function Returns 0 if no error occured or something else otherwise.
560 amb 363
561 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
562    
563 amb 361 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
564    
565     const char *type The contents of the 'type' attribute (or NULL if not defined).
566    
567     const char *string The contents of the 'string' attribute (or NULL if not defined).
568     ++++++++++++++++++++++++++++++++++++++*/
569    
570 amb 373 static int GPXWaypointType_function(const char *_tag_,int _type_,const char *type,const char *string)
571 amb 361 {
572     if(_type_&XMLPARSE_TAG_START && store)
573     {
574 amb 373 XMLPARSE_ASSERT_STRING(_tag_,type);
575     XMLPARSE_ASSERT_STRING(_tag_,string);
576 amb 361
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);
585     else
586 amb 373 XMLPARSE_INVALID(_tag_,type);
587 amb 361 }
588 amb 363
589     return(0);
590 amb 361 }
591    
592    
593     /*++++++++++++++++++++++++++++++++++++++
594 amb 378 The function that is called when the CopyrightType XSD type is seen
595    
596     int CopyrightType_function Returns 0 if no error occured or something else otherwise.
597    
598     const char *_tag_ Set to the name of the element tag that triggered this function call.
599    
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     ++++++++++++++++++++++++++++++++++++++*/
602    
603     //static int CopyrightType_function(const char *_tag_,int _type_)
604     //{
605     // return(0);
606     //}
607    
608    
609     /*++++++++++++++++++++++++++++++++++++++
610     The function that is called when the HTMLTitleType XSD type is seen
611    
612     int HTMLTitleType_function Returns 0 if no error occured or something else otherwise.
613    
614     const char *_tag_ Set to the name of the element tag that triggered this function call.
615    
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.
617    
618     const char *text The contents of the 'text' attribute (or NULL if not defined).
619     ++++++++++++++++++++++++++++++++++++++*/
620    
621     static int HTMLTitleType_function(const char *_tag_,int _type_,const char *text)
622     {
623     if(_type_&XMLPARSE_TAG_START && store)
624     {
625     XMLPARSE_ASSERT_STRING(_tag_,text);
626    
627     translate_html_title=strcpy(malloc(strlen(text)+1),text);
628     }
629    
630     return(0);
631     }
632    
633    
634     /*++++++++++++++++++++++++++++++++++++++
635     The function that is called when the HTMLStartType XSD type is seen
636    
637     int HTMLStartType_function Returns 0 if no error occured or something else otherwise.
638    
639     const char *_tag_ Set to the name of the element tag that triggered this function call.
640    
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.
642    
643     const char *string The contents of the 'string' attribute (or NULL if not defined).
644    
645     const char *text The contents of the 'text' attribute (or NULL if not defined).
646     ++++++++++++++++++++++++++++++++++++++*/
647    
648     static int HTMLStartType_function(const char *_tag_,int _type_,const char *string,const char *text)
649     {
650     if(_type_&XMLPARSE_TAG_START && store)
651     {
652     XMLPARSE_ASSERT_STRING(_tag_,string);
653     XMLPARSE_ASSERT_STRING(_tag_,text);
654    
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>");
658     }
659    
660     return(0);
661     }
662    
663    
664     /*++++++++++++++++++++++++++++++++++++++
665     The function that is called when the HTMLNodeType XSD type is seen
666    
667     int HTMLNodeType_function Returns 0 if no error occured or something else otherwise.
668    
669     const char *_tag_ Set to the name of the element tag that triggered this function call.
670    
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.
672    
673     const char *string The contents of the 'string' attribute (or NULL if not defined).
674    
675     const char *text The contents of the 'text' attribute (or NULL if not defined).
676     ++++++++++++++++++++++++++++++++++++++*/
677    
678     static int HTMLNodeType_function(const char *_tag_,int _type_,const char *string,const char *text)
679     {
680     if(_type_&XMLPARSE_TAG_START && store)
681     {
682     XMLPARSE_ASSERT_STRING(_tag_,string);
683     XMLPARSE_ASSERT_STRING(_tag_,text);
684    
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>");
688     }
689    
690     return(0);
691     }
692    
693    
694     /*++++++++++++++++++++++++++++++++++++++
695     The function that is called when the HTMLSegmentType XSD type is seen
696    
697     int HTMLSegmentType_function Returns 0 if no error occured or something else otherwise.
698    
699     const char *_tag_ Set to the name of the element tag that triggered this function call.
700    
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.
702    
703     const char *string The contents of the 'string' attribute (or NULL if not defined).
704    
705     const char *text The contents of the 'text' attribute (or NULL if not defined).
706     ++++++++++++++++++++++++++++++++++++++*/
707    
708     static int HTMLSegmentType_function(const char *_tag_,int _type_,const char *string,const char *text)
709     {
710     if(_type_&XMLPARSE_TAG_START && store)
711     {
712     const char *p;
713     char *q;
714    
715     XMLPARSE_ASSERT_STRING(_tag_,string);
716     XMLPARSE_ASSERT_STRING(_tag_,text);
717    
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>"));
720    
721     p=text;
722     q=translate_html_segment[1];
723    
724     while(*p!='%' && *(p+1)!='s')
725     *q++=*p++;
726    
727     p+=2;
728     strcpy(q,"<span class='h'>%s</span>"); q+=sizeof("<span class='h'>%s</span>")-1;
729    
730     while(*p!='%')
731     *q++=*p++;
732    
733     strcpy(q,"<span class='d'>"); q+=sizeof("<span class='d'>")-1;
734    
735     strcpy(q,p);
736     strcat(q,"</span>");
737     }
738    
739     return(0);
740     }
741    
742    
743     /*++++++++++++++++++++++++++++++++++++++
744     The function that is called when the HTMLStopType XSD type is seen
745    
746     int HTMLStopType_function Returns 0 if no error occured or something else otherwise.
747    
748     const char *_tag_ Set to the name of the element tag that triggered this function call.
749    
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.
751    
752     const char *string The contents of the 'string' attribute (or NULL if not defined).
753    
754     const char *text The contents of the 'text' attribute (or NULL if not defined).
755     ++++++++++++++++++++++++++++++++++++++*/
756    
757     static int HTMLStopType_function(const char *_tag_,int _type_,const char *string,const char *text)
758     {
759     if(_type_&XMLPARSE_TAG_START && store)
760     {
761     XMLPARSE_ASSERT_STRING(_tag_,string);
762     XMLPARSE_ASSERT_STRING(_tag_,text);
763    
764     translate_html_stop[0]=strcpy(malloc(strlen(string)+1),string);
765     translate_html_stop[1]=strcpy(malloc(strlen(text)+1),text);
766     }
767    
768     return(0);
769     }
770    
771    
772     /*++++++++++++++++++++++++++++++++++++++
773     The function that is called when the HTMLTotalType XSD type is seen
774    
775     int HTMLTotalType_function Returns 0 if no error occured or something else otherwise.
776    
777     const char *_tag_ Set to the name of the element tag that triggered this function call.
778    
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.
780    
781     const char *string The contents of the 'string' attribute (or NULL if not defined).
782    
783     const char *text The contents of the 'text' attribute (or NULL if not defined).
784     ++++++++++++++++++++++++++++++++++++++*/
785    
786     static int HTMLTotalType_function(const char *_tag_,int _type_,const char *string,const char *text)
787     {
788     if(_type_&XMLPARSE_TAG_START && store)
789     {
790     XMLPARSE_ASSERT_STRING(_tag_,string);
791     XMLPARSE_ASSERT_STRING(_tag_,text);
792    
793     translate_html_total[0]=strcpy(malloc(strlen(string)+1),string);
794     translate_html_total[1]=strcpy(malloc(strlen(text)+1),text);
795     }
796    
797     return(0);
798     }
799    
800    
801     /*++++++++++++++++++++++++++++++++++++++
802     The function that is called when the HTMLType XSD type is seen
803    
804     int HTMLType_function Returns 0 if no error occured or something else otherwise.
805    
806     const char *_tag_ Set to the name of the element tag that triggered this function call.
807    
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     ++++++++++++++++++++++++++++++++++++++*/
810    
811     //static int HTMLType_function(const char *_tag_,int _type_)
812     //{
813     // return(0);
814     //}
815    
816    
817     /*++++++++++++++++++++++++++++++++++++++
818 amb 361 The function that is called when the GPXDescType XSD type is seen
819    
820 amb 367 int GPXDescType_function Returns 0 if no error occured or something else otherwise.
821 amb 363
822 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
823    
824 amb 361 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
825    
826     const char *text The contents of the 'text' attribute (or NULL if not defined).
827     ++++++++++++++++++++++++++++++++++++++*/
828    
829 amb 373 static int GPXDescType_function(const char *_tag_,int _type_,const char *text)
830 amb 361 {
831     if(_type_&XMLPARSE_TAG_START && store)
832     {
833 amb 373 XMLPARSE_ASSERT_STRING(_tag_,text);
834 amb 361
835     translate_gpx_desc=strcpy(malloc(strlen(text)+1),text);
836     }
837 amb 363
838     return(0);
839 amb 361 }
840    
841    
842     /*++++++++++++++++++++++++++++++++++++++
843     The function that is called when the GPXNameType XSD type is seen
844    
845 amb 367 int GPXNameType_function Returns 0 if no error occured or something else otherwise.
846 amb 363
847 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
848    
849 amb 361 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
850    
851     const char *text The contents of the 'text' attribute (or NULL if not defined).
852     ++++++++++++++++++++++++++++++++++++++*/
853    
854 amb 373 static int GPXNameType_function(const char *_tag_,int _type_,const char *text)
855 amb 361 {
856     if(_type_&XMLPARSE_TAG_START && store)
857     {
858 amb 373 XMLPARSE_ASSERT_STRING(_tag_,text);
859 amb 361
860     translate_gpx_name=strcpy(malloc(strlen(text)+1),text);
861     }
862 amb 363
863     return(0);
864 amb 361 }
865    
866    
867     /*++++++++++++++++++++++++++++++++++++++
868     The function that is called when the GPXStepType XSD type is seen
869    
870 amb 367 int GPXStepType_function Returns 0 if no error occured or something else otherwise.
871 amb 363
872 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
873    
874 amb 361 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
875    
876     const char *text The contents of the 'text' attribute (or NULL if not defined).
877     ++++++++++++++++++++++++++++++++++++++*/
878    
879 amb 373 static int GPXStepType_function(const char *_tag_,int _type_,const char *text)
880 amb 361 {
881     if(_type_&XMLPARSE_TAG_START && store)
882     {
883 amb 373 XMLPARSE_ASSERT_STRING(_tag_,text);
884 amb 361
885     translate_gpx_step=strcpy(malloc(strlen(text)+1),text);
886     }
887 amb 363
888     return(0);
889 amb 361 }
890    
891    
892     /*++++++++++++++++++++++++++++++++++++++
893     The function that is called when the GPXFinalType XSD type is seen
894    
895 amb 367 int GPXFinalType_function Returns 0 if no error occured or something else otherwise.
896 amb 363
897 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
898    
899 amb 361 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
900    
901     const char *text The contents of the 'text' attribute (or NULL if not defined).
902     ++++++++++++++++++++++++++++++++++++++*/
903    
904 amb 373 static int GPXFinalType_function(const char *_tag_,int _type_,const char *text)
905 amb 361 {
906     if(_type_&XMLPARSE_TAG_START && store)
907     {
908 amb 373 XMLPARSE_ASSERT_STRING(_tag_,text);
909 amb 361
910     translate_gpx_final=strcpy(malloc(strlen(text)+1),text);
911     }
912 amb 363
913     return(0);
914 amb 361 }
915    
916    
917     /*++++++++++++++++++++++++++++++++++++++
918 amb 363 The function that is called when the GPXType XSD type is seen
919    
920 amb 367 int GPXType_function Returns 0 if no error occured or something else otherwise.
921 amb 363
922 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
923    
924 amb 363 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     ++++++++++++++++++++++++++++++++++++++*/
926    
927 amb 373 //static int GPXType_function(const char *_tag_,int _type_)
928 amb 363 //{
929 amb 375 // return(0);
930 amb 363 //}
931    
932    
933     /*++++++++++++++++++++++++++++++++++++++
934 amb 361 The function that is called when the languageType XSD type is seen
935    
936 amb 367 int languageType_function Returns 0 if no error occured or something else otherwise.
937 amb 363
938 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
939    
940 amb 361 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
941    
942     const char *lang The contents of the 'lang' attribute (or NULL if not defined).
943     ++++++++++++++++++++++++++++++++++++++*/
944    
945 amb 373 static int languageType_function(const char *_tag_,int _type_,const char *lang)
946 amb 361 {
947     static int first=1;
948    
949     if(_type_&XMLPARSE_TAG_START)
950     {
951 amb 373 XMLPARSE_ASSERT_STRING(_tag_,lang);
952 amb 361
953     if(!store_lang && first)
954     store=1;
955     else if(!strcmp(store_lang,lang))
956     store=1;
957     else
958     store=0;
959    
960     first=0;
961     }
962    
963     if(_type_&XMLPARSE_TAG_END && store)
964     {
965     store=0;
966     stored=1;
967     }
968 amb 363
969     return(0);
970 amb 361 }
971    
972    
973     /*++++++++++++++++++++++++++++++++++++++
974 amb 363 The function that is called when the RoutinoTranslationsType XSD type is seen
975    
976 amb 367 int RoutinoTranslationsType_function Returns 0 if no error occured or something else otherwise.
977 amb 363
978 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
979    
980 amb 363 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     ++++++++++++++++++++++++++++++++++++++*/
982    
983 amb 373 //static int RoutinoTranslationsType_function(const char *_tag_,int _type_)
984 amb 363 //{
985 amb 375 // return(0);
986 amb 363 //}
987    
988    
989     /*++++++++++++++++++++++++++++++++++++++
990 amb 367 The function that is called when the XML declaration is seen
991 amb 363
992 amb 367 int xmlDeclaration_function Returns 0 if no error occured or something else otherwise.
993 amb 363
994 amb 373 const char *_tag_ Set to the name of the element tag that triggered this function call.
995    
996 amb 363 int _type_ Set to XMLPARSE_TAG_START at the start of a tag and/or XMLPARSE_TAG_END at the end of a tag.
997    
998     const char *version The contents of the 'version' attribute (or NULL if not defined).
999    
1000     const char *encoding The contents of the 'encoding' attribute (or NULL if not defined).
1001     ++++++++++++++++++++++++++++++++++++++*/
1002    
1003 amb 373 //static int xmlDeclaration_function(const char *_tag_,int _type_,const char *version,const char *encoding)
1004 amb 363 //{
1005 amb 375 // return(0);
1006 amb 363 //}
1007    
1008    
1009     /*++++++++++++++++++++++++++++++++++++++
1010 amb 361 The XML translation parser.
1011    
1012     int ParseXMLTranslations Returns 0 if OK or something else in case of an error.
1013    
1014     const char *filename The name of the file to read.
1015    
1016     const char *language The language to search for (NULL means first in file).
1017     ++++++++++++++++++++++++++++++++++++++*/
1018    
1019     int ParseXMLTranslations(const char *filename,const char *language)
1020     {
1021     int retval;
1022    
1023     store_lang=language;
1024    
1025     if(!ExistsFile(filename))
1026     {
1027     fprintf(stderr,"Error: Specified translations file '%s' does not exist.\n",filename);
1028     return(1);
1029     }
1030    
1031     FILE *file=fopen(filename,"r");
1032    
1033     if(!file)
1034     {
1035     fprintf(stderr,"Error: Cannot open translations file '%s' for reading.\n",filename);
1036     return(1);
1037     }
1038    
1039 amb 375 retval=ParseXML(file,xml_toplevel_tags,XMLPARSE_UNKNOWN_ATTR_ERRNONAME|XMLPARSE_RETURN_ATTR_ENCODED);
1040 amb 361
1041     fclose(file);
1042    
1043 amb 363 if(retval)
1044 amb 361 return(1);
1045    
1046     if(language && !stored)
1047     fprintf(stderr,"Warning: Cannot find translations for language '%s' using English instead.\n",language);
1048    
1049     return(0);
1050     }

Properties

Name Value
cvs:description File containing translation parsing functions.