summaryrefslogtreecommitdiff
path: root/navit/tools/gpx2navit_txt/src/parser.c
diff options
context:
space:
mode:
Diffstat (limited to 'navit/tools/gpx2navit_txt/src/parser.c')
-rw-r--r--navit/tools/gpx2navit_txt/src/parser.c148
1 files changed, 0 insertions, 148 deletions
diff --git a/navit/tools/gpx2navit_txt/src/parser.c b/navit/tools/gpx2navit_txt/src/parser.c
deleted file mode 100644
index 70104daf..00000000
--- a/navit/tools/gpx2navit_txt/src/parser.c
+++ /dev/null
@@ -1,148 +0,0 @@
-#include "gpx2navit_txt.h"
-
-void charHandle(void *userdata, const XML_Char * data, int length);
-void startElement(void *userdata, const char *element, const char **attr);
-void endElement(void *userdata, const char *element);
-void parseMain(g2sprop * prop);
-
-/**
- * a handler to parse charctor data on expat
- */
-void charHandle(void *userdata, const XML_Char * data, int length)
-{
- static int bufsize = DATABUFSIZE;
- static int string_length = 0;
- int new_length;
- static int begin_copy = 0;
- int i;
- parsedata *pdata = (parsedata *) userdata;
- if (pdata->bufptr == NULL) {
- //start of buffer -->pdata->bufptr set to 0 at endelement
- string_length = 0;
- begin_copy = 0; //begin to copy after first space
- pdata->bufptr= pdata->databuf;
- }
- new_length = string_length + length + 1; //additonal 0
- if (bufsize < new_length) {
- pdata->databuf =
- realloc(pdata->databuf, new_length);
- bufsize = new_length;
- //because of realloc the pointer may have changed
- pdata->bufptr = pdata->databuf + string_length;
- }
- // because expat calls this routine several times on special chars
- // we need to do following
- // --concat strings until reset (bufptr set to NULL)
- // --filter out blank chars at begin of string
- for (i=0; i<length;i++) {
- if (begin_copy || !isspace(data[i])) {
- *pdata->bufptr = data[i];
- pdata->bufptr++;
- string_length ++;
- begin_copy = 1;
- if (DEBUG) fprintf(stderr,"%c",data[i]);
- }
- }
- *pdata->bufptr = '\0';
-}
-
-/**
- * a handler when a element starts
- */
-void startElement(void *userdata, const char *element, const char **attr)
-{
- parsedata *pdata = (parsedata *) userdata;
- pdata->parent = pdata->current;
- pdata->current = malloc(sizeof(parent));
- pdata->current->name = malloc(sizeof(char) * (strlen(element) + 1));
- strcpy(pdata->current->name, element);
- pdata->current->parentptr = pdata->parent;
- startElementControl(pdata, element, attr);
- if (pdata->prop->verbose) {
- int i;
- for (i = 0; i < pdata->depth; i++)
- printf(" ");
- printf("<%s>: ", element);
- for (i = 0; attr[i]; i += 2) {
- printf(" %s='%s'", attr[i], attr[i + 1]);
- }
- printf("\n");
- }
- pdata->depth++;
-}
-
-/**
- * a handler when a element ends
- */
-void endElement(void *userdata, const char *element)
-{
- parsedata *pdata = (parsedata *) userdata;
- endElementControl(pdata, element);
- pdata->depth--;
- if (pdata->prop->verbose) {
- int i;
- for (i = 0; i < pdata->depth; i++)
- printf(" ");
- printf("</%s>:%s\n ", element,pdata->parent->name);
- }
- free(pdata->current->name);
- free(pdata->current);
- pdata->current = pdata->parent;
- pdata->parent = pdata->parent->parentptr;
-}
-
-void parseMain(g2sprop * prop)
-{
- FILE *fp;
- char buff[BUFFSIZE];
- XML_Parser parser;
- parsedata *pdata;
- fp = fopen(prop->sourcefile, "r");
- if (fp == NULL) {
- fprintf(stderr, "Cannot open gpx file: %s\n", prop->sourcefile);
- exit(ERR_CANNOTOPEN);
- }
- parser = XML_ParserCreate(NULL);
- if (!parser) {
- fprintf(stderr, "Couldn't allocate memory for parser\n");
- exit(ERR_OUTOFMEMORY);
- }
- pdata = createParsedata(parser, prop);
-
- char *output_wpt =
- (char *) malloc(sizeof(char) * (strlen(pdata->prop->output) + 9));
- strcpy(output_wpt, pdata->prop->output);
- strcat(output_wpt, "_nav.txt");
- pdata->fp = fopen(output_wpt,"w");
- if (pdata->fp == NULL)
- {
- //todo
- fprintf(stderr,"Failure opening File %s for writing",output_wpt);
- exit(1);
- }
- free(output_wpt);
- XML_SetUserData(parser, pdata);
- XML_SetElementHandler(parser, startElement, endElement);
- XML_SetCharacterDataHandler(parser, charHandle);
- for (;;) {
- int done;
- int len;
- fgets(buff, BUFFSIZE, fp);
- len = (int) strlen(buff);
- if (ferror(fp)) {
- fprintf(stderr, "Read error file: %s\n", prop->sourcefile);
- exit(ERR_READERROR);
- }
- done = feof(fp);
- if (done)
- break;
- if (!XML_Parse(parser, buff, len, done)) {
- fprintf(stderr, "Parse error at line %d:\n%s\n",
- XML_GetCurrentLineNumber(parser),
- XML_ErrorString(XML_GetErrorCode(parser)));
- exit(ERR_PARSEERROR);
- }
- }
- fclose(pdata->fp); //close out file
- closeParsedata(pdata);
-}