Example #1
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();
        }
Example #2
0
 /// <summary>
 /// Creates a HTML fragment for the selected text.
 /// </summary>
 public string CreateHtmlFragment(HtmlOptions options)
 {
     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();
 }
Example #3
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;");
     }
 }