protected override void Visit(DoctypeNode docTypeNode) { //[28] doctypedecl ::= '<!DOCTYPE' S Name (S ExternalID)? S? ('[' intSubset ']' S?)? '>' //[75] ExternalID ::= 'SYSTEM' S SystemLiteral | 'PUBLIC' S PubidLiteral S SystemLiteral //[12] PubidLiteral ::= '"' PubidChar* '"' | "'" (PubidChar - "'")* "'" //[11] SystemLiteral ::= ('"' [^"]* '"') | ("'" [^']* "'") if (docTypeNode.ExternalId == null) { AddLiteral(string.Format("<!DOCTYPE {0}>", docTypeNode.Name)); } else if (docTypeNode.ExternalId.ExternalIdType == "SYSTEM") { char systemQuote = docTypeNode.ExternalId.SystemId.Contains("\"") ? '\'' : '\"'; AddLiteral(string.Format("<!DOCTYPE {0} SYSTEM {2}{1}{2}>", docTypeNode.Name, docTypeNode.ExternalId.SystemId, systemQuote)); } else if (docTypeNode.ExternalId.ExternalIdType == "PUBLIC") { char systemQuote = docTypeNode.ExternalId.SystemId.Contains("\"") ? '\'' : '\"'; AddLiteral(string.Format("<!DOCTYPE {0} PUBLIC \"{1}\" {3}{2}{3}>", docTypeNode.Name, docTypeNode.ExternalId.PublicId, docTypeNode.ExternalId.SystemId, systemQuote)); } }
private Node parseDoctype() { Token token = expect(typeof(Doctype)) ; Doctype doctype = (Doctype)token; DoctypeNode doctypeNode = new DoctypeNode(); doctypeNode.setValue(doctype.getValue()); return(doctypeNode); }
protected override void Visit(DoctypeNode docTypeNode) { if (docTypeNode.ExternalId == null) { this.AddLiteral(string.Format("<!DOCTYPE {0}>", docTypeNode.Name)); } else if (docTypeNode.ExternalId.ExternalIdType == "SYSTEM") { char ch = docTypeNode.ExternalId.SystemId.Contains("\"") ? '\'' : '"'; this.AddLiteral(string.Format("<!DOCTYPE {0} SYSTEM {2}{1}{2}>", docTypeNode.Name, docTypeNode.ExternalId.SystemId, ch)); } else if (docTypeNode.ExternalId.ExternalIdType == "PUBLIC") { char ch2 = docTypeNode.ExternalId.SystemId.Contains("\"") ? '\'' : '"'; this.AddLiteral(string.Format("<!DOCTYPE {0} PUBLIC \"{1}\" {3}{2}{3}>", new object[] { docTypeNode.Name, docTypeNode.ExternalId.PublicId, docTypeNode.ExternalId.SystemId, ch2 })); } }
public void WritingDocTypes() { var justName = new DoctypeNode { Name = "html" }; var systemName = new DoctypeNode { Name = "html2", ExternalId = new ExternalIdInfo { ExternalIdType = "SYSTEM", SystemId = "my-'system'-id" } }; var publicName = new DoctypeNode { Name = "html3", ExternalId = new ExternalIdInfo { ExternalIdType = "PUBLIC", PublicId = "my-public-id", SystemId = "my-\"other\"system-id" } }; var visitor = new ChunkBuilderVisitor(new VisitorContext()); visitor.Accept(new Node[] { justName, systemName, publicName }); Assert.AreEqual(1, visitor.Chunks.Count); Assert.AreEqual("<!DOCTYPE html><!DOCTYPE html2 SYSTEM \"my-'system'-id\"><!DOCTYPE html3 PUBLIC \"my-public-id\" 'my-\"other\"system-id'>", ((SendLiteralChunk)visitor.Chunks[0]).Text); }
protected abstract void Visit(DoctypeNode docTypeNode);
protected override void Visit(DoctypeNode docTypeNode) { }
protected override void Visit(DoctypeNode node) { this.Nodes.Add(node); }
protected override void Visit(DoctypeNode docTypeNode) { Add(docTypeNode); }