Skip to content
This repository has been archived by the owner on Apr 20, 2023. It is now read-only.

Nextremer/minarai-markup-notation

Repository files navigation

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;緯度;経度]]