やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

キーワードリストとテンプレートから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作成ツールか、新しい軽量マークアップ言語・パーサ・エディタをつくるしかない?

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux

前回まで