Module: VivlioStarter::CLI::Lint::NotationGuard
- Defined in:
- lib/vivlio_starter/cli/lint/notation_guard.rb
Overview
VFM 記法の中和(lint 系専用)。
Constant Summary collapse
- MACHINE_DATA_CONTAINERS =
機械データ(座標・オプション)を本文として持つコンテナ名。 記法を追加するときはここへ 1 語加えればガードが追従する。
%w[showcase].freeze
- MACHINE_BLOCK_OPEN =
機械データ・ブロックの開始行(例:
:::{.showcase})。 ShowcaseTransformer::BLOCK_PATTERN の開始側と揃える(行末に本文が続く:::{.showcase} fooは同 PATTERN が消費しない=ブロックではないため、 ガードもブロックとして扱わない)。 /\A:::\s*\{\s*\.(?:#{Regexp.union(MACHINE_DATA_CONTAINERS).source})\s*\}[ \t]*\r?\n?\z/- MACHINE_BLOCK_CLOSE =
機械データ・ブロックの終了行(例:
:::)。 /\A:::[ \t]*\r?\n?\z/- CONTAINER_MARKER =
コンテナのマーカー行(開始・終了とも)。コロン 3 つ以上+任意の属性ブレースで 行全体が構成されるものだけをマーカーとみなす。
「:::" で始まる行」まで広げてはならない: コメントアウトされたコンテナの閉じ
:::-->を空行化すると HTML コメントの-->が消え、コメントが永久に閉じず、 その中身(表・数式)を読んだ textlint が暴走する実害があった(94 章で CPU 99%)。 マーカーでないものはガードの対象外=素のまま textlint へ渡す(現状維持が正しい)。 /\A[ \t]*:{3,}[ \t]*(?:\{[^{}\n]*\})?[ \t]*\r?\n?\z/- FURIGANA =
ふりがな記法
{親文字|ふりがな}。 /\{([^{}|]*)\|[^{}]*\}/- CLASS_ATTRIBUTE =
クラス属性記法
{.classname}。 /\{\.[-\w]+\}/
Class Method Summary collapse
-
.strip_notation(text) ⇒ String
記法を中和したテキストを返す。行数は入力と必ず一致する(I1)。.
Class Method Details
.strip_notation(text) ⇒ String
記法を中和したテキストを返す。行数は入力と必ず一致する(I1)。
78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/vivlio_starter/cli/lint/notation_guard.rb', line 78 def strip_notation(text) prose = prose_lines(text) machine = machine_block_lines(text, prose) text.each_line.with_index(1).map do |line, lineno| if !prose.include?(lineno) then line # コード領域は不変 elsif machine.include?(lineno) then blank(line) # G1 機械データ・ブロック elsif line.match?(CONTAINER_MARKER) then blank(line) # G2 コンテナのマーカー行 else neutralize_inline(line) # G3 ふりがな → G4 クラス属性 end end.join end |