version 1.1, 2019/03/26 18:32:07 |
version 1.2, 2019/03/26 20:54:43 |
Line 176 static const struct element elements[] = { |
|
Line 176 static const struct element elements[] = { |
|
{ "varname", NODE_VARNAME }, |
{ "varname", NODE_VARNAME }, |
{ "warning", NODE_WARNING }, |
{ "warning", NODE_WARNING }, |
{ "wordasword", NODE_WORDASWORD }, |
{ "wordasword", NODE_WORDASWORD }, |
|
{ "xi:include", NODE_WARN }, |
{ "year", NODE_YEAR }, |
{ "year", NODE_YEAR }, |
{ NULL, NODE__MAX } |
{ NULL, NODE__MAX } |
}; |
}; |
Line 262 xml_elem_start(void *arg, const XML_Char *name, const |
|
Line 263 xml_elem_start(void *arg, const XML_Char *name, const |
|
if (ps->tree->flags && TREE_FAIL) |
if (ps->tree->flags && TREE_FAIL) |
return; |
return; |
|
|
/* FIXME: find a better way to ditch other namespaces. */ |
|
if (strcmp(name, "xi:include") == 0) |
|
return; |
|
|
|
/* Close out the text node, if there is one. */ |
/* Close out the text node, if there is one. */ |
if (ps->cur != NULL && ps->cur->node == NODE_TEXT) { |
if (ps->cur != NULL && ps->cur->node == NODE_TEXT) { |
pnode_trim(ps->cur); |
pnode_trim(ps->cur); |
Line 284 xml_elem_start(void *arg, const XML_Char *name, const |
|
Line 281 xml_elem_start(void *arg, const XML_Char *name, const |
|
return; |
return; |
} |
} |
|
|
if (elem->node == NODE_INLINEEQUATION) |
switch (elem->node) { |
|
case NODE_WARN: |
|
if (ps->warn) |
|
fprintf(stderr, "%s:%zu:%zu: warning: " |
|
"ignoring element <%s>\n", ps->fname, |
|
XML_GetCurrentLineNumber(ps->xml), |
|
XML_GetCurrentColumnNumber(ps->xml), name); |
|
/* FALLTHROUGH */ |
|
case NODE_IGNORE: |
|
return; |
|
case NODE_INLINEEQUATION: |
ps->tree->flags |= TREE_EQN; |
ps->tree->flags |= TREE_EQN; |
|
break; |
|
default: |
|
break; |
|
} |
|
|
if ((dat = calloc(1, sizeof(*dat))) == NULL) { |
if ((dat = calloc(1, sizeof(*dat))) == NULL) { |
perror(NULL); |
perror(NULL); |
|
|
xml_elem_end(void *arg, const XML_Char *name) |
xml_elem_end(void *arg, const XML_Char *name) |
{ |
{ |
struct parse *ps; |
struct parse *ps; |
|
const struct element *elem; |
|
|
ps = arg; |
ps = arg; |
if (ps->tree->flags && TREE_FAIL) |
if (ps->tree->flags && TREE_FAIL) |
return; |
return; |
|
|
/* FIXME: find a better way to ditch other namespaces. */ |
|
if (strcmp(name, "xi:include") == 0) |
|
return; |
|
|
|
/* Close out the text node, if there is one. */ |
/* Close out the text node, if there is one. */ |
if (ps->cur->node == NODE_TEXT) { |
if (ps->cur->node == NODE_TEXT) { |
pnode_trim(ps->cur); |
pnode_trim(ps->cur); |
ps->cur = ps->cur->parent; |
ps->cur = ps->cur->parent; |
} |
} |
ps->cur = ps->cur->parent; |
|
|
for (elem = elements; elem->name != NULL; elem++) |
|
if (strcmp(elem->name, name) == 0) |
|
break; |
|
|
|
switch (elem->node) { |
|
case NODE_IGNORE: |
|
case NODE_WARN: |
|
break; |
|
default: |
|
assert(elem->node == ps->cur->node); |
|
ps->cur = ps->cur->parent; |
|
} |
} |
} |
|
|
struct parse * |
struct parse * |