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/ApplicationSupport/CotEditor/ScriptMenu/ の下に置きます。@rという名前が含まれているので、コマンド+rキーでショートカットできます。

rest_preview.@r.py

  # %%%{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')
  css_file = os.path.join(HOME_DIR, 'Dropbox', 'basic.css')
  extra_settings = None
  if os.path.isfile(css_file):
      extra_settings = dict(
              stylesheet_path=css_file,
          )

  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,
              settings_overrides=extra_settings
          )

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

  import commands

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

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

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

#2009/04/24 cssを適用できるように修正した

2009/04/24 19:21 by nakai
おすすめは rst2pdf
2009/04/27 22:08 by makoto
htmlで公開することがおおいからrst2htmlを使ってる。PDF用途だったらrst2pdfだろうな。
あと、reStructuredTextでページ送りする方法がよくわからないからCSSでページ送りしてSafariからPDFを出すことが多い:)