T.I.D.

Git や GitHub と戯れる、オレオレ的おとなの遊び場

Pygmentで使える言語パーサー

Pygment が色々な言語をハイライト出来ることを最近知ったので、レンダリングを確かめるためのメモ。

言語解析キーワード

コマンドラインでは、pygmentize -L lexers で一覧を出力。

pygmentize -L lexers の出力例
1
2
3
4
5
6
7
Pygments version 1.5, (c) 2006-2011 by Georg Brandl.

Lexers:
~~~~~~~
...(解釈可能な言語の一覧)
* yaml:
    YAML (filenames *.yaml, *.yml)

rbcon (Ruby のコンソール出力)

rbcon
1
2
3
4
5
irb(main):001:0> a = 1
=> 1
irb(main):002:0> puts a
1
=> nil

c, cpp, c++

c++
1
2
3
4
5
6
7
#include <stdio.h>

int main()
{
    printf("Hello world\n");
    return 0;
}

objective-c, objectivec, obj-c, objc

objc
1
2
3
4
5
6
#import <stdio.h>
#import <objc/Object.h>

@interface Test : Object
- (void)method;
@end

bash, sh, ksh, tcsh, csh, console

csh
1
2
3
4
5
6
$ git checkout master
Switched to branch 'master'
$ git log -1
commit 5350862c0d0e11ab765f994e057f4c3c7646c226
Author: tokkonopapa <tokkonopapa@yahoo.com>
Date:   Fri Feb 8 18:33:17 2013 +0900

mysql

mysql
1
2
3
4
CREATE TABLE example (
    id INT,
    data VARCHAR(100)
);

css+php, html+php, js+php, javascript+php

html+php
1
2
3
4
5
6
7
8
<html lang="ja">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <?php require_once "HTTP/Request.php"; ?>
    </body>
</html>

diff

diff
1
2
3
4
5
6
7
8
@@ -120,7 +120,7 @@ def convert(content)
   rd = RDiscount.new(content, *@rdiscount_extensions)
   html = rd.to_html
   if rd.generate_toc and html.include?(@config['rdiscount']['toc_token'])
-    html.gsub!(@config['rdiscount']['toc_token'], rd.toc_content)
+    html.gsub!(@config['rdiscount']['toc_token'], rd.toc_content.force_encoding('utf-8'))
   end
   html

pot, po

po
1
2
3
4
5
6
# LANGUAGE (LOCALE) translation for WordPress.
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../inc/admin.php:79
msgid "%s: You need WordPress 3.1.0 or higher and PHP 5 with libcurl."

http

http
1
2
3
4
5
HTTP/1.1 200 OK
Content-Type: text/plain; charset=utf-8
Content-Length: 12

Hello World

コードの書き方

rdiscount にしろ kramdown にしろ、Octopress のスニペット記述方法は4通り。

1. インライン − バッククォート

シングルのバッククォート ` で囲む。ちなみに、n個のバッククォートを表すには n+1個のバッククォート(と1つの空白)で囲むとのこと。

2. コードブロック − インデント

行頭をタブ、もしくはスペース4文字でインデントさせる。

3. コードブロック − 3連のバッククォート(公式ドキュメント

3連のバッククォート ``` で囲む。

raw
1
2
3
``` [言語] [タイトル] [リンクURL] [リンクのタイトル]
ここにコードスニペット
```

4. コードブロック − codeblock ブロック(公式ドキュメント

{% codeblock TITLE lang:LANG %}{% endcodeblock %} で囲む。

忘れがちなのが {% ... %} が解釈されてレンダリングされないようにする書き方。次の様に raw ブロックで囲む。

{% codeblock [タイトル] [lang:言語] %}
{% raw %}
{% ... %}
{% endraw %}
{% endcodeblock %}

ちなみに 3. と 4. は Pygment でレンダリングされる。

参考情報

Comments