/// <summary> /// Writes the specified <paramref name="block"/> to the <paramref name="renderer"/>. /// </summary> /// <param name="renderer">The renderer.</param> /// <param name="block">The object to render.</param> protected override void Write(HtmlRenderer renderer, CodeBlock block) { // Make sure "obj" is an instance of "FencedCodeBlock" FencedCodeBlock fenced = block as FencedCodeBlock; // Make sure "obj" is an instance of "FencedCodeBlockParser" FencedCodeBlockParser parser = block.Parser as FencedCodeBlockParser; // Use the fallback code block renderer if (fenced == null || parser == null) { Fallback.Write(renderer, block); return; } // Get the language from the fenced block string language = fenced.Info.ToLowerInvariant(); // Get the actual contents of the fenced block string code = String.Join(Environment.NewLine, block.Lines.Lines); // TODO: is this really a good idea? code = code.TrimEnd(); // Get the syntax language matching "language" Options.TryGetAlias(language, out Language lang); renderer.Write(Highlighter.Highlight(code, lang)); }
protected override void Write(HtmlRenderer renderer, CodeBlock obj) { FencedCodeBlock fencedCodeBlock = obj as FencedCodeBlock; FencedCodeBlockParser parser = obj.Parser as FencedCodeBlockParser; if (fencedCodeBlock == null || parser == null) { _underlyingRenderer.Write(renderer, obj); return; } var languageMoniker = fencedCodeBlock.Info.Replace(parser.InfoPrefix, string.Empty); if (string.IsNullOrEmpty(languageMoniker)) { _underlyingRenderer.Write(renderer, obj); return; } string firstLine; var code = GetCode(obj, out firstLine); Console.WriteLine(formatter.GetCSSString()); renderer.WriteLine(formatter.GetHtmlString(code, Languages.FindById(languageMoniker))); }