(str: string, p: number, parent: XmlNode)
| 93 | ]); |
| 94 | |
| 95 | public static parse(str: string, p: number, parent: XmlNode): number { |
| 96 | let c: number = str.charCodeAt(p); |
| 97 | let state: XmlState = XmlState.Begin; |
| 98 | let next: XmlState = XmlState.Begin; |
| 99 | let start: number = 0; |
| 100 | let buf: string = ''; |
| 101 | let escapeNext: XmlState = XmlState.Begin; |
| 102 | let xml: XmlNode | null = null; |
| 103 | let aname: string | null = null; |
| 104 | |
| 105 | let nbrackets: number = 0; |
| 106 | |
| 107 | let attrValQuote: number = 0; |
| 108 | |
| 109 | while (p < str.length) { |
| 110 | c = str.charCodeAt(p); |
| 111 | switch (state) { |
| 112 | case XmlState.IgnoreSpaces: |
| 113 | switch (c) { |
| 114 | case XmlParser.CharCodeLF: |
| 115 | case XmlParser.CharCodeCR: |
| 116 | case XmlParser.CharCodeTab: |
| 117 | case XmlParser.CharCodeSpace: |
| 118 | break; |
| 119 | default: |
| 120 | state = next; |
| 121 | continue; |
| 122 | } |
| 123 | break; |
| 124 | |
| 125 | case XmlState.Begin: |
| 126 | switch (c) { |
| 127 | case XmlParser.CharCodeLowerThan: |
| 128 | state = XmlState.IgnoreSpaces; |
| 129 | next = XmlState.BeginNode; |
| 130 | break; |
| 131 | default: |
| 132 | start = p; |
| 133 | state = XmlState.Pcdata; |
| 134 | continue; |
| 135 | } |
| 136 | break; |
| 137 | |
| 138 | case XmlState.Pcdata: |
| 139 | if (c === XmlParser.CharCodeLowerThan) { |
| 140 | buf += str.substr(start, p - start); |
| 141 | const child: XmlNode = new XmlNode(); |
| 142 | child.nodeType = XmlNodeType.Text; |
| 143 | child.value = buf; |
| 144 | buf = ''; |
| 145 | parent.addChild(child); |
| 146 | state = XmlState.IgnoreSpaces; |
| 147 | next = XmlState.BeginNode; |
| 148 | } else if (c === XmlParser.CharCodeAmp) { |
| 149 | buf += str.substr(start, p - start); |
| 150 | state = XmlState.Escape; |
| 151 | escapeNext = XmlState.Pcdata; |
| 152 | start = p + 1; |
nothing calls this directly
no test coverage detected