このへん から必要最小限な部分を抜き出しただけです。
NuGet で pygments-net をプロジェクトに追加する。
PM> Install-Package pygments-net
シンタックスハイライトのための python コードをプロジェクトに作成し、ファイルのプロパティで「出力ディレクトリにコピー」を「常にコピーする」にする。
pygments_helper.py
import clr
clr.AddReference("pygments")
from pygments.lexers import get_all_lexers
from pygments.styles import get_all_styles
def generate_html(code, lexer_name, style_name):
from pygments import highlight
from pygments.lexers import get_lexer_by_name
from pygments.styles import get_style_by_name
from pygments.formatters import HtmlFormatter
if not lexer_name: lexer_name = "text"
if not style_name: style_name = "default"
lexer = get_lexer_by_name(lexer_name)
return highlight(code, lexer, HtmlFormatter(style=style_name))
def get_lexers():
return get_all_lexers
def get_styles():
return get_all_styles
Program.cs を次の通りに編集してビルド・実行する。
Program.cs
using System;
using System.Reflection;
using System.IO;
using IronPython.Hosting;
using Microsoft.Scripting;
namespace ExamplePygment
{
class Program
{
static void Main(string[] args)
{
string dir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
string code;
using (var sr = new StreamReader(Path.Combine(dir, "pygments_helper.py")))
{
code = sr.ReadToEnd();
}
var ipy = Python.CreateRuntime();
dynamic scope = ipy.UseFile(Path.Combine(dir, "pygments_helper.py"));
var html = scope.generate_html(code, "py", null);
Console.WriteLine(html);
}
}
}
タグ付けされた HTML の断片がコンソールに出力されます。