1
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

Organization

C# で Pygments を使ってシンタックスハイライト

このへん から必要最小限な部分を抜き出しただけです。


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 の断片がコンソールに出力されます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?