private static string ColorizeCode(string html)
        {
            var colorizer = new CodeColorizer();
            var sb        = new StringBuilder();
            var pos       = html.IndexOf("<pre><code>", StringComparison.Ordinal);

            if (pos > -1)
            {
                var lastPos = 0;
                sb.Append(html.Substring(0, pos));
                while (pos > -1)
                {
                    lastPos = html.IndexOf("</code></pre>", pos, StringComparison.Ordinal);

                    var snippet          = html.Substring(pos + 11, lastPos - pos - 11);
                    var colorizedSnippet = colorizer.Colorize(snippet, Languages.CSharp);
                    sb.Append(colorizedSnippet);

                    pos = html.IndexOf("<pre><code>", lastPos, StringComparison.Ordinal);
                }

                sb.Append(html.Substring(lastPos + 13));
                html = sb.ToString();
            }

            return(html);
        }
Exemple #2
0
        protected virtual string FormatAndColorize(string value, ILanguage language = null)
        {
            var output = new StringBuilder();

            foreach (var line in value.Split(new[] { "\n" }, StringSplitOptions.None).Where(s => !s.StartsWith(CodeBlockMarker)))
            {
                if (language == null)
                {
                    output.Append(new string(' ', 4));
                }

                if (line == "\n")
                {
                    output.AppendLine();
                }
                else
                {
                    output.AppendLine(line);
                }
            }

            return(language != null
                                ? _syntaxHighlighter.Colorize(output.ToString().Trim(), language)
                                : output.ToString());
        }
        private string ApplySyntaxHighlighting(string languageMoniker, string firstLine, string code, bool useDefault)
        {
            var languageTypeAdapter = new LanguageTypeAdapter();
            var language            = languageTypeAdapter.Parse(languageMoniker, firstLine);

            if (language == null)
            { //handle unrecognised language formats, e.g. when using mermaid diagrams
                if (useDefault)
                {
                    language = FakeIt();
                }
                else
                {
                    return(code);
                }
            }

            var codeBuilder = new StringBuilder();
            var codeWriter  = new StringWriter(codeBuilder);
            var styleSheet  = _customCss ?? StyleSheets.Default;
            var colourizer  = new CodeColorizer();

            colourizer.Colorize(code, language, Formatters.Default, styleSheet, codeWriter);
            return(codeBuilder.ToString());
        }
        private void SaveColorizedStep(string file)
        {
            var content = File.ReadAllText(file);
            var html    = file + ".htm";
            var css     = (StyleSheets.Default as DefaultStyleSheet).GetCssFile();;

            using (var w = File.CreateText(html))
            {
                w.WriteLine(@"<!DOCTYPE html>
                    <html lang=""en"">
                      <head>
                        <meta charset = ""utf-8"">
                        <title>" + Path.GetFileNameWithoutExtension(file) + @"</title>
                        <style>" + css + @"

                        .step .number {
                            color: red;
                        }
                        .type {
                            color: blue;
                        }
                        </style>
                      </head>
                      <body>");

                var cc = new CodeColorizer();
                cc.Colorize(content, Languages.Step, new HtmlClassFormatter(), StyleSheets.Default, w);

                w.WriteLine(@"</body></html>");
                w.Close();
            }
        }
Exemple #5
0
        private void ShowCode(string code, NetLanguage language)
        {
            mLastCode = code;
            var colorizer = new CodeColorizer();

            switch (language)
            {
            case NetLanguage.CSharp:
                browserCode.DocumentText = GetDefaultCss() + colorizer.Colorize(code, Languages.CSharp);
                break;

            case NetLanguage.VbNet:
                browserCode.DocumentText = GetDefaultCss() + colorizer.Colorize(code, Languages.VbDotNet);
                break;

            default:
                throw new ArgumentOutOfRangeException("language");
            }
        }
Exemple #6
0
        protected string ColorizeFile(ExampleFile file)
        {
            var fileLower = file.Filename.ToLower();

            if (fileLower.EndsWith(".cs"))
            {
                return(mColorizer.Colorize(file.Contents, Languages.CSharp));
            }
            if (fileLower.EndsWith(".vb"))
            {
                return(mColorizer.Colorize(file.Contents, Languages.VbDotNet));
            }
            if (fileLower.EndsWith(".xml"))
            {
                return(mColorizer.Colorize(file.Contents, Languages.Xml));
            }
            if (fileLower.EndsWith(".htm") ||
                fileLower.EndsWith(".html"))
            {
                return(mColorizer.Colorize(file.Contents, Languages.Html));
            }
            if (fileLower.EndsWith(".css"))
            {
                return(mColorizer.Colorize(file.Contents, Languages.Css));
            }
            if (fileLower.EndsWith(".sql"))
            {
                return(mColorizer.Colorize(file.Contents, Languages.Sql));
            }

            return("<pre>" + file.Contents + "</pre>");
        }
Exemple #7
0
        private string SyntaxHighlight(string input, string lang)
        {
            var language = LookupLanguage(lang);

            if (language != null)
            {
                return(_codeColorizer.Colorize(input, language));
            }
            else
            {
                return("<pre>" + HttpUtility.HtmlEncode(input) + "</pre>");
            }
        }
Exemple #8
0
        private static void Test_ColorCode()
        {
            var cc = new CodeColorizer();

            var vbnet = cc.Colorize(@"Module Module1
    Sub Main()
        Console.WriteLine(""Hallo Welt!"")
    End Sub
End Module",
                                    Languages.VbDotNet);

            var html = cc.Colorize(@"",
                                   Languages.Html);

            var aspNet = cc.Colorize(@"",
                                     Languages.AspxCs);

            var css = cc.Colorize(@"",
                                  Languages.Css);

            var js = cc.Colorize(@"",
                                 Languages.Php);
        }
Exemple #9
0
        private static string ApplySyntaxHighlighting(string languageMoniker, string firstLine, string code)
        {
            var languageTypeAdapter = new LanguageTypeAdapter();
            var language            = languageTypeAdapter.Parse(languageMoniker, firstLine);
            var codeBuilder         = new StringBuilder();
            var codeWriter          = new StringWriter(codeBuilder);
            var styleSheet          = StyleSheets.Default;
            var colourizer          = new CodeColorizer();

            if (language != null)
            {
                colourizer.Colorize(code, language, Formatters.Default, styleSheet, codeWriter);
            }
            else
            {
                codeBuilder.Append(string.Format("<pre>{0}</pre>", code));
            }
            return(codeBuilder.ToString());
        }
Exemple #10
0
        private static string TransformCodeBlocks(string content)
        {
            var reader      = new StringReader(content);
            var writer      = new StringWriter();
            var code        = new StringWriter();
            var line        = reader.ReadLine();
            var lang        = "";
            var inCodeBlock = false;

            while (line != null)
            {
                if (!line.StartsWith("```"))
                {
                    if (inCodeBlock)
                    {
                        code.WriteLine(line);
                    }
                    else
                    {
                        writer.WriteLine(line);
                    }
                    line = reader.ReadLine();
                    continue;
                }

                if (!inCodeBlock)
                {
                    lang        = line.Trim('`', ' ');
                    inCodeBlock = true;
                }
                else
                {
                    var codeContent = code.ToString();
                    if (lang.Equals("cs", StringComparison.InvariantCultureIgnoreCase) || lang.Equals("c#", StringComparison.InvariantCultureIgnoreCase))
                    {
                        cc.Colorize(codeContent, Languages.CSharp, new HtmlClassFormatter(), StyleSheets.Default, writer);
                    }
                    else if (lang.Equals("js", StringComparison.InvariantCultureIgnoreCase))
                    {
                        cc.Colorize(codeContent, Languages.JavaScript, new HtmlClassFormatter(), StyleSheets.Default, writer);
                    }
                    else if (lang.Equals("step", StringComparison.InvariantCultureIgnoreCase))
                    {
                        cc.Colorize(codeContent, Languages.Step, new HtmlClassFormatter(), StyleSheets.Default, writer);
                    }
                    else if (lang.Equals("xml", StringComparison.InvariantCultureIgnoreCase))
                    {
                        cc.Colorize(codeContent, Languages.Xml, new HtmlClassFormatter(), StyleSheets.Default, writer);
                    }
                    else if (lang.Equals("html", StringComparison.InvariantCultureIgnoreCase))
                    {
                        cc.Colorize(codeContent, Languages.Html, new HtmlClassFormatter(), StyleSheets.Default, writer);
                    }
                    else
                    {
                        codeContent = $"<pre><code>{codeContent}</code></pre>";
                        writer.Write(codeContent);
                    }


                    //clear
                    code        = new StringWriter();
                    inCodeBlock = false;
                    lang        = "";
                }

                line = reader.ReadLine();
            }
            return(writer.ToString());
        }
Exemple #11
0
        /// <summary>
        /// Renders a given Markdown string, converting it into HTML for display in a WebBrowser.
        /// If given a list of embedded Images, it will write the images to the temp directory
        /// first in order to guarantee that the images are there when the HTML is displayed.
        /// </summary>
        /// <param name="inputText">The original Markdown text.</param>
        /// <param name="imageFolder">The folder that will contain the temporary images.</param>
        /// <param name="images">A list of embedded images from the database.</param>
        /// <returns></returns>
        public static string Render(string inputText, string imageFolder, IEnumerable <Image> images = null)
        {
            var md = new Markdown()
            {
                ExtraMode = true
            };
            var color = new CodeColorizer();

            var imageList = images as IList <Image> ?? images?.ToList();

            if (images != null && imageList.Any())
            {
                Directory.CreateDirectory(imageFolder);
                foreach (var img in imageList)
                {
                    var filePath = Path.Combine(imageFolder, img.FileName);
                    File.WriteAllBytes(filePath, img.ImageData);
                }
            }

            #region Decode embedded images

            var defaultImageLocation = imageFolder.Replace(@"\", "/");
            var outputString         = Regex.Replace(inputText, @"(?<=\()(dbfile:\/\/\/)(?=.*?\))", new Uri(defaultImageLocation).AbsoluteUri);

            #endregion

            outputString = md.Transform(outputString);

            // Remove "finalized" HTML values, since we're not done processing yet.
            outputString = Deconvert(outputString);

            #region Colorize code blocks
            var n          = 1;
            var startIndex = outputString.IndexOfNth(CodeBlockStart, n);
            while (startIndex != -1)
            {
                var endIndex = outputString.IndexOfNth(CodeBlockEnd, n);
                var chunk1   = outputString.Substring(0, startIndex);

                var       chunk2       = String.Empty;
                var       codeText     = outputString.SubstringByIndex(startIndex + CodeBlockStart.Length, endIndex - 1);
                ILanguage codeLanguage = null;
                string    codeLangStr  = null;
                if (codeText.StartsWith(LangDefinitionText))
                {
                    codeLangStr  = codeText.Substring(0, codeText.IndexOf("\n"));
                    codeLanguage = ParseCodeLanguage(codeLangStr.Trim());
                }
                if (codeLanguage != null)
                {
                    codeText = codeText.Replace(codeLangStr, String.Empty);

                    //The Colorize method adds an extra newline, so remove it
                    codeText = codeText.Trim();

                    chunk2 = color.Colorize(codeText, codeLanguage);
                }

                var chunk3 = (chunk2 == String.Empty)
                    ? outputString.Substring(startIndex)
                    : outputString.Substring(endIndex + CodeBlockEnd.Length);

                outputString = chunk1 + chunk2 + chunk3;

                startIndex = outputString.IndexOfNth(CodeBlockStart, ++n);
            }
            #endregion

            // Set the title of this HTML page to be a random name to "disable" caching,
            // otherwise embedded images will not always load the most recent version.
            // Also set the styles for tables so they have borders
            outputString = "<head>" +
                           "<title>" + Guid.NewGuid() + "</title>" +
                           "<style>" +
                           "table, th, td { border:1px solid black; border-collapse: collapse; } " +
                           "th, td { padding-right: 5px; padding-left: 5px; }" +
                           "</style>" +
                           "</head>" +
                           outputString;

            return(outputString);
        }
Exemple #12
0
 private string Colorize(string original)
 {
     return(Colorizer.Colorize(original, Languages.Sql));
 }