キーワードリストとテンプレートからMarkdownのアンカーを生成する
id
属性値を改良。キーワードを小文字化しスペースを_
に置換。
成果物
前回
手順
template.md
<a name="{{keyword}}"></a> ## [{{keyword}}](#{{id}}) \`\`\`sql pragma {{keyword}}; pragma {{keyword}} = 真偽値; \`\`\`
run.sh
echo -e "key word1\nkey word 2\n k e y w o r d 3 \nK EYwoRD4" > keywords.txt echo "" > result.md IFS=$'\n' for k in `cat keywords.txt`; do keyword="${k}" id="`echo ${k,,} | xargs | sed -e 's/ /_/g'`" mo template.md >> result.md done
chmod 755 run.sh ./run.sh
cat result.md
<a name="key word1"></a> ## [key word1](#key_word1) \`\`\`sql pragma key word1; pragma key word1 = 真偽値; \`\`\` <a name="key word 2"></a> ## [key word 2](#key_word_2) \`\`\`sql pragma key word 2; pragma key word 2 = 真偽値; \`\`\` <a name=" k e y w o r d 3 "></a> ## [ k e y w o r d 3 ](#k_e_y_w_o_r_d_3) \`\`\`sql pragma k e y w o r d 3 ; pragma k e y w o r d 3 = 真偽値; \`\`\` <a name="K EYwoRD4"></a> ## [K EYwoRD4](#k_eyword4) \`\`\`sql pragma K EYwoRD4; pragma K EYwoRD4 = 真偽値; \`\`\`
HTMLのid
属性値における書式
- キャメルケース:
AaBb
- チェーンケース:
-
- スネークケース:
_
大文字と小文字は区別される。ただしid
は一意に特定するという特性上、大文字と小文字を区別させただけのパターンが存在するとミスが生じやすい。そこで、まずキャメルケースは対象外。
次に、チェーンケースも対象外。命名規則として別に問題はないが、プログラミング言語における変数名は大抵[A-Za-z_][A-Za-z_0-9]+
である。HTMLはしばしば他言語によって解析される。キーになるid
値をそのまま変数名として使えるほうが良い場合もある。新しい命名規則を覚えずともよい。
スネークケースはPythonなどの言語において命名規則としても使われている。これに統一する。よって最終的には以下のルールにする。
- 小文字に統一
- 単語デリミタは
_
(スネークケース)
細かいルール
- 先頭と末尾にあるスペースは無視される(先頭と末尾を
_
にしない) - 間に複数のスペースがあっても1字とみなす(複数の
_
にしない)
課題
- キーワードの先頭が数字
- 数字を英単語にする?
- 数字を末尾に移動させる?
- 先頭に
_
を挿入する? - HTML的には問題ないから放置でOK?
- キーワードが英数字以外
- 順序つきにしたい
- ツリー構造にしたい
- ツリー構造で順序つきにしたい
- 順序キーの表示を任意に変更したい(数字、英字、ギリシャ数字、……)
- 本文の編集をリアルタイムに反映してほしい(見出しを抽出してTOCとして作成)
大項目1 中項目1 小項目1 小項目2 中項目2 大項目2
1. 大項目1 1. 中項目1 1. 小項目1 2. 小項目2 2. 中項目1 2. 大項目1
1. 大項目1 1-1. 中項目1 1-1-1. 小項目1 1-1-1. 小項目2 1-2. 中項目1 2. 大項目1
1. 大項目1 1-A. 中項目1 1-A-i. 小項目1 1-A-ii. 小項目2 1-B. 中項目1 2. 大項目1 2-ア. 中項目1
1 大項目1 1.1 中項目1 1.1.1 小項目1 1.1.1 小項目2 1.2 中項目1 2 大項目1
もうTOC作成ツールか、新しい軽量マークアップ言語・パーサ・エディタをつくるしかない?
対象環境
- Raspbierry pi 3 Model B+
- Raspbian stretch 9.0 2018-11-13
- bash 4.4.12(1)-release
- SQLite 3.29.0
- MeCab 0.996ユーザ辞書
$ uname -a Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux
前回まで
- SQLite3学習 俯瞰まとめ
- SQLite3学習 環境構築まとめ
- SQLite3学習 インタフェースまとめ(C言語、CLI、対話モード、Tcl...)
- SQLite3学習 ドットコマンドまとめ
- SQLite3学習 JSON拡張まとめ
- SQLite3学習 FTSまとめ(ICU, MeCab)
- SQLite3学習 再帰クエリ(WITH RECURSIVE)
- SQLite3学習 R-Treeモジュール
- SQLite3学習 Geopoly(2次元ベクタ画像の生成)
- SQLite3学習 拡張関数(generate_series)
- SQLite3学習 拡張ライブラリ数学関数(extension-functions.c)
- SQLite3学習 謎と名前
- SQL文の分類(DDL,DML,TCL,DCL)
- SQL構文 alter(rename)
- SQL構文 alter(add column)概要
- SQL構文 alter(add column)制約
- SQL構文 alter(add column)sqlite_master変更しても反映されない
- SQL構文 alter(add column)スキーマ再定義(テーブル再作成による定義変更)
- SQL構文 analyze
- SQL構文 attach/detach
- SQLite3構文 begin,end,commit,rollback,savepoint(deferred,immediate,exclusive)
- SQLite3構文 コメント
- SQLite3構文 create/drop
- SQLite3構文 index(create/drop)
- SQLite3構文 table(create/drop)
- SQLite3構文 列制約(default)
- SQLite3構文 列制約(collate)
- SQLite3構文 列制約(primary key)
- SQLite3構文 列制約(primary key)ベストプラクティス
- SQLite3構文 列制約(unique)
- SQLite3構文 列制約(not null)
- SQLite3構文 列制約(check)
- SQLite3構文 列制約(foreign key references)
- SQLite3構文 表制約(primary key, unique, check, foreign key)
- SQLite3でメタデータを取得する方法(DB名(スキーマ名)、テーブル名、列名、制約)
- SQLite3でTEMPの保存先を指定する
- SQLite3構文 delete
- SQLite3ビルド失敗(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3をソースからビルドする(SQLITE_ENABLE_UPDATE_DELETE_LIMIT)
- SQLite3構文 delete(limit offset, order by)
- SQLite3クエリプランニング(インデックスの働き)
- SQLite3構文 explain
- SQLite構文 expression
- SQLite構文 expression(リテラル)
- SQLite構文 expression(パラメータ)
- SQLite構文 expression(演算子)
- SQLite構文 expression(like 句)
- SQLite構文 expression(glob 句)
- SQLite構文 expression(regexp 句)
- SQLite構文 expression(match 句)
- SQLite構文 expression(is 句)
- SQLite構文 expression(in 句)
- SQLite構文 expression(between 句)
- SQLite構文 expression(case 句)
- SQLite構文 expression(exists 句)
- SQLite構文 expression(サブクエリ)
- SQLite構文 expression(cast)
- SQLite構文 indexed by
- SQLite構文 insert
- SQLite構文 pragma