Class: VivlioStarter::CLI::Guards::StrayPageBreakCheck
- Defined in:
- lib/vivlio_starter/cli/guards/stray_page_break_check.rb
Overview
「区切り線のつもりで置いた --- が改ページになっている」原稿を検出して警告する。
きっかけ: 2026-08-10 に判型を B5 → A4 へ変えたところ、全 26 章に 4 件の 取り残しが見つかった(謝辞の 1 ブロック目の直後でページの 8 割が空白・章の最終行・ 項見出しの直前 2 件)。いずれも B5 でも起きていたが、版面が狭く 1 ブロックで埋まる 割合が大きかったため目立たず、A4 で版面が広がって初めて見えた。 判型を変えると紙面の前提が変わるので、変えた直後こそこの検査を走らせたい。
原因は記法の意味の違いにある。標準の Markdown では --- は水平線だが、
Vivlio Starter では改ページ(21-markdown-tutorial.md の「水平線(改ページ)」)。
素直に区切りのつもりで書くと、そこでページが終わる。
指摘するのは 2 つだけで、どちらも「改ページとして意味を成さないか、意図が読めない」もの:
(a) 後ろに内容が無い … 白紙が 1 枚増えるだけ。誤検知の余地がない
(b) 見出しの直前 … 見出しの前でページが切れる。区切りのつもりの可能性が高い
逆に、指摘しないものを決めておくのがこの検査の要である。
- 節見出し(h2)の直前で、かつ h2 が自動改ページする設定のとき。二重改ページは
PageBreakNormalizer が自動で正規化し、原稿は「気にせず書いて構いません」と
22-extentions.mdが明記している。ここで警告すると本の説明と機能が矛盾する - 改ページ記法が連続するとき(
---を 2 つ重ねる)。同章が案内している 「意図的に空白ページを 1 枚入れる」書き方そのもの - 後ろに本文が続くとき。区切りとしての改ページは正当な使い方
@pagebreak記法。著者が改ページと知って書いた明示記法を疑うと狼少年になる
重大度は警告(🟡)。改ページ自体は動作しており、意図なら正しい原稿だからである。
Constant Summary collapse
- THEMATIC_BREAK =
CommonMark の thematic break(
-*_を 3 つ以上・間に空白可・行頭 3 空白まで)。 Vivlio ではこれが改ページになる。 /\A {0,3}(?:(?:-[ \t]*){3,}|(?:\*[ \t]*){3,}|(?:_[ \t]*){3,})\z/- HEADING =
ATX 見出し(
#〜######)。レベルを 1 番目のキャプチャで取る。 /\A {0,3}(\#{1,6})[ \t]+(.*)\z/
Instance Method Summary collapse
-
#initialize(section_pagebreak: Common.section_pagebreak_enabled?) ⇒ StrayPageBreakCheck
constructor
A new instance of StrayPageBreakCheck.
-
#validate ⇒ Array<Violation>
警告の配列(合格なら空配列).
Constructor Details
#initialize(section_pagebreak: Common.section_pagebreak_enabled?) ⇒ StrayPageBreakCheck
Returns a new instance of StrayPageBreakCheck.
44 45 46 47 |
# File 'lib/vivlio_starter/cli/guards/stray_page_break_check.rb', line 44 def initialize(section_pagebreak: Common.section_pagebreak_enabled?) @section_pagebreak = section_pagebreak super() end |
Instance Method Details
#validate ⇒ Array<Violation>
Returns 警告の配列(合格なら空配列).
50 51 52 |
# File 'lib/vivlio_starter/cli/guards/stray_page_break_check.rb', line 50 def validate markdown_files.filter_map { |path| check_file(path) } end |