・見易く色を付けて表示したい。
・綺麗にカラー印刷したい。
・ブログに美しく貼り付けたい。
そんな欲求を満たすために、俺が実際にやっている方法。
まずカラー表示・カラー印刷は全てvimにお任せしてます。こんな感じ↓
vimが優れているのは
・色分けの精度が高い。
ソースのカラー表示の機能はほとんどのエディタが備えていると思いますが
vimはより細かく色分けを行います。
vimのSyntaxに染まってからemacsのC/C++ modeですら見難く感じるようになりました。
・カラースキーマを変更することにより、表示のテイストを変更化
例えが悪すぎるかもしれませんがWindowsのデスクトップテーマチックです。
名無しのVIM使い/VIM スクリーンショットに多数のサンプルスクリーンショットがまとまっています。
・強調表示の指定がSyntaxファイルという独立したファイルになっている。
自分でSyntaxを作ることも、既存のものを改良することも可能です。
ただし日常考えられるほぼ全ての言語・設定ファイルに関してすでにSyntaxがあるはずです。
そしてこれらが標準のvimパッケージの中に予め含まれています。すごい。
印刷も通常の印刷とSyntaxを有効にした状態での印刷が可能です。
Syntaxを有効にした状態でカラープリンターに出力してやれば、クライアントもビックリ。
唯一の問題はこれがvimの機能だということ笑
「vimだと作業効率が落ちまくる!」という方はまた別の手を考えてください。
で、最後の課題「ブログにソースを載せる時」はどうしようと色々スタイルシートを弄っていたら
今日いいサイトを発見しました。
SorceCode Formatter http://www.manoli.net/csharpformat/
このサイトの入力欄に自分のソースコードをペーストすると、それがスタイルシートで装飾されて出力されます。
出力例↓
出力されたHTMLのソースをブログの入力欄にコピペするだけで↓こんな感じ
1: #region Copyright ゥ 2001-2003 Jean-Claude Manoli [jc@manoli.net]
2: /*
3: */
4: #endregion
5:
6: using System;
7: using System.IO;
8: using System.Text;
9: using System.Text.RegularExpressions;
10:
11: namespace Manoli.Utils.CSharpFormat
12: {
13: /// <summary>
14: /// Provides a base class for formatting most programming languages.
15: /// </summary>
16: public abstract class CodeFormat : SourceFormat
17: {
18: protected abstract string Keywords
19: {
20: get;
21: }
22:
23:
24:
25: /// <summary/>
26: public CodeFormat()
27: {
28: //generate the keyword and preprocessor regexes from the keyword lists
29: Regex r;
30: r = new Regex(@"\w+|#\w+|#(\\s\*\w+)+");
31: string regKeyword = r.Replace(Keywords, @"(?<=^|\W)$0(?=\W)");
32: string regPreproc = r.Replace(Preprocessors, @"(?<=^|\s)$0(?=\s|$)");
33: r = new Regex(@" +");
34: regKeyword = r.Replace(regKeyword, @"|");
35: regPreproc = r.Replace(regPreproc, @"|");
36:
37: // Regex r = new Regex(@" +");
38: // string regKeyword = r.Replace(Keywords, @"|");
39: // string regPreproc = r.Replace(Preprocessors, @"|");
40:
41: //build a master regex with capturing groups
42: StringBuilder regAll = new StringBuilder();
43: regAll.Append("(");
44: regAll.Append(CommentRegEx);
45: regAll.Append(")|(");
46: regAll.Append(StringRegEx);
47: if (regPreproc != string.Empty)
48: {
49: regAll.Append(")|(");
50: regAll.Append(regPreproc);
51: }
かなりスッキリ見やすいです。
対応しているのはC#,VB,HTML,XMLとありますが、ソースを見たところ他の言語に対応させる事を
想定しているようで、作者の今後に期待。(自分で追加するのもそれほど大変ではないはずです。)
あたりまえですが、何を使っても見易く綺麗になるのは見た目だけ。
中身がスパゲッティだと効果も半減です。
・・・厳し〜