#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として持ち、列内にはリンク情報を埋め込む案

Front page   Edit Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes