-
Notifications
You must be signed in to change notification settings - Fork 82
SATySFi v0.1.xで行なう破壊的変更の案
T. Suwa edited this page Feb 28, 2019
·
10 revisions
これは開発者による検討用・備忘用のメモです.既に或る程度SATySFiに慣れている人でないと理解できないかもしれません.
-
page
型の廃止:length * length
で置き換え,A4など既定の紙面の寸法はPaper.a4
:length * length
などパッケージレヴェルで与える. - Unicodeコードポイント1つに対応するデータのために
char
型を導入し, 現行のstring-unexplode
:int list -> string
をchar list -> string
に変更するなどする. - 単行コメントアウトを
%
から%-
に変更し,%
から始まるトークンを他の用途に使えるようにする. - 新たなプリミティヴ
concat-graphics
:graphics list -> graphics
を導入し,グラフィックス系のプリミティヴで(… -> graphics list)
という型の函数の引数をとるものはその箇所を(… -> graphics)
に改める. - 数式文字クラス(
math-char-class
)の種類を増やす: PR#163 -
get-initial-context
にデフォルトの文中数式用コマンドを指定しなくてよいようにする. -
mathfonts.satysfi-hash
をmath-fonts.satysfi-hash
に改める.
-
load-image
:string -> image
やload-pdf-image
:string -> int -> image
は絶対パスしか受けつけないようにし,相対パスから絶対パスへの変換はプリプロセスの機能で実現する.現状では相対パスは文書ファイルからみた場所(訂正:v0.0.3
まではSATySFiを起動したディレクトリからみた場所, 遅くともintroduce-multi-stage
ブランチのmerge 以降のmaster
では文書ファイルからみた場所)として扱われるので,文書本体から切り分けられて別のディレクトリに置いてあるソースファイルから外部ファイルを指定したときに相対パスがそのソースファイルからみた場所にならない.これを改善する意図がある. -
line-break
:bool -> bool -> context -> inline-boxes -> block-boxes
の第1・第2引数に与える「段落の直前・直後でページ分割してよいか」とset-paragraph-margin
:length -> length -> context -> context
で与える「段落の前後にどれだけのマージンを入れるか」とでインターフェイスを統一する. -
page-break
に与える情報を整頓する.ヘッダがどうであるとかフッタがどうであるといった具体的な構造を決め打ちした指定方法ではなく,グラフィックスで指定できるようにした方がよさそう. - 縦書き・横書きの共存を目的に,型変数とは別に「縦」か「横」のいずれかをとる 行方向変数 (direction variable) という概念を用意し,型に加える. 例えば
read-inline
:forall 'd. context -> inline-text -> inline-boxes['d]
. - 補助ファイル(に書き込む|から読み込む)情報をデータベース的に名前空間で分けられるようにする.例えば章のラベルと浮動する図のラベルとは別の名前空間に分けて保持できる.これまでは各クラスファイルはユーザから見てラベルの名前空間が分かれているようにするために内部的に接頭辞をつけて補助ファイルに書き込んでいたが,そういう労力を払わなくて済む.また,できれば文字列以外も記録できるようにしたい(原理的には,Haskellの言葉で言うところの
Show
とRead
のインスタンスの型のデータはすべて書き込み・読み込みができる.型システムがボトルネック). -
script
型を廃止し,各UnicodeコードポイントごとにどのOpenTypeのScriptTagに関連づけるかのテーブルをcontextに保持させる.フォント設定(とこれを機に新たに導入する 言語設定)はScriptTagごとに行なう.ただし,OpenTypeのScriptTagとUnicode Script Propertyは互換性がないらしい(前者の方が時代的に先行)のでunidata/Script.txt
をデフォルトのテーブルとして使うには多少難がある. - 複数行にまたがる場合の文字列リテラル(コード例などに使われる)のインデントを処理系側で削らないようにする.除去したい場合はパッケージレヴェルで除去すればよいため.ただし,先頭の改行を除去するかどうかなどのコーナーケースについてよく検討する必要がある.また,プリミティヴ
split-into-lines
:string -> string list
は廃止し,パッケージレヴェルに落とす. - 文字列リテラルに関して,現在は空白を除去しない場合に
#
を,除去する場合に何もつけないという記法をとっているが,これを逆にする.空白を除去したい場合の方が少ないため.ただし,空文字列が#` `#
という長ったらしい書き方になってしまうので,代替案を考える.一般的なプログラミング言語に見られる二重引用符による文字列リテラル"…"
を導入する? -
math-paren
:paren -> paren -> math -> math
のparen = length -> length -> length -> length -> color -> inline-boxes * (length -> length)
をparen = context -> inline-boxes * (length -> length)
に改める. -
math-radical
の平方根の形状を変更できるようにする.
- トップページ
- The SATySFibook Web公開版 第1版
- Wiki
- 目的別パッケージ一覧
- コマンドライン書式
- SATySFiコマンド一覧
- Satyrographos(パッケージマネージャ)
- 新しい言語機能の紹介
- 言語機能の構想