=================================================================== RCS file: /cvs/docbook2mdoc/parse.c,v retrieving revision 1.24 retrieving revision 1.27 diff -u -p -r1.24 -r1.27 --- docbook2mdoc/parse.c 2019/04/08 22:47:34 1.24 +++ docbook2mdoc/parse.c 2019/04/09 12:23:34 1.27 @@ -1,4 +1,4 @@ -/* $Id: parse.c,v 1.24 2019/04/08 22:47:34 schwarze Exp $ */ +/* $Id: parse.c,v 1.27 2019/04/09 12:23:34 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze @@ -213,7 +213,7 @@ static const struct element elements[] = { { "varname", NODE_VARNAME }, { "warning", NODE_WARNING }, { "wordasword", NODE_WORDASWORD }, - { "xi:include", NODE_DELETE_WARN }, + { "xi:include", NODE_INCLUDE }, { "year", NODE_YEAR }, { NULL, NODE_IGNORE } }; @@ -409,8 +409,15 @@ xml_entity(struct parse *p, const char *name) TAILQ_FOREACH(dat, &p->doctype->childq, child) { if ((ccp = pnode_getattr_raw(dat, ATTRKEY_NAME, NULL)) == NULL || - strcmp(ccp, name) != 0 || - (ccp = pnode_getattr_raw(dat, + strcmp(ccp, name) != 0) + continue; + if ((ccp = pnode_getattr_raw(dat, + ATTRKEY_SYSTEM, NULL)) != NULL) { + parse_file(p, -1, ccp); + p->flags &= ~PFLAG_SPC; + return; + } + if ((ccp = pnode_getattr_raw(dat, ATTRKEY_DEFINITION, NULL)) == NULL) continue; if ((cp = strdup(ccp)) == NULL) { @@ -624,6 +631,7 @@ xml_attrval(struct parse *ps, const char *name) perror(NULL); exit(1); } + ps->flags &= ~PFLAG_ATTR; } /* @@ -634,6 +642,8 @@ static void xml_elem_end(struct parse *ps, const char *name) { const struct element *elem; + struct pnode *n; + const char *cp; enum nodeid node; /* @@ -663,6 +673,18 @@ xml_elem_end(struct parse *ps, const char *name) ps->del--; break; case NODE_IGNORE: + break; + case NODE_INCLUDE: + n = ps->cur; + ps->cur = ps->cur->parent; + cp = pnode_getattr_raw(n, ATTRKEY_HREF, NULL); + if (cp == NULL) + error_msg(ps, " element " + "without href attribute"); + else + parse_file(ps, -1, cp); + pnode_unlink(n); + ps->flags &= ~PFLAG_SPC; break; case NODE_DOCTYPE: ps->flags &= ~PFLAG_EEND;