2017-04-10 10:12 [青葉台旭が作った/プログラム, Markdown] ## 青葉台旭の投稿用Markdown亜種の仕様 自作の静的サイト・ジェネレーターについて。 基本的には、Markdown記法に準じている。 以下に違いを書く。 ### フロント・マターがある 三種類の要素をMarkdown解釈対象外としてファイルの先頭に書くことが出来る。 日付、時間、タグ、である。 先頭に空白行があった場合、まず解釈器はそれを削除する。空白行が連続していたら、 そのすべてが無視される。 次に yyyy-mm-dd または、HH:mm または、[aaa, bbb, ccc] という三種類の形式を、先頭から一行ずつ読みながら探す。 yyyy-mm-dd なら、その行は日付を表し、HH:mm なら時間、[aaa, bbb, ccc] ならタグリストということになる。 上記三種の形式のどれでもないと判断され場合、そこでフロント・マターは終わったという事になり、 空白行を含めて、本文すなわちMarkdown形式の解釈に移る。 ### 記事本文の最初の行は、暗黙のうちに記事タイトルとして解釈される フロント・マターが終わったと解釈すると、次に Markdown の解釈に移るが、この時も先頭の(つまり、 フロント・マターとMarkdown形式の本文との間の)空白行は無視される。空白行が連続していたら、 そのすべてが無視される。 空白行を読み飛ばし、最初に現れた行の先頭にシャープ文字があろうが無かろうが、その行は 記事のタイトルを表すと解釈され、強制的にh2タグに囲まれる。 最初の1行をシャープ記号2つで始めた場合は、明示的にh2すなわち記事タイトルを指定したと 解釈して、本文は2行目以降である。 最初の1行にシャープ記号を付けなかった場合、それは本文の始まりだが、解釈器が勝手に 記事タイトルにした、というストーリーを作った。 つまり最初の1行はタイトルでもあり本文でもある。重複する。 ### Markdown は、sectionタグを使った入れ子構造としてHTML化される Markdown は sectionタグを使った入れ子構造としてHTML化される。 h1~h6タグがセクションとセクションを切り分けるセパレータとして利用される。 また h に続く数字はセクションの階層を表すのに使われる。 すなわち、h3タグで始まるセクションを読み込んでいて h4タグに出会うと、解釈器は一つ下の子ノードが 始まったと解釈する。逆に h4で始まるセクションを解釈していて h3 が現れた場合は、そのセクションが 終わって1つ上の第3階層のノードが始まったという事である。 h3 で始まるセクションを読み込んでいて再び h3 に出会えば、それは同じ階層の新しいノードが 始まったという事である。 ### 本文中に h1タグは使えない h1タグは、ページタイトル「青葉台旭のノートブック」を表示するのに使うため、記事本体では使えない。 また、h2タグは記事のタイトル(この記事で言えば「青葉台旭の投稿用Markdown亜種の仕様」の部分) に使うので、記事本体には使えない。 ### 以上が、おおまかな独自Markdownの仕様である Jekyll などの静的サイト・ジェネレータは、主にフロント・マター付きの Markdown で書いてそれを 元にHTMLを生成する。そのとき、投稿日などのメタデータの記述にフロント・マターが使われるが、 この部分をなるべく軽くしたいと考えた。 フロント・マターは、yamlなど何らかの汎用データ言語で記述されることが多いが、日付など 必ず書かなければいけない決まり切った記述にも、「date:」などデータ識別用のキーワードを 書かなければいけない。しかし、ホームページに表示する記事専用と割り切ってしまえば、 yyyy-mm-dd 形式の記述があれば、これは投稿日を表しているなと決めつけても良い気がする。 投稿時間、タグのリストなども同様だ。そうすればデータ識別キーワードは必要なくなる。 また、「---」で表される仕切り線も、フロント・マターに決まりきった事しか書かないのであれば 必要ない。日付、時間、タグ配列などの決まりきった書式以外の行が出てきたら、問答無用で 本文が始まったと決めつければ良い。 またタイトル記述も出来るだけ軽くしたい。「title: ……」と書くのも面倒な場合がある。そもそも タイトルを書くことさえ面倒な事もある。そこで、本文の最初の1行が必ずタイトルになるようにした。 それと、github-pages はサーバーにテキストをアップロードすると同時に、出来るかぎり 「jekyll式フロント・マター付きMarkdown」として解釈しようとするようだ。 省略の多い「独自フロント・マター」を記述すると、解釈エラーが起きてpushが停止してしまう。 ファイルの拡張子が「.md」ではなく「.txt」であっても、たとえば最初の行がハイフン三つによる 仕切りだったりと jekyll形式と少しでも近いMarkdownで書くと、やはり解釈が始まってしまうようだ。 そこで、いっそのこと仕切り線は使わないでおこうと思った。 ### 静的サイト・ジェネレーターにおいては、Markdown文書は下書の役目しかないが…… 多くの静的サイト・ジェネレーターにとっての最終目的はHTML文書で出力することだ。 Markdown文書は下書に使うものでしかない。 しかし、せっかくMarkdownで書かれたものを公開しないというのも、何だかもったいない。 あるいはサーバー上には置いてあるのに、リンクも張られずに押入れの奥で眠る下書ノート のような扱いになっているのもちょっと寂しい。 それで、Markdownにも専用のindex.htmlを作って(見づらくはあるが)ブラウザで開けるようにした。 ただし平のテキストゆえエンコードはブラウザ側で自動判断してもらうしかない。 文字化けする可能性が大きい。 それでも、トップページ「 [aobadaiakira.jp](http://aobadaiakira.jp/) 」からたどりつけるようにしておいた。 まあ、自己満足だ。