minarai-markup-notation
v1.1.0
Published
Small markup language to annotate meta information
Downloads
3
Readme
minarai-markup-notation
ボット発話にメタデータを付与するための記法。これをフロント側で解析して表示とかに利用するためのもの。
インストール方法
これから。
使用方法
import {parse, render} from 'minarai-markup-notation';
const sexp = parse("お電話はこちらまで!\n#.tel[0120444444]\nなお営業時間は…");
console.log(sexp);
;; => ["お電話はこちらまで!\n", ["tel", "0120444444"], "\nなお営業時間は…"]
console.log(render(sexp));
;; => お電話はこちらまで!
;; <a href="tel:0120444444">0120444444</a>
;; なお営業時間は…
また、レンダラーをカスタムすることが可能。
仕様
設計の経緯
- 元issue: https://github.com/Nextremer/minarai-project/issues/695
- 電話番号が電話番号であることをシナリオ(のボット発話)中で表記/明記したい
- 将来、電話番号以外もマークアップしたくなるかもしれない
- →名前による種類の明記 (
tel
など)
- →名前による種類の明記 (
- マークアップ記法をちょっと汎用に設計しておくのがよいかも(実装はしなくていいが)
設計思想
- 始まり、終わりがはっきり分かれている
- 名前 (マークアップの意味を識別するためのもの)をもつ
- 以下の機能は、実装の必要はないが可能性がゼロではないので設計だけしておく
- 複数パラメータ
- ひとつのパラメータで挙動を決定できないマークアップ
#.location[Nextremer東京Office;緯度;経度]
のようなかんじ- 表示について (文字の大きさ、色など) は
<span>
タグ記法が使えるのでやらない
- マークアップの中にマークアップ
#.address[電話:#.tel[0123-45-67]、住所:#.location[Nextremer;緯度;経度]]
- 通常はこんなことしたいと思わないだろうが、いちおう
- 複数パラメータ
仕様
電話番号についてのマークアップはこんな感じ
ご用の際はお気軽に、こちらにお電話ください: #.tel[0120-444-444]
マークアップの始まりは#.
あまり文字数を多くしたくないが、#
だけだと以下のようなふつうの文章がマークアップだと認識される。
フォーラムの#124を参照してください(なお、即日対応できる保証はありません)。
#.
はふつうの文章にはでてこないでしょう、という仮定のもと。
名前はアルファベット小文字と数字のみ
プログラムが利用するので。
マークアップ対象は[
と]
で囲む
CSChatのシナリオで使用可能な構文との統一感のために ([[文言1|文言2|...[[
)、丸括弧ではなく角括弧とする。
マークアップ対象は空白なし?
空白を含めたかったら、'
で囲んでこうするとか? いらないかも。
#.address[住所: 東京都]
マークアップ対象が複数ある場合は;
で区切る (実装は必須でない)
ここで;
の前後に空白を入れると、マークアップ対象の一部になる
#.location[Nextremer東京Office;緯度;経度]
のようなかんじ
マークアップ対象の中にマークアップ記法があってもちゃんと処理する (実装は必須でない)
こんなやつを中身もマークアップとして扱う、という話。
住所はこちら!
#.address[電話:#.tel[0123-45-67]、住所:#.location[Nextremer;緯度;経度]]