У меня в планах написание серии статей по программированию. Примеров кода на C# будет много. А чтобы код читался, его надо подсвечивать.
Но подсветка синтаксиса пропадает при вставке кода в блог. Нужно использовать специальные программы для генерации HTML с эквивалентной подсветкой. Я знаю про два таких проекта — Ookii.FormatC и Source Code Highlighter.
Однако функциональности и того и другого мне не хватило. Мне нужна была возможность публикации в ЖЖ и на Хабре (то есть без использования css) плюс подсветка LINQ. Я решил модифицировать Ookii.FormatC и написал свой подсветчик синтаксиса.
Бинарник: Syntax Highlighter.rar
Исходники: SyntaxHighlighter.src.rar
Требования: Установленный .NET Framework 3.5 SP1 (может и ниже, не проверял)
— Подсветка LINQ синтаксиса.
— Корректная обработка строк и комментариев.
— Open Source.
— Не использует css и тег pre.
— Заменяет ведущие пробелы на nbsp.
Код Ookii.FormatC я модифицировал ровно настолько, насколько мне требовалось для работающей подсветки C# 3.0 в ЖЖ и на Хабре. В случае если проект окажется востребованным, возможно я:
— перенесу код на нормальный хост.
— займусь рефакторингом и реорганизацией кода.
— доделаю подсветку для остальных языков, поддерживаемых Ookii.FormatC библиотекой (C#, Visual Basic, C++, XML, HTML, Transact-SQL, PowerShell).
Но подсветка синтаксиса пропадает при вставке кода в блог. Нужно использовать специальные программы для генерации HTML с эквивалентной подсветкой. Я знаю про два таких проекта — Ookii.FormatC и Source Code Highlighter.
Однако функциональности и того и другого мне не хватило. Мне нужна была возможность публикации в ЖЖ и на Хабре (то есть без использования css) плюс подсветка LINQ. Я решил модифицировать Ookii.FormatC и написал свой подсветчик синтаксиса.
Бинарник: Syntax Highlighter.rar
Исходники: SyntaxHighlighter.src.rar
Требования: Установленный .NET Framework 3.5 SP1 (может и ниже, не проверял)
Пример:
using System;
// A single line comment starting at the beginning of the line
using System.IO;
/* A comment block starting at the beginning of the line */
using MyNamespace;
namespace CSharpTest
{
// A comment containing what looks like a "string"
// A comment containg /* what looks like */ a block comment
/* A multiline comment
* also containing a // regular comment
* And containing what looks like a "string"
*/
public class Program
{
/// <summary>
/// An XML comment <see cref="System.String" />.
/// </summary>
public static void Main()
{
int Int; // case sensitive test
int @int; // escaping test
Console.WriteLine("A string \" \\\" hello \t\\");
Console.WriteLine("A string containing what // looks like a comment."); // followed by a real comment
Console.WriteLine(@"An @ string"" \"); /* and another comment */
Console.WriteLine(@"Another @ string """"");
Console.WriteLine("{0} {1} {2}", "more than one\\", /* embedded comment */ @"string on ""the same", "line");
#if PREPROCESSORTEST
for( int x = 0; x < 10; ++x )
{
Console.WriteLine('x');
Console.WriteLine('\'');
Console.WriteLine('\\');
}
#endif
}
public static void Linq()
{
IObservable<Event<MouseEventArgs>> draggingEvent =
from mouseLeftDownEvent in control.GetMouseLeftDown( )
from mouseMoveEvent in control.GetMouseMove( ).Until( control.GetMouseLeftUp( ) )
let comparer = new MouseEventComparer( mouseMoveEvent )
group mouseMoveEvent by comparer into cluster
select cluster;
}
}
}
Скриншот:
Отличия от Source Code Highlighter
— Подсветка LINQ синтаксиса.
— Корректная обработка строк и комментариев.
— Open Source.
Отличия от Ookii.FormatC
— Не использует css и тег pre.
— Заменяет ведущие пробелы на nbsp.
Примечания
Код Ookii.FormatC я модифицировал ровно настолько, насколько мне требовалось для работающей подсветки C# 3.0 в ЖЖ и на Хабре. В случае если проект окажется востребованным, возможно я:
— перенесу код на нормальный хост.
— займусь рефакторингом и реорганизацией кода.
— доделаю подсветку для остальных языков, поддерживаемых Ookii.FormatC библиотекой (C#, Visual Basic, C++, XML, HTML, Transact-SQL, PowerShell).