コード例 #1
0
ファイル: Comment.cs プロジェクト: bkzhn/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     if (@out.PrettyPrint)
     {
         Indent(accum, depth, @out);
     }
     accum.Append("<!--").Append(Data).Append("-->");
 }
コード例 #2
0
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     if (@out.PrettyPrint)
     {
         Indent(accum, depth, @out);
     }
     accum.Append("<!--").Append(Data).Append("-->");
 }
コード例 #3
0
ファイル: Attribute.cs プロジェクト: wushian/dcsoup
 internal void AppendHtmlTo(StringBuilder accum, DocumentOutputSettings @out)
 {
     accum.Append(key);
     if (!ShouldCollapseAttribute(@out))
     {
         accum.Append("=\"");
         Entities.Escape(accum, value, Convert(@out.EscapeMode), @out.Charset, true, false, false);
         accum.Append('"');
     }
 }
コード例 #4
0
ファイル: Attributes.cs プロジェクト: wushian/dcsoup
 internal void AppendHtmlTo(StringBuilder accum, DocumentOutputSettings @out)
 {
     if (attributes == null)
     {
         return;
     }
     foreach (KeyValuePair <string, Attribute> entry in attributes)
     {
         Attribute attribute = (Attribute)entry.Value;
         accum.Append(" ");
         attribute.AppendHtmlTo(accum, @out);
     }
 }
コード例 #5
0
ファイル: DocumentType.cs プロジェクト: bkzhn/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     accum.Append("<!DOCTYPE");
     if (!string.IsNullOrEmpty(Attr("name")))
     {
         accum.Append(" ").Append(Attr("name"));
     }
     if (!string.IsNullOrEmpty(Attr("publicId")))
     {
         accum.Append(" PUBLIC \"").Append(Attr("publicId")).Append('"');
     }
     if (!string.IsNullOrEmpty(Attr("systemId")))
     {
         accum.Append(" \"").Append(Attr("systemId")).Append('"');
     }
     accum.Append('>');
 }
コード例 #6
0
ファイル: DocumentType.cs プロジェクト: wushian/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     accum.Append("<!DOCTYPE");
     if (!string.IsNullOrEmpty(Attr("name")))
     {
         accum.Append(" ").Append(Attr("name"));
     }
     if (!string.IsNullOrEmpty(Attr("publicId")))
     {
         accum.Append(" PUBLIC \"").Append(Attr("publicId")).Append('"');
     }
     if (!string.IsNullOrEmpty(Attr("systemId")))
     {
         accum.Append(" \"").Append(Attr("systemId")).Append('"');
     }
     accum.Append('>');
 }
コード例 #7
0
        internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
        {
            if (@out.PrettyPrint &&
                ((SiblingIndex == 0 &&
                  parentNode is Element &&
                  ((Element)parentNode).Tag.IsFormattedAsBlock &&
                  !IsBlank) ||
                 (@out.Outline &&
                  SiblingNodes.Count > 0 &&
                  !IsBlank)))
            {
                Indent(accum, depth, @out);
            }
            bool normaliseWhite = @out.PrettyPrint &&
                                  Parent is Element &&
                                  !Element.PreserveWhitespace((Element)Parent);

            Entities.Escape(accum, WholeText, Convert(@out.EscapeMode), @out.Charset, false, normaliseWhite, false);
        }
コード例 #8
0
ファイル: Node.cs プロジェクト: bkzhn/dcsoup
 internal void Indent(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     accum.Append("\n").Append(StringUtil.Padding(depth * @out.IndentAmount));
 }
コード例 #9
0
ファイル: XmlDeclaration.cs プロジェクト: wushian/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     accum.Append("<").Append(isProcessingInstruction ? "!" : "?").Append(WholeDeclaration).Append(">");
 }
コード例 #10
0
 internal void Indent(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     accum.Append("\n").Append(StringUtil.Padding(depth * @out.IndentAmount));
 }
コード例 #11
0
ファイル: XmlDeclaration.cs プロジェクト: bkzhn/dcsoup
 internal override void AppendOuterHtmlTailTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
 }
コード例 #12
0
ファイル: DataNode.cs プロジェクト: bkzhn/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     accum.Append(WholeData);
     // data is not escaped in return from data nodes, so " in script, style is plain
 }
コード例 #13
0
ファイル: Attribute.cs プロジェクト: bkzhn/dcsoup
 /// <summary>
 /// Collapsible if it's a boolean attribute and value is empty or same as name
 /// </summary>
 internal bool ShouldCollapseAttribute(DocumentOutputSettings @out)
 {
     return (string.Empty.Equals(value) || string.Equals(value, key, StringComparison.OrdinalIgnoreCase))
         && @out.Syntax == DocumentSyntax.Html
         && Array.BinarySearch(booleanAttributes, key) >= 0;
 }
コード例 #14
0
ファイル: Element.cs プロジェクト: bkzhn/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     if (accum.Length > 0
         && @out.PrettyPrint
         && (tag.IsFormattedAsBlock
             || (Parent != null && Parent.Tag.IsFormattedAsBlock)
             || @out.Outline))
     {
         Indent(accum, depth, @out);
     }
     accum.Append("<").Append(TagName);
     attributes.AppendHtmlTo(accum, @out);
     // selfclosing includes unknown tags, isEmpty defines tags that are always empty
     if (childNodes.Count == 0 && tag.IsSelfClosing)
     {
         if (@out.Syntax == DocumentSyntax.Html && tag.IsEmpty)
         {
             accum.Append('>');
         }
         else
         {
             accum.Append(" />");
         }
     }
     else
     {
         // <img> in html, <img /> in xml
         accum.Append(">");
     }
 }
コード例 #15
0
ファイル: Node.cs プロジェクト: bkzhn/dcsoup
 internal abstract void AppendOuterHtmlTailTo(StringBuilder accum, int depth, DocumentOutputSettings @out);
コード例 #16
0
 internal OuterHtmlVisitor(StringBuilder accum, DocumentOutputSettings @out)
 {
     this.accum = accum;
     this.@out  = @out;
 }
コード例 #17
0
ファイル: TextNode.cs プロジェクト: bkzhn/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     if (@out.PrettyPrint
         && ((SiblingIndex == 0
                 && parentNode is Element
                 && ((Element)parentNode).Tag.IsFormattedAsBlock
                 && !IsBlank)
             || (@out.Outline
                 && SiblingNodes.Count > 0
                 && !IsBlank)))
     {
         Indent(accum, depth, @out);
     }
     bool normaliseWhite = @out.PrettyPrint
         && Parent is Element
         && !Element.PreserveWhitespace((Element)Parent);
     Entities.Escape(accum, WholeText, Convert(@out.EscapeMode), @out.Charset, false, normaliseWhite, false);
 }
コード例 #18
0
ファイル: CleanerTest.cs プロジェクト: bkzhn/dcsoup
        public void SupplyOutputSettings()
        {
            // test that one can override the default document output settings
            DocumentOutputSettings os = new DocumentOutputSettings();
            os.PrettyPrint = false;
            os.EscapeMode = DocumentEscapeMode.Extended;
            os.Charset = Encoding.ASCII;

            string html = "<div><p>&bernou;</p></div>";
            string customOut = Dcsoup.Clean(html, "http://foo.com/", Whitelist.Relaxed, os);
            string defaultOut = Dcsoup.Clean(html, "http://foo.com/", Whitelist.Relaxed);
            Assert.AreNotEqual(defaultOut, customOut);

            Assert.AreEqual("<div><p>&bernou;</p></div>", customOut);
            Assert.AreEqual("<div>\n" +
                " <p>ℬ</p>\n" +
                "</div>", defaultOut);

            os.Charset = Encoding.ASCII;
            os.EscapeMode = DocumentEscapeMode.Base;
            string customOut2 = Dcsoup.Clean(html, "http://foo.com/", Whitelist.Relaxed, os);
            Assert.AreEqual("<div><p>&#x212c;</p></div>", customOut2);
        }
コード例 #19
0
ファイル: Element.cs プロジェクト: bkzhn/dcsoup
 internal override void AppendOuterHtmlTailTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     if (!(childNodes.Count == 0 && tag.IsSelfClosing))
     {
         if (@out.PrettyPrint
             && (childNodes.Count > 0
                 && (tag.IsFormattedAsBlock
                     || (@out.Outline
                         && (childNodes.Count > 1
                             || (childNodes.Count == 1
                                 && !(childNodes[0] is TextNode)))))))
         {
             Indent(accum, depth, @out);
         }
         accum.Append("</").Append(TagName).Append(">");
     }
 }
コード例 #20
0
ファイル: Node.cs プロジェクト: bkzhn/dcsoup
 internal OuterHtmlVisitor(StringBuilder accum, DocumentOutputSettings @out)
 {
     this.accum = accum;
     this.@out = @out;
 }
コード例 #21
0
ファイル: DocumentType.cs プロジェクト: wushian/dcsoup
 internal override void AppendOuterHtmlTailTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
 }
コード例 #22
0
ファイル: DataNode.cs プロジェクト: wushian/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     accum.Append(WholeData);
     // data is not escaped in return from data nodes, so " in script, style is plain
 }
コード例 #23
0
ファイル: Attribute.cs プロジェクト: bkzhn/dcsoup
 internal void AppendHtmlTo(StringBuilder accum, DocumentOutputSettings @out)
 {
     accum.Append(key);
     if (!ShouldCollapseAttribute(@out))
     {
         accum.Append("=\"");
         Entities.Escape(accum, value, Convert(@out.EscapeMode), @out.Charset, true, false, false);
         accum.Append('"');
     }
 }
コード例 #24
0
ファイル: FluentUtility.cs プロジェクト: bkzhn/dcsoup
 /// <summary>
 /// Set the specified document's current output settings, and returns the document itself.
 /// </summary>
 /// <param name="self">
 /// The input <see cref="Document"/>,
 /// which acts as the <b>this</b> instance for the extension method.
 /// </param>
 /// <param name="outputSettings">new output settings</param>
 /// <returns>The input <see cref="Document"/>, for method chaining.</returns>
 /// <seealso cref="Document.OutputSettings">Document.OutputSettings</seealso>
 public static Document OutputSettings(this Document self, DocumentOutputSettings outputSettings)
 {
     self.OutputSettings = outputSettings;
     return self;
 }
コード例 #25
0
ファイル: XmlDeclaration.cs プロジェクト: bkzhn/dcsoup
 internal override void AppendOuterHtmlHeadTo(StringBuilder accum, int depth, DocumentOutputSettings @out)
 {
     accum.Append("<").Append(isProcessingInstruction ? "!" : "?").Append(WholeDeclaration).Append(">");
 }
コード例 #26
0
ファイル: Attribute.cs プロジェクト: wushian/dcsoup
 /// <summary>
 /// Collapsible if it's a boolean attribute and value is empty or same as name
 /// </summary>
 internal bool ShouldCollapseAttribute(DocumentOutputSettings @out)
 {
     return((string.Empty.Equals(value) || string.Equals(value, key, StringComparison.OrdinalIgnoreCase)) &&
            @out.Syntax == DocumentSyntax.Html &&
            Array.BinarySearch(booleanAttributes, key) >= 0);
 }
コード例 #27
0
ファイル: Dcsoup.cs プロジェクト: bkzhn/dcsoup
 /// <summary>
 /// Get safe HTML from untrusted input HTML,
 /// by parsing input HTML and filtering it through a white-list of permitted tags and attributes.
 /// </summary>
 /// <param name="bodyHtml">input untrusted HTML (body fragment)</param>
 /// <param name="baseUri">URL to resolve relative URLs against</param>
 /// <param name="whitelist">white-list of permitted HTML elements</param>
 /// <param name="outputSettings">document output settings; use to control pretty-printing and entity escape modes</param>
 /// <returns>safe HTML (body fragment)</returns>
 /// <seealso cref="Supremes.Safety.Cleaner.Clean(Supremes.Nodes.Document)">Supremes.Safety.Cleaner.Clean(Supremes.Nodes.Document)</seealso>
 public static string Clean(string bodyHtml, string baseUri, Whitelist whitelist, DocumentOutputSettings outputSettings)
 {
     Document dirty = ParseBodyFragment(bodyHtml, baseUri);
     Cleaner cleaner = new Cleaner(whitelist);
     Document clean = cleaner.Clean(dirty);
     clean.OutputSettings = outputSettings;
     return clean.Body.Html;
 }
コード例 #28
0
 internal abstract void AppendOuterHtmlTailTo(StringBuilder accum, int depth, DocumentOutputSettings @out);