scorethai directive

Contents

これは reStructuredText(以下rest)の rest2html.py を拡張してタイ式楽譜のテーブルを生成するディレクティブを追加したもの。

1   ファイル

scorethai.py
スクリプト本体。
scorethai.css, 等の *.css
スタイルシートのサンプルと、docutils付属のスタイル。
sample.txt, 等の *.txt
記述サンプル。出力結果: sample.html
scorethai.zip
全ファイルのアーカイヴ。

2   サンプルの生成

上記のファイルがあるディレクトリで:

> python scorethai.py --stylesheet=index.css sample.txt sample.html

と実行すると sample.html が生成される。

オプションとして使いそうなのは:

--stylesheet=filename
 スタイルシートのファイル名
--language=en meta情報に言語を指定する。今はまだthが無いのでen。
--link-stylesheet
 スタイルシートを埋め込まずに "link rel" する。
--traceback スクリプトがエラーを起こしたらトレースバックして問題を探す。

3   scorethai ディレクティブ

このスクリプトでは、restパーサーに以下のディレクティブを一つだけ追加している。

書式:

.. scorethai:: キャプション、無くても良い
   :title: ヘッダ文字列
   :columns: 表本体の列数
   :widths: 各列の幅の並び
   :class: 表に付加するクラス名
   :id: 曲id(まだ未使用)

   楽譜本体ブロック

3.1   オプション

title
テーブルのヘッダに入る文字列。無ければヘッダ無しになる。
columns
小節の一行内の列数。この列数で改行される。1以上の整数。デフォルト8。
widths
各列の幅をカンマ区切りの整数で指定。%値として解釈される。 これを省略したら均等に計算されるが、結果が変な値になる場合は指定する。
class
表に付加されるクラス名。cssで複数の種類の書式を使い分ける時に使用。 デフォルトのクラス名"scorethai"に更に付加される。
id
まだ未使用。

3.2   楽譜本体の書式

  • 楽譜本体はカンマ "," で区切った小節の並び。これらがテーブルの各セルに入る。
  • columns で指定された列数を満たすと改行される。
  • また、行末にスラッシュ"/"を置くと強制改行となる。
  • 一拍ごとにスペースで区切る。
  • 行頭が ": 文字列" の行はテキスト行となり、それだけで一行となる。
  • ^ に続く非スペースの文字列はマークの扱いになる。

3.3   もう少し複雑な楽譜

出力サンプルのうち、ケーンの独奏を採譜したものでは音符の属性などのもう少し複雑な記述をしている。

音符の属性は任意の範囲の音符を囲んで属性付けするもの。 x< で属性 x をオン、 >x で属性 x をオフ。 x は任意の一文字。 実際には囲まれた範囲に class 'x' を付加するだけなので、クラス名に使える文字で一文字なら何でも追加でき、表示はスタイルシート次第となる。

このサンプルではスタイルシート scorethai.css に以下の属性を定義してある。:

/* 音符の属性とそれに対応するタグを定義 */
span.s { font-size: 0.8em; }
span.e { font-weight: bold; }
span.u { text-decoration: underline; }

/* 記号用のタグ(^に続く文字列) */
td span.mark
{
vertical-align: super;
font-size: xx-small;
}

例:上記サンプル楽譜のソースの最初:

: intro
^ซซ่-- s<- - - ร่,- - - -, - - - ร่, - - ร่ ร่, - - ร่ ร่, - - ร่ ร่,
- - ร่ ร่, {- ด่ ล ซ}>s^4,{- ม ร ด}^3, ม^ล  ด ร ซ^ด่, {ม^ล  ซ^ด่  ร ซ^ด่ }^7,
  • このサンプルでは s<>s で囲まれた範囲の音符(属性s)は単音(シングルノート)の意味で、 スタイルシートの記述によって小さい文字で表示している。
  • 属性eは強調表示になり、繰り返し部分を見やすくする為に使っている。
  • 属性uはある特定の和音を入れる意味で使っている。

これらの属性の範囲が複数小節にまたがった場合、小節の境目で終了タグが出力されるが、 次の小節で再び継続するように開始タグが挿入される。 念のためにスクリプトは属性のオン・オフが対応しない場合は警告を表示する。

上記の例の ^ซซ่--^ に続く部分が記号の指定。 このサンプルでは「ここから先、ドローンとして低い ซ と ซ่ の音を出しっぱなし」という意味で使っていて、 スタイルシートで上付きの極小サイズの表示になる。

追加:範囲指定ではなく一音だけに属性を付加するのに便利なように、``音符.x`` という表記を加えた。 ด.e とすると、この一音が強調になる。また ล.e.u なら強調+アンダーライン表示になる。

4   履歴

date:2006-12-06 上付き記号を * から ^ に変更。
date:2006-11-30 text.class の書式を追加。
date:2006-11-20 行末の / で改行。それ以外の / はテキストとして扱うように変更。
date:2006-11-14 first.
author:muri@tri6.net