URL を書くインラインマクロ

URL を書く時に、結果として、

<a href="http://example.com">ページタイトル -- http://example.com</a>

という形式にするのに間違いがないなるべく簡単な記法を考えます。

というのは、素直に asciidoc で記述するとすると、以下のようになります。

http://example.com[ページタイトル -- +++http://example.com+++]

http://example.com を2回入力する必要があるので、コピペ間違えをやる気がする。それを避けることができればオーケー、ということにします。

asciidoc のインラインマクロでやるとすると、設定ファイルに以下の記述が必要になります。

[macros]
(?su)(?P<name>u):\[(?P<attrlist>.*?)(?<!\\)\]=
[tu-inlinemacro]
<a href="{1}">{2} -- +++{1}+++</a>

ところが既存のマクロとの関係、特に http: を見ているマクロの前に u: マクロに動いてもらわないと {1} の部分が http: マクロで展開されたものになってしまう。こんな風に。

<div class="paragraph"><p><a href="<a href="http://example.com">http://example.com</a>">ページタイトル -- +++<a href="http://example.com">http://example.com</a>+++</a></p></div>

解決策としては、 ~/.asciidoc/asciidoc.conf に記述するのではなくて、直接グローバルな設定ファイルの冒頭に記述してしまう、ということです。

ただ、リンク関連のインラインマクロを asciidoctor でやる方法はまだ調べ中です…

どちらにでも通る解決策としては、

:url: http://example.com

{url}[ページタイトル -- {url}]

カンマ区切りの Attribute entry の整形

Updated 2017-12-17T06:22+09:00

一見すると、 eval: 使ってできそうです。

:tags: taga, tagb, tagc
{eval:", ".join(map(lambda x: "#%s" % x.strip(), "{tags}".split(","))) if "{tags}" != "" else None}
=> <div class="paragraph"><p>#taga, #tagb, #tagc</p></div>

狙い通りの出力が得られました。

これを ‘Last updated’ の替わりに出力することにしよう。

こんにちわ!

Updated 2024-10-11T01:38+09:00

ポチポチとがんばります!

このご時世に makeasciidoc で作成しています。ウェブサイトっぽいものになれば良いなあと思って始めました。

今ちらかしているものまとめ。