const {readPiExp} = require("./XmlPartReader"); function readCdata(parser){ //"); parser.outputBuilder.addCdata(text); } function readPiTag(parser){ //"); if(!tagExp) throw new Error("Invalid Pi Tag expression."); if (tagExp.tagName === "?xml") {//TODO: test if tagName is just xml parser.outputBuilder.addDeclaration(); } else { parser.outputBuilder.addPi("?"+tagExp.tagName); } } function readComment(parser){ //"); parser.outputBuilder.addComment(text); } const DOCTYPE_tags = { "EL":/^EMENT\s+([^\s>]+)\s+(ANY|EMPTY|\(.+\)\s*$)/m, "AT":/^TLIST\s+[^\s]+\s+[^\s]+\s+[^\s]+\s+[^\s]+\s+$/m, "NO":/^TATION.+$/m } function readDocType(parser){ //"); const regx = DOCTYPE_tags[str]; if(regx){ const match = dTagExp.match(regx); if(!match) throw new Error("Invalid DOCTYPE"); }else throw new Error("Invalid DOCTYPE"); } }else if( ch === '>' && lastch === "]"){//end of doctype return; } }else if( ch === '>'){//end of doctype return; }else if( ch === '['){ hasBody = true; }else{ lastch = ch; } }//End While loop } function registerEntity(parser){ //read Entity let attrBoundary=""; let name ="", val =""; while(source.canRead()){ let ch = source.readCh(); if(attrBoundary){ if (ch === attrBoundary){ val = text; text = "" } }else if(ch === " " || ch === "\t"){ if(!name){ name = text.trimStart(); text = ""; } }else if (ch === '"' || ch === "'") {//start of attrBoundary attrBoundary = ch; }else if(ch === ">"){ parser.entityParser.addExternalEntity(name,val); return; }else{ text+=ch; } } } module.exports = { readCdata: readCdata, readComment:readComment, readDocType:readDocType, readPiTag:readPiTag }