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.c121
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);