Holds options for converting text to HTML.
コード例 #1
0
		/// <summary>
		/// Creates a new HtmlRichTextWriter instance.
		/// </summary>
		/// <param name="htmlWriter">
		/// The text writer where the raw HTML is written to.
		/// The HtmlRichTextWriter does not take ownership of the htmlWriter;
		/// disposing the HtmlRichTextWriter will not dispose the underlying htmlWriter!
		/// </param>
		/// <param name="options">Options that control the HTML output.</param>
		public HtmlRichTextWriter(TextWriter htmlWriter, HtmlOptions options = null)
		{
			if (htmlWriter == null)
				throw new ArgumentNullException("htmlWriter");
			this.htmlWriter = htmlWriter;
			this.options = options ?? new HtmlOptions();
		}
コード例 #2
0
		/// <summary>
		/// Creates a new HtmlRichTextWriter instance.
		/// </summary>
		/// <param name="htmlWriter">
		/// The text writer where the raw HTML is written to.
		/// The HtmlRichTextWriter does not take ownership of the htmlWriter;
		/// disposing the HtmlRichTextWriter will not dispose the underlying htmlWriter!
		/// </param>
		/// <param name="options">Options that control the HTML output.</param>
		public HtmlRichTextWriter(TextWriter htmlWriter, HtmlOptions options = null)
		{
			if (htmlWriter == null)
				throw new ArgumentNullException("htmlWriter");
			this.htmlWriter = htmlWriter;
			this.options = options ?? new HtmlOptions();
		}
コード例 #3
0
ファイル: HtmlClipboard.cs プロジェクト: Amichai/PhysicsPad
        /// <summary>
        /// Creates a HTML fragment from a part of a document.
        /// </summary>
        /// <param name="document">The document to create HTML from.</param>
        /// <param name="highlighter">The highlighter used to highlight the document. <c>null</c> is valid and will create HTML without any highlighting.</param>
        /// <param name="segment">The part of the document to create HTML for. You can pass <c>null</c> to create HTML for the whole document.</param>
        /// <param name="options">The options for the HTML creation.</param>
        /// <returns>HTML code for the document part.</returns>
        public static string CreateHtmlFragment(TextDocument document, IHighlighter highlighter, ISegment segment, HtmlOptions options)
        {
            if (document == null)
                throw new ArgumentNullException("document");
            if (options == null)
                throw new ArgumentNullException("options");
            if (highlighter != null && highlighter.Document != document)
                throw new ArgumentException("Highlighter does not belong to the specified document.");
            if (segment == null)
                segment = new SimpleSegment(0, document.TextLength);

            StringBuilder html = new StringBuilder();
            int segmentEndOffset = segment.EndOffset;
            DocumentLine line = document.GetLineByOffset(segment.Offset);
            while (line != null && line.Offset < segmentEndOffset) {
                HighlightedLine highlightedLine;
                if (highlighter != null)
                    highlightedLine = highlighter.HighlightLine(line.LineNumber);
                else
                    highlightedLine = new HighlightedLine(document, line);
                SimpleSegment s = segment.GetOverlap(line);
                if (html.Length > 0)
                    html.AppendLine("<br>");
                html.Append(highlightedLine.ToHtml(s.Offset, s.EndOffset, options));
                line = line.NextLine;
            }
            return html.ToString();
        }
コード例 #4
0
ファイル: HighlightedLine.cs プロジェクト: blockspacer/isilme
        /// <summary>
        /// Produces HTML code for a section of the line, with &lt;span class="colorName"&gt; tags.
        /// </summary>
        public string ToHtml(int startOffset, int endOffset, HtmlOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }
            int documentLineStartOffset = this.DocumentLine.Offset;
            int documentLineEndOffset   = documentLineStartOffset + this.DocumentLine.Length;

            if (startOffset < documentLineStartOffset || startOffset > documentLineEndOffset)
            {
                throw new ArgumentOutOfRangeException("startOffset", startOffset, "Value must be between " + documentLineStartOffset + " and " + documentLineEndOffset);
            }
            if (endOffset < startOffset || endOffset > documentLineEndOffset)
            {
                throw new ArgumentOutOfRangeException("endOffset", endOffset, "Value must be between startOffset and " + documentLineEndOffset);
            }
            ISegment requestedSegment = new SimpleSegment(startOffset, endOffset - startOffset);

            List <HtmlElement> elements = new List <HtmlElement>();

            for (int i = 0; i < this.Sections.Count; i++)
            {
                HighlightedSection s = this.Sections[i];
                if (s.GetOverlap(requestedSegment).Length > 0)
                {
                    elements.Add(new HtmlElement(s.Offset, i, false, s.Color));
                    elements.Add(new HtmlElement(s.Offset + s.Length, i, true, s.Color));
                }
            }
            elements.Sort();

            TextDocument document   = this.Document;
            StringWriter w          = new StringWriter(CultureInfo.InvariantCulture);
            int          textOffset = startOffset;

            foreach (HtmlElement e in elements)
            {
                int newOffset = Math.Min(e.Offset, endOffset);
                if (newOffset > startOffset)
                {
                    HtmlClipboard.EscapeHtml(w, document.GetText(textOffset, newOffset - textOffset), options);
                }
                textOffset = Math.Max(textOffset, newOffset);
                if (e.IsEnd)
                {
                    w.Write("</span>");
                }
                else
                {
                    w.Write("<span");
                    options.WriteStyleAttributeForColor(w, e.Color);
                    w.Write('>');
                }
            }
            HtmlClipboard.EscapeHtml(w, document.GetText(textOffset, endOffset - textOffset), options);
            return(w.ToString());
        }
コード例 #5
0
        /// <summary>
        /// Produces HTML code for a section of the line, with &lt;span class="colorName"&gt; tags.
        /// </summary>
        public string ToHtml(int startOffset, int endOffset, HtmlOptions options)
        {
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }
            int documentLineStartOffset = this.DocumentLine.Offset;
            int documentLineEndOffset   = documentLineStartOffset + this.DocumentLine.Length;

            if (startOffset < documentLineStartOffset || startOffset > documentLineEndOffset)
            {
                throw new ArgumentOutOfRangeException("startOffset", startOffset, "Value must be between " + documentLineStartOffset + " and " + documentLineEndOffset);
            }
            if (endOffset < startOffset || endOffset > documentLineEndOffset)
            {
                throw new ArgumentOutOfRangeException("endOffset", endOffset, "Value must be between startOffset and " + documentLineEndOffset);
            }
            ISegment requestedSegment = new SimpleSegment(startOffset, endOffset - startOffset);

            List <HtmlElement> elements = new List <HtmlElement>();

            for (int i = 0; i < this.Sections.Count; i++)
            {
                HighlightedSection s = this.Sections[i];
                if (s.GetOverlap(requestedSegment).Length > 0)
                {
                    elements.Add(new HtmlElement(s.Offset, i, false, s.Color));
                    elements.Add(new HtmlElement(s.Offset + s.Length, i, true, s.Color));
                }
            }
            elements.Sort();

            TextDocument  document   = DocumentLine.Document;
            StringBuilder b          = new StringBuilder();
            int           textOffset = startOffset;

            foreach (HtmlElement e in elements)
            {
                int newOffset = Math.Min(e.Offset, endOffset);
                if (newOffset > startOffset)
                {
                    HtmlClipboard.EscapeHtml(b, document.GetText(textOffset, newOffset - textOffset), options);
                }
                textOffset = newOffset;
                if (e.IsEnd)
                {
                    b.Append("</span>");
                }
                else
                {
                    b.Append("<span style=\"");
                    b.Append(e.Color.ToCss());
                    b.Append("\">");
                }
            }
            HtmlClipboard.EscapeHtml(b, document.GetText(textOffset, endOffset - textOffset), options);
            return(b.ToString());
        }
コード例 #6
0
        /// <summary>
        /// Produces HTML code for a section of the line, with &lt;span style="..."&gt; tags.
        /// </summary>
        public string ToHtml(int offset, int length, HtmlOptions options = null)
        {
            StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture);

            using (var htmlWriter = new HtmlRichTextWriter(stringWriter, options)) {
                htmlWriter.Write(this, offset, length);
            }
            return(stringWriter.ToString());
        }
コード例 #7
0
        /// <summary>
        /// Produces HTML code for a section of the line, with &lt;span class="colorName"&gt; tags.
        /// </summary>
        public string ToHtml(int startOffset, int endOffset, HtmlOptions options = null)
        {
            StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture);

            using (var htmlWriter = new HtmlRichTextWriter(stringWriter, options)) {
                WriteTo(htmlWriter, startOffset, endOffset);
            }
            return(stringWriter.ToString());
        }
コード例 #8
0
        /// <summary>
        /// Produces HTML code for the line, with &lt;span class="colorName"&gt; tags.
        /// </summary>
        public string ToHtml(HtmlOptions options = null)
        {
            StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture);

            using (var htmlWriter = new HtmlRichTextWriter(stringWriter, options)) {
                WriteTo(htmlWriter);
            }
            return(stringWriter.ToString());
        }
コード例 #9
0
ファイル: HighlightedLine.cs プロジェクト: zhouweiaccp/gitscc
        /// <summary>
        /// Produces HTML code for the line, with &lt;span class="colorName"&gt; tags.
        /// </summary>
        public string ToHtml(HtmlOptions options)
        {
            int startOffset = this.DocumentLine.Offset;

            return(ToHtml(startOffset, startOffset + this.DocumentLine.Length, options));
        }
コード例 #10
0
ファイル: HtmlClipboard.cs プロジェクト: Amichai/PhysicsPad
 /// <summary>
 /// Escapes text and writes the result to the StringBuilder.
 /// </summary>
 internal static void EscapeHtml(StringWriter w, string text, HtmlOptions options)
 {
     int spaceCount = -1;
     foreach (char c in text) {
         if (c == ' ') {
             if (spaceCount < 0)
                 w.Write("&nbsp;");
             else
                 spaceCount++;
         } else if (c == '\t') {
             if (spaceCount < 0)
                 spaceCount = 0;
             spaceCount += options.TabSize;
         } else {
             if (spaceCount == 1) {
                 w.Write(' ');
             } else if (spaceCount >= 1) {
                 for (int i = 0; i < spaceCount; i++) {
                     w.Write("&nbsp;");
                 }
             }
             spaceCount = 0;
             switch (c) {
                 case '<':
                     w.Write("&lt;");
                     break;
                 case '>':
                     w.Write("&gt;");
                     break;
                 case '&':
                     w.Write("&amp;");
                     break;
                 case '"':
                     w.Write("&quot;");
                     break;
                 default:
                     w.Write(c);
                     break;
             }
         }
     }
     for (int i = 0; i < spaceCount; i++) {
         w.Write("&nbsp;");
     }
 }
コード例 #11
0
        /// <summary>
        /// Creates a HTML fragment from a part of a document.
        /// </summary>
        /// <param name="document">The document to create HTML from.</param>
        /// <param name="highlighter">The highlighter used to highlight the document. <c>null</c> is valid and will create HTML without any highlighting.</param>
        /// <param name="segment">The part of the document to create HTML for. You can pass <c>null</c> to create HTML for the whole document.</param>
        /// <param name="options">The options for the HTML creation.</param>
        /// <returns>HTML code for the document part.</returns>
        public static string CreateHtmlFragment(TextDocument document, IHighlighter highlighter, ISegment segment, HtmlOptions options)
        {
            if (document == null)
            {
                throw new ArgumentNullException("document");
            }
            if (options == null)
            {
                throw new ArgumentNullException("options");
            }
            if (highlighter != null && highlighter.Document != document)
            {
                throw new ArgumentException("Highlighter does not belong to the specified document.");
            }
            if (segment == null)
            {
                segment = new SimpleSegment(0, document.TextLength);
            }

            StringBuilder html             = new StringBuilder();
            int           segmentEndOffset = segment.EndOffset;
            DocumentLine  line             = document.GetLineByOffset(segment.Offset);

            while (line != null && line.Offset < segmentEndOffset)
            {
                HighlightedLine highlightedLine;
                if (highlighter != null)
                {
                    highlightedLine = highlighter.HighlightLine(line.LineNumber);
                }
                else
                {
                    highlightedLine = new HighlightedLine(document, line);
                }
                SimpleSegment s = segment.GetOverlap(line);
                if (html.Length > 0)
                {
                    html.AppendLine("<br>");
                }
                html.Append(highlightedLine.ToHtml(s.Offset, s.EndOffset, options));
                line = line.NextLine;
            }
            return(html.ToString());
        }
コード例 #12
0
        /// <summary>
        /// Escapes text and writes the result to the StringBuilder.
        /// </summary>
        internal static void EscapeHtml(StringWriter w, string text, HtmlOptions options)
        {
            int spaceCount = -1;

            foreach (char c in text)
            {
                if (c == ' ')
                {
                    if (spaceCount < 0)
                    {
                        w.Write("&nbsp;");
                    }
                    else
                    {
                        spaceCount++;
                    }
                }
                else if (c == '\t')
                {
                    if (spaceCount < 0)
                    {
                        spaceCount = 0;
                    }
                    spaceCount += options.TabSize;
                }
                else
                {
                    if (spaceCount == 1)
                    {
                        w.Write(' ');
                    }
                    else if (spaceCount >= 1)
                    {
                        for (int i = 0; i < spaceCount; i++)
                        {
                            w.Write("&nbsp;");
                        }
                    }
                    spaceCount = 0;
                    switch (c)
                    {
                    case '<':
                        w.Write("&lt;");
                        break;

                    case '>':
                        w.Write("&gt;");
                        break;

                    case '&':
                        w.Write("&amp;");
                        break;

                    case '"':
                        w.Write("&quot;");
                        break;

                    default:
                        w.Write(c);
                        break;
                    }
                }
            }
            for (int i = 0; i < spaceCount; i++)
            {
                w.Write("&nbsp;");
            }
        }
コード例 #13
0
ファイル: Selection.cs プロジェクト: pusp/o2platform
		/// <summary>
		/// Creates a HTML fragment for the selected text.
		/// </summary>
		public string CreateHtmlFragment(TextArea textArea, HtmlOptions options)
		{
			if (textArea == null)
				throw new ArgumentNullException("textArea");
			if (options == null)
				throw new ArgumentNullException("options");
			IHighlighter highlighter = textArea.GetService(typeof(IHighlighter)) as IHighlighter;
			StringBuilder html = new StringBuilder();
			bool first = true;
			foreach (ISegment selectedSegment in this.Segments) {
				if (first)
					first = false;
				else
					html.AppendLine("<br>");
				html.Append(HtmlClipboard.CreateHtmlFragment(textArea.Document, highlighter, selectedSegment, options));
			}
			return html.ToString();
		}
コード例 #14
0
ファイル: RichText.cs プロジェクト: Zolniu/DigitalRune
		/// <summary>
		/// Produces HTML code for a section of the line, with &lt;span style="..."&gt; tags.
		/// </summary>
		public string ToHtml(int offset, int length, HtmlOptions options = null)
		{
			StringWriter stringWriter = new StringWriter(CultureInfo.InvariantCulture);
			using (var htmlWriter = new HtmlRichTextWriter(stringWriter, options)) {
				htmlWriter.Write(this, offset, length);
			}
			return stringWriter.ToString();
		}