22 дек. 2010 г.

Делаем раскрашенный исходный код для блога при помощи Vim'а

Как я уже писал, я вынужденно попрощался с SyntaxHighlighter'ом и перешел на свое решение для раскраски исходного кода в блоге, которое основано на Vim'е.
В свежем, только что установленном виме есть команда :TOhtml, которая преобразует текст из текущего буфера в HTML-страничку. Эта команда понимает опцию html_use_css, которая заставляет вим раскрашивать исходник при помощи CSS, а не при помощи HTML-кодов - получающийся код выглядит компактнее. Что особенно ценно, исходник подсвечивается теми же цветами, что и в виме.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>~/main.c.html</title>
<meta name="Generator" content="Vim/7.3">
<meta name="plugin-version" content="vim7.3_v7">
<meta name="syntax" content="c">
<meta name="settings" content="use_css">
<style type="text/css">
<!--
pre { font-family: monospace; color: #efefef; background-color: #2a2a2a; }
body { font-family: monospace; color: #efefef; background-color: #2a2a2a; }
.Number { color: #fcaf3e; }
.Statement { color: #ffffff; font-weight: bold; }
.Special { color: #e9b96e; }
.Type { color: #8ae234; font-weight: bold; }
.String { color: #fce94f; }
.PreProc { color: #ffffff; font-weight: bold; }
-->
</style>
</head>
<body>
<pre>
<span class="PreProc">#include </span><span class="String">&lt;stdio.h&gt;</span>

<span class="Type">int</span> main(<span class="Type">int</span> argc, <span class="Type">char</span> * argv[]) {
    printf(<span class="String">&quot;Hello world</span><span class="Special">\n</span><span class="String">&quot;</span>);

    <span class="Statement">return</span> <span class="Number">0</span>;
}
</pre>
</body>
</html>

Чтобы получившийся HTML-код можно было вставить в блог, достаточно удалить из него элементы, относящиеся непосредственно к HTML-странице -  всякие body, head и тому подобные.
<style type="text/css">
<!--
pre { font-family: monospace; color: #efefef; background-color: #2a2a2a; }
.Number { color: #fcaf3e; }
.Statement { color: #ffffff; font-weight: bold; }
.Special { color: #e9b96e; }
.Type { color: #8ae234; font-weight: bold; }
.String { color: #fce94f; }
.PreProc { color: #ffffff; font-weight: bold; }
-->
</style>
<pre>
<span class="PreProc">#include </span><span class="String">&lt;stdio.h&gt;</span>

<span class="Type">int</span> main(<span class="Type">int</span> argc, <span class="Type">char</span> * argv[]) {
    printf(<span class="String">&quot;Hello world</span><span class="Special">\n</span><span class="String">&quot;</span>);

    <span class="Statement">return</span> <span class="Number">0</span>;
}
</pre>

Для удаления всех этих строк я применяю команды редактора ed, благо vi создавался под влиянием редактора ed. Затем полученный код копируется в X-овый буфер (в тот, который используется по Ctrl+C/Ctrl+V, а не по выделению мышкой, вставке средней кнопкой мыши). Естественно, все эти действия повешены на хоткей:
let html_use_css = 1                    "Цвета в выдаче :TOhtml
nmap <C-c>html :TOhtml<CR>:0,/style/-1d<CR>:/body/d<CR>:/<\/head>/,/<\/head>/+1d<CR>:$-1,$d<CR>ggVG"+y:q!<CR>

Посмотреть на расцвеченные исходники, которые получаются по нажатию
<C-c>html можно, взглянув чуть выше)).

Комментариев нет:

Отправить комментарий