Module: VivlioStarter::CLI::Build::TocGenerator
- Defined in:
- lib/vivlio_starter/cli/build/toc_generator.rb
Overview
目次生成モジュール
Constant Summary collapse
- PREFACE_RANGE =
章レンジ(定数)- 新仕様に合わせて更新
(0..0)
- MAIN_RANGE =
01..89 本文
(1..89)
- APPX_RANGE =
90..98 付録
(90..98)
- POSTFACE_RANGE =
99-postface
(99..99)
Class Method Summary collapse
-
.extract_chapter_numbers(entries_or_keep) ⇒ Array<Integer>
Entry 配列または basename 配列から章番号配列を抽出.
-
.generate_toc_html!(base_dir = '.', entries_or_keep = nil) ⇒ Object
Step 6: TOC HTML を生成する(pdf / print_pdf 共通)。 見出しメタ(PDF アウトライン用)まで付与した _toc.html を生成する。.
Class Method Details
.extract_chapter_numbers(entries_or_keep) ⇒ Array<Integer>
Entry 配列または basename 配列から章番号配列を抽出
83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/vivlio_starter/cli/build/toc_generator.rb', line 83 def extract_chapter_numbers(entries_or_keep) raw = Array(entries_or_keep).compact return [] if raw.empty? if raw.first.respond_to?(:number) raw.filter_map { it.number&.to_i } else resolver = TokenResolver::Resolver.new raw.filter_map { resolver.resolve_file(it).number&.to_i } end end |
.generate_toc_html!(base_dir = '.', entries_or_keep = nil) ⇒ Object
Step 6: TOC HTML を生成する(pdf / print_pdf 共通)。 見出しメタ(PDF アウトライン用)まで付与した _toc.html を生成する。
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/vivlio_starter/cli/build/toc_generator.rb', line 48 def generate_toc_html!(base_dir = '.', entries_or_keep = nil) keep_numbers_main = Build::Utilities.chapter_numbers_for_book(entries_or_keep) keep_numbers_preface = nil keep_numbers_appx = nil keep_numbers_post = nil if entries_or_keep&.any? chapter_numbers = extract_chapter_numbers(entries_or_keep) keep_numbers_preface = chapter_numbers.select { |n| PREFACE_RANGE.include?(n) } keep_numbers_appx = chapter_numbers.select { |n| APPX_RANGE.include?(n) } keep_numbers_post = chapter_numbers.select { |n| POSTFACE_RANGE.include?(n) } end chapter_htmls_preface = Build::ChapterConfig.htmls_for_range(base_dir, PREFACE_RANGE, keep_numbers_preface) chapter_htmls_main = Build::ChapterConfig.htmls_for_range(base_dir, MAIN_RANGE, keep_numbers_main) chapter_htmls_appx = Build::ChapterConfig.htmls_for_range(base_dir, APPX_RANGE, keep_numbers_appx) chapter_htmls_post = Build::ChapterConfig.htmls_for_range(base_dir, POSTFACE_RANGE, keep_numbers_post) targets_for_toc = (chapter_htmls_preface + chapter_htmls_main + chapter_htmls_appx + chapter_htmls_post).uniq.sort if targets_for_toc.empty? Common.log_warn('[Step 6] 対象HTMLが見つかりません。スキップします。') return end TocCommands.execute_toc({}, targets_for_toc) toc_html = File.join(base_dir, '_toc.html') unless File.exist?(toc_html) Common.log_warn('[Step 6] _toc.html が見つかりません。') return end PostProcessCommands.execute_post_process({}, ['_toc']) Common.log_success('[Step 6] _toc.html を生成しました(PDF ビルドはスキップ)') end |