Class: VivlioStarter::CLI::Guards::StrayPageBreakCheck

Inherits:
BaseCheck
  • Object
show all
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

Constructor Details

#initialize(section_pagebreak: Common.section_pagebreak_enabled?) ⇒ StrayPageBreakCheck

Returns a new instance of StrayPageBreakCheck.

Parameters:

  • section_pagebreak (Boolean) (defaults to: Common.section_pagebreak_enabled?)

    h2 が CSS で自動改ページするか。 既定は正典(Common)から取り、テストからは差し替える



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

#validateArray<Violation>

Returns 警告の配列(合格なら空配列).

Returns:

  • (Array<Violation>)

    警告の配列(合格なら空配列)



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