asciidoctor-multipage 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/asciidoctor-multipage.rb +54 -7
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3d54d7b18dc06a853c2c12062714158d3a65914b9f7aacda87ac0a939ddcc941
4
- data.tar.gz: 9857f979f3dcf2a4dc7faed2271549c4ff473a8fb356b8747673ee828a1a35cb
3
+ metadata.gz: 37d22229b52f7ecc747f4c4f80fcfe6b3d097d49a0ba7c1e375de6f72280c950
4
+ data.tar.gz: 901b657b48543dc3466154c0ba5d00d82d639f1b72a747eae5bb5821cd287cb1
5
5
  SHA512:
6
- metadata.gz: c8cd9b2025eddf8cd9a8c54b6dc0705d60b8757dc3d360cc98247e7df2d0569d1cd464892aed4d468e3320b96e31a4fefef1ca9c135798878d571692b367e476
7
- data.tar.gz: 99b46345a15d5e08fabe8a652644b094ef1287d34c2e32333417bbab60c4a63820d9a4f866f66087437cc8e2dae77bafc4662987f52f1083dc405b7201a8b23b
6
+ metadata.gz: 52c37d84631c4d9bbdd02a272fd61dd5c5cf26b6a60f2e203378ca0dc669edd731284b13bf5d9fdfae601209ae38ddf9647ad8e7091e7a46b6810cb5beb7e6a6
7
+ data.tar.gz: 7bf7e7e32dac50d8619ee1ac52e9bc501c2d1cb5585e391f7501ed2b6e7bd1ab67b265c7e7d1a4e2df5cc95e0077fcdd768faaf76d1b6e886894140b85669bec
@@ -52,6 +52,14 @@ class Asciidoctor::Document
52
52
  # nodes are no longer accessible.
53
53
  attr_writer :sectnum
54
54
 
55
+ # A pointer to the original converter (first converter instantiated to
56
+ # convert the original document). As we create additional documents
57
+ # ourselves, AsciiDoctor will instantiate additional instances of
58
+ # MultipageHtml5Converter for each created document. These instances need
59
+ # to share state, so they can use the original converter instance
60
+ # for that purpose.
61
+ attr_accessor :mp_root
62
+
55
63
  # Override the AbstractBlock sections?() check to enable the Table Of
56
64
  # Contents. This extension may generate short pages that would normally have
57
65
  # no need for a TOC. However, we override the Html5Converter outline() in
@@ -101,6 +109,12 @@ class MultipageHtml5Converter < Asciidoctor::Converter::Html5Converter
101
109
 
102
110
  attr_accessor :pages
103
111
 
112
+ # contains the entire outline of the top-level document, used
113
+ # as a guide-rail for creating TOC elements for documents we
114
+ # split off. Only expected to be set in the top-level converter
115
+ # (see AsciiDoctor::Document::mp_root)
116
+ attr_accessor :full_outline
117
+
104
118
  def initialize(backend, opts = {})
105
119
  @xml_mode = false
106
120
  @void_element_slash = nil
@@ -118,8 +132,29 @@ class MultipageHtml5Converter < Asciidoctor::Converter::Html5Converter
118
132
  page << block
119
133
  end
120
134
 
135
+ # ensures that the AsciiDoctor::Document::mp_root is correctly
136
+ # set on the document object. The variable could have already been
137
+ # set if we created the document ourselves
138
+ # (see ::MultipageHtml5Converter::convert_section), in which case it's
139
+ # not changed. If the documented is "nested", then we expect the parent
140
+ # document to already have it set. Otherwise, this is expected to be
141
+ # a top-level document, and we assign ourselves as its original converter.
142
+ def check_root(doc)
143
+ unless doc.mp_root
144
+ if doc.nested?
145
+ doc.mp_root = doc.parent_document.mp_root
146
+ else
147
+ doc.mp_root = self
148
+ end
149
+ end
150
+ end
151
+
121
152
  # Process Document (either the original full document or a processed page)
122
153
  def convert_document(node)
154
+
155
+ # make sure document has original converter reference
156
+ check_root(node)
157
+
123
158
  if node.processed
124
159
  # This node (an individual page) can now be handled by
125
160
  # Html5Converter.
@@ -166,8 +201,16 @@ class MultipageHtml5Converter < Asciidoctor::Converter::Html5Converter
166
201
  # Generate navigation links for all pages
167
202
  generate_nav_links(node)
168
203
 
169
- # Create and save a skeleton document for generating the TOC lists.
170
- @@full_outline = new_outline_doc(node)
204
+ # Create and save a skeleton document for generating the TOC lists,
205
+ # but don't attempt to create outline for nested documents.
206
+ unless node.nested?
207
+ # if the original converter has the @full_outline set already, we are about
208
+ # to replace it. That's not supposed to happen, and probably means we encountered
209
+ # a document structure we aren't prepared for. Log an error and move on.
210
+ logger.error "Regenerating document outline, something wrong?" if node.mp_root.full_outline
211
+ node.mp_root.full_outline = new_outline_doc(node)
212
+ end
213
+
171
214
  # Save the document catalog to use for each part/chapter page.
172
215
  @catalog = node.catalog
173
216
 
@@ -179,7 +222,7 @@ class MultipageHtml5Converter < Asciidoctor::Converter::Html5Converter
179
222
  part = block
180
223
  part.convert
181
224
  text = %(<<#{part.id},#{part.captioned_title}>>)
182
- if desc = block.attr('desc') then text << %( – #{desc}) end
225
+ if (desc = block.attr('desc')) then text << %( – #{desc}) end
183
226
  parts_list << Asciidoctor::ListItem.new(parts_list, text)
184
227
  end
185
228
  end
@@ -197,6 +240,8 @@ class MultipageHtml5Converter < Asciidoctor::Converter::Html5Converter
197
240
  # Process Document in embeddable mode (either the original full document or a
198
241
  # processed page)
199
242
  def convert_embedded(node)
243
+ # make sure document has original converter reference
244
+ check_root(node)
200
245
  if node.processed
201
246
  # This node (an individual page) can now be handled by
202
247
  # Html5Converter.
@@ -350,7 +395,7 @@ class MultipageHtml5Converter < Asciidoctor::Converter::Html5Converter
350
395
  end
351
396
 
352
397
  # From node, create a skeleton document that will be used to generate the
353
- # TOC. This is first used to create a full skeleton (@@full_outline) from the
398
+ # TOC. This is first used to create a full skeleton (@full_outline) from the
354
399
  # original document (for_page=nil). Then it is used for each individual page
355
400
  # to create a second skeleton from the first. In this way, TOC entries are
356
401
  # included that are not part of the current page, or excluded if not
@@ -392,10 +437,10 @@ class MultipageHtml5Converter < Asciidoctor::Converter::Html5Converter
392
437
  # outline.
393
438
  def convert_outline(node, opts = {})
394
439
  doc = node.document
395
- # Find this node in the @@full_outline skeleton document
396
- page_node = @@full_outline.find_by(id: node.id).first
440
+ # Find this node in the @full_outline skeleton document
441
+ page_node = doc.mp_root.full_outline.find_by(id: node.id).first
397
442
  # Create a skeleton document for this particular page
398
- custom_outline_doc = new_outline_doc(@@full_outline, for_page: page_node)
443
+ custom_outline_doc = new_outline_doc(doc.mp_root.full_outline, for_page: page_node)
399
444
  opts[:page_id] = node.id
400
445
  # Generate an extra TOC entry for the root page. Add additional styling if
401
446
  # the current page is the root page.
@@ -455,6 +500,8 @@ class MultipageHtml5Converter < Asciidoctor::Converter::Html5Converter
455
500
  page.sectnum = node.parent.sectnum
456
501
  end
457
502
 
503
+ page.mp_root = doc.mp_root
504
+
458
505
  # Process node according to mplevel
459
506
  if node.mplevel == :branch
460
507
  # Retain any part intro blocks, delete others, and add a list
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-multipage
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Owen T. Heisler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-28 00:00:00.000000000 Z
11
+ date: 2021-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: appraisal