protected Token parseSystemLiteral (XMLTokenizer tokenizer, Token startToken, DocType docType) { docType.setDocTypeType (DocTypeType.SYSTEM); Token token = expect (tokenizer, startToken, Type.DTD_WHITESPACE, "Expected whitespace after 'SYSTEM'"); docType.add (toNode (token)); token = expect (tokenizer, startToken, Type.DOCTYPE_QUOTED_TEXT, "Expected quoted system literal after 'SYSTEM'"); docType.add (toNode (token)); String s = token.getText (); docType.setSystemLiteral (s.substring (1, s.length () - 1)); return skipOptionalWhitespace (tokenizer, tokenizer.next (), docType); }
protected Token parsePublicLiteral (XMLTokenizer tokenizer, Token startToken, DocType docType) { docType.setDocTypeType (DocTypeType.PUBLIC); Token token = expect (tokenizer, startToken, Type.DTD_WHITESPACE, "Expected whitespace after 'PUBLIC'"); docType.add (toNode (token)); token = expect (tokenizer, startToken, Type.DOCTYPE_QUOTED_TEXT, "Expected quoted public id after 'PUBLIC'"); docType.add (toNode (token)); String s = token.getText (); docType.setPublicLiteral (s.substring (1, s.length () - 1)); token = expect (tokenizer, startToken, Type.DTD_WHITESPACE, "Expected whitespace after public id "+docType.getPublicLiteral ()); docType.add (toNode (token)); token = expect (tokenizer, startToken, Type.DOCTYPE_QUOTED_TEXT, "Expected quoted system literal after the public id of 'PUBLIC'"); docType.add (toNode (token)); s = token.getText (); docType.setSystemLiteral (s.substring (1, s.length () - 1)); return skipOptionalWhitespace (tokenizer, tokenizer.next (), docType); }
protected void parseDocTypeSubElement (XMLTokenizer tokenizer, Token startToken, DocType docType) { Token token = startToken; token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after '<!ELEMENT'"); token = expect (tokenizer, token, Type.TEXT, "Expected element name"); String name = token.getText (); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after element name"); Token beforeContent = token; while ((token = tokenizer.next ()) != null) { //System.out.println ("parseDocTypeSubElement "+token); if (token.getType() == Type.DOCTYPE_END) break; // TODO Check EMPTY, ANY, #PCDATA, (|), ?, *, + } if (token == null) throw new XMLParseException ("Unexpected EOF while parsing element content", tokenizer.getSource (), tokenizer.getOffset ()); String content = tokenizer.getSource ().substring (beforeContent.getEndOffset (), token.getStartOffset ()); startToken.setEndOffset (token.getEndOffset ()); DocTypeElement element = new DocTypeElement (startToken, name, content); docType.add (element); }
token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after '<!NOTATION'"); notation.addNode (toNode (token)); token = expect (tokenizer, token, Type.TEXT, "Expected notation name"); notation.addNode (toNode (token)); String name = token.getText (); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after notation name"); notation.addNode (toNode (token)); token = expect (tokenizer, token, new Type[] { Type.DOCTYPE_SYSTEM, Type.DOCTYPE_PUBLIC }, "Expected 'SYSTEM' or 'PUBLIC'"); notation.addNode (toNode (token)); if (token.getType () == Type.DOCTYPE_SYSTEM) token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after 'SYSTEM'"); notation.addNode (toNode (token)); token = expect (tokenizer, token, Type.DOCTYPE_QUOTED_TEXT, "Expected quoted text after 'SYSTEM'"); notation.addNode (toNode (token)); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after 'PUBLIC'"); notation.addNode (toNode (token)); token = expect (tokenizer, token, Type.DOCTYPE_QUOTED_TEXT, "Expected public ID literal after 'PUBLIC'"); notation.addNode (toNode (token)); token = expect (tokenizer, token, Type.DOCTYPE_QUOTED_TEXT, "Expected system literal after public ID literal"); notation.addNode (toNode (token));
token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after '<!ENTITY'"); entity.addNode (toNode (token)); token = expect (tokenizer, token, new Type[] { Type.TEXT, Type.DOCTYPE_PARAMETER_ENTITY }, "Expected entity name or '%'"); entity.addNode (toNode (token)); String name = token.getText (); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after '%'"); entity.addNode (toNode (token)); token = expect (tokenizer, token, Type.TEXT, "Expected entity name"); entity.addNode (toNode (token)); name = token.getText (); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after entity name"); entity.addNode (toNode (token)); token = expect (tokenizer, token, new Type[] { Type.DOCTYPE_SYSTEM, Type.DOCTYPE_PUBLIC, Type.DOCTYPE_QUOTED_TEXT }, "Expected 'SYSTEM', 'PUBLIC' or quoted text after entity name"); entity.addNode (toNode (token)); if (token.getType () == Type.DOCTYPE_SYSTEM) token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after 'SYSTEM'"); entity.addNode (toNode (token)); token = expect (tokenizer, token, Type.DOCTYPE_QUOTED_TEXT, "Expected quoted text after 'SYSTEM'"); entity.addNode (toNode (token)); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after 'PUBLIC'"); entity.addNode (toNode (token)); token = expect (tokenizer, token, Type.DOCTYPE_QUOTED_TEXT, "Expected public ID literal after 'PUBLIC'");
protected void parseDocTypeAttList (XMLTokenizer tokenizer, Token startToken, DocType docType) token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after '<!ATTLIST'"); token = expect (tokenizer, token, Type.TEXT, "Expected name of element that this '<!ATTLIST' is for"); String elementName = token.getText (); if (!isValidName (tokenizer, elementName)) token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after attribute name"); attList.addNode (toNode (token)); token = expect (tokenizer, token, new Type[] { Type.TEXT, Type.DOCTYPE_BEGIN_GROUP }, "Expected attribute type"); attList.addNode (toNode (token)); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after attribute type"); attList.addNode (toNode (token)); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after list of notation types"); attList.addNode (toNode (token)); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after list of alternatives"); attList.addNode (toNode (token)); token = expect (tokenizer, token, Type.DTD_WHITESPACE, "Expected whitespace after '#FIXED'"); attList.addNode (toNode (token)); token = expect (tokenizer, token, Type.DOCTYPE_QUOTED_TEXT, "Expected quoted text after '#FIXED'"); attList.addNode (toNode (token));