「LTsv_doc」は「LTsv10kanedit(tsvtool10)」を用いたドキュメントジェネレーターです。
version(branch):20170119R141608 modify:20170128S130712
目次
⓪-2.その他現在わかっている不具合や今後の課題
「Tahrpup6.0.5,Python2.7.6,vim.gtk7.4.52(vim-gtk)」および「Wine1.7.18,Python3.4.4,gvim8.0.134(KaoriYa)」で開発しています。Windows,cygwin,darwin,MacOSなどでの動作は確認しておりません。
フォント(グリフ)「kan5x5comic」は半角と全角の幅の比率が約5:3(1024:624)なのでアスキーアートで問題になる場合があります。グリフ不足で表示できない文字などあります。
「kan5x5comic.ttf」と「kan5x5.ttf」を同時に入れると麻雀牌が表示されない(「kan5x5.ttf」の絵文字代替4x5文字が優先される)場合があります。
私用領域と呼ばれる環境に左右される文字コードを漢直鍵盤の制御に用いてます。「kan5x5comic.ttf」を用意しないとソースが見辛い可能性があります。
人名に使える漢字の異体字を漢字配列「LTsv/kanmap.tsv」から単漢字辞書「LTsv/kanchar.tsv」に移管作業中。なので漢直鍵盤の漢字配列「LTsv/kanmap.tsv」が大幅に変更するかも。
マウスボタンの取得は保留。ホイールの取得は放置。tkk方面は手を出さない予定(コンボボックスなどはGTKのみサポート)。
GTKのコールバックから受けとる構造体を扱う方法が不明のため、GUIイベント経由のPCキーボード取得やファイルダイアログからのキャンセル取得などが不明。
「docs/」フォルダ内のドキュメントを「docs/kanedit_etc.tsv」ベースで描き直し中。執筆途中状態の関数一覧タグ解説項目あり。
「LTsv/LTsv_doc.py」でタグの順序が厳格という問題があるのでいっその事スクリプト言語ごと新規に作ろうと思います(TSFの開発)。
LTsv版の「kanedit.py」の開発を凍結してTSF版の「kanedit」を作成する予定です。言語の開発には時間が必要なので、平行してVim版「LTsv/kanedit.vim」も開発です。
「LTsv/kanedit.vim」と「kanedit.py」とで操作方法が乖離してますがTSF版もVim版の方向になるべく揃える予定です。LTsv版は互換性の維持程度に止まると思います。
- プログラミング言語「TSF_Tab-Separated-Forth」開発予定。
- https://github.com/ooblog/TSF1KEV
TSF版作る前に漢字配列「LTsv/kanmap.tsv」のグリフ圧縮アルゴリズムを「5x10x」から「5x10x20x」に変更したいので、移行ツール作成→一時的に無圧縮→新アルゴリズムのグリフと交換などの間多少の混乱が発生するかと思います。
①-0.「LTsv_doc」の使い方

LTsv_docドキュメントを編集して保存してからボタンを押すと置換開始。
LTsv_docドキュメントの詳細は「②-2.LTsv_docドキュメントの書き方」を参考。
-
「LTsv_doc.tsv」ボタン
-
「README.md」のドキュメント作成。出力先は「LTsv/testfile/README.md」
-
「../docs/kanedit_etc.tsv」ボタン
-
「LTsv10kanedit(tsvtool10)」のドキュメント作成。
-
「../../ooblog.github.io/yakuyon.tsv」ボタン
-
「約四文字」のドキュメント作成。
-
「edit」ボタン
-
各ボタンのLTsv_docドキュメントを編集。
ボタン編集(LTsv_docドキュメントの登録)は「LTsv/LTsv_doc.tsv」を編集。詳細は「②-1.「LTsv_doc.tsv」のタグ解説」を参考。
②-0.「LTsv_doc.py」の関数一覧
「LTsv/LTsv_doc.py」はモジュールそのものというよりは、モジュールのドキュメントを作成(関数一覧を作成)するソフトです。
・ファイル名と同名のタグを作成すると項目一覧ページを作成します(現在Pythonと「L:Tsv」ファイルのみ)。
・項目一覧ページの、例えばPythonのdef一覧とかは、ランチャーで更新する度に項目を入れ替えるので、目視で関数増減チェックする手間が軽減されます。
・「約四文字」(http://ooblog.github.io/)のサイトもLTsv_docドキュメントによる生成で置き換える予定。
- LTsvDOClaunch_kernel_regularexpression(LTsvDOC_outname,LTsvDOC_tagnames)
-
置換処理のコア部分。ファイル名分岐やタグセパレート繰り返しのカウンター処理など。
- LTsvDOCdef_python(LTsvDOClaunch_deffile)
-
Pythonのソースから「def 」で始まる行を抜き出して関数一覧を取得。
- LTsvDOCdef_vim(LTsvDOClaunch_deffile)
-
Vimスクリプトのソースから「function」で始まる行を抜き出して関数一覧を取得。
- LTsvDOCdef_LTSV(LTsvDOClaunch_deffile)
-
「L:Tsv」のソースからページ名一覧とfirst一覧を抜き出す。firstにラベル「:」が含まれてるページはLTSVとみなしてページ名のみ取得。
- LTsvDOClaunch_kernel_listfile(LTsvDOC_outname,LTsvDOC_tagname)
-
Pythonの関数一覧などに装飾処理。
- LTsvDOClaunch_kernel_listdir(LTsvDOC_outname,LTsvDOC_tagname)
-
未実装。フォルダ指定の場合でファイル一覧を作成する予定。
- LTsvDOClaunch_kernel_listout(LTsvDOC_outname,LTsvDOC_tagname)
-
outlistページタグの時、エイリアスが有ればエイリアスに、無ければファイル名に置換。
- LTsvDOClaunch_kernel_count(window_objvoid=None,window_objptr=None)
-
LTsv_docドキュメント1枚作成毎にwaitを入れる。ドキュメントの設定読込処理も。
- LTsvDOClaunch_shell(LTsvDOClaunch_tsvcount)
-
ランチャーのボタンを押したら「LTsvDOClaunch_kernel_count()」を呼び出す。
- LTsvDOCopen_shell(LTsvDOClaunch_tsvcount)
-
ランチャーのボタンを押したら「LTsv/LTsv_doc.tsv」の「editer」で指定したテキストエディタを呼び出す。
②-1.「LTsv_doc.tsv」のタグ解説
「LTsv/LTsv_doc.tsv」は「LTsv/LTsv_glyph.py」の設定ファイルです。
「README.md」作成のサンプルも兼用です。HTML版を同時作成で、GitHubのmarkdownをブラウザで確認できる風のデモになります。
メタタグ「L:Tsv」のfirst縦軸ラベルの解説。
-
[L:Tsv|
-
「L:Tsv」ファイルの宣言です。
-
1st
-
「LTsv/LTsv_doc.tsv」の設定を書き込む。通常「LTsv_doc」で構わないが今回は「LTsv_doc_this」を指定。「LTsv_doc.py」と衝突するので。
-
[LTsv_doc|
-
「LTsv/LTsv_doc.py」の設定です。ドキュメントの設定ではなくアプリの設定です。
-
window_size
-
ランチャーのウィンドウサイズなどの初期設定「width:600\theight:480\twait:100\tfontsize:24」。waitの感覚が狭すぎるとフリーズするので注意。
-
tsvlist
-
ランチャーに管理させるLTsvファイルのリストを指定。
-
modify
-
ランチャーのボタンを押した時刻を表示することで変換処理を一応行った事を通知。ボタンの時刻が変化してから正しく置換されたか確認。
-
editer
-
「edit」ボタンで表示する
-
[LTsv_doc_this|
-
「LTsv/LTsv_doc.tsv」の設定です。アプリの設定とドキュメント混在は後述の「skplist」機能のテストや解説役を兼ねてるのでご理解。
-
main
-
置換される前の元文書。今回は「<@LTsv_doc_test_main>」。
-
tagseparate
-
ループタグ作成用のタグ区切りを指定。「LTsv/LTsv_doc.tsv」では「*」を使用。
-
skplist
-
使用しないタグの追加(tsv)。初期状態で「L:Tsv」とmainで指定したメインタグ例えば「<@LTsv_doc_main>」は置換対象にならない。今回「LTsv/LTsv_doc.py」の設定ページ「LTsv_doc」を混ぜてるのでリストに追加してる。
-
outdir
-
置換されたテキストの出力先フォルダ。
-
outlist
-
置換されたテキストの出力ファイル名一覧(tsv)。
tsvのファイル名一覧の代わりに「<@LTsv_doc_test_outlist>」の様にファイル一覧ページのタグ指定もできる。
ファイル一覧ページでは、firstのファイルパスに加えrestでエイリアスが設定可能。
ドキュメント内でoutlistタグを呼び出すとエイリアス(エイリアス指定が無い場合はファイルパス)に置換される。
-
defdir
-
Pythonのモジュール等が置いてあるフォルダ。
-
deftag
-
モジュールファイル名をタグ化するため左右に付けるソルト。例えば「foo.py」を「L:<!\tR:>」で囲って「<!foo.py>」のようにする。
-
defindent
-
モジュール関数一覧と説明文に装飾するテキスト。「firstL」「firstR」は項目名の左右に。「restL:」「restR」は説明文の左右。「restC」は説明文の「/t」を改行などに置換用。「restRLast」は説明文末尾の「restR」。改行調整用。
-
LTsvver
-
バージョン名「LTsv_file_ver()」に置換するタグの設定。初期設定は「<@L:TsvLTsvver>」。
詳細は「
③-0.「LTsv_file.py」の関数一覧」参考。
-
[<@LTsv_doc_test_main>|
-
置換される前の元文書(main)。以降の置換タグで文章が置換される。以降「README.md」作成のLTsv_docドキュメントのサンプル。
-
[<?LTsv_MD_header>|
-
ファイル拡張子がhtml(正規表現で「.+\.html?」)の時だけHTML5ヘッダを追加。ここで分岐タグ出現。
-
[<#LTsv_HTML_header>|
-
-
簡略したHTML5ヘッダ本文。「<body>」タグまで。
-
[<?LTsv_MD_footer>|
-
ファイル拡張子がhtml(正規表現で「.+\.html?」)の時だけフッターを追加。
-
[<#LTsv_HTML_footer>|
-
「</body></html>」閉じるタグ。フッターがあれば追記。
-
[<?LTsv_MD_H1:LTsv10kanedit>|
-
「<h1>」タグの記述。markdownだと先頭の「#」。ここから内包タグ出現。
-
[<?LTsv_MD_H2:kanedit>*<?LTsv_MD_H2:kanfont>*<?LTsv_MD_H2:kanzip>*<?LTsv_MD_H2:kanmap>*<?LTsv_MD_H2:LTsv_doc>*<?LTsv_MD_H2:KEV>*<?LTsv_MD_H2:environment>*<?LTsv_MD_H2:LICENSE>|
-
「<h2>」タグの記述。markdownだと行先頭に「#」。「*」は「tagseparate」による繰り返し記述。
「tagseparate」の詳細は「②-2.LTsv_docドキュメントの書き方」を参考。
カウンター「@c」の詳細は「
④-1.日時フォーマットの概要」を参考。
-
[<?LTsv_MD_IMG:kanedit>*<?LTsv_MD_IMG:kanfont>*<?LTsv_MD_IMG:kanzip>*<?LTsv_MD_IMG:kanmap>*<?LTsv_MD_IMG:LTsv_doc>*<?LTsv_MD_IMG:KEV>|
-
「<img>」タグの記述。markdownだと「」。画像を表示するので「raw」系リンク。
-
[<?https/kanedit>*<?https/kanfont>*<?https/kanzip>*<?https/kanmap>*<?https/LTsv_doc>*<?https/LTsv10>*<?https/KEV>|
-
「<a>」タグの記述。markdownだと「[text](href "title")」。「github.com」リンクと「github.io」リンクの両方を用意。
-
[<?https/kanchar>*<?https/kanedit.vim>*<?https/LTsv_doc_py>*<?https/kanedit_etc>*<?https/LTsv10LICENSE>|
-
こちらも「<a>」タグの記述。ドキュメント以外の「github.com(「blob」系)」リンク。
-
[<?ooblog:LTsv10repository_raw>*<?ooblog:LTsv10repository_blob>|
-
「github.com」のリンクで「raw」系と「blob」系のURL差分。
-
[<?https/htmldoc>|
-
普通に「https://github.com/ooblog/LTsv10kanedit/」へのリンク。内包タグは外部参照できないのでリンク等を外に置くパターン。
-
[<?ooblog:LTsv10repository_txt>|
-
リンクテキスト「「LTsv10kanedit(tsvtool10)」は「L:Tsv」の読み書きを中心としたモジュール群です。」。
-
[<?ooblog:LTsv10repository_url>|
-
リンクURL「https://github.com/ooblog/LTsv10kanedit/」。
-
[<?https/japanpost>*<?https/fontforge>*<?https/LTsv10kanedit>*<?https/TSF1KEV>|
-
「L:Tsv」以外のサイトへのリンク枠。
-
[<?P>|
-
「<p>」タグの記述。
-
[<?/PP>|
-
「</p><p>」タグの記述。
-
[<?/P>|
-
「</p>」タグの記述。
-
[<?BR>|
-
「<br />」タグの記述。markdownだと行末に「 」(空白2つ)。
-
[<@LTsv_doc_test_outlist>|
-
ファイルの出力先。「testfile/README.md」「testfile/README.html」。
②-2.LTsv_docドキュメントの書き方
前提は「L:Tsv」なので「<?contents/LTsv_doc:aboutLTsv-1>」も確認。
「main」で指定したページの内容をタグ名で置換していくことで目的の文章を作成します。
タグ名自体はかなり自由に変更できますが、命名規則に規則性があると説明がしやすいので便宜上のルールを用いた解説になります。
置換タグ説明の前にskplistに登録され置換対象にならないタグがあります。
-
<L:Tsv>
-
「L:Tsv」は「L:Tsv」ファイルのメタタグなのでskplist対象なので置換されません。
-
<LTsv_doc_this>(L:Tsv 1st)
-
「1st」で指定するLTsv_docドキュメント設定ページのタグもskplist対象なので置換されません。
-
<@LTsv_doc_main>(main)
-
「main」指定のページタグ自身もskplist対象なので置換されません。「LTsv_doc」に再帰は存在せず、上から順に置換するのみです。
-
<LTsv_doc>(skplist)
-
その他置換対象から外したいページをskplistに登録できます。
例えば 「LTsv/LTsv_doc.tsv」ではskplistに「LTsv_doc」を登録してるので設定ページは置換されません。
分類すると5種類の置換タグがあるものとします。
-
<「@」tag>
-
コンフィグタグと便宜上命名。「main<@LTsv_doc_main>」「outlist<@LTsv_doc_outlist>」「LTsvver<@L:TsvLTsvver>」といったドキュメント本文ではなくメタ的な内容のページタグ。
-
<「#」tag>
-
コメントタグと便宜上命名。タブ文字「\t」を含まないページはタグをページ内容に置換。複数行を想定なので末尾に改行が入る。
-
<「!」tag>
-
ファイルタグと便宜上命名。ファイル名を「deftag」ソルトで囲んだタグはモジュール関数一覧管理用途。
置換用タグは「<!tag>」形式でもドキュメントのページタグは「[tag|」「|tag]」形式な事に注意。
ページ内容は「*.py」「*.tsv」「*.ltsv」の場合「defindent」で装飾して置換。
「*.png」「*.gif」「*.jpg」「*.jpeg」の場合base64に変換。htmlへの画像埋め込みを想定。画像を再度読み込む場合はページを空にする。
-
<「?」tag>
-
分岐タグと便宜上命名。タブ文字「\t」を含むページは正規表現による分岐が発生。1行を想定なので末尾に改行は入らない。
firstの正規表現にoutlistのファイル名が該当する場合にrest1行に置き換えられます。restには日時フォーマットが使えます。
tagseparateを使った時は日時フォーマットの「@c(カウンター)」が使えます。カウンターは0から開始します。
restを日時フォーマット(カウンター)で置換した結果ページタグ名になった場合、当然の様にページタグの置換対象。
日時フォーマットの詳細は「
④-1.日時フォーマットの概要」を参考。Pythonで使える正規表現はPythonのドキュメントを参考。
-
<「$」tag>
-
内包タグと便宜上命名。置換結果をさらに置換します。分岐タグのコロン「:」が先頭のfirstがタグrestが置換内容。
内包タグは分岐タグの内部でしか使えませんが、使い回さないデータの圧縮および置換処理の高速化に繋がります。
- 6.2. re — 正規表現操作 — Python 3.5.2 ドキュメント
- http://docs.python.jp/3/library/re.html
tagseparateによる繰り返し記述でタグの過剰生産を抑制します。
同じ構文をコピペすると一見楽なのですが、1箇所修正するつもりがコピペの回数分再度コピペ(加えてコピペ漏れ)のリスクがつきまといます。
[<?tagA>|
.+\.html? <a href="#text0" title="data-a">data-a</a>
.* data-a
|<?tagA>]
[<?tagB>|
.+\.html? <a href="#text1" title="data-b">data-b</a>
.* data-b
|<?tagB>]
[<?tagC>|
.+\.html? <a href="#text2" title="data-c">data-c</a>
.* data-a ←コピペ漏れ
|<?tagC>]
tagseparateを用いることで同じ構文の繰り返しとデータの分離ができるのですが、タグが増える事で読みづらくなるデメリットがあります。
[<?tagA>*<?tagB>*<?tagC>|
.+\.html? <a href="#text@c" title="<?text@c>"><?text@c></a>
.* <?text@c>
|<?tagA>*<?tagB>*<?tagC>]
[<?text0>|
.* data-a
|<?text0>]
[<?text1>|
.* data-b
|<?text1>]
[<?text2>|
.* data-c
|<?text2>]
内包タグで上記のタグ群をコンパクトにできます。
[<?tagA>*<?tagB>*<?tagC>|
:<$text0> data-a
:<$text1> data-b
:<$text2> data-c
.+\.html? <a href="#text@c" title="<$text@c>"><$text@c></a>
.* <$text@c>
|<?tagA>*<?tagB>*<?tagC>]
③-0.「LTsv_doc」のFAQ
-
Q.「LTsv/LTsv_doc.py」で置換されないタグが山ほど。
-
A.タグに実行順番があるので、後発ページ内容を先発タグで置換できない問題があります。当面は手動で並び替えです。
タグの順番を仮に解決できたとして今度は再帰無限ループをどう解決するのかという問題があるのですorz