asciidoctor-pdf 1.5.0.rc.1 → 1.5.0.rc.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 977d0e8db99f3145ff750ee38a5617ff80ee96e10f20daf0382b18b9f69eaca0
4
- data.tar.gz: aa3c20fe2553679f0d59014a306f6d327ba7af0e7700206cb119ee0b7d228e6e
3
+ metadata.gz: 7290367ccc4d34f5fe1c5668c08de5a84e49af2d605b2ff30586620ab0eb6b58
4
+ data.tar.gz: '0920410efe9b0f47ad3dd5ae10626e251898782e190d2e73cb232d4a46bf15f5'
5
5
  SHA512:
6
- metadata.gz: e4a3e16fb9e8b6a0b6118101348efeecbe0a0e1141ec6b7be58691c6f99057cf3a39cee200391a4fac6050b967849ce71942f309665a0c8ab9d52c7e7bdc69f2
7
- data.tar.gz: 2e4fedb49b6a0d30b2e6c6cc353d1b69b6aa2cca0688daeda980bdf462dfc387d367e8b8d1402a0f89ff0ca8381ec8c2f1d2e2ef6432b2d20f04a65f9402280d
6
+ metadata.gz: 411e2a27ea226772b264c9686a163dc2f5b932f160182df11df9bef3b3eac2424e50c96287539a21d3a646ad8cc9ad29964e3c11d7305d045a74671cc33024b8
7
+ data.tar.gz: 227a016304d3fa406e4e1ae5a23ee5be0152d7bfacb94435a96d6735256bb4a100b853f1bae26489c74c9fb4648ff1ba191273594c657124a7188ae773c3618e
@@ -5,6 +5,16 @@
5
5
  This document provides a high-level view of the changes to the {project-name} by release.
6
6
  For a detailed view of what has changed, refer to the {uri-repo}/commits/master[commit history] on GitHub.
7
7
 
8
+ == 1.5.0.rc.2 (2020-01-09) - @mojavelinux
9
+
10
+ * patch Prawn to fix incompatibilty with Ruby 2.7 (to fix text wrapping)
11
+ * fix crash when assigning font style to header cell in table body (#1468)
12
+ * fix parsing of array value of pdf-page-margin attribute (#1475)
13
+ * fix warning when reading data from a remote URL when running with Ruby 2.7 (#1477)
14
+ * pass SVG warnings to logger (#1479)
15
+ * compress streams if the compress attribute is set on the document (#1471)
16
+ * don't set heading-font-family in default theme so it inherits from base
17
+
8
18
  == 1.5.0.rc.1 (2020-01-06) - @mojavelinux
9
19
 
10
20
  * support data URI for SVG image (#1423)
@@ -1,6 +1,6 @@
1
1
  = Asciidoctor PDF: A native PDF converter for AsciiDoc
2
2
  Dan Allen <https://github.com/mojavelinux[@mojavelinux]>; Sarah White <https://github.com/graphitefriction[@graphitefriction]>
3
- v1.5.0.rc.1, 2020-01-06
3
+ v1.5.0.rc.2, 2020-01-09
4
4
  // Settings:
5
5
  :experimental:
6
6
  :idprefix:
@@ -23,7 +23,7 @@ endif::[]
23
23
  :project-name: Asciidoctor PDF
24
24
  :project-handle: asciidoctor-pdf
25
25
  // Variables:
26
- :release-version: 1.5.0.rc.1
26
+ :release-version: 1.5.0.rc.2
27
27
  // URIs:
28
28
  :url-asciidoctor: http://asciidoctor.org
29
29
  :url-gem: http://rubygems.org/gems/asciidoctor-pdf
@@ -295,27 +295,89 @@ For example, to configure Rouge to use the built-in monokai theme, run Asciidoct
295
295
  It's possible to develop your own theme for Rouge.
296
296
  Refer to the <<docs/theming-guide.adoc#,Asciidoctor PDF Theme Guide>> for details.
297
297
 
298
- === Support for Non-Latin Languages
298
+ == Support for Non-Latin Languages
299
299
 
300
300
  Asciidoctor can process the full range of characters in the UTF-8 character set.
301
- That means you can write your document in any language, save the file with UTF-8 encoding, and expect Asciidoctor to convert the text properly.
302
- However, you may notice that certain characters for certain languages, such as Chinese, are missing in the PDF.
303
- Read on to find out why and how to address it.
301
+ That means you can write your document in any language, save the file with UTF-8 encoding (_that's important!_), and expect Asciidoctor to convert the text properly.
302
+ But you still need a font that provides the glyphs for those characters.
303
+
304
+ When converting a document with Asciidoctor PDF, you may notice that some of the glyphs for certain languages, such as Chinese, are missing from the PDF.
305
+ PDF is a "`bring your own font`" kind of system.
306
+ In other words, the font you provide must provide glyphs for all the characters used.
307
+ There's no one font that supports all the world's languages (though some, like Noto Serif, certainly come close).
308
+ Even if there were such a font, bundling that font with the main gem would make it enormous.
309
+ It would also severely limit the style choices in the default theme, which targets Latin-based languages.
310
+ Therefore, we're taking the strategy of creating separate dedicated theme gems that target each language family, such as CJK.
311
+ Read on to find out how to use these themes.
312
+
313
+ Asciidoctor PDF provides a built-in theme that provides a broad range of characters in the CJK charsets, so you can start with that theme:
304
314
 
305
- If you're writing in a non-Latin language, you need to use a dedicated theme that provides the necessary fonts.
306
- For example, to produce a PDF from a document written in a CJK language such as Chinese, you need to use a CJK theme.
315
+ $ asciidoctor-pdf -a scripts=cjk -a pdf-theme=default-with-fallback-font document.adoc
316
+
317
+ Notice the `-a scripts=cjk` option.
318
+ That's important.
319
+ It tells the converter to insert break opportunities between CJK characters so that the line wraps properly when mixing English and a CJK language like Japanese.
320
+
321
+ If the built-in theme with the fallback font doesn't go far enough, you'll need to use a theme that is optimized for CJK text.
307
322
  You can get such a theme by installing the `asciidoctor-pdf-cjk-kai_gen_gothic` gem.
308
- See the https://github.com/chloerei/asciidoctor-pdf-cjk-kai_gen_gothic[asciidoctor-pdf-cjk-kai_gen_gothic] project for detailed instructions.
323
+ The https://github.com/chloerei/asciidoctor-pdf-cjk-kai_gen_gothic[asciidoctor-pdf-cjk-kai_gen_gothic] project provides themes optimized for CJK languages based on the kai_gen_gothic font.
324
+ See the https://github.com/chloerei/asciidoctor-pdf-cjk-kai_gen_gothic[asciidoctor-pdf-cjk-kai_gen_gothic] project README for detailed setup instructions.
309
325
 
310
- Using a dedicated theme is necessary because PDF is a "`bring your own font`" kind of system.
311
- In other words, the font you provide must provide glyphs for all the characters.
312
- There's no one font that supports all the worlds languages (though some, like Noto Serif, certainly come close).
313
- Even if there were such a font, bundling that font with the main gem would make the package enormous.
314
- It would also severely limit the style choices in the default theme, which targets Latin-based languages.
326
+ Once you have that gem installed (and the fonts), you need to tell Asciidoctor PDF to use one of the themes.
327
+ If you're converting a document that is primarily written in Japanese, you'd run Asciidoctor PDF as follows:
315
328
 
316
- Therefore, we're taking the strategy of creating separate dedicated theme gems that target each language family, such as CJK.
317
- The base theme for CJK languages is provided by the https://github.com/chloerei/asciidoctor-pdf-cjk[asciidoctor-pdf-cjk] project and a concrete implementation provided by the https://github.com/chloerei/asciidoctor-pdf-cjk-kai_gen_gothic[asciidoctor-pdf-cjk-kai_gen_gothic] project that's based on the kai_gen_gothic font.
318
- Of course, you're free to follow this model and create your own theme gem that uses fonts of your choice.
329
+ asciidoctor-pdf -r asciidoctor-pdf-cjk-kai_gen_gothic -a pdf-theme=KaiGenGothicJP document.adoc
330
+
331
+ You also have to option of creating your own theme gem that uses fonts of your choice.
332
+ For example, if you want to use the `asciidoctor-pdf-cjk-kai_gen_gothic` gem to fetch fonts, but then use them in your own theme, here's how you'd do it.
333
+
334
+ . Install the `asciidoctor-pdf-cjk-kai_gen_gothic` gem:
335
+
336
+ $ gem install asciidoctor-pdf-cjk-kai_gen_gothic
337
+
338
+ . Download / install the fonts:
339
+
340
+ $ asciidoctor-pdf-cjk-kai_gen_gothic-install
341
+
342
+ . Create a theme that extends the default theme:
343
+ +
344
+ [source,yml]
345
+ ----
346
+ extends: default
347
+ font:
348
+ catalog:
349
+ KaiGen Gothic JP:
350
+ normal: KaiGenGothicJP-Regular.ttf
351
+ bold: KaiGenGothicJP-Bold.ttf
352
+ italic: KaiGenGothicJP-Regular-Italic.ttf
353
+ bold_italic: KaiGenGothicJP-Bold-Italic.ttf
354
+ M+ 1mn:
355
+ normal: GEM_FONTS_DIR/mplus1mn-regular-subset.ttf
356
+ bold: GEM_FONTS_DIR/mplus1mn-bold-subset.ttf
357
+ italic: GEM_FONTS_DIR/mplus1mn-italic-subset.ttf
358
+ bold_italic: GEM_FONTS_DIR/mplus1mn-bold_italic-subset.ttf
359
+ fallbacks:
360
+ - KaiGen Gothic JP
361
+ base:
362
+ font-family: KaiGen Gothic JP
363
+ heading:
364
+ font-family: $base-font-family
365
+ abstract:
366
+ title:
367
+ font-family: $heading-font-family
368
+ sidebar:
369
+ title:
370
+ font-family: $heading-font-family
371
+ ----
372
+
373
+ . Load your theme when running Asciidoctor PDF:
374
+
375
+ $ asciidoctor-pdf -a scripts=cjk -a pdf-theme=./jp-theme.yml -a pdf-fontsdir=`ruby -r asciidoctor-pdf-cjk-kai_gen_gothic -e "print File.expand_path '../fonts', (Gem.datadir 'asciidoctor-pdf-cjk-kai_gen_gothic')"` document.adoc
376
+
377
+ The `-a pdf-fontsdir` option is important to tell Asciidoctor PDF where to find your custom fonts.
378
+
379
+ Rather than using the installer from the `asciidoctor-pdf-cjk-kai_gen_gothic` gem, you can download fonts whatever way you choose.
380
+ When using your own fonts, be sure to consult the <<docs/theming-guide.adoc#preparing-a-custom-font,Preparing a Custom Font>> section of the theming guide to find recommended modifications.
319
381
 
320
382
  == Font-Based Icons
321
383
 
@@ -937,6 +999,15 @@ However, you could use an extension, such as a TreeProcessor, to automatically m
937
999
 
938
1000
  == Optimizing the Generated PDF
939
1001
 
1002
+ By default, Asciidoctor PDF does not optimize the output document or even compress the streams.
1003
+ The simplest way to reduce the size of the file is to enable stream compression (using the FlateDecode method).
1004
+ You can enable this feature by setting the `compress` attribute on the document:
1005
+
1006
+ $ asciidoctor-pdf -a compress document.adoc
1007
+
1008
+ For more thorough optimzation, you can use either the built-in `asciidoctor-pdf-optimize` script or hexapdf.
1009
+ Read on to learn how.
1010
+
940
1011
  === asciidoctor-pdf-optimize
941
1012
 
942
1013
  {project-name} also provides a bin script that uses GhostScript to optimize and compress the generated PDF (with minimal impact on quality).
@@ -13,7 +13,7 @@ font:
13
13
  italic: mplus1mn-italic-subset.ttf
14
14
  bold_italic: mplus1mn-bold_italic-subset.ttf
15
15
  page:
16
- background_color: ffffff
16
+ background_color: FFFFFF
17
17
  layout: portrait
18
18
  initial_zoom: FitH
19
19
  margin: [0.5in, 0.67in, 0.67in, 0.67in]
@@ -49,7 +49,7 @@ base:
49
49
  font_size_small: round($base_font_size * 0.85)
50
50
  font_size_min: $base_font_size * 0.75
51
51
  font_style: normal
52
- border_color: eeeeee
52
+ border_color: EEEEEE
53
53
  border_radius: 4
54
54
  border_width: 0.5
55
55
  role:
@@ -72,32 +72,30 @@ horizontal_rhythm: $base_line_height_length
72
72
  # QUESTION should vertical_spacing be block_spacing instead?
73
73
  vertical_spacing: $vertical_rhythm
74
74
  link:
75
- font_color: 428bca
75
+ font_color: 428BCA
76
76
  # literal is currently used for inline monospaced in prose and table cells
77
77
  literal:
78
- font_color: b12146
78
+ font_color: B12146
79
79
  font_family: M+ 1mn
80
80
  button:
81
81
  content: "[\u2009%s\u2009]"
82
82
  font_style: bold
83
83
  key:
84
- background_color: f5f5f5
85
- border_color: cccccc
84
+ background_color: F5F5F5
85
+ border_color: CCCCCC
86
86
  border_offset: 2
87
87
  border_radius: 2
88
88
  border_width: 0.5
89
89
  font_family: $literal_font_family
90
90
  separator: "\u202f+\u202f"
91
91
  mark:
92
- background_color: ffff00
92
+ background_color: FFFF00
93
93
  border_offset: 1
94
94
  menu:
95
95
  caret_content: " <font size=\"1.15em\"><color rgb=\"b12146\">\u203a</color></font> "
96
96
  heading:
97
97
  align: left
98
- #font_color: 181818
99
98
  font_color: $base_font_color
100
- font_family: $base_font_family
101
99
  font_style: bold
102
100
  # h1 is used for part titles (book doctype) or the doctitle (article doctype)
103
101
  h1_font_size: floor($base_font_size * 2.6)
@@ -147,7 +145,7 @@ lead:
147
145
  font_size: $base_font_size_large
148
146
  line_height: 1.4
149
147
  abstract:
150
- font_color: 5c6266
148
+ font_color: 5C6266
151
149
  font_size: $lead_font_size
152
150
  line_height: $lead_line_height
153
151
  font_style: italic
@@ -155,7 +153,6 @@ abstract:
155
153
  title:
156
154
  align: center
157
155
  font_color: $heading_font_color
158
- font_family: $heading_font_family
159
156
  font_size: $heading_h4_font_size
160
157
  font_style: $heading_font_style
161
158
  admonition:
@@ -196,8 +193,8 @@ code:
196
193
  line_height: 1.25
197
194
  # line_gap is an experimental property to control how a background color is applied to an inline block element
198
195
  line_gap: 3.8
199
- background_color: f5f5f5
200
- border_color: cccccc
196
+ background_color: F5F5F5
197
+ border_color: CCCCCC
201
198
  border_radius: $base_border_radius
202
199
  border_width: 0.75
203
200
  conum:
@@ -210,7 +207,7 @@ example:
210
207
  border_color: $base_border_color
211
208
  border_radius: $base_border_radius
212
209
  border_width: 0.75
213
- background_color: ffffff
210
+ background_color: FFFFFF
214
211
  # FIXME reenable padding bottom once margin collapsing is implemented
215
212
  padding: [$vertical_rhythm, $horizontal_rhythm, 0, $horizontal_rhythm]
216
213
  image:
@@ -219,8 +216,8 @@ prose:
219
216
  margin_top: $block_margin_top
220
217
  margin_bottom: $block_margin_bottom
221
218
  sidebar:
222
- background_color: eeeeee
223
- border_color: e1e1e1
219
+ background_color: EEEEEE
220
+ border_color: E1E1E1
224
221
  border_radius: $base_border_radius
225
222
  border_width: $base_border_width
226
223
  # FIXME reenable padding bottom once margin collapsing is implemented
@@ -228,7 +225,6 @@ sidebar:
228
225
  title:
229
226
  align: center
230
227
  font_color: $heading_font_color
231
- font_family: $heading_font_family
232
228
  font_size: $heading_h4_font_size
233
229
  font_style: $heading_font_style
234
230
  thematic_break:
@@ -248,22 +244,22 @@ outline_list:
248
244
  item_spacing: $vertical_rhythm / 2
249
245
  table:
250
246
  background_color: $page_background_color
251
- border_color: dddddd
247
+ border_color: DDDDDD
252
248
  border_width: $base_border_width
253
249
  cell_padding: 3
254
250
  head:
255
251
  font_style: bold
256
252
  border_bottom_width: $base_border_width * 2.5
257
253
  body:
258
- stripe_background_color: f9f9f9
254
+ stripe_background_color: F9F9F9
259
255
  foot:
260
- background_color: f0f0f0
256
+ background_color: F0F0F0
261
257
  toc:
262
258
  indent: $horizontal_rhythm
263
259
  line_height: 1.4
264
260
  dot_leader:
265
261
  #content: ". "
266
- font_color: a9a9a9
262
+ font_color: A9A9A9
267
263
  #levels: 2 3
268
264
  footnotes:
269
265
  font_size: round($base_font_size * 0.75)
@@ -275,7 +271,7 @@ header:
275
271
  footer:
276
272
  font_size: $base_font_size_small
277
273
  # NOTE if background_color is set, background and border will span width of page
278
- border_color: dddddd
274
+ border_color: DDDDDD
279
275
  border_width: 0.25
280
276
  height: $base_line_height_length * 2.5
281
277
  line_height: 1
@@ -795,7 +795,7 @@ CAUTION: You must declare all four variants.
795
795
  If you're missing the font file for one of the variants, configure it to use the same font file as the normal variant.
796
796
 
797
797
  You can use the key that you assign to the font in the font catalog anywhere the `font-family` property is accepted in the theme file.
798
- For example, to use the Roboto font for all headings, use:
798
+ For example, to use the Roboto font for all headings (section titles and discrete headings), use:
799
799
 
800
800
  [source,yaml]
801
801
  ----
@@ -1522,7 +1522,7 @@ The keys in this category control the style of most headings, including part tit
1522
1522
 
1523
1523
  |font-family
1524
1524
  |<<fonts,Font family name>> +
1525
- (default: $base-font-family)
1525
+ (default: _inherit_)
1526
1526
  |heading:
1527
1527
  font-family: Noto Serif
1528
1528
 
@@ -3826,6 +3826,12 @@ The keys in this category control the arrangement and style of tables and table
3826
3826
  |table:
3827
3827
  border-width: 0.5
3828
3828
 
3829
+ |caption-align
3830
+ |<<text-alignments,Text alignment>> {vbar} inherit +
3831
+ (default: $caption-align)
3832
+ |table:
3833
+ caption-align: inherit
3834
+
3829
3835
  |caption-side
3830
3836
  |top {vbar} bottom +
3831
3837
  (default: top)
@@ -4896,6 +4902,10 @@ These settings override equivalent keys defined in the theme file, where applica
4896
4902
  |screen {vbar} print {vbar} prepress
4897
4903
  |:media: prepress
4898
4904
 
4905
+ |compress
4906
+ |flag (default: _not set_)
4907
+ |:compress:
4908
+
4899
4909
  |optimize
4900
4910
  |screen {vbar} ebook {vbar} printer {vbar} prepress {vbar} default (default: default)
4901
4911
  |:optimize: prepress
@@ -406,7 +406,7 @@ module Asciidoctor
406
406
  if page_margin.empty?
407
407
  page_margin = nil
408
408
  elsif (page_margin.start_with? '[') && (page_margin.end_with? ']')
409
- if (page_margin = (page_margin.slice 1, page_margin.size - 1).rstrip).empty?
409
+ if (page_margin = (page_margin.slice 1, page_margin.length - 2).rstrip).empty?
410
410
  page_margin = [0]
411
411
  else
412
412
  if (page_margin = page_margin.split ',', -1).length > 4
@@ -468,6 +468,7 @@ module Asciidoctor
468
468
  page_size: (page_size || 'A4'),
469
469
  page_layout: (page_layout || :portrait),
470
470
  info: (build_pdf_info doc),
471
+ compress: (doc.attr? 'compress'),
471
472
  skip_page_creation: true,
472
473
  text_formatter: (FormattedText::Formatter.new theme: theme),
473
474
  }
@@ -815,6 +816,9 @@ module Asciidoctor
815
816
  icon_width = svg_size.output_width
816
817
  end
817
818
  svg_obj.draw
819
+ svg_obj.document.warnings.each do |icon_warning|
820
+ logger.warn %(problem encountered in image: #{icon_path}; #{icon_warning})
821
+ end
818
822
  rescue
819
823
  logger.warn %(could not embed admonition icon: #{icon_path}; #{$!.message})
820
824
  end
@@ -1419,13 +1423,8 @@ module Asciidoctor
1419
1423
  # TODO: add `to_pt page_width` method to ViewportWidth type
1420
1424
  width = (width.to_f / 100) * page_width if ViewportWidth === width
1421
1425
 
1422
- if node.title?
1423
- # NOTE: if width is not set explicitly and max-width is fit-content, caption height may not be accurate
1424
- caption_max_w = width && @theme.image_caption_max_width == 'fit-content' ? width : nil
1425
- caption_h = layout_caption node, category: :image, side: :bottom, block_align: alignment, max_width: caption_max_w, dry_run: true
1426
- else
1427
- caption_h = 0
1428
- end
1426
+ # NOTE: if width is not set explicitly and max-width is fit-content, caption height may not be accurate
1427
+ caption_h = node.title? ? (layout_caption node, category: :image, side: :bottom, block_align: alignment, block_width: width, max_width: @theme.image_caption_max_width, dry_run: true) : 0
1429
1428
 
1430
1429
  align_to_page = node.option? 'align-to-page'
1431
1430
 
@@ -1472,6 +1471,9 @@ module Asciidoctor
1472
1471
  # NOTE: prawn-svg 0.24.0, 0.25.0, & 0.25.1 didn't restore font after call to draw (see mogest/prawn-svg#80)
1473
1472
  # NOTE: cursor advances automatically
1474
1473
  svg_obj.draw
1474
+ svg_obj.document.warnings.each do |img_warning|
1475
+ logger.warn %(problem encountered in image: #{image_path}; #{img_warning})
1476
+ end
1475
1477
  draw_image_border image_cursor, rendered_w, rendered_h, alignment unless node.role? && (node.has_role? 'noborder')
1476
1478
  if (link = node.attr 'link', nil, false)
1477
1479
  add_link_to_image link, { width: rendered_w, height: rendered_h }, position: alignment, y: image_y
@@ -1509,10 +1511,7 @@ module Asciidoctor
1509
1511
  move_down rendered_h if y == image_y
1510
1512
  end
1511
1513
  end
1512
- if node.title?
1513
- caption_max_w = @theme.image_caption_max_width == 'fit-content' ? rendered_w : nil
1514
- layout_caption node, category: :image, side: :bottom, block_align: alignment, max_width: caption_max_w
1515
- end
1514
+ layout_caption node, category: :image, side: :bottom, block_align: alignment, block_width: rendered_w, max_width: @theme.image_caption_max_width if node.title?
1516
1515
  theme_margin :block, :bottom unless pinned
1517
1516
  rescue
1518
1517
  on_image_error :exception, node, target, (opts.merge message: %(could not embed image: #{image_path}; #{$!.message}#{::Prawn::Errors::UnsupportedImageType === $! ? '; install prawn-gmagick gem to add support' : ''}))
@@ -1586,7 +1585,7 @@ module Asciidoctor
1586
1585
  else
1587
1586
  ::OpenURI
1588
1587
  end
1589
- poster = open %(http://vimeo.com/api/v2/video/#{video_id}.xml), 'r' do |f|
1588
+ poster = ::OpenURI.open_uri %(http://vimeo.com/api/v2/video/#{video_id}.xml), 'r' do |f|
1590
1589
  /<thumbnail_large>(.*?)<\/thumbnail_large>/ =~ f.read && $1
1591
1590
  end
1592
1591
  end
@@ -1954,7 +1953,7 @@ module Asciidoctor
1954
1953
  text_color: @font_color,
1955
1954
  font: header_cell_font_info[:family],
1956
1955
  size: header_cell_font_info[:size],
1957
- style: header_cell_font_style[:style],
1956
+ font_style: header_cell_font_info[:style],
1958
1957
  text_transform: @text_transform,
1959
1958
  }
1960
1959
  header_cell_line_metrics = calc_line_metrics theme.base_line_height
@@ -2099,7 +2098,7 @@ module Asciidoctor
2099
2098
  end
2100
2099
 
2101
2100
  caption_side = (theme.table_caption_side || :top).to_sym
2102
- caption_max_width = (theme.table_caption_max_width || 'fit-content').to_s
2101
+ caption_max_width = theme.table_caption_max_width || 'fit-content'
2103
2102
 
2104
2103
  table_settings = {
2105
2104
  header: table_header,
@@ -2134,8 +2133,7 @@ module Asciidoctor
2134
2133
  table table_data, table_settings do
2135
2134
  # NOTE: call width to capture resolved table width
2136
2135
  table_width = width
2137
- caption_max_width = caption_max_width == 'fit-content' ? table_width : nil
2138
- @pdf.layout_table_caption node, alignment, caption_max_width if node.title? && caption_side == :top
2136
+ @pdf.layout_table_caption node, alignment, table_width, caption_max_width if node.title? && caption_side == :top
2139
2137
  # NOTE align using padding instead of bounding_box as prawn-table does
2140
2138
  # using a bounding_box across pages mangles the margin box of subsequent pages
2141
2139
  if alignment != :left && table_width != (this_bounds = @pdf.bounds).width
@@ -2210,7 +2208,7 @@ module Asciidoctor
2210
2208
  bounds.subtract_left_padding left_padding
2211
2209
  bounds.subtract_right_padding right_padding if right_padding
2212
2210
  end
2213
- layout_table_caption node, alignment, caption_max_width, caption_side if node.title? && caption_side == :bottom
2211
+ layout_table_caption node, alignment, table_width, caption_max_width, caption_side if node.title? && caption_side == :bottom
2214
2212
  theme_margin :block, :bottom
2215
2213
  end
2216
2214
 
@@ -2294,9 +2292,10 @@ module Asciidoctor
2294
2292
  end
2295
2293
  text = %(#{text}, #{pagenums.join ', '})
2296
2294
  end
2297
- layout_prose text, align: :left, margin: 0, normalize_line_height: true, hanging_indent: @theme.description_list_description_indent * 2
2298
- term.subterms.each do |subterm|
2299
- indent @theme.description_list_description_indent do
2295
+ subterm_indent = @theme.description_list_description_indent
2296
+ layout_prose text, align: :left, margin: 0, normalize_line_height: true, hanging_indent: subterm_indent * 2
2297
+ indent subterm_indent do
2298
+ term.subterms.each do |subterm|
2300
2299
  convert_index_list_item subterm
2301
2300
  end
2302
2301
  end unless term.leaf?
@@ -2873,17 +2872,20 @@ module Asciidoctor
2873
2872
  else
2874
2873
  align = @base_align.to_sym
2875
2874
  end
2876
- if block_align && (max_width = opts.delete :max_width) && (remainder = bounds.width - max_width) > 0
2877
- case block_align
2878
- when :right
2879
- indent_by = [remainder, 0]
2880
- when :center
2881
- indent_by = [(side_margin = remainder * 0.5), side_margin]
2882
- else # :left
2883
- indent_by = [0, remainder]
2875
+ indent_by = [0, 0]
2876
+ if block_align
2877
+ block_width = opts.delete :block_width
2878
+ if (max_width = opts.delete :max_width) && max_width != 'none' &&
2879
+ (max_width != 'fit-content' || (max_width = block_width)) && (remainder = bounds.width - max_width) > 0
2880
+ case block_align
2881
+ when :right
2882
+ indent_by = [remainder, 0]
2883
+ when :center
2884
+ indent_by = [(side_margin = remainder * 0.5), side_margin]
2885
+ else # :left
2886
+ indent_by = [0, remainder]
2887
+ end
2884
2888
  end
2885
- else
2886
- indent_by = [0, 0]
2887
2889
  end
2888
2890
  theme_font :caption do
2889
2891
  theme_font category_caption do
@@ -2920,8 +2922,8 @@ module Asciidoctor
2920
2922
  end
2921
2923
 
2922
2924
  # Render the caption for a table and return the height of the rendered content
2923
- def layout_table_caption node, table_alignment = :left, max_width = nil, side = :top
2924
- layout_caption node, category: :table, side: side, block_align: table_alignment, max_width: max_width
2925
+ def layout_table_caption node, table_alignment = :left, table_width = nil, max_width = nil, side = :top
2926
+ layout_caption node, category: :table, side: side, block_align: table_alignment, block_width: table_width, max_width: max_width
2925
2927
  end
2926
2928
 
2927
2929
  def allocate_toc doc, toc_num_levels, toc_start_y, use_title_page
@@ -4031,7 +4033,7 @@ module Asciidoctor
4031
4033
  tmp_image = ::Tempfile.create ['image-', image_format && %(.#{image_format})]
4032
4034
  tmp_image.binmode if (binary = image_format != 'svg')
4033
4035
  begin
4034
- open(image_path, (binary ? 'rb' : 'r')) {|fd| tmp_image.write fd.read }
4036
+ ::OpenURI.open_uri(image_path, (binary ? 'rb' : 'r')) {|fd| tmp_image.write fd.read }
4035
4037
  tmp_image.path.extend TemporaryPath
4036
4038
  rescue
4037
4039
  logger.warn %(could not retrieve remote image: #{image_path}; #{$!.message}) unless scratch?
@@ -18,6 +18,9 @@ class PDF::Core::Page
18
18
  document.open_graphics_state
19
19
  end unless method_defined? :new_content_stream
20
20
 
21
+ # NOTE alias method to avoid warning if another gem replaces this method
22
+ alias __new_content_stream new_content_stream
23
+
21
24
  # Restore the imported_page? method from PDF::Core::Page
22
25
  #
23
26
  # see https://github.com/prawnpdf/pdf-core/commit/0e326a838e142061be8e062168190fae6b3b1dcf
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # the following are organized under the Asciidoctor::Prawn namespace
4
+ require_relative 'prawn/font_metric_cache'
4
5
  require_relative 'prawn/font/afm'
5
6
  require_relative 'prawn/images'
6
7
  require_relative 'prawn/formatted_text/box'
@@ -203,7 +203,7 @@ module Asciidoctor
203
203
  options = options.reject {|k| k == :style } if options.key? :style
204
204
  end
205
205
  end
206
- super name, options
206
+ super
207
207
  end
208
208
 
209
209
  # Retrieves the current font name (i.e., family).
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Prawn::FontMetricCache::CacheEntry
4
+ # workaround for https://github.com/prawnpdf/prawn/issues/1140
5
+ def initialize font, options, size
6
+ font = font.hash
7
+ super
8
+ end
9
+ end
@@ -33,7 +33,12 @@ module Asciidoctor::PDF::FormattedText
33
33
  (image_obj = data[:image_obj]).options[:at] = [image_left, image_top]
34
34
  # NOTE prawn-svg messes with the cursor; use float to workaround
35
35
  # NOTE prawn-svg 0.24.0, 0.25.0, & 0.25.1 didn't restore font after call to draw (see mogest/prawn-svg#80)
36
- pdf.float { image_obj.draw }
36
+ pdf.float do
37
+ image_obj.draw
38
+ image_obj.document.warnings.each do |img_warning|
39
+ pdf.logger.warn %(problem encountered in image: #{data[:image_path]}; #{img_warning})
40
+ end
41
+ end
37
42
  else
38
43
  pdf.embed_image data[:image_obj], data[:image_info], at: [image_left, image_top], width: data[:image_width], height: data[:image_height]
39
44
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Asciidoctor
4
4
  module PDF
5
- VERSION = '1.5.0.rc.1'
5
+ VERSION = '1.5.0.rc.2'
6
6
  end
7
7
  Pdf = PDF unless const_defined? :Pdf, false
8
8
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asciidoctor-pdf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0.rc.1
4
+ version: 1.5.0.rc.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dan Allen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-01-06 00:00:00.000000000 Z
12
+ date: 2020-01-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: asciidoctor
@@ -393,6 +393,7 @@ files:
393
393
  - lib/asciidoctor/pdf/ext/prawn/coderay_encoder.rb
394
394
  - lib/asciidoctor/pdf/ext/prawn/extensions.rb
395
395
  - lib/asciidoctor/pdf/ext/prawn/font/afm.rb
396
+ - lib/asciidoctor/pdf/ext/prawn/font_metric_cache.rb
396
397
  - lib/asciidoctor/pdf/ext/prawn/formatted_text/box.rb
397
398
  - lib/asciidoctor/pdf/ext/prawn/formatted_text/fragment.rb
398
399
  - lib/asciidoctor/pdf/ext/prawn/images.rb
@@ -445,7 +446,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
445
446
  - !ruby/object:Gem::Version
446
447
  version: 1.3.1
447
448
  requirements: []
448
- rubygems_version: 3.0.6
449
+ rubygems_version: 3.1.2
449
450
  signing_key:
450
451
  specification_version: 4
451
452
  summary: Converts AsciiDoc documents to PDF using Asciidoctor and Prawn