コード例 #1
0
        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));
            }
        }
コード例 #2
0
ファイル: JadeParser.cs プロジェクト: mirannda/Jade4Net
        private Node parseDoctype()
        {
            Token token = expect(typeof(Doctype))
            ;
            Doctype     doctype     = (Doctype)token;
            DoctypeNode doctypeNode = new DoctypeNode();

            doctypeNode.setValue(doctype.getValue());
            return(doctypeNode);
        }
コード例 #3
0
 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 }));
     }
 }
コード例 #4
0
        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);
        }
コード例 #5
0
 protected abstract void Visit(DoctypeNode docTypeNode);
コード例 #6
0
ファイル: FileReferenceVisitor.cs プロジェクト: Eilon/spark
 protected override void Visit(DoctypeNode docTypeNode)
 {
 }
コード例 #7
0
 protected override void Visit(DoctypeNode node)
 {
     this.Nodes.Add(node);
 }
コード例 #8
0
 protected override void Visit(DoctypeNode docTypeNode)
 {
     Add(docTypeNode);
 }