public CheckDocTypeKeyWords ( |
||
doctype | ||
return | bool |
public static Node ParseXmlDocument(Lexer lexer) { Node document = lexer.NewNode(); document.Type = Node.ROOT_NODE; Node doctype = null; lexer.Options.XmlTags = true; while (true) { Node node = lexer.GetToken(Lexer.IGNORE_WHITESPACE); if (node == null) { break; } /* discard unexpected end tags */ if (node.Type == Node.END_TAG) { Report.Warning(lexer, null, node, Report.UNEXPECTED_ENDTAG); continue; } /* deal with comments etc. */ if (Node.InsertMisc(document, node)) { continue; } if (node.Type == Node.DOC_TYPE_TAG) { if (doctype == null) { Node.InsertNodeAtEnd(document, node); doctype = node; } else { Report.Warning(lexer, document, node, Report.DISCARDING_UNEXPECTED); } // TODO continue; } /* if start tag then parse element's content */ if (node.Type == Node.START_TAG) { Node.InsertNodeAtEnd(document, node); ParseXmlElement(lexer, node, Lexer.IGNORE_WHITESPACE); } } if (doctype != null && !lexer.CheckDocTypeKeyWords(doctype)) { Report.Warning(lexer, doctype, null, Report.DTYPE_NOT_UPPER_CASE); } /* ensure presence of initial <?XML version="1.0"?> */ if (lexer.Options.XmlPi) { lexer.FixXmlPi(document); } return document; }