Class: VivlioStarter::CLI::TocCommands::TocDocumentBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/vivlio_starter/cli/toc.rb

Overview

TOC の Markdown ドキュメントを構築する

Defined Under Namespace

Classes: ListState

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(entry_map, base_dir:) ⇒ TocDocumentBuilder

Returns a new instance of TocDocumentBuilder.

Parameters:

  • entry_map (Hash{String => TokenResolver::Entry})

    HTML パス => Entry のマップ

  • base_dir (Pathname)

    ベースディレクトリ



158
159
160
161
162
# File 'lib/vivlio_starter/cli/toc.rb', line 158

def initialize(entry_map, base_dir:)
  @entry_map = entry_map
  @targets = entry_map.keys.sort
  @base_dir = Pathname.new(base_dir)
end

Class Method Details

.front_matterObject

href はワークスペース内 HTML からの相対(Common.asset_prefix 前置・P4 §3.3)。 book-settings.css を toc.css の後段に置く——章 HTML と同じ順序で、book.yml 由来の 設定値がテーマ CSS にカスケードで勝つ(P3)。これが無いと目次だけが book.yml を 見ずに組まれる(chapter-pagebreak-spec.md §6 実装記録)。



139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/vivlio_starter/cli/toc.rb', line 139

def self.front_matter
  <<~MD
    ---
    link:
      - rel: "stylesheet"
        href: "#{Common.asset_prefix}stylesheets/toc.css"
      - rel: "stylesheet"
        href: "#{Common.asset_prefix}#{PreProcessCommands::BookSettingsCss.output_path}"
    lang: 'ja'
    ---

    # 目次
    <nav id="toc" role="doc-toc">
    <ul>
  MD
end

Instance Method Details

#buildObject

TOC の Markdown 文字列を構築する



165
166
167
168
169
170
171
172
# File 'lib/vivlio_starter/cli/toc.rb', line 165

def build
  buffer = [self.class.front_matter]
  append_preface(buffer)
  append_headings(buffer)
  append_postface(buffer)
  buffer << "</ul>\n</nav>"
  buffer.join
end