nom-xml 0.3.0

A Rust Crate for parsing XML.
Documentation
The following tables need 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: | :heavy_check_mark: |
|   [2]  | Char            | #x9 \| #xA \| #xD \| [#x20-#xD7FF] \| [#xE000-#xFFFD] \| [#x10000-#x10FFFF] | :heavy_check_mark: | :heavy_check_mark: |
|   [3]  | S               | (#x20 \| #x9 \| #xD \| #xA)+ | :heavy_check_mark: | :heavy_check_mark: |
|   [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: | :heavy_check_mark: |
|   [4a] | NameChar        | NameStartChar \| "-" \| "." \| [0-9] \| #xB7 \| [#x0300-#x036F] \| [#x203F-#x2040] | :heavy_check_mark: | :heavy_check_mark: |
|   [5]  | Name            | NameStartChar (NameChar)* | :heavy_check_mark: | :heavy_check_mark: |
|   [6]  | Names           | Name (#x20 Name)* | :heavy_check_mark: | :x: |
|   [7]  | Nmtoken         | (NameChar)+ | :heavy_check_mark: | :heavy_check_mark: |
|   [8]  | Nmtokens        | Nmtoken (#x20 Nmtoken)* | :heavy_check_mark: | :x: |
|   [9]  | EntityValue     | '"' ([^%&"] \| PEReference \| Reference)* '"' \| "'" ([^%&'] \| PEReference \| Reference)* "'" | :heavy_check_mark: | :heavy_check_mark: |
|   [10] | AttValue        | '"' ([^<&"] \| Reference)* '"' \| "'" ([^<&'] \| Reference)* "'" | :heavy_check_mark: | :heavy_check_mark: |
|   [11] | SystemLiteral   | ('"' [^"]* '"') \| ("'" [^']* "'") | :heavy_check_mark: | :heavy_check_mark: |
|   [12] | PubidLiteral    | '"' PubidChar* '"' \| "'" (PubidChar - "'")* "'" | :heavy_check_mark: | :heavy_check_mark: |
|   [13] | PubidChar       | #x20 \| #xD \| #xA \| [a-zA-Z0-9] \| [-'()+,./:=?;!*#@$_%] | :heavy_check_mark: | :heavy_check_mark: |
|   [14] | CharData        | [^<&]* - ([^<&]* ']]>' [^<&]*) | :heavy_check_mark: | :heavy_check_mark: |
|   [15] | Comment         | '<!--' ((Char - '-') \| ('-' (Char - '-')))* '-->' | :heavy_check_mark: | :heavy_check_mark: |
|   [16] | PI              | '<?' PITarget (S (Char* - (Char* '?>' Char*)))? '?>' | :heavy_check_mark: | :heavy_check_mark: |
|   [17] | PITarget        | Name - (('X' \| 'x') ('M' \| 'm') ('L' \| 'l')) | :heavy_check_mark: | :heavy_check_mark: |
|   [18] | CDSect          | CDStart CData CDEnd | :heavy_check_mark: | :heavy_check_mark: |  |
|   [19] | CDStart         | '<![CDATA[' | :heavy_check_mark: | :heavy_check_mark: |  |
|   [20] | CData           | (Char* - (Char* ']]>' Char*)) | :heavy_check_mark: | :heavy_check_mark: |  |
|   [21] | CDEnd           | ']]>' | :heavy_check_mark: | :heavy_check_mark: |  |
|   [22] | prolog          | XMLDecl? Misc* (doctypedecl Misc*)? | :heavy_check_mark: | :heavy_check_mark: |
|   [23] | XMLDecl         | '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' | :heavy_check_mark: | :heavy_check_mark: |
|   [24] | VersionInfo     | S 'version' Eq ("'" VersionNum "'" \| '"' VersionNum '"') | :heavy_check_mark: | :heavy_check_mark: |
|   [25] | Eq              | S? '=' S? | :heavy_check_mark: | :heavy_check_mark: |
|   [26] | VersionNum      | '1.' [0-9]+ | :heavy_check_mark: | :heavy_check_mark: |
|   [27] | Misc            | Comment \| PI \| S | :heavy_check_mark: | :heavy_check_mark: |
|   [28]  | doctypedecl     | '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>' | :heavy_check_mark: | :heavy_check_mark: |
|   [28a] | DeclSep         | PEReference \| S | :heavy_check_mark: | :heavy_check_mark: |
|   [28b] | intSubset       | (markupdecl \| DeclSep)* | :heavy_check_mark: | :heavy_check_mark: |
|   [29]  | markupdecl      | elementdecl \| AttlistDecl \| EntityDecl \| NotationDecl \| PI \| Comment | :heavy_check_mark: | :heavy_check_mark: |
|   [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: | :heavy_check_mark: |
|   [40]  | STag            | '<' Name (S Attribute)* S? '>' | :heavy_check_mark: | :heavy_check_mark: |
|   [41]  | Attribute       | Name Eq AttValue | :heavy_check_mark: | :heavy_check_mark: |
|   [42]  | ETag            | '</' Name S? '>' | :heavy_check_mark: | :heavy_check_mark: |
|   [43]  | content         | CharData? ((element \| Reference \| CDSect \| PI \| Comment) CharData?)* | :heavy_check_mark: | :heavy_check_mark: |
|   [44]  | EmptyElemTag    | '<' Name (S Attribute)* S? '/>' | :heavy_check_mark: | :heavy_check_mark: |
|   [45]  | elementdecl      | '<!ELEMENT' S Name S contentspec S? '>' | :heavy_check_mark: | :heavy_check_mark: |
|   [46]  | contentspec      | 'EMPTY' \| 'ANY' \| Mixed \| children | :heavy_check_mark: | :heavy_check_mark: |
|   [47]  | children         | (choice \| seq) ('?' \| '*' \| '+')? | :heavy_check_mark: | :heavy_check_mark: |
|   [48]  | cp               | (Name \| choice \| seq) ('?' \| '*' \| '+')? | :heavy_check_mark: | :heavy_check_mark: |
|   [49]  | choice           | '(' S? cp ( S? '\|' S? cp )+ S? ')' | :heavy_check_mark: | :heavy_check_mark: |
|   [50]  | seq              | '(' S? cp ( S? ',' S? cp )* S? ')' | :heavy_check_mark: | :heavy_check_mark: |
|   [51]  | Mixed            | '(' S? '#PCDATA' (S? '\|' S? Name)* S? ')*' \| '(' S? '#PCDATA' S? ')' | :heavy_check_mark: | :heavy_check_mark: |
|   [52]  | AttlistDecl      | '<!ATTLIST' S Name AttDef* S? '>' | :heavy_check_mark: | :heavy_check_mark: |
|   [53]  | AttDef           | S Name S AttType S DefaultDecl | :heavy_check_mark: | :heavy_check_mark: |
|   [54]  | AttType          | StringType \| TokenizedType \| EnumeratedType | :heavy_check_mark: | :heavy_check_mark: |
|   [55]  | StringType       | 'CDATA' | :heavy_check_mark: | :heavy_check_mark: |
|   [56]  | TokenizedType    | 'ID'\| 'IDREF'\| 'IDREFS'\| 'ENTITY' \| 'ENTITIES' \| 'NMTOKEN' \| 'NMTOKENS' | :heavy_check_mark: | :heavy_check_mark: |
|   [57]  | EnumeratedType   | NotationType \| Enumeration | :heavy_check_mark: | :heavy_check_mark: |
|   [58]  | NotationType     | 'NOTATION' S '(' S? Name (S? '\|' S? Name)* S? ')' | :heavy_check_mark: | :heavy_check_mark: |
|   [59]  | Enumeration      | '(' S? Nmtoken (S? '\|' S? Nmtoken)* S? ')' | :heavy_check_mark: | :heavy_check_mark: ||   [60]  | DefaultDecl      | '#REQUIRED' \| '#IMPLIED' \| (('#FIXED' S)? AttValue) | :heavy_check_mark: | :heavy_check_mark: |
|   [61]  | conditionalSect  | includeSect \| ignoreSect | :heavy_check_mark: | :heavy_check_mark: |
|   [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: | :heavy_check_mark: |
|   [67]  | Reference        | EntityRef \| CharRef | :heavy_check_mark: | :heavy_check_mark: |
|   [68]  | EntityRef        | '&' Name ';' | :heavy_check_mark: | :heavy_check_mark: |
|   [69]  | PEReference      | '%' Name ';' | :heavy_check_mark: | :heavy_check_mark: |
|   [70]  | EntityDecl       | GEDecl \| PEDecl | :heavy_check_mark: | :heavy_check_mark: |
|   [71]  | GEDecl           | '<!ENTITY' S Name S EntityDef S? '>' | :heavy_check_mark: | :heavy_check_mark: |
|   [72]  | PEDecl           | '<!ENTITY' S '%' S Name S PEDef S? '>' | :heavy_check_mark: | :heavy_check_mark: |  |
|   [73]  | EntityDef        | EntityValue \| (ExternalID NDataDecl?) | :heavy_check_mark: | :heavy_check_mark: |
|   [74]  | PEDef            | EntityValue \| ExternalID | :heavy_check_mark: | :heavy_check_mark: |
|   [75]  | ExternalID       | 'SYSTEM' S SystemLiteral \| 'PUBLIC' S PubidLiteral S SystemLiteral | :heavy_check_mark: | :heavy_check_mark: |
|   [76]  | NDataDecl        | S 'NDATA' S Name | :heavy_check_mark: | :heavy_check_mark: |
|   [77]  | TextDecl         | '<?xml' VersionInfo? EncodingDecl S? '?>' | :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: | :heavy_check_mark: |
|   [83]  | PublicID         | 'PUBLIC' S PubidLiteral | :heavy_check_mark: | :heavy_check_mark: |
|   [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: |


---
## Namespaces in XML 1.0 (Third Edition)
### W3C Recommendation 8 December 2009
---
| Production Rule | Name | Definition | Implemented | Tested | :bug: |
|:----------------------:|:----------|-------------|:-----------:|:------:|:----------:|
| [1] | NSAttName | PrefixedAttName \| DefaultAttName | :heavy_check_mark: | :x: |
| [2] | PrefixedAttName | 'xmlns:' NCName | :heavy_check_mark: | :x: |
| [3] | DefaultAttName | 'xmlns' | :heavy_check_mark: | :x: |
| [4] | NCName | Name - (Char* ':' Char*) | :heavy_check_mark: | :x: |
| [5] | NCNameChar | NameChar - ':' | :heavy_check_mark: | :x: |
| [6] | NCNameStartChar | NCName - ( Char Char Char* ) | :heavy_check_mark: | :x: |
| [7] | QName | PrefixedName \| UnprefixedName | :heavy_check_mark: | :x: |
| [8] | PrefixedName | Prefix ':' LocalPart | :heavy_check_mark: | :x: |
| [9] | UnprefixedName | LocalPart | :heavy_check_mark: | :x: |
| [10] | Prefix | NCName | :heavy_check_mark: | :x: |
| [11] | LocalPart | NCName | :heavy_check_mark: | :x: |
| [12] | STag | '<' QName (S Attribute)* S? '>' | :heavy_check_mark: | :x: |
| [13] | ETag | '</' QName S? '>' | :heavy_check_mark: | :x: |
| [14] | EmptyElemTag | '<' QName (S Attribute)* S? '/>' | :heavy_check_mark: | :x: |
| [15] | Attribute | NSAttName Eq AttValue \| QName Eq AttValue | :heavy_check_mark: | :x: |
| [16] | doctypedecl | '<!DOCTYPE' S QName (S ExternalID)? S? ('[' (markupdecl \| PEReference \| S)* ']' S?)? '>' | :heavy_check_mark: | :x: |
| [17] | elementdecl | '<!ELEMENT' S QName S contentspec S? '>' | :heavy_check_mark: | :x: |
| [18] | cp | (QName \| choice \| seq) ('?' \| '*' \| '+')? | :heavy_check_mark: | :x: |
| [19] | Mixed | '(' S? '#PCDATA' (S? '\|' S? QName)* S? ')*' \| '(' S? '#PCDATA' S? ')' | :heavy_check_mark: | :x: |
| [20] | AttlistDecl | '<!ATTLIST' S QName AttDef* S? '>' | :heavy_check_mark: | :x: |
| [21] | AttDef | S (QName \| NSAttName) S AttType S DefaultDecl | :heavy_check_mark: | :x: |