MCPcopy Create free account
hub / github.com/charto/cxml / parseCodeBuffer

Method parseCodeBuffer

src/parser/Parser.ts:144–426  ·  view source on GitHub ↗
(pending: boolean)

Source from the content-addressed store, hash-verified

142 }
143
144 private parseCodeBuffer(pending: boolean) {
145 const config = this.config;
146 const codeBuffer = this.codeBuffer;
147 const codeCount = codeBuffer[0];
148
149 // NOTE: These must be updated if config is unlinked!
150 let elementList = config.elementSpace.list;
151 let attributeList = config.attributeSpace.list;
152 let prefixList = config.prefixSpace.list;
153 let uriList = config.uriSpace.list;
154 let partialList = elementList;
155
156 let codeNum = 0;
157 let partStart = this.partStart;
158 let partialLen = this.partialLen;
159 let latestElement = this.latestElement;
160 let latestPrefix = this.latestPrefix;
161 let latestNamespace = this.latestNamespace;
162
163 const tokenBuffer = this.tokenChunk.buffer;
164 const prefixBuffer = this.prefixBuffer;
165 const namespaceBuffer = this.namespaceBuffer;
166 const unknownElementTbl = this.unknownElementTbl;
167 const unknownAttributeTbl = this.unknownAttributeTbl;
168 const unknownOffsetList = this.unknownOffsetList;
169 let tokenNum = this.tokenChunk.length - 1;
170 let token: Token;
171 let linkTbl: Token[];
172 let linkKind: number;
173 let name: string;
174 let elementStart = this.elementStart;
175 let unknownCount = this.unknownCount;
176
177 while(codeNum < codeCount) {
178 let code = codeBuffer[++codeNum];
179 const kind = code & TOKEN.MASK;
180 code >>= TOKEN.SHIFT;
181
182 switch(kind) {
183 case CodeType.OPEN_ELEMENT_ID:
184
185 latestElement = elementList[code].open;
186 // TODO: If latestprefix is null, use current prefix for element's namespace.
187 tokenBuffer[++tokenNum] = latestElement;
188 prefixBuffer[0] = latestPrefix;
189 elementStart = tokenNum;
190 break;
191
192 case CodeType.CLOSE_ELEMENT_ID:
193
194 tokenBuffer[++tokenNum] = elementList[code].close;
195 break;
196
197 case CodeType.ELEMENT_EMITTED:
198 case CodeType.CLOSED_ELEMENT_EMITTED:
199
200 if(unknownCount) {
201 let ns: ParserNamespace;

Callers 2

constructorMethod · 0.95
_transformMethod · 0.95

Calls 8

resolveMethod · 0.95
getSliceMethod · 0.95
storeSliceMethod · 0.95
bindNamespaceMethod · 0.80
addPrefixMethod · 0.80
setPrefixMethod · 0.80
updateNamespacesMethod · 0.80
addElementMethod · 0.45

Tested by

no test coverage detected