35

Is there a way to get MarkdownSharp (I'm using the NuGet package) to handle 'GitHub flavored Markdown (GFM)' and especially syntax highlighting of c# code, which (in GFM) is written like this:

```c#
//my code.....
```

So, if I pass Markdown formatted content to MarkDownSharp, containg a C# code block (as above) I want it to generate syntax highlighted html for that c# code. Any ideas? I know I can use the supported 4 spaces to indicate a code block, but again, I'm seeking a solution for getting it to support GitHub flavored Markdown.

slang
  • 626
  • 7
  • 26
Daniel
  • 8,133
  • 5
  • 36
  • 51
  • 1
    I'm trying to solve this same problem, but I specifically need the github table support. I haven't found any existing library that seems to do it. same problem as discussed [here](https://github.com/Wheelies/MarkdownLog/issues/4) – Yostage Aug 14 '14 at 04:06

3 Answers3

33

I have made some light modifications to MarkdownSharp that will transform github flavored fenced code blocks

https://github.com/KyleGobel/MarkdownSharp-GithubCodeBlocks

```cs
Console.WriteLine("Fenced code blocks ftw!");
```

Would become

<pre><code class='language-cs'>
Console.WriteLine("Fenced code blocks ftw!");
</code></pre>

It handles the cases I needed to use, there are probably lots of edge cases though, feel free to fork/change/modify/pull request. Markdown sharp has plenty of comments and is all only one file, so it's not too bad to modify.

Kyle Gobel
  • 5,530
  • 9
  • 45
  • 68
11

Here's the result: https://github.com/danielwertheim/kiwi/wiki/Use-with-Asp.Net-MVC

//D

Daniel
  • 8,133
  • 5
  • 36
  • 51
3

As one can read in this post, GitHub relies on RedCarpet to render Markdown syntax.

However, Vicent Marti (Sundown (ex-Upskirt) and RedCarpet maintainer) states that the syntax highlighting is specifically handled by Pygments, a python library.

Back to your concern, I can think of several options to benefit from syntax highlighting from C#:

  • Try and build a compiled managed version of Pygments source code thanks to IronPython ("IronPython’s Hosting APIs can be used to compile Python scripts into DLLs, console executables, or Windows executables.")
  • Port Pygment to C#
  • Use a different syntax highlighting product (for instance, ColorCode which is used by Codeplex...)

Then either:

  • Fork MarkDownSharp to make it accept plug-ins
  • Similarly to what GitHub does, use the managed syntax highlighting product and post process the Html generated by MarkDownSharp

By the way, as a MarkDown alternative, you might want to consider Moonshine, a managed wrapper on top of Sundown which is said to be "at least 20x faster than MarkdownSharp when run against MarkdownSharp's own benchmark app."

nulltoken
  • 64,429
  • 20
  • 138
  • 130
  • 1
    I actually have done it both. Made a spike with Pygments using IronPython and C# but that route brings to many dependencies. The solution was Pre and Post processing with MarkdownSharp and ColorCode. I'm putting it out on GitHub and NuGet. – Daniel Dec 02 '11 at 22:14
  • Some of these links are now broken, @nulltoken. – Adam K Dean Mar 01 '13 at 18:16
  • 2
    @AdamKDean The sundown link is now fixed. – nulltoken Mar 01 '13 at 20:26