#author("2026-04-22T06:19:14+09:00","","") #author("2026-04-22T06:21:00+09:00","","") #contents ---- draft V0.0.1 * TIRとは [#gb1ebbb2] TIR - Tabular Intermediate Representation 複数の表とテキストを含む中間表現。 UTF8テキスト形式。 NDJSON形式。 次の3種類の要素で構成される。 - 先頭1行目がattr_fileレコード(バージョン情報など) - plainブロック(複数行のテキストで構成される) - gridブロック(1つの表を表す) 上から1行ずつ順番に処理して後戻りを極力排除した逐次処理向けの形式 TIRは文章と表を含んだファイル(例:csv, md(gfm), html, wiki など)間の橋渡し(コンバーター)をすることができる。 TIRエディタ、TIRビューア、TIRツールを開発することが可能で、TIRはこれらのハブとして働く。 TIRではplainブロック内の構造は認識しない。 プラグインの様な形でrendererを使用してplainブロック内の構造を視覚化する方法をサポートする。(将来の計画) * TIR NDJSON(v0.0.1) [#g3c3abb6] - NDJSON形式を満たす - コードはUTF8 - 各行はJSONオブジェクト([[RFC 8259:https://www.rfc-editor.org/rfc/rfc8259]] / ECMA-404) ** NDJSONオブジェクトの種類 [#oaedd5e5] - TIRではオブジェクト種別は3種類に限定され、kind メンバーによって識別する。 -- { "kind":kind, ... } -- kind:= "attr_file" | "plain" | "grid" -- ...: メンバー名付きの値。 - attr_file: バージョン情報などファイル属性 - plain: テキスト1行を表す - grid: 表の1レコードを表す ** 各オブジェクト種類の出現順序 [#he6f23d8] - attr_fileオブジェクトは1行目に1回だけ現れなければならない - その後はplainブロックとgridブロックからなる - attr_fileオブジェクト1行行だけのデーターも認める ** attr_file [#p39fb949] - { "kind":"attr_file", "version":"tir/0.0.1"} - ファイルの属性を表すオブジェクト - parser が作成する - tir_version:= ファイルのtirバージョン。省略不可 -- 最新バージョンに変換するツールを用意する ** plain [#c4f68b56] - "kind":"plain", "line":"xxxxx" - プレーンテキストを表す行 - 内容はline。長さ0以上の文字列。 ** grid [#ae2ff1b4] - { "kind":"grid", "row":[ "cell", "cell", "cell" ] } - 1レコード分の表データー。 - row: 文字列配列。cellの数だけ値を並べる。 - row: 改行(\n)タブ(\t)を含むことができる。 - row: 一つの表ブロック内で列数が一致する必要はない -- 一致しない場合最大列数を表の列数とする -- 不足するcellには空文字をあてる。 * TIR パーサー仕様 [#v47fe23e] - TIRパーサーを作る場合は次の規約に従うことを推奨する。 -- 規約に従っていない場合TIRエディタなどで使用できない場合がある - コマンド形式 - 名前:tir-で始まる。以下例として tir-md とする。 - 使用例 - 使用例:例として名前をtir-mdとする -- tir-md parse file|- :mark down 形式のfile(-の場合stdin)を読み込んでNDJSON形式でstdoutに書き出す -- 成功した場合はstderrには何も表示しない。失敗した場合はstderrに表示する。 --- これで成功、失敗を見分ける -- tir-md unparse file|- :標準入力からNDJSON形式で読み込んでfile(-の場合stdout)に書き出す -- 成功した場合はstderrには何も表示しない。失敗した場合はstderrに表示する。 --- これで成功、失敗を見分ける -- tir-md --version:バージョン表示。1.2.3の様に三つの数字を"."で区切って並べること -- 自作する場合は独自サブコマンドは作らないこと。オプションで対応すること。 ** 実装例 [#qa6993fd] - tir-csv - tir-gfm - tir-pukiwiki * tirエディタ仕様 [#nf8c347f] 独自拡張したTIRファイルを作ってはならない。それ以外は自由。 ** 実装例 [#bbbdfc97] - tirenvi * tirツール [#l2e78511] 現状ではjqを使ってTIRの編集ができる。 jqの使用例:grid, attr_grd だけ抜き出すとか ** 書式拡張案 [#wb5beead] - [[PukiWiki仕様:http://wiki.kibi2.com/html/?FormattingRules#k7c49df4]] - 列ごとの書式指定:配置、前|背景色、フォントサイズ、幅 - セルごとの書式指定:配置、前|背景色、フォントサイズ - 列、行セル結合(span) - header, footer 複数バラバラ指定 PukiWikiではできないこと - 固定行 - caption 表属性は別ファイルにすることを検討中。 表属性とは、列幅、ヘッダ行、配置、その他書式など tirenviでサポートしようとするとセル書式はセル内に埋め込む必要がある - 列削除・移動に連動させるため - 属性情報本体はextmarkとして持ち、列内にはリンク情報を埋め込む案