ReSTのプレビュー

2007年09月09日(日) 22:27

Python人が愛してやまないReStructuredTextという構造化テキストがあります。


Djangoのドキュメントや、PythonのPEPと呼ばれるプロポーザルドキュメント等、様々な用途に利用されています。Pythonの人は原稿を書くときにも好んでReStructuredTextを使うようです。


構造化テキストは、簡単に言えばWiki記法、はてな記法のようなものです。ReStructuredTextはそのままテキストで見てもわかりやすいように考慮された記法です(非常にPythonらしい記法です)。


ReStructuredTextで作成したドキュメントは、Docutilsというライブラリを使ってコンパイルできます。Django用に作成するアプリケーションにソースコードドキュメントとしてReStructuredTextで書くと、Adminでドキュメントとして参照できたりしますので、Docutilsはぜひインストールしておいてください。


ReStructuredTextはDjangoのAdminやフラットページで利用するのは非常に便利なのですが、書いている最中にある程度の出来上がりや構文エラーがないかどうかを確認する際に少し面倒があります。
通常はコマンドラインからdocutils付属のスクリプトに「構造化テキストを保存しているファイル名」と「出力するHTMLファイル名」を渡してコンパイルをしなければいけません。
しかも、出力されたファイルをブラウザで開かなければなりません。


今まではMarkdownという別の構造化テキストをプレビューできる機能付きのSmultronというエディタのソースコードを、mopemopeさんがクイックハックし、ReStructuredTextに対応させたものを利用していました。


Smultonは、複数のファイルを一つのウィンドウで扱える便利なエディタですが、行数が増えるに従って微妙に行番号の位置がずれていくといった問題が私の環境では発生していました。


TextMateが日本語をうまく扱えないこともあって、簡単なテキストやブログのエントリはCotEditorという日本人が作っているエディタを普段使っています。このCotEditorはAppleScript以外にもPerlやRuby、Pythonのスクリプトを実行できますし、ウィンドウを半透明にできたりもします。


以下は、CotEditorからdocutilsを操ってプレビューさせるスクリプトです。rest_preview.@r.pyというファイル名で ~/Library/Application\ Support/CotEditor/ScriptMenu/ の下に置きます。@rという名前が含まれているので、コマンド+rキーでショートカットできます。


#!/Library/Frameworks/Python.framework/Versions/Current/Resources/Python.app/Contents/MacOS/Python

# %%%{CotEditorXInput=AllText}%%%

import os

HOME_DIR = os.environ['HOME']
if not HOME_DIR:
    HOME_DIR = '/var/tmp'
output_file = os.path.join(HOME_DIR, 'cot_rest.html')

try:
    import locale
    locale.setlocale(locale.LC_ALL, '')
except:
    pass

from docutils.core import publish_cmdline, default_description

description = ('Generates (X)HTML documents from standalone reStructuredText '
               'sources.  ' + default_description)

res = publish_cmdline(writer_name='html', description=description)

file = open(output_file, 'wr')
file.write(res)
file.close()

import commands

commands.getstatusoutput('open %s' % (output_file, ))


CotEditorはどんな文字コードで編集されていても、UTF-8に変換してスクリプトに渡してしまうそうなので、あくまでもプレビューとして使ってください。


さて、デザイン勉強会について書くか!


Feedbacks

Tags