diff options
Diffstat (limited to 'navit/tools/gpx2navit_txt/src/parser.c')
-rw-r--r-- | navit/tools/gpx2navit_txt/src/parser.c | 121 |
1 files changed, 58 insertions, 63 deletions
diff --git a/navit/tools/gpx2navit_txt/src/parser.c b/navit/tools/gpx2navit_txt/src/parser.c index dc62d71f1..d15a17e55 100644 --- a/navit/tools/gpx2navit_txt/src/parser.c +++ b/navit/tools/gpx2navit_txt/src/parser.c @@ -27,8 +27,7 @@ void parseMain(g2sprop * prop); /** * a handler to parse charctor data on expat */ -void charHandle(void *userdata, const XML_Char * data, int length) -{ +void charHandle(void *userdata, const XML_Char * data, int length) { static int bufsize = DATABUFSIZE; static int string_length = 0; int new_length; @@ -36,40 +35,39 @@ void charHandle(void *userdata, const XML_Char * data, int length) int i; parsedata *pdata = (parsedata *) userdata; if (pdata->bufptr == NULL) { - //start of buffer -->pdata->bufptr set to 0 at endelement - string_length = 0; + //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; + 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; + 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]); - } - } + 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) -{ +void startElement(void *userdata, const char *element, const char **attr) { parsedata *pdata = (parsedata *) userdata; pdata->parent = pdata->current; pdata->current = malloc(sizeof(parent)); @@ -78,14 +76,14 @@ void startElement(void *userdata, const char *element, const char **attr) 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"); + 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++; } @@ -93,16 +91,15 @@ void startElement(void *userdata, const char *element, const char **attr) /** * a handler when a element ends */ -void endElement(void *userdata, const char *element) -{ +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); + 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); @@ -110,33 +107,31 @@ void endElement(void *userdata, const char *element) pdata->parent = pdata->parent->parentptr; } -void parseMain(g2sprop * prop) -{ +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); + 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); + 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)); + (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); + if (pdata->fp == NULL) { + //todo + fprintf(stderr,"Failure opening File %s for writing",output_wpt); exit(1); } free(output_wpt); @@ -144,23 +139,23 @@ void parseMain(g2sprop * prop) 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); - } + 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); |