CheckDocTypeKeyWords() public method

public CheckDocTypeKeyWords ( Node doctype ) : bool
doctype Node
return bool
Beispiel #1
0
        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;
        }