#author("2026-02-03T13:25:27+09:00","","")
#author("2026-02-03T13:26:46+09:00","","")
#contents

* tir tool [#ob030855]

- tir-csv, tir-tsv, tir-gfm # parser
-- parse, unparse
- tir [version|help] # 内部
- tir normalize # 正規形ndjson
- tir parse file.csv # 最適parserを使う
- tir unparse file.csv # 最適parserを使う
- tir-mycsv parse file.csv # parserを指定する
- tir intern # NDJSON -> JSON
- tir extern # JSON -> NDJSON

* tir command 要求仕様 [#a54bc08c]

TIR - Tabular Intermediate Representation

複数の表を含むテキスト表現。plainなtext部分と表をそれぞれブロックとして表現する。というフォーマットを考えてツール群を作成しようと思います。

ツールは概ね次のように考えています。
- parser:コマンドです。csv, tsv, gfm, html, excel <-> tir 変換します。
-- 名前はtir-csvとか、tir-で始まります。
- 対話型エディタ:(neo)vim plugin <-> tir
- tir-tool群:コマンドtir: sed, awk みたいなパイプで繋いでtirを加工する
-- 入力はstdin, 出力はstdout です。
-- これも名前はtir-で始まります。parserもこれの一種です。

parserはファイルタイプに応じていろいろ用意します。
csvでも方言がいろいろあるので方言を利用したい人にはにコマンドを作ってもらいます。
parserには機能が二つあって、
1. parse:引数に指定したファイルをtir形式に変換してstdoutに出力する
1. unparse:stdinからtirを読み込んで引数に指定したファイルに書き戻す
細かなオプションはつくりません。オプションが必要な場合はtir-toolで繋ぐか、それらをまとめたshellスクリプトを作ることを考えています。

対話型エディタはnvimプラグインのtirenviを開発中です。
ここでファイルを開くとコマンドtirを利用してファイルの拡張子、内容などから最適なパーサーを選んで起動して利用します。

tir-tool群もコマンドです。次のようなコマンドを考えています。
- 非正規形NDJSONを正規形NDJSONに変換する
- 正規形NDJSONを内部処理形JSONに変換する
- tirからplain|gridブロックだけ抜き出す
- ファイルを指定して最適なパーサーを選んで実行する(parse, unparse)
- 必要に応じてサプコマンドを増やして充実させたいです
- 簡易言語を読み込んで実行する形式が良いかもしれません
- コマンドはtir sub-command-name option ... の形式。コマンド内部でsub-commad-name optionなどを解析してツール群のコマンドを実行制御して結果を返す
- gitにインスパイアされて似たような仕掛けができればよいと考えています。
- ここはいろいろ機能を考えると頭が爆発します。

いま迷っているのはこのtir-tool群のコマンド文法をどうしようか?ってところです。
将来的に拡張可能で統一的な良い案があれば教えてください。

* filter [#mc6403e5]

- [[jq:https://jqlang.org/]]

 cat input.ndjson | jq 'select(.kind != "plain")' > output.ndjson


* V02 [#v4e58ba8]

- tir validate
-- in : stdin, ndjson, json
-- out : stdout, ok
-- error : stderr, ng
-- process : 仕様にあっているか厳密にチェックする

- tir plain|grid n convert
-- plain|grid block n をgrid|plain blockにする
-- n=-1 の場合は全plain|grid対象

- tir plain|grid n remove
-- plain|grid block n を削除する
-- n=-1 の場合は全plain|grid対象

- tir join
-- 連続したgridを結合する

- tir script : スクリプト言語サポート

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS