Module: VivlioStarter::CLI::IndexMarkup

Defined in:
lib/vivlio_starter/cli/index_markup.rb

Overview

索引マークアップの綴りの正典。

Constant Summary collapse

TERM_PATTERN =

索引マークアップ全体([用語][用語|読み] の双方に一致し、 読みの分離は利用側が行う)。前処理・索引スキャナが使う。

/(?<!\^)\[([^\[\]\n]+)\](?!\()/
TERM_WITH_YOMI_PATTERN =

読み付き [用語|読み]。辞書登録が読みを取り出すために使う。

/(?<!\^)\[([^\]|]+)\|([^\]]+)\]/
TERM_ONLY_PATTERN =

読みなし [用語] のみ(| を含むものは TERM_WITH_YOMI_PATTERN の担当)。 辞書登録が 2 パターンを順に当てる方式のため、こちらは | を持たない。

/(?<!\^)\[([^\]|]+)\](?!\()/

Class Method Summary collapse

Class Method Details

.plain_text(term_text) ⇒ String

--- 索引タグを付けられないときの素のテキスト表現 ---------------------

索引スキャナが走らないビルド(index_glossary.enabled: false 等)では [用語] を素のテキストへ落とす。その姿をここに置くのは、同じ「索引語を 表示する」処理が 2 箇所にあってエスケープの有無が食い違っていたため。 索引スキャナは CGI.escapeHTML を通すのに前処理は素通ししており、 [<h1>] が生タグとして VFM に渡って本物の章見出しになっていた (目次と PDF アウトラインまで汚染。index-markup-plain-fallback-spec.md §2.2)。

読み(| 以降)を落とす規則も前処理にしか無かったので、ここへ寄せる。

Parameters:

  • term_text (String)

    ブラケットの中身(用語 または 用語|読み

Returns:

  • (String)

    エスケープ済みの用語部分



81
82
83
84
# File 'lib/vivlio_starter/cli/index_markup.rb', line 81

def plain_text(term_text)
  term = term_text.include?('|') ? term_text.split('|', 2).first : term_text
  CGI.escapeHTML(term.to_s)
end

.skip_term?(term_text) ⇒ Boolean

ブラケットの中身が索引語として無効か。 パターンが弾けない「中身で見分ける記法」——参照脚注 [^id]——を落とす。

Parameters:

  • term_text (String, nil)

    ブラケットの中身

Returns:

  • (Boolean)

    索引語として扱わないなら true



61
62
63
64
65
66
# File 'lib/vivlio_starter/cli/index_markup.rb', line 61

def skip_term?(term_text)
  return true if term_text.nil? || term_text.empty?

  # 脚注参照 [^id]。著者が意図的にマークアップした [!] [&&] [<h1>] は除外しない
  term_text.start_with?('^')
end