From b96e64384985b150d7730d860c05514315f8d4a6 Mon Sep 17 00:00:00 2001 From: Daniel Veillard Date: Sun, 29 Aug 1999 21:02:19 +0000 Subject: [PATCH] Release 1.6, lot of fixes, more validation, code cleanup, added namespace on attributes, Daniel. --- ChangeLog | 11 +- HTMLparser.c | 44 +- HTMLparser.h | 4 +- SAX.c | 174 ++- configure.in | 2 +- debugXML.c | 4 +- encoding.c | 14 +- encoding.h | 2 +- entities.c | 15 +- entities.h | 44 +- error.c | 41 +- include/libxml/HTMLparser.h | 4 +- include/libxml/encoding.h | 2 +- include/libxml/entities.h | 44 +- include/libxml/parser.h | 122 +- include/libxml/parserInternals.h | 235 ++-- include/libxml/tree.h | 238 ++-- include/libxml/valid.h | 127 +- include/libxml/xmlIO.h | 27 +- include/libxml/xpath.h | 19 +- parser.c | 244 ++-- parser.h | 122 +- parserInternals.h | 235 ++-- result/VC/AttributeDefaultLegal | 6 +- result/XPath/tests/chaptersbase | 15 +- result/XPath/tests/simpleabbr | 2 +- result/XPath/tests/simplebase | 8 +- result/noent/dia1 | 120 +- result/noent/dia2 | 120 +- result/noent/ent2 | 2 +- result/noent/ent3 | 7 + result/noent/ent4 | 7 + result/noent/p3p | 22 + result/noent/rdf1 | 81 ++ result/noent/rdf2 | 1899 +++++++++++++++++++++++++++++ result/noent/svg1 | 292 ++--- result/noent/svg2 | 46 +- result/noent/svg3 | 960 +++++++-------- result/noent/xml1 | 11 + result/valid/REC-xml-19980210.xml | 99 +- result/valid/xlink.xml | 80 +- test/XPath/tests/chaptersbase | 2 +- test/XPath/tests/simpleabbr | 2 +- test/XPath/tests/simplebase | 2 +- testHTML.c | 2 +- testSAX.c | 57 +- testXPath.c | 8 +- tester.c | 26 +- tree.c | 324 ++++- tree.h | 238 ++-- valid.c | 110 +- valid.h | 127 +- xml-config.in | 2 +- xml-error.h | 16 +- xmlIO.c | 84 +- xmlIO.h | 27 +- xpath.c | 547 ++++++--- xpath.h | 19 +- 58 files changed, 5241 insertions(+), 1903 deletions(-) diff --git a/ChangeLog b/ChangeLog index 66303d09..791bba7c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,4 +1,13 @@ -Mon Aug 16 03:27:38 CEST 1999 +Sun Aug 29 22:27:29 CEST 1999 Daniel Veillard + + * all .h : changed the prototype declaration indent as in gtk + * most .c : working on reducing the TODOs in the code + * most .c : cleanup though -pedantic and Insure++ + * improvements on validation ID checkings. + * tree.[ch] SAX.c: added support for namespace on attributes #2022 + * xml-config.in: closed #1810 + +Mon Aug 16 03:27:38 CEST 1999 Daniel Veillard * tree.h, valid.c, valid.h: more work on validity, IDs * xpath.c: added/fixed comparidon and equlity, added a new isinf diff --git a/HTMLparser.c b/HTMLparser.c index 9b41542b..a12b04a4 100644 --- a/HTMLparser.c +++ b/HTMLparser.c @@ -269,7 +269,7 @@ htmlElemDesc html40ElementTable[] = { * any tag of each line implies the end of the current element if the type of * that element is in the same line */ -CHAR *htmlEquEnd[] = { +char *htmlEquEnd[] = { "DT", "DD", "LI", "OPTION", NULL, "H1", "H2", "H3", "H4", "H5", "H6", NULL, "OL", "MENU", "DIR", "ADDRESS", "PRE", "LISTING", "XMP", NULL, @@ -284,7 +284,7 @@ NULL /* * start tags that imply the end of current element */ -CHAR *htmlStartClose[] = { +char *htmlStartClose[] = { "FORM", "FORM", "P", "HR", "H1", "H2", "H3", "H4", "H5", "H6", "DL", "UL", "OL", "MENU", "DIR", "ADDRESS", "PRE", "LISTING", "XMP", "HEAD", NULL, @@ -338,7 +338,7 @@ CHAR *htmlStartClose[] = { NULL }; -static CHAR** htmlStartCloseIndex[100]; +static char** htmlStartCloseIndex[100]; static int htmlStartCloseIndexinitialized = 0; /************************************************************************ @@ -382,7 +382,7 @@ htmlTagLookup(const CHAR *tag) { for (i = 0; i < (sizeof(html40ElementTable) / sizeof(html40ElementTable[0]));i++) { - if (!xmlStrcmp(tag, html40ElementTable[i].name)) + if (!xmlStrcmp(tag, BAD_CAST html40ElementTable[i].name)) return(&html40ElementTable[i]); } return(NULL); @@ -401,7 +401,7 @@ htmlTagLookup(const CHAR *tag) { int htmlCheckAutoClose(const CHAR *new, const CHAR *old) { int i, index; - CHAR **close; + char **close; if (htmlStartCloseIndexinitialized == 0) htmlInitAutoClose(); @@ -409,13 +409,13 @@ htmlCheckAutoClose(const CHAR *new, const CHAR *old) { for (index = 0; index < 100;index++) { close = htmlStartCloseIndex[index]; if (close == NULL) return(0); - if (!xmlStrcmp(*close, new)) break; + if (!xmlStrcmp(BAD_CAST *close, new)) break; } i = close - htmlStartClose; i++; while (htmlStartClose[i] != NULL) { - if (!xmlStrcmp(htmlStartClose[i], old)) { + if (!xmlStrcmp(BAD_CAST htmlStartClose[i], old)) { return(1); } i++; @@ -789,7 +789,7 @@ htmlEntityLookup(const CHAR *name) { for (i = 0;i < (sizeof(html40EntitiesTable)/ sizeof(html40EntitiesTable[0]));i++) { - if (!xmlStrcmp(name, html40EntitiesTable[i].name)) { + if (!xmlStrcmp(name, BAD_CAST html40EntitiesTable[i].name)) { #ifdef DEBUG printf("Found entity %s\n", name); #endif @@ -850,7 +850,7 @@ htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len, if (CUR == '&') { if (NXT(1) == '#') { int val = htmlParseCharRef(ctxt); - /* TODO: invalid for UTF-8 variable encoding !!! */ + /* invalid for UTF-8 variable encoding !!!!! */ *out++ = val; nbchars += 3; /* !!!! */ } else { @@ -871,7 +871,7 @@ htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len, } *out++ = ';'; } else { - /* TODO: invalid for UTF-8 variable encoding !!! */ + /* invalid for UTF-8 variable encoding !!!!! */ *out++ = (CHAR)ent->value; if (out - buffer > buffer_size - 100) { int index = out - buffer; @@ -885,7 +885,7 @@ htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len, } } } else { - /* TODO: invalid for UTF-8 , use COPY(out); */ + /* invalid for UTF-8 , use COPY(out); !!!!! */ *out++ = CUR; nbchars++; if (out - buffer > buffer_size - 100) { @@ -1050,8 +1050,6 @@ htmlSwitchEncoding(htmlParserCtxtPtr ctxt, xmlCharEncoding enc) * * Is this a sequence of blank chars that one can ignore ? * - * TODO: to be corrected accodingly to DTD information if available - * * Returns 1 if ignorable 0 otherwise. */ @@ -1125,7 +1123,7 @@ htmlNewDoc(const CHAR *URI, const CHAR *ExternalID) { cur->type = XML_DOCUMENT_NODE; cur->version = NULL; cur->intSubset = NULL; - xmlCreateIntSubset(cur, "HTML", ExternalID, URI); + xmlCreateIntSubset(cur, BAD_CAST "HTML", ExternalID, URI); cur->name = NULL; cur->root = NULL; cur->extSubset = NULL; @@ -1338,7 +1336,7 @@ htmlParseEntityRef(htmlParserCtxtPtr ctxt, CHAR **str) { "htmlParseEntityRef: expecting ';'\n"); ctxt->wellFormed = 0; if (ctxt->sax->characters != NULL) { - ctxt->sax->characters(ctxt->userData, "&", 1); + ctxt->sax->characters(ctxt->userData, BAD_CAST "&", 1); ctxt->sax->characters(ctxt->userData, name, xmlStrlen(name)); } free(name); @@ -1817,7 +1815,6 @@ htmlParseDocTypeDecl(htmlParserCtxtPtr ctxt) { /* * Cleanup, since we don't use all those identifiers - * TODO : the DOCTYPE if available should be stored ! */ if (URI != NULL) free(URI); if (ExternalID != NULL) free(ExternalID); @@ -2113,7 +2110,7 @@ htmlParseReference(htmlParserCtxtPtr ctxt) { if (NXT(1) == '#') { val = htmlParseCharRef(ctxt); - /* TODO: invalid for UTF-8 variable encoding !!! */ + /* invalid for UTF-8 variable encoding !!!!! */ out[0] = val; out[1] = 0; if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL)) @@ -2123,12 +2120,12 @@ htmlParseReference(htmlParserCtxtPtr ctxt) { if (name == NULL) return; /* Shall we output & anyway ? */ if ((ent == NULL) || (ent->value <= 0) || (ent->value >= 255)) { if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL)) { - ctxt->sax->characters(ctxt->userData, "&", 1); + ctxt->sax->characters(ctxt->userData, BAD_CAST "&", 1); ctxt->sax->characters(ctxt->userData, name, xmlStrlen(name)); - ctxt->sax->characters(ctxt->userData, ";", 1); + ctxt->sax->characters(ctxt->userData, BAD_CAST ";", 1); } } else { - /* TODO: invalid for UTF-8 variable encoding !!! */ + /* invalid for UTF-8 variable encoding !!!!! */ out[0] = ent->value; out[1] = 0; if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL)) @@ -2339,16 +2336,11 @@ htmlParseDocument(htmlParserCtxtPtr ctxt) { GROW; /* - * SAX: beginning of the document processing TODO: update for HTML. + * SAX: beginning of the document processing. */ if ((ctxt->sax) && (ctxt->sax->setDocumentLocator)) ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator); - /* - * We should check for encoding here and plug-in some - * conversion code TODO !!!! - */ - /* * Wipe out everything which is before the first '<' */ diff --git a/HTMLparser.h b/HTMLparser.h index 749566ca..ebcd9968 100644 --- a/HTMLparser.h +++ b/HTMLparser.h @@ -27,7 +27,7 @@ typedef xmlNodePtr htmlNodePtr; * Internal description of an HTML element */ typedef struct htmlElemDesc { - const CHAR *name; /* The tag name */ + const char *name; /* The tag name */ int startTag; /* Whether the start tag can be implied */ int endTag; /* Whether the end tag can be implied */ int empty; /* Is this an empty element ? */ @@ -41,7 +41,7 @@ typedef struct htmlElemDesc { */ typedef struct htmlEntityDesc { int value; /* the UNICODE value for the character */ - const CHAR *name; /* The entity name */ + const char *name; /* The entity name */ const char *desc; /* the description */ } htmlEntityDesc, *htmlEntityDescPtr; diff --git a/SAX.c b/SAX.c index 28bf0c2f..60e6ff85 100644 --- a/SAX.c +++ b/SAX.c @@ -14,8 +14,10 @@ #include "valid.h" #include "entities.h" #include "xml-error.h" +#include "debugXML.h" /* #define DEBUG_SAX */ +/* #define DEBUG_SAX_TREE */ /** * getPublicId: @@ -45,7 +47,7 @@ const CHAR * getSystemId(void *ctx) { xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; - return(ctxt->input->filename); + return(BAD_CAST ctxt->input->filename); } /** @@ -164,7 +166,7 @@ internalSubset(void *ctx, const CHAR *name, * Ask the Entity resolver to load the damn thing */ if ((ctxt->directory != NULL) && (dtdCtxt->directory == NULL)) - dtdCtxt->directory = xmlStrdup(ctxt->directory); + dtdCtxt->directory = (char *) xmlStrdup(BAD_CAST ctxt->directory); if ((dtdCtxt->sax != NULL) && (dtdCtxt->sax->resolveEntity != NULL)) input = dtdCtxt->sax->resolveEntity(dtdCtxt->userData, ExternalID, @@ -182,7 +184,7 @@ internalSubset(void *ctx, const CHAR *name, xmlSwitchEncoding(dtdCtxt, enc); if (input->filename == NULL) - input->filename = xmlStrdup(SystemID); + input->filename = (char *) xmlStrdup(SystemID); input->line = 1; input->col = 1; input->base = dtdCtxt->input->cur; @@ -234,15 +236,13 @@ resolveEntity(void *ctx, const CHAR *publicId, const CHAR *systemId) #endif /* - * TODO : not 100% sure that the appropriate handling in that case. + * TODO : resolveEntity, handling of http://.. or ftp://.. */ if (systemId != NULL) { - if (!xmlStrncmp(systemId, "http://", 7)) { - /* !!!!!!!!! TODO */ - } else if (!xmlStrncmp(systemId, "ftp://", 6)) { - /* !!!!!!!!! TODO */ + if (!xmlStrncmp(systemId, BAD_CAST "http://", 7)) { + } else if (!xmlStrncmp(systemId, BAD_CAST "ftp://", 6)) { } else { - return(xmlNewInputFromFile(ctxt, systemId)); + return(xmlNewInputFromFile(ctxt, (char *) systemId)); } } return(NULL); @@ -390,7 +390,6 @@ elementDecl(void *ctx, const CHAR *name, int type, * @systemId: The system ID of the entity * * What to do when a notation declaration has been parsed. - * TODO Not handled currently. */ void notationDecl(void *ctx, const CHAR *name, @@ -421,18 +420,24 @@ notationDecl(void *ctx, const CHAR *name, * @notationName: the name of the notation * * What to do when an unparsed entity declaration is parsed - * TODO Create an Entity node. */ void unparsedEntityDecl(void *ctx, const CHAR *name, const CHAR *publicId, const CHAR *systemId, const CHAR *notationName) { - /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */ + xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; #ifdef DEBUG_SAX fprintf(stderr, "SAX.unparsedEntityDecl(%s, %s, %s, %s)\n", name, publicId, systemId, notationName); #endif + if (ctxt->validate && ctxt->wellFormed && + ctxt->myDoc && ctxt->myDoc->intSubset) + ctxt->valid &= xmlValidateNotationUse(&ctxt->vctxt, ctxt->myDoc, + notationName); + xmlAddDocEntity(ctxt->myDoc, name, + XML_EXTERNAL_GENERAL_UNPARSED_ENTITY, + publicId, systemId, notationName); } /** @@ -510,6 +515,7 @@ attribute(void *ctx, const CHAR *fullname, const CHAR *value) xmlAttrPtr ret; CHAR *name; CHAR *ns; + xmlNsPtr namespace; /**************** #ifdef DEBUG_SAX @@ -543,15 +549,29 @@ attribute(void *ctx, const CHAR *fullname, const CHAR *value) return; } - ret = xmlNewProp(ctxt->node, name, NULL); + namespace = xmlSearchNs(ctxt->myDoc, ctxt->node, ns); + /* !!!!!! */ + ret = xmlNewNsProp(ctxt->node, namespace, name, NULL); - if ((ret != NULL) && (ctxt->replaceEntities == 0)) - ret->val = xmlStringGetNodeList(ctxt->myDoc, value); + if (ret != NULL) { + if (ctxt->replaceEntities == 0) + ret->val = xmlStringGetNodeList(ctxt->myDoc, value); + else + ret->val = xmlNewDocText(ctxt->myDoc, value); + } if (ctxt->validate && ctxt->wellFormed && ctxt->myDoc && ctxt->myDoc->intSubset) ctxt->valid &= xmlValidateOneAttribute(&ctxt->vctxt, ctxt->myDoc, ctxt->node, ret, value); + else { + /* + * when validating, the ID registration is done at the attribute + * validation level. Otherwise we have to do specific handling here. + */ + if (xmlIsID(ctxt->myDoc, ctxt->node, ret)) + xmlAddID(&ctxt->vctxt, ctxt->myDoc, value, ret); + } if (name != NULL) free(name); @@ -566,7 +586,6 @@ attribute(void *ctx, const CHAR *fullname, const CHAR *value) * @atts: An array of name/value attributes pairs, NULL terminated * * called when an opening tag has been processed. - * TODO We currently have a small pblm with the arguments ... */ void startElement(void *ctx, const CHAR *fullname, const CHAR **atts) @@ -598,32 +617,67 @@ startElement(void *ctx, const CHAR *fullname, const CHAR **atts) */ ret = xmlNewDocNode(ctxt->myDoc, NULL, name, NULL); if (ret == NULL) return; - if (ctxt->myDoc->root == NULL) + if (ctxt->myDoc->root == NULL) { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "Setting %s as root\n", name); +#endif ctxt->myDoc->root = ret; + } else if (parent == NULL) { + parent = ctxt->myDoc->root; + } /* * We are parsing a new node. */ +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "pushing(%s)\n", name); +#endif nodePush(ctxt, ret); /* * Link the child element */ - if (parent != NULL) - xmlAddChild(parent, ctxt->node); + if (parent != NULL) { + if (parent->type == XML_ELEMENT_NODE) { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "adding child %s to %s\n", name, parent->name); +#endif + xmlAddChild(parent, ret); + } else { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "adding sibling %s to ", name); + xmlDebugDumpOneNode(stderr, parent, 0); +#endif + xmlAddSibling(parent, ret); + } + } /* - * process all the attributes. + * process all the attributes whose name start with "xml" */ if (atts != NULL) { i = 0; att = atts[i++]; value = atts[i++]; while ((att != NULL) && (value != NULL)) { - /* - * Handle one pair of attribute/value - */ - attribute(ctxt, att, value); + if ((att[0] == 'x') && (att[1] == 'm') && (att[2] == 'l')) + attribute(ctxt, att, value); + + att = atts[i++]; + value = atts[i++]; + } + } + + /* + * process all the other attributes + */ + if (atts != NULL) { + i = 0; + att = atts[i++]; + value = atts[i++]; + while ((att != NULL) && (value != NULL)) { + if ((att[0] != 'x') || (att[1] != 'm') || (att[2] != 'l')) + attribute(ctxt, att, value); /* * Next ones @@ -687,6 +741,9 @@ endElement(void *ctx, const CHAR *name) /* * end of parsing of this node. */ +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "popping(%s)\n", cur->name); +#endif nodePop(ctxt); } @@ -707,6 +764,9 @@ reference(void *ctx, const CHAR *name) fprintf(stderr, "SAX.reference(%s)\n", name); #endif ret = xmlNewReference(ctxt->myDoc, name); +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "add reference %s to %s \n", name, ctxt->node->name); +#endif xmlAddChild(ctxt->node, ret); } @@ -735,6 +795,9 @@ characters(void *ctx, const CHAR *ch, int len) */ lastChild = xmlGetLastChild(ctxt->node); +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "add chars to %s \n", ctxt->node->name); +#endif if (lastChild == NULL) xmlNodeAddContentLen(ctxt->node, ch, len); else { @@ -778,10 +841,40 @@ void processingInstruction(void *ctx, const CHAR *target, const CHAR *data) { - /* xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; */ + xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; + xmlNodePtr ret; + xmlNodePtr parent = ctxt->node; + #ifdef DEBUG_SAX fprintf(stderr, "SAX.processingInstruction(%s, %s)\n", target, data); #endif + + ret = xmlNewPI(target, data); + if (ret == NULL) return; + ret->doc = ctxt->myDoc; + if (ctxt->myDoc->root == NULL) { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "Setting PI %s as root\n", target); +#endif + ctxt->myDoc->root = ret; + } else if (parent == NULL) { + parent = ctxt->myDoc->root; + } + if (parent != NULL) { + if (parent->type == XML_ELEMENT_NODE) { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "adding PI child %s to %s\n", target, parent->name); +#endif + xmlAddChild(parent, ret); + } else { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "adding PI sibling %s to ", target); + xmlDebugDumpOneNode(stderr, parent, 0); +#endif + xmlAddSibling(parent, ret); + } + } + } /** @@ -885,7 +978,7 @@ checkNamespace(void *ctx, CHAR *namespace) "End tags %s holds a prefix %s not used by the open tag\n", cur->name, namespace); ctxt->wellFormed = 0; - } else if (strcmp(namespace, cur->ns->prefix)) { + } else if (xmlStrcmp(namespace, cur->ns->prefix)) { if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) ctxt->sax->error(ctxt, "Start and End tags for %s don't use the same namespaces: %s and %s\n", @@ -930,13 +1023,36 @@ comment(void *ctx, const CHAR *value) { xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; xmlNodePtr ret; + xmlNodePtr parent = ctxt->node; #ifdef DEBUG_SAX fprintf(stderr, "SAX.comment(%s)\n", value); #endif ret = xmlNewDocComment(ctxt->myDoc, value); - xmlAddChild(ctxt->node, ret); - /* !!!!! merges */ + if (ret == NULL) return; + + if (ctxt->myDoc->root == NULL) { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "Setting comment as root\n"); +#endif + ctxt->myDoc->root = ret; + } else if (parent == NULL) { + parent = ctxt->myDoc->root; + } + if (parent != NULL) { + if (parent->type == XML_ELEMENT_NODE) { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "adding comment child to %s\n", parent->name); +#endif + xmlAddChild(parent, ret); + } else { +#ifdef DEBUG_SAX_TREE + fprintf(stderr, "adding comment sibling to "); + xmlDebugDumpOneNode(stderr, parent, 0); +#endif + xmlAddSibling(parent, ret); + } + } } /** @@ -954,7 +1070,7 @@ cdataBlock(void *ctx, const CHAR *value, int len) xmlNodePtr ret; #ifdef DEBUG_SAX - fprintf(stderr, "SAX.pcdata(%s, %d)\n", name, len); + fprintf(stderr, "SAX.pcdata(%.10s, %d)\n", value, len); #endif ret = xmlNewCDataBlock(ctxt->myDoc, value, len); xmlAddChild(ctxt->node, ret); diff --git a/configure.in b/configure.in index 35294a6c..079a38f5 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,7 @@ AC_INIT(entities.h) AM_CONFIG_HEADER(config.h) LIBXML_MAJOR_VERSION=1 -LIBXML_MINOR_VERSION=5 +LIBXML_MINOR_VERSION=6 LIBXML_MICRO_VERSION=0 LIBXML_VERSION=$LIBXML_MAJOR_VERSION.$LIBXML_MINOR_VERSION.$LIBXML_MICRO_VERSION LIBXML_VERSION_INFO=`expr $LIBXML_MAJOR_VERSION + $LIBXML_MINOR_VERSION`:$LIBXML_MICRO_VERSION:$LIBXML_MINOR_VERSION diff --git a/debugXML.c b/debugXML.c index c47c0b36..69901b7c 100644 --- a/debugXML.c +++ b/debugXML.c @@ -146,7 +146,7 @@ void xmlDebugDumpOneNode(FILE *output, xmlNodePtr node, int depth) { fprintf(output, "ENTITY\n"); break; case XML_PI_NODE: - fprintf(output, "PI\n"); + fprintf(output, "PI %s\n", node->name); break; case XML_COMMENT_NODE: fprintf(output, "COMMENT\n"); @@ -252,7 +252,7 @@ void xmlDebugDumpDocument(FILE *output, xmlDocPtr doc) { } if (doc->name != NULL) { fprintf(output, "name="); - xmlDebugDumpString(output, doc->name); + xmlDebugDumpString(output, BAD_CAST doc->name); fprintf(output, "\n"); } if (doc->version != NULL) { diff --git a/encoding.c b/encoding.c index 1771ec1c..3d65469e 100644 --- a/encoding.c +++ b/encoding.c @@ -19,9 +19,13 @@ * Daniel.Veillard@w3.org */ +#include "config.h" #include #include #include +#ifdef HAVE_MALLOC_H +#include +#endif #include "encoding.h" #ifdef HAVE_UNICODE_H #include @@ -85,7 +89,8 @@ isolat1ToUTF8(unsigned char* out, int outlen, unsigned char* in, int inlen) * * Take a block of UTF-8 chars in and try to convert it to an ISO Latin 1 * block of chars out. - * TODO: need a fallback mechanism ... + * TODO: UTF8Toisolat1 need a fallback mechanism ... + * * Returns the number of byte written, or -1 by lack of space, or -2 * if the transcoding failed. */ @@ -169,7 +174,8 @@ UTF16ToUTF8(unsigned char* out, int outlen, unsigned short* in, int inlen) * * Take a block of UTF-8 chars in and try to convert it to an UTF-16 * block of chars out. - * TODO: need a fallback mechanism ... + * TODO: UTF8ToUTF16 need a fallback mechanism ... + * * Returns the number of byte written, or -1 by lack of space, or -2 * if the transcoding failed. */ @@ -416,7 +422,7 @@ xmlInitCharEncodingHandlers(void) { xmlNewCharEncodingHandler("UTF-8", NULL, NULL); #ifdef HAVE_UNICODE_H #else - xmlNewCharEncodingHandler("UTF-16", UTF16ToUTF8, UTF8ToUTF16); + /* xmlNewCharEncodingHandler("UTF-16", UTF16ToUTF8, UTF8ToUTF16); */ xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, UTF8Toisolat1); #endif } @@ -455,7 +461,7 @@ xmlRegisterCharEncodingHandler(xmlCharEncodingHandlerPtr handler) { xmlCharEncodingHandlerPtr xmlGetCharEncodingHandler(xmlCharEncoding enc) { if (handlers == NULL) xmlInitCharEncodingHandlers(); - /* TODO !!!!!!! */ + /* TODO xmlGetCharEncodingHandler !!!!!!! */ return(NULL); } diff --git a/encoding.h b/encoding.h index 227abaf0..5181caff 100644 --- a/encoding.h +++ b/encoding.h @@ -51,7 +51,7 @@ typedef enum { XML_CHAR_ENCODING_8859_9= 18,/* ISO-8859-9 */ XML_CHAR_ENCODING_2022_JP= 19,/* ISO-2022-JP */ XML_CHAR_ENCODING_SHIFT_JIS=20,/* Shift_JIS */ - XML_CHAR_ENCODING_EUC_JP= 21,/* EUC-JP */ + XML_CHAR_ENCODING_EUC_JP= 21 /* EUC-JP */ } xmlCharEncoding; /** diff --git a/entities.c b/entities.c index f0971d1c..2cedf928 100644 --- a/entities.c +++ b/entities.c @@ -50,13 +50,10 @@ void xmlFreeEntity(xmlEntityPtr entity) { /* * xmlAddEntity : register a new entity for an entities table. - * - * TODO !!! We should check here that the combination of type - * ExternalID and SystemID is valid. */ static void xmlAddEntity(xmlEntitiesTablePtr table, const CHAR *name, int type, - const CHAR *ExternalID, const CHAR *SystemID, CHAR *content) { + const CHAR *ExternalID, const CHAR *SystemID, const CHAR *content) { int i; xmlEntityPtr cur; int len; @@ -67,6 +64,7 @@ xmlAddEntity(xmlEntitiesTablePtr table, const CHAR *name, int type, /* * The entity is already defined in this Dtd, the spec says to NOT * override it ... Is it worth a Warning ??? !!! + * Not having a cprinting context this seems hard ... */ if (((type == XML_INTERNAL_PARAMETER_ENTITY) || (type == XML_EXTERNAL_PARAMETER_ENTITY)) && @@ -178,7 +176,7 @@ xmlGetPredefinedEntity(const CHAR *name) { */ void xmlAddDtdEntity(xmlDocPtr doc, const CHAR *name, int type, - const CHAR *ExternalID, const CHAR *SystemID, CHAR *content) { + const CHAR *ExternalID, const CHAR *SystemID, const CHAR *content) { xmlEntitiesTablePtr table; if (doc->extSubset == NULL) { @@ -207,7 +205,7 @@ xmlAddDtdEntity(xmlDocPtr doc, const CHAR *name, int type, */ void xmlAddDocEntity(xmlDocPtr doc, const CHAR *name, int type, - const CHAR *ExternalID, const CHAR *SystemID, CHAR *content) { + const CHAR *ExternalID, const CHAR *SystemID, const CHAR *content) { xmlEntitiesTablePtr table; if (doc == NULL) { @@ -343,8 +341,6 @@ xmlGetDocEntity(xmlDocPtr doc, const CHAR *name) { /* * A buffer used for converting entities to their equivalent and back. - * - * TODO: remove this, once we are not afraid of breaking binary compatibility */ static int buffer_size = 0; static CHAR *buffer = NULL; @@ -367,7 +363,8 @@ void growBuffer(void) { * Do a global encoding of a string, replacing the predefined entities * and non ASCII values with their entities and CharRef counterparts. * - * TODO: remove this, once we are not afraid of breaking binary compatibility + * TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary + * compatibility * * People must migrate their code to xmlEncodeEntitiesReentrant ! * This routine will issue a warning when encountered. diff --git a/entities.h b/entities.h index 180a40c0..5e35703a 100644 --- a/entities.h +++ b/entities.h @@ -59,21 +59,35 @@ typedef xmlEntitiesTable *xmlEntitiesTablePtr; #include "parser.h" -void xmlAddDocEntity(xmlDocPtr doc, const CHAR *name, int type, - const CHAR *ExternalID, const CHAR *SystemID, CHAR *content); -void xmlAddDtdEntity(xmlDocPtr doc, const CHAR *name, int type, - const CHAR *ExternalID, const CHAR *SystemID, CHAR *content); -xmlEntityPtr xmlGetPredefinedEntity(const CHAR *name); -xmlEntityPtr xmlGetDocEntity(xmlDocPtr doc, const CHAR *name); -xmlEntityPtr xmlGetDtdEntity(xmlDocPtr doc, const CHAR *name); -xmlEntityPtr xmlGetParameterEntity(xmlDocPtr doc, const CHAR *name); -const CHAR *xmlEncodeEntities(xmlDocPtr doc, const CHAR *input); -CHAR *xmlEncodeEntitiesReentrant(xmlDocPtr doc, const CHAR *input); -xmlEntitiesTablePtr xmlCreateEntitiesTable(void); -xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table); -void xmlFreeEntitiesTable(xmlEntitiesTablePtr table); -void xmlDumpEntitiesTable(xmlBufferPtr buf, xmlEntitiesTablePtr table); -xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table); +void xmlAddDocEntity (xmlDocPtr doc, + const CHAR *name, + int type, + const CHAR *ExternalID, + const CHAR *SystemID, + const CHAR *content); +void xmlAddDtdEntity (xmlDocPtr doc, + const CHAR *name, + int type, + const CHAR *ExternalID, + const CHAR *SystemID, + const CHAR *content); +xmlEntityPtr xmlGetPredefinedEntity (const CHAR *name); +xmlEntityPtr xmlGetDocEntity (xmlDocPtr doc, + const CHAR *name); +xmlEntityPtr xmlGetDtdEntity (xmlDocPtr doc, + const CHAR *name); +xmlEntityPtr xmlGetParameterEntity (xmlDocPtr doc, + const CHAR *name); +const CHAR * xmlEncodeEntities (xmlDocPtr doc, + const CHAR *input); +CHAR * xmlEncodeEntitiesReentrant(xmlDocPtr doc, + const CHAR *input); +xmlEntitiesTablePtr xmlCreateEntitiesTable (void); +xmlEntitiesTablePtr xmlCopyEntitiesTable (xmlEntitiesTablePtr table); +void xmlFreeEntitiesTable (xmlEntitiesTablePtr table); +void xmlDumpEntitiesTable (xmlBufferPtr buf, + xmlEntitiesTablePtr table); +xmlEntitiesTablePtr xmlCopyEntitiesTable (xmlEntitiesTablePtr table); #ifdef __cplusplus } diff --git a/error.c b/error.c index 4fbdd987..42e327e1 100644 --- a/error.c +++ b/error.c @@ -10,18 +10,32 @@ #include #include "parser.h" -static void +/** + * xmlParserPrintFileInfo: + * @input: an xmlParserInputPtr input + * + * Displays the associated file and line informations for the current input + */ + +void xmlParserPrintFileInfo(xmlParserInputPtr input) { if (input != NULL) { if (input->filename) fprintf(stderr, "%s:%d: ", input->filename, input->line); else - fprintf(stderr, "line %d: ", input->line); + fprintf(stderr, "Entity: line %d: ", input->line); } } -static void +/** + * xmlParserPrintFileContext: + * @input: an xmlParserInputPtr input + * + * Displays current context within the input content for error tracking + */ + +void xmlParserPrintFileContext(xmlParserInputPtr input) { const CHAR *cur, *base; int n; @@ -67,11 +81,14 @@ xmlParserError(void *ctx, const char *msg, ...) { xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; xmlParserInputPtr input; + xmlParserInputPtr cur = NULL; va_list args; input = ctxt->input; - if ((input->filename == NULL) && (ctxt->inputNr > 1)) + if ((input->filename == NULL) && (ctxt->inputNr > 1)) { + cur = input; input = ctxt->inputTab[ctxt->inputNr - 2]; + } xmlParserPrintFileInfo(input); @@ -81,6 +98,11 @@ xmlParserError(void *ctx, const char *msg, ...) va_end(args); xmlParserPrintFileContext(input); + if (cur != NULL) { + xmlParserPrintFileInfo(cur); + fprintf(stderr, "\n"); + xmlParserPrintFileContext(cur); + } } /** @@ -97,11 +119,15 @@ xmlParserWarning(void *ctx, const char *msg, ...) { xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; xmlParserInputPtr input; + xmlParserInputPtr cur = NULL; va_list args; input = ctxt->input; - if ((input->filename == NULL) && (ctxt->inputNr > 1)) + if ((input->filename == NULL) && (ctxt->inputNr > 1)) { + cur = input; input = ctxt->inputTab[ctxt->inputNr - 2]; + } + xmlParserPrintFileInfo(input); @@ -111,6 +137,11 @@ xmlParserWarning(void *ctx, const char *msg, ...) va_end(args); xmlParserPrintFileContext(input); + if (cur != NULL) { + xmlParserPrintFileInfo(cur); + fprintf(stderr, "\n"); + xmlParserPrintFileContext(cur); + } } /** diff --git a/include/libxml/HTMLparser.h b/include/libxml/HTMLparser.h index 749566ca..ebcd9968 100644 --- a/include/libxml/HTMLparser.h +++ b/include/libxml/HTMLparser.h @@ -27,7 +27,7 @@ typedef xmlNodePtr htmlNodePtr; * Internal description of an HTML element */ typedef struct htmlElemDesc { - const CHAR *name; /* The tag name */ + const char *name; /* The tag name */ int startTag; /* Whether the start tag can be implied */ int endTag; /* Whether the end tag can be implied */ int empty; /* Is this an empty element ? */ @@ -41,7 +41,7 @@ typedef struct htmlElemDesc { */ typedef struct htmlEntityDesc { int value; /* the UNICODE value for the character */ - const CHAR *name; /* The entity name */ + const char *name; /* The entity name */ const char *desc; /* the description */ } htmlEntityDesc, *htmlEntityDescPtr; diff --git a/include/libxml/encoding.h b/include/libxml/encoding.h index 227abaf0..5181caff 100644 --- a/include/libxml/encoding.h +++ b/include/libxml/encoding.h @@ -51,7 +51,7 @@ typedef enum { XML_CHAR_ENCODING_8859_9= 18,/* ISO-8859-9 */ XML_CHAR_ENCODING_2022_JP= 19,/* ISO-2022-JP */ XML_CHAR_ENCODING_SHIFT_JIS=20,/* Shift_JIS */ - XML_CHAR_ENCODING_EUC_JP= 21,/* EUC-JP */ + XML_CHAR_ENCODING_EUC_JP= 21 /* EUC-JP */ } xmlCharEncoding; /** diff --git a/include/libxml/entities.h b/include/libxml/entities.h index 180a40c0..5e35703a 100644 --- a/include/libxml/entities.h +++ b/include/libxml/entities.h @@ -59,21 +59,35 @@ typedef xmlEntitiesTable *xmlEntitiesTablePtr; #include "parser.h" -void xmlAddDocEntity(xmlDocPtr doc, const CHAR *name, int type, - const CHAR *ExternalID, const CHAR *SystemID, CHAR *content); -void xmlAddDtdEntity(xmlDocPtr doc, const CHAR *name, int type, - const CHAR *ExternalID, const CHAR *SystemID, CHAR *content); -xmlEntityPtr xmlGetPredefinedEntity(const CHAR *name); -xmlEntityPtr xmlGetDocEntity(xmlDocPtr doc, const CHAR *name); -xmlEntityPtr xmlGetDtdEntity(xmlDocPtr doc, const CHAR *name); -xmlEntityPtr xmlGetParameterEntity(xmlDocPtr doc, const CHAR *name); -const CHAR *xmlEncodeEntities(xmlDocPtr doc, const CHAR *input); -CHAR *xmlEncodeEntitiesReentrant(xmlDocPtr doc, const CHAR *input); -xmlEntitiesTablePtr xmlCreateEntitiesTable(void); -xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table); -void xmlFreeEntitiesTable(xmlEntitiesTablePtr table); -void xmlDumpEntitiesTable(xmlBufferPtr buf, xmlEntitiesTablePtr table); -xmlEntitiesTablePtr xmlCopyEntitiesTable(xmlEntitiesTablePtr table); +void xmlAddDocEntity (xmlDocPtr doc, + const CHAR *name, + int type, + const CHAR *ExternalID, + const CHAR *SystemID, + const CHAR *content); +void xmlAddDtdEntity (xmlDocPtr doc, + const CHAR *name, + int type, + const CHAR *ExternalID, + const CHAR *SystemID, + const CHAR *content); +xmlEntityPtr xmlGetPredefinedEntity (const CHAR *name); +xmlEntityPtr xmlGetDocEntity (xmlDocPtr doc, + const CHAR *name); +xmlEntityPtr xmlGetDtdEntity (xmlDocPtr doc, + const CHAR *name); +xmlEntityPtr xmlGetParameterEntity (xmlDocPtr doc, + const CHAR *name); +const CHAR * xmlEncodeEntities (xmlDocPtr doc, + const CHAR *input); +CHAR * xmlEncodeEntitiesReentrant(xmlDocPtr doc, + const CHAR *input); +xmlEntitiesTablePtr xmlCreateEntitiesTable (void); +xmlEntitiesTablePtr xmlCopyEntitiesTable (xmlEntitiesTablePtr table); +void xmlFreeEntitiesTable (xmlEntitiesTablePtr table); +void xmlDumpEntitiesTable (xmlBufferPtr buf, + xmlEntitiesTablePtr table); +xmlEntitiesTablePtr xmlCopyEntitiesTable (xmlEntitiesTablePtr table); #ifdef __cplusplus } diff --git a/include/libxml/parser.h b/include/libxml/parser.h index 6659cdf7..34a65f1c 100644 --- a/include/libxml/parser.h +++ b/include/libxml/parser.h @@ -47,6 +47,10 @@ typedef struct xmlParserInput { } xmlParserInput; typedef xmlParserInput *xmlParserInputPtr; +typedef xmlParserInputPtr (*xmlExternalEntityLoader)(const char *URL, + const char *ID, + xmlParserInputPtr context); + /** * the parser can be asked to collect Node informations, i.e. at what * place in the file they were detected. @@ -84,7 +88,7 @@ typedef enum xmlParserInputState { XML_PARSER_DTD, XML_PARSER_EPILOG, XML_PARSER_COMMENT, - XML_PARSER_CDATA_SECTION, + XML_PARSER_CDATA_SECTION } xmlParserInputState; /** @@ -249,66 +253,104 @@ extern xmlSAXHandler htmlDefaultSAXHandler; * Input functions */ -int xmlParserInputRead(xmlParserInputPtr in, int len); -int xmlParserInputGrow(xmlParserInputPtr in, int len); +int xmlParserInputRead (xmlParserInputPtr in, + int len); +int xmlParserInputGrow (xmlParserInputPtr in, + int len); /** * CHAR handling */ -CHAR *xmlStrdup(const CHAR *cur); -CHAR *xmlStrndup(const CHAR *cur, int len); -CHAR *xmlStrsub(const CHAR *str, int start, int len); -const CHAR *xmlStrchr(const CHAR *str, CHAR val); -const CHAR *xmlStrstr(const CHAR *str, CHAR *val); -int xmlStrcmp(const CHAR *str1, const CHAR *str2); -int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len); -int xmlStrlen(const CHAR *str); -CHAR *xmlStrcat(CHAR *cur, const CHAR *add); -CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len); +CHAR * xmlStrdup (const CHAR *cur); +CHAR * xmlStrndup (const CHAR *cur, + int len); +CHAR * xmlStrsub (const CHAR *str, + int start, + int len); +const CHAR * xmlStrchr (const CHAR *str, + CHAR val); +const CHAR * xmlStrstr (const CHAR *str, + CHAR *val); +int xmlStrcmp (const CHAR *str1, + const CHAR *str2); +int xmlStrncmp (const CHAR *str1, + const CHAR *str2, + int len); +int xmlStrlen (const CHAR *str); +CHAR * xmlStrcat (CHAR *cur, + const CHAR *add); +CHAR * xmlStrncat (CHAR *cur, + const CHAR *add, + int len); /** * Basic parsing Interfaces */ -xmlDocPtr xmlParseDoc(CHAR *cur); -xmlDocPtr xmlParseMemory(char *buffer, int size); -xmlDocPtr xmlParseFile(const char *filename); -int xmlSubstituteEntitiesDefault(int val); +xmlDocPtr xmlParseDoc (CHAR *cur); +xmlDocPtr xmlParseMemory (char *buffer, + int size); +xmlDocPtr xmlParseFile (const char *filename); +int xmlSubstituteEntitiesDefault(int val); /** * Recovery mode */ -xmlDocPtr xmlRecoverDoc(CHAR *cur); -xmlDocPtr xmlRecoverMemory(char *buffer, int size); -xmlDocPtr xmlRecoverFile(const char *filename); +xmlDocPtr xmlRecoverDoc (CHAR *cur); +xmlDocPtr xmlRecoverMemory (char *buffer, + int size); +xmlDocPtr xmlRecoverFile (const char *filename); /** * Less common routines and SAX interfaces */ -int xmlParseDocument(xmlParserCtxtPtr ctxt); -xmlDocPtr xmlSAXParseDoc(xmlSAXHandlerPtr sax, CHAR *cur, int recovery); -xmlDocPtr xmlSAXParseMemory(xmlSAXHandlerPtr sax, char *buffer, - int size, int recovery); -xmlDocPtr xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename, - int recovery); -xmlDtdPtr xmlParseDTD(const CHAR *ExternalID, const CHAR *SystemID); -xmlDtdPtr xmlSAXParseDTD(xmlSAXHandlerPtr sax, const CHAR *ExternalID, - const CHAR *SystemID); -void xmlInitParserCtxt(xmlParserCtxtPtr ctxt); -void xmlClearParserCtxt(xmlParserCtxtPtr ctxt); -void xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const CHAR* buffer, - const char* filename); +int xmlParseDocument (xmlParserCtxtPtr ctxt); +xmlDocPtr xmlSAXParseDoc (xmlSAXHandlerPtr sax, + CHAR *cur, + int recovery); +xmlDocPtr xmlSAXParseMemory (xmlSAXHandlerPtr sax, + char *buffer, + int size, + int recovery); +xmlDocPtr xmlSAXParseFile (xmlSAXHandlerPtr sax, + const char *filename, + int recovery); +xmlDtdPtr xmlParseDTD (const CHAR *ExternalID, + const CHAR *SystemID); +xmlDtdPtr xmlSAXParseDTD (xmlSAXHandlerPtr sax, + const CHAR *ExternalID, + const CHAR *SystemID); +void xmlInitParserCtxt (xmlParserCtxtPtr ctxt); +void xmlClearParserCtxt (xmlParserCtxtPtr ctxt); +void xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt, + const CHAR* buffer, + const char* filename); +void xmlDefaultSAXHandlerInit(void); +void htmlDefaultSAXHandlerInit(void); -const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* ctxt, +/** + * Node infos + */ +const xmlParserNodeInfo* + xmlParserFindNodeInfo (const xmlParserCtxt* ctxt, const xmlNode* node); -void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq); -void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq); +void xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); +void xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq, const xmlNode* node); -void xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt, - const xmlParserNodeInfo* info); +void xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt, + const xmlParserNodeInfo* info); -void xmlDefaultSAXHandlerInit(void); -void htmlDefaultSAXHandlerInit(void); +/* + * External entities handling actually implemented in xmlIO + */ + +void xmlSetExternalEntityLoader(xmlExternalEntityLoader f); +xmlExternalEntityLoader + xmlGetExternalEntityLoader(void); +xmlParserInputPtr + xmlLoadExternalEntity (const char *URL, + const char *ID, + xmlParserInputPtr context); #ifdef __cplusplus } #endif diff --git a/include/libxml/parserInternals.h b/include/libxml/parserInternals.h index ae8e2cc2..413c26c6 100644 --- a/include/libxml/parserInternals.h +++ b/include/libxml/parserInternals.h @@ -15,6 +15,8 @@ extern "C" { #endif +#define XML_MAX_NAMELEN 1000 + /** * A few macros needed to help building the parser. */ @@ -510,154 +512,112 @@ typedef unsigned char CHARVAL; * entity substitution default behaviour. */ -int xmlSubstituteEntitiesDefaultValue; +int xmlSubstituteEntitiesDefaultValue; /** * Parser context */ -xmlParserCtxtPtr -xmlCreateDocParserCtxt(CHAR *cur); -xmlParserCtxtPtr -xmlCreateFileParserCtxt(const char *filename); -xmlParserCtxtPtr -xmlCreateMemoryParserCtxt(char *buffer, int size); -void -xmlFreeParserCtxt(xmlParserCtxtPtr ctxt); -xmlParserCtxtPtr -xmlNewParserCtxt(); -void -xmlSwitchEncoding(xmlParserCtxtPtr ctxt, xmlCharEncoding enc); +xmlParserCtxtPtr xmlCreateDocParserCtxt (CHAR *cur); +xmlParserCtxtPtr xmlCreateFileParserCtxt (const char *filename); +xmlParserCtxtPtr xmlCreateMemoryParserCtxt(char *buffer, + int size); +void xmlFreeParserCtxt (xmlParserCtxtPtr ctxt); +xmlParserCtxtPtr xmlNewParserCtxt (void); +void xmlSwitchEncoding (xmlParserCtxtPtr ctxt, + xmlCharEncoding enc); /** * Entities */ -void -xmlHandleEntity(xmlParserCtxtPtr ctxt, xmlEntityPtr entity); +void xmlHandleEntity (xmlParserCtxtPtr ctxt, + xmlEntityPtr entity); /** * Input Streams */ -xmlParserInputPtr -xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity); -void -xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input); -CHAR -xmlPopInput(xmlParserCtxtPtr ctxt); -void -xmlFreeInputStream(xmlParserInputPtr input); -xmlParserInputPtr -xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename); +xmlParserInputPtr xmlNewEntityInputStream (xmlParserCtxtPtr ctxt, + xmlEntityPtr entity); +void xmlPushInput (xmlParserCtxtPtr ctxt, + xmlParserInputPtr input); +CHAR xmlPopInput (xmlParserCtxtPtr ctxt); +void xmlFreeInputStream (xmlParserInputPtr input); +xmlParserInputPtr xmlNewInputFromFile (xmlParserCtxtPtr ctxt, + const char *filename); /** * Namespaces. */ -CHAR * -xmlSplitQName(const CHAR *name, CHAR **prefix); -CHAR * -xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt); -CHAR * -xmlNamespaceParseQName(xmlParserCtxtPtr ctxt, CHAR **prefix); -CHAR * -xmlNamespaceParseNSDef(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseQuotedString(xmlParserCtxtPtr ctxt); -void -xmlParseNamespace(xmlParserCtxtPtr ctxt); +CHAR * xmlSplitQName (const CHAR *name, + CHAR **prefix); +CHAR * xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt); +CHAR * xmlNamespaceParseQName (xmlParserCtxtPtr ctxt, + CHAR **prefix); +CHAR * xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt); +CHAR * xmlParseQuotedString (xmlParserCtxtPtr ctxt); +void xmlParseNamespace (xmlParserCtxtPtr ctxt); /** * Generic production rules */ -CHAR * -xmlScanName(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseName(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseNmtoken(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseEntityValue(xmlParserCtxtPtr ctxt, CHAR **orig); -CHAR * -xmlParseAttValue(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseSystemLiteral(xmlParserCtxtPtr ctxt); -CHAR * -xmlParsePubidLiteral(xmlParserCtxtPtr ctxt); -void -xmlParseCharData(xmlParserCtxtPtr ctxt, int cdata); -CHAR * -xmlParseExternalID(xmlParserCtxtPtr ctxt, CHAR **publicID, int strict); -void -xmlParseComment(xmlParserCtxtPtr ctxt, int create); -CHAR * -xmlParsePITarget(xmlParserCtxtPtr ctxt); -void -xmlParsePI(xmlParserCtxtPtr ctxt); -void -xmlParseNotationDecl(xmlParserCtxtPtr ctxt); -void -xmlParseEntityDecl(xmlParserCtxtPtr ctxt); -int -xmlParseDefaultDecl(xmlParserCtxtPtr ctxt, CHAR **value); -xmlEnumerationPtr -xmlParseNotationType(xmlParserCtxtPtr ctxt); -xmlEnumerationPtr -xmlParseEnumerationType(xmlParserCtxtPtr ctxt); -int -xmlParseEnumeratedType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree); -int -xmlParseAttributeType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree); -void -xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt); -xmlElementContentPtr -xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt); -xmlElementContentPtr -xmlParseElementChildrenContentDecl(xmlParserCtxtPtr ctxt); -int -xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, CHAR *name, - xmlElementContentPtr *result); -int -xmlParseElementDecl(xmlParserCtxtPtr ctxt); -void -xmlParseMarkupDecl(xmlParserCtxtPtr ctxt); -int -xmlParseCharRef(xmlParserCtxtPtr ctxt); -xmlEntityPtr -xmlParseEntityRef(xmlParserCtxtPtr ctxt); -void -xmlParseReference(xmlParserCtxtPtr ctxt); -void -xmlParsePEReference(xmlParserCtxtPtr ctxt); -void -xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseAttribute(xmlParserCtxtPtr ctxt, CHAR **value); -CHAR * -xmlParseStartTag(xmlParserCtxtPtr ctxt); -void -xmlParseEndTag(xmlParserCtxtPtr ctxt, CHAR *tagname); -void -xmlParseCDSect(xmlParserCtxtPtr ctxt); -void -xmlParseContent(xmlParserCtxtPtr ctxt); -void -xmlParseElement(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseVersionNum(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseVersionInfo(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseEncName(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseEncodingDecl(xmlParserCtxtPtr ctxt); -int -xmlParseSDDecl(xmlParserCtxtPtr ctxt); -void -xmlParseXMLDecl(xmlParserCtxtPtr ctxt); -void -xmlParseMisc(xmlParserCtxtPtr ctxt); -void -xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const CHAR *ExternalID, - const CHAR *SystemID); - +CHAR * xmlScanName (xmlParserCtxtPtr ctxt); +CHAR * xmlParseName (xmlParserCtxtPtr ctxt); +CHAR * xmlParseNmtoken (xmlParserCtxtPtr ctxt); +CHAR * xmlParseEntityValue (xmlParserCtxtPtr ctxt, + CHAR **orig); +CHAR * xmlParseAttValue (xmlParserCtxtPtr ctxt); +CHAR * xmlParseSystemLiteral (xmlParserCtxtPtr ctxt); +CHAR * xmlParsePubidLiteral (xmlParserCtxtPtr ctxt); +void xmlParseCharData (xmlParserCtxtPtr ctxt, + int cdata); +CHAR * xmlParseExternalID (xmlParserCtxtPtr ctxt, + CHAR **publicID, + int strict); +void xmlParseComment (xmlParserCtxtPtr ctxt); +CHAR * xmlParsePITarget (xmlParserCtxtPtr ctxt); +void xmlParsePI (xmlParserCtxtPtr ctxt); +void xmlParseNotationDecl (xmlParserCtxtPtr ctxt); +void xmlParseEntityDecl (xmlParserCtxtPtr ctxt); +int xmlParseDefaultDecl (xmlParserCtxtPtr ctxt, + CHAR **value); +xmlEnumerationPtr xmlParseNotationType (xmlParserCtxtPtr ctxt); +xmlEnumerationPtr xmlParseEnumerationType (xmlParserCtxtPtr ctxt); +int xmlParseEnumeratedType (xmlParserCtxtPtr ctxt, + xmlEnumerationPtr *tree); +int xmlParseAttributeType (xmlParserCtxtPtr ctxt, + xmlEnumerationPtr *tree); +void xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt); +xmlElementContentPtr xmlParseElementMixedContentDecl + (xmlParserCtxtPtr ctxt); +xmlElementContentPtr xmlParseElementChildrenContentDecl + (xmlParserCtxtPtr ctxt); +int xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, + CHAR *name, + xmlElementContentPtr *result); +int xmlParseElementDecl (xmlParserCtxtPtr ctxt); +void xmlParseMarkupDecl (xmlParserCtxtPtr ctxt); +int xmlParseCharRef (xmlParserCtxtPtr ctxt); +xmlEntityPtr xmlParseEntityRef (xmlParserCtxtPtr ctxt); +void xmlParseReference (xmlParserCtxtPtr ctxt); +void xmlParsePEReference (xmlParserCtxtPtr ctxt); +void xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt); +CHAR * xmlParseAttribute (xmlParserCtxtPtr ctxt, + CHAR **value); +CHAR * xmlParseStartTag (xmlParserCtxtPtr ctxt); +void xmlParseEndTag (xmlParserCtxtPtr ctxt, + CHAR *tagname); +void xmlParseCDSect (xmlParserCtxtPtr ctxt); +void xmlParseContent (xmlParserCtxtPtr ctxt); +void xmlParseElement (xmlParserCtxtPtr ctxt); +CHAR * xmlParseVersionNum (xmlParserCtxtPtr ctxt); +CHAR * xmlParseVersionInfo (xmlParserCtxtPtr ctxt); +CHAR * xmlParseEncName (xmlParserCtxtPtr ctxt); +CHAR * xmlParseEncodingDecl (xmlParserCtxtPtr ctxt); +int xmlParseSDDecl (xmlParserCtxtPtr ctxt); +void xmlParseXMLDecl (xmlParserCtxtPtr ctxt); +void xmlParseMisc (xmlParserCtxtPtr ctxt); +void xmlParseExternalSubset (xmlParserCtxtPtr ctxt, + const CHAR *ExternalID, + const CHAR *SystemID); /* * Entities substitution */ @@ -666,16 +626,21 @@ xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const CHAR *ExternalID, #define XML_SUBSTITUTE_PEREF 2 #define XML_SUBSTITUTE_BOTH 3 -CHAR * -xmlDecodeEntities(xmlParserCtxtPtr ctxt, int len, int what, - CHAR end, CHAR end2, CHAR end3); +CHAR * xmlDecodeEntities (xmlParserCtxtPtr ctxt, + int len, + int what, + CHAR end, + CHAR end2, + CHAR end3); /* * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP */ -extern int nodePush(xmlParserCtxtPtr ctxt, xmlNodePtr value); -extern xmlNodePtr nodePop(xmlParserCtxtPtr ctxt); -extern int inputPush(xmlParserCtxtPtr ctxt, xmlParserInputPtr value); -extern xmlParserInputPtr inputPop(xmlParserCtxtPtr ctxt); +int nodePush (xmlParserCtxtPtr ctxt, + xmlNodePtr value); +xmlNodePtr nodePop (xmlParserCtxtPtr ctxt); +int inputPush (xmlParserCtxtPtr ctxt, + xmlParserInputPtr value); +xmlParserInputPtr inputPop (xmlParserCtxtPtr ctxt); #endif /* __XML_PARSER_INTERNALS_H__ */ diff --git a/include/libxml/tree.h b/include/libxml/tree.h index fa70ba37..6d22ac12 100644 --- a/include/libxml/tree.h +++ b/include/libxml/tree.h @@ -53,6 +53,8 @@ typedef unsigned short CHAR; typedef unsigned char CHAR; #endif +#define BAD_CAST (CHAR *) + /* * a DTD Notation definition */ @@ -193,6 +195,7 @@ typedef struct xmlAttr { struct xmlAttr *next; /* attribute list link */ const CHAR *name; /* the name of the property */ struct xmlNode *val; /* the value of the property */ + xmlNs *ns; /* pointer to the associated namespace */ } xmlAttr; typedef xmlAttr *xmlAttrPtr; @@ -277,124 +280,195 @@ extern int xmlIndentTreeOutput; /* try to indent the tree dumps */ * Handling Buffers. */ -xmlBufferPtr xmlBufferCreate(void); -void xmlBufferFree(xmlBufferPtr buf); -int xmlBufferDump(FILE *file, xmlBufferPtr buf); -void xmlBufferAdd(xmlBufferPtr buf, const CHAR *str, int len); -void xmlBufferCat(xmlBufferPtr buf, const CHAR *str); -void xmlBufferCCat(xmlBufferPtr buf, const char *str); -int xmlBufferShrink(xmlBufferPtr buf, int len); -void xmlBufferEmpty(xmlBufferPtr buf); +xmlBufferPtr xmlBufferCreate (void); +void xmlBufferFree (xmlBufferPtr buf); +int xmlBufferDump (FILE *file, + xmlBufferPtr buf); +void xmlBufferAdd (xmlBufferPtr buf, + const CHAR *str, + int len); +void xmlBufferCat (xmlBufferPtr buf, + const CHAR *str); +void xmlBufferCCat (xmlBufferPtr buf, + const char *str); +int xmlBufferShrink (xmlBufferPtr buf, + int len); +void xmlBufferEmpty (xmlBufferPtr buf); /* * Creating/freeing new structures */ -xmlDtdPtr xmlCreateIntSubset(xmlDocPtr doc, const CHAR *name, - const CHAR *ExternalID, const CHAR *SystemID); -xmlDtdPtr xmlNewDtd(xmlDocPtr doc, const CHAR *name, - const CHAR *ExternalID, const CHAR *SystemID); -void xmlFreeDtd(xmlDtdPtr cur); -xmlNsPtr xmlNewGlobalNs(xmlDocPtr doc, const CHAR *href, const CHAR *prefix); -xmlNsPtr xmlNewNs(xmlNodePtr node, const CHAR *href, const CHAR *prefix); -void xmlFreeNs(xmlNsPtr cur); -xmlDocPtr xmlNewDoc(const CHAR *version); -void xmlFreeDoc(xmlDocPtr cur); -xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const CHAR *name, - const CHAR *value); -xmlAttrPtr xmlNewProp(xmlNodePtr node, const CHAR *name, - const CHAR *value); -void xmlFreePropList(xmlAttrPtr cur); -void xmlFreeProp(xmlAttrPtr cur); -xmlAttrPtr xmlCopyProp(xmlAttrPtr cur); -xmlAttrPtr xmlCopyPropList(xmlAttrPtr cur); -xmlDtdPtr xmlCopyDtd(xmlDtdPtr dtd); -xmlDocPtr xmlCopyDoc(xmlDocPtr doc, int recursive); +xmlDtdPtr xmlCreateIntSubset (xmlDocPtr doc, + const CHAR *name, + const CHAR *ExternalID, + const CHAR *SystemID); +xmlDtdPtr xmlNewDtd (xmlDocPtr doc, + const CHAR *name, + const CHAR *ExternalID, + const CHAR *SystemID); +void xmlFreeDtd (xmlDtdPtr cur); +xmlNsPtr xmlNewGlobalNs (xmlDocPtr doc, + const CHAR *href, + const CHAR *prefix); +xmlNsPtr xmlNewNs (xmlNodePtr node, + const CHAR *href, + const CHAR *prefix); +void xmlFreeNs (xmlNsPtr cur); +xmlDocPtr xmlNewDoc (const CHAR *version); +void xmlFreeDoc (xmlDocPtr cur); +xmlAttrPtr xmlNewDocProp (xmlDocPtr doc, + const CHAR *name, + const CHAR *value); +xmlAttrPtr xmlNewProp (xmlNodePtr node, + const CHAR *name, + const CHAR *value); +xmlAttrPtr xmlNewNsProp (xmlNodePtr node, + xmlNsPtr ns, + const CHAR *name, + const CHAR *value); +void xmlFreePropList (xmlAttrPtr cur); +void xmlFreeProp (xmlAttrPtr cur); +xmlAttrPtr xmlCopyProp (xmlNodePtr target, + xmlAttrPtr cur); +xmlAttrPtr xmlCopyPropList (xmlNodePtr target, + xmlAttrPtr cur); +xmlDtdPtr xmlCopyDtd (xmlDtdPtr dtd); +xmlDocPtr xmlCopyDoc (xmlDocPtr doc, + int recursive); /* * Creating new nodes */ -xmlNodePtr xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns, - const CHAR *name, const CHAR *content); -xmlNodePtr xmlNewNode(xmlNsPtr ns, const CHAR *name); -xmlNodePtr xmlNewChild(xmlNodePtr parent, xmlNsPtr ns, - const CHAR *name, const CHAR *content); -xmlNodePtr xmlNewDocText(xmlDocPtr doc, const CHAR *content); -xmlNodePtr xmlNewText(const CHAR *content); -xmlNodePtr xmlNewDocTextLen(xmlDocPtr doc, const CHAR *content, int len); -xmlNodePtr xmlNewTextLen(const CHAR *content, int len); -xmlNodePtr xmlNewDocComment(xmlDocPtr doc, const CHAR *content); -xmlNodePtr xmlNewComment(const CHAR *content); -xmlNodePtr xmlNewCDataBlock(xmlDocPtr doc, const CHAR *content, int len); -xmlNodePtr xmlNewReference(xmlDocPtr doc, const CHAR *name); -xmlNodePtr xmlCopyNode(xmlNodePtr node, int recursive); -xmlNodePtr xmlCopyNodeList(xmlNodePtr node); +xmlNodePtr xmlNewDocNode (xmlDocPtr doc, + xmlNsPtr ns, + const CHAR *name, + const CHAR *content); +xmlNodePtr xmlNewNode (xmlNsPtr ns, + const CHAR *name); +xmlNodePtr xmlNewChild (xmlNodePtr parent, + xmlNsPtr ns, + const CHAR *name, + const CHAR *content); +xmlNodePtr xmlNewDocText (xmlDocPtr doc, + const CHAR *content); +xmlNodePtr xmlNewText (const CHAR *content); +xmlNodePtr xmlNewPI (const CHAR *name, + const CHAR *content); +xmlNodePtr xmlNewDocTextLen (xmlDocPtr doc, + const CHAR *content, + int len); +xmlNodePtr xmlNewTextLen (const CHAR *content, + int len); +xmlNodePtr xmlNewDocComment (xmlDocPtr doc, + const CHAR *content); +xmlNodePtr xmlNewComment (const CHAR *content); +xmlNodePtr xmlNewCDataBlock (xmlDocPtr doc, + const CHAR *content, + int len); +xmlNodePtr xmlNewReference (xmlDocPtr doc, + const CHAR *name); +xmlNodePtr xmlCopyNode (xmlNodePtr node, + int recursive); +xmlNodePtr xmlCopyNodeList (xmlNodePtr node); /* * Navigating */ -xmlNodePtr xmlGetLastChild(xmlNodePtr parent); -int xmlNodeIsText(xmlNodePtr node); +xmlNodePtr xmlGetLastChild (xmlNodePtr parent); +int xmlNodeIsText (xmlNodePtr node); /* * Changing the structure */ -xmlNodePtr xmlAddChild(xmlNodePtr parent, xmlNodePtr cur); -void xmlUnlinkNode(xmlNodePtr cur); - -xmlNodePtr xmlTextMerge(xmlNodePtr first, xmlNodePtr second); -void xmlTextConcat(xmlNodePtr node, const CHAR *content, int len); - -void xmlFreeNodeList(xmlNodePtr cur); -void xmlFreeNode(xmlNodePtr cur); +xmlNodePtr xmlAddChild (xmlNodePtr parent, + xmlNodePtr cur); +xmlNodePtr xmlAddSibling (xmlNodePtr cur, + xmlNodePtr elem); +void xmlUnlinkNode (xmlNodePtr cur); +xmlNodePtr xmlTextMerge (xmlNodePtr first, + xmlNodePtr second); +void xmlTextConcat (xmlNodePtr node, + const CHAR *content, + int len); +void xmlFreeNodeList (xmlNodePtr cur); +void xmlFreeNode (xmlNodePtr cur); /* * Namespaces */ -xmlNsPtr xmlSearchNs(xmlDocPtr doc, xmlNodePtr node, - const CHAR *nameSpace); -xmlNsPtr xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node, - const CHAR *href); -void xmlSetNs(xmlNodePtr node, xmlNsPtr ns); -xmlNsPtr xmlCopyNamespace(xmlNsPtr cur); -xmlNsPtr xmlCopyNamespaceList(xmlNsPtr cur); +xmlNsPtr xmlSearchNs (xmlDocPtr doc, + xmlNodePtr node, + const CHAR *nameSpace); +xmlNsPtr xmlSearchNsByHref (xmlDocPtr doc, + xmlNodePtr node, + const CHAR *href); +xmlNsPtr * xmlGetNsList (xmlDocPtr doc, + xmlNodePtr node); +void xmlSetNs (xmlNodePtr node, + xmlNsPtr ns); +xmlNsPtr xmlCopyNamespace (xmlNsPtr cur); +xmlNsPtr xmlCopyNamespaceList (xmlNsPtr cur); /* * Changing the content. */ -xmlAttrPtr xmlSetProp(xmlNodePtr node, const CHAR *name, - const CHAR *value); -CHAR *xmlGetProp(xmlNodePtr node, const CHAR *name); -xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const CHAR *value); -xmlNodePtr xmlStringLenGetNodeList(xmlDocPtr doc, const CHAR *value, - int len); -CHAR *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine); -void xmlNodeSetContent(xmlNodePtr cur, const CHAR *content); -void xmlNodeSetContentLen(xmlNodePtr cur, const CHAR *content, int len); -void xmlNodeAddContent(xmlNodePtr cur, const CHAR *content); -void xmlNodeAddContentLen(xmlNodePtr cur, const CHAR *content, int len); -CHAR *xmlNodeGetContent(xmlNodePtr cur); +xmlAttrPtr xmlSetProp (xmlNodePtr node, + const CHAR *name, + const CHAR *value); +CHAR * xmlGetProp (xmlNodePtr node, + const CHAR *name); +xmlNodePtr xmlStringGetNodeList (xmlDocPtr doc, + const CHAR *value); +xmlNodePtr xmlStringLenGetNodeList (xmlDocPtr doc, + const CHAR *value, + int len); +CHAR * xmlNodeListGetString (xmlDocPtr doc, + xmlNodePtr list, + int inLine); +void xmlNodeSetContent (xmlNodePtr cur, + const CHAR *content); +void xmlNodeSetContentLen (xmlNodePtr cur, + const CHAR *content, + int len); +void xmlNodeAddContent (xmlNodePtr cur, + const CHAR *content); +void xmlNodeAddContentLen (xmlNodePtr cur, + const CHAR *content, + int len); +CHAR * xmlNodeGetContent (xmlNodePtr cur); +const CHAR * xmlNodeGetLang (xmlNodePtr cur); +void xmlNodeSetLang (xmlNodePtr cur, + const CHAR *lang); /* * Internal, don't use */ -void xmlBufferWriteCHAR(xmlBufferPtr buf, const CHAR *string); -void xmlBufferWriteChar(xmlBufferPtr buf, const char *string); -void xmlBufferWriteQuotedString(xmlBufferPtr buf, const CHAR *string); +void xmlBufferWriteCHAR (xmlBufferPtr buf, + const CHAR *string); +void xmlBufferWriteChar (xmlBufferPtr buf, + const char *string); +void xmlBufferWriteQuotedString(xmlBufferPtr buf, + const CHAR *string); /* * Saving */ -void xmlDocDumpMemory(xmlDocPtr cur, CHAR**mem, int *size); -void xmlDocDump(FILE *f, xmlDocPtr cur); -int xmlSaveFile(const char *filename, xmlDocPtr cur); +void xmlDocDumpMemory (xmlDocPtr cur, + CHAR**mem, + int *size); +void xmlDocDump (FILE *f, + xmlDocPtr cur); +int xmlSaveFile (const char *filename, + xmlDocPtr cur); /* * Compression */ -int xmlGetDocCompressMode (xmlDocPtr doc); -void xmlSetDocCompressMode (xmlDocPtr doc, int mode); -int xmlGetCompressMode(void); -void xmlSetCompressMode(int mode); +int xmlGetDocCompressMode (xmlDocPtr doc); +void xmlSetDocCompressMode (xmlDocPtr doc, + int mode); +int xmlGetCompressMode (void); +void xmlSetCompressMode (int mode); #ifdef __cplusplus } diff --git a/include/libxml/valid.h b/include/libxml/valid.h index 9afb2a0e..aaef25d9 100644 --- a/include/libxml/valid.h +++ b/include/libxml/valid.h @@ -84,62 +84,107 @@ typedef struct xmlIDTable { typedef xmlIDTable *xmlIDTablePtr; /* Notation */ -xmlNotationPtr xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, - const CHAR *name, const CHAR *PublicID, const CHAR *SystemID); +xmlNotationPtr xmlAddNotationDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const CHAR *name, + const CHAR *PublicID, + const CHAR *SystemID); xmlNotationTablePtr xmlCopyNotationTable(xmlNotationTablePtr table); -void xmlFreeNotationTable(xmlNotationTablePtr table); -void xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table); +void xmlFreeNotationTable(xmlNotationTablePtr table); +void xmlDumpNotationTable(xmlBufferPtr buf, + xmlNotationTablePtr table); /* Element Content */ -xmlElementContentPtr xmlNewElementContent(CHAR *name, int type); +xmlElementContentPtr xmlNewElementContent (CHAR *name, int type); xmlElementContentPtr xmlCopyElementContent(xmlElementContentPtr content); -void xmlFreeElementContent(xmlElementContentPtr cur); +void xmlFreeElementContent(xmlElementContentPtr cur); /* Element */ -xmlElementPtr xmlAddElementDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, - const CHAR *name, int type, xmlElementContentPtr content); -xmlElementTablePtr xmlCopyElementTable(xmlElementTablePtr table); -void xmlFreeElementTable(xmlElementTablePtr table); -void xmlDumpElementTable(xmlBufferPtr buf, xmlElementTablePtr table); +xmlElementPtr xmlAddElementDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const CHAR *name, + int type, + xmlElementContentPtr content); +xmlElementTablePtr xmlCopyElementTable (xmlElementTablePtr table); +void xmlFreeElementTable (xmlElementTablePtr table); +void xmlDumpElementTable (xmlBufferPtr buf, + xmlElementTablePtr table); /* Enumeration */ -xmlEnumerationPtr xmlCreateEnumeration(CHAR *name); -void xmlFreeEnumeration(xmlEnumerationPtr cur); -xmlEnumerationPtr xmlCopyEnumeration(xmlEnumerationPtr cur); +xmlEnumerationPtr xmlCreateEnumeration (CHAR *name); +void xmlFreeEnumeration (xmlEnumerationPtr cur); +xmlEnumerationPtr xmlCopyEnumeration (xmlEnumerationPtr cur); /* Attribute */ -xmlAttributePtr xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, - const CHAR *elem, const CHAR *name, int type, int def, - const CHAR *defaultValue, xmlEnumerationPtr tree); -xmlAttributeTablePtr xmlCopyAttributeTable(xmlAttributeTablePtr table); -void xmlFreeAttributeTable(xmlAttributeTablePtr table); -void xmlDumpAttributeTable(xmlBufferPtr buf, xmlAttributeTablePtr table); +xmlAttributePtr xmlAddAttributeDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const CHAR *elem, + const CHAR *name, + int type, + int def, + const CHAR *defaultValue, + xmlEnumerationPtr tree); +xmlAttributeTablePtr xmlCopyAttributeTable (xmlAttributeTablePtr table); +void xmlFreeAttributeTable (xmlAttributeTablePtr table); +void xmlDumpAttributeTable (xmlBufferPtr buf, + xmlAttributeTablePtr table); /* IDs */ -xmlIDPtr xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - const CHAR *value, xmlAttrPtr attr); -xmlIDTablePtr xmlCopyIDTable(xmlIDTablePtr table); -void xmlFreeIDTable(xmlIDTablePtr table); +xmlIDPtr xmlAddID (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + const CHAR *value, + xmlAttrPtr attr); +xmlIDTablePtr xmlCopyIDTable (xmlIDTablePtr table); +void xmlFreeIDTable (xmlIDTablePtr table); +xmlAttrPtr xmlGetID (xmlDocPtr doc, + const CHAR *ID); +int xmlIsID (xmlDocPtr doc, + xmlNodePtr elem, + xmlAttrPtr attr); /** * The public function calls related to validity checking */ -int xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc); -int xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlElementPtr elem); -int xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlAttributePtr attr); -int xmlValidateNotationDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlNotationPtr nota); -int xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd); - -int xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc); -int xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem); -int xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlNodePtr elem); -int xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlNodePtr elem, xmlAttrPtr attr, const CHAR *value); - -int xmlIsMixedElement(xmlDocPtr doc, const CHAR *name); +int xmlValidateRoot (xmlValidCtxtPtr ctxt, + xmlDocPtr doc); +int xmlValidateElementDecl (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlElementPtr elem); +int xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlAttributePtr attr); +int xmlValidateAttributeValue(xmlAttributeType type, + const CHAR *value); +int xmlValidateNotationDecl (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNotationPtr nota); +int xmlValidateDtd (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlDtdPtr dtd); +int xmlValidateDocument (xmlValidCtxtPtr ctxt, + xmlDocPtr doc); +int xmlValidateElement (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); +int xmlValidateOneElement (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); +int xmlValidateOneAttribute (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem, + xmlAttrPtr attr, + const CHAR *value); +int xmlValidateNotationUse (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + const CHAR *notationName); +int xmlIsMixedElement (xmlDocPtr doc, + const CHAR *name); +xmlAttributePtr xmlGetDtdAttrDesc (xmlDtdPtr dtd, + const CHAR *elem, + const CHAR *name); +xmlNotationPtr xmlGetDtdNotationDesc (xmlDtdPtr dtd, + const CHAR *name); +xmlElementPtr xmlGetDtdElementDesc (xmlDtdPtr dtd, + const CHAR *name); #endif /* __XML_VALID_H__ */ diff --git a/include/libxml/xmlIO.h b/include/libxml/xmlIO.h index 0e086d77..01bf14c7 100644 --- a/include/libxml/xmlIO.h +++ b/include/libxml/xmlIO.h @@ -11,6 +11,7 @@ #include #include "tree.h" +#include "parser.h" #include "encoding.h" #ifdef __cplusplus @@ -35,17 +36,21 @@ typedef xmlParserInputBuffer *xmlParserInputBufferPtr; * Interfaces */ -xmlParserInputBufferPtr xmlParserInputBufferCreateFilename(const char *filename, - xmlCharEncoding enc); -xmlParserInputBufferPtr xmlParserInputBufferCreateFile(FILE *file, - xmlCharEncoding enc); -xmlParserInputBufferPtr xmlParserInputBufferCreateFd(int fd, xmlCharEncoding enc); - -int xmlParserInputBufferRead(xmlParserInputBufferPtr in, int len); -int xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len); - -void xmlFreeParserInputBuffer(xmlParserInputBufferPtr in); -char *xmlParserGetDirectory(const char *filename); +xmlParserInputBufferPtr + xmlParserInputBufferCreateFilename (const char *filename, + xmlCharEncoding enc); +xmlParserInputBufferPtr + xmlParserInputBufferCreateFile (FILE *file, + xmlCharEncoding enc); +xmlParserInputBufferPtr + xmlParserInputBufferCreateFd (int fd, + xmlCharEncoding enc); +int xmlParserInputBufferRead (xmlParserInputBufferPtr in, + int len); +int xmlParserInputBufferGrow (xmlParserInputBufferPtr in, + int len); +void xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); +char * xmlParserGetDirectory (const char *filename); #ifdef __cplusplus } diff --git a/include/libxml/xpath.h b/include/libxml/xpath.h index 737b55c1..64085032 100644 --- a/include/libxml/xpath.h +++ b/include/libxml/xpath.h @@ -62,7 +62,8 @@ typedef struct xmlXPathContext { xmlNodeSetPtr nodelist; /* The current node list */ void *variables; /* TODO !!!! */ void *functions; /* TODO !!!! */ - void *namespaces; /* TODO !!!! */ + xmlNsPtr *namespaces; /* The namespaces lookup */ + int nsNr; /* the current Namespace index */ } xmlXPathContext, *xmlXPathContextPtr; /* @@ -96,12 +97,14 @@ typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs); * * ************************************************************************/ -xmlXPathContextPtr xmlXPathNewContext(xmlDocPtr doc, void *variables, - void *functions, void *namespaces); -void xmlXPathFreeContext(xmlXPathContextPtr ctxt); -xmlXPathObjectPtr xmlXPathEval(const CHAR *str, xmlXPathContextPtr ctxt); -void xmlXPathFreeObject(xmlXPathObjectPtr obj); -xmlXPathObjectPtr xmlXPathEvalExpression(const CHAR *str, - xmlXPathContextPtr ctxt); +xmlXPathContextPtr xmlXPathNewContext (xmlDocPtr doc, + void *variables, + void *functions); +void xmlXPathFreeContext (xmlXPathContextPtr ctxt); +xmlXPathObjectPtr xmlXPathEval (const CHAR *str, + xmlXPathContextPtr ctxt); +void xmlXPathFreeObject (xmlXPathObjectPtr obj); +xmlXPathObjectPtr xmlXPathEvalExpression (const CHAR *str, + xmlXPathContextPtr ctxt); #endif /* ! __XML_XPATH_H__ */ diff --git a/parser.c b/parser.c index 8fd47977..3ca8053c 100644 --- a/parser.c +++ b/parser.c @@ -37,7 +37,6 @@ const char *xmlParserVersion = LIBXML_VERSION; -#define XML_MAX_NAMELEN 1000 /************************************************************************ * * @@ -382,7 +381,7 @@ xmlFreeInputStream(xmlParserInputPtr input) { if (input->filename != NULL) free((char *) input->filename); if (input->directory != NULL) free((char *) input->directory); if ((input->free != NULL) && (input->base != NULL)) - input->free((char *) input->base); + input->free((CHAR *) input->base); if (input->buf != NULL) xmlFreeParserInputBuffer(input->buf); memset(input, -1, sizeof(xmlParserInput)); @@ -425,7 +424,8 @@ xmlNewInputStream(xmlParserCtxtPtr ctxt) { * @entity: an Entity pointer * * Create a new input stream based on an xmlEntityPtr - * Returns the new input stream + * + * Returns the new input stream or NULL */ xmlParserInputPtr xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { @@ -438,16 +438,39 @@ xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity) { return(NULL); } if (entity->content == NULL) { - if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) - ctxt->sax->error(ctxt->userData, - "internal: xmlNewEntityInputStream entity->input = NULL\n"); + switch (entity->type) { + case XML_EXTERNAL_GENERAL_UNPARSED_ENTITY: + if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) + ctxt->sax->error(ctxt->userData, + "xmlNewEntityInputStream unparsed entity !\n"); + break; + case XML_EXTERNAL_GENERAL_PARSED_ENTITY: + case XML_EXTERNAL_PARAMETER_ENTITY: + return(xmlLoadExternalEntity((char *) entity->SystemID, + (char *) entity->ExternalID, ctxt->input)); + case XML_INTERNAL_GENERAL_ENTITY: + if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) + ctxt->sax->error(ctxt->userData, + "Internal entity %s without content !\n", entity->name); + break; + case XML_INTERNAL_PARAMETER_ENTITY: + if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) + ctxt->sax->error(ctxt->userData, + "Internal parameter entity %s without content !\n", entity->name); + break; + case XML_INTERNAL_PREDEFINED_ENTITY: + if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) + ctxt->sax->error(ctxt->userData, + "Predefined entity %s without content !\n", entity->name); + break; + } return(NULL); } input = xmlNewInputStream(ctxt); if (input == NULL) { return(NULL); } - input->filename = entity->SystemID; /* TODO !!! char <- CHAR */ + input->filename = (char *) entity->SystemID; /* TODO !!! char <- CHAR */ input->base = entity->content; input->cur = entity->content; return(input); @@ -842,7 +865,7 @@ xmlParserHandleReference(xmlParserCtxtPtr ctxt) { return; case XML_PARSER_CONTENT: case XML_PARSER_ATTRIBUTE_VALUE: - /* TODO this may not be Ok for UTF-8, multibyte sequence */ + /* !!! this may not be Ok for UTF-8, multibyte sequence */ ctxt->token = xmlParseCharRef(ctxt); return; } @@ -887,8 +910,7 @@ xmlParserHandleReference(xmlParserCtxtPtr ctxt) { * without entity substitution. * This will then be handled by xmlDecodeEntities */ - if (ctxt->replaceEntities == 0) return; - break; + return; case XML_PARSER_ENTITY_DECL: /* * we just ignore it there @@ -902,8 +924,7 @@ xmlParserHandleReference(xmlParserCtxtPtr ctxt) { ctxt->wellFormed = 0; return; case XML_PARSER_CONTENT: - if (ctxt->replaceEntities == 0) return; - break; + return; } NEXT; @@ -1239,7 +1260,7 @@ xmlDecodeEntities(xmlParserCtxtPtr ctxt, int len, int what, break; } else { - /* TODO: invalid for UTF-8 , use COPY(out); */ + /* invalid for UTF-8 , use COPY(out); !!!!!! */ *out++ = cur; nbchars++; if (out - buffer > buffer_size - 100) { @@ -1876,6 +1897,12 @@ xmlSplitQName(const CHAR *name, CHAR **prefix) { const CHAR *cur = name; *prefix = NULL; + + /* xml: prefix is not really a namespace */ + if ((cur[0] == 'x') && (cur[1] == 'm') && + (cur[2] == 'l') && (cur[3] == ':')) + return(xmlStrdup(name)); + if (!IS_LETTER(*cur) && (*cur != '_')) return(NULL); q = cur++; @@ -2293,12 +2320,12 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, CHAR **orig) { xmlPopInput(ctxt); if ((temp == NULL) && (tst == CUR_PTR)) { - ret = xmlStrndup("", 0); + ret = xmlStrndup((CHAR *) "", 0); break; } if ((temp[0] == 0) && (tst == CUR_PTR)) { free((char *)temp); - ret = xmlStrndup("", 0); + ret = xmlStrndup((CHAR *) "", 0); break; } ret = xmlStrcat(ret, temp); @@ -2313,7 +2340,7 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, CHAR **orig) { if (orig != NULL) /* !!!!!!!!! */ *orig = xmlStrndup(org, CUR_PTR - org); if (ret == NULL) - ret = xmlStrndup("", 0); + ret = xmlStrndup((CHAR *) "", 0); NEXT; } } else if (CUR == '\'') { @@ -2352,12 +2379,12 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, CHAR **orig) { xmlPopInput(ctxt); if ((temp == NULL) && (tst == CUR_PTR)) { - ret = xmlStrndup("", 0); + ret = xmlStrndup((CHAR *) "", 0); break; } if ((temp[0] == 0) && (tst == CUR_PTR)) { free((char *)temp); - ret = xmlStrndup("", 0); + ret = xmlStrndup((CHAR *) "", 0); break; } ret = xmlStrcat(ret, temp); @@ -2372,7 +2399,7 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, CHAR **orig) { if (orig != NULL) /* !!!!!!!!! */ *orig = xmlStrndup(org, CUR_PTR - org); if (ret == NULL) - ret = xmlStrndup("", 0); + ret = xmlStrndup((CHAR *) "", 0); NEXT; } } else { @@ -2390,8 +2417,7 @@ xmlParseEntityValue(xmlParserCtxtPtr ctxt, CHAR **orig) { * * parse a value for an attribute * Note: the parser won't do substitution of entities here, this - * will be handled later in xmlStringGetNodeList, unless it was - * asked for ctxt->replaceEntities != 0 + * will be handled later in xmlStringGetNodeList * * [10] AttValue ::= '"' ([^<&"] | Reference)* '"' | * "'" ([^<&'] | Reference)* "'" @@ -2722,17 +2748,15 @@ xmlParseExternalID(xmlParserCtxtPtr ctxt, CHAR **publicID, int strict) { /** * xmlParseComment: * @ctxt: an XML parser context - * @create: should we create a node, or just skip the content * * Skip an XML (SGML) comment - * This may or may not create a node (depending on the context) * The spec says that "For compatibility, the string "--" (double-hyphen) * must not occur within comments. " * * [15] Comment ::= '' */ void -xmlParseComment(xmlParserCtxtPtr ctxt, int create) { +xmlParseComment(xmlParserCtxtPtr ctxt) { const CHAR *q, *start; const CHAR *r; CHAR *val; @@ -2767,12 +2791,10 @@ xmlParseComment(xmlParserCtxtPtr ctxt, int create) { ctxt->wellFormed = 0; } else { NEXT; - if (create) { - val = xmlStrndup(start, q - start); - if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL)) - ctxt->sax->comment(ctxt->userData, val); - free(val); - } + val = xmlStrndup(start, q - start); + if ((ctxt->sax != NULL) && (ctxt->sax->comment != NULL)) + ctxt->sax->comment(ctxt->userData, val); + free(val); } } @@ -2831,8 +2853,16 @@ xmlParsePI(xmlParserCtxtPtr ctxt) { */ target = xmlParsePITarget(ctxt); if (target != NULL) { - const CHAR *q = CUR_PTR; + const CHAR *q; + if (!IS_BLANK(CUR)) { + if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) + ctxt->sax->error(ctxt->userData, + "xmlParsePI: PI %s space expected\n", target); + ctxt->wellFormed = 0; + } + SKIP_BLANKS; + q = CUR_PTR; while (IS_CHAR(CUR) && ((CUR != '?') || (NXT(1) != '>'))) NEXT; @@ -2960,7 +2990,7 @@ xmlParseNotationDecl(xmlParserCtxtPtr ctxt) { * [76] NDataDecl ::= S 'NDATA' S Name * * [ VC: Notation Declared ] - * TODO The Name must match the declared name of a notation. + * The Name must match the declared name of a notation. */ void @@ -3062,9 +3092,9 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) { } SKIP_BLANKS; ndata = xmlParseName(ctxt); - if ((ctxt->sax != NULL) && (ctxt->sax->entityDecl != NULL)) - ctxt->sax->entityDecl(ctxt->userData, name, - XML_EXTERNAL_GENERAL_UNPARSED_ENTITY, + if ((ctxt->sax != NULL) && + (ctxt->sax->unparsedEntityDecl != NULL)) + ctxt->sax->unparsedEntityDecl(ctxt->userData, name, literal, URI, ndata); } else { if ((ctxt->sax != NULL) && (ctxt->sax->entityDecl != NULL)) @@ -3123,17 +3153,17 @@ xmlParseEntityDecl(xmlParserCtxtPtr ctxt) { * [60] DefaultDecl ::= '#REQUIRED' | '#IMPLIED' | (('#FIXED' S)? AttValue) * * [ VC: Required Attribute ] - * TODO if the default declaration is the keyword #REQUIRED, then the - * attribute must be specified for all elements of the type in the - * attribute-list declaration. + * if the default declaration is the keyword #REQUIRED, then the + * attribute must be specified for all elements of the type in the + * attribute-list declaration. * * [ VC: Attribute Default Legal ] * The declared default value must meet the lexical constraints of * the declared attribute type c.f. xmlValidateAttributeDecl() * * [ VC: Fixed Attribute Default ] - * TODO if an attribute has a default value declared with the #FIXED - * keyword, instances of that attribute must match the default value. + * if an attribute has a default value declared with the #FIXED + * keyword, instances of that attribute must match the default value. * * [ WFC: No < in Attribute Values ] * handled in xmlParseAttValue() @@ -3199,7 +3229,7 @@ xmlParseDefaultDecl(xmlParserCtxtPtr ctxt, CHAR **value) { * [58] NotationType ::= 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' * * [ VC: Notation Attributes ] - * TODO Values of this type must match one of the notation names included + * Values of this type must match one of the notation names included * in the declaration; all notation names in the declaration must be declared. * * Returns: the notation attribute tree built while parsing @@ -3258,7 +3288,7 @@ xmlParseNotationType(xmlParserCtxtPtr ctxt) { * [59] Enumeration ::= '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' * * [ VC: Enumeration ] - * TODO Values of this type must match one of the Nmtoken tokens in + * Values of this type must match one of the Nmtoken tokens in * the declaration * * Returns: the enumeration attribute tree built while parsing @@ -3365,26 +3395,26 @@ xmlParseEnumeratedType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree) { * xmlValidateAttributeValue() * * [ VC: ID ] - * Values of type ID must match the Name production. TODO A name must not + * Values of type ID must match the Name production. A name must not * appear more than once in an XML document as a value of this type; * i.e., ID values must uniquely identify the elements which bear them. * * [ VC: One ID per Element Type ] - * TODO No element type may have more than one ID attribute specified. + * No element type may have more than one ID attribute specified. * * [ VC: ID Attribute Default ] - * TODO An ID attribute must have a declared default of #IMPLIED or #REQUIRED. + * An ID attribute must have a declared default of #IMPLIED or #REQUIRED. * * [ VC: IDREF ] * Values of type IDREF must match the Name production, and values - * of type IDREFS must match Names; TODO each Name must match the value of - * an ID attribute on some element in the XML document; i.e. IDREF + * of type IDREFS must match Names; TODO each IDREF Name must match the value + * of an ID attribute on some element in the XML document; i.e. IDREF * values must match the value of some ID attribute. * * [ VC: Entity Name ] * Values of type ENTITY must match the Name production, values - * of type ENTITIES must match Names; TODO each Name must match the name of - * an unparsed entity declared in the DTD. + * of type ENTITIES must match Names; TODO each Entity Name must match the + * name of an unparsed entity declared in the DTD. * * [ VC: Name Token ] * Values of type NMTOKEN must match the Nmtoken production; values @@ -3563,8 +3593,8 @@ xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt) { * [ VC: Proper Group/PE Nesting ] applies to [51] too (see [49]) * * [ VC: No Duplicate Types ] - * TODO The same name must not appear more than once in a single - * mixed-content declaration. + * The same name must not appear more than once in a single + * mixed-content declaration. * * returns: the list of the xmlElementContentPtr describing the element choices */ @@ -3911,7 +3941,7 @@ xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, CHAR *name, * [45] elementdecl ::= '' * * [ VC: Unique Element Type Declaration ] - * TODO No element type may be declared more than once + * No element type may be declared more than once * * Returns the type of the element, or -1 in case of error */ @@ -4037,7 +4067,7 @@ xmlParseMarkupDecl(xmlParserCtxtPtr ctxt) { xmlParseEntityDecl(ctxt); xmlParseNotationDecl(ctxt); xmlParsePI(ctxt); - xmlParseComment(ctxt, 0); + xmlParseComment(ctxt); /* * This is only for internal subset. On external entities, * the replacement is done before parsing stage @@ -4079,15 +4109,10 @@ xmlParseTextDecl(xmlParserCtxtPtr ctxt) { * We may have the VersionInfo here. */ version = xmlParseVersionInfo(ctxt); - - /* TODO: we should actually inherit from the referencing doc if absent if (version == NULL) version = xmlCharStrdup(XML_DEFAULT_VERSION); ctxt->version = xmlStrdup(version); - */ - - if (version != NULL) - free(version); + free(version); /* * We must have the encoding declaration @@ -4158,8 +4183,6 @@ xmlParseConditionalSections(xmlParserCtxtPtr ctxt) { * [30] extSubset ::= textDecl? extSubsetDecl * * [31] extSubsetDecl ::= (markupdecl | conditionalSect | PEReference | S) * - * - * TODO There is a check [ VC: Proper Declaration/PE Nesting ] */ void xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const CHAR *ExternalID, @@ -4170,7 +4193,7 @@ xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const CHAR *ExternalID, xmlParseTextDecl(ctxt); } if (ctxt->myDoc == NULL) { - ctxt->myDoc = xmlNewDoc("1.0"); + ctxt->myDoc = xmlNewDoc(BAD_CAST "1.0"); } if ((ctxt->myDoc != NULL) && (ctxt->myDoc->intSubset == NULL)) xmlCreateIntSubset(ctxt->myDoc, NULL, ExternalID, SystemID); @@ -4180,6 +4203,9 @@ xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const CHAR *ExternalID, while (((CUR == '<') && (NXT(1) == '?')) || ((CUR == '<') && (NXT(1) == '!')) || IS_BLANK(CUR)) { + const CHAR *check = CUR_PTR; + int cons = ctxt->input->consumed; + if ((CUR == '<') && (NXT(1) == '!') && (NXT(2) == '[')) { xmlParseConditionalSections(ctxt); } else if (IS_BLANK(CUR)) { @@ -4195,6 +4221,13 @@ xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const CHAR *ExternalID, while ((CUR == 0) && (ctxt->inputNr > 1)) xmlPopInput(ctxt); + if ((CUR_PTR == check) && (cons == ctxt->input->consumed)) { + if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) + ctxt->sax->error(ctxt->userData, + "Content error in the external subset\n"); + ctxt->wellFormed = 0; + break; + } } if (CUR != 0) { @@ -4223,10 +4256,22 @@ xmlParseReference(xmlParserCtxtPtr ctxt) { CHAR *val; if (CUR != '&') return; + if (ctxt->inputNr > 1) { + CHAR cur[2] = { '&' , 0 } ; + + if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL)) + ctxt->sax->characters(ctxt->userData, cur, 1); + if (ctxt->token == '&') + ctxt->token = 0; + else { + SKIP(1); + } + return; + } if (NXT(1) == '#') { CHAR out[2]; int val = xmlParseCharRef(ctxt); - /* TODO: invalid for UTF-8 variable encoding !!! */ + /* invalid for UTF-8 variable encoding !!!!! */ out[0] = val; out[1] = 0; if ((ctxt->sax != NULL) && (ctxt->sax->characters != NULL)) @@ -4235,15 +4280,21 @@ xmlParseReference(xmlParserCtxtPtr ctxt) { ent = xmlParseEntityRef(ctxt); if (ent == NULL) return; if ((ent->name != NULL) && - (ent->type != XML_INTERNAL_PREDEFINED_ENTITY) && - (ctxt->sax != NULL) && (ctxt->sax->reference != NULL) && - (ctxt->replaceEntities == 0)) { + (ent->type != XML_INTERNAL_PREDEFINED_ENTITY)) { + if ((ctxt->sax != NULL) && (ctxt->sax->reference != NULL) && + (ctxt->replaceEntities == 0)) { + /* + * Create a node. + */ + ctxt->sax->reference(ctxt->userData, ent->name); + return; + } else if (ctxt->replaceEntities) { + xmlParserInputPtr input; - /* - * Create a node. - */ - ctxt->sax->reference(ctxt->userData, ent->name); - return; + input = xmlNewEntityInputStream(ctxt, ent); + xmlPushInput(ctxt, input); + return; + } } val = ent->content; if (val == NULL) return; @@ -4378,7 +4429,8 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) { * not contain a <. */ else if ((ctxt->instate == XML_PARSER_ATTRIBUTE_VALUE) && - (ent != NULL) && (xmlStrcmp(ent->name, "lt")) && + (ent != NULL) && + (xmlStrcmp(ent->name, BAD_CAST "lt")) && (ent->content != NULL) && (xmlStrchr(ent->content, '<'))) { if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) @@ -4404,8 +4456,8 @@ xmlParseEntityRef(xmlParserCtxtPtr ctxt) { /* * [ WFC: No Recursion ] - * TODO A parsed entity must not contain a recursive - * reference to itself, either directly or indirectly. + * TODO A parsed entity must not contain a recursive reference + * to itself, either directly or indirectly. */ } else { @@ -4594,25 +4646,25 @@ xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt) { */ while (CUR != ']') { const CHAR *check = CUR_PTR; + int cons = ctxt->input->consumed; SKIP_BLANKS; xmlParseMarkupDecl(ctxt); xmlParsePEReference(ctxt); - if (CUR_PTR == check) { - if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) - ctxt->sax->error(ctxt->userData, - "xmlParseDocTypeDecl: error detected in Markup declaration\n"); - ctxt->wellFormed = 0; - break; - } - /* * Pop-up of finished entities. */ while ((CUR == 0) && (ctxt->inputNr > 1)) xmlPopInput(ctxt); + if ((CUR_PTR == check) && (cons = ctxt->input->consumed)) { + if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) + ctxt->sax->error(ctxt->userData, + "xmlParseDocTypeDecl: error detected in Markup declaration\n"); + ctxt->wellFormed = 0; + break; + } } if (CUR == ']') NEXT; } @@ -4654,7 +4706,7 @@ xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt) { * an attribute value (other than "<") must not contain a <. * * [ VC: Attribute Value Type ] - * TODO The attribute must have been declared; the value must be of the type + * The attribute must have been declared; the value must be of the type * declared for it. * * [25] Eq ::= S? '=' S? @@ -4810,9 +4862,9 @@ xmlParseStartTag(xmlParserCtxtPtr ctxt) { atts[nbatts++] = attvalue; atts[nbatts] = NULL; atts[nbatts + 1] = NULL; -failed: } +failed: SKIP_BLANKS; if ((cons == ctxt->input->consumed) && (q == CUR_PTR)) { if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) @@ -4993,6 +5045,7 @@ xmlParseContent(xmlParserCtxtPtr ctxt) { while ((CUR != '<') || (NXT(1) != '/')) { const CHAR *test = CUR_PTR; int cons = ctxt->input->consumed; + CHAR tok = ctxt->token; /* * First case : a Processing Instruction. @@ -5017,7 +5070,7 @@ xmlParseContent(xmlParserCtxtPtr ctxt) { */ else if ((CUR == '<') && (NXT(1) == '!') && (NXT(2) == '-') && (NXT(3) == '-')) { - xmlParseComment(ctxt, 1); + xmlParseComment(ctxt); ctxt->instate = XML_PARSER_CONTENT; } @@ -5051,7 +5104,8 @@ xmlParseContent(xmlParserCtxtPtr ctxt) { while ((CUR == 0) && (ctxt->inputNr > 1)) xmlPopInput(ctxt); - if ((cons == ctxt->input->consumed) && (test == CUR_PTR)) { + if ((cons == ctxt->input->consumed) && (test == CUR_PTR) && + (tok == ctxt->token)) { if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) ctxt->sax->error(ctxt->userData, "detected an error in element content\n"); @@ -5074,7 +5128,7 @@ xmlParseContent(xmlParserCtxtPtr ctxt) { * start-tag. * * [ VC: Element Valid ] - * TODO An element is valid if there is a declaration matching elementdecl + * An element is valid if there is a declaration matching elementdecl * where the Name matches the element type and one of the following holds: * - The declaration matches EMPTY and the element has no content. * - The declaration matches children and the sequence of child elements @@ -5542,7 +5596,7 @@ xmlParseMisc(xmlParserCtxtPtr ctxt) { } else if (IS_BLANK(CUR)) { NEXT; } else - xmlParseComment(ctxt, 0); + xmlParseComment(ctxt); } } @@ -5574,8 +5628,8 @@ xmlParseDocument(xmlParserCtxtPtr ctxt) { ctxt->sax->setDocumentLocator(ctxt->userData, &xmlDefaultSAXLocator); /* - * We should check for encoding here and plug-in some - * conversion code TODO !!!! + * TODO We should check for encoding here and plug-in some + * conversion code !!!! */ /* @@ -5829,7 +5883,7 @@ xmlSAXParseDTD(xmlSAXHandlerPtr sax, const CHAR *ExternalID, xmlSwitchEncoding(ctxt, enc); if (input->filename == NULL) - input->filename = xmlStrdup(SystemID); + input->filename = (char *) xmlStrdup(SystemID); /* !!!!!!! */ input->line = 1; input->col = 1; input->base = ctxt->input->cur; @@ -5967,7 +6021,7 @@ xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename, if ((ctxt->directory == NULL) && (directory == NULL)) directory = xmlParserGetDirectory(filename); if ((ctxt->directory == NULL) && (directory != NULL)) - ctxt->directory = xmlStrdup(directory); + ctxt->directory = (char *) xmlStrdup((CHAR *) directory); /* !!!!!!! */ xmlParseDocument(ctxt); @@ -6052,11 +6106,11 @@ xmlCreateMemoryParserCtxt(char *buffer, int size) { /* * plug some encoding conversion routines here. !!! */ - enc = xmlDetectCharEncoding(buffer); + enc = xmlDetectCharEncoding(BAD_CAST buffer); xmlSwitchEncoding(ctxt, enc); - input->base = buffer; - input->cur = buffer; + input->base = BAD_CAST buffer; + input->cur = BAD_CAST buffer; input->free = NULL; inputPush(ctxt, input); diff --git a/parser.h b/parser.h index 6659cdf7..34a65f1c 100644 --- a/parser.h +++ b/parser.h @@ -47,6 +47,10 @@ typedef struct xmlParserInput { } xmlParserInput; typedef xmlParserInput *xmlParserInputPtr; +typedef xmlParserInputPtr (*xmlExternalEntityLoader)(const char *URL, + const char *ID, + xmlParserInputPtr context); + /** * the parser can be asked to collect Node informations, i.e. at what * place in the file they were detected. @@ -84,7 +88,7 @@ typedef enum xmlParserInputState { XML_PARSER_DTD, XML_PARSER_EPILOG, XML_PARSER_COMMENT, - XML_PARSER_CDATA_SECTION, + XML_PARSER_CDATA_SECTION } xmlParserInputState; /** @@ -249,66 +253,104 @@ extern xmlSAXHandler htmlDefaultSAXHandler; * Input functions */ -int xmlParserInputRead(xmlParserInputPtr in, int len); -int xmlParserInputGrow(xmlParserInputPtr in, int len); +int xmlParserInputRead (xmlParserInputPtr in, + int len); +int xmlParserInputGrow (xmlParserInputPtr in, + int len); /** * CHAR handling */ -CHAR *xmlStrdup(const CHAR *cur); -CHAR *xmlStrndup(const CHAR *cur, int len); -CHAR *xmlStrsub(const CHAR *str, int start, int len); -const CHAR *xmlStrchr(const CHAR *str, CHAR val); -const CHAR *xmlStrstr(const CHAR *str, CHAR *val); -int xmlStrcmp(const CHAR *str1, const CHAR *str2); -int xmlStrncmp(const CHAR *str1, const CHAR *str2, int len); -int xmlStrlen(const CHAR *str); -CHAR *xmlStrcat(CHAR *cur, const CHAR *add); -CHAR *xmlStrncat(CHAR *cur, const CHAR *add, int len); +CHAR * xmlStrdup (const CHAR *cur); +CHAR * xmlStrndup (const CHAR *cur, + int len); +CHAR * xmlStrsub (const CHAR *str, + int start, + int len); +const CHAR * xmlStrchr (const CHAR *str, + CHAR val); +const CHAR * xmlStrstr (const CHAR *str, + CHAR *val); +int xmlStrcmp (const CHAR *str1, + const CHAR *str2); +int xmlStrncmp (const CHAR *str1, + const CHAR *str2, + int len); +int xmlStrlen (const CHAR *str); +CHAR * xmlStrcat (CHAR *cur, + const CHAR *add); +CHAR * xmlStrncat (CHAR *cur, + const CHAR *add, + int len); /** * Basic parsing Interfaces */ -xmlDocPtr xmlParseDoc(CHAR *cur); -xmlDocPtr xmlParseMemory(char *buffer, int size); -xmlDocPtr xmlParseFile(const char *filename); -int xmlSubstituteEntitiesDefault(int val); +xmlDocPtr xmlParseDoc (CHAR *cur); +xmlDocPtr xmlParseMemory (char *buffer, + int size); +xmlDocPtr xmlParseFile (const char *filename); +int xmlSubstituteEntitiesDefault(int val); /** * Recovery mode */ -xmlDocPtr xmlRecoverDoc(CHAR *cur); -xmlDocPtr xmlRecoverMemory(char *buffer, int size); -xmlDocPtr xmlRecoverFile(const char *filename); +xmlDocPtr xmlRecoverDoc (CHAR *cur); +xmlDocPtr xmlRecoverMemory (char *buffer, + int size); +xmlDocPtr xmlRecoverFile (const char *filename); /** * Less common routines and SAX interfaces */ -int xmlParseDocument(xmlParserCtxtPtr ctxt); -xmlDocPtr xmlSAXParseDoc(xmlSAXHandlerPtr sax, CHAR *cur, int recovery); -xmlDocPtr xmlSAXParseMemory(xmlSAXHandlerPtr sax, char *buffer, - int size, int recovery); -xmlDocPtr xmlSAXParseFile(xmlSAXHandlerPtr sax, const char *filename, - int recovery); -xmlDtdPtr xmlParseDTD(const CHAR *ExternalID, const CHAR *SystemID); -xmlDtdPtr xmlSAXParseDTD(xmlSAXHandlerPtr sax, const CHAR *ExternalID, - const CHAR *SystemID); -void xmlInitParserCtxt(xmlParserCtxtPtr ctxt); -void xmlClearParserCtxt(xmlParserCtxtPtr ctxt); -void xmlSetupParserForBuffer(xmlParserCtxtPtr ctxt, const CHAR* buffer, - const char* filename); +int xmlParseDocument (xmlParserCtxtPtr ctxt); +xmlDocPtr xmlSAXParseDoc (xmlSAXHandlerPtr sax, + CHAR *cur, + int recovery); +xmlDocPtr xmlSAXParseMemory (xmlSAXHandlerPtr sax, + char *buffer, + int size, + int recovery); +xmlDocPtr xmlSAXParseFile (xmlSAXHandlerPtr sax, + const char *filename, + int recovery); +xmlDtdPtr xmlParseDTD (const CHAR *ExternalID, + const CHAR *SystemID); +xmlDtdPtr xmlSAXParseDTD (xmlSAXHandlerPtr sax, + const CHAR *ExternalID, + const CHAR *SystemID); +void xmlInitParserCtxt (xmlParserCtxtPtr ctxt); +void xmlClearParserCtxt (xmlParserCtxtPtr ctxt); +void xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt, + const CHAR* buffer, + const char* filename); +void xmlDefaultSAXHandlerInit(void); +void htmlDefaultSAXHandlerInit(void); -const xmlParserNodeInfo* xmlParserFindNodeInfo(const xmlParserCtxt* ctxt, +/** + * Node infos + */ +const xmlParserNodeInfo* + xmlParserFindNodeInfo (const xmlParserCtxt* ctxt, const xmlNode* node); -void xmlInitNodeInfoSeq(xmlParserNodeInfoSeqPtr seq); -void xmlClearNodeInfoSeq(xmlParserNodeInfoSeqPtr seq); +void xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); +void xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); unsigned long xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeq* seq, const xmlNode* node); -void xmlParserAddNodeInfo(xmlParserCtxtPtr ctxt, - const xmlParserNodeInfo* info); +void xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt, + const xmlParserNodeInfo* info); -void xmlDefaultSAXHandlerInit(void); -void htmlDefaultSAXHandlerInit(void); +/* + * External entities handling actually implemented in xmlIO + */ + +void xmlSetExternalEntityLoader(xmlExternalEntityLoader f); +xmlExternalEntityLoader + xmlGetExternalEntityLoader(void); +xmlParserInputPtr + xmlLoadExternalEntity (const char *URL, + const char *ID, + xmlParserInputPtr context); #ifdef __cplusplus } #endif diff --git a/parserInternals.h b/parserInternals.h index ae8e2cc2..413c26c6 100644 --- a/parserInternals.h +++ b/parserInternals.h @@ -15,6 +15,8 @@ extern "C" { #endif +#define XML_MAX_NAMELEN 1000 + /** * A few macros needed to help building the parser. */ @@ -510,154 +512,112 @@ typedef unsigned char CHARVAL; * entity substitution default behaviour. */ -int xmlSubstituteEntitiesDefaultValue; +int xmlSubstituteEntitiesDefaultValue; /** * Parser context */ -xmlParserCtxtPtr -xmlCreateDocParserCtxt(CHAR *cur); -xmlParserCtxtPtr -xmlCreateFileParserCtxt(const char *filename); -xmlParserCtxtPtr -xmlCreateMemoryParserCtxt(char *buffer, int size); -void -xmlFreeParserCtxt(xmlParserCtxtPtr ctxt); -xmlParserCtxtPtr -xmlNewParserCtxt(); -void -xmlSwitchEncoding(xmlParserCtxtPtr ctxt, xmlCharEncoding enc); +xmlParserCtxtPtr xmlCreateDocParserCtxt (CHAR *cur); +xmlParserCtxtPtr xmlCreateFileParserCtxt (const char *filename); +xmlParserCtxtPtr xmlCreateMemoryParserCtxt(char *buffer, + int size); +void xmlFreeParserCtxt (xmlParserCtxtPtr ctxt); +xmlParserCtxtPtr xmlNewParserCtxt (void); +void xmlSwitchEncoding (xmlParserCtxtPtr ctxt, + xmlCharEncoding enc); /** * Entities */ -void -xmlHandleEntity(xmlParserCtxtPtr ctxt, xmlEntityPtr entity); +void xmlHandleEntity (xmlParserCtxtPtr ctxt, + xmlEntityPtr entity); /** * Input Streams */ -xmlParserInputPtr -xmlNewEntityInputStream(xmlParserCtxtPtr ctxt, xmlEntityPtr entity); -void -xmlPushInput(xmlParserCtxtPtr ctxt, xmlParserInputPtr input); -CHAR -xmlPopInput(xmlParserCtxtPtr ctxt); -void -xmlFreeInputStream(xmlParserInputPtr input); -xmlParserInputPtr -xmlNewInputFromFile(xmlParserCtxtPtr ctxt, const char *filename); +xmlParserInputPtr xmlNewEntityInputStream (xmlParserCtxtPtr ctxt, + xmlEntityPtr entity); +void xmlPushInput (xmlParserCtxtPtr ctxt, + xmlParserInputPtr input); +CHAR xmlPopInput (xmlParserCtxtPtr ctxt); +void xmlFreeInputStream (xmlParserInputPtr input); +xmlParserInputPtr xmlNewInputFromFile (xmlParserCtxtPtr ctxt, + const char *filename); /** * Namespaces. */ -CHAR * -xmlSplitQName(const CHAR *name, CHAR **prefix); -CHAR * -xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt); -CHAR * -xmlNamespaceParseQName(xmlParserCtxtPtr ctxt, CHAR **prefix); -CHAR * -xmlNamespaceParseNSDef(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseQuotedString(xmlParserCtxtPtr ctxt); -void -xmlParseNamespace(xmlParserCtxtPtr ctxt); +CHAR * xmlSplitQName (const CHAR *name, + CHAR **prefix); +CHAR * xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt); +CHAR * xmlNamespaceParseQName (xmlParserCtxtPtr ctxt, + CHAR **prefix); +CHAR * xmlNamespaceParseNSDef (xmlParserCtxtPtr ctxt); +CHAR * xmlParseQuotedString (xmlParserCtxtPtr ctxt); +void xmlParseNamespace (xmlParserCtxtPtr ctxt); /** * Generic production rules */ -CHAR * -xmlScanName(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseName(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseNmtoken(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseEntityValue(xmlParserCtxtPtr ctxt, CHAR **orig); -CHAR * -xmlParseAttValue(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseSystemLiteral(xmlParserCtxtPtr ctxt); -CHAR * -xmlParsePubidLiteral(xmlParserCtxtPtr ctxt); -void -xmlParseCharData(xmlParserCtxtPtr ctxt, int cdata); -CHAR * -xmlParseExternalID(xmlParserCtxtPtr ctxt, CHAR **publicID, int strict); -void -xmlParseComment(xmlParserCtxtPtr ctxt, int create); -CHAR * -xmlParsePITarget(xmlParserCtxtPtr ctxt); -void -xmlParsePI(xmlParserCtxtPtr ctxt); -void -xmlParseNotationDecl(xmlParserCtxtPtr ctxt); -void -xmlParseEntityDecl(xmlParserCtxtPtr ctxt); -int -xmlParseDefaultDecl(xmlParserCtxtPtr ctxt, CHAR **value); -xmlEnumerationPtr -xmlParseNotationType(xmlParserCtxtPtr ctxt); -xmlEnumerationPtr -xmlParseEnumerationType(xmlParserCtxtPtr ctxt); -int -xmlParseEnumeratedType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree); -int -xmlParseAttributeType(xmlParserCtxtPtr ctxt, xmlEnumerationPtr *tree); -void -xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt); -xmlElementContentPtr -xmlParseElementMixedContentDecl(xmlParserCtxtPtr ctxt); -xmlElementContentPtr -xmlParseElementChildrenContentDecl(xmlParserCtxtPtr ctxt); -int -xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, CHAR *name, - xmlElementContentPtr *result); -int -xmlParseElementDecl(xmlParserCtxtPtr ctxt); -void -xmlParseMarkupDecl(xmlParserCtxtPtr ctxt); -int -xmlParseCharRef(xmlParserCtxtPtr ctxt); -xmlEntityPtr -xmlParseEntityRef(xmlParserCtxtPtr ctxt); -void -xmlParseReference(xmlParserCtxtPtr ctxt); -void -xmlParsePEReference(xmlParserCtxtPtr ctxt); -void -xmlParseDocTypeDecl(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseAttribute(xmlParserCtxtPtr ctxt, CHAR **value); -CHAR * -xmlParseStartTag(xmlParserCtxtPtr ctxt); -void -xmlParseEndTag(xmlParserCtxtPtr ctxt, CHAR *tagname); -void -xmlParseCDSect(xmlParserCtxtPtr ctxt); -void -xmlParseContent(xmlParserCtxtPtr ctxt); -void -xmlParseElement(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseVersionNum(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseVersionInfo(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseEncName(xmlParserCtxtPtr ctxt); -CHAR * -xmlParseEncodingDecl(xmlParserCtxtPtr ctxt); -int -xmlParseSDDecl(xmlParserCtxtPtr ctxt); -void -xmlParseXMLDecl(xmlParserCtxtPtr ctxt); -void -xmlParseMisc(xmlParserCtxtPtr ctxt); -void -xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const CHAR *ExternalID, - const CHAR *SystemID); - +CHAR * xmlScanName (xmlParserCtxtPtr ctxt); +CHAR * xmlParseName (xmlParserCtxtPtr ctxt); +CHAR * xmlParseNmtoken (xmlParserCtxtPtr ctxt); +CHAR * xmlParseEntityValue (xmlParserCtxtPtr ctxt, + CHAR **orig); +CHAR * xmlParseAttValue (xmlParserCtxtPtr ctxt); +CHAR * xmlParseSystemLiteral (xmlParserCtxtPtr ctxt); +CHAR * xmlParsePubidLiteral (xmlParserCtxtPtr ctxt); +void xmlParseCharData (xmlParserCtxtPtr ctxt, + int cdata); +CHAR * xmlParseExternalID (xmlParserCtxtPtr ctxt, + CHAR **publicID, + int strict); +void xmlParseComment (xmlParserCtxtPtr ctxt); +CHAR * xmlParsePITarget (xmlParserCtxtPtr ctxt); +void xmlParsePI (xmlParserCtxtPtr ctxt); +void xmlParseNotationDecl (xmlParserCtxtPtr ctxt); +void xmlParseEntityDecl (xmlParserCtxtPtr ctxt); +int xmlParseDefaultDecl (xmlParserCtxtPtr ctxt, + CHAR **value); +xmlEnumerationPtr xmlParseNotationType (xmlParserCtxtPtr ctxt); +xmlEnumerationPtr xmlParseEnumerationType (xmlParserCtxtPtr ctxt); +int xmlParseEnumeratedType (xmlParserCtxtPtr ctxt, + xmlEnumerationPtr *tree); +int xmlParseAttributeType (xmlParserCtxtPtr ctxt, + xmlEnumerationPtr *tree); +void xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt); +xmlElementContentPtr xmlParseElementMixedContentDecl + (xmlParserCtxtPtr ctxt); +xmlElementContentPtr xmlParseElementChildrenContentDecl + (xmlParserCtxtPtr ctxt); +int xmlParseElementContentDecl(xmlParserCtxtPtr ctxt, + CHAR *name, + xmlElementContentPtr *result); +int xmlParseElementDecl (xmlParserCtxtPtr ctxt); +void xmlParseMarkupDecl (xmlParserCtxtPtr ctxt); +int xmlParseCharRef (xmlParserCtxtPtr ctxt); +xmlEntityPtr xmlParseEntityRef (xmlParserCtxtPtr ctxt); +void xmlParseReference (xmlParserCtxtPtr ctxt); +void xmlParsePEReference (xmlParserCtxtPtr ctxt); +void xmlParseDocTypeDecl (xmlParserCtxtPtr ctxt); +CHAR * xmlParseAttribute (xmlParserCtxtPtr ctxt, + CHAR **value); +CHAR * xmlParseStartTag (xmlParserCtxtPtr ctxt); +void xmlParseEndTag (xmlParserCtxtPtr ctxt, + CHAR *tagname); +void xmlParseCDSect (xmlParserCtxtPtr ctxt); +void xmlParseContent (xmlParserCtxtPtr ctxt); +void xmlParseElement (xmlParserCtxtPtr ctxt); +CHAR * xmlParseVersionNum (xmlParserCtxtPtr ctxt); +CHAR * xmlParseVersionInfo (xmlParserCtxtPtr ctxt); +CHAR * xmlParseEncName (xmlParserCtxtPtr ctxt); +CHAR * xmlParseEncodingDecl (xmlParserCtxtPtr ctxt); +int xmlParseSDDecl (xmlParserCtxtPtr ctxt); +void xmlParseXMLDecl (xmlParserCtxtPtr ctxt); +void xmlParseMisc (xmlParserCtxtPtr ctxt); +void xmlParseExternalSubset (xmlParserCtxtPtr ctxt, + const CHAR *ExternalID, + const CHAR *SystemID); /* * Entities substitution */ @@ -666,16 +626,21 @@ xmlParseExternalSubset(xmlParserCtxtPtr ctxt, const CHAR *ExternalID, #define XML_SUBSTITUTE_PEREF 2 #define XML_SUBSTITUTE_BOTH 3 -CHAR * -xmlDecodeEntities(xmlParserCtxtPtr ctxt, int len, int what, - CHAR end, CHAR end2, CHAR end3); +CHAR * xmlDecodeEntities (xmlParserCtxtPtr ctxt, + int len, + int what, + CHAR end, + CHAR end2, + CHAR end3); /* * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP */ -extern int nodePush(xmlParserCtxtPtr ctxt, xmlNodePtr value); -extern xmlNodePtr nodePop(xmlParserCtxtPtr ctxt); -extern int inputPush(xmlParserCtxtPtr ctxt, xmlParserInputPtr value); -extern xmlParserInputPtr inputPop(xmlParserCtxtPtr ctxt); +int nodePush (xmlParserCtxtPtr ctxt, + xmlNodePtr value); +xmlNodePtr nodePop (xmlParserCtxtPtr ctxt); +int inputPush (xmlParserCtxtPtr ctxt, + xmlParserInputPtr value); +xmlParserInputPtr inputPop (xmlParserCtxtPtr ctxt); #endif /* __XML_PARSER_INTERNALS_H__ */ diff --git a/result/VC/AttributeDefaultLegal b/result/VC/AttributeDefaultLegal index 5bdfdb79..2bd897fc 100644 --- a/result/VC/AttributeDefaultLegal +++ b/result/VC/AttributeDefaultLegal @@ -1,10 +1,10 @@ -./test/VC/AttributeDefaultLegal:4: validity error: Syntax of default value for attribute At on doc is not valid +./test/VC/AttributeDefaultLegal:4: validity error: Attribute doc on At: invalid default value ^ -./test/VC/AttributeDefaultLegal:6: validity error: Syntax of default value for attribute bad on doc is not valid +./test/VC/AttributeDefaultLegal:6: validity error: Attribute doc on bad: invalid default value ^ -./test/VC/AttributeDefaultLegal:8: validity error: Syntax of default value for attribute bad2 on doc is not valid +./test/VC/AttributeDefaultLegal:8: validity error: Attribute doc on bad2: invalid default value ^ ./test/VC/AttributeDefaultLegal:11: validity error: No declaration for attribute val on element doc diff --git a/result/XPath/tests/chaptersbase b/result/XPath/tests/chaptersbase index c9a10f96..18895355 100644 --- a/result/XPath/tests/chaptersbase +++ b/result/XPath/tests/chaptersbase @@ -8,13 +8,14 @@ Set contains 1 nodes: TEXT content=& linux too Object is a Node Set : -Set contains 6 nodes: -1 ELEMENT head -2 ELEMENT chapter -3 ELEMENT chapter -4 ELEMENT chapter -5 ELEMENT chapter -6 ELEMENT chapter +Set contains 1 nodes: +1 ELEMENT EXAMPLE + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too Object is a Node Set : Set contains 1 nodes: 1 ELEMENT head diff --git a/result/XPath/tests/simpleabbr b/result/XPath/tests/simpleabbr index aeb5f54d..9e3fcd3f 100644 --- a/result/XPath/tests/simpleabbr +++ b/result/XPath/tests/simpleabbr @@ -9,7 +9,7 @@ Set contains 1 nodes: content=& linux too Object is a Node Set : Set contains 1 nodes: -1 ELEMENT chapter +1 ELEMENT head Object is a Node Set : Set contains 1 nodes: 1 ELEMENT chapter diff --git a/result/XPath/tests/simplebase b/result/XPath/tests/simplebase index 3dcdcd46..db968d8d 100644 --- a/result/XPath/tests/simplebase +++ b/result/XPath/tests/simplebase @@ -9,7 +9,13 @@ Set contains 1 nodes: content=& linux too Object is a Node Set : Set contains 1 nodes: -1 ELEMENT chapter +1 ELEMENT EXAMPLE + ATTRIBUTE prop1 + TEXT + content=gnome is great + ATTRIBUTE prop2 + TEXT + content=& linux too Object is a Node Set : Set contains 1 nodes: 1 ELEMENT head diff --git a/result/noent/dia1 b/result/noent/dia1 index d8c3523f..207bd73a 100644 --- a/result/noent/dia1 +++ b/result/noent/dia1 @@ -1,98 +1,98 @@ - - + + - - - - + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - - - + + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/result/noent/dia2 b/result/noent/dia2 index d8c3523f..207bd73a 100644 --- a/result/noent/dia2 +++ b/result/noent/dia2 @@ -1,98 +1,98 @@ - - + + - - - - + + + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - + - - - + + + - - + + - - - - + + + + - - + + - - + + - - + + - - + + - - + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/result/noent/ent2 b/result/noent/ent2 index 1c6d19b5..83d8f0f5 100644 --- a/result/noent/ent2 +++ b/result/noent/ent2 @@ -7,6 +7,6 @@ This text is about XML, the Extensible Markup Language and this is an embedded - + diff --git a/result/noent/ent3 b/result/noent/ent3 index e69de29b..b1c0b149 100644 --- a/result/noent/ent3 +++ b/result/noent/ent3 @@ -0,0 +1,7 @@ + + +]> + + Test of entities in attributes. + diff --git a/result/noent/ent4 b/result/noent/ent4 index e69de29b..a92194cd 100644 --- a/result/noent/ent4 +++ b/result/noent/ent4 @@ -0,0 +1,7 @@ + + +]> + + Test of &amp; behaviour a&b . + diff --git a/result/noent/p3p b/result/noent/p3p index e69de29b..b2ba102f 100644 --- a/result/noent/p3p +++ b/result/noent/p3p @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/noent/rdf1 b/result/noent/rdf1 index e69de29b..d44c3c6d 100644 --- a/result/noent/rdf1 +++ b/result/noent/rdf1 @@ -0,0 +1,81 @@ + + + + rpm + 2.5 + 2 + i386 + Linux + Manhattan + Red Hat Software + Red Hat Software <bugs@redhat.com> + Utilities/System + Red Hat Package Manager + RPM is a powerful package manager, which can be used to build, install, +query, verify, update, and uninstall individual software packages. A +package consists of an archive of files, and package information, including +name, version, and description. + GPL + * Sun May 10 1998 Prospector System <bugs@redhat.com> + - translations modified for de, fr, tr + + rpm-2.5-2.src.rpm + ftp://ftp.redhat.com/pub/redhat/redhat-5.1/SRPMS + Sun May 10 14:52:32 1998 + 894826352 + 850599 + porky.redhat.com + + + rpm + + + + + /bin/sh + ld-linux.so.2 + libc.so.6 + libdb.so.2 + libz.so.1 + /bin/bash + /bin/sh + + + /bin/rpm +/usr/bin/find-provides +/usr/bin/find-requires +/usr/bin/gendiff +/usr/bin/rpm2cpio +/usr/doc/rpm-2.5 +/usr/doc/rpm-2.5/CHANGES +/usr/doc/rpm-2.5/RPM-PGP-KEY +/usr/doc/rpm-2.5/buildroot +/usr/doc/rpm-2.5/dependencies +/usr/doc/rpm-2.5/format +/usr/doc/rpm-2.5/groups +/usr/doc/rpm-2.5/macros +/usr/doc/rpm-2.5/queryformat +/usr/doc/rpm-2.5/relocatable +/usr/doc/rpm-2.5/signatures +/usr/doc/rpm-2.5/spec +/usr/doc/rpm-2.5/triggers +/usr/lib/rpmpopt +/usr/lib/rpmrc +/usr/man/man8/rpm.8 +/usr/man/man8/rpm2cpio.8 +/usr/share/locale/de/LC_MESSAGES/rpm.mo +/usr/share/locale/fr/LC_MESSAGES/rpm.mo +/usr/share/locale/pt-br/LC_MESSAGES/rpm.mo +/usr/share/locale/sv/LC_MESSAGES/rpm.mo +/usr/share/locale/tr/LC_MESSAGES/rpm.mo +/usr/src/redhat +/usr/src/redhat/BUILD +/usr/src/redhat/RPMS +/usr/src/redhat/RPMS/i386 +/usr/src/redhat/RPMS/noarch +/usr/src/redhat/SOURCES +/usr/src/redhat/SPECS +/usr/src/redhat/SRPMS + + + diff --git a/result/noent/rdf2 b/result/noent/rdf2 index e69de29b..fe803995 100644 --- a/result/noent/rdf2 +++ b/result/noent/rdf2 @@ -0,0 +1,1899 @@ + + + + ncurses4 + 4.2 + 3 + i386 + Linux + DLD + delix Computer GmbH + Till Bubeck <bubeck@delix.de>, Ngo Than <than@delix.de> + Libraries + Bibliothek zur Ansteuerung von Terminals + Diese Library stellt dem Programmierer vom Terminal unabhängige +Routinen zur Ansteuerung Ihres Bildschirms zur Verfügung, die +speziell optimiert sind. +Diese Version ist die 'new curses' (ncurses) Variante und ist der +anerkannte Ersatz für die klassische Curses-Library, die nicht mehr +weiterentwickelt wird. + GPL + ncurses4-4.2-3.src.rpm + Tue May 12 19:30:26 1998 + 895015826 + 1373513 + erdbeere.delix.de + + + ncurses4 + libpanel.so.4 + libncurses.so.4 + libmenu.so.4 + libform.so.4 + ncurses + + + /lib/libncurses.so.4 +/lib/libncurses.so.4.2 +/usr/doc/ncurses4-4.2-3 +/usr/doc/ncurses4-4.2-3/ANNOUNCE.gz +/usr/doc/ncurses4-4.2-3/NEWS.gz +/usr/doc/ncurses4-4.2-3/README.gz +/usr/doc/ncurses4-4.2-3/TO-DO.gz +/usr/lib/libform.so.4 +/usr/lib/libform.so.4.2 +/usr/lib/libmenu.so.4 +/usr/lib/libmenu.so.4.2 +/usr/lib/libpanel.so.4 +/usr/lib/libpanel.so.4.2 +/usr/share/ncurses4 +/usr/share/ncurses4/tabset +/usr/share/ncurses4/tabset/std +/usr/share/ncurses4/tabset/stdcrt +/usr/share/ncurses4/tabset/vt100 +/usr/share/ncurses4/tabset/vt300 +/usr/share/ncurses4/terminfo +/usr/share/ncurses4/terminfo/1 +/usr/share/ncurses4/terminfo/1/1178 +/usr/share/ncurses4/terminfo/1/1730-lm +/usr/share/ncurses4/terminfo/2 +/usr/share/ncurses4/terminfo/2/2621 +/usr/share/ncurses4/terminfo/2/2621-wl +/usr/share/ncurses4/terminfo/2/2621A +/usr/share/ncurses4/terminfo/2/2621a +/usr/share/ncurses4/terminfo/3 +/usr/share/ncurses4/terminfo/3/386at +/usr/share/ncurses4/terminfo/3/3b1 +/usr/share/ncurses4/terminfo/4 +/usr/share/ncurses4/terminfo/4/4025ex +/usr/share/ncurses4/terminfo/4/4027ex +/usr/share/ncurses4/terminfo/4/4410-w +/usr/share/ncurses4/terminfo/5 +/usr/share/ncurses4/terminfo/5/5051 +/usr/share/ncurses4/terminfo/5/5410-w +/usr/share/ncurses4/terminfo/5/5620 +/usr/share/ncurses4/terminfo/5/5630-24 +/usr/share/ncurses4/terminfo/5/5630DMD-24 +/usr/share/ncurses4/terminfo/6 +/usr/share/ncurses4/terminfo/6/630-lm +/usr/share/ncurses4/terminfo/6/630MTG-24 +/usr/share/ncurses4/terminfo/7 +/usr/share/ncurses4/terminfo/7/730MTG-24 +/usr/share/ncurses4/terminfo/7/730MTG-41 +/usr/share/ncurses4/terminfo/7/730MTG-41r +/usr/share/ncurses4/terminfo/7/730MTGr +/usr/share/ncurses4/terminfo/7/730MTGr-24 +/usr/share/ncurses4/terminfo/8 +/usr/share/ncurses4/terminfo/8/8510 +/usr/share/ncurses4/terminfo/9 +/usr/share/ncurses4/terminfo/9/955-hb +/usr/share/ncurses4/terminfo/9/955-w +/usr/share/ncurses4/terminfo/P +/usr/share/ncurses4/terminfo/P/P12 +/usr/share/ncurses4/terminfo/P/P12-M +/usr/share/ncurses4/terminfo/P/P12-M-W +/usr/share/ncurses4/terminfo/P/P12-W +/usr/share/ncurses4/terminfo/P/P14 +/usr/share/ncurses4/terminfo/P/P14-M +/usr/share/ncurses4/terminfo/P/P14-M-W +/usr/share/ncurses4/terminfo/P/P14-W +/usr/share/ncurses4/terminfo/P/P4 +/usr/share/ncurses4/terminfo/P/P5 +/usr/share/ncurses4/terminfo/P/P7 +/usr/share/ncurses4/terminfo/P/P8 +/usr/share/ncurses4/terminfo/P/P8-W +/usr/share/ncurses4/terminfo/P/P9 +/usr/share/ncurses4/terminfo/P/P9-8 +/usr/share/ncurses4/terminfo/P/P9-8-W +/usr/share/ncurses4/terminfo/P/P9-W +/usr/share/ncurses4/terminfo/X +/usr/share/ncurses4/terminfo/X/X-hpterm +/usr/share/ncurses4/terminfo/a +/usr/share/ncurses4/terminfo/a/a210 +/usr/share/ncurses4/terminfo/a/a80 +/usr/share/ncurses4/terminfo/a/a980 +/usr/share/ncurses4/terminfo/a/aa4080 +/usr/share/ncurses4/terminfo/a/aaa +/usr/share/ncurses4/terminfo/a/aaa+dec +/usr/share/ncurses4/terminfo/a/aaa+rv +/usr/share/ncurses4/terminfo/a/aaa+unk +/usr/share/ncurses4/terminfo/a/aaa-18 +/usr/share/ncurses4/terminfo/a/aaa-18-rv +/usr/share/ncurses4/terminfo/a/aaa-20 +/usr/share/ncurses4/terminfo/a/aaa-22 +/usr/share/ncurses4/terminfo/a/aaa-24 +/usr/share/ncurses4/terminfo/a/aaa-24-rv +/usr/share/ncurses4/terminfo/a/aaa-26 +/usr/share/ncurses4/terminfo/a/aaa-28 +/usr/share/ncurses4/terminfo/a/aaa-30 +/usr/share/ncurses4/terminfo/a/aaa-30-ctxt +/usr/share/ncurses4/terminfo/a/aaa-30-rv +/usr/share/ncurses4/terminfo/a/aaa-30-rv-ctxt +/usr/share/ncurses4/terminfo/a/aaa-30-s +/usr/share/ncurses4/terminfo/a/aaa-30-s-ctxt +/usr/share/ncurses4/terminfo/a/aaa-30-s-rv +/usr/share/ncurses4/terminfo/a/aaa-30-s-rv-ct +/usr/share/ncurses4/terminfo/a/aaa-36 +/usr/share/ncurses4/terminfo/a/aaa-36-rv +/usr/share/ncurses4/terminfo/a/aaa-40 +/usr/share/ncurses4/terminfo/a/aaa-40-rv +/usr/share/ncurses4/terminfo/a/aaa-48 +/usr/share/ncurses4/terminfo/a/aaa-48-rv +/usr/share/ncurses4/terminfo/a/aaa-60 +/usr/share/ncurses4/terminfo/a/aaa-60-dec-rv +/usr/share/ncurses4/terminfo/a/aaa-60-rv +/usr/share/ncurses4/terminfo/a/aaa-60-s +/usr/share/ncurses4/terminfo/a/aaa-60-s-rv +/usr/share/ncurses4/terminfo/a/aaa-ctxt +/usr/share/ncurses4/terminfo/a/aaa-db +/usr/share/ncurses4/terminfo/a/aaa-rv +/usr/share/ncurses4/terminfo/a/aaa-rv-ctxt +/usr/share/ncurses4/terminfo/a/aaa-rv-unk +/usr/share/ncurses4/terminfo/a/aaa-s +/usr/share/ncurses4/terminfo/a/aaa-s-ctxt +/usr/share/ncurses4/terminfo/a/aaa-s-rv +/usr/share/ncurses4/terminfo/a/aaa-s-rv-ctxt +/usr/share/ncurses4/terminfo/a/aaa-unk +/usr/share/ncurses4/terminfo/a/aas1901 +/usr/share/ncurses4/terminfo/a/abm80 +/usr/share/ncurses4/terminfo/a/abm85 +/usr/share/ncurses4/terminfo/a/abm85e +/usr/share/ncurses4/terminfo/a/abm85h +/usr/share/ncurses4/terminfo/a/abm85h-old +/usr/share/ncurses4/terminfo/a/act4 +/usr/share/ncurses4/terminfo/a/act5 +/usr/share/ncurses4/terminfo/a/addrinfo +/usr/share/ncurses4/terminfo/a/adds980 +/usr/share/ncurses4/terminfo/a/addsviewpoint +/usr/share/ncurses4/terminfo/a/addsvp60 +/usr/share/ncurses4/terminfo/a/adm+sgr +/usr/share/ncurses4/terminfo/a/adm1 +/usr/share/ncurses4/terminfo/a/adm11 +/usr/share/ncurses4/terminfo/a/adm1178 +/usr/share/ncurses4/terminfo/a/adm12 +/usr/share/ncurses4/terminfo/a/adm1a +/usr/share/ncurses4/terminfo/a/adm2 +/usr/share/ncurses4/terminfo/a/adm20 +/usr/share/ncurses4/terminfo/a/adm21 +/usr/share/ncurses4/terminfo/a/adm22 +/usr/share/ncurses4/terminfo/a/adm3 +/usr/share/ncurses4/terminfo/a/adm31 +/usr/share/ncurses4/terminfo/a/adm31-old +/usr/share/ncurses4/terminfo/a/adm36 +/usr/share/ncurses4/terminfo/a/adm3a +/usr/share/ncurses4/terminfo/a/adm3a+ +/usr/share/ncurses4/terminfo/a/adm42 +/usr/share/ncurses4/terminfo/a/adm42-ns +/usr/share/ncurses4/terminfo/a/adm5 +/usr/share/ncurses4/terminfo/a/aepro +/usr/share/ncurses4/terminfo/a/aixterm-m +/usr/share/ncurses4/terminfo/a/aixterm-m-old +/usr/share/ncurses4/terminfo/a/aj +/usr/share/ncurses4/terminfo/a/aj510 +/usr/share/ncurses4/terminfo/a/aj830 +/usr/share/ncurses4/terminfo/a/aj832 +/usr/share/ncurses4/terminfo/a/alt2 +/usr/share/ncurses4/terminfo/a/alt3 +/usr/share/ncurses4/terminfo/a/alt4 +/usr/share/ncurses4/terminfo/a/alt5 +/usr/share/ncurses4/terminfo/a/alt7 +/usr/share/ncurses4/terminfo/a/alt7pc +/usr/share/ncurses4/terminfo/a/alto-h19 +/usr/share/ncurses4/terminfo/a/alto-heath +/usr/share/ncurses4/terminfo/a/altoh19 +/usr/share/ncurses4/terminfo/a/altoheath +/usr/share/ncurses4/terminfo/a/altos-2 +/usr/share/ncurses4/terminfo/a/altos-3 +/usr/share/ncurses4/terminfo/a/altos-4 +/usr/share/ncurses4/terminfo/a/altos-5 +/usr/share/ncurses4/terminfo/a/altos2 +/usr/share/ncurses4/terminfo/a/altos3 +/usr/share/ncurses4/terminfo/a/altos4 +/usr/share/ncurses4/terminfo/a/altos5 +/usr/share/ncurses4/terminfo/a/altos7 +/usr/share/ncurses4/terminfo/a/altos7pc +/usr/share/ncurses4/terminfo/a/ambas +/usr/share/ncurses4/terminfo/a/ambassador +/usr/share/ncurses4/terminfo/a/amiga +/usr/share/ncurses4/terminfo/a/amiga-h +/usr/share/ncurses4/terminfo/a/amp219 +/usr/share/ncurses4/terminfo/a/amp219w +/usr/share/ncurses4/terminfo/a/ampex-219 +/usr/share/ncurses4/terminfo/a/ampex-219w +/usr/share/ncurses4/terminfo/a/ampex-232 +/usr/share/ncurses4/terminfo/a/ampex175 +/usr/share/ncurses4/terminfo/a/ampex175-b +/usr/share/ncurses4/terminfo/a/ampex210 +/usr/share/ncurses4/terminfo/a/ampex219 +/usr/share/ncurses4/terminfo/a/ampex219w +/usr/share/ncurses4/terminfo/a/ampex232 +/usr/share/ncurses4/terminfo/a/ampex232w +/usr/share/ncurses4/terminfo/a/ampex80 +/usr/share/ncurses4/terminfo/a/annarbor4080 +/usr/share/ncurses4/terminfo/a/ansi +/usr/share/ncurses4/terminfo/a/ansi-color-2-emx +/usr/share/ncurses4/terminfo/a/ansi-color-3-emx +/usr/share/ncurses4/terminfo/a/ansi-emx +/usr/share/ncurses4/terminfo/a/ansi-m +/usr/share/ncurses4/terminfo/a/ansi-mini +/usr/share/ncurses4/terminfo/a/ansi-mono +/usr/share/ncurses4/terminfo/a/ansi-nt +/usr/share/ncurses4/terminfo/a/ansi.sys +/usr/share/ncurses4/terminfo/a/ansi.sys-old +/usr/share/ncurses4/terminfo/a/ansi.sysk +/usr/share/ncurses4/terminfo/a/ansi43m +/usr/share/ncurses4/terminfo/a/ansi77 +/usr/share/ncurses4/terminfo/a/ansi80x25 +/usr/share/ncurses4/terminfo/a/ansi80x25-mono +/usr/share/ncurses4/terminfo/a/ansi80x25-raw +/usr/share/ncurses4/terminfo/a/ansi80x30 +/usr/share/ncurses4/terminfo/a/ansi80x30-mono +/usr/share/ncurses4/terminfo/a/ansi80x43 +/usr/share/ncurses4/terminfo/a/ansi80x43-mono +/usr/share/ncurses4/terminfo/a/ansi80x50 +/usr/share/ncurses4/terminfo/a/ansi80x50-mono +/usr/share/ncurses4/terminfo/a/ansi80x60 +/usr/share/ncurses4/terminfo/a/ansi80x60-mono +/usr/share/ncurses4/terminfo/a/ansil +/usr/share/ncurses4/terminfo/a/ansil-mono +/usr/share/ncurses4/terminfo/a/ansis +/usr/share/ncurses4/terminfo/a/ansis-mono +/usr/share/ncurses4/terminfo/a/ansisysk +/usr/share/ncurses4/terminfo/a/ansiw +/usr/share/ncurses4/terminfo/a/ap-vm80 +/usr/share/ncurses4/terminfo/a/apl +/usr/share/ncurses4/terminfo/a/apollo +/usr/share/ncurses4/terminfo/a/apollo_15P +/usr/share/ncurses4/terminfo/a/apollo_19L +/usr/share/ncurses4/terminfo/a/apollo_color +/usr/share/ncurses4/terminfo/a/apple-80 +/usr/share/ncurses4/terminfo/a/apple-ae +/usr/share/ncurses4/terminfo/a/apple-soroc +/usr/share/ncurses4/terminfo/a/apple-uterm +/usr/share/ncurses4/terminfo/a/apple-uterm-vb +/usr/share/ncurses4/terminfo/a/apple-videx +/usr/share/ncurses4/terminfo/a/apple-videx2 +/usr/share/ncurses4/terminfo/a/apple-videx3 +/usr/share/ncurses4/terminfo/a/apple-vm80 +/usr/share/ncurses4/terminfo/a/apple2e +/usr/share/ncurses4/terminfo/a/apple2e-p +/usr/share/ncurses4/terminfo/a/apple80p +/usr/share/ncurses4/terminfo/a/appleII +/usr/share/ncurses4/terminfo/a/appleIIc +/usr/share/ncurses4/terminfo/a/appleIIe +/usr/share/ncurses4/terminfo/a/appleIIgs +/usr/share/ncurses4/terminfo/a/at386 +/usr/share/ncurses4/terminfo/a/atari +/usr/share/ncurses4/terminfo/a/att2300 +/usr/share/ncurses4/terminfo/a/att2350 +/usr/share/ncurses4/terminfo/a/att4410 +/usr/share/ncurses4/terminfo/a/att4410-w +/usr/share/ncurses4/terminfo/a/att4410v1 +/usr/share/ncurses4/terminfo/a/att4410v1-w +/usr/share/ncurses4/terminfo/a/att4415 +/usr/share/ncurses4/terminfo/a/att4415+nl +/usr/share/ncurses4/terminfo/a/att4415-nl +/usr/share/ncurses4/terminfo/a/att4415-rv +/usr/share/ncurses4/terminfo/a/att4415-rv-nl +/usr/share/ncurses4/terminfo/a/att4415-w +/usr/share/ncurses4/terminfo/a/att4415-w-nl +/usr/share/ncurses4/terminfo/a/att4415-w-rv +/usr/share/ncurses4/terminfo/a/att4415-w-rv-n +/usr/share/ncurses4/terminfo/a/att4418 +/usr/share/ncurses4/terminfo/a/att4418-w +/usr/share/ncurses4/terminfo/a/att4420 +/usr/share/ncurses4/terminfo/a/att4424 +/usr/share/ncurses4/terminfo/a/att4424-1 +/usr/share/ncurses4/terminfo/a/att4424m +/usr/share/ncurses4/terminfo/a/att4425 +/usr/share/ncurses4/terminfo/a/att4425-nl +/usr/share/ncurses4/terminfo/a/att4425-w +/usr/share/ncurses4/terminfo/a/att4426 +/usr/share/ncurses4/terminfo/a/att500 +/usr/share/ncurses4/terminfo/a/att505 +/usr/share/ncurses4/terminfo/a/att505-24 +/usr/share/ncurses4/terminfo/a/att510a +/usr/share/ncurses4/terminfo/a/att510d +/usr/share/ncurses4/terminfo/a/att513 +/usr/share/ncurses4/terminfo/a/att5310 +/usr/share/ncurses4/terminfo/a/att5320 +/usr/share/ncurses4/terminfo/a/att5410 +/usr/share/ncurses4/terminfo/a/att5410-w +/usr/share/ncurses4/terminfo/a/att5410v1 +/usr/share/ncurses4/terminfo/a/att5410v1-w +/usr/share/ncurses4/terminfo/a/att5418 +/usr/share/ncurses4/terminfo/a/att5418-w +/usr/share/ncurses4/terminfo/a/att5420 +/usr/share/ncurses4/terminfo/a/att5420+nl +/usr/share/ncurses4/terminfo/a/att5420-nl +/usr/share/ncurses4/terminfo/a/att5420-rv +/usr/share/ncurses4/terminfo/a/att5420-rv-nl +/usr/share/ncurses4/terminfo/a/att5420-w +/usr/share/ncurses4/terminfo/a/att5420-w-nl +/usr/share/ncurses4/terminfo/a/att5420-w-rv +/usr/share/ncurses4/terminfo/a/att5420-w-rv-n +/usr/share/ncurses4/terminfo/a/att5420_2 +/usr/share/ncurses4/terminfo/a/att5420_2-w +/usr/share/ncurses4/terminfo/a/att5425 +/usr/share/ncurses4/terminfo/a/att5425-nl +/usr/share/ncurses4/terminfo/a/att5425-w +/usr/share/ncurses4/terminfo/a/att5430 +/usr/share/ncurses4/terminfo/a/att5620 +/usr/share/ncurses4/terminfo/a/att5620-1 +/usr/share/ncurses4/terminfo/a/att5620-24 +/usr/share/ncurses4/terminfo/a/att5620-34 +/usr/share/ncurses4/terminfo/a/att5620-s +/usr/share/ncurses4/terminfo/a/att605 +/usr/share/ncurses4/terminfo/a/att605-pc +/usr/share/ncurses4/terminfo/a/att605-w +/usr/share/ncurses4/terminfo/a/att610 +/usr/share/ncurses4/terminfo/a/att610-103k +/usr/share/ncurses4/terminfo/a/att610-103k-w +/usr/share/ncurses4/terminfo/a/att610-w +/usr/share/ncurses4/terminfo/a/att615 +/usr/share/ncurses4/terminfo/a/att615-103k +/usr/share/ncurses4/terminfo/a/att615-103k-w +/usr/share/ncurses4/terminfo/a/att615-w +/usr/share/ncurses4/terminfo/a/att620 +/usr/share/ncurses4/terminfo/a/att620-103k +/usr/share/ncurses4/terminfo/a/att620-103k-w +/usr/share/ncurses4/terminfo/a/att620-w +/usr/share/ncurses4/terminfo/a/att630 +/usr/share/ncurses4/terminfo/a/att630-24 +/usr/share/ncurses4/terminfo/a/att6386 +/usr/share/ncurses4/terminfo/a/att730 +/usr/share/ncurses4/terminfo/a/att730-24 +/usr/share/ncurses4/terminfo/a/att730-41 +/usr/share/ncurses4/terminfo/a/att7300 +/usr/share/ncurses4/terminfo/a/att730r +/usr/share/ncurses4/terminfo/a/att730r-24 +/usr/share/ncurses4/terminfo/a/att730r-41 +/usr/share/ncurses4/terminfo/a/avatar +/usr/share/ncurses4/terminfo/a/avatar0 +/usr/share/ncurses4/terminfo/a/avatar0+ +/usr/share/ncurses4/terminfo/a/avatar1 +/usr/share/ncurses4/terminfo/a/avt +/usr/share/ncurses4/terminfo/a/avt+s +/usr/share/ncurses4/terminfo/a/avt-ns +/usr/share/ncurses4/terminfo/a/avt-rv +/usr/share/ncurses4/terminfo/a/avt-rv-ns +/usr/share/ncurses4/terminfo/a/avt-rv-s +/usr/share/ncurses4/terminfo/a/avt-s +/usr/share/ncurses4/terminfo/a/avt-w +/usr/share/ncurses4/terminfo/a/avt-w-ns +/usr/share/ncurses4/terminfo/a/avt-w-rv +/usr/share/ncurses4/terminfo/a/avt-w-rv-ns +/usr/share/ncurses4/terminfo/a/avt-w-rv-s +/usr/share/ncurses4/terminfo/a/avt-w-s +/usr/share/ncurses4/terminfo/a/aws +/usr/share/ncurses4/terminfo/a/awsc +/usr/share/ncurses4/terminfo/b +/usr/share/ncurses4/terminfo/b/b-128 +/usr/share/ncurses4/terminfo/b/bantam +/usr/share/ncurses4/terminfo/b/basic4 +/usr/share/ncurses4/terminfo/b/basis +/usr/share/ncurses4/terminfo/b/bct510a +/usr/share/ncurses4/terminfo/b/bct510d +/usr/share/ncurses4/terminfo/b/beacon +/usr/share/ncurses4/terminfo/b/bee +/usr/share/ncurses4/terminfo/b/beehive +/usr/share/ncurses4/terminfo/b/beehive3 +/usr/share/ncurses4/terminfo/b/beehive4 +/usr/share/ncurses4/terminfo/b/beehiveIIIm +/usr/share/ncurses4/terminfo/b/beterm +/usr/share/ncurses4/terminfo/b/bg1.25 +/usr/share/ncurses4/terminfo/b/bg1.25nv +/usr/share/ncurses4/terminfo/b/bg1.25rv +/usr/share/ncurses4/terminfo/b/bg2.0 +/usr/share/ncurses4/terminfo/b/bg2.0nv +/usr/share/ncurses4/terminfo/b/bg2.0rv +/usr/share/ncurses4/terminfo/b/bg3.10 +/usr/share/ncurses4/terminfo/b/bg3.10nv +/usr/share/ncurses4/terminfo/b/bg3.10rv +/usr/share/ncurses4/terminfo/b/bh3m +/usr/share/ncurses4/terminfo/b/bh4 +/usr/share/ncurses4/terminfo/b/bitgraph +/usr/share/ncurses4/terminfo/b/blit +/usr/share/ncurses4/terminfo/b/bobcat +/usr/share/ncurses4/terminfo/b/bsdos +/usr/share/ncurses4/terminfo/b/bsdos-bold +/usr/share/ncurses4/terminfo/c +/usr/share/ncurses4/terminfo/c/c100 +/usr/share/ncurses4/terminfo/c/c100-1p +/usr/share/ncurses4/terminfo/c/c100-4p +/usr/share/ncurses4/terminfo/c/c100-rv +/usr/share/ncurses4/terminfo/c/c100-rv-4p +/usr/share/ncurses4/terminfo/c/c104 +/usr/share/ncurses4/terminfo/c/c108 +/usr/share/ncurses4/terminfo/c/c108-4p +/usr/share/ncurses4/terminfo/c/c108-8p +/usr/share/ncurses4/terminfo/c/c108-rv +/usr/share/ncurses4/terminfo/c/c108-rv-4p +/usr/share/ncurses4/terminfo/c/c108-rv-8p +/usr/share/ncurses4/terminfo/c/c108-w +/usr/share/ncurses4/terminfo/c/c108-w-8p +/usr/share/ncurses4/terminfo/c/c300 +/usr/share/ncurses4/terminfo/c/c301 +/usr/share/ncurses4/terminfo/c/c321 +/usr/share/ncurses4/terminfo/c/ca22851 +/usr/share/ncurses4/terminfo/c/cad68-2 +/usr/share/ncurses4/terminfo/c/cad68-3 +/usr/share/ncurses4/terminfo/c/cbblit +/usr/share/ncurses4/terminfo/c/cbunix +/usr/share/ncurses4/terminfo/c/cci +/usr/share/ncurses4/terminfo/c/cci1 +/usr/share/ncurses4/terminfo/c/cdc456 +/usr/share/ncurses4/terminfo/c/cdc721 +/usr/share/ncurses4/terminfo/c/cdc721-esc +/usr/share/ncurses4/terminfo/c/cdc721ll +/usr/share/ncurses4/terminfo/c/cdc752 +/usr/share/ncurses4/terminfo/c/cdc756 +/usr/share/ncurses4/terminfo/c/cg7900 +/usr/share/ncurses4/terminfo/c/cgc2 +/usr/share/ncurses4/terminfo/c/cgc3 +/usr/share/ncurses4/terminfo/c/chromatics +/usr/share/ncurses4/terminfo/c/ci8510 +/usr/share/ncurses4/terminfo/c/cit-80 +/usr/share/ncurses4/terminfo/c/cit101 +/usr/share/ncurses4/terminfo/c/cit101e +/usr/share/ncurses4/terminfo/c/cit101e-132 +/usr/share/ncurses4/terminfo/c/cit101e-n +/usr/share/ncurses4/terminfo/c/cit101e-n132 +/usr/share/ncurses4/terminfo/c/cit101e-rv +/usr/share/ncurses4/terminfo/c/cit500 +/usr/share/ncurses4/terminfo/c/cit80 +/usr/share/ncurses4/terminfo/c/citc +/usr/share/ncurses4/terminfo/c/citoh +/usr/share/ncurses4/terminfo/c/citoh-6lpi +/usr/share/ncurses4/terminfo/c/citoh-8lpi +/usr/share/ncurses4/terminfo/c/citoh-comp +/usr/share/ncurses4/terminfo/c/citoh-elite +/usr/share/ncurses4/terminfo/c/citoh-pica +/usr/share/ncurses4/terminfo/c/citoh-prop +/usr/share/ncurses4/terminfo/c/citoh-ps +/usr/share/ncurses4/terminfo/c/coco3 +/usr/share/ncurses4/terminfo/c/coherent +/usr/share/ncurses4/terminfo/c/color_xterm +/usr/share/ncurses4/terminfo/c/colorscan +/usr/share/ncurses4/terminfo/c/commodore +/usr/share/ncurses4/terminfo/c/concept +/usr/share/ncurses4/terminfo/c/concept-avt +/usr/share/ncurses4/terminfo/c/concept100 +/usr/share/ncurses4/terminfo/c/concept100-rv +/usr/share/ncurses4/terminfo/c/concept108 +/usr/share/ncurses4/terminfo/c/concept108-4p +/usr/share/ncurses4/terminfo/c/concept108-8p +/usr/share/ncurses4/terminfo/c/concept108-w-8 +/usr/share/ncurses4/terminfo/c/concept108-w8p +/usr/share/ncurses4/terminfo/c/concept108rv4p +/usr/share/ncurses4/terminfo/c/cons25 +/usr/share/ncurses4/terminfo/c/cons25-iso-m +/usr/share/ncurses4/terminfo/c/cons25-iso8859 +/usr/share/ncurses4/terminfo/c/cons25-koi8-r +/usr/share/ncurses4/terminfo/c/cons25-koi8r-m +/usr/share/ncurses4/terminfo/c/cons25-m +/usr/share/ncurses4/terminfo/c/cons25l1 +/usr/share/ncurses4/terminfo/c/cons25l1-m +/usr/share/ncurses4/terminfo/c/cons25r +/usr/share/ncurses4/terminfo/c/cons25r-m +/usr/share/ncurses4/terminfo/c/cons25w +/usr/share/ncurses4/terminfo/c/cons30 +/usr/share/ncurses4/terminfo/c/cons30-m +/usr/share/ncurses4/terminfo/c/cons43 +/usr/share/ncurses4/terminfo/c/cons43-m +/usr/share/ncurses4/terminfo/c/cons50 +/usr/share/ncurses4/terminfo/c/cons50-iso-m +/usr/share/ncurses4/terminfo/c/cons50-iso8859 +/usr/share/ncurses4/terminfo/c/cons50-koi8r +/usr/share/ncurses4/terminfo/c/cons50-koi8r-m +/usr/share/ncurses4/terminfo/c/cons50-m +/usr/share/ncurses4/terminfo/c/cons50l1 +/usr/share/ncurses4/terminfo/c/cons50l1-m +/usr/share/ncurses4/terminfo/c/cons50r +/usr/share/ncurses4/terminfo/c/cons50r-m +/usr/share/ncurses4/terminfo/c/cons60 +/usr/share/ncurses4/terminfo/c/cons60-iso +/usr/share/ncurses4/terminfo/c/cons60-iso-m +/usr/share/ncurses4/terminfo/c/cons60-koi8r +/usr/share/ncurses4/terminfo/c/cons60-koi8r-m +/usr/share/ncurses4/terminfo/c/cons60-m +/usr/share/ncurses4/terminfo/c/cons60l1 +/usr/share/ncurses4/terminfo/c/cons60l1-m +/usr/share/ncurses4/terminfo/c/cons60r +/usr/share/ncurses4/terminfo/c/cons60r-m +/usr/share/ncurses4/terminfo/c/contel300 +/usr/share/ncurses4/terminfo/c/contel301 +/usr/share/ncurses4/terminfo/c/contel320 +/usr/share/ncurses4/terminfo/c/contel321 +/usr/share/ncurses4/terminfo/c/cops +/usr/share/ncurses4/terminfo/c/cops-10 +/usr/share/ncurses4/terminfo/c/cops10 +/usr/share/ncurses4/terminfo/c/cs10 +/usr/share/ncurses4/terminfo/c/cs10-w +/usr/share/ncurses4/terminfo/c/ct82 +/usr/share/ncurses4/terminfo/c/ct8500 +/usr/share/ncurses4/terminfo/c/ctrm +/usr/share/ncurses4/terminfo/c/cx +/usr/share/ncurses4/terminfo/c/cx100 +/usr/share/ncurses4/terminfo/c/cyb110 +/usr/share/ncurses4/terminfo/c/cyb83 +/usr/share/ncurses4/terminfo/d +/usr/share/ncurses4/terminfo/d/d132 +/usr/share/ncurses4/terminfo/d/d80 +/usr/share/ncurses4/terminfo/d/d800 +/usr/share/ncurses4/terminfo/d/datagraphix +/usr/share/ncurses4/terminfo/d/datamedia2500 +/usr/share/ncurses4/terminfo/d/datapoint +/usr/share/ncurses4/terminfo/d/dataspeed40 +/usr/share/ncurses4/terminfo/d/dd5000 +/usr/share/ncurses4/terminfo/d/ddr +/usr/share/ncurses4/terminfo/d/ddr3180 +/usr/share/ncurses4/terminfo/d/dec-vt100 +/usr/share/ncurses4/terminfo/d/dec-vt220 +/usr/share/ncurses4/terminfo/d/dec-vt330 +/usr/share/ncurses4/terminfo/d/dec-vt340 +/usr/share/ncurses4/terminfo/d/dec-vt400 +/usr/share/ncurses4/terminfo/d/decpro +/usr/share/ncurses4/terminfo/d/decwriter +/usr/share/ncurses4/terminfo/d/delta +/usr/share/ncurses4/terminfo/d/dg-ansi +/usr/share/ncurses4/terminfo/d/dg100 +/usr/share/ncurses4/terminfo/d/dg200 +/usr/share/ncurses4/terminfo/d/dg210 +/usr/share/ncurses4/terminfo/d/dg211 +/usr/share/ncurses4/terminfo/d/dg450 +/usr/share/ncurses4/terminfo/d/dg460-ansi +/usr/share/ncurses4/terminfo/d/dg6053 +/usr/share/ncurses4/terminfo/d/dg6134 +/usr/share/ncurses4/terminfo/d/diablo +/usr/share/ncurses4/terminfo/d/diablo-lm +/usr/share/ncurses4/terminfo/d/diablo1620 +/usr/share/ncurses4/terminfo/d/diablo1620-m8 +/usr/share/ncurses4/terminfo/d/diablo1640 +/usr/share/ncurses4/terminfo/d/diablo1640-lm +/usr/share/ncurses4/terminfo/d/diablo1640-m8 +/usr/share/ncurses4/terminfo/d/diablo1720 +/usr/share/ncurses4/terminfo/d/diablo1730 +/usr/share/ncurses4/terminfo/d/diablo1740 +/usr/share/ncurses4/terminfo/d/diablo1740-lm +/usr/share/ncurses4/terminfo/d/diablo450 +/usr/share/ncurses4/terminfo/d/diablo630 +/usr/share/ncurses4/terminfo/d/dialogue +/usr/share/ncurses4/terminfo/d/dialogue80 +/usr/share/ncurses4/terminfo/d/digilog +/usr/share/ncurses4/terminfo/d/dku7003 +/usr/share/ncurses4/terminfo/d/dku7003-dumb +/usr/share/ncurses4/terminfo/d/dm1520 +/usr/share/ncurses4/terminfo/d/dm1521 +/usr/share/ncurses4/terminfo/d/dm2500 +/usr/share/ncurses4/terminfo/d/dm3025 +/usr/share/ncurses4/terminfo/d/dm3045 +/usr/share/ncurses4/terminfo/d/dm80 +/usr/share/ncurses4/terminfo/d/dm80w +/usr/share/ncurses4/terminfo/d/dmchat +/usr/share/ncurses4/terminfo/d/dmd +/usr/share/ncurses4/terminfo/d/dmd-24 +/usr/share/ncurses4/terminfo/d/dmd-34 +/usr/share/ncurses4/terminfo/d/dmd1 +/usr/share/ncurses4/terminfo/d/dmdt80 +/usr/share/ncurses4/terminfo/d/dmdt80w +/usr/share/ncurses4/terminfo/d/dmterm +/usr/share/ncurses4/terminfo/d/dp3360 +/usr/share/ncurses4/terminfo/d/dp8242 +/usr/share/ncurses4/terminfo/d/ds40 +/usr/share/ncurses4/terminfo/d/ds40-2 +/usr/share/ncurses4/terminfo/d/dt-100 +/usr/share/ncurses4/terminfo/d/dt-100w +/usr/share/ncurses4/terminfo/d/dt100 +/usr/share/ncurses4/terminfo/d/dt100w +/usr/share/ncurses4/terminfo/d/dt110 +/usr/share/ncurses4/terminfo/d/dt80 +/usr/share/ncurses4/terminfo/d/dt80-sas +/usr/share/ncurses4/terminfo/d/dt80w +/usr/share/ncurses4/terminfo/d/dtc300s +/usr/share/ncurses4/terminfo/d/dtc382 +/usr/share/ncurses4/terminfo/d/dtterm +/usr/share/ncurses4/terminfo/d/dumb +/usr/share/ncurses4/terminfo/d/dw +/usr/share/ncurses4/terminfo/d/dw1 +/usr/share/ncurses4/terminfo/d/dw2 +/usr/share/ncurses4/terminfo/d/dw3 +/usr/share/ncurses4/terminfo/d/dw4 +/usr/share/ncurses4/terminfo/d/dwk +/usr/share/ncurses4/terminfo/d/dwk-vt +/usr/share/ncurses4/terminfo/e +/usr/share/ncurses4/terminfo/e/ecma+color +/usr/share/ncurses4/terminfo/e/ecma+sgr +/usr/share/ncurses4/terminfo/e/emots +/usr/share/ncurses4/terminfo/e/emu +/usr/share/ncurses4/terminfo/e/env230 +/usr/share/ncurses4/terminfo/e/envision230 +/usr/share/ncurses4/terminfo/e/ep40 +/usr/share/ncurses4/terminfo/e/ep4000 +/usr/share/ncurses4/terminfo/e/ep4080 +/usr/share/ncurses4/terminfo/e/ep48 +/usr/share/ncurses4/terminfo/e/ergo4000 +/usr/share/ncurses4/terminfo/e/esprit +/usr/share/ncurses4/terminfo/e/esprit-am +/usr/share/ncurses4/terminfo/e/eterm +/usr/share/ncurses4/terminfo/e/ex155 +/usr/share/ncurses4/terminfo/e/excel62 +/usr/share/ncurses4/terminfo/e/excel62-rv +/usr/share/ncurses4/terminfo/e/excel62-w +/usr/share/ncurses4/terminfo/e/excel64 +/usr/share/ncurses4/terminfo/e/excel64-rv +/usr/share/ncurses4/terminfo/e/excel64-w +/usr/share/ncurses4/terminfo/e/exec80 +/usr/share/ncurses4/terminfo/f +/usr/share/ncurses4/terminfo/f/f100 +/usr/share/ncurses4/terminfo/f/f100-rv +/usr/share/ncurses4/terminfo/f/f110 +/usr/share/ncurses4/terminfo/f/f110-14 +/usr/share/ncurses4/terminfo/f/f110-14w +/usr/share/ncurses4/terminfo/f/f110-w +/usr/share/ncurses4/terminfo/f/f1720 +/usr/share/ncurses4/terminfo/f/f1720a +/usr/share/ncurses4/terminfo/f/f200 +/usr/share/ncurses4/terminfo/f/f200-w +/usr/share/ncurses4/terminfo/f/f200vi +/usr/share/ncurses4/terminfo/f/f200vi-w +/usr/share/ncurses4/terminfo/f/falco +/usr/share/ncurses4/terminfo/f/falco-p +/usr/share/ncurses4/terminfo/f/fenix +/usr/share/ncurses4/terminfo/f/fenixw +/usr/share/ncurses4/terminfo/f/fixterm +/usr/share/ncurses4/terminfo/f/fortune +/usr/share/ncurses4/terminfo/f/fos +/usr/share/ncurses4/terminfo/f/fox +/usr/share/ncurses4/terminfo/f/freedom +/usr/share/ncurses4/terminfo/f/freedom-rv +/usr/share/ncurses4/terminfo/f/freedom100 +/usr/share/ncurses4/terminfo/f/freedom110 +/usr/share/ncurses4/terminfo/f/freedom200 +/usr/share/ncurses4/terminfo/g +/usr/share/ncurses4/terminfo/g/gator +/usr/share/ncurses4/terminfo/g/gator-52 +/usr/share/ncurses4/terminfo/g/gator-52t +/usr/share/ncurses4/terminfo/g/gator-t +/usr/share/ncurses4/terminfo/g/gigi +/usr/share/ncurses4/terminfo/g/glasstty +/usr/share/ncurses4/terminfo/g/go-225 +/usr/share/ncurses4/terminfo/g/go140 +/usr/share/ncurses4/terminfo/g/go140w +/usr/share/ncurses4/terminfo/g/go225 +/usr/share/ncurses4/terminfo/g/graphos +/usr/share/ncurses4/terminfo/g/graphos-30 +/usr/share/ncurses4/terminfo/g/gs5430 +/usr/share/ncurses4/terminfo/g/gs5430-22 +/usr/share/ncurses4/terminfo/g/gs5430-24 +/usr/share/ncurses4/terminfo/g/gs6300 +/usr/share/ncurses4/terminfo/g/gsi +/usr/share/ncurses4/terminfo/g/gt100 +/usr/share/ncurses4/terminfo/g/gt100a +/usr/share/ncurses4/terminfo/g/gt40 +/usr/share/ncurses4/terminfo/g/gt42 +/usr/share/ncurses4/terminfo/g/guru +/usr/share/ncurses4/terminfo/g/guru+rv +/usr/share/ncurses4/terminfo/g/guru+s +/usr/share/ncurses4/terminfo/g/guru+unk +/usr/share/ncurses4/terminfo/g/guru-24 +/usr/share/ncurses4/terminfo/g/guru-33 +/usr/share/ncurses4/terminfo/g/guru-33-rv +/usr/share/ncurses4/terminfo/g/guru-33-s +/usr/share/ncurses4/terminfo/g/guru-44 +/usr/share/ncurses4/terminfo/g/guru-44-s +/usr/share/ncurses4/terminfo/g/guru-76 +/usr/share/ncurses4/terminfo/g/guru-76-lp +/usr/share/ncurses4/terminfo/g/guru-76-s +/usr/share/ncurses4/terminfo/g/guru-76-w +/usr/share/ncurses4/terminfo/g/guru-76-w-s +/usr/share/ncurses4/terminfo/g/guru-76-wm +/usr/share/ncurses4/terminfo/g/guru-lp +/usr/share/ncurses4/terminfo/g/guru-nctxt +/usr/share/ncurses4/terminfo/g/guru-rv +/usr/share/ncurses4/terminfo/g/guru-s +/usr/share/ncurses4/terminfo/h +/usr/share/ncurses4/terminfo/h/h-100 +/usr/share/ncurses4/terminfo/h/h-100bw +/usr/share/ncurses4/terminfo/h/h100 +/usr/share/ncurses4/terminfo/h/h100bw +/usr/share/ncurses4/terminfo/h/h19 +/usr/share/ncurses4/terminfo/h/h19-a +/usr/share/ncurses4/terminfo/h/h19-b +/usr/share/ncurses4/terminfo/h/h19-bs +/usr/share/ncurses4/terminfo/h/h19-g +/usr/share/ncurses4/terminfo/h/h19-smul +/usr/share/ncurses4/terminfo/h/h19-u +/usr/share/ncurses4/terminfo/h/h19-us +/usr/share/ncurses4/terminfo/h/h19a +/usr/share/ncurses4/terminfo/h/h19g +/usr/share/ncurses4/terminfo/h/h19k +/usr/share/ncurses4/terminfo/h/h19kermit +/usr/share/ncurses4/terminfo/h/h19us +/usr/share/ncurses4/terminfo/h/h29a-kc-bc +/usr/share/ncurses4/terminfo/h/h29a-kc-uc +/usr/share/ncurses4/terminfo/h/h29a-nkc-bc +/usr/share/ncurses4/terminfo/h/h29a-nkc-uc +/usr/share/ncurses4/terminfo/h/h80 +/usr/share/ncurses4/terminfo/h/ha8675 +/usr/share/ncurses4/terminfo/h/ha8686 +/usr/share/ncurses4/terminfo/h/hazel +/usr/share/ncurses4/terminfo/h/hds200 +/usr/share/ncurses4/terminfo/h/he80 +/usr/share/ncurses4/terminfo/h/heath +/usr/share/ncurses4/terminfo/h/heath-19 +/usr/share/ncurses4/terminfo/h/heath-ansi +/usr/share/ncurses4/terminfo/h/heathkit +/usr/share/ncurses4/terminfo/h/heathkit-a +/usr/share/ncurses4/terminfo/h/hft +/usr/share/ncurses4/terminfo/h/hft-c +/usr/share/ncurses4/terminfo/h/hirez100 +/usr/share/ncurses4/terminfo/h/hirez100-w +/usr/share/ncurses4/terminfo/h/hmod1 +/usr/share/ncurses4/terminfo/h/hp +/usr/share/ncurses4/terminfo/h/hp+arrows +/usr/share/ncurses4/terminfo/h/hp+color +/usr/share/ncurses4/terminfo/h/hp+labels +/usr/share/ncurses4/terminfo/h/hp+pfk+arrows +/usr/share/ncurses4/terminfo/h/hp+pfk+cr +/usr/share/ncurses4/terminfo/h/hp+pfk-cr +/usr/share/ncurses4/terminfo/h/hp+printer +/usr/share/ncurses4/terminfo/h/hp110 +/usr/share/ncurses4/terminfo/h/hp150 +/usr/share/ncurses4/terminfo/h/hp2 +/usr/share/ncurses4/terminfo/h/hp236 +/usr/share/ncurses4/terminfo/h/hp2382 +/usr/share/ncurses4/terminfo/h/hp2382a +/usr/share/ncurses4/terminfo/h/hp2392 +/usr/share/ncurses4/terminfo/h/hp2397 +/usr/share/ncurses4/terminfo/h/hp2397a +/usr/share/ncurses4/terminfo/h/hp2621 +/usr/share/ncurses4/terminfo/h/hp2621-48 +/usr/share/ncurses4/terminfo/h/hp2621-a +/usr/share/ncurses4/terminfo/h/hp2621-ba +/usr/share/ncurses4/terminfo/h/hp2621-fl +/usr/share/ncurses4/terminfo/h/hp2621-k45 +/usr/share/ncurses4/terminfo/h/hp2621-nl +/usr/share/ncurses4/terminfo/h/hp2621-nt +/usr/share/ncurses4/terminfo/h/hp2621-wl +/usr/share/ncurses4/terminfo/h/hp2621A +/usr/share/ncurses4/terminfo/h/hp2621a +/usr/share/ncurses4/terminfo/h/hp2621a-a +/usr/share/ncurses4/terminfo/h/hp2621b +/usr/share/ncurses4/terminfo/h/hp2621b-kx +/usr/share/ncurses4/terminfo/h/hp2621b-kx-p +/usr/share/ncurses4/terminfo/h/hp2621b-p +/usr/share/ncurses4/terminfo/h/hp2621k45 +/usr/share/ncurses4/terminfo/h/hp2621p +/usr/share/ncurses4/terminfo/h/hp2621p-a +/usr/share/ncurses4/terminfo/h/hp2622 +/usr/share/ncurses4/terminfo/h/hp2622a +/usr/share/ncurses4/terminfo/h/hp2623 +/usr/share/ncurses4/terminfo/h/hp2623a +/usr/share/ncurses4/terminfo/h/hp2624 +/usr/share/ncurses4/terminfo/h/hp2624-10p +/usr/share/ncurses4/terminfo/h/hp2624a +/usr/share/ncurses4/terminfo/h/hp2624a-10p +/usr/share/ncurses4/terminfo/h/hp2624b +/usr/share/ncurses4/terminfo/h/hp2624b-10p +/usr/share/ncurses4/terminfo/h/hp2624b-10p-p +/usr/share/ncurses4/terminfo/h/hp2624b-4p +/usr/share/ncurses4/terminfo/h/hp2624b-4p-p +/usr/share/ncurses4/terminfo/h/hp2624b-p +/usr/share/ncurses4/terminfo/h/hp2626 +/usr/share/ncurses4/terminfo/h/hp2626-12 +/usr/share/ncurses4/terminfo/h/hp2626-12-s +/usr/share/ncurses4/terminfo/h/hp2626-12x40 +/usr/share/ncurses4/terminfo/h/hp2626-ns +/usr/share/ncurses4/terminfo/h/hp2626-s +/usr/share/ncurses4/terminfo/h/hp2626-x40 +/usr/share/ncurses4/terminfo/h/hp2626a +/usr/share/ncurses4/terminfo/h/hp2626p +/usr/share/ncurses4/terminfo/h/hp2627a +/usr/share/ncurses4/terminfo/h/hp2627a-rev +/usr/share/ncurses4/terminfo/h/hp2627c +/usr/share/ncurses4/terminfo/h/hp262x +/usr/share/ncurses4/terminfo/h/hp2640a +/usr/share/ncurses4/terminfo/h/hp2640b +/usr/share/ncurses4/terminfo/h/hp2641a +/usr/share/ncurses4/terminfo/h/hp2644a +/usr/share/ncurses4/terminfo/h/hp2645 +/usr/share/ncurses4/terminfo/h/hp2645a +/usr/share/ncurses4/terminfo/h/hp2647a +/usr/share/ncurses4/terminfo/h/hp2648 +/usr/share/ncurses4/terminfo/h/hp2648a +/usr/share/ncurses4/terminfo/h/hp300h +/usr/share/ncurses4/terminfo/h/hp45 +/usr/share/ncurses4/terminfo/h/hp700 +/usr/share/ncurses4/terminfo/h/hp700-wy +/usr/share/ncurses4/terminfo/h/hp70092 +/usr/share/ncurses4/terminfo/h/hp70092A +/usr/share/ncurses4/terminfo/h/hp70092a +/usr/share/ncurses4/terminfo/h/hp9837 +/usr/share/ncurses4/terminfo/h/hp9845 +/usr/share/ncurses4/terminfo/h/hp98550 +/usr/share/ncurses4/terminfo/h/hp98550a +/usr/share/ncurses4/terminfo/h/hp98720 +/usr/share/ncurses4/terminfo/h/hp98721 +/usr/share/ncurses4/terminfo/h/hpansi +/usr/share/ncurses4/terminfo/h/hpex +/usr/share/ncurses4/terminfo/h/hpex2 +/usr/share/ncurses4/terminfo/h/hpgeneric +/usr/share/ncurses4/terminfo/h/hpsub +/usr/share/ncurses4/terminfo/h/hpterm +/usr/share/ncurses4/terminfo/h/htx11 +/usr/share/ncurses4/terminfo/h/hz1000 +/usr/share/ncurses4/terminfo/h/hz1420 +/usr/share/ncurses4/terminfo/h/hz1500 +/usr/share/ncurses4/terminfo/h/hz1510 +/usr/share/ncurses4/terminfo/h/hz1520 +/usr/share/ncurses4/terminfo/h/hz1520-noesc +/usr/share/ncurses4/terminfo/h/hz1552 +/usr/share/ncurses4/terminfo/h/hz1552-rv +/usr/share/ncurses4/terminfo/h/hz2000 +/usr/share/ncurses4/terminfo/i +/usr/share/ncurses4/terminfo/i/i100 +/usr/share/ncurses4/terminfo/i/i3101 +/usr/share/ncurses4/terminfo/i/i3151 +/usr/share/ncurses4/terminfo/i/i3164 +/usr/share/ncurses4/terminfo/i/i400 +/usr/share/ncurses4/terminfo/i/ibcs2 +/usr/share/ncurses4/terminfo/i/ibm-apl +/usr/share/ncurses4/terminfo/i/ibm-pc +/usr/share/ncurses4/terminfo/i/ibm-system1 +/usr/share/ncurses4/terminfo/i/ibm3101 +/usr/share/ncurses4/terminfo/i/ibm3151 +/usr/share/ncurses4/terminfo/i/ibm3161 +/usr/share/ncurses4/terminfo/i/ibm3163 +/usr/share/ncurses4/terminfo/i/ibm3164 +/usr/share/ncurses4/terminfo/i/ibm327x +/usr/share/ncurses4/terminfo/i/ibm5051 +/usr/share/ncurses4/terminfo/i/ibm5081 +/usr/share/ncurses4/terminfo/i/ibm5081-c +/usr/share/ncurses4/terminfo/i/ibm5151 +/usr/share/ncurses4/terminfo/i/ibm5154 +/usr/share/ncurses4/terminfo/i/ibm5154-c +/usr/share/ncurses4/terminfo/i/ibm6153 +/usr/share/ncurses4/terminfo/i/ibm6154 +/usr/share/ncurses4/terminfo/i/ibm6154-c +/usr/share/ncurses4/terminfo/i/ibm6155 +/usr/share/ncurses4/terminfo/i/ibm8512 +/usr/share/ncurses4/terminfo/i/ibm8513 +/usr/share/ncurses4/terminfo/i/ibm8514 +/usr/share/ncurses4/terminfo/i/ibm8514-c +/usr/share/ncurses4/terminfo/i/ibmaed +/usr/share/ncurses4/terminfo/i/ibmapa16 +/usr/share/ncurses4/terminfo/i/ibmapa8 +/usr/share/ncurses4/terminfo/i/ibmapa8c +/usr/share/ncurses4/terminfo/i/ibmapa8c-c +/usr/share/ncurses4/terminfo/i/ibmega +/usr/share/ncurses4/terminfo/i/ibmega-c +/usr/share/ncurses4/terminfo/i/ibmmono +/usr/share/ncurses4/terminfo/i/ibmmpel +/usr/share/ncurses4/terminfo/i/ibmmpel-c +/usr/share/ncurses4/terminfo/i/ibmpc +/usr/share/ncurses4/terminfo/i/ibmpc3 +/usr/share/ncurses4/terminfo/i/ibmpc3r +/usr/share/ncurses4/terminfo/i/ibmpc3r-mono +/usr/share/ncurses4/terminfo/i/ibmpcx +/usr/share/ncurses4/terminfo/i/ibmvga +/usr/share/ncurses4/terminfo/i/ibmvga-c +/usr/share/ncurses4/terminfo/i/ibmx +/usr/share/ncurses4/terminfo/i/ifmr +/usr/share/ncurses4/terminfo/i/ims-ansi +/usr/share/ncurses4/terminfo/i/ims950 +/usr/share/ncurses4/terminfo/i/ims950-b +/usr/share/ncurses4/terminfo/i/ims950-rv +/usr/share/ncurses4/terminfo/i/infoton +/usr/share/ncurses4/terminfo/i/intertec +/usr/share/ncurses4/terminfo/i/intertube +/usr/share/ncurses4/terminfo/i/intertube2 +/usr/share/ncurses4/terminfo/i/intext +/usr/share/ncurses4/terminfo/i/intext2 +/usr/share/ncurses4/terminfo/i/intextii +/usr/share/ncurses4/terminfo/i/ips +/usr/share/ncurses4/terminfo/i/ipsi +/usr/share/ncurses4/terminfo/i/iq120 +/usr/share/ncurses4/terminfo/i/iq140 +/usr/share/ncurses4/terminfo/i/iris-ansi +/usr/share/ncurses4/terminfo/i/iris-ansi-ap +/usr/share/ncurses4/terminfo/i/iris-color +/usr/share/ncurses4/terminfo/i/iris40 +/usr/share/ncurses4/terminfo/j +/usr/share/ncurses4/terminfo/j/jaixterm-m +/usr/share/ncurses4/terminfo/j/jerq +/usr/share/ncurses4/terminfo/k +/usr/share/ncurses4/terminfo/k/k45 +/usr/share/ncurses4/terminfo/k/kaypro +/usr/share/ncurses4/terminfo/k/kaypro2 +/usr/share/ncurses4/terminfo/k/kermit +/usr/share/ncurses4/terminfo/k/kermit-am +/usr/share/ncurses4/terminfo/k/klone+acs +/usr/share/ncurses4/terminfo/k/klone+color +/usr/share/ncurses4/terminfo/k/klone+koi8acs +/usr/share/ncurses4/terminfo/k/klone+sgr +/usr/share/ncurses4/terminfo/k/klone+sgr-dumb +/usr/share/ncurses4/terminfo/k/kt7 +/usr/share/ncurses4/terminfo/k/kt7ix +/usr/share/ncurses4/terminfo/k/kterm +/usr/share/ncurses4/terminfo/k/ktm +/usr/share/ncurses4/terminfo/l +/usr/share/ncurses4/terminfo/l/la120 +/usr/share/ncurses4/terminfo/l/layer +/usr/share/ncurses4/terminfo/l/linux +/usr/share/ncurses4/terminfo/l/linux-c +/usr/share/ncurses4/terminfo/l/linux-c-nc +/usr/share/ncurses4/terminfo/l/linux-koi8 +/usr/share/ncurses4/terminfo/l/linux-koi8r +/usr/share/ncurses4/terminfo/l/linux-m +/usr/share/ncurses4/terminfo/l/linux-nic +/usr/share/ncurses4/terminfo/l/lisa +/usr/share/ncurses4/terminfo/l/lisaterm +/usr/share/ncurses4/terminfo/l/lisaterm-w +/usr/share/ncurses4/terminfo/l/liswb +/usr/share/ncurses4/terminfo/l/ln03 +/usr/share/ncurses4/terminfo/l/ln03-w +/usr/share/ncurses4/terminfo/l/lpr +/usr/share/ncurses4/terminfo/l/luna +/usr/share/ncurses4/terminfo/l/luna68k +/usr/share/ncurses4/terminfo/m +/usr/share/ncurses4/terminfo/m/m2-nam +/usr/share/ncurses4/terminfo/m/mac +/usr/share/ncurses4/terminfo/m/mac-w +/usr/share/ncurses4/terminfo/m/macintosh +/usr/share/ncurses4/terminfo/m/macterminal-w +/usr/share/ncurses4/terminfo/m/mai +/usr/share/ncurses4/terminfo/m/masscomp +/usr/share/ncurses4/terminfo/m/masscomp1 +/usr/share/ncurses4/terminfo/m/masscomp2 +/usr/share/ncurses4/terminfo/m/mdl110 +/usr/share/ncurses4/terminfo/m/megatek +/usr/share/ncurses4/terminfo/m/memhp +/usr/share/ncurses4/terminfo/m/mgr +/usr/share/ncurses4/terminfo/m/mgr-linux +/usr/share/ncurses4/terminfo/m/mgr-sun +/usr/share/ncurses4/terminfo/m/microb +/usr/share/ncurses4/terminfo/m/microbee +/usr/share/ncurses4/terminfo/m/microterm +/usr/share/ncurses4/terminfo/m/microterm5 +/usr/share/ncurses4/terminfo/m/mime +/usr/share/ncurses4/terminfo/m/mime-3ax +/usr/share/ncurses4/terminfo/m/mime-fb +/usr/share/ncurses4/terminfo/m/mime-hb +/usr/share/ncurses4/terminfo/m/mime1 +/usr/share/ncurses4/terminfo/m/mime2 +/usr/share/ncurses4/terminfo/m/mime2a +/usr/share/ncurses4/terminfo/m/mime2a-s +/usr/share/ncurses4/terminfo/m/mime2a-v +/usr/share/ncurses4/terminfo/m/mime314 +/usr/share/ncurses4/terminfo/m/mime340 +/usr/share/ncurses4/terminfo/m/mime3a +/usr/share/ncurses4/terminfo/m/mime3ax +/usr/share/ncurses4/terminfo/m/mimei +/usr/share/ncurses4/terminfo/m/mimeii +/usr/share/ncurses4/terminfo/m/minitel +/usr/share/ncurses4/terminfo/m/minitel-2 +/usr/share/ncurses4/terminfo/m/minitel-2-nam +/usr/share/ncurses4/terminfo/m/minix +/usr/share/ncurses4/terminfo/m/minix-old +/usr/share/ncurses4/terminfo/m/minix-old-am +/usr/share/ncurses4/terminfo/m/mm314 +/usr/share/ncurses4/terminfo/m/mm340 +/usr/share/ncurses4/terminfo/m/mod +/usr/share/ncurses4/terminfo/m/mod24 +/usr/share/ncurses4/terminfo/m/modgraph +/usr/share/ncurses4/terminfo/m/modgraph2 +/usr/share/ncurses4/terminfo/m/modgraph48 +/usr/share/ncurses4/terminfo/m/mono-emx +/usr/share/ncurses4/terminfo/m/msk227 +/usr/share/ncurses4/terminfo/m/msk22714 +/usr/share/ncurses4/terminfo/m/msk227am +/usr/share/ncurses4/terminfo/m/mskermit227 +/usr/share/ncurses4/terminfo/m/mskermit22714 +/usr/share/ncurses4/terminfo/m/mskermit227am +/usr/share/ncurses4/terminfo/m/mt-70 +/usr/share/ncurses4/terminfo/m/mt4520-rv +/usr/share/ncurses4/terminfo/m/mt70 +/usr/share/ncurses4/terminfo/n +/usr/share/ncurses4/terminfo/n/nansi.sys +/usr/share/ncurses4/terminfo/n/nansi.sysk +/usr/share/ncurses4/terminfo/n/nansisys +/usr/share/ncurses4/terminfo/n/nansisysk +/usr/share/ncurses4/terminfo/n/ncr7900 +/usr/share/ncurses4/terminfo/n/ncr7900i +/usr/share/ncurses4/terminfo/n/ncr7900iv +/usr/share/ncurses4/terminfo/n/ncr7901 +/usr/share/ncurses4/terminfo/n/nec +/usr/share/ncurses4/terminfo/n/nec5520 +/usr/share/ncurses4/terminfo/n/newhp +/usr/share/ncurses4/terminfo/n/newhpkeyboard +/usr/share/ncurses4/terminfo/n/news +/usr/share/ncurses4/terminfo/n/news-29 +/usr/share/ncurses4/terminfo/n/news-29-euc +/usr/share/ncurses4/terminfo/n/news-29-sjis +/usr/share/ncurses4/terminfo/n/news-33 +/usr/share/ncurses4/terminfo/n/news-33-euc +/usr/share/ncurses4/terminfo/n/news-33-sjis +/usr/share/ncurses4/terminfo/n/news-42 +/usr/share/ncurses4/terminfo/n/news-42-euc +/usr/share/ncurses4/terminfo/n/news-42-sjis +/usr/share/ncurses4/terminfo/n/news-a +/usr/share/ncurses4/terminfo/n/news-o +/usr/share/ncurses4/terminfo/n/news-old-unk +/usr/share/ncurses4/terminfo/n/news-unk +/usr/share/ncurses4/terminfo/n/news28 +/usr/share/ncurses4/terminfo/n/news28-a +/usr/share/ncurses4/terminfo/n/news29 +/usr/share/ncurses4/terminfo/n/news31 +/usr/share/ncurses4/terminfo/n/news31-a +/usr/share/ncurses4/terminfo/n/news31-o +/usr/share/ncurses4/terminfo/n/news33 +/usr/share/ncurses4/terminfo/n/news40 +/usr/share/ncurses4/terminfo/n/news40-a +/usr/share/ncurses4/terminfo/n/news40-o +/usr/share/ncurses4/terminfo/n/news42 +/usr/share/ncurses4/terminfo/n/newscbm +/usr/share/ncurses4/terminfo/n/newscbm-a +/usr/share/ncurses4/terminfo/n/newscbm-o +/usr/share/ncurses4/terminfo/n/newscbm33 +/usr/share/ncurses4/terminfo/n/next +/usr/share/ncurses4/terminfo/n/nextshell +/usr/share/ncurses4/terminfo/n/northstar +/usr/share/ncurses4/terminfo/n/nwe501 +/usr/share/ncurses4/terminfo/n/nwe501-a +/usr/share/ncurses4/terminfo/n/nwe501-o +/usr/share/ncurses4/terminfo/n/nwp-511 +/usr/share/ncurses4/terminfo/n/nwp-517 +/usr/share/ncurses4/terminfo/n/nwp-517-w +/usr/share/ncurses4/terminfo/n/nwp251-a +/usr/share/ncurses4/terminfo/n/nwp251-o +/usr/share/ncurses4/terminfo/n/nwp511 +/usr/share/ncurses4/terminfo/n/nwp512 +/usr/share/ncurses4/terminfo/n/nwp512-a +/usr/share/ncurses4/terminfo/n/nwp512-o +/usr/share/ncurses4/terminfo/n/nwp513 +/usr/share/ncurses4/terminfo/n/nwp513-a +/usr/share/ncurses4/terminfo/n/nwp513-o +/usr/share/ncurses4/terminfo/n/nwp514 +/usr/share/ncurses4/terminfo/n/nwp514-a +/usr/share/ncurses4/terminfo/n/nwp514-o +/usr/share/ncurses4/terminfo/n/nwp517 +/usr/share/ncurses4/terminfo/n/nwp517-w +/usr/share/ncurses4/terminfo/n/nwp518 +/usr/share/ncurses4/terminfo/n/nwp518-a +/usr/share/ncurses4/terminfo/n/nwp518-o +/usr/share/ncurses4/terminfo/o +/usr/share/ncurses4/terminfo/o/o31 +/usr/share/ncurses4/terminfo/o/o4112-nd +/usr/share/ncurses4/terminfo/o/o85h +/usr/share/ncurses4/terminfo/o/oabm85h +/usr/share/ncurses4/terminfo/o/oblit +/usr/share/ncurses4/terminfo/o/oc100 +/usr/share/ncurses4/terminfo/o/oconcept +/usr/share/ncurses4/terminfo/o/ojerq +/usr/share/ncurses4/terminfo/o/oldibmpc3 +/usr/share/ncurses4/terminfo/o/oldpc3 +/usr/share/ncurses4/terminfo/o/oldsun +/usr/share/ncurses4/terminfo/o/omron +/usr/share/ncurses4/terminfo/o/opus3n1+ +/usr/share/ncurses4/terminfo/o/origibmpc3 +/usr/share/ncurses4/terminfo/o/origpc3 +/usr/share/ncurses4/terminfo/o/os9LII +/usr/share/ncurses4/terminfo/o/osborne +/usr/share/ncurses4/terminfo/o/osborne-w +/usr/share/ncurses4/terminfo/o/osborne1 +/usr/share/ncurses4/terminfo/o/osborne1-w +/usr/share/ncurses4/terminfo/o/osexec +/usr/share/ncurses4/terminfo/o/otek4112 +/usr/share/ncurses4/terminfo/o/otek4113 +/usr/share/ncurses4/terminfo/o/otek4114 +/usr/share/ncurses4/terminfo/o/otek4115 +/usr/share/ncurses4/terminfo/o/owl +/usr/share/ncurses4/terminfo/p +/usr/share/ncurses4/terminfo/p/p12 +/usr/share/ncurses4/terminfo/p/p12-m +/usr/share/ncurses4/terminfo/p/p12-m-w +/usr/share/ncurses4/terminfo/p/p12-w +/usr/share/ncurses4/terminfo/p/p14 +/usr/share/ncurses4/terminfo/p/p14-m +/usr/share/ncurses4/terminfo/p/p14-m-w +/usr/share/ncurses4/terminfo/p/p14-w +/usr/share/ncurses4/terminfo/p/p19 +/usr/share/ncurses4/terminfo/p/p4 +/usr/share/ncurses4/terminfo/p/p5 +/usr/share/ncurses4/terminfo/p/p7 +/usr/share/ncurses4/terminfo/p/p8 +/usr/share/ncurses4/terminfo/p/p8-w +/usr/share/ncurses4/terminfo/p/p8gl +/usr/share/ncurses4/terminfo/p/p9 +/usr/share/ncurses4/terminfo/p/p9-8 +/usr/share/ncurses4/terminfo/p/p9-8-w +/usr/share/ncurses4/terminfo/p/p9-w +/usr/share/ncurses4/terminfo/p/pc-coherent +/usr/share/ncurses4/terminfo/p/pc-minix +/usr/share/ncurses4/terminfo/p/pc-venix +/usr/share/ncurses4/terminfo/p/pc3 +/usr/share/ncurses4/terminfo/p/pc3-bold +/usr/share/ncurses4/terminfo/p/pc3r +/usr/share/ncurses4/terminfo/p/pc3r-m +/usr/share/ncurses4/terminfo/p/pc6300plus +/usr/share/ncurses4/terminfo/p/pc7300 +/usr/share/ncurses4/terminfo/p/pcansi +/usr/share/ncurses4/terminfo/p/pcansi-25 +/usr/share/ncurses4/terminfo/p/pcansi-25-m +/usr/share/ncurses4/terminfo/p/pcansi-33 +/usr/share/ncurses4/terminfo/p/pcansi-33-m +/usr/share/ncurses4/terminfo/p/pcansi-43 +/usr/share/ncurses4/terminfo/p/pcansi-43-m +/usr/share/ncurses4/terminfo/p/pcansi-m +/usr/share/ncurses4/terminfo/p/pcansi-mono +/usr/share/ncurses4/terminfo/p/pcansi25 +/usr/share/ncurses4/terminfo/p/pcansi25m +/usr/share/ncurses4/terminfo/p/pcansi33 +/usr/share/ncurses4/terminfo/p/pcansi33m +/usr/share/ncurses4/terminfo/p/pcansi43 +/usr/share/ncurses4/terminfo/p/pccons +/usr/share/ncurses4/terminfo/p/pcconsole +/usr/share/ncurses4/terminfo/p/pcix +/usr/share/ncurses4/terminfo/p/pckermit +/usr/share/ncurses4/terminfo/p/pckermit12 +/usr/share/ncurses4/terminfo/p/pckermit120 +/usr/share/ncurses4/terminfo/p/pcplot +/usr/share/ncurses4/terminfo/p/pcvt25 +/usr/share/ncurses4/terminfo/p/pcvt25w +/usr/share/ncurses4/terminfo/p/pcvt28 +/usr/share/ncurses4/terminfo/p/pcvt28w +/usr/share/ncurses4/terminfo/p/pcvt35 +/usr/share/ncurses4/terminfo/p/pcvt35w +/usr/share/ncurses4/terminfo/p/pcvt40 +/usr/share/ncurses4/terminfo/p/pcvt40w +/usr/share/ncurses4/terminfo/p/pcvt43 +/usr/share/ncurses4/terminfo/p/pcvt43w +/usr/share/ncurses4/terminfo/p/pcvt50 +/usr/share/ncurses4/terminfo/p/pcvt50w +/usr/share/ncurses4/terminfo/p/pcvtXX +/usr/share/ncurses4/terminfo/p/pcz19 +/usr/share/ncurses4/terminfo/p/pe1100 +/usr/share/ncurses4/terminfo/p/pe1200 +/usr/share/ncurses4/terminfo/p/pe1251 +/usr/share/ncurses4/terminfo/p/pe550 +/usr/share/ncurses4/terminfo/p/pe6100 +/usr/share/ncurses4/terminfo/p/pe6300 +/usr/share/ncurses4/terminfo/p/pe6312 +/usr/share/ncurses4/terminfo/p/pe7000c +/usr/share/ncurses4/terminfo/p/pe7000m +/usr/share/ncurses4/terminfo/p/pilot +/usr/share/ncurses4/terminfo/p/printer +/usr/share/ncurses4/terminfo/p/prism12 +/usr/share/ncurses4/terminfo/p/prism12-m +/usr/share/ncurses4/terminfo/p/prism12-m-w +/usr/share/ncurses4/terminfo/p/prism12-w +/usr/share/ncurses4/terminfo/p/prism14 +/usr/share/ncurses4/terminfo/p/prism14-m +/usr/share/ncurses4/terminfo/p/prism14-m-w +/usr/share/ncurses4/terminfo/p/prism14-w +/usr/share/ncurses4/terminfo/p/prism2 +/usr/share/ncurses4/terminfo/p/prism4 +/usr/share/ncurses4/terminfo/p/prism5 +/usr/share/ncurses4/terminfo/p/prism7 +/usr/share/ncurses4/terminfo/p/prism8 +/usr/share/ncurses4/terminfo/p/prism8-w +/usr/share/ncurses4/terminfo/p/prism8gl +/usr/share/ncurses4/terminfo/p/prism9 +/usr/share/ncurses4/terminfo/p/prism9-8 +/usr/share/ncurses4/terminfo/p/prism9-8-w +/usr/share/ncurses4/terminfo/p/prism9-w +/usr/share/ncurses4/terminfo/p/pro350 +/usr/share/ncurses4/terminfo/p/ps300 +/usr/share/ncurses4/terminfo/p/psterm +/usr/share/ncurses4/terminfo/p/psterm-80x24 +/usr/share/ncurses4/terminfo/p/psterm-90x28 +/usr/share/ncurses4/terminfo/p/psterm-96x48 +/usr/share/ncurses4/terminfo/p/psterm-basic +/usr/share/ncurses4/terminfo/p/psterm-fast +/usr/share/ncurses4/terminfo/p/psx_ansi +/usr/share/ncurses4/terminfo/p/pt100 +/usr/share/ncurses4/terminfo/p/pt100w +/usr/share/ncurses4/terminfo/p/pt200 +/usr/share/ncurses4/terminfo/p/pt200w +/usr/share/ncurses4/terminfo/p/pt210 +/usr/share/ncurses4/terminfo/p/pt250 +/usr/share/ncurses4/terminfo/p/pt250w +/usr/share/ncurses4/terminfo/p/pt505 +/usr/share/ncurses4/terminfo/p/pt505-22 +/usr/share/ncurses4/terminfo/p/pt505-24 +/usr/share/ncurses4/terminfo/p/pty +/usr/share/ncurses4/terminfo/q +/usr/share/ncurses4/terminfo/q/qdcons +/usr/share/ncurses4/terminfo/q/qdss +/usr/share/ncurses4/terminfo/q/qnx +/usr/share/ncurses4/terminfo/q/qnx4 +/usr/share/ncurses4/terminfo/q/qume +/usr/share/ncurses4/terminfo/q/qume5 +/usr/share/ncurses4/terminfo/q/qvt101 +/usr/share/ncurses4/terminfo/q/qvt101+ +/usr/share/ncurses4/terminfo/q/qvt101p +/usr/share/ncurses4/terminfo/q/qvt102 +/usr/share/ncurses4/terminfo/q/qvt103 +/usr/share/ncurses4/terminfo/q/qvt103-w +/usr/share/ncurses4/terminfo/q/qvt108 +/usr/share/ncurses4/terminfo/q/qvt119 +/usr/share/ncurses4/terminfo/q/qvt119+ +/usr/share/ncurses4/terminfo/q/qvt119+-25 +/usr/share/ncurses4/terminfo/q/qvt119+-25-w +/usr/share/ncurses4/terminfo/q/qvt119+-w +/usr/share/ncurses4/terminfo/q/qvt119-25-w +/usr/share/ncurses4/terminfo/q/qvt119-w +/usr/share/ncurses4/terminfo/q/qvt119p +/usr/share/ncurses4/terminfo/q/qvt119p-25 +/usr/share/ncurses4/terminfo/q/qvt119p-25-w +/usr/share/ncurses4/terminfo/q/qvt119p-w +/usr/share/ncurses4/terminfo/q/qvt203 +/usr/share/ncurses4/terminfo/q/qvt203+ +/usr/share/ncurses4/terminfo/q/qvt203-25 +/usr/share/ncurses4/terminfo/q/qvt203-25-w +/usr/share/ncurses4/terminfo/q/qvt203-w +/usr/share/ncurses4/terminfo/q/qvt203-w-am +/usr/share/ncurses4/terminfo/r +/usr/share/ncurses4/terminfo/r/rbcomm +/usr/share/ncurses4/terminfo/r/rbcomm-nam +/usr/share/ncurses4/terminfo/r/rbcomm-w +/usr/share/ncurses4/terminfo/r/rca +/usr/share/ncurses4/terminfo/r/rebus3180 +/usr/share/ncurses4/terminfo/r/regent +/usr/share/ncurses4/terminfo/r/regent100 +/usr/share/ncurses4/terminfo/r/regent20 +/usr/share/ncurses4/terminfo/r/regent200 +/usr/share/ncurses4/terminfo/r/regent25 +/usr/share/ncurses4/terminfo/r/regent40 +/usr/share/ncurses4/terminfo/r/regent40+ +/usr/share/ncurses4/terminfo/r/regent60 +/usr/share/ncurses4/terminfo/r/rt6221 +/usr/share/ncurses4/terminfo/r/rt6221-w +/usr/share/ncurses4/terminfo/r/rtpc +/usr/share/ncurses4/terminfo/r/rxvt +/usr/share/ncurses4/terminfo/r/rxvt-basic +/usr/share/ncurses4/terminfo/s +/usr/share/ncurses4/terminfo/s/s +/usr/share/ncurses4/terminfo/s/s4 +/usr/share/ncurses4/terminfo/s/sb1 +/usr/share/ncurses4/terminfo/s/sb2 +/usr/share/ncurses4/terminfo/s/sb3 +/usr/share/ncurses4/terminfo/s/sbi +/usr/share/ncurses4/terminfo/s/sbobcat +/usr/share/ncurses4/terminfo/s/sc410 +/usr/share/ncurses4/terminfo/s/sc415 +/usr/share/ncurses4/terminfo/s/scanset +/usr/share/ncurses4/terminfo/s/scoansi +/usr/share/ncurses4/terminfo/s/screen +/usr/share/ncurses4/terminfo/s/screen-w +/usr/share/ncurses4/terminfo/s/screen2 +/usr/share/ncurses4/terminfo/s/screen3 +/usr/share/ncurses4/terminfo/s/screwpoint +/usr/share/ncurses4/terminfo/s/scrhp +/usr/share/ncurses4/terminfo/s/simterm +/usr/share/ncurses4/terminfo/s/soroc +/usr/share/ncurses4/terminfo/s/soroc120 +/usr/share/ncurses4/terminfo/s/soroc140 +/usr/share/ncurses4/terminfo/s/spinwriter +/usr/share/ncurses4/terminfo/s/st52 +/usr/share/ncurses4/terminfo/s/sun +/usr/share/ncurses4/terminfo/s/sun-1 +/usr/share/ncurses4/terminfo/s/sun-12 +/usr/share/ncurses4/terminfo/s/sun-17 +/usr/share/ncurses4/terminfo/s/sun-24 +/usr/share/ncurses4/terminfo/s/sun-34 +/usr/share/ncurses4/terminfo/s/sun-48 +/usr/share/ncurses4/terminfo/s/sun-c +/usr/share/ncurses4/terminfo/s/sun-cmd +/usr/share/ncurses4/terminfo/s/sun-e +/usr/share/ncurses4/terminfo/s/sun-e-s +/usr/share/ncurses4/terminfo/s/sun-il +/usr/share/ncurses4/terminfo/s/sun-nic +/usr/share/ncurses4/terminfo/s/sun-s +/usr/share/ncurses4/terminfo/s/sun-s-e +/usr/share/ncurses4/terminfo/s/sun-ss5 +/usr/share/ncurses4/terminfo/s/sun1 +/usr/share/ncurses4/terminfo/s/sun2 +/usr/share/ncurses4/terminfo/s/sune +/usr/share/ncurses4/terminfo/s/superbee +/usr/share/ncurses4/terminfo/s/superbee-xsb +/usr/share/ncurses4/terminfo/s/superbeeic +/usr/share/ncurses4/terminfo/s/superbrain +/usr/share/ncurses4/terminfo/s/sv80 +/usr/share/ncurses4/terminfo/s/swtp +/usr/share/ncurses4/terminfo/s/synertek +/usr/share/ncurses4/terminfo/s/synertek380 +/usr/share/ncurses4/terminfo/s/system1 +/usr/share/ncurses4/terminfo/t +/usr/share/ncurses4/terminfo/t/t10 +/usr/share/ncurses4/terminfo/t/t1061 +/usr/share/ncurses4/terminfo/t/t1061f +/usr/share/ncurses4/terminfo/t/t16 +/usr/share/ncurses4/terminfo/t/t3700 +/usr/share/ncurses4/terminfo/t/t3800 +/usr/share/ncurses4/terminfo/t/t653x +/usr/share/ncurses4/terminfo/t/tab +/usr/share/ncurses4/terminfo/t/tab132 +/usr/share/ncurses4/terminfo/t/tab132-15 +/usr/share/ncurses4/terminfo/t/tab132-rv +/usr/share/ncurses4/terminfo/t/tab132-w +/usr/share/ncurses4/terminfo/t/tab132-w-rv +/usr/share/ncurses4/terminfo/t/tandem6510 +/usr/share/ncurses4/terminfo/t/tandem653 +/usr/share/ncurses4/terminfo/t/tek +/usr/share/ncurses4/terminfo/t/tek4012 +/usr/share/ncurses4/terminfo/t/tek4013 +/usr/share/ncurses4/terminfo/t/tek4014 +/usr/share/ncurses4/terminfo/t/tek4014-sm +/usr/share/ncurses4/terminfo/t/tek4015 +/usr/share/ncurses4/terminfo/t/tek4015-sm +/usr/share/ncurses4/terminfo/t/tek4023 +/usr/share/ncurses4/terminfo/t/tek4024 +/usr/share/ncurses4/terminfo/t/tek4025 +/usr/share/ncurses4/terminfo/t/tek4025-17 +/usr/share/ncurses4/terminfo/t/tek4025-17-ws +/usr/share/ncurses4/terminfo/t/tek4025-cr +/usr/share/ncurses4/terminfo/t/tek4025-ex +/usr/share/ncurses4/terminfo/t/tek4025a +/usr/share/ncurses4/terminfo/t/tek4025ex +/usr/share/ncurses4/terminfo/t/tek4027 +/usr/share/ncurses4/terminfo/t/tek4027-ex +/usr/share/ncurses4/terminfo/t/tek4105 +/usr/share/ncurses4/terminfo/t/tek4105-30 +/usr/share/ncurses4/terminfo/t/tek4105a +/usr/share/ncurses4/terminfo/t/tek4106brl +/usr/share/ncurses4/terminfo/t/tek4107 +/usr/share/ncurses4/terminfo/t/tek4107brl +/usr/share/ncurses4/terminfo/t/tek4109 +/usr/share/ncurses4/terminfo/t/tek4109brl +/usr/share/ncurses4/terminfo/t/tek4112 +/usr/share/ncurses4/terminfo/t/tek4112-5 +/usr/share/ncurses4/terminfo/t/tek4112-nd +/usr/share/ncurses4/terminfo/t/tek4113 +/usr/share/ncurses4/terminfo/t/tek4113-34 +/usr/share/ncurses4/terminfo/t/tek4113-nd +/usr/share/ncurses4/terminfo/t/tek4114 +/usr/share/ncurses4/terminfo/t/tek4115 +/usr/share/ncurses4/terminfo/t/tek4125 +/usr/share/ncurses4/terminfo/t/tek4205 +/usr/share/ncurses4/terminfo/t/tek4207 +/usr/share/ncurses4/terminfo/t/tek4207-s +/usr/share/ncurses4/terminfo/t/tek4404 +/usr/share/ncurses4/terminfo/t/teleray +/usr/share/ncurses4/terminfo/t/teletec +/usr/share/ncurses4/terminfo/t/terminet +/usr/share/ncurses4/terminfo/t/terminet1200 +/usr/share/ncurses4/terminfo/t/terminet300 +/usr/share/ncurses4/terminfo/t/tgtelnet +/usr/share/ncurses4/terminfo/t/ti700 +/usr/share/ncurses4/terminfo/t/ti733 +/usr/share/ncurses4/terminfo/t/ti735 +/usr/share/ncurses4/terminfo/t/ti745 +/usr/share/ncurses4/terminfo/t/ti800 +/usr/share/ncurses4/terminfo/t/ti916 +/usr/share/ncurses4/terminfo/t/ti916-132 +/usr/share/ncurses4/terminfo/t/ti916-220-7 +/usr/share/ncurses4/terminfo/t/ti916-220-8 +/usr/share/ncurses4/terminfo/t/ti916-8 +/usr/share/ncurses4/terminfo/t/ti916-8-132 +/usr/share/ncurses4/terminfo/t/ti924 +/usr/share/ncurses4/terminfo/t/ti924-8 +/usr/share/ncurses4/terminfo/t/ti924-8w +/usr/share/ncurses4/terminfo/t/ti924w +/usr/share/ncurses4/terminfo/t/ti926 +/usr/share/ncurses4/terminfo/t/ti926-8 +/usr/share/ncurses4/terminfo/t/ti928 +/usr/share/ncurses4/terminfo/t/ti928-8 +/usr/share/ncurses4/terminfo/t/ti931 +/usr/share/ncurses4/terminfo/t/ti_ansi +/usr/share/ncurses4/terminfo/t/tn1200 +/usr/share/ncurses4/terminfo/t/tn300 +/usr/share/ncurses4/terminfo/t/trs16 +/usr/share/ncurses4/terminfo/t/trs2 +/usr/share/ncurses4/terminfo/t/trs80II +/usr/share/ncurses4/terminfo/t/trsII +/usr/share/ncurses4/terminfo/t/ts-1 +/usr/share/ncurses4/terminfo/t/ts-1p +/usr/share/ncurses4/terminfo/t/ts1 +/usr/share/ncurses4/terminfo/t/ts100 +/usr/share/ncurses4/terminfo/t/ts100-ctxt +/usr/share/ncurses4/terminfo/t/ts100-sp +/usr/share/ncurses4/terminfo/t/ts1p +/usr/share/ncurses4/terminfo/t/tt505-22 +/usr/share/ncurses4/terminfo/t/tty33 +/usr/share/ncurses4/terminfo/t/tty35 +/usr/share/ncurses4/terminfo/t/tty37 +/usr/share/ncurses4/terminfo/t/tty40 +/usr/share/ncurses4/terminfo/t/tty43 +/usr/share/ncurses4/terminfo/t/tty4420 +/usr/share/ncurses4/terminfo/t/tty4424 +/usr/share/ncurses4/terminfo/t/tty4424-1 +/usr/share/ncurses4/terminfo/t/tty4424m +/usr/share/ncurses4/terminfo/t/tty4426 +/usr/share/ncurses4/terminfo/t/tty5410 +/usr/share/ncurses4/terminfo/t/tty5410-w +/usr/share/ncurses4/terminfo/t/tty5410v1 +/usr/share/ncurses4/terminfo/t/tty5410v1-w +/usr/share/ncurses4/terminfo/t/tty5420 +/usr/share/ncurses4/terminfo/t/tty5420+nl +/usr/share/ncurses4/terminfo/t/tty5420-nl +/usr/share/ncurses4/terminfo/t/tty5420-rv +/usr/share/ncurses4/terminfo/t/tty5420-rv-nl +/usr/share/ncurses4/terminfo/t/tty5420-w +/usr/share/ncurses4/terminfo/t/tty5420-w-nl +/usr/share/ncurses4/terminfo/t/tty5420-w-rv +/usr/share/ncurses4/terminfo/t/tty5420-w-rv-n +/usr/share/ncurses4/terminfo/t/tty5425 +/usr/share/ncurses4/terminfo/t/tty5425-nl +/usr/share/ncurses4/terminfo/t/tty5425-w +/usr/share/ncurses4/terminfo/t/tty5620 +/usr/share/ncurses4/terminfo/t/tty5620-1 +/usr/share/ncurses4/terminfo/t/tty5620-24 +/usr/share/ncurses4/terminfo/t/tty5620-34 +/usr/share/ncurses4/terminfo/t/tty5620-s +/usr/share/ncurses4/terminfo/t/ttydmd +/usr/share/ncurses4/terminfo/t/tvi-2p +/usr/share/ncurses4/terminfo/t/tvi803 +/usr/share/ncurses4/terminfo/t/tvi9065 +/usr/share/ncurses4/terminfo/t/tvi910 +/usr/share/ncurses4/terminfo/t/tvi910+ +/usr/share/ncurses4/terminfo/t/tvi912 +/usr/share/ncurses4/terminfo/t/tvi912-2p +/usr/share/ncurses4/terminfo/t/tvi912b +/usr/share/ncurses4/terminfo/t/tvi912c +/usr/share/ncurses4/terminfo/t/tvi912cc +/usr/share/ncurses4/terminfo/t/tvi914 +/usr/share/ncurses4/terminfo/t/tvi920 +/usr/share/ncurses4/terminfo/t/tvi920-2p +/usr/share/ncurses4/terminfo/t/tvi920b +/usr/share/ncurses4/terminfo/t/tvi920c +/usr/share/ncurses4/terminfo/t/tvi921 +/usr/share/ncurses4/terminfo/t/tvi924 +/usr/share/ncurses4/terminfo/t/tvi925 +/usr/share/ncurses4/terminfo/t/tvi925-hi +/usr/share/ncurses4/terminfo/t/tvi92B +/usr/share/ncurses4/terminfo/t/tvi92D +/usr/share/ncurses4/terminfo/t/tvi950 +/usr/share/ncurses4/terminfo/t/tvi950-2p +/usr/share/ncurses4/terminfo/t/tvi950-4p +/usr/share/ncurses4/terminfo/t/tvi950-rv +/usr/share/ncurses4/terminfo/t/tvi950-rv-2p +/usr/share/ncurses4/terminfo/t/tvi950-rv-4p +/usr/share/ncurses4/terminfo/t/tvi955 +/usr/share/ncurses4/terminfo/t/tvi955-hb +/usr/share/ncurses4/terminfo/t/tvi955-w +/usr/share/ncurses4/terminfo/t/tvi970 +/usr/share/ncurses4/terminfo/t/tvi970-2p +/usr/share/ncurses4/terminfo/t/tvi970-vb +/usr/share/ncurses4/terminfo/t/tvipt +/usr/share/ncurses4/terminfo/u +/usr/share/ncurses4/terminfo/u/ultima2 +/usr/share/ncurses4/terminfo/u/ultimaII +/usr/share/ncurses4/terminfo/u/uniterm +/usr/share/ncurses4/terminfo/u/uniterm49 +/usr/share/ncurses4/terminfo/u/unixpc +/usr/share/ncurses4/terminfo/u/unknown +/usr/share/ncurses4/terminfo/u/uts30 +/usr/share/ncurses4/terminfo/v +/usr/share/ncurses4/terminfo/v/v200-nam +/usr/share/ncurses4/terminfo/v/v320n +/usr/share/ncurses4/terminfo/v/v3220 +/usr/share/ncurses4/terminfo/v/v5410 +/usr/share/ncurses4/terminfo/v/vapple +/usr/share/ncurses4/terminfo/v/vc103 +/usr/share/ncurses4/terminfo/v/vc203 +/usr/share/ncurses4/terminfo/v/vc303 +/usr/share/ncurses4/terminfo/v/vc303a +/usr/share/ncurses4/terminfo/v/vc403a +/usr/share/ncurses4/terminfo/v/vc404 +/usr/share/ncurses4/terminfo/v/vc404-s +/usr/share/ncurses4/terminfo/v/vc414 +/usr/share/ncurses4/terminfo/v/vc414h +/usr/share/ncurses4/terminfo/v/vc415 +/usr/share/ncurses4/terminfo/v/venix +/usr/share/ncurses4/terminfo/v/versaterm +/usr/share/ncurses4/terminfo/v/vi200 +/usr/share/ncurses4/terminfo/v/vi200-f +/usr/share/ncurses4/terminfo/v/vi200-rv +/usr/share/ncurses4/terminfo/v/vi300 +/usr/share/ncurses4/terminfo/v/vi300-old +/usr/share/ncurses4/terminfo/v/vi50 +/usr/share/ncurses4/terminfo/v/vi500 +/usr/share/ncurses4/terminfo/v/vi50adm +/usr/share/ncurses4/terminfo/v/vi55 +/usr/share/ncurses4/terminfo/v/vi550 +/usr/share/ncurses4/terminfo/v/vi603 +/usr/share/ncurses4/terminfo/v/viewpoint +/usr/share/ncurses4/terminfo/v/viewpoint3a+ +/usr/share/ncurses4/terminfo/v/viewpoint60 +/usr/share/ncurses4/terminfo/v/viewpoint90 +/usr/share/ncurses4/terminfo/v/visa50 +/usr/share/ncurses4/terminfo/v/visual603 +/usr/share/ncurses4/terminfo/v/vitty +/usr/share/ncurses4/terminfo/v/vk100 +/usr/share/ncurses4/terminfo/v/vp3a+ +/usr/share/ncurses4/terminfo/v/vp60 +/usr/share/ncurses4/terminfo/v/vp90 +/usr/share/ncurses4/terminfo/v/vremote +/usr/share/ncurses4/terminfo/v/vs100 +/usr/share/ncurses4/terminfo/v/vs100-x10 +/usr/share/ncurses4/terminfo/v/vsc +/usr/share/ncurses4/terminfo/v/vt-61 +/usr/share/ncurses4/terminfo/v/vt100 +/usr/share/ncurses4/terminfo/v/vt100-am +/usr/share/ncurses4/terminfo/v/vt100-bm +/usr/share/ncurses4/terminfo/v/vt100-bm-o +/usr/share/ncurses4/terminfo/v/vt100-bot-s +/usr/share/ncurses4/terminfo/v/vt100-nam +/usr/share/ncurses4/terminfo/v/vt100-nam-w +/usr/share/ncurses4/terminfo/v/vt100-nav +/usr/share/ncurses4/terminfo/v/vt100-nav-w +/usr/share/ncurses4/terminfo/v/vt100-s +/usr/share/ncurses4/terminfo/v/vt100-s-bot +/usr/share/ncurses4/terminfo/v/vt100-s-top +/usr/share/ncurses4/terminfo/v/vt100-top-s +/usr/share/ncurses4/terminfo/v/vt100-vb +/usr/share/ncurses4/terminfo/v/vt100-w +/usr/share/ncurses4/terminfo/v/vt100-w-am +/usr/share/ncurses4/terminfo/v/vt100-w-nam +/usr/share/ncurses4/terminfo/v/vt100-w-nav +/usr/share/ncurses4/terminfo/v/vt100nam +/usr/share/ncurses4/terminfo/v/vt102 +/usr/share/ncurses4/terminfo/v/vt102-nsgr +/usr/share/ncurses4/terminfo/v/vt102-w +/usr/share/ncurses4/terminfo/v/vt125 +/usr/share/ncurses4/terminfo/v/vt131 +/usr/share/ncurses4/terminfo/v/vt132 +/usr/share/ncurses4/terminfo/v/vt200 +/usr/share/ncurses4/terminfo/v/vt200-js +/usr/share/ncurses4/terminfo/v/vt200-w +/usr/share/ncurses4/terminfo/v/vt220 +/usr/share/ncurses4/terminfo/v/vt220-8 +/usr/share/ncurses4/terminfo/v/vt220-js +/usr/share/ncurses4/terminfo/v/vt220-nam +/usr/share/ncurses4/terminfo/v/vt220-w +/usr/share/ncurses4/terminfo/v/vt220d +/usr/share/ncurses4/terminfo/v/vt300 +/usr/share/ncurses4/terminfo/v/vt300-nam +/usr/share/ncurses4/terminfo/v/vt300-w +/usr/share/ncurses4/terminfo/v/vt300-w-nam +/usr/share/ncurses4/terminfo/v/vt320 +/usr/share/ncurses4/terminfo/v/vt320-k3 +/usr/share/ncurses4/terminfo/v/vt320-k311 +/usr/share/ncurses4/terminfo/v/vt320-nam +/usr/share/ncurses4/terminfo/v/vt320-w +/usr/share/ncurses4/terminfo/v/vt320-w-nam +/usr/share/ncurses4/terminfo/v/vt320nam +/usr/share/ncurses4/terminfo/v/vt330 +/usr/share/ncurses4/terminfo/v/vt340 +/usr/share/ncurses4/terminfo/v/vt400 +/usr/share/ncurses4/terminfo/v/vt400-24 +/usr/share/ncurses4/terminfo/v/vt420 +/usr/share/ncurses4/terminfo/v/vt420f +/usr/share/ncurses4/terminfo/v/vt420pc +/usr/share/ncurses4/terminfo/v/vt420pcdos +/usr/share/ncurses4/terminfo/v/vt50 +/usr/share/ncurses4/terminfo/v/vt50h +/usr/share/ncurses4/terminfo/v/vt510 +/usr/share/ncurses4/terminfo/v/vt510pc +/usr/share/ncurses4/terminfo/v/vt510pcdos +/usr/share/ncurses4/terminfo/v/vt52 +/usr/share/ncurses4/terminfo/v/vt520 +/usr/share/ncurses4/terminfo/v/vt525 +/usr/share/ncurses4/terminfo/v/vt61 +/usr/share/ncurses4/terminfo/v/vt61.5 +/usr/share/ncurses4/terminfo/w +/usr/share/ncurses4/terminfo/w/wren +/usr/share/ncurses4/terminfo/w/wrenw +/usr/share/ncurses4/terminfo/w/wsiris +/usr/share/ncurses4/terminfo/w/wy-75ap +/usr/share/ncurses4/terminfo/w/wy100 +/usr/share/ncurses4/terminfo/w/wy100q +/usr/share/ncurses4/terminfo/w/wy120 +/usr/share/ncurses4/terminfo/w/wy120-25 +/usr/share/ncurses4/terminfo/w/wy120-25-w +/usr/share/ncurses4/terminfo/w/wy120-vb +/usr/share/ncurses4/terminfo/w/wy120-w +/usr/share/ncurses4/terminfo/w/wy120-w-vb +/usr/share/ncurses4/terminfo/w/wy120-wvb +/usr/share/ncurses4/terminfo/w/wy150 +/usr/share/ncurses4/terminfo/w/wy150-25 +/usr/share/ncurses4/terminfo/w/wy150-25-w +/usr/share/ncurses4/terminfo/w/wy150-vb +/usr/share/ncurses4/terminfo/w/wy150-w +/usr/share/ncurses4/terminfo/w/wy150-w-vb +/usr/share/ncurses4/terminfo/w/wy160 +/usr/share/ncurses4/terminfo/w/wy160-25 +/usr/share/ncurses4/terminfo/w/wy160-25-w +/usr/share/ncurses4/terminfo/w/wy160-42 +/usr/share/ncurses4/terminfo/w/wy160-42-w +/usr/share/ncurses4/terminfo/w/wy160-43 +/usr/share/ncurses4/terminfo/w/wy160-43-w +/usr/share/ncurses4/terminfo/w/wy160-tek +/usr/share/ncurses4/terminfo/w/wy160-vb +/usr/share/ncurses4/terminfo/w/wy160-w +/usr/share/ncurses4/terminfo/w/wy160-w-vb +/usr/share/ncurses4/terminfo/w/wy160-wvb +/usr/share/ncurses4/terminfo/w/wy185 +/usr/share/ncurses4/terminfo/w/wy185-24 +/usr/share/ncurses4/terminfo/w/wy185-vb +/usr/share/ncurses4/terminfo/w/wy185-w +/usr/share/ncurses4/terminfo/w/wy185-wvb +/usr/share/ncurses4/terminfo/w/wy30 +/usr/share/ncurses4/terminfo/w/wy30-mc +/usr/share/ncurses4/terminfo/w/wy30-vb +/usr/share/ncurses4/terminfo/w/wy325 +/usr/share/ncurses4/terminfo/w/wy325-25 +/usr/share/ncurses4/terminfo/w/wy325-25w +/usr/share/ncurses4/terminfo/w/wy325-42 +/usr/share/ncurses4/terminfo/w/wy325-42w +/usr/share/ncurses4/terminfo/w/wy325-42w-vb +/usr/share/ncurses4/terminfo/w/wy325-42wvb +/usr/share/ncurses4/terminfo/w/wy325-43 +/usr/share/ncurses4/terminfo/w/wy325-43w +/usr/share/ncurses4/terminfo/w/wy325-43w-vb +/usr/share/ncurses4/terminfo/w/wy325-43wvb +/usr/share/ncurses4/terminfo/w/wy325-80 +/usr/share/ncurses4/terminfo/w/wy325-vb +/usr/share/ncurses4/terminfo/w/wy325-w +/usr/share/ncurses4/terminfo/w/wy325-w-vb +/usr/share/ncurses4/terminfo/w/wy325-wvb +/usr/share/ncurses4/terminfo/w/wy325w-24 +/usr/share/ncurses4/terminfo/w/wy350 +/usr/share/ncurses4/terminfo/w/wy350-vb +/usr/share/ncurses4/terminfo/w/wy350-w +/usr/share/ncurses4/terminfo/w/wy350-wvb +/usr/share/ncurses4/terminfo/w/wy370 +/usr/share/ncurses4/terminfo/w/wy370-101k +/usr/share/ncurses4/terminfo/w/wy370-105k +/usr/share/ncurses4/terminfo/w/wy370-EPC +/usr/share/ncurses4/terminfo/w/wy370-nk +/usr/share/ncurses4/terminfo/w/wy370-rv +/usr/share/ncurses4/terminfo/w/wy370-tek +/usr/share/ncurses4/terminfo/w/wy370-vb +/usr/share/ncurses4/terminfo/w/wy370-w +/usr/share/ncurses4/terminfo/w/wy370-wvb +/usr/share/ncurses4/terminfo/w/wy50 +/usr/share/ncurses4/terminfo/w/wy50-mc +/usr/share/ncurses4/terminfo/w/wy50-vb +/usr/share/ncurses4/terminfo/w/wy50-w +/usr/share/ncurses4/terminfo/w/wy50-wvb +/usr/share/ncurses4/terminfo/w/wy520 +/usr/share/ncurses4/terminfo/w/wy520-24 +/usr/share/ncurses4/terminfo/w/wy520-36 +/usr/share/ncurses4/terminfo/w/wy520-36pc +/usr/share/ncurses4/terminfo/w/wy520-36w +/usr/share/ncurses4/terminfo/w/wy520-36wpc +/usr/share/ncurses4/terminfo/w/wy520-48 +/usr/share/ncurses4/terminfo/w/wy520-48pc +/usr/share/ncurses4/terminfo/w/wy520-48w +/usr/share/ncurses4/terminfo/w/wy520-48wpc +/usr/share/ncurses4/terminfo/w/wy520-epc +/usr/share/ncurses4/terminfo/w/wy520-epc-24 +/usr/share/ncurses4/terminfo/w/wy520-epc-vb +/usr/share/ncurses4/terminfo/w/wy520-epc-w +/usr/share/ncurses4/terminfo/w/wy520-epc-wvb +/usr/share/ncurses4/terminfo/w/wy520-vb +/usr/share/ncurses4/terminfo/w/wy520-w +/usr/share/ncurses4/terminfo/w/wy520-wvb +/usr/share/ncurses4/terminfo/w/wy60 +/usr/share/ncurses4/terminfo/w/wy60-25 +/usr/share/ncurses4/terminfo/w/wy60-25-w +/usr/share/ncurses4/terminfo/w/wy60-316X +/usr/share/ncurses4/terminfo/w/wy60-42 +/usr/share/ncurses4/terminfo/w/wy60-42-w +/usr/share/ncurses4/terminfo/w/wy60-43 +/usr/share/ncurses4/terminfo/w/wy60-43-w +/usr/share/ncurses4/terminfo/w/wy60-vb +/usr/share/ncurses4/terminfo/w/wy60-w +/usr/share/ncurses4/terminfo/w/wy60-w-vb +/usr/share/ncurses4/terminfo/w/wy60-wvb +/usr/share/ncurses4/terminfo/w/wy75 +/usr/share/ncurses4/terminfo/w/wy75-mc +/usr/share/ncurses4/terminfo/w/wy75-vb +/usr/share/ncurses4/terminfo/w/wy75-w +/usr/share/ncurses4/terminfo/w/wy75-wvb +/usr/share/ncurses4/terminfo/w/wy75ap +/usr/share/ncurses4/terminfo/w/wy85 +/usr/share/ncurses4/terminfo/w/wy85-vb +/usr/share/ncurses4/terminfo/w/wy85-w +/usr/share/ncurses4/terminfo/w/wy85-wvb +/usr/share/ncurses4/terminfo/w/wy99gt +/usr/share/ncurses4/terminfo/w/wy99gt-25 +/usr/share/ncurses4/terminfo/w/wy99gt-25-w +/usr/share/ncurses4/terminfo/w/wy99gt-tek +/usr/share/ncurses4/terminfo/w/wy99gt-vb +/usr/share/ncurses4/terminfo/w/wy99gt-w +/usr/share/ncurses4/terminfo/w/wy99gt-w-vb +/usr/share/ncurses4/terminfo/w/wy99gt-wvb +/usr/share/ncurses4/terminfo/w/wyse-325 +/usr/share/ncurses4/terminfo/w/wyse-75ap +/usr/share/ncurses4/terminfo/w/wyse-vp +/usr/share/ncurses4/terminfo/w/wyse120 +/usr/share/ncurses4/terminfo/w/wyse120-25 +/usr/share/ncurses4/terminfo/w/wyse120-25-w +/usr/share/ncurses4/terminfo/w/wyse120-vb +/usr/share/ncurses4/terminfo/w/wyse120-w +/usr/share/ncurses4/terminfo/w/wyse120-wvb +/usr/share/ncurses4/terminfo/w/wyse150 +/usr/share/ncurses4/terminfo/w/wyse150-25 +/usr/share/ncurses4/terminfo/w/wyse150-25-w +/usr/share/ncurses4/terminfo/w/wyse150-vb +/usr/share/ncurses4/terminfo/w/wyse150-w +/usr/share/ncurses4/terminfo/w/wyse150-w-vb +/usr/share/ncurses4/terminfo/w/wyse160 +/usr/share/ncurses4/terminfo/w/wyse160-25 +/usr/share/ncurses4/terminfo/w/wyse160-25-w +/usr/share/ncurses4/terminfo/w/wyse160-42 +/usr/share/ncurses4/terminfo/w/wyse160-42-w +/usr/share/ncurses4/terminfo/w/wyse160-43 +/usr/share/ncurses4/terminfo/w/wyse160-43-w +/usr/share/ncurses4/terminfo/w/wyse160-vb +/usr/share/ncurses4/terminfo/w/wyse160-w +/usr/share/ncurses4/terminfo/w/wyse160-wvb +/usr/share/ncurses4/terminfo/w/wyse185 +/usr/share/ncurses4/terminfo/w/wyse185-24 +/usr/share/ncurses4/terminfo/w/wyse185-vb +/usr/share/ncurses4/terminfo/w/wyse185-w +/usr/share/ncurses4/terminfo/w/wyse185-wvb +/usr/share/ncurses4/terminfo/w/wyse30 +/usr/share/ncurses4/terminfo/w/wyse30-mc +/usr/share/ncurses4/terminfo/w/wyse30-vb +/usr/share/ncurses4/terminfo/w/wyse325 +/usr/share/ncurses4/terminfo/w/wyse325-25 +/usr/share/ncurses4/terminfo/w/wyse325-25w +/usr/share/ncurses4/terminfo/w/wyse325-42 +/usr/share/ncurses4/terminfo/w/wyse325-42w +/usr/share/ncurses4/terminfo/w/wyse325-43 +/usr/share/ncurses4/terminfo/w/wyse325-43w +/usr/share/ncurses4/terminfo/w/wyse325-vb +/usr/share/ncurses4/terminfo/w/wyse325-w +/usr/share/ncurses4/terminfo/w/wyse325-wvb +/usr/share/ncurses4/terminfo/w/wyse350 +/usr/share/ncurses4/terminfo/w/wyse350-vb +/usr/share/ncurses4/terminfo/w/wyse350-w +/usr/share/ncurses4/terminfo/w/wyse350-wvb +/usr/share/ncurses4/terminfo/w/wyse370 +/usr/share/ncurses4/terminfo/w/wyse50 +/usr/share/ncurses4/terminfo/w/wyse50-mc +/usr/share/ncurses4/terminfo/w/wyse50-vb +/usr/share/ncurses4/terminfo/w/wyse50-w +/usr/share/ncurses4/terminfo/w/wyse50-wvb +/usr/share/ncurses4/terminfo/w/wyse520 +/usr/share/ncurses4/terminfo/w/wyse520-24 +/usr/share/ncurses4/terminfo/w/wyse520-36 +/usr/share/ncurses4/terminfo/w/wyse520-36pc +/usr/share/ncurses4/terminfo/w/wyse520-36w +/usr/share/ncurses4/terminfo/w/wyse520-36wpc +/usr/share/ncurses4/terminfo/w/wyse520-48 +/usr/share/ncurses4/terminfo/w/wyse520-48pc +/usr/share/ncurses4/terminfo/w/wyse520-48w +/usr/share/ncurses4/terminfo/w/wyse520-48wpc +/usr/share/ncurses4/terminfo/w/wyse520-epc +/usr/share/ncurses4/terminfo/w/wyse520-epc-w +/usr/share/ncurses4/terminfo/w/wyse520-p-wvb +/usr/share/ncurses4/terminfo/w/wyse520-pc-24 +/usr/share/ncurses4/terminfo/w/wyse520-pc-vb +/usr/share/ncurses4/terminfo/w/wyse520-vb +/usr/share/ncurses4/terminfo/w/wyse520-w +/usr/share/ncurses4/terminfo/w/wyse520-wvb +/usr/share/ncurses4/terminfo/w/wyse60 +/usr/share/ncurses4/terminfo/w/wyse60-25 +/usr/share/ncurses4/terminfo/w/wyse60-25-w +/usr/share/ncurses4/terminfo/w/wyse60-316X +/usr/share/ncurses4/terminfo/w/wyse60-42 +/usr/share/ncurses4/terminfo/w/wyse60-42-w +/usr/share/ncurses4/terminfo/w/wyse60-43 +/usr/share/ncurses4/terminfo/w/wyse60-43-w +/usr/share/ncurses4/terminfo/w/wyse60-vb +/usr/share/ncurses4/terminfo/w/wyse60-w +/usr/share/ncurses4/terminfo/w/wyse60-wvb +/usr/share/ncurses4/terminfo/w/wyse75 +/usr/share/ncurses4/terminfo/w/wyse75-mc +/usr/share/ncurses4/terminfo/w/wyse75-vb +/usr/share/ncurses4/terminfo/w/wyse75-w +/usr/share/ncurses4/terminfo/w/wyse75-wvb +/usr/share/ncurses4/terminfo/w/wyse75ap +/usr/share/ncurses4/terminfo/w/wyse85 +/usr/share/ncurses4/terminfo/w/wyse85-vb +/usr/share/ncurses4/terminfo/w/wyse85-w +/usr/share/ncurses4/terminfo/w/wyse85-wvb +/usr/share/ncurses4/terminfo/w/wyse99gt +/usr/share/ncurses4/terminfo/w/wyse99gt-25 +/usr/share/ncurses4/terminfo/w/wyse99gt-25-w +/usr/share/ncurses4/terminfo/w/wyse99gt-vb +/usr/share/ncurses4/terminfo/w/wyse99gt-w +/usr/share/ncurses4/terminfo/w/wyse99gt-wvb +/usr/share/ncurses4/terminfo/x +/usr/share/ncurses4/terminfo/x/x10term +/usr/share/ncurses4/terminfo/x/x1700 +/usr/share/ncurses4/terminfo/x/x1700-lm +/usr/share/ncurses4/terminfo/x/x1720 +/usr/share/ncurses4/terminfo/x/x1750 +/usr/share/ncurses4/terminfo/x/x68k +/usr/share/ncurses4/terminfo/x/x68k-ite +/usr/share/ncurses4/terminfo/x/x820 +/usr/share/ncurses4/terminfo/x/xenix +/usr/share/ncurses4/terminfo/x/xerox +/usr/share/ncurses4/terminfo/x/xerox-lm +/usr/share/ncurses4/terminfo/x/xerox1720 +/usr/share/ncurses4/terminfo/x/xerox820 +/usr/share/ncurses4/terminfo/x/xl83 +/usr/share/ncurses4/terminfo/x/xtalk +/usr/share/ncurses4/terminfo/x/xterm +/usr/share/ncurses4/terminfo/x/xterm+sl +/usr/share/ncurses4/terminfo/x/xterm+sl-twm +/usr/share/ncurses4/terminfo/x/xterm-16color +/usr/share/ncurses4/terminfo/x/xterm-8bit +/usr/share/ncurses4/terminfo/x/xterm-bold +/usr/share/ncurses4/terminfo/x/xterm-nic +/usr/share/ncurses4/terminfo/x/xterm-old +/usr/share/ncurses4/terminfo/x/xterm-pcolor +/usr/share/ncurses4/terminfo/x/xterm-r5 +/usr/share/ncurses4/terminfo/x/xterm-r6 +/usr/share/ncurses4/terminfo/x/xterm-sun +/usr/share/ncurses4/terminfo/x/xterm-xf86-v32 +/usr/share/ncurses4/terminfo/x/xterm-xf86-v33 +/usr/share/ncurses4/terminfo/x/xterm-xf86-v40 +/usr/share/ncurses4/terminfo/x/xterm-xi +/usr/share/ncurses4/terminfo/x/xterm1 +/usr/share/ncurses4/terminfo/x/xterms +/usr/share/ncurses4/terminfo/x/xterms-sun +/usr/share/ncurses4/terminfo/x/xwsh +/usr/share/ncurses4/terminfo/z +/usr/share/ncurses4/terminfo/z/z-100 +/usr/share/ncurses4/terminfo/z/z-100bw +/usr/share/ncurses4/terminfo/z/z100 +/usr/share/ncurses4/terminfo/z/z100bw +/usr/share/ncurses4/terminfo/z/z110 +/usr/share/ncurses4/terminfo/z/z110bw +/usr/share/ncurses4/terminfo/z/z19 +/usr/share/ncurses4/terminfo/z/z29 +/usr/share/ncurses4/terminfo/z/z29a +/usr/share/ncurses4/terminfo/z/z29a-kc-bc +/usr/share/ncurses4/terminfo/z/z29a-kc-uc +/usr/share/ncurses4/terminfo/z/z29a-nkc-bc +/usr/share/ncurses4/terminfo/z/z29a-nkc-uc +/usr/share/ncurses4/terminfo/z/z29b +/usr/share/ncurses4/terminfo/z/z30 +/usr/share/ncurses4/terminfo/z/z340 +/usr/share/ncurses4/terminfo/z/z340-nam +/usr/share/ncurses4/terminfo/z/z39-a +/usr/share/ncurses4/terminfo/z/z39a +/usr/share/ncurses4/terminfo/z/z50 +/usr/share/ncurses4/terminfo/z/z8001 +/usr/share/ncurses4/terminfo/z/zen30 +/usr/share/ncurses4/terminfo/z/zen50 +/usr/share/ncurses4/terminfo/z/zen8001 +/usr/share/ncurses4/terminfo/z/zenith +/usr/share/ncurses4/terminfo/z/zenith29 +/usr/share/ncurses4/terminfo/z/zenith39-a +/usr/share/ncurses4/terminfo/z/zenith39-ansi +/usr/share/ncurses4/terminfo/z/zt-1 +/usr/share/ncurses4/terminfo/z/ztx +/usr/share/ncurses4/terminfo/z/ztx-1-a +/usr/share/ncurses4/terminfo/z/ztx11 + + + diff --git a/result/noent/svg1 b/result/noent/svg1 index c3cb6738..6802e5cd 100644 --- a/result/noent/svg1 +++ b/result/noent/svg1 @@ -1,161 +1,161 @@ - - - - + + + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + - - - + + + - - - - - - - - - - + + + + + + + + + + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/result/noent/svg2 b/result/noent/svg2 index 378afd87..5e53829a 100644 --- a/result/noent/svg2 +++ b/result/noent/svg2 @@ -1,22 +1,22 @@ - - - - + + + + - - + + - - - + + + - - + + - - + + Java Font definition:Dialog 0 @@ -24,10 +24,10 @@ Java Font definition:Helvetica 0 - - this is text + + this is text - + Java Font definition:Dialog 0 @@ -35,15 +35,15 @@ Java Font definition:Helvetica 700 - - sadfsadfsad + + sadfsadfsad - - - + + + - - + + Java Font definition:Dialog 700 diff --git a/result/noent/svg3 b/result/noent/svg3 index c3cea25b..35b9cd88 100644 --- a/result/noent/svg3 +++ b/result/noent/svg3 @@ -1,723 +1,723 @@ - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + diff --git a/result/noent/xml1 b/result/noent/xml1 index e69de29b..51553fc7 100644 --- a/result/noent/xml1 +++ b/result/noent/xml1 @@ -0,0 +1,11 @@ + +An ampersand (&#38;) may be escaped + numerically (&#38;#38;) or with a general entity + (&amp;).

"> +]> + +

An ampersand (&) may be escaped + numerically (&#38;) or with a general entity + (&amp;amp;).

+ diff --git a/result/valid/REC-xml-19980210.xml b/result/valid/REC-xml-19980210.xml index efc33922..a232b882 100644 --- a/result/valid/REC-xml-19980210.xml +++ b/result/valid/REC-xml-19980210.xml @@ -29,6 +29,15 @@ ]> + + + + + + +
Extensible Markup Language (XML) 1.0 @@ -69,7 +78,8 @@ http://www.w3.org/TR/WD-xml-lang-970630 http://www.w3.org/TR/WD-xml-970807 -http://www.w3.org/TR/WD-xml-971117--> +http://www.w3.org/TR/WD-xml-971117--> + Tim Bray @@ -473,6 +483,7 @@ and construct computer programs to process it.

This version of the XML specification + &doc.distribution;.

@@ -501,6 +512,7 @@ are required to behave as described; otherwise they are in error. +

@@ -625,7 +637,8 @@ processors which predate the

- + + Documents

@@ -721,7 +734,8 @@ matching the grammar, and that means by definition it's logically redundant. I don't think it's rhetorically redundant or unnecessary, though, so I'm keeping it. It could however use some recasting when the editors are feeling -stronger. -MSM *--> +stronger. -MSM *--> +

There is exactly one element, called the @@ -816,7 +830,8 @@ discussed later, in 10646 character set may be referred to by the decimal or hexadecimal equivalent of its UCS-4 code value. -

--> +

--> + Common Syntactic Constructs

This section defines some symbols used widely in the grammar.

@@ -1060,6 +1075,7 @@ value . + If they are needed elsewhere, they must be escaped @@ -1634,6 +1650,7 @@ example: If both the external and internal subsets are used, the internal subset is considered to occur before the external subset. + This has the effect that entity and attribute-list declarations in the internal subset take precedence over those in the external subset.

@@ -1957,7 +1974,8 @@ are case insensitive.

The intent declared with +values of all of its attributes with free-text (CDATA) values. --> +

The intent declared with xml:lang is considered to apply to all attributes and content of the element where it is specified, @@ -1978,7 +1996,8 @@ value for xml:lang: The application, not the XML processor, is responsible for this ' inheritance' of attribute values. --->

A simple declaration for +--> +

A simple declaration for xml:lang might take the form @@ -1995,7 +2014,8 @@ notes in English, the xml:lang attribute might be declared this way:

- + + Logical Structures

Each @@ -2512,7 +2532,9 @@ match more than one occurrence of an element type in the content model. For more information, see . + +

Proper Group/PE Nesting @@ -2849,7 +2871,8 @@ match Nmtokens

+.

--> +

Enumerated attributes @@ -2986,6 +3009,7 @@ from an element of this type, the XML processor must inform the application that no value was specified; no constraint is placed on the behavior of the application. --> + If the declaration is neither @@ -3213,8 +3237,10 @@ values are specified.

--->
- +--> + + + Physical Structures

An XML document may consist @@ -3435,7 +3461,8 @@ Similarly, the declaration of a general entity must precede any reference to it which appears in a default value in an attribute-list declaration.

- + + Parsed Entity

An entity reference must not contain the name of an @@ -3494,9 +3521,11 @@ Entities are declared thus: GEDecl | PEDecl +--> + | PEDecl - + + GEDecl '<!ENTITY' @@ -3521,19 +3550,23 @@ Entities are declared thus: PEDef S ? '>' - + + EntityDef EntityValue | ( ExternalID +--> +| ( ExternalID NDataDecl ?) - - + + + + PEDef EntityValue @@ -3601,7 +3634,8 @@ entity External Entity Declaration + --> + ExternalID 'SYSTEM' S @@ -3850,7 +3884,8 @@ declaration is part of the XML declaration The EncName is the name of the encoding used.

-

In an encoding declaration, the values + +

In an encoding declaration, the values " UTF-8 ", @@ -4470,7 +4505,8 @@ well appear on a processor input stream without any identification at all.

- + + Conformance Validating and Non-Validating Processors @@ -4816,7 +4852,9 @@ a production.

- + + + References Normative References @@ -4881,7 +4919,7 @@ Ravi Sethi, and Jeffrey D. Ullman. Compilers: Principles, Techniques, and Tools . Reading: Addison-Wesley, 1986, rpt. corr. 1988. - + Berners-Lee, T., R. Fielding, and L. Masinter. Uniform Resource Identifiers (URI): Generic Syntax and @@ -4912,7 +4950,7 @@ Comparison of SGML and XML. See http://www.w3.org/TR/NOTE-sgml-xml-971215 . - + IETF (Internet Engineering Task Force). RFC 1738: Uniform Resource Locators (URL) @@ -4920,7 +4958,7 @@ IETF (Internet Engineering Task Force). ed. T. Berners-Lee, L. Masinter, M. McCahill. 1994. - + IETF (Internet Engineering Task Force). RFC 1808: Relative Uniform Resource Locators @@ -4928,7 +4966,7 @@ IETF (Internet Engineering Task Force). ed. R. Fielding. 1995. - + IETF (Internet Engineering Task Force). RFC 2141: URN Syntax @@ -5519,7 +5557,8 @@ recognized, and it is expanded, so the full content of the required that content models in element type declarations be deterministic.

-

SGML + +

SGML requires deterministic content models (it calls them "unambiguous"); XML processors built using SGML systems may flag non-deterministic content models as errors.

@@ -5824,3 +5863,11 @@ Co-editor
+ diff --git a/result/valid/xlink.xml b/result/valid/xlink.xml index 135b1273..80ec5ffe 100644 --- a/result/valid/xlink.xml +++ b/result/valid/xlink.xml @@ -3,12 +3,20 @@ ]> + + + + -
+ +
+ XML Linking Language (XLink) Version 1.0 - WD-xlink-19990527 + + WD-xlink-19990527 World Wide Web Consortium Working Draft 29 @@ -22,13 +30,16 @@ http://www.w3.org/XML/Group/1999/05/WD-xlink-current - http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527 + + http://www.w3.org/XML/Group/1999/05/WD-xlink-19990527 http://www.w3.org/XML/Group/1999/05/WD-xlink-19990505 http://www.w3.org/TR/1998/WD-xlink-19980303 http://www.w3.org/TR/WD-xml-link-970630 - + + + Steve DeRose Inso Corp. and Brown University Steven_DeRose@Brown.edu @@ -47,7 +58,8 @@ also ought to add Gabe Beged-Dov there, as well. bent how shall we cite Tim? sjd What about with an Acknowledgments section? -elm Tim Bray Textuality - tbray@textuality.com --> + tbray@textuality.com --> +

This is a W3C Working Draft for review by W3C members and other interested parties. It is a draft document and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use W3C Working Drafts as reference material or to cite them as other than "work in progress". A list of current W3C working drafts can be found at http://www.w3.org/TR @@ -69,7 +81,8 @@ for the XLink requirements that this document attempts to satisfy.

-

This specification defines constructs that may be inserted into XML DTDs, schemas and document instances to describe links between objects. It uses XML syntax to create structures that can describe the simple unidirectional hyperlinks of today's HTML as well as more sophisticated links.

+ +

This specification defines constructs that may be inserted into XML DTDs, schemas and document instances to describe links between objects. It uses XML syntax to create structures that can describe the simple unidirectional hyperlinks of today's HTML as well as more sophisticated links.

Burlington, Seekonk, et al.: World-Wide Web Consortium, XML Working Group, 1998.

@@ -106,6 +119,7 @@
+ Introduction

This specification defines constructs that may be inserted into XML DTDs, schemas, and document instances to describe links between objects. A link @@ -178,7 +192,8 @@

+document. bent--> + Relationship to Existing Standards

Three standards have been especially influential: @@ -192,6 +207,7 @@ document. bent-->

HyTime: Defines inline and out-of-line link structures and some semantic features, including traversal control and presentation of objects. +

@@ -209,6 +225,7 @@ document. bent-->

The following basic terms apply in this document. +

@@ -381,14 +399,17 @@ linking element. Note that the content of the linking element could be explicitl locators is given using a simple Extended Backus-Naur Form (EBNF) location, as described in the XML specification .

-
+ +
+ Locator Syntax

The locator for a resource is typically provided by means of a Uniform Resource Identifier, or URI. XPointers can be used in conjunction with the URI structure, as fragment identifiers, to specify a more precise sub-resource.

-

A locator generally contains a URI, as described in IETF RFCs + +

A locator generally contains a URI, as described in IETF RFCs and . As these RFCs state, the URI may include a trailing query @@ -396,7 +417,8 @@ linking element. Note that the content of the linking element could be explicitl "), and be followed by a " # " and a fragment identifier , with the query interpreted by the host providing the indicated resource, and the interpretation of the fragment identifier dependent on the data type of the indicated resource.

-

In order to locate XML documents and portions of documents, a locator value may contain either a + +

In order to locate XML documents and portions of documents, a locator value may contain either a URI or a fragment identifier, or both. Any fragment identifier for pointing into XML must be an XPointer .

@@ -461,7 +483,8 @@ linking element. Note that the content of the linking element could be explicitl

+ Oy, yes, i think so. it will require some fun wording, though, so i haven't fixed it yet here -sjd--> +

If the Connector is followed directly by a Name @@ -473,7 +496,8 @@ linking element. Note that the content of the linking element could be explicitl . This shorthand is to encourage use of the robust id addressing mode.

- + +

If the connector is " # ", this signals an intent that the containing resource is to be fetched as a whole from the host that provides it, and that the XPointer processing to extract the sub-resource @@ -502,8 +526,10 @@ linking element. Note that the content of the linking element could be explicitl

-
+ + + Link Recognition

The existence of a link @@ -522,8 +548,10 @@ title="The XLink Working Draft">The XLink Working Draft</xlink:s Any arbitrary element can be made into an XLink by using the xlink:type attribute. And, of course, the explicit XLink elements may be used, as well. This document will go on to describe the linking attributes that are associated with linking elements. It may be assumed by the reader that these attributes would require the xlink namespace prefix if they existed within an arbitrary element, or that they may be used directly if they exist within an explicit Xlink element.

-
- + + + + Linking Attributes

XLink has several attributes associated with the variety of links it may represent. These attributes define four main concepts: locators, arcs, behaviors, and semantics. Locators @@ -552,7 +580,8 @@ title="The XLink Working Draft">The XLink Working Draft</xlink:s attribute from the resource being linked to. The purpose of the to attribute is to define where this link traverses to.

The application may use this information in a number of ways, especially in a complex hypertext system, but it is mainly useful in providing context for application behavior.

- + + Behavior Attributes

There are two attributes associated with behavior: @@ -574,7 +603,8 @@ title="The XLink Working Draft">The XLink Working Draft</xlink:s option indicates that the link must be initiated by some sort of human-initiated selection, such as clicking on an HTML anchor. The auto option indicates that the link is automatically initiated when the application deems that the user has reached the link. It then follows the behavior set out in the show option.

-
+ + Semantic Attributes

There are two attributes associated with semantics, @@ -747,7 +777,8 @@ The XLink Working Draft.</foo> arc is contained within an extended link for the purpose of defining traversal behavior. More than one arc may be associated with a link. Otherwise, arc elements function exactly as the arc attributes might lead on to expect.

-
+ +
Conformance @@ -779,7 +810,8 @@ prescribed.

+levels of support. -elm--> +

@@ -815,7 +847,8 @@ Annex. 1996. (See http://www.ornl.go v/sgml/wg8/hytime/html/is10744r.html ). +broken. elm --> + ). IETF (Internet Engineering Task Force). @@ -838,7 +871,8 @@ Guidelines for Electronic Text Encoding and Interchange for Computers and the Humanities (ACH), Association for Computational Linguistics (ACL), and Association for Literary and Linguistic Computing (ALLC). Chicago, -Oxford: Text Encoding Initiative, 1994. +Oxford: Text Encoding Initiative, 1994. + ]Steven J. DeRose and David G. Durand. 1995. "The TEI Hypertext Guidelines." In Computing and the Humanities @@ -847,8 +881,10 @@ TEI Hypertext Guidelines." In Reprinted in Text Encoding Initiative: Background and Context , -ed. Nancy Ide and Jean ronis , ISBN 0-7923-3704-2. +ed. Nancy Ide and Jean ronis +, ISBN 0-7923-3704-2. + diff --git a/test/XPath/tests/chaptersbase b/test/XPath/tests/chaptersbase index b44b2aef..daa53b75 100644 --- a/test/XPath/tests/chaptersbase +++ b/test/XPath/tests/chaptersbase @@ -1,5 +1,5 @@ /child::EXAMPLE -/child::EXAMPLE/child::* +/child::* /child::EXAMPLE/child::head /child::EXAMPLE/child::* /child::EXAMPLE/child::head/child::title diff --git a/test/XPath/tests/simpleabbr b/test/XPath/tests/simpleabbr index 5f885b38..a7e3f542 100644 --- a/test/XPath/tests/simpleabbr +++ b/test/XPath/tests/simpleabbr @@ -1,5 +1,5 @@ /EXAMPLE -/EXAMPLE/chapter +/EXAMPLE/head /EXAMPLE/chapter[1] //p //chapter/image diff --git a/test/XPath/tests/simplebase b/test/XPath/tests/simplebase index 11f87223..7e4203af 100644 --- a/test/XPath/tests/simplebase +++ b/test/XPath/tests/simplebase @@ -1,5 +1,5 @@ +/child::* /child::EXAMPLE -/child::EXAMPLE/child::chapter /child::EXAMPLE/child::head /child::EXAMPLE/child::* /child::EXAMPLE/child::head/child::title diff --git a/testHTML.c b/testHTML.c index 27afe35e..2c6becce 100644 --- a/testHTML.c +++ b/testHTML.c @@ -35,7 +35,6 @@ static int copy = 0; /* * Note: this is perfectly clean HTML, i.e. not a useful test. - */ static CHAR buffer[] = "\n\ @@ -52,6 +51,7 @@ We are doing our best to get it back on-line,\n\ \n\ \n\ "; + */ /************************************************************************ * * diff --git a/testSAX.c b/testSAX.c index 2b2e89bc..7dcdcf4f 100644 --- a/testSAX.c +++ b/testSAX.c @@ -105,7 +105,7 @@ static CHAR buffer[] = * Returns 1 if true */ int -isStandaloneDebug(xmlParserCtxtPtr ctxt) +isStandaloneDebug(void *ctx) { fprintf(stdout, "SAX.isStandalone()\n"); return(0); @@ -120,7 +120,7 @@ isStandaloneDebug(xmlParserCtxtPtr ctxt) * Returns 1 if true */ int -hasInternalSubsetDebug(xmlParserCtxtPtr ctxt) +hasInternalSubsetDebug(void *ctx) { fprintf(stdout, "SAX.hasInternalSubset()\n"); return(0); @@ -135,7 +135,7 @@ hasInternalSubsetDebug(xmlParserCtxtPtr ctxt) * Returns 1 if true */ int -hasExternalSubsetDebug(xmlParserCtxtPtr ctxt) +hasExternalSubsetDebug(void *ctx) { fprintf(stdout, "SAX.hasExternalSubset()\n"); return(0); @@ -148,7 +148,7 @@ hasExternalSubsetDebug(xmlParserCtxtPtr ctxt) * Does this document has an internal subset */ void -internalSubsetDebug(xmlParserCtxtPtr ctxt, const CHAR *name, +internalSubsetDebug(void *ctx, const CHAR *name, const CHAR *ExternalID, const CHAR *SystemID) { xmlDtdPtr externalSubset; @@ -179,8 +179,10 @@ internalSubsetDebug(xmlParserCtxtPtr ctxt, const CHAR *name, * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. */ xmlParserInputPtr -resolveEntityDebug(xmlParserCtxtPtr ctxt, const CHAR *publicId, const CHAR *systemId) +resolveEntityDebug(void *ctx, const CHAR *publicId, const CHAR *systemId) { + xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; + fprintf(stdout, "SAX.resolveEntity("); if (publicId != NULL) @@ -192,7 +194,7 @@ resolveEntityDebug(xmlParserCtxtPtr ctxt, const CHAR *publicId, const CHAR *syst else fprintf(stdout, ", )\n"); if (systemId != NULL) { - return(xmlNewInputFromFile(ctxt, systemId)); + return(xmlNewInputFromFile(ctxt, (char *) systemId)); } return(NULL); } @@ -207,7 +209,7 @@ resolveEntityDebug(xmlParserCtxtPtr ctxt, const CHAR *publicId, const CHAR *syst * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. */ xmlEntityPtr -getEntityDebug(xmlParserCtxtPtr ctxt, const CHAR *name) +getEntityDebug(void *ctx, const CHAR *name) { fprintf(stdout, "SAX.getEntity(%s)\n", name); return(NULL); @@ -223,7 +225,7 @@ getEntityDebug(xmlParserCtxtPtr ctxt, const CHAR *name) * Returns the xmlParserInputPtr */ xmlEntityPtr -getParameterEntityDebug(xmlParserCtxtPtr ctxt, const CHAR *name) +getParameterEntityDebug(void *ctx, const CHAR *name) { fprintf(stdout, "SAX.getParameterEntity(%s)\n", name); return(NULL); @@ -242,7 +244,7 @@ getParameterEntityDebug(xmlParserCtxtPtr ctxt, const CHAR *name) * An entity definition has been parsed */ void -entityDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *name, int type, +entityDeclDebug(void *ctx, const CHAR *name, int type, const CHAR *publicId, const CHAR *systemId, CHAR *content) { fprintf(stdout, "SAX.entityDecl(%s, %d, %s, %s, %s)\n", @@ -258,7 +260,7 @@ entityDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *name, int type, * An attribute definition has been parsed */ void -attributeDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *elem, const CHAR *name, +attributeDeclDebug(void *ctx, const CHAR *elem, const CHAR *name, int type, int def, const CHAR *defaultValue, xmlEnumerationPtr tree) { @@ -276,7 +278,7 @@ attributeDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *elem, const CHAR *name, * An element definition has been parsed */ void -elementDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *name, int type, +elementDeclDebug(void *ctx, const CHAR *name, int type, xmlElementContentPtr content) { fprintf(stdout, "SAX.elementDecl(%s, %d, ...)\n", @@ -291,10 +293,9 @@ elementDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *name, int type, * @systemId: The system ID of the entity * * What to do when a notation declaration has been parsed. - * TODO Not handled currently. */ void -notationDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *name, +notationDeclDebug(void *ctx, const CHAR *name, const CHAR *publicId, const CHAR *systemId) { fprintf(stdout, "SAX.notationDecl(%s, %s, %s)\n", @@ -310,10 +311,9 @@ notationDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *name, * @notationName: the name of the notation * * What to do when an unparsed entity declaration is parsed - * TODO Create an Entity node. */ void -unparsedEntityDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *name, +unparsedEntityDeclDebug(void *ctx, const CHAR *name, const CHAR *publicId, const CHAR *systemId, const CHAR *notationName) { @@ -331,7 +331,7 @@ unparsedEntityDeclDebug(xmlParserCtxtPtr ctxt, const CHAR *name, * Everything is available on the context, so this is useless in our case. */ void -setDocumentLocatorDebug(xmlParserCtxtPtr ctxt, xmlSAXLocatorPtr loc) +setDocumentLocatorDebug(void *ctx, xmlSAXLocatorPtr loc) { fprintf(stdout, "SAX.setDocumentLocator()\n"); } @@ -343,7 +343,7 @@ setDocumentLocatorDebug(xmlParserCtxtPtr ctxt, xmlSAXLocatorPtr loc) * called when the document start being processed. */ void -startDocumentDebug(xmlParserCtxtPtr ctxt) +startDocumentDebug(void *ctx) { fprintf(stdout, "SAX.startDocument()\n"); } @@ -355,7 +355,7 @@ startDocumentDebug(xmlParserCtxtPtr ctxt) * called when the document end has been detected. */ void -endDocumentDebug(xmlParserCtxtPtr ctxt) +endDocumentDebug(void *ctx) { fprintf(stdout, "SAX.endDocument()\n"); } @@ -366,10 +366,9 @@ endDocumentDebug(xmlParserCtxtPtr ctxt) * @name: The element name * * called when an opening tag has been processed. - * TODO We currently have a small pblm with the arguments ... */ void -startElementDebug(xmlParserCtxtPtr ctxt, const CHAR *name, const CHAR **atts) +startElementDebug(void *ctx, const CHAR *name, const CHAR **atts) { int i; @@ -391,7 +390,7 @@ startElementDebug(xmlParserCtxtPtr ctxt, const CHAR *name, const CHAR **atts) * called when the end of an element has been detected. */ void -endElementDebug(xmlParserCtxtPtr ctxt, const CHAR *name) +endElementDebug(void *ctx, const CHAR *name) { fprintf(stdout, "SAX.endElement(%s)\n", (char *) name); } @@ -406,7 +405,7 @@ endElementDebug(xmlParserCtxtPtr ctxt, const CHAR *name) * Question: how much at a time ??? */ void -charactersDebug(xmlParserCtxtPtr ctxt, const CHAR *ch, int len) +charactersDebug(void *ctx, const CHAR *ch, int len) { int i; @@ -424,7 +423,7 @@ charactersDebug(xmlParserCtxtPtr ctxt, const CHAR *ch, int len) * called when an entity reference is detected. */ void -referenceDebug(xmlParserCtxtPtr ctxt, const CHAR *name) +referenceDebug(void *ctx, const CHAR *name) { fprintf(stdout, "SAX.reference(%s)\n", name); } @@ -440,7 +439,7 @@ referenceDebug(xmlParserCtxtPtr ctxt, const CHAR *name) * Question: how much at a time ??? */ void -ignorableWhitespaceDebug(xmlParserCtxtPtr ctxt, const CHAR *ch, int len) +ignorableWhitespaceDebug(void *ctx, const CHAR *ch, int len) { fprintf(stdout, "SAX.ignorableWhitespace(%.30s, %d)\n", (char *) ch, len); @@ -456,7 +455,7 @@ ignorableWhitespaceDebug(xmlParserCtxtPtr ctxt, const CHAR *ch, int len) * A processing instruction has been parsed. */ void -processingInstructionDebug(xmlParserCtxtPtr ctxt, const CHAR *target, +processingInstructionDebug(void *ctx, const CHAR *target, const CHAR *data) { fprintf(stdout, "SAX.processingInstruction(%s, %s)\n", @@ -471,7 +470,7 @@ processingInstructionDebug(xmlParserCtxtPtr ctxt, const CHAR *target, * A comment has been parsed. */ void -commentDebug(xmlParserCtxtPtr ctxt, const CHAR *value) +commentDebug(void *ctx, const CHAR *value) { fprintf(stdout, "SAX.comment(%s)\n", value); } @@ -486,7 +485,7 @@ commentDebug(xmlParserCtxtPtr ctxt, const CHAR *value) * extra parameters. */ void -warningDebug(xmlParserCtxtPtr ctxt, const char *msg, ...) +warningDebug(void *ctx, const char *msg, ...) { va_list args; @@ -506,7 +505,7 @@ warningDebug(xmlParserCtxtPtr ctxt, const char *msg, ...) * extra parameters. */ void -errorDebug(xmlParserCtxtPtr ctxt, const char *msg, ...) +errorDebug(void *ctx, const char *msg, ...) { va_list args; @@ -526,7 +525,7 @@ errorDebug(xmlParserCtxtPtr ctxt, const char *msg, ...) * extra parameters. */ void -fatalErrorDebug(xmlParserCtxtPtr ctxt, const char *msg, ...) +fatalErrorDebug(void *ctx, const char *msg, ...) { va_list args; diff --git a/testXPath.c b/testXPath.c index 27e17ab7..178f23e2 100644 --- a/testXPath.c +++ b/testXPath.c @@ -85,6 +85,8 @@ void xmlXPAthDebugDumpNodeSet(FILE *output, xmlNodeSetPtr cur) { fprintf(output, " NULL\n"); else if (cur->nodeTab[i]->type == XML_DOCUMENT_NODE) fprintf(output, " /\n"); + else if (cur->nodeTab[i]->type == XML_ATTRIBUTE_NODE) + xmlDebugDumpAttr(output, (xmlAttrPtr)cur->nodeTab[i], 2); else xmlDebugDumpOneNode(output, cur->nodeTab[i], 2); } @@ -123,11 +125,11 @@ void testXPath(const char *str) { xmlXPathObjectPtr res; xmlXPathContextPtr ctxt; - ctxt = xmlXPathNewContext(document, NULL, NULL, NULL); + ctxt = xmlXPathNewContext(document, NULL, NULL); if (expr) - res = xmlXPathEvalExpression(str, ctxt); + res = xmlXPathEvalExpression(BAD_CAST str, ctxt); else - res = xmlXPathEval(str, ctxt); + res = xmlXPathEval(BAD_CAST str, ctxt); xmlXPAthDebugDumpObject(stdout, res); xmlXPathFreeObject(res); xmlXPathFreeContext(ctxt); diff --git a/tester.c b/tester.c index 89d1ff67..e4960111 100644 --- a/tester.c +++ b/tester.c @@ -76,18 +76,20 @@ int treeTest(void) { /* * build a fake XML document */ - doc = xmlNewDoc("1.0"); - doc->root = xmlNewDocNode(doc, NULL, "EXAMPLE", NULL); - xmlSetProp(doc->root, "prop1", "gnome is great"); - xmlSetProp(doc->root, "prop2", "&linux; too"); - xmlSetProp(doc->root, "emptyprop", ""); - tree = xmlNewChild(doc->root, NULL, "head", NULL); - subtree = xmlNewChild(tree, NULL, "title", "Welcome to Gnome"); - tree = xmlNewChild(doc->root, NULL, "chapter", NULL); - subtree = xmlNewChild(tree, NULL, "title", "The Linux adventure"); - subtree = xmlNewChild(tree, NULL, "p", "bla bla bla ..."); - subtree = xmlNewChild(tree, NULL, "image", NULL); - xmlSetProp(subtree, "href", "linus.gif"); + doc = xmlNewDoc(BAD_CAST "1.0"); + doc->root = xmlNewDocNode(doc, NULL, BAD_CAST "EXAMPLE", NULL); + xmlSetProp(doc->root, BAD_CAST "prop1", BAD_CAST "gnome is great"); + xmlSetProp(doc->root, BAD_CAST "prop2", BAD_CAST "&linux; too"); + xmlSetProp(doc->root, BAD_CAST "emptyprop", BAD_CAST ""); + tree = xmlNewChild(doc->root, NULL, BAD_CAST "head", NULL); + subtree = xmlNewChild(tree, NULL, BAD_CAST "title", + BAD_CAST "Welcome to Gnome"); + tree = xmlNewChild(doc->root, NULL, BAD_CAST "chapter", NULL); + subtree = xmlNewChild(tree, NULL, BAD_CAST "title", + BAD_CAST "The Linux adventure"); + subtree = xmlNewChild(tree, NULL, BAD_CAST "p", BAD_CAST "bla bla bla ..."); + subtree = xmlNewChild(tree, NULL, BAD_CAST "image", NULL); + xmlSetProp(subtree, BAD_CAST "href", BAD_CAST "linus.gif"); /* * test intermediate copy if needed. diff --git a/tree.c b/tree.c index 7c61ea54..34c927a3 100644 --- a/tree.c +++ b/tree.c @@ -3,8 +3,6 @@ * * See Copyright for the status of this software. * - * TODO Cleanup the Dump mechanism. - * * Daniel.Veillard@w3.org */ @@ -395,6 +393,7 @@ xmlNewDoc(const CHAR *version) { cur->encoding = NULL; cur->standalone = -1; cur->compression = xmlCompressMode; + cur->ids = NULL; #ifndef XML_WITHOUT_CORBA cur->_private = NULL; cur->vepv = NULL; @@ -424,6 +423,7 @@ xmlFreeDoc(xmlDocPtr cur) { if (cur->intSubset != NULL) xmlFreeDtd(cur->intSubset); if (cur->extSubset != NULL) xmlFreeDtd(cur->extSubset); if (cur->oldNs != NULL) xmlFreeNsList(cur->oldNs); + if (cur->ids != NULL) xmlFreeIDTable((xmlIDTablePtr) cur->ids); memset(cur, -1, sizeof(xmlDoc)); free(cur); } @@ -738,6 +738,66 @@ xmlNewProp(xmlNodePtr node, const CHAR *name, const CHAR *value) { cur->type = XML_ATTRIBUTE_NODE; cur->node = node; + cur->ns = NULL; + cur->name = xmlStrdup(name); + if (value != NULL) + cur->val = xmlStringGetNodeList(node->doc, value); + else + cur->val = NULL; +#ifndef XML_WITHOUT_CORBA + cur->_private = NULL; + cur->vepv = NULL; +#endif + + /* + * Add it at the end to preserve parsing order ... + */ + cur->next = NULL; + if (node != NULL) { + if (node->properties == NULL) { + node->properties = cur; + } else { + xmlAttrPtr prev = node->properties; + + while (prev->next != NULL) prev = prev->next; + prev->next = cur; + } + } + return(cur); +} + +/** + * xmlNewNsProp: + * @node: the holding node + * @ns: the namespace + * @name: the name of the attribute + * @value: the value of the attribute + * + * Create a new property tagged with a namespace and carried by a node. + * Returns a pointer to the attribute + */ +xmlAttrPtr +xmlNewNsProp(xmlNodePtr node, xmlNsPtr ns, const CHAR *name, + const CHAR *value) { + xmlAttrPtr cur; + + if (name == NULL) { + fprintf(stderr, "xmlNewProp : name == NULL\n"); + return(NULL); + } + + /* + * Allocate a new property and fill the fields. + */ + cur = (xmlAttrPtr) malloc(sizeof(xmlAttr)); + if (cur == NULL) { + fprintf(stderr, "xmlNewProp : malloc failed\n"); + return(NULL); + } + + cur->type = XML_ATTRIBUTE_NODE; + cur->node = node; + cur->ns = ns; cur->name = xmlStrdup(name); if (value != NULL) cur->val = xmlStringGetNodeList(node->doc, value); @@ -846,6 +906,54 @@ xmlFreeProp(xmlAttrPtr cur) { free(cur); } +/** + * xmlNewPI: + * @name: the processing instruction name + * @content: the PI content + * + * Creation of a processing instruction element. + * Returns a pointer to the new node object. + */ +xmlNodePtr +xmlNewPI(const CHAR *name, const CHAR *content) { + xmlNodePtr cur; + + if (name == NULL) { + fprintf(stderr, "xmlNewPI : name == NULL\n"); + return(NULL); + } + + /* + * Allocate a new node and fill the fields. + */ + cur = (xmlNodePtr) malloc(sizeof(xmlNode)); + if (cur == NULL) { + fprintf(stderr, "xmlNewPI : malloc failed\n"); + return(NULL); + } + + cur->type = XML_PI_NODE; + cur->doc = NULL; + cur->parent = NULL; + cur->next = NULL; + cur->prev = NULL; + cur->childs = NULL; + cur->last = NULL; + cur->properties = NULL; + cur->name = xmlStrdup(name); + cur->ns = NULL; + cur->nsDef = NULL; + if (content != NULL) + cur->content = xmlStrdup(content); + else + cur->content = NULL; +#ifndef XML_WITHOUT_CORBA + cur->_private = NULL; + cur->vepv = NULL; +#endif + return(cur); +} + /** * xmlNewNode: * @ns: namespace if any @@ -1239,6 +1347,50 @@ xmlNewChild(xmlNodePtr parent, xmlNsPtr ns, return(cur); } +/** + * xmlAddSibling: + * @cur: the child node + * @elem: the new node + * + * Add a new element to the list of siblings of @cur + * Returns the element or NULL in case of error. + */ +xmlNodePtr +xmlAddSibling(xmlNodePtr cur, xmlNodePtr elem) { + xmlNodePtr parent; + + if (cur == NULL) { + fprintf(stderr, "xmlAddSibling : cur == NULL\n"); + return(NULL); + } + + if (elem == NULL) { + fprintf(stderr, "xmlAddSibling : elem == NULL\n"); + return(NULL); + } + + if ((cur->doc != NULL) && (elem->doc != NULL) && + (cur->doc != elem->doc)) { + fprintf(stderr, + "xmlAddSibling: Elements moved to a different document\n"); + } + + while (cur->next != NULL) cur = cur->next; + + if (elem->doc == NULL) + elem->doc = cur->doc; /* the parent may not be linked to a doc ! */ + + parent = cur->parent; + elem->prev = cur; + elem->next = NULL; + elem->parent = parent; + cur->next = elem; + if (parent != NULL) + parent->last = elem; + + return(elem); +} + /** * xmlAddChild: * @parent: the parent node @@ -1451,6 +1603,7 @@ xmlCopyNamespaceList(xmlNsPtr cur) { /** * xmlCopyProp: + * @target: the element where the attribute will be grafted * @cur: the attribute * * Do a copy of the attribute. @@ -1458,7 +1611,7 @@ xmlCopyNamespaceList(xmlNsPtr cur) { * Returns: a new xmlAttrPtr, or NULL in case of error. */ xmlAttrPtr -xmlCopyProp(xmlAttrPtr cur) { +xmlCopyProp(xmlNodePtr target, xmlAttrPtr cur) { xmlAttrPtr ret; if (cur == NULL) return(NULL); @@ -1467,6 +1620,15 @@ xmlCopyProp(xmlAttrPtr cur) { else ret = xmlNewDocProp(NULL, cur->name, NULL); if (ret == NULL) return(NULL); + + if ((cur->ns != NULL) && (target != NULL)) { + xmlNsPtr ns; + + ns = xmlSearchNs(target->doc, target, cur->ns->prefix); + ret->ns = ns; + } else + ret->ns = NULL; + if (cur->val != NULL) ret->val = xmlCopyNodeList(cur->val); return(ret); @@ -1474,6 +1636,7 @@ xmlCopyProp(xmlAttrPtr cur) { /** * xmlCopyPropList: + * @target: the element where the attributes will be grafted * @cur: the first attribute * * Do a copy of an attribute list. @@ -1481,12 +1644,12 @@ xmlCopyProp(xmlAttrPtr cur) { * Returns: a new xmlAttrPtr, or NULL in case of error. */ xmlAttrPtr -xmlCopyPropList(xmlAttrPtr cur) { +xmlCopyPropList(xmlNodePtr target, xmlAttrPtr cur) { xmlAttrPtr ret = NULL; xmlAttrPtr p = NULL,q; while (cur != NULL) { - q = xmlCopyProp(cur); + q = xmlCopyProp(target, cur); if (p == NULL) { ret = p = q; } else { @@ -1557,8 +1720,6 @@ xmlStaticCopyNode(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent, xmlAddChild(parent, ret); if (!recursive) return(ret); - if (node->properties != NULL) - ret->properties = xmlCopyPropList(node->properties); if (node->nsDef != NULL) ret->nsDef = xmlCopyNamespaceList(node->nsDef); @@ -1586,6 +1747,8 @@ xmlStaticCopyNode(xmlNodePtr node, xmlDocPtr doc, xmlNodePtr parent, ret->ns = ns; } } + if (node->properties != NULL) + ret->properties = xmlCopyPropList(ret, node->properties); if (node->childs != NULL) ret->childs = xmlStaticCopyNodeList(node->childs, doc, ret); UPDATE_LAST_CHILD(ret) @@ -1699,9 +1862,6 @@ xmlCopyDtd(xmlDtdPtr dtd) { if (dtd->attributes != NULL) ret->attributes = (void *) xmlCopyAttributeTable( (xmlAttributeTablePtr) dtd->attributes); - /* - * TODO: support for Element definitions. - */ return(ret); } @@ -1745,6 +1905,44 @@ xmlCopyDoc(xmlDocPtr doc, int recursive) { * * ************************************************************************/ +/** + * xmlNodeSetLang: + * @cur: the node being changed + * @lang: the langage description + * + * Searches the language of a node, i.e. the values of the xml:lang + * attribute or the one carried by the nearest ancestor. + * + * Returns a pointer to the lang value, or NULL if not found + */ +void +xmlNodeSetLang(xmlNodePtr cur, const CHAR *lang) { + /* TODO xmlNodeSetLang check against the production [33] LanguageID */ + xmlSetProp(cur, BAD_CAST "xml:lang", lang); +} + +/** + * xmlNodeGetLang: + * @cur: the node being checked + * + * Searches the language of a node, i.e. the values of the xml:lang + * attribute or the one carried by the nearest ancestor. + * + * Returns a pointer to the lang value, or NULL if not found + */ +const CHAR * +xmlNodeGetLang(xmlNodePtr cur) { + const CHAR *lang; + + while (cur != NULL) { + lang = xmlGetProp(cur, BAD_CAST "xml:lang"); + if (lang != NULL) + return(lang); + cur = cur->parent; + } + return(NULL); +} + /** * xmlNodeGetContent: * @cur: the node being read @@ -1764,10 +1962,20 @@ xmlNodeGetContent(xmlNodePtr cur) { case XML_ELEMENT_NODE: return(xmlNodeListGetString(cur->doc, cur->childs, 1)); break; - case XML_ATTRIBUTE_NODE: + case XML_ATTRIBUTE_NODE: { + xmlAttrPtr attr = (xmlAttrPtr) cur; + if (attr->node != NULL) + return(xmlNodeListGetString(attr->node->doc, attr->val, 1)); + else + return(xmlNodeListGetString(NULL, attr->val, 1)); + break; + } + case XML_PI_NODE: + if (cur->content != NULL) + return(xmlStrdup(cur->content)); + return(NULL); case XML_ENTITY_REF_NODE: case XML_ENTITY_NODE: - case XML_PI_NODE: case XML_COMMENT_NODE: case XML_DOCUMENT_NODE: case XML_DOCUMENT_TYPE_NODE: @@ -1821,6 +2029,7 @@ xmlNodeSetContent(xmlNodePtr cur, const CHAR *content) { cur->content = xmlStrdup(content); else cur->content = NULL; + break; case XML_DOCUMENT_NODE: case XML_DOCUMENT_TYPE_NODE: break; @@ -1869,6 +2078,7 @@ xmlNodeSetContentLen(xmlNodePtr cur, const CHAR *content, int len) { cur->content = xmlStrndup(content, len); else cur->content = NULL; + break; case XML_DOCUMENT_NODE: case XML_DOCUMENT_TYPE_NODE: break; @@ -1984,6 +2194,60 @@ xmlTextMerge(xmlNodePtr first, xmlNodePtr second) { return(first); } +/** + * xmlGetNsList: + * @doc: the document + * @node: the current node + * + * Search all the namespace applying to a given element. + * Returns an NULL terminated array of all the xmlNsPtr found + * that need to be freed by the caller or NULL if no + * namespace if defined + */ +xmlNsPtr * +xmlGetNsList(xmlDocPtr doc, xmlNodePtr node) { + xmlNsPtr cur; + xmlNsPtr *ret = NULL; + int nbns = 0; + int maxns = 10; + int i; + + while (node != NULL) { + cur = node->nsDef; + while (cur != NULL) { + if (ret == NULL) { + ret = (xmlNsPtr *) malloc((maxns + 1) * sizeof(xmlNsPtr)); + if (ret == NULL) { + fprintf(stderr, "xmlGetNsList : out of memory!\n"); + return(NULL); + } + ret[nbns] = NULL; + } + for (i = 0;i < nbns;i++) { + if ((cur->prefix == ret[i]->prefix) || + (!xmlStrcmp(cur->prefix, ret[i]->prefix))) break; + } + if (i >= nbns) { + if (nbns >= maxns) { + maxns *= 2; + ret = (xmlNsPtr *) realloc(ret, + (maxns + 1) * sizeof(xmlNsPtr)); + if (ret == NULL) { + fprintf(stderr, "xmlGetNsList : realloc failed!\n"); + return(NULL); + } + } + ret[nbns++] = cur; + ret[nbns] = NULL; + } + + cur = cur->next; + } + node = node->parent; + } + return(ret); +} + /** * xmlSearchNs: * @doc: the document @@ -2077,7 +2341,7 @@ CHAR *xmlGetProp(xmlNodePtr node, const CHAR *name) { CHAR *ret; ret = xmlNodeListGetString(node->doc, prop->val, 1); - if (ret == NULL) return(xmlStrdup("")); + if (ret == NULL) return(xmlStrdup((CHAR *)"")); return(ret); } prop = prop->next; @@ -2401,11 +2665,8 @@ xmlBufferWriteChar(xmlBufferPtr buf, const char *string) { */ void xmlBufferWriteQuotedString(xmlBufferPtr buf, const CHAR *string) { - /* - * TODO: fix strchr by xmlStrchr to work coreectly on UTF-8 !!! - */ - if (strchr(string, '"')) { - if (strchr(string, '\'')) { + if (xmlStrchr(string, '"')) { + if (xmlStrchr(string, '\'')) { fprintf(stderr, "xmlBufferWriteQuotedString: string contains quote and double-quotes !\n"); } @@ -2546,7 +2807,6 @@ xmlDtdDump(xmlBufferPtr buf, xmlDocPtr doc) { xmlDumpAttributeTable(buf, (xmlAttributeTablePtr) cur->attributes); xmlBufferWriteChar(buf, "]"); - /* TODO !!! a lot more things to dump ... */ xmlBufferWriteChar(buf, ">\n"); } @@ -2567,6 +2827,10 @@ xmlAttrDump(xmlBufferPtr buf, xmlDocPtr doc, xmlAttrPtr cur) { return; } xmlBufferWriteChar(buf, " "); + if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) { + xmlBufferWriteCHAR(buf, cur->ns->prefix); + xmlBufferWriteChar(buf, ":"); + } xmlBufferWriteCHAR(buf, cur->name); value = xmlNodeListGetString(doc, cur->val, 0); if (value) { @@ -2663,11 +2927,23 @@ xmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level) { } return; } + if (cur->type == XML_PI_NODE) { + if (cur->content != NULL) { + xmlBufferWriteChar(buf, "name); + if (cur->content != NULL) { + xmlBufferWriteChar(buf, " "); + xmlBufferWriteCHAR(buf, cur->content); + } + xmlBufferWriteChar(buf, "?>\n"); + } + return; + } if (cur->type == XML_COMMENT_NODE) { if (cur->content != NULL) { xmlBufferWriteChar(buf, ""); + xmlBufferWriteChar(buf, "-->\n"); } return; } @@ -2757,12 +3033,18 @@ xmlDocContentDump(xmlBufferPtr buf, xmlDocPtr cur) { if (cur->intSubset != NULL) xmlDtdDump(buf, cur); if (cur->root != NULL) { + xmlNodePtr child = cur->root; + /* global namespace definitions, the old way */ if (oldXMLWDcompatibility) xmlGlobalNsListDump(buf, cur->oldNs); else xmlUpgradeOldNs(cur); - xmlNodeDump(buf, cur, cur->root, 0); + + while (child != NULL) { + xmlNodeDump(buf, cur, child, 0); + child = child->next; + } } } diff --git a/tree.h b/tree.h index fa70ba37..6d22ac12 100644 --- a/tree.h +++ b/tree.h @@ -53,6 +53,8 @@ typedef unsigned short CHAR; typedef unsigned char CHAR; #endif +#define BAD_CAST (CHAR *) + /* * a DTD Notation definition */ @@ -193,6 +195,7 @@ typedef struct xmlAttr { struct xmlAttr *next; /* attribute list link */ const CHAR *name; /* the name of the property */ struct xmlNode *val; /* the value of the property */ + xmlNs *ns; /* pointer to the associated namespace */ } xmlAttr; typedef xmlAttr *xmlAttrPtr; @@ -277,124 +280,195 @@ extern int xmlIndentTreeOutput; /* try to indent the tree dumps */ * Handling Buffers. */ -xmlBufferPtr xmlBufferCreate(void); -void xmlBufferFree(xmlBufferPtr buf); -int xmlBufferDump(FILE *file, xmlBufferPtr buf); -void xmlBufferAdd(xmlBufferPtr buf, const CHAR *str, int len); -void xmlBufferCat(xmlBufferPtr buf, const CHAR *str); -void xmlBufferCCat(xmlBufferPtr buf, const char *str); -int xmlBufferShrink(xmlBufferPtr buf, int len); -void xmlBufferEmpty(xmlBufferPtr buf); +xmlBufferPtr xmlBufferCreate (void); +void xmlBufferFree (xmlBufferPtr buf); +int xmlBufferDump (FILE *file, + xmlBufferPtr buf); +void xmlBufferAdd (xmlBufferPtr buf, + const CHAR *str, + int len); +void xmlBufferCat (xmlBufferPtr buf, + const CHAR *str); +void xmlBufferCCat (xmlBufferPtr buf, + const char *str); +int xmlBufferShrink (xmlBufferPtr buf, + int len); +void xmlBufferEmpty (xmlBufferPtr buf); /* * Creating/freeing new structures */ -xmlDtdPtr xmlCreateIntSubset(xmlDocPtr doc, const CHAR *name, - const CHAR *ExternalID, const CHAR *SystemID); -xmlDtdPtr xmlNewDtd(xmlDocPtr doc, const CHAR *name, - const CHAR *ExternalID, const CHAR *SystemID); -void xmlFreeDtd(xmlDtdPtr cur); -xmlNsPtr xmlNewGlobalNs(xmlDocPtr doc, const CHAR *href, const CHAR *prefix); -xmlNsPtr xmlNewNs(xmlNodePtr node, const CHAR *href, const CHAR *prefix); -void xmlFreeNs(xmlNsPtr cur); -xmlDocPtr xmlNewDoc(const CHAR *version); -void xmlFreeDoc(xmlDocPtr cur); -xmlAttrPtr xmlNewDocProp(xmlDocPtr doc, const CHAR *name, - const CHAR *value); -xmlAttrPtr xmlNewProp(xmlNodePtr node, const CHAR *name, - const CHAR *value); -void xmlFreePropList(xmlAttrPtr cur); -void xmlFreeProp(xmlAttrPtr cur); -xmlAttrPtr xmlCopyProp(xmlAttrPtr cur); -xmlAttrPtr xmlCopyPropList(xmlAttrPtr cur); -xmlDtdPtr xmlCopyDtd(xmlDtdPtr dtd); -xmlDocPtr xmlCopyDoc(xmlDocPtr doc, int recursive); +xmlDtdPtr xmlCreateIntSubset (xmlDocPtr doc, + const CHAR *name, + const CHAR *ExternalID, + const CHAR *SystemID); +xmlDtdPtr xmlNewDtd (xmlDocPtr doc, + const CHAR *name, + const CHAR *ExternalID, + const CHAR *SystemID); +void xmlFreeDtd (xmlDtdPtr cur); +xmlNsPtr xmlNewGlobalNs (xmlDocPtr doc, + const CHAR *href, + const CHAR *prefix); +xmlNsPtr xmlNewNs (xmlNodePtr node, + const CHAR *href, + const CHAR *prefix); +void xmlFreeNs (xmlNsPtr cur); +xmlDocPtr xmlNewDoc (const CHAR *version); +void xmlFreeDoc (xmlDocPtr cur); +xmlAttrPtr xmlNewDocProp (xmlDocPtr doc, + const CHAR *name, + const CHAR *value); +xmlAttrPtr xmlNewProp (xmlNodePtr node, + const CHAR *name, + const CHAR *value); +xmlAttrPtr xmlNewNsProp (xmlNodePtr node, + xmlNsPtr ns, + const CHAR *name, + const CHAR *value); +void xmlFreePropList (xmlAttrPtr cur); +void xmlFreeProp (xmlAttrPtr cur); +xmlAttrPtr xmlCopyProp (xmlNodePtr target, + xmlAttrPtr cur); +xmlAttrPtr xmlCopyPropList (xmlNodePtr target, + xmlAttrPtr cur); +xmlDtdPtr xmlCopyDtd (xmlDtdPtr dtd); +xmlDocPtr xmlCopyDoc (xmlDocPtr doc, + int recursive); /* * Creating new nodes */ -xmlNodePtr xmlNewDocNode(xmlDocPtr doc, xmlNsPtr ns, - const CHAR *name, const CHAR *content); -xmlNodePtr xmlNewNode(xmlNsPtr ns, const CHAR *name); -xmlNodePtr xmlNewChild(xmlNodePtr parent, xmlNsPtr ns, - const CHAR *name, const CHAR *content); -xmlNodePtr xmlNewDocText(xmlDocPtr doc, const CHAR *content); -xmlNodePtr xmlNewText(const CHAR *content); -xmlNodePtr xmlNewDocTextLen(xmlDocPtr doc, const CHAR *content, int len); -xmlNodePtr xmlNewTextLen(const CHAR *content, int len); -xmlNodePtr xmlNewDocComment(xmlDocPtr doc, const CHAR *content); -xmlNodePtr xmlNewComment(const CHAR *content); -xmlNodePtr xmlNewCDataBlock(xmlDocPtr doc, const CHAR *content, int len); -xmlNodePtr xmlNewReference(xmlDocPtr doc, const CHAR *name); -xmlNodePtr xmlCopyNode(xmlNodePtr node, int recursive); -xmlNodePtr xmlCopyNodeList(xmlNodePtr node); +xmlNodePtr xmlNewDocNode (xmlDocPtr doc, + xmlNsPtr ns, + const CHAR *name, + const CHAR *content); +xmlNodePtr xmlNewNode (xmlNsPtr ns, + const CHAR *name); +xmlNodePtr xmlNewChild (xmlNodePtr parent, + xmlNsPtr ns, + const CHAR *name, + const CHAR *content); +xmlNodePtr xmlNewDocText (xmlDocPtr doc, + const CHAR *content); +xmlNodePtr xmlNewText (const CHAR *content); +xmlNodePtr xmlNewPI (const CHAR *name, + const CHAR *content); +xmlNodePtr xmlNewDocTextLen (xmlDocPtr doc, + const CHAR *content, + int len); +xmlNodePtr xmlNewTextLen (const CHAR *content, + int len); +xmlNodePtr xmlNewDocComment (xmlDocPtr doc, + const CHAR *content); +xmlNodePtr xmlNewComment (const CHAR *content); +xmlNodePtr xmlNewCDataBlock (xmlDocPtr doc, + const CHAR *content, + int len); +xmlNodePtr xmlNewReference (xmlDocPtr doc, + const CHAR *name); +xmlNodePtr xmlCopyNode (xmlNodePtr node, + int recursive); +xmlNodePtr xmlCopyNodeList (xmlNodePtr node); /* * Navigating */ -xmlNodePtr xmlGetLastChild(xmlNodePtr parent); -int xmlNodeIsText(xmlNodePtr node); +xmlNodePtr xmlGetLastChild (xmlNodePtr parent); +int xmlNodeIsText (xmlNodePtr node); /* * Changing the structure */ -xmlNodePtr xmlAddChild(xmlNodePtr parent, xmlNodePtr cur); -void xmlUnlinkNode(xmlNodePtr cur); - -xmlNodePtr xmlTextMerge(xmlNodePtr first, xmlNodePtr second); -void xmlTextConcat(xmlNodePtr node, const CHAR *content, int len); - -void xmlFreeNodeList(xmlNodePtr cur); -void xmlFreeNode(xmlNodePtr cur); +xmlNodePtr xmlAddChild (xmlNodePtr parent, + xmlNodePtr cur); +xmlNodePtr xmlAddSibling (xmlNodePtr cur, + xmlNodePtr elem); +void xmlUnlinkNode (xmlNodePtr cur); +xmlNodePtr xmlTextMerge (xmlNodePtr first, + xmlNodePtr second); +void xmlTextConcat (xmlNodePtr node, + const CHAR *content, + int len); +void xmlFreeNodeList (xmlNodePtr cur); +void xmlFreeNode (xmlNodePtr cur); /* * Namespaces */ -xmlNsPtr xmlSearchNs(xmlDocPtr doc, xmlNodePtr node, - const CHAR *nameSpace); -xmlNsPtr xmlSearchNsByHref(xmlDocPtr doc, xmlNodePtr node, - const CHAR *href); -void xmlSetNs(xmlNodePtr node, xmlNsPtr ns); -xmlNsPtr xmlCopyNamespace(xmlNsPtr cur); -xmlNsPtr xmlCopyNamespaceList(xmlNsPtr cur); +xmlNsPtr xmlSearchNs (xmlDocPtr doc, + xmlNodePtr node, + const CHAR *nameSpace); +xmlNsPtr xmlSearchNsByHref (xmlDocPtr doc, + xmlNodePtr node, + const CHAR *href); +xmlNsPtr * xmlGetNsList (xmlDocPtr doc, + xmlNodePtr node); +void xmlSetNs (xmlNodePtr node, + xmlNsPtr ns); +xmlNsPtr xmlCopyNamespace (xmlNsPtr cur); +xmlNsPtr xmlCopyNamespaceList (xmlNsPtr cur); /* * Changing the content. */ -xmlAttrPtr xmlSetProp(xmlNodePtr node, const CHAR *name, - const CHAR *value); -CHAR *xmlGetProp(xmlNodePtr node, const CHAR *name); -xmlNodePtr xmlStringGetNodeList(xmlDocPtr doc, const CHAR *value); -xmlNodePtr xmlStringLenGetNodeList(xmlDocPtr doc, const CHAR *value, - int len); -CHAR *xmlNodeListGetString(xmlDocPtr doc, xmlNodePtr list, int inLine); -void xmlNodeSetContent(xmlNodePtr cur, const CHAR *content); -void xmlNodeSetContentLen(xmlNodePtr cur, const CHAR *content, int len); -void xmlNodeAddContent(xmlNodePtr cur, const CHAR *content); -void xmlNodeAddContentLen(xmlNodePtr cur, const CHAR *content, int len); -CHAR *xmlNodeGetContent(xmlNodePtr cur); +xmlAttrPtr xmlSetProp (xmlNodePtr node, + const CHAR *name, + const CHAR *value); +CHAR * xmlGetProp (xmlNodePtr node, + const CHAR *name); +xmlNodePtr xmlStringGetNodeList (xmlDocPtr doc, + const CHAR *value); +xmlNodePtr xmlStringLenGetNodeList (xmlDocPtr doc, + const CHAR *value, + int len); +CHAR * xmlNodeListGetString (xmlDocPtr doc, + xmlNodePtr list, + int inLine); +void xmlNodeSetContent (xmlNodePtr cur, + const CHAR *content); +void xmlNodeSetContentLen (xmlNodePtr cur, + const CHAR *content, + int len); +void xmlNodeAddContent (xmlNodePtr cur, + const CHAR *content); +void xmlNodeAddContentLen (xmlNodePtr cur, + const CHAR *content, + int len); +CHAR * xmlNodeGetContent (xmlNodePtr cur); +const CHAR * xmlNodeGetLang (xmlNodePtr cur); +void xmlNodeSetLang (xmlNodePtr cur, + const CHAR *lang); /* * Internal, don't use */ -void xmlBufferWriteCHAR(xmlBufferPtr buf, const CHAR *string); -void xmlBufferWriteChar(xmlBufferPtr buf, const char *string); -void xmlBufferWriteQuotedString(xmlBufferPtr buf, const CHAR *string); +void xmlBufferWriteCHAR (xmlBufferPtr buf, + const CHAR *string); +void xmlBufferWriteChar (xmlBufferPtr buf, + const char *string); +void xmlBufferWriteQuotedString(xmlBufferPtr buf, + const CHAR *string); /* * Saving */ -void xmlDocDumpMemory(xmlDocPtr cur, CHAR**mem, int *size); -void xmlDocDump(FILE *f, xmlDocPtr cur); -int xmlSaveFile(const char *filename, xmlDocPtr cur); +void xmlDocDumpMemory (xmlDocPtr cur, + CHAR**mem, + int *size); +void xmlDocDump (FILE *f, + xmlDocPtr cur); +int xmlSaveFile (const char *filename, + xmlDocPtr cur); /* * Compression */ -int xmlGetDocCompressMode (xmlDocPtr doc); -void xmlSetDocCompressMode (xmlDocPtr doc, int mode); -int xmlGetCompressMode(void); -void xmlSetCompressMode(int mode); +int xmlGetDocCompressMode (xmlDocPtr doc); +void xmlSetDocCompressMode (xmlDocPtr doc, + int mode); +int xmlGetCompressMode (void); +void xmlSetCompressMode (int mode); #ifdef __cplusplus } diff --git a/valid.c b/valid.c index 25ad9d53..a7ea8602 100644 --- a/valid.c +++ b/valid.c @@ -201,7 +201,7 @@ xmlSprintfElementContent(char *buf, xmlElementContentPtr content, int glob) { strcat(buf, "#PCDATA"); break; case XML_ELEMENT_CONTENT_ELEMENT: - strcat(buf, content->name); + strcat(buf, (char *) content->name); break; case XML_ELEMENT_CONTENT_SEQ: if ((content->c1->type == XML_ELEMENT_CONTENT_OR) || @@ -760,7 +760,9 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const CHAR *elem, fprintf(stderr, "xmlAddAttributeDecl: elem == NULL\n"); return(NULL); } - /* TODO: Lacks verifications !!! */ + /* + * Check the type and possibly the default value. + */ switch (type) { case XML_ATTRIBUTE_CDATA: break; @@ -786,6 +788,12 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const CHAR *elem, fprintf(stderr, "xmlAddAttributeDecl: unknown type %d\n", type); return(NULL); } + if ((defaultValue != NULL) && + (!xmlValidateAttributeValue(type, defaultValue))) { + VERROR(ctxt->userData, "Attribute %s on %s: invalid default value\n", + elem, name, defaultValue); + defaultValue = NULL; + } /* * Create the Attribute table if needed. @@ -808,8 +816,8 @@ xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, const CHAR *elem, /* * The attribute is already defined in this Dtd. */ - fprintf(stderr, - "xmlAddAttributeDecl: %s already defined\n", name); + VERROR(ctxt->userData, "Attribute %s on %s: already defined\n", + elem, name); } } @@ -1492,12 +1500,53 @@ xmlIsID(xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr) { attrDecl = xmlGetDtdAttrDesc(doc->extSubset, elem->name, attr->name); - if ((attrDecl == NULL) || (attrDecl->type == XML_ATTRIBUTE_ID)) + if ((attrDecl != NULL) && (attrDecl->type == XML_ATTRIBUTE_ID)) return(1); } return(0); } +/** + * xmlGetID: + * @doc: pointer to the document + * @ID: the ID value + * + * Search the attribute declaring the given ID + * + * Returns NULL if not found, otherwise the xmlAttrPtr defining the ID + */ +xmlAttrPtr +xmlGetID(xmlDocPtr doc, const CHAR *ID) { + xmlIDPtr cur; + xmlIDTablePtr table; + int i; + + if (doc == NULL) { + fprintf(stderr, "xmlGetID: doc == NULL\n"); + return(NULL); + } + + if (ID == NULL) { + fprintf(stderr, "xmlGetID: ID == NULL\n"); + return(NULL); + } + + table = doc->ids; + if (table == NULL) + return(NULL); + + /* + * Search the ID list. + */ + for (i = 0;i < table->nb_ids;i++) { + cur = table->table[i]; + if (!xmlStrcmp(cur->value, ID)) { + return(cur->attr); + } + } + return(NULL); +} + /************************************************************************ * * * Routines for validity checking * @@ -1591,6 +1640,36 @@ xmlGetDtdNotationDesc(xmlDtdPtr dtd, const CHAR *name) { return(NULL); } +/** + * xmlValidateNotationUse: + * @ctxt: the validation context + * @doc: the document + * @notationName: the notation name to check + * + * Validate that the given mame match a notation declaration. + * - [ VC: Notation Declared ] + * + * returns 1 if valid or 0 otherwise + */ + +int +xmlValidateNotationUse(xmlValidCtxtPtr ctxt, xmlDocPtr doc, + const CHAR *notationName) { + xmlNotationPtr notaDecl; + if ((doc == NULL) || (doc->intSubset == NULL)) return(-1); + + notaDecl = xmlGetDtdNotationDesc(doc->intSubset, notationName); + if ((notaDecl == NULL) && (doc->extSubset != NULL)) + notaDecl = xmlGetDtdNotationDesc(doc->extSubset, notationName); + + if (notaDecl == NULL) { + VERROR(ctxt->userData, "NOTATION %s is not declared\n", + notationName); + return(0); + } + return(1); +} + /** * xmlIsMixedElement * @doc: the document @@ -1804,6 +1883,7 @@ xmlValidateNmtokensValue(const CHAR *value) { /** * xmlValidateNotationDecl: + * @ctxt: the validation context * @doc: a document instance * @nota: a notation definition * @@ -1852,12 +1932,12 @@ xmlValidateNotationDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, int xmlValidateAttributeValue(xmlAttributeType type, const CHAR *value) { switch (type) { - case XML_ATTRIBUTE_IDREFS: case XML_ATTRIBUTE_ENTITIES: + case XML_ATTRIBUTE_IDREFS: return(xmlValidateNamesValue(value)); + case XML_ATTRIBUTE_ENTITY: case XML_ATTRIBUTE_IDREF: case XML_ATTRIBUTE_ID: - case XML_ATTRIBUTE_ENTITY: case XML_ATTRIBUTE_NOTATION: return(xmlValidateNameValue(value)); case XML_ATTRIBUTE_NMTOKENS: @@ -1873,6 +1953,7 @@ xmlValidateAttributeValue(xmlAttributeType type, const CHAR *value) { /** * xmlValidateAttributeDecl: + * @ctxt: the validation context * @doc: a document instance * @attr: an attribute definition * @@ -1918,7 +1999,7 @@ xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, ret = 0; } - /* max ID per element */ + /* One ID per Element Type */ if ((attr->type == XML_ATTRIBUTE_ID) && (doc->extSubset != NULL)) { int nbId = 0; @@ -2048,7 +2129,7 @@ xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, int xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem, xmlAttrPtr attr, const CHAR *value) { - xmlElementPtr elemDecl; + /* xmlElementPtr elemDecl; */ xmlAttributePtr attrDecl; int val; int ret = 1; @@ -2077,6 +2158,11 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, ret = 0; } + /* Validity Constraint: ID uniqueness */ + if (attrDecl->type == XML_ATTRIBUTE_ID) { + xmlAddID(ctxt, doc, value, attr); + } + /* Validity Constraint: Notation Attributes */ if (attrDecl->type == XML_ATTRIBUTE_NOTATION) { xmlEnumerationPtr tree = attrDecl->tree; @@ -2131,13 +2217,14 @@ xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, ret = 0; } + /******** elemDecl = xmlGetDtdElementDesc(doc->intSubset, elem->name); if ((elemDecl == NULL) && (doc->extSubset != NULL)) elemDecl = xmlGetDtdElementDesc(doc->extSubset, elem->name); if (elemDecl == NULL) { - /* the error has or will be reported soon in xmlValidateOneElement */ return(0); } + ********/ return(ret); } @@ -2329,7 +2416,7 @@ xmlSprintfElementChilds(char *buf, xmlNodePtr node, int glob) { while (cur != NULL) { switch (cur->type) { case XML_ELEMENT_NODE: - strcat(buf, cur->name); + strcat(buf, (char *) cur->name); if (cur->next != NULL) strcat(buf, " "); break; @@ -2467,6 +2554,7 @@ xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, break; } + /* TODO - [ VC: Required Attribute ] */ return(ret); } diff --git a/valid.h b/valid.h index 9afb2a0e..aaef25d9 100644 --- a/valid.h +++ b/valid.h @@ -84,62 +84,107 @@ typedef struct xmlIDTable { typedef xmlIDTable *xmlIDTablePtr; /* Notation */ -xmlNotationPtr xmlAddNotationDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, - const CHAR *name, const CHAR *PublicID, const CHAR *SystemID); +xmlNotationPtr xmlAddNotationDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const CHAR *name, + const CHAR *PublicID, + const CHAR *SystemID); xmlNotationTablePtr xmlCopyNotationTable(xmlNotationTablePtr table); -void xmlFreeNotationTable(xmlNotationTablePtr table); -void xmlDumpNotationTable(xmlBufferPtr buf, xmlNotationTablePtr table); +void xmlFreeNotationTable(xmlNotationTablePtr table); +void xmlDumpNotationTable(xmlBufferPtr buf, + xmlNotationTablePtr table); /* Element Content */ -xmlElementContentPtr xmlNewElementContent(CHAR *name, int type); +xmlElementContentPtr xmlNewElementContent (CHAR *name, int type); xmlElementContentPtr xmlCopyElementContent(xmlElementContentPtr content); -void xmlFreeElementContent(xmlElementContentPtr cur); +void xmlFreeElementContent(xmlElementContentPtr cur); /* Element */ -xmlElementPtr xmlAddElementDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, - const CHAR *name, int type, xmlElementContentPtr content); -xmlElementTablePtr xmlCopyElementTable(xmlElementTablePtr table); -void xmlFreeElementTable(xmlElementTablePtr table); -void xmlDumpElementTable(xmlBufferPtr buf, xmlElementTablePtr table); +xmlElementPtr xmlAddElementDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const CHAR *name, + int type, + xmlElementContentPtr content); +xmlElementTablePtr xmlCopyElementTable (xmlElementTablePtr table); +void xmlFreeElementTable (xmlElementTablePtr table); +void xmlDumpElementTable (xmlBufferPtr buf, + xmlElementTablePtr table); /* Enumeration */ -xmlEnumerationPtr xmlCreateEnumeration(CHAR *name); -void xmlFreeEnumeration(xmlEnumerationPtr cur); -xmlEnumerationPtr xmlCopyEnumeration(xmlEnumerationPtr cur); +xmlEnumerationPtr xmlCreateEnumeration (CHAR *name); +void xmlFreeEnumeration (xmlEnumerationPtr cur); +xmlEnumerationPtr xmlCopyEnumeration (xmlEnumerationPtr cur); /* Attribute */ -xmlAttributePtr xmlAddAttributeDecl(xmlValidCtxtPtr ctxt, xmlDtdPtr dtd, - const CHAR *elem, const CHAR *name, int type, int def, - const CHAR *defaultValue, xmlEnumerationPtr tree); -xmlAttributeTablePtr xmlCopyAttributeTable(xmlAttributeTablePtr table); -void xmlFreeAttributeTable(xmlAttributeTablePtr table); -void xmlDumpAttributeTable(xmlBufferPtr buf, xmlAttributeTablePtr table); +xmlAttributePtr xmlAddAttributeDecl (xmlValidCtxtPtr ctxt, + xmlDtdPtr dtd, + const CHAR *elem, + const CHAR *name, + int type, + int def, + const CHAR *defaultValue, + xmlEnumerationPtr tree); +xmlAttributeTablePtr xmlCopyAttributeTable (xmlAttributeTablePtr table); +void xmlFreeAttributeTable (xmlAttributeTablePtr table); +void xmlDumpAttributeTable (xmlBufferPtr buf, + xmlAttributeTablePtr table); /* IDs */ -xmlIDPtr xmlAddID(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - const CHAR *value, xmlAttrPtr attr); -xmlIDTablePtr xmlCopyIDTable(xmlIDTablePtr table); -void xmlFreeIDTable(xmlIDTablePtr table); +xmlIDPtr xmlAddID (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + const CHAR *value, + xmlAttrPtr attr); +xmlIDTablePtr xmlCopyIDTable (xmlIDTablePtr table); +void xmlFreeIDTable (xmlIDTablePtr table); +xmlAttrPtr xmlGetID (xmlDocPtr doc, + const CHAR *ID); +int xmlIsID (xmlDocPtr doc, + xmlNodePtr elem, + xmlAttrPtr attr); /** * The public function calls related to validity checking */ -int xmlValidateRoot(xmlValidCtxtPtr ctxt, xmlDocPtr doc); -int xmlValidateElementDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlElementPtr elem); -int xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlAttributePtr attr); -int xmlValidateNotationDecl(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlNotationPtr nota); -int xmlValidateDtd(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlDtdPtr dtd); - -int xmlValidateDocument(xmlValidCtxtPtr ctxt, xmlDocPtr doc); -int xmlValidateElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, xmlNodePtr elem); -int xmlValidateOneElement(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlNodePtr elem); -int xmlValidateOneAttribute(xmlValidCtxtPtr ctxt, xmlDocPtr doc, - xmlNodePtr elem, xmlAttrPtr attr, const CHAR *value); - -int xmlIsMixedElement(xmlDocPtr doc, const CHAR *name); +int xmlValidateRoot (xmlValidCtxtPtr ctxt, + xmlDocPtr doc); +int xmlValidateElementDecl (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlElementPtr elem); +int xmlValidateAttributeDecl(xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlAttributePtr attr); +int xmlValidateAttributeValue(xmlAttributeType type, + const CHAR *value); +int xmlValidateNotationDecl (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNotationPtr nota); +int xmlValidateDtd (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlDtdPtr dtd); +int xmlValidateDocument (xmlValidCtxtPtr ctxt, + xmlDocPtr doc); +int xmlValidateElement (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); +int xmlValidateOneElement (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem); +int xmlValidateOneAttribute (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + xmlNodePtr elem, + xmlAttrPtr attr, + const CHAR *value); +int xmlValidateNotationUse (xmlValidCtxtPtr ctxt, + xmlDocPtr doc, + const CHAR *notationName); +int xmlIsMixedElement (xmlDocPtr doc, + const CHAR *name); +xmlAttributePtr xmlGetDtdAttrDesc (xmlDtdPtr dtd, + const CHAR *elem, + const CHAR *name); +xmlNotationPtr xmlGetDtdNotationDesc (xmlDtdPtr dtd, + const CHAR *name); +xmlElementPtr xmlGetDtdElementDesc (xmlDtdPtr dtd, + const CHAR *name); #endif /* __XML_VALID_H__ */ diff --git a/xml-config.in b/xml-config.in index 8f4cfa30..1b0d1fde 100644 --- a/xml-config.in +++ b/xml-config.in @@ -57,7 +57,7 @@ while test $# -gt 0; do ;; --libs) - echo -L@libdir@ @XML_LIBS@ + echo -L@libdir@ @XML_LIBS@ @LIBS@ ;; *) diff --git a/xml-error.h b/xml-error.h index 9308af24..8697d52e 100644 --- a/xml-error.h +++ b/xml-error.h @@ -3,6 +3,18 @@ #include "parser.h" -void xmlParserError(void *ctx, const char *msg, ...); -void xmlParserWarning(void *ctx, const char *msg, ...); +void xmlParserError (void *ctx, + const char *msg, + ...); +void xmlParserWarning (void *ctx, + const char *msg, + ...); +void xmlParserValidityError (void *ctx, + const char *msg, + ...); +void xmlParserValidityWarning(void *ctx, + const char *msg, + ...); +void xmlParserPrintFileInfo (xmlParserInputPtr input); +void xmlParserPrintFileContext(xmlParserInputPtr input); #endif diff --git a/xmlIO.c b/xmlIO.c index d25a07b0..8549089f 100644 --- a/xmlIO.c +++ b/xmlIO.c @@ -6,10 +6,6 @@ * Daniel.Veillard@w3.org */ -/* - * TODO: plug-in a generic transfer library, like libwww if available - */ - #include "config.h" #include @@ -24,10 +20,12 @@ #endif #include +#include "parser.h" #include "xmlIO.h" /* #define DEBUG_INPUT */ /* #define VERBOSE_FAILURE */ +/* #define DEBUG_EXTERNAL_ENTITIES */ #ifdef DEBUG_INPUT #define MINLEN 40 @@ -155,7 +153,7 @@ xmlParserInputBufferCreateFilename(const char *filename, xmlCharEncoding enc) { #endif } /* - * TODO : get the 4 first bytes and + * TODO : get the 4 first bytes and decode the charset * if enc == XML_CHAR_ENCODING_NONE * plug some encoding conversion routines here. !!! * enc = xmlDetectCharEncoding(buffer); @@ -227,7 +225,7 @@ xmlParserInputBufferCreateFd(int fd, xmlCharEncoding enc) { * * Grow up the content of the input buffer, the old data are preserved * This routine handle the I18N transcoding to internal UTF-8 - * TODO: one should be able to remove one copy + * TODO: one should be able to remove one extra copy * * Returns the number of chars read and stored in the buffer, or -1 * in case of error. @@ -289,7 +287,7 @@ xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len) { return(-1); } nbchars = in->encoder->input(buf, (res + 1) * 2 * sizeof(CHAR), - buffer, res); + BAD_CAST buffer, res); buf[nbchars] = 0; xmlBufferAdd(in->buffer, (CHAR *) buf, nbchars); free(buf); @@ -364,3 +362,75 @@ xmlParserGetDirectory(const char *filename) { return(ret); } +/**************************************************************** + * * + * External entities loading * + * * + ****************************************************************/ + +/* + * xmlDefaultExternalEntityLoader: + * @URL: the URL for the entity to load + * @ID: the System ID for the entity to load + * @context: the context in which the entity is called or NULL + * + * By default we don't load external entitites, yet. + * TODO: get a sample http implementation and scan for existing one + * at compile time. + * + * Returns a new allocated xmlParserInputPtr, or NULL. + */ +static +xmlParserInputPtr +xmlDefaultExternalEntityLoader(const char *URL, const char *ID, + xmlParserInputPtr context) { +#ifdef DEBUG_EXTERNAL_ENTITIES + fprintf(stderr, "xmlDefaultExternalEntityLoader(%s, xxx)\n", URL); +#endif + return(NULL); +} + +static xmlExternalEntityLoader xmlCurrentExternalEntityLoader = + xmlDefaultExternalEntityLoader; + +/* + * xmlSetExternalEntityLoader: + * @f: the new entity resolver function + * + * Changes the defaultexternal entity resolver function for the application + */ +void +xmlSetExternalEntityLoader(xmlExternalEntityLoader f) { + xmlCurrentExternalEntityLoader = f; +} + +/* + * xmlGetExternalEntityLoader: + * + * Get the default external entity resolver function for the application + * + * Returns the xmlExternalEntityLoader function pointer + */ +xmlExternalEntityLoader +xmlGetExternalEntityLoader(void) { + return(xmlCurrentExternalEntityLoader); +} + +/* + * xmlLoadExternalEntity: + * @URL: the URL for the entity to load + * @ID: the System ID for the entity to load + * @context: the context in which the entity is called or NULL + * + * Load an external entity, note that the use of this function for + * unparsed entities may generate problems + * TODO: a more generic External entitiy API must be designed + * + * Returns the xmlParserInputPtr or NULL + */ +xmlParserInputPtr +xmlLoadExternalEntity(const char *URL, const char *ID, + xmlParserInputPtr context) { + return(xmlCurrentExternalEntityLoader(URL, ID, context)); +} + diff --git a/xmlIO.h b/xmlIO.h index 0e086d77..01bf14c7 100644 --- a/xmlIO.h +++ b/xmlIO.h @@ -11,6 +11,7 @@ #include #include "tree.h" +#include "parser.h" #include "encoding.h" #ifdef __cplusplus @@ -35,17 +36,21 @@ typedef xmlParserInputBuffer *xmlParserInputBufferPtr; * Interfaces */ -xmlParserInputBufferPtr xmlParserInputBufferCreateFilename(const char *filename, - xmlCharEncoding enc); -xmlParserInputBufferPtr xmlParserInputBufferCreateFile(FILE *file, - xmlCharEncoding enc); -xmlParserInputBufferPtr xmlParserInputBufferCreateFd(int fd, xmlCharEncoding enc); - -int xmlParserInputBufferRead(xmlParserInputBufferPtr in, int len); -int xmlParserInputBufferGrow(xmlParserInputBufferPtr in, int len); - -void xmlFreeParserInputBuffer(xmlParserInputBufferPtr in); -char *xmlParserGetDirectory(const char *filename); +xmlParserInputBufferPtr + xmlParserInputBufferCreateFilename (const char *filename, + xmlCharEncoding enc); +xmlParserInputBufferPtr + xmlParserInputBufferCreateFile (FILE *file, + xmlCharEncoding enc); +xmlParserInputBufferPtr + xmlParserInputBufferCreateFd (int fd, + xmlCharEncoding enc); +int xmlParserInputBufferRead (xmlParserInputBufferPtr in, + int len); +int xmlParserInputBufferGrow (xmlParserInputBufferPtr in, + int len); +void xmlFreeParserInputBuffer (xmlParserInputBufferPtr in); +char * xmlParserGetDirectory (const char *filename); #ifdef __cplusplus } diff --git a/xpath.c b/xpath.c index cff0e82b..9fc3b166 100644 --- a/xpath.c +++ b/xpath.c @@ -28,7 +28,9 @@ #include #endif #include +#include #include "tree.h" +#include "valid.h" #include "xpath.h" #include "parserInternals.h" @@ -151,6 +153,7 @@ FILE *xmlXPathDebug = NULL; __FILE__, __LINE__); double xmlXPathStringEvalNumber(const CHAR *str); +void xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs); /************************************************************************ * * @@ -280,8 +283,8 @@ void xmlXPatherror(xmlXPathParserContextPtr ctxt, const char *file, int line, int no) { int n; - const char *cur; - const char *base; + const CHAR *cur; + const CHAR *base; fprintf(xmlXPathDebug, "Error %s:%d: %s\n", file, line, xmlXPathErrorMessages[no]); @@ -411,6 +414,7 @@ xmlXPathNodeSetAdd(xmlNodeSetPtr cur, xmlNodePtr val) { fprintf(xmlXPathDebug, "xmlXPathNodeSetAdd: out of memory\n"); return; } + cur->nodeTab = temp; } cur->nodeTab[cur->nodeNr++] = val; } @@ -514,7 +518,7 @@ xmlXPathFreeNodeSet(xmlNodeSetPtr obj) { free(obj); } -#ifdef DEBUG +#if defined(DEBUG) || defined(DEBUG_STEP) /** * xmlXPathDebugNodeSet: * @output: a FILE * for the output @@ -636,7 +640,7 @@ xmlXPathNewBoolean(int val) { } /** - * xmlXPathNewBoolean: + * xmlXPathNewString: * @val: the CHAR * value * * Create a new xmlXPathObjectPtr of type string and of value @val @@ -658,6 +662,29 @@ xmlXPathNewString(const CHAR *val) { return(ret); } +/** + * xmlXPathNewCString: + * @val: the char * value + * + * Create a new xmlXPathObjectPtr of type string and of value @val + * + * Returns the newly created object. + */ +xmlXPathObjectPtr +xmlXPathNewCString(const char *val) { + xmlXPathObjectPtr ret; + + ret = (xmlXPathObjectPtr) malloc(sizeof(xmlXPathObject)); + if (ret == NULL) { + fprintf(xmlXPathDebug, "xmlXPathNewFloat: out of memory\n"); + return(NULL); + } + memset(ret, 0 , (size_t) sizeof(xmlXPathObject)); + ret->type = XPATH_STRING; + ret->stringval = xmlStrdup(BAD_CAST val); + return(ret); +} + /** * xmlXPathNewNodeSet: * @val: the NodePtr value @@ -736,15 +763,13 @@ xmlXPathFreeObject(xmlXPathObjectPtr obj) { * @doc: the XML document * @variables: the variable list * @functions: the function list - * @namespaces: the namespace list * * Create a new xmlXPathContext * * Returns the xmlXPathContext just allocated. */ xmlXPathContextPtr -xmlXPathNewContext(xmlDocPtr doc, void *variables, void *functions, - void *namespaces) { +xmlXPathNewContext(xmlDocPtr doc, void *variables, void *functions) { xmlXPathContextPtr ret; ret = (xmlXPathContextPtr) malloc(sizeof(xmlXPathContext)); @@ -756,7 +781,8 @@ xmlXPathNewContext(xmlDocPtr doc, void *variables, void *functions, ret->doc = doc; ret->variables = variables; ret->functions = functions; - ret->namespaces = namespaces; + ret->namespaces = NULL; + ret->nsNr = 0; return(ret); } @@ -768,6 +794,9 @@ xmlXPathNewContext(xmlDocPtr doc, void *variables, void *functions, */ void xmlXPathFreeContext(xmlXPathContextPtr ctxt) { + if (ctxt->namespaces != NULL) + free(ctxt->namespaces); + #ifdef DEBUG memset(ctxt, 0xB , (size_t) sizeof(xmlXPathContext)); #endif @@ -860,12 +889,6 @@ xmlXPathFreeParserContext(xmlXPathParserContextPtr ctxt) { * * ************************************************************************/ -/* - * TODO: check the semantic for all these operations in case of operands - * with different types, Cast function probably need to be provided - * to simplify the coding. - */ - /* * Auto-pop and cast to a number */ @@ -937,7 +960,7 @@ xmlXPathEqualNodeSetString(xmlXPathObjectPtr arg, const CHAR *str) { */ int xmlXPathEqualNodeSetFloat(xmlXPathObjectPtr arg, float f) { - CHAR buf[100] = ""; + char buf[100] = ""; if ((arg == NULL) || (arg->type != XPATH_NODESET)) return(0); @@ -951,7 +974,7 @@ xmlXPathEqualNodeSetFloat(xmlXPathObjectPtr arg, float f) { else sprintf(buf, "%0g", f); - return(xmlXPathEqualNodeSetString(arg, buf)); + return(xmlXPathEqualNodeSetString(arg, BAD_CAST buf)); } @@ -1393,6 +1416,8 @@ typedef xmlNodePtr (*xmlXPathTraversalFunction) * * Traversal function for the "self" direction * he self axis contains just the context node itself + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1408,6 +1433,8 @@ xmlXPathNextSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * * Traversal function for the "child" direction * The child axis contains the children of the context node in document order. + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextChild(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1429,6 +1456,8 @@ xmlXPathNextChild(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * Traversal function for the "descendant" direction * the descendant axis contains the descendants of the context node in document * order; a descendant is a child or a child of a child and so on. + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1463,6 +1492,8 @@ xmlXPathNextDescendant(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * of the context node in document order; thus the context node is the first * node on the axis, and the first child of the context node is the second node * on the axis + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1493,6 +1524,8 @@ xmlXPathNextDescendantOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * * Traversal function for the "parent" direction * The parent axis contains the parent of the context node, if there is one. + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextParent(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1520,6 +1553,8 @@ xmlXPathNextParent(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * parent and so on; the nodes are ordered in reverse document order; thus the * parent is the first node on the axis, and the parent's parent is the second * node on the axis + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1546,10 +1581,12 @@ xmlXPathNextAncestor(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * @cur: the current node in the traversal * * Traversal function for the "ancestor-or-self" direction - * he ancestor-or-self axis contains the context node and ancestors of the context - * node in reverse document order; thus the context node is the first node on the - * axis, and the context node's parent the second; parent here is defined the same - * as with the parent axis. + * he ancestor-or-self axis contains the context node and ancestors of + * the context node in reverse document order; thus the context node is + * the first node on the axis, and the context node's parent the second; + * parent here is defined the same as with the parent axis. + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1575,6 +1612,8 @@ xmlXPathNextAncestorOrSelf(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * Traversal function for the "following-sibling" direction * The following-sibling axis contains the following siblings of the context * node in document order. + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1594,6 +1633,8 @@ xmlXPathNextFollowingSibling(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * The preceding-sibling axis contains the preceding siblings of the context * node in reverse document order; the first preceding sibling is first on the * axis; the sibling preceding that node is the second on the axis and so on. + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1614,6 +1655,8 @@ xmlXPathNextPrecedingSibling(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * node that are after the context node in document order, excluding any * descendants and excluding attribute nodes and namespace nodes; the nodes * are ordered in document order + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1646,6 +1689,8 @@ xmlXPathNextFollowing(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * node that are before the context node in document order, excluding any * ancestors and excluding attribute nodes and namespace nodes; the nodes are * ordered in reverse document order + * + * Returns the next element following that axis */ xmlNodePtr xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { @@ -1677,11 +1722,20 @@ xmlXPathNextPreceding(xmlXPathParserContextPtr ctxt, xmlNodePtr cur) { * the namespace axis contains the namespace nodes of the context node; * the order of nodes on this axis is implementation-defined; the axis will * be empty unless the context node is an element + * + * Returns the next element following that axis */ -xmlAttrPtr +xmlNsPtr xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, xmlAttrPtr cur) { - TODO /* namespace traversal */ - return(NULL); + if ((cur == NULL) || (ctxt->context->namespaces == NULL)) { + if (ctxt->context->namespaces != NULL) + free(ctxt->context->namespaces); + ctxt->context->namespaces = + xmlGetNsList(ctxt->context->doc, ctxt->context->node); + if (ctxt->context->namespaces == NULL) return(NULL); + ctxt->context->nsNr = 0; + } + return(ctxt->context->namespaces[ctxt->context->nsNr++]); } /** @@ -1690,6 +1744,8 @@ xmlXPathNextNamespace(xmlXPathParserContextPtr ctxt, xmlAttrPtr cur) { * @cur: the current attribute in the traversal * * Traversal function for the "attribute" direction + * + * Returns the next element following that axis */ xmlAttrPtr xmlXPathNextAttribute(xmlXPathParserContextPtr ctxt, xmlAttrPtr cur) { @@ -1771,7 +1827,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, int axis, #ifdef DEBUG_STEP fprintf(xmlXPathDebug, "axis 'attributes' "); #endif - TODO /* attribute axis */ + next = (xmlXPathTraversalFunction) xmlXPathNextAttribute; break; break; case AXIS_CHILD: #ifdef DEBUG_STEP @@ -1802,7 +1858,7 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, int axis, #ifdef DEBUG_STEP fprintf(xmlXPathDebug, "axis 'namespace' "); #endif - TODO /* namespace axis */ + next = (xmlXPathTraversalFunction) xmlXPathNextNamespace; break; break; case AXIS_PARENT: #ifdef DEBUG_STEP @@ -1839,7 +1895,6 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, int axis, break; case NODE_TEST_PI: fprintf(xmlXPathDebug, " seaching for PI !!!\n"); - TODO /* PI search */ break; case NODE_TEST_ALL: fprintf(xmlXPathDebug, " seaching for *\n"); @@ -1881,19 +1936,30 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, int axis, } break; case NODE_TEST_PI: - TODO /* PI search */ + if (cur->type == XML_PI_NODE) { + if ((name != NULL) && + (xmlStrcmp(name, cur->name))) + break; +#ifdef DEBUG_STEP + n++; +#endif + xmlXPathNodeSetAdd(ret, cur); + } break; case NODE_TEST_ALL: - if (cur->type == XML_ELEMENT_NODE) { + if ((cur->type == XML_ELEMENT_NODE) || + (cur->type == XML_ATTRIBUTE_NODE)) { + /* !!! || (cur->type == XML_TEXT_NODE)) { */ #ifdef DEBUG_STEP n++; #endif xmlXPathNodeSetAdd(ret, cur); } break; - case NODE_TEST_NS: - TODO /* NS search */ + case NODE_TEST_NS: { + TODO /* namespace search */ break; + } case NODE_TEST_NAME: switch (cur->type) { case XML_ELEMENT_NODE: @@ -1906,6 +1972,17 @@ xmlXPathNodeCollectAndTest(xmlXPathParserContextPtr ctxt, int axis, #endif xmlXPathNodeSetAdd(ret, cur); } + break; + case XML_ATTRIBUTE_NODE: { + xmlAttrPtr attr = (xmlAttrPtr) cur; + if (!xmlStrcmp(name, attr->name)) { +#ifdef DEBUG_STEP + n++; +#endif + xmlXPathNodeSetAdd(ret, cur); + } + break; + } default: break; } @@ -1942,20 +2019,6 @@ xmlXPathRoot(xmlXPathParserContextPtr ctxt) { ctxt->context->nodelist = xmlXPathNodeSetCreate(ctxt->context->node); } -/** - * xmlXPathSearchPI: - * @ctxt: the XPath Parser context - * - * Search a processing instruction by name. The name is - * in the object on the stack. - */ -void -xmlXPathSearchPI(xmlXPathParserContextPtr ctxt, int nargs) { - TODO /* Search PI */ - CHECK_ARITY(0); - CHECK_TYPE(XPATH_NUMBER) -} - /************************************************************************ * * * The explicit core function library * @@ -2048,8 +2111,64 @@ xmlXPathCountFunction(xmlXPathParserContextPtr ctxt, int nargs) { */ void xmlXPathIdFunction(xmlXPathParserContextPtr ctxt, int nargs) { + const CHAR *tokens; + const CHAR *cur; + CHAR *ID; + xmlAttrPtr attr; + xmlNodePtr elem = NULL; + xmlXPathObjectPtr ret, obj; + CHECK_ARITY(1); - TODO /* Write ID/IDREF support in libxml first */ + obj = valuePop(ctxt); + if (obj == NULL) ERROR(XPATH_INVALID_OPERAND); + if (obj->type == XPATH_NODESET) { + TODO /* ID function in case of NodeSet */ + } + if (obj->type != XPATH_STRING) { + valuePush(ctxt, obj); + xmlXPathStringFunction(ctxt, 1); + obj = valuePop(ctxt); + if (obj->type != XPATH_STRING) { + xmlXPathFreeObject(obj); + return; + } + } + tokens = obj->stringval; + + ret = xmlXPathNewNodeSet(NULL); + valuePush(ctxt, ret); + if (tokens == NULL) { + xmlXPathFreeObject(obj); + return; + } + + cur = tokens; + + while (IS_BLANK(*cur)) cur++; + while (*cur != 0) { + while ((IS_LETTER(*cur)) || (IS_DIGIT(*cur)) || + (*cur == '.') || (*cur == '-') || + (*cur == '_') || (*cur == ':') || + (IS_COMBINING(*cur)) || + (IS_EXTENDER(*cur))) + cur++; + + if ((!IS_BLANK(*cur)) && (*cur != 0)) break; + + ID = xmlStrndup(tokens, cur - tokens); + attr = xmlGetID(ctxt->context->doc, ID); + if (attr != NULL) { + elem = attr->node; + xmlXPathNodeSetAdd(ret->nodesetval, elem); + } + if (ID != NULL) + free(ID); + + while (IS_BLANK(*cur)) cur++; + tokens = cur; + } + xmlXPathFreeObject(obj); + return; } /** @@ -2072,7 +2191,7 @@ xmlXPathLocalPartFunction(xmlXPathParserContextPtr ctxt, int nargs) { cur = valuePop(ctxt); if (cur->nodesetval->nodeNr == 0) { - valuePush(ctxt, xmlXPathNewString("")); + valuePush(ctxt, xmlXPathNewCString("")); } else { int i = 0; /* Should be first in document order !!!!! */ valuePush(ctxt, xmlXPathNewString(cur->nodesetval->nodeTab[i]->name)); @@ -2095,17 +2214,21 @@ void xmlXPathNamespaceFunction(xmlXPathParserContextPtr ctxt, int nargs) { xmlXPathObjectPtr cur; + if (nargs == 0) { + valuePush(ctxt, xmlXPathNewNodeSet(ctxt->context->node)); + nargs = 1; + } CHECK_ARITY(1); CHECK_TYPE(XPATH_NODESET); cur = valuePop(ctxt); if (cur->nodesetval->nodeNr == 0) { - valuePush(ctxt, xmlXPathNewString("")); + valuePush(ctxt, xmlXPathNewCString("")); } else { int i = 0; /* Should be first in document order !!!!! */ if (cur->nodesetval->nodeTab[i]->ns == NULL) - valuePush(ctxt, xmlXPathNewString("")); + valuePush(ctxt, xmlXPathNewCString("")); else valuePush(ctxt, xmlXPathNewString( cur->nodesetval->nodeTab[i]->ns->href)); @@ -2142,7 +2265,7 @@ xmlXPathNameFunction(xmlXPathParserContextPtr ctxt, int nargs) { cur = valuePop(ctxt); if (cur->nodesetval->nodeNr == 0) { - valuePush(ctxt, xmlXPathNewString("")); + valuePush(ctxt, xmlXPathNewCString("")); } else { int i = 0; /* Should be first in document order !!!!! */ @@ -2151,10 +2274,11 @@ xmlXPathNameFunction(xmlXPathParserContextPtr ctxt, int nargs) { cur->nodesetval->nodeTab[i]->name)); else { - CHAR name[2000]; - sprintf(name, "%s:%s", cur->nodesetval->nodeTab[i]->ns->prefix, - cur->nodesetval->nodeTab[i]->name); - valuePush(ctxt, xmlXPathNewString(name)); + char name[2000]; + sprintf(name, "%s:%s", + (char *) cur->nodesetval->nodeTab[i]->ns->prefix, + (char *) cur->nodesetval->nodeTab[i]->name); + valuePush(ctxt, xmlXPathNewCString(name)); } } xmlXPathFreeObject(cur); @@ -2201,7 +2325,7 @@ xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs) { switch (cur->type) { case XPATH_NODESET: if (cur->nodesetval->nodeNr == 0) { - valuePush(ctxt, xmlXPathNewString("")); + valuePush(ctxt, xmlXPathNewCString("")); } else { CHAR *res; int i = 0; /* Should be first in document order !!!!! */ @@ -2215,12 +2339,12 @@ xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs) { valuePush(ctxt, cur); return; case XPATH_BOOLEAN: - if (cur->boolval) valuePush(ctxt, xmlXPathNewString("true")); - else valuePush(ctxt, xmlXPathNewString("false")); + if (cur->boolval) valuePush(ctxt, xmlXPathNewCString("true")); + else valuePush(ctxt, xmlXPathNewCString("false")); xmlXPathFreeObject(cur); return; case XPATH_NUMBER: { - CHAR buf[100]; + char buf[100]; if (isnan(cur->floatval)) sprintf(buf, "NaN"); @@ -2230,7 +2354,7 @@ xmlXPathStringFunction(xmlXPathParserContextPtr ctxt, int nargs) { sprintf(buf, "-Infinity"); else sprintf(buf, "%0g", cur->floatval); - valuePush(ctxt, xmlXPathNewString(buf)); + valuePush(ctxt, xmlXPathNewCString(buf)); xmlXPathFreeObject(cur); return; } @@ -2454,7 +2578,7 @@ xmlXPathSubstringFunction(xmlXPathParserContextPtr ctxt, int nargs) { ret = xmlStrsub(str->stringval, i, l); if (ret == NULL) - valuePush(ctxt, xmlXPathNewString("")); + valuePush(ctxt, xmlXPathNewCString("")); else { valuePush(ctxt, xmlXPathNewString(ret)); free(ret); @@ -2645,8 +2769,26 @@ xmlXPathFalseFunction(xmlXPathParserContextPtr ctxt, int nargs) { */ void xmlXPathLangFunction(xmlXPathParserContextPtr ctxt, int nargs) { - CHECK_ARITY(0); - TODO /* Write down xml:lang support in libxml first */ + xmlXPathObjectPtr val; + const CHAR *theLang; + const CHAR *lang; + int ret = 0; + int i; + + CHECK_ARITY(1); + CHECK_TYPE(XPATH_STRING); + val = valuePop(ctxt); + lang = val->stringval; + theLang = xmlNodeGetLang(ctxt->context->node); + if ((theLang != NULL) && (lang != NULL)) { + for (i = 0;lang[i] != 0;i++) + if (toupper(lang[i]) != toupper(theLang[i])) + goto not_equal; + ret = 1; + } +not_equal: + xmlXPathFreeObject(val); + valuePush(ctxt, xmlXPathNewBoolean(ret)); } /** @@ -2936,7 +3078,7 @@ xmlXPathEvalNumber(xmlXPathParserContextPtr ctxt) { * [29] Literal ::= '"' [^"]* '"' * | "'" [^']* "'" * - * TODO: memory allocation could be improved. + * TODO: xmlXPathEvalLiteral memory allocation could be improved. */ void xmlXPathEvalLiteral(xmlXPathParserContextPtr ctxt) { @@ -3022,85 +3164,85 @@ xmlXPathEvalVariableReference(xmlXPathParserContextPtr ctxt) { * * [35] FunctionName ::= QName - NodeType * - * TODO: for the moment the list is hardcoded from the spec !!!! + * TODO: for the moment the function list is hardcoded from the spec !!!! * * Returns the xmlXPathFunction if found, or NULL otherwise */ xmlXPathFunction -xmlXPathIsFunction(xmlXPathParserContextPtr ctxt, CHAR *name) { +xmlXPathIsFunction(xmlXPathParserContextPtr ctxt, const CHAR *name) { switch (name[0]) { case 'b': - if (!xmlStrcmp(name, "boolean")) + if (!xmlStrcmp(name, BAD_CAST "boolean")) return(xmlXPathBooleanFunction); break; case 'c': - if (!xmlStrcmp(name, "ceiling")) + if (!xmlStrcmp(name, BAD_CAST "ceiling")) return(xmlXPathCeilingFunction); - if (!xmlStrcmp(name, "count")) + if (!xmlStrcmp(name, BAD_CAST "count")) return(xmlXPathCountFunction); - if (!xmlStrcmp(name, "concat")) + if (!xmlStrcmp(name, BAD_CAST "concat")) return(xmlXPathConcatFunction); - if (!xmlStrcmp(name, "contains")) + if (!xmlStrcmp(name, BAD_CAST "contains")) return(xmlXPathContainsFunction); break; case 'i': - if (!xmlStrcmp(name, "id")) + if (!xmlStrcmp(name, BAD_CAST "id")) return(xmlXPathIdFunction); break; case 'f': - if (!xmlStrcmp(name, "false")) + if (!xmlStrcmp(name, BAD_CAST "false")) return(xmlXPathFalseFunction); - if (!xmlStrcmp(name, "floor")) + if (!xmlStrcmp(name, BAD_CAST "floor")) return(xmlXPathFloorFunction); break; case 'l': - if (!xmlStrcmp(name, "last")) + if (!xmlStrcmp(name, BAD_CAST "last")) return(xmlXPathLastFunction); - if (!xmlStrcmp(name, "lang")) + if (!xmlStrcmp(name, BAD_CAST "lang")) return(xmlXPathLangFunction); - if (!xmlStrcmp(name, "local-part")) + if (!xmlStrcmp(name, BAD_CAST "local-part")) return(xmlXPathLocalPartFunction); break; case 'n': - if (!xmlStrcmp(name, "not")) + if (!xmlStrcmp(name, BAD_CAST "not")) return(xmlXPathNotFunction); - if (!xmlStrcmp(name, "name")) + if (!xmlStrcmp(name, BAD_CAST "name")) return(xmlXPathNameFunction); - if (!xmlStrcmp(name, "namespace")) + if (!xmlStrcmp(name, BAD_CAST "namespace")) return(xmlXPathNamespaceFunction); - if (!xmlStrcmp(name, "normalize")) + if (!xmlStrcmp(name, BAD_CAST "normalize")) return(xmlXPathNormalizeFunction); - if (!xmlStrcmp(name, "number")) + if (!xmlStrcmp(name, BAD_CAST "number")) return(xmlXPathNumberFunction); break; case 'p': - if (!xmlStrcmp(name, "position")) + if (!xmlStrcmp(name, BAD_CAST "position")) return(xmlXPathPositionFunction); break; case 'r': - if (!xmlStrcmp(name, "round")) + if (!xmlStrcmp(name, BAD_CAST "round")) return(xmlXPathRoundFunction); break; case 's': - if (!xmlStrcmp(name, "string")) + if (!xmlStrcmp(name, BAD_CAST "string")) return(xmlXPathStringFunction); - if (!xmlStrcmp(name, "string-length")) + if (!xmlStrcmp(name, BAD_CAST "string-length")) return(xmlXPathStringLengthFunction); - if (!xmlStrcmp(name, "starts-with")) + if (!xmlStrcmp(name, BAD_CAST "starts-with")) return(xmlXPathStartsWithFunction); - if (!xmlStrcmp(name, "substring")) + if (!xmlStrcmp(name, BAD_CAST "substring")) return(xmlXPathSubstringFunction); - if (!xmlStrcmp(name, "substring-before")) + if (!xmlStrcmp(name, BAD_CAST "substring-before")) return(xmlXPathSubstringBeforeFunction); - if (!xmlStrcmp(name, "substring-after")) + if (!xmlStrcmp(name, BAD_CAST "substring-after")) return(xmlXPathSubstringAfterFunction); - if (!xmlStrcmp(name, "sum")) + if (!xmlStrcmp(name, BAD_CAST "sum")) return(xmlXPathSumFunction); break; case 't': - if (!xmlStrcmp(name, "true")) + if (!xmlStrcmp(name, BAD_CAST "true")) return(xmlXPathTrueFunction); - if (!xmlStrcmp(name, "translate")) + if (!xmlStrcmp(name, BAD_CAST "translate")) return(xmlXPathTranslateFunction); break; } @@ -3134,40 +3276,46 @@ xmlXPathIsFunction(xmlXPathParserContextPtr ctxt, CHAR *name) { * | 'node' */ int -xmlXPathGetNameType(xmlXPathParserContextPtr ctxt, CHAR *name) { +xmlXPathGetNameType(xmlXPathParserContextPtr ctxt, const CHAR *name) { switch (name[0]) { case 'a': - if (!xmlStrcmp(name, "ancestor")) return(AXIS_ANCESTOR); - if (!xmlStrcmp(name, "ancestor-or-self")) return(AXIS_ANCESTOR_OR_SELF); - if (!xmlStrcmp(name, "attribute")) return(AXIS_ATTRIBUTE); + if (!xmlStrcmp(name, BAD_CAST "ancestor")) return(AXIS_ANCESTOR); + if (!xmlStrcmp(name, BAD_CAST "ancestor-or-self")) + return(AXIS_ANCESTOR_OR_SELF); + if (!xmlStrcmp(name, BAD_CAST "attribute")) return(AXIS_ATTRIBUTE); break; case 'c': - if (!xmlStrcmp(name, "child")) return(AXIS_CHILD); - if (!xmlStrcmp(name, "comment")) return(NODE_TYPE_COMMENT); + if (!xmlStrcmp(name, BAD_CAST "child")) return(AXIS_CHILD); + if (!xmlStrcmp(name, BAD_CAST "comment")) return(NODE_TYPE_COMMENT); break; case 'd': - if (!xmlStrcmp(name, "descendant")) return(AXIS_DESCENDANT); - if (!xmlStrcmp(name, "descendant-or-self")) return(AXIS_DESCENDANT_OR_SELF); + if (!xmlStrcmp(name, BAD_CAST "descendant")) + return(AXIS_DESCENDANT); + if (!xmlStrcmp(name, BAD_CAST "descendant-or-self")) + return(AXIS_DESCENDANT_OR_SELF); break; case 'f': - if (!xmlStrcmp(name, "following")) return(AXIS_FOLLOWING); - if (!xmlStrcmp(name, "following-sibling")) return(AXIS_FOLLOWING_SIBLING); + if (!xmlStrcmp(name, BAD_CAST "following")) return(AXIS_FOLLOWING); + if (!xmlStrcmp(name, BAD_CAST "following-sibling")) + return(AXIS_FOLLOWING_SIBLING); break; case 'n': - if (!xmlStrcmp(name, "namespace")) return(AXIS_NAMESPACE); - if (!xmlStrcmp(name, "node")) return(NODE_TYPE_NODE); + if (!xmlStrcmp(name, BAD_CAST "namespace")) return(AXIS_NAMESPACE); + if (!xmlStrcmp(name, BAD_CAST "node")) return(NODE_TYPE_NODE); break; case 'p': - if (!xmlStrcmp(name, "parent")) return(AXIS_PARENT); - if (!xmlStrcmp(name, "preceding")) return(AXIS_PRECEDING); - if (!xmlStrcmp(name, "preceding-sibling")) return(AXIS_PRECEDING_SIBLING); - if (!xmlStrcmp(name, "processing-instruction")) return(NODE_TYPE_PI); + if (!xmlStrcmp(name, BAD_CAST "parent")) return(AXIS_PARENT); + if (!xmlStrcmp(name, BAD_CAST "preceding")) return(AXIS_PRECEDING); + if (!xmlStrcmp(name, BAD_CAST "preceding-sibling")) + return(AXIS_PRECEDING_SIBLING); + if (!xmlStrcmp(name, BAD_CAST "processing-instruction")) + return(NODE_TYPE_PI); break; case 's': - if (!xmlStrcmp(name, "self")) return(AXIS_SELF); + if (!xmlStrcmp(name, BAD_CAST "self")) return(AXIS_SELF); break; case 't': - if (!xmlStrcmp(name, "text")) return(NODE_TYPE_TEXT); + if (!xmlStrcmp(name, BAD_CAST "text")) return(NODE_TYPE_TEXT); break; } if (xmlXPathIsFunction(ctxt, name)) return(IS_FUNCTION); @@ -3292,6 +3440,55 @@ xmlXPathEvalFilterExpr(xmlXPathParserContextPtr ctxt) { } +/** + * xmlXPathScanName: + * @ctxt: the XPath Parser context + * + * Trickery: parse an XML name but without consuming the input flow + * Needed for rollback cases. + * + * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' | + * CombiningChar | Extender + * + * [5] Name ::= (Letter | '_' | ':') (NameChar)* + * + * [6] Names ::= Name (S Name)* + * + * Returns the Name parsed or NULL + */ + +CHAR * +xmlXPathScanName(xmlXPathParserContextPtr ctxt) { + CHAR buf[XML_MAX_NAMELEN]; + int len = 0; + + if (!IS_LETTER(CUR) && (CUR != '_') && + (CUR != ':')) { + return(NULL); + } + + while ((IS_LETTER(NXT(len))) || (IS_DIGIT(NXT(len))) || + (NXT(len) == '.') || (NXT(len) == '-') || + (NXT(len) == '_') || (NXT(len) == ':') || + (IS_COMBINING(NXT(len))) || + (IS_EXTENDER(NXT(len)))) { + buf[len] = NXT(len); + len++; + if (len >= XML_MAX_NAMELEN) { + fprintf(stderr, + "xmlScanName: reached XML_MAX_NAMELEN limit\n"); + while ((IS_LETTER(NXT(len))) || (IS_DIGIT(NXT(len))) || + (NXT(len) == '.') || (NXT(len) == '-') || + (NXT(len) == '_') || (NXT(len) == ':') || + (IS_COMBINING(NXT(len))) || + (IS_EXTENDER(NXT(len)))) + len++; + break; + } + } + return(xmlStrndup(buf, len)); +} + /** * xmlXPathEvalPathExpr: * @ctxt: the XPath Parser context @@ -3314,13 +3511,6 @@ void xmlXPathEvalPathExpr(xmlXPathParserContextPtr ctxt) { xmlNodeSetPtr newset = NULL; - /* - * TODO: FilterExpr => PrimaryExpr => FunctionName is possible too - * so we may have to parse a name here, and depending on whether - * it's a function name or not parse a FilterExpr or a LocationPath - * !!!!!!!!!!!! See NOTE1 - */ - if ((CUR == '$') || (CUR == '(') || (IS_DIGIT(CUR)) || (CUR == '\'') || (CUR == '"')) { xmlXPathEvalFilterExpr(ctxt); @@ -3342,7 +3532,15 @@ xmlXPathEvalPathExpr(xmlXPathParserContextPtr ctxt) { xmlXPathEvalRelativeLocationPath(ctxt); } } else { - xmlXPathEvalLocationPath(ctxt); + CHAR *name; + + name = xmlXPathScanName(ctxt); + if ((name == NULL) || (!xmlXPathIsFunction(ctxt, name))) + xmlXPathEvalLocationPath(ctxt); + else + xmlXPathEvalFilterExpr(ctxt); + if (name != NULL) + free(name); } } @@ -3393,8 +3591,7 @@ xmlXPathEvalUnaryExpr(xmlXPathParserContextPtr ctxt) { minus = 1; NEXT; } - /* xmlXPathEvalUnionExpr(ctxt); NOTE1 !!! */ - xmlXPathEvalPrimaryExpr(ctxt); + xmlXPathEvalUnionExpr(ctxt); CHECK_ERROR; if (minus) { xmlXPathValueFlipSign(ctxt); @@ -3733,9 +3930,13 @@ xmlXPathEvalBasis(xmlXPathParserContextPtr ctxt) { int nodetest = NODE_TEST_NONE; int nodetype = 0; xmlNodeSetPtr newset = NULL; + int attribute = 0; if (CUR == '@') { - TODO /* attributes */ + NEXT; + attribute = 1; + axis = AXIS_ATTRIBUTE; + goto parse_NodeTest; } else if (CUR == '*') { NEXT; nodetest = NODE_TEST_ALL; @@ -3746,6 +3947,53 @@ xmlXPathEvalBasis(xmlXPathParserContextPtr ctxt) { } type = xmlXPathGetNameType(ctxt, name); switch (type) { + case IS_FUNCTION: { + xmlXPathFunction func; + int nbargs = 0; + xmlXPathObjectPtr top; + + top = ctxt->value; + func = xmlXPathIsFunction(ctxt, name); + if (func == NULL) { + free(name); + ERROR(XPATH_UNKNOWN_FUNC_ERROR); + } +#ifdef DEBUG_EXPR + fprintf(xmlXPathDebug, "Calling function %s\n", name); +#endif + + if (CUR != '(') { + free(name); + ERROR(XPATH_EXPR_ERROR); + } + NEXT; + + while (CUR != ')') { + xmlXPathEvalExpr(ctxt); + nbargs++; + if (CUR == ')') break; + if (CUR != ',') { + free(name); + ERROR(XPATH_EXPR_ERROR); + } + NEXT; + } + NEXT; + free(name); + func(ctxt, nbargs); + if ((ctxt->value != top) && + (ctxt->value != NULL) && + (ctxt->value->type == XPATH_NODESET)) { + xmlXPathObjectPtr cur; + + cur = valuePop(ctxt); + ctxt->context->nodelist = cur->nodesetval; + ctxt->context->node = NULL; + cur->nodesetval = NULL; + xmlXPathFreeObject(cur); + } + return; + } /* * Simple case: no axis seach all given node types. */ @@ -3772,22 +4020,29 @@ xmlXPathEvalBasis(xmlXPathParserContextPtr ctxt) { goto search_nodes; case NODE_TYPE_PI: if (CUR != '(') break; + if (name != NULL) free(name); + name = NULL; if (NXT(1) != ')') { + xmlXPathObjectPtr cur; + /* * Specific case: search a PI by name. */ - SKIP(2); + NEXT; nodetest = NODE_TEST_PI; xmlXPathEvalLiteral(ctxt); CHECK_ERROR; if (CUR != ')') ERROR(XPATH_UNCLOSED_ERROR); - xmlXPathSearchPI(ctxt, 0); - return; - } - SKIP(2); - nodetest = NODE_TEST_TYPE; - nodetype = XML_PI_NODE; + NEXT; + xmlXPathStringFunction(ctxt, 1); + CHECK_ERROR; + cur = valuePop(ctxt); + name = xmlStrdup(cur->stringval); + xmlXPathFreeObject(cur); + } else + SKIP(2); + nodetest = NODE_TEST_PI; goto search_nodes; /* @@ -3820,6 +4075,7 @@ xmlXPathEvalBasis(xmlXPathParserContextPtr ctxt) { default: nodetest = NODE_TEST_NAME; } +parse_NodeTest: if (nodetest == NODE_TEST_NONE) { if (CUR == '*') { NEXT; @@ -3859,22 +4115,29 @@ xmlXPathEvalBasis(xmlXPathParserContextPtr ctxt) { goto search_nodes; case NODE_TYPE_PI: if (CUR != '(') break; + if (name != NULL) free(name); + name = NULL; if (NXT(1) != ')') { + xmlXPathObjectPtr cur; + /* * Specific case: search a PI by name. */ - SKIP(2); + NEXT; nodetest = NODE_TEST_PI; xmlXPathEvalLiteral(ctxt); CHECK_ERROR; if (CUR != ')') ERROR(XPATH_UNCLOSED_ERROR); - xmlXPathSearchPI(ctxt, 0); - return; - } - SKIP(2); - nodetest = NODE_TEST_TYPE; - nodetype = XML_PI_NODE; + NEXT; + xmlXPathStringFunction(ctxt, 1); + CHECK_ERROR; + cur = valuePop(ctxt); + name = xmlStrdup(cur->stringval); + xmlXPathFreeObject(cur); + } else + SKIP(2); + nodetest = NODE_TEST_PI; goto search_nodes; } nodetest = NODE_TEST_NAME; @@ -4081,7 +4344,7 @@ xmlXPathEvalLocationPath(xmlXPathParserContextPtr ctxt) { xmlXPathObjectPtr xmlXPathEval(const CHAR *str, xmlXPathContextPtr ctxt) { xmlXPathParserContextPtr pctxt; - xmlXPathObjectPtr res; + xmlXPathObjectPtr res = NULL, tmp; xmlXPathInit(); @@ -4092,12 +4355,14 @@ xmlXPathEval(const CHAR *str, xmlXPathContextPtr ctxt) { pctxt = xmlXPathNewParserContext(str, ctxt); xmlXPathEvalLocationPath(pctxt); + /* TODO: cleanup nodelist, res = valuePop(pctxt); */ do { - res = valuePop(pctxt); -#ifdef DEBUG -#endif - } while (res != NULL); - res = xmlXPathNewNodeSetList(pctxt->context->nodelist); + tmp = valuePop(pctxt); + if (tmp != NULL); + xmlXPathFreeObject(tmp); + } while (tmp != NULL); + if (res == NULL) + res = xmlXPathNewNodeSetList(pctxt->context->nodelist); xmlXPathFreeParserContext(pctxt); return(res); } @@ -4109,7 +4374,7 @@ xmlXPathEval(const CHAR *str, xmlXPathContextPtr ctxt) { * * Evaluate the XPath expression in the given context. * - * Returns the xmlXPathObjectPtr resulting from the eveluation or NULL. + * Returns the xmlXPathObjectPtr resulting from the evaluation or NULL. * the caller has to free the object. */ xmlXPathObjectPtr diff --git a/xpath.h b/xpath.h index 737b55c1..64085032 100644 --- a/xpath.h +++ b/xpath.h @@ -62,7 +62,8 @@ typedef struct xmlXPathContext { xmlNodeSetPtr nodelist; /* The current node list */ void *variables; /* TODO !!!! */ void *functions; /* TODO !!!! */ - void *namespaces; /* TODO !!!! */ + xmlNsPtr *namespaces; /* The namespaces lookup */ + int nsNr; /* the current Namespace index */ } xmlXPathContext, *xmlXPathContextPtr; /* @@ -96,12 +97,14 @@ typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs); * * ************************************************************************/ -xmlXPathContextPtr xmlXPathNewContext(xmlDocPtr doc, void *variables, - void *functions, void *namespaces); -void xmlXPathFreeContext(xmlXPathContextPtr ctxt); -xmlXPathObjectPtr xmlXPathEval(const CHAR *str, xmlXPathContextPtr ctxt); -void xmlXPathFreeObject(xmlXPathObjectPtr obj); -xmlXPathObjectPtr xmlXPathEvalExpression(const CHAR *str, - xmlXPathContextPtr ctxt); +xmlXPathContextPtr xmlXPathNewContext (xmlDocPtr doc, + void *variables, + void *functions); +void xmlXPathFreeContext (xmlXPathContextPtr ctxt); +xmlXPathObjectPtr xmlXPathEval (const CHAR *str, + xmlXPathContextPtr ctxt); +void xmlXPathFreeObject (xmlXPathObjectPtr obj); +xmlXPathObjectPtr xmlXPathEvalExpression (const CHAR *str, + xmlXPathContextPtr ctxt); #endif /* ! __XML_XPATH_H__ */