Programmable typesetting system on Pastel Stitch programming language
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs
sample
src
.gitignore
LICENSE
README.md

README.md

Epitaphilia

Epitaphilia (エピタフィリア) はプログラマブルな組版システムです。プログラミング言語 パステルステッチ に、PDF 出力のためのプリミティブ演算と、組版のためのライブラリーを追加したものです。

現状では、Epitaphilia を使用するには、パステルステッチの参照実装のメジャーバージョン 5 が必要です。パステルステッチの参照実装の安定版はメジャーバージョン 4 なので、安定版ではなく、開発用のソースコードを取得する必要があります。

現時点での Epitaphilia は技術的な興味から作成したものであり、一般のユーザーが使用するための整備は進んでいません。

リファレンス

使用方法

Epitaphilia を使用するには、パステルステッチ参照実装 5 の pastelstitch-ref5-txt2xml コマンドと pastelstitch-ref5-catxml コマンドが必要である。また、Epitaphilia は epitaphilia コマンドを持つ。

まず、Epitaphilia 形式の文書を foobar.epitaphilia.txt のようなファイル名で保存する。続いて、以下のコマンドで、foobar.epitaphilia.xml ファイルを作成する。

pastelstitch-ref5-txt2xml foobar.epitaphilia.txt foobar.epitaphilia.xml

続いて、以下のコマンドで、パステルステッチのライブラリを結合する。結合後のファイルは foobar.cat.xml とする。

pastelstitch-ref5-catxml standard epitaphilia foobar.epitaphilia.xml foobar.cat.xml

最後に、epitaphilia コマンドを実行する。

epitaphilia foobar.cat.xml

ホスト演算

この節では Epitaphilia のホスト演算を説明する。ホスト演算には、プリミティブ演算とカプセル演算がある。

以下のプリミティブ演算とメソッドディスクリプターの姓は、すべて epitaphilia である。

make pdf surface プリミティブ演算は filename, width, height 引数を取る。filename 引数は省略可能で、省略しないならば文字列である必要がある。width 引数と height 引数は必須で、浮動小数点数である必要がある。filename 引数を指定した場合は、それをファイル名とする PDF ファイルが出力される。filename 引数を省略すると、ダミーのサーフェイスが得られる。width 引数と height 引数の単位はポイントである。このプリミティブ演算はサーフェイスカプセルを返す。

make context プリミティブ演算は main 引数を取る。main 引数は必須で、サーフェイスカプセルである必要がある。このプリミティブ演算はコンテキストカプセルを返す。

コンテキストカプセルは以下のメソッドディスクリプターを持つ。

コンテキストカプセルの type メソッドは main 引数を取る。main 引数が contextepitaphilia 有名ベクトルであるとき真を返す。

コンテキストカプセルの save メソッドは、コンテキストの状態をセーブする。

コンテキストカプセルの restore メソッドは、コンテキストの状態をリストアする。

コンテキストカプセルの select font face メソッドは main 引数を取る。main 引数は必須で、文字列である必要がある。main 引数で指定した名前のフォントを文字列の描画に使用する。

コンテキストカプセルの set font size メソッドは main 引数を取る。main 引数は必須で、浮動小数点数である必要がある。文字の大きさを指定する。単位はポイントである。

コンテキストカプセルの move to メソッドは x 引数と y 引数を取る。x 引数と y 引数は必須で、浮動小数点数である必要がある。描画位置を移動する。単位はポイントである。

コンテキストカプセルの show text メソッドは main 引数を取る。main 引数は必須で、文字列である必要がある。指定された文字列をサーフェイスに印字する。

コンテキストカプセルの get text extents メソッドは main 引数を取る。main 引数は必須で、文字列である必要がある。指定された文字列を印字したときの大きさを、テキストエクステントカプセルとして返す。

テキストエクステントカプセルは以下のメソッドディスクリプターを持つ。

テキストエクステントカプセルの type メソッドは main 引数を取る。main 引数が text extentsepitaphilia 有名ベクトルであるとき、真を返す。

テキストエクステントカプセルの x bearing, y bearing, with, height, x advance, y advance メソッドは、引数を取らず、それぞれ対応する長さを浮動小数点数で返す。単位はポイントである。

エンティティ

印字可能なデータのユニットを「エンティティ」と呼ぶ。エンティティはマップコンテナで、paintepitaphilia キーに対応する値はコンティニュエーションである必要がある。そのコンティニュエーションは、コンティニュエーション引数 context, x, y, come from を受け取る。これらのコンティニュエーション引数はすべて必須である。context 引数はコンテキストカプセルである必要がある。x 引数と y 引数は浮動小数点数である必要がある。come from 引数はコンティニュエーションである必要がある。paint コンティニュエーションの実行が終了すると、come from コンティニュエーションを使って実行位置を戻す。paint コンティニュエーションは、コンテキストカプセルの show text メソッドを用いて印字を実行することが期待される。

エンティティをベクターコンテナに格納したものを「コンテナ」と呼ぶ。エンティティの水平方向の並びを表現したものを「水平コンテナ」、エンティティの垂直方向の並びを表現したものを「垂直コンテナ」、ページの並びを表現したものを「ドキュメントコンテナ」と呼ぶ。

動的スコープアトリビュート

以下の動的スコープアトリビュートを使用できる。動的スコープアトリビュートの姓はすべて epitaphilia である。

horizontal skip 動的スコープアトリビュートは、水平コンテナを配列する間隔である。浮動小数点数で、単位はポイントである。

phisical width 動的スコープアトリビュートは、水平コンテナの物理幅である。浮動小数点数で、単位はポイントである。

logical width 動的スコープアトリビュートは、水平コンテナを折り返す論理幅である。浮動小数点数で、単位はない。

vertical skip 動的スコープアトリビュートは、垂直コンテナを配列する間隔である。浮動小数点数で、単位はポイントである。

phisical height 動的スコープアトリビュートは、垂直コンテナの物理高さである。浮動小数点数で、単位はポイントである。

logical height 動的スコープアトリビュートは、垂直コンテナを改ページする論理高さである。浮動小数点数で、単位はない。

font face 動的スコープアトリビュートは、フォント名を表す文字列である。

italic 動的スコープアトリビュートと bold 動的スコープアトリビュートは、イタリックとボールドを表すブーリアンである。

font size 動的スコープアトリビュートは、フォントのサイズを表す。浮動小数点数で、単位はポイントである。

dummy context 動的スコープアトリビュートは、ダミーのコンテキストである。コンテキストカプセルである必要がある。

ライブラリー

Epitaphilia のライブラリーは以下の手続きを提供する。手続きの姓はすべて epitaphilia である。

from millimeters 手続きは main 引数を取る。main 引数は必須で、浮動小数点数である必要がある。ミリメートルからポイントに単位を換算する。

to millimeters 手続きは main 引数を取る。main 引数は必須で、浮動小数点数である必要がある。ポイントからミリメートルに単位を換算する。

add kanji string 手続きは to 引数と string 引数を取る。いずれの引数も必須で、to は水平コンテナ、string は文字列である必要がある。string 引数の文字列を文字単位に分解してエンティティを生成し、それらのエンティティを水平コンテナに追加する。エンティティの論理幅は 1 である。

make horizontal entity 手続きは metric 引数と string 引数を取る。いずれの引数も必須で、metric は浮動小数点数、string は文字列である必要がある。この手続きは論理幅を持つエンティティを生成する。metric 引数は論理幅である。

make horizontal space 手続きは main 引数を取る。この引数は必須で、浮動小数点数である必要がある。この手続きは、論理幅を持つが、何も印字しないエンティティを生成する。

divide horizontal container 手続きは main 引数を取る。この引数は必須で、水平コンテナである必要がある。エンティティの論理幅の合計が logical width 動的スコープアトリビュートを超えないように水平コンテナを折り返し、垂直コンテナを生成して返す。

add to container 手続きは to 引数と value 引数を取る。いずれの引数も必須で、to はコンテナ (水平コンテナまたは垂直コンテナまたはドキュメントコンテナ)、value はエンティティである必要がある。この手続きはコンテナの末尾にエンティティを追加する。

add horizontal container 手続きは to 引数と value 引数を取る。いずれの引数も必須で、to は垂直コンテナ、value は水平コンテナである必要がある。value 引数の水平コンテナを divide horizontal container 手続きで折り返し、to 引数の垂直コンテナの末尾に追加する。

divide vertical contanier 手続きは main 引数を取る。この引数は必須で、垂直コンテナである必要がある。垂直コンテナに含まれるエンティティの高さを 1 としたとき、高さの合計が logical height 動的スコープアトリビュートを超えないように垂直コンテナを改ページし、ドキュメントコンテナを生成して返す。

make overlay entity 手続きは引数を取らない。この手続きはオーバーレイエンティティを生成して返す。オーバーレイエンティティとは、複数のエンティティを重ねて印字するエンティティである。

add to overlay entity 手続きは to, main, x, y 引数を取る。これらの引数は必須で、to はオーバーレイエンティティ、main はエンティティ、xy は浮動小数点数である必要がある。この手続きはオーバーレイエンティティにエンティティを追加する。xy は相対座標で、単位はポイントである。

make entity 手続きは main 引数を取る。この引数は必須で、コンティニュエーションである必要がある。この手続きは、main 引数を paint コンティニュエーションとするエンティティを生成して返す。

make null entity 手続きは引数を取らない。この手続きは、何も印字しないエンティティを生成して返す。

make nomble entity 手続きは page 引数と caption 引数を取る。これらの引数は必須で、page は自然数、caption は文字列である必要がある。この手続きは、ページの柱を印字するエンティティを生成して返す。

make center horizontal entity 手続きは metric, phisical width, string 引数を取る。これらの引数は必須で、metricphisical width は浮動小数点数、string は文字列である必要がある。metric は論理幅、phisical width は物理幅である。この手続きは、指定された幅の中央に文字列を印字するエンティティを生成して返す。