nom-xml 0.1.0-pre-alpha

A Rust Crate for parsing XML.
Documentation
nom-xml-0.1.0-pre-alpha has been yanked.

NomExML

:warning: :construction: Under Heavy Development :construction: :warning:

Things are likely to change and break often until testing has been completed.

The following table needs to be verified as of June 2, 2023


Extensible Markup Language (XML) 1.0 (Fifth Edition)

W3C Recommendation 26 November 2008


Production Rule Name Definition Implemented Tested :bug:
[1] document prolog element Misc* :heavy_check_mark: :x:
[2] Char #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] :heavy_check_mark: :x:
[3] S (#x20 | #x9 | #xD | #xA)+ :heavy_check_mark: :x:
[4] NameStartChar ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] :heavy_check_mark: :x:
[4a] NameChar NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] :heavy_check_mark: :x:
[5] Name NameStartChar (NameChar)* :heavy_check_mark: :x:
[6] Names Name (#x20 Name)* :heavy_check_mark: :x:
[7] Nmtoken (NameChar)+ :heavy_check_mark: :x:
[8] Nmtokens Nmtoken (#x20 Nmtoken)* :heavy_check_mark: :x:
[9] EntityValue '"' ([^%&"] | PEReference | Reference)* '"' | "'" ([^%&'] | PEReference | Reference)* "'" :heavy_check_mark: :x:
[10] AttValue '"' ([^<&"] | Reference)* '"' | "'" ([^<&'] | Reference)* "'" :heavy_check_mark: :x:
[11] SystemLiteral ('"' [^"]* '"') | ("'" [^']* "'") :heavy_check_mark: :x:
[12] PubidLiteral '"' PubidChar* '"' | "'" (PubidChar - "'")* "'" :heavy_check_mark: :x:
[13] PubidChar #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%] :heavy_check_mark: :x:
[14] CharData [^<&]* - ([^<&]* ']]>' [^<&]*) :heavy_check_mark: :x:
[15] Comment '' :heavy_check_mark: :x:
[16] PI '' Char*)))? '?>' :heavy_check_mark: :x:
[17] PITarget Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) :heavy_check_mark: :x:
[18] CDSect CDStart CData CDEnd :heavy_check_mark: :x: :question:
[19] CDStart '<![CDATA[' :heavy_check_mark: :x: :question:
[20] CData (Char* - (Char* ']]>' Char*)) :heavy_check_mark: :x: :question:
[21] CDEnd ']]>' :heavy_check_mark: :x: :question:
[22] prolog XMLDecl? Misc* (doctypedecl Misc*)? :heavy_check_mark: :x:
[23] XMLDecl '' :heavy_check_mark: :x:
[24] VersionInfo S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"') :heavy_check_mark: :x:
[25] Eq S? '=' S? :heavy_check_mark: :x:
[26] VersionNum '1.' [0-9]+ :heavy_check_mark: :x:
[27] Misc Comment | PI | S :heavy_check_mark: :x:
[28] doctypedecl '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>' :heavy_check_mark: :x:
[28a] DeclSep PEReference | S :heavy_check_mark: :x:
[28b] intSubset (markupdecl | DeclSep)* :heavy_check_mark: :x:
[29] markupdecl elementdecl | AttlistDecl | EntityDecl | NotationDecl | PI | Comment :heavy_check_mark: :x:
[30] extSubset TextDecl? extSubsetDecl :heavy_check_mark: :x:
[31] extSubsetDecl (markupdecl | conditionalSect | DeclSep)* :heavy_check_mark: :x:
[32] SDDecl S 'standalone' Eq (("'" ('yes' | 'no') "'") | ('"' ('yes' | 'no') '"')) :heavy_check_mark: :x:
[39] element EmptyElemTag | STag content ETag :heavy_check_mark: :x:
[40] STag '<' Name (S Attribute)* S? '>' :heavy_check_mark: :x:
[41] Attribute Name Eq AttValue :heavy_check_mark: :x:
[42] ETag '</' Name S? '>' :heavy_check_mark: :x:
[43] content CharData? ((element | Reference | CDSect | PI | Comment) CharData?)* :heavy_check_mark: :x:
[44] EmptyElemTag '<' Name (S Attribute)* S? '/>' :heavy_check_mark: :x:
[45] elementdecl '<!ELEMENT' S Name S contentspec S? '>' :heavy_check_mark: :x:
[46] contentspec 'EMPTY' | 'ANY' | Mixed | children :heavy_check_mark: :x:
[47] children (choice | seq) ('?' | '*' | '+')? :heavy_check_mark: :x:
[48] cp (Name | choice | seq) ('?' | '*' | '+')? :heavy_check_mark: :x:
[49] choice '(' S? cp ( S? '|' S? cp )+ S? ')' :heavy_check_mark: :x:
[50] seq '(' S? cp ( S? ',' S? cp )* S? ')' :heavy_check_mark: :x:
[51] Mixed '(' S? '#PCDATA' (S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA' S? ')' :heavy_check_mark: :x:
[52] AttlistDecl '<!ATTLIST' S Name AttDef* S? '>' :heavy_check_mark: :x:
[53] AttDef S Name S AttType S DefaultDecl :heavy_check_mark: :x:
[54] AttType StringType | TokenizedType | EnumeratedType :heavy_check_mark: :x:
[55] StringType 'CDATA' :heavy_check_mark: :x:
[56] TokenizedType 'ID'| 'IDREF'| 'IDREFS'| 'ENTITY' | 'ENTITIES' | 'NMTOKEN' | 'NMTOKENS' :heavy_check_mark: :x:
[57] EnumeratedType NotationType | Enumeration :heavy_check_mark: :x:
[58] NotationType 'NOTATION' S '(' S? Name (S? '|' S? Name)* S? ')' :heavy_check_mark: :x:
[59] Enumeration '(' S? Nmtoken (S? '|' S? Nmtoken)* S? ')' :heavy_check_mark: :x:
[61] conditionalSect includeSect | ignoreSect :x: :x:
[62] includeSect '<![' S? 'INCLUDE' S? '[' extSubsetDecl ']]>' :x: :x:
[63] ignoreSect '<![' S? 'IGNORE' S? '[' ignoreSectContents* ']]>' :x: :x:
[64] ignoreSectContents Ignore ('<![' ignoreSectContents ']]>' Ignore)* :x: :x:
[65] Ignore Char* - (Char* ('<![' | ']]>') Char*) :x: :x:
[66] CharRef '&#' [0-9]+ ';' | '&#x' [0-9a-fA-F]+ ';' :heavy_check_mark: :x:
[67] Reference EntityRef | CharRef :heavy_check_mark: :x:
[68] EntityRef '&' Name ';' :heavy_check_mark: :x:
[69] PEReference '%' Name ';' :heavy_check_mark: :x:
[70] EntityDecl GEDecl | PEDecl :heavy_check_mark: :x:
[71] GEDecl '<!ENTITY' S Name S EntityDef S? '>' :heavy_check_mark: :x:
[72] PEDecl '<!ENTITY' S '%' S Name S PEDef S? '>' :heavy_check_mark: :x: :question:
[73] EntityDef EntityValue | (ExternalID NDataDecl?) :heavy_check_mark: :x:
[74] PEDef EntityValue | ExternalID :heavy_check_mark: :x:
[75] ExternalID 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral :heavy_check_mark: :x:
[76] NDataDecl S 'NDATA' S Name :heavy_check_mark: :x:
[77] TextDecl '' :x: :x:
[78] extParsedEnt TextDecl? content :x: :x:
[80] EncodingDecl S 'encoding' Eq ('"' EncName '"' | "'" EncName "'" ) :heavy_check_mark: :x:
[81] EncName [A-Za-z] ([A-Za-z0-9._] | '-')* :heavy_check_mark: :x:
[82] NotationDecl '<!NOTATION' S Name S (ExternalID | PublicID) S? '>' :heavy_check_mark: :x:
[83] PublicID 'PUBLIC' S PubidLiteral :heavy_check_mark: :x:
[84] Letter BaseChar | Ideographic :x: :x:
[85] BaseChar ... :x: :x:
[86] Ideographic [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029] :x: :x:
[87] CombiningChar ... :x: :x:
[88] Digit [#x0030-#x0039] | [#x0660-#x0669] | [#x06F0-#x06F9] | [#x0966-#x096F] | [#x09E6-#x09EF] | [#x0A66-#x0A6F] | [#x0AE6-#x0AEF] | [#x0B66-#x0B6F] | [#x0BE7-#x0BEF] | [#x0C66-#x0C6F] | [#x0CE6-#x0CEF] | [#x0D66-#x0D6F] | [#x0E50-#x0E59] | [#x0ED0-#x0ED9] | [#x0F20-#x0F29] :x: :x:
[89] Extender #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 | #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] | [#x309D-#x309E] | [#x30FC-#x30FE] :x: :x: