From 01f11a7dcf323c9fb5ab18aa269302c4d0e08ec1 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Thu, 14 Apr 2022 16:47:51 -0600 Subject: [PATCH] resolves #1515 implement smart block bottom margins to prevent extra space below blocks, particularly nested blocks (PR #2028) --- CHANGELOG.adoc | 2 + data/themes/base-theme.yml | 12 +- data/themes/default-theme.yml | 11 +- docs/theming-guide.adoc | 28 +- lib/asciidoctor/pdf/converter.rb | 188 +++--- lib/asciidoctor/pdf/ext/prawn/extensions.rb | 8 +- spec/abstract_spec.rb | 73 +++ spec/admonition_spec.rb | 19 +- spec/arrange_block_spec.rb | 51 +- spec/converter_spec.rb | 583 ++++++++++++++++++ spec/hyphens_spec.rb | 14 +- spec/image_spec.rb | 10 +- spec/list_spec.rb | 176 +++++- spec/listing_spec.rb | 7 +- spec/quote_spec.rb | 4 +- .../arrange-block-at-top-does-not-fit.pdf | Bin 100519 -> 100515 bytes spec/reference/arrange-block-at-top-fits.pdf | Bin 136036 -> 135795 bytes ...-block-below-top-does-not-fit-prepress.pdf | Bin 99257 -> 99252 bytes .../arrange-block-below-top-does-not-fit.pdf | Bin 98886 -> 98884 bytes .../arrange-block-below-top-fits.pdf | Bin 132429 -> 132439 bytes spec/reference/image-wrap-inline.pdf | Bin 76517 -> 76517 bytes spec/reference/list-horizontal-dlist.pdf | Bin 23465 -> 23554 bytes spec/table_spec.rb | 20 +- spec/verse_spec.rb | 2 +- 24 files changed, 1045 insertions(+), 163 deletions(-) diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index f3c417cc5..c5872a2a8 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -12,6 +12,8 @@ Enhancements:: * make delimited blocks breakable by default; require the `unbreakable` option on the block to retain the previous "`keep together`" behavior (#2004, #578, #509, #240) * add support for the %unbreakable option on a table to keep it from being split across pages (#2022, #871, #819, #331) * add support for the %breakable option on a table (special case) to keep the caption and ID with the start of the table (#2022, #993) +* implement smart block bottom margins to prevent extra space below blocks, particularly nested blocks (#1515, #1513, #1845) +* drop support for `top-margin` key on block and prose categories in theme; space between delimited blocks and lists now controlled using bottom margins only (#1515) * allow page numbering and running content to start after first page of a document without a title page by assigning an integer to the respective `start_at` theme key (#1644) * allow page numbering and running content to start after toc (wherever it is placed) by assigning the keyword `after-toc` to the respective `start_at` theme key (#1763) * allow theme to configure page numbering to start at cover (#1727) diff --git a/data/themes/base-theme.yml b/data/themes/base-theme.yml index 57458ed62..f1a889b56 100644 --- a/data/themes/base-theme.yml +++ b/data/themes/base-theme.yml @@ -69,15 +69,15 @@ abstract_title_align: center abstract_title_font_style: bold admonition_column_rule_color: 'EEEEEE' admonition_column_rule_width: 0.5 -admonition_padding: [0, 12, 0, 12] +admonition_padding: [4, 12, 4, 12] admonition_label_font_style: bold admonition_label_text_transform: uppercase blockquote_border_color: 'EEEEEE' blockquote_border_left_width: 4 -blockquote_padding: [6, 12, -6, 14] +blockquote_padding: [6, 12, 6, 14] verse_border_color: 'EEEEEE' verse_border_left_width: 4 -verse_padding: [6, 12, -6, 14] +verse_padding: [6, 12, 6, 14] code_font_family: Courier code_font_size: 10.8 code_line_height: 1.2 @@ -90,15 +90,13 @@ conum_glyphs: circled example_background_color: 'FFFFFF' example_border_color: 'EEEEEE' example_border_width: 0.5 -# FIXME reenable margin bottom once margin collapsing is implemented -example_padding: [12, 12, 0, 12] +example_padding: 12 image_align: left lead_font_size: 13.5 lead_line_height: 1.4 prose_margin_bottom: 12 sidebar_background_color: 'EEEEEE' -# FIXME reenable margin bottom once margin collapsing is implemented -sidebar_padding: [12, 12, 0, 12] +sidebar_padding: 12 sidebar_title_align: center sidebar_title_font_style: bold table_border_color: '000000' diff --git a/data/themes/default-theme.yml b/data/themes/default-theme.yml index 2e0749692..87ab27dbf 100644 --- a/data/themes/default-theme.yml +++ b/data/themes/default-theme.yml @@ -156,7 +156,7 @@ abstract: admonition: column_rule_color: $base_border_color column_rule_width: $base_border_width - padding: [0, $horizontal_rhythm, 0, $horizontal_rhythm] + padding: [$vertical_rhythm / 3.0, $horizontal_rhythm, $vertical_rhythm / 3.0, $horizontal_rhythm] #icon: # tip: # name: far-lightbulb @@ -170,8 +170,7 @@ blockquote: border_color: $base_border_color border_width: 0 border_left_width: 5 - # FIXME disable negative padding bottom once margin collapsing is implemented - padding: [0, $horizontal_rhythm, $block_margin_bottom * -0.75, $horizontal_rhythm + $blockquote_border_left_width / 2] + padding: [0, $horizontal_rhythm, $block_margin_bottom * 0.25, $horizontal_rhythm + $blockquote_border_left_width / 2] cite: font_size: $base_font_size_small font_color: $role_subtitle_font_color @@ -210,8 +209,7 @@ example: border_radius: $base_border_radius border_width: 0.75 background_color: $page_background_color - # FIXME reenable padding bottom once margin collapsing is implemented - padding: [$vertical_rhythm, $horizontal_rhythm, 0, $horizontal_rhythm] + padding: [$vertical_rhythm, $horizontal_rhythm, $vertical_rhythm, $horizontal_rhythm] image: align: left prose: @@ -221,8 +219,7 @@ sidebar: border_color: E1E1E1 border_radius: $base_border_radius border_width: $base_border_width - # FIXME reenable padding bottom once margin collapsing is implemented - padding: [$vertical_rhythm, $vertical_rhythm * 1.25, 0, $vertical_rhythm * 1.25] + padding: [$vertical_rhythm, $vertical_rhythm * 1.25, $vertical_rhythm, $vertical_rhythm * 1.25] title: align: center font_color: $heading_font_color diff --git a/docs/theming-guide.adoc b/docs/theming-guide.adoc index ae59e0853..8f35ca9e3 100644 --- a/docs/theming-guide.adoc +++ b/docs/theming-guide.adoc @@ -2352,8 +2352,8 @@ The position of the background image can be controlled using the `position` attr [#keys-prose] === Prose -The keys in this category control the spacing around paragraphs (paragraph blocks, paragraph content of a block, and other prose content). -Typically, all the margin is placed on the bottom. +The keys in this category control the spacing below paragraphs, lists, and index categories. +The bottom margin is only added if the block is followed by an adjacent block within the same enclosure (e.g., a sidebar, a table cell, or the area outside of any blocks). [cols="3,4,5l"] |=== @@ -2361,11 +2361,11 @@ Typically, all the margin is placed on the bottom. 3+|[#key-prefix-prose]*Key Prefix:* <> -|margin-top -|<> + -(default: 0) -|prose: - margin-top: 0 +//|margin-top +//|<> + +//(default: 0) +//|prose: +// margin-top: 0 |margin-bottom |<> + @@ -2392,7 +2392,9 @@ Useful when using indented paragraphs. [#keys-block] === Block -The keys in this category control the spacing around block elements when a more specific setting is not designated. +The keys in this category control the spacing below block elements when a more specific setting is not designated. +See the second table in this section for a list of blocks to which these keys apply. +The bottom margin is only added if the block is followed by an adjacent block within the same enclosure (e.g., a sidebar, a table cell, or the area outside of any blocks). [cols="3,4,5l"] |=== @@ -2405,11 +2407,11 @@ The keys in this category control the spacing around block elements when a more //|block: // padding: [12, 15, 12, 15] -|margin-top -|<> + -(default: 0) -|block: - margin-top: 6 +//|margin-top +//|<> + +//(default: 0) +//|block: +// margin-top: 6 |margin-bottom |<> + diff --git a/lib/asciidoctor/pdf/converter.rb b/lib/asciidoctor/pdf/converter.rb index 799b517a5..b86ec8b39 100644 --- a/lib/asciidoctor/pdf/converter.rb +++ b/lib/asciidoctor/pdf/converter.rb @@ -165,7 +165,7 @@ def traverse node, opts = {} node.content elsif node.content_model != :compound && (string = node.content) # TODO: this content could be cached on repeat invocations! - layout_prose string, (opts.merge hyphenate: true) + layout_prose string, (opts.merge hyphenate: true, margin_bottom: 0) end ensure node.document.instance_variable_set :@converter, prev_converter if prev_converter @@ -708,6 +708,7 @@ def outdent_section enabled = true # QUESTION: if a footnote ref appears in a separate chapter, should the footnote def be duplicated? def layout_footnotes node return if (fns = (doc = node.document).footnotes - @rendered_footnotes).empty? + theme_margin :block, :bottom if node.context == :document || node == node.document.blocks[-1] theme_margin :footnotes, :top with_dry_run do |extent| if (single_page_height = extent&.single_page_height) && (delta = cursor - single_page_height - 0.0001) > 0 @@ -766,11 +767,14 @@ def convert_abstract node prose_opts[:first_line_options] = first_line_options if first_line_options # FIXME: make this cleaner!! if node.blocks? - node.blocks.each do |child| + last_block = (blocks = node.blocks)[-1] + blocks.each do |child| if child.context == :paragraph child.document.playback_attributes child.attributes + prose_opts[:margin_bottom] = 0 if child == last_block layout_prose child.content, ((align = resolve_alignment_from_role child.roles) ? (prose_opts.merge align: align) : prose_opts.dup) prose_opts.delete :first_line_options + prose_opts.delete :margin_bottom else # FIXME: this could do strange things if the wrong kind of content shows up child.convert @@ -780,13 +784,13 @@ def convert_abstract node if (align = resolve_alignment_from_role node.roles) prose_opts[:align] = align end - layout_prose string, prose_opts + layout_prose string, (prose_opts.merge margin_bottom: 0) end end end - # QUESTION: should we be adding margin below the abstract?? - #theme_margin :block, :bottom end + # NOTE: next enclosed block here is confined to preamble + theme_margin :block, :bottom, (next_enclosed_block node) end def convert_preamble node @@ -795,6 +799,7 @@ def convert_preamble node first_block.add_role 'lead' end traverse node + theme_margin :block, :bottom, (next_enclosed_block node) convert_toc node, placement: 'preamble' end @@ -822,16 +827,15 @@ def convert_paragraph node layout_prose node.content, prose_opts end - if (margin_inner_val = @theme.prose_margin_inner) && - (next_block = (siblings = node.parent.blocks)[(siblings.index node) + 1]) && next_block.context == :paragraph + block_next = next_enclosed_block node + if (margin_inner_val = @theme.prose_margin_inner) && block_next&.context == :paragraph margin_bottom margin_inner_val else - margin_bottom @theme.prose_margin_bottom + theme_margin :prose, :bottom, block_next end end def convert_admonition node - theme_margin :block, :top type = node.attr 'name' label_align = @theme.admonition_label_align&.to_sym || :center # TODO: allow vertical_align to be a number @@ -872,10 +876,6 @@ def convert_admonition node unless ::Array === (lpad = @theme.admonition_label_padding || cpad) lpad = ::Array.new 4, lpad end - # FIXME: this shift stuff is a real hack until we have proper margin collapsing - shift_base = @theme.prose_margin_bottom - shift_top = shift_base / 3.0 - shift_bottom = (shift_base * 2) / 3.0 arrange_block node do |extent| add_dest_for_block node if node.id theme_fill_and_stroke_block :admonition, extent if extent @@ -992,22 +992,18 @@ def convert_admonition node end end pad_box [cpad[0], 0, cpad[2], label_width + lpad[1] + cpad[3]] do - move_down shift_top layout_caption node, category: :admonition, labeled: false if node.title? theme_font :admonition do traverse node end - # FIXME: HACK compensate for margin bottom of admonition content - move_up shift_bottom unless at_page_top? end end end - theme_margin :block, :bottom + theme_margin :block, :bottom, (next_enclosed_block node) end def convert_example node return convert_open node if node.option? 'collapsible' - theme_margin :block, :top arrange_block node do |extent| add_dest_for_block node if node.id # Q: do we want to put anchor above top margin instead? tare_first_page_content_stream do @@ -1019,7 +1015,7 @@ def convert_example node end end end - theme_margin :block, :bottom + theme_margin :block, :bottom, (next_enclosed_block node) end def convert_open node @@ -1042,7 +1038,6 @@ def convert_open node end def convert_quote_or_verse node - theme_margin :block, :top category = node.context == :quote ? :blockquote : :verse # NOTE: b_width and b_left_width are mutually exclusive if (b_left_width = @theme[%(#{category}_border_left_width)]) && b_left_width > 0 @@ -1074,10 +1069,11 @@ def convert_quote_or_verse node traverse node else # verse content = guard_indentation node.content - layout_prose content, normalize: false, align: :left, hyphenate: true + layout_prose content, normalize: false, align: :left, hyphenate: true, margin_bottom: 0 end end if node.attr? 'attribution' + margin_bottom @theme.block_margin_bottom theme_font %(#{category}_cite) do # NOTE: temporary workaround to allow bare & to be used without having to wrap value in single quotes attribution = node.attr 'attribution' @@ -1087,50 +1083,49 @@ def convert_quote_or_verse node citetitle = escape_amp citetitle if citetitle.include? '&' attribution_parts << citetitle end - layout_prose %(#{EmDash} #{attribution_parts.join ', '}), align: :left, normalize: false + layout_prose %(#{EmDash} #{attribution_parts.join ', '}), align: :left, normalize: false, margin_bottom: 0 end end end end - theme_margin :block, :bottom + theme_margin :block, :bottom, (next_enclosed_block node) end alias convert_quote convert_quote_or_verse alias convert_verse convert_quote_or_verse def convert_sidebar node - theme_margin :block, :top arrange_block node do |extent| add_dest_for_block node if node.id theme_fill_and_stroke_block :sidebar, extent if extent pad_box @theme.sidebar_padding do theme_font :sidebar_title do # QUESTION: should we allow margins of sidebar title to be customized? - layout_prose node.title, align: (@theme.sidebar_title_align || @theme.heading_align || @base_align).to_sym, margin_top: 0, margin_bottom: @theme.heading_margin_bottom, line_height: @theme.heading_line_height + layout_prose node.title, align: (@theme.sidebar_title_align || @theme.heading_align || @base_align).to_sym, margin_bottom: @theme.heading_margin_bottom, line_height: @theme.heading_line_height end if node.title? theme_font :sidebar do traverse node end end end - theme_margin :block, :bottom + theme_margin :block, :bottom, (next_enclosed_block node) end def convert_colist node - move_down @theme.code_callout_list_margin_top if !at_page_top? && ([:listing, :literal].include? node.parent.blocks[(node.parent.blocks.index node) - 1].context) + margin_top @theme.code_callout_list_margin_top if !at_page_top? && ([:listing, :literal].include? node.parent.blocks[(node.parent.blocks.index node) - 1].context) add_dest_for_block node if node.id @list_numerals << 1 line_metrics = theme_font(:conum) { calc_line_metrics @theme.base_line_height } + last_item = node.items[-1] node.items.each do |item| allocate_space_for_list_item line_metrics - convert_colist_item item + convert_colist_item item, margin_bottom: (item == last_item ? 0 : @theme.outline_list_item_spacing), normalize_line_height: true end @list_numerals.pop - # correct bottom margin of last item - margin_bottom @theme.prose_margin_bottom - @theme.outline_list_item_spacing + theme_margin :prose, :bottom, (next_enclosed_block node) end - def convert_colist_item node + def convert_colist_item node, opts marker_width = nil @list_numerals << (index = @list_numerals.pop).next theme_font :conum do @@ -1145,7 +1140,7 @@ def convert_colist_item node end indent marker_width do - traverse_list_item node, :colist, margin_bottom: @theme.outline_list_item_spacing, normalize_line_height: true + traverse_list_item node, :colist, opts end end @@ -1179,18 +1174,21 @@ def convert_dlist node markers.pop when 'horizontal' table_data = [] - term_padding = term_font_color = term_transform = desc_padding = term_line_metrics = term_inline_format = term_kerning = nil + term_padding = term_padding_no_blocks = term_font_color = term_transform = desc_padding = term_line_metrics = term_inline_format = term_kerning = nil max_term_width = 0 theme_font :description_list_term do term_font_color = @font_color term_transform = @text_transform term_inline_format = (term_font_styles = font_styles).empty? ? true : [inherited: { styles: term_font_styles }] term_line_metrics = calc_line_metrics @theme.description_list_term_line_height || @theme.base_line_height - term_padding = [term_line_metrics.padding_top, 10, @theme.prose_margin_bottom * 0.5 + term_line_metrics.padding_bottom, 10] - desc_padding = [0, 10, @theme.prose_margin_bottom * 0.5, 10] + term_padding_no_blocks = [term_line_metrics.padding_top, 10, term_line_metrics.padding_bottom, 10] + (term_padding = term_padding_no_blocks.dup)[2] += @theme.prose_margin_bottom * 0.5 + desc_padding = [0, 10, 0, 10] term_kerning = default_kerning? end - node.items.each do |terms, desc| + actual_node, node = node, node.dup + (node.instance_variable_set :@blocks, node.items.map(&:dup)).each do |item| + terms, desc = item term_text = terms.map(&:text).join ?\n term_text = transform_text term_text, term_transform if term_transform if (term_width = width_of term_text, inline_format: term_inline_format, kerning: term_kerning) > max_term_width @@ -1201,19 +1199,17 @@ def convert_dlist node kerning: term_kerning, content: term_text, inline_format: term_inline_format, - padding: term_padding, + padding: desc&.blocks? ? term_padding : term_padding_no_blocks, leading: term_line_metrics.leading, # FIXME: prawn-table doesn't have support for final_gap option #final_gap: term_line_metrics.final_gap, valign: :top, }] if desc - desc_container = Block.new desc, :open + desc_container = Block.new node, :open desc_container << (Block.new desc_container, :paragraph, source: (desc.instance_variable_get :@text), subs: :default) if desc.text? - desc.blocks.each {|b| desc_container << b } if desc.blocks? - row_data << { - content: (::Prawn::Table::Cell::AsciiDoc.new self, content: desc_container, text_color: @font_color, padding: desc_padding, valign: :top), - } + desc.blocks.each {|b| desc_container << b.dup } if desc.blocks? + row_data << { content: (::Prawn::Table::Cell::AsciiDoc.new self, content: (item[1] = desc_container), text_color: @font_color, padding: desc_padding, valign: :top) } else row_data << {} end @@ -1224,7 +1220,7 @@ def convert_dlist node table table_data, position: :left, cell_style: { border_width: 0 }, column_widths: [term_column_width] do @pdf.layout_table_caption node if node.title? end - margin_bottom @theme.prose_margin_bottom * 0.5 + theme_margin :prose, :bottom, (next_enclosed_block actual_node) #unless actual_node.nested? when 'qanda' @list_numerals << '1' convert_list node @@ -1250,19 +1246,12 @@ def convert_dlist node end end indent @theme.description_list_description_indent do + #margin_bottom (desc.simple? ? @theme.outline_list_item_spacing : term_spacing) margin_bottom term_spacing - traverse_list_item desc, :dlist_desc, normalize_line_height: true, margin_bottom: (node.items[-1][1] == desc && !desc.blocks? ? 0 : nil) + traverse_list_item desc, :dlist_desc, normalize_line_height: true, margin_bottom: ((next_enclosed_block desc, descend: true) ? nil : 0) end if desc end - if node.nested? && node.parent.parent.outline? - if node.parent.parent.items[-1].blocks[-1] == node - margin_bottom @theme.prose_margin_bottom - @theme.outline_list_item_spacing - else - margin_bottom @theme.prose_margin_bottom - end - else - margin_bottom @theme.prose_margin_bottom - end + theme_margin :prose, :bottom, (next_enclosed_block node) unless node.nested? end end @@ -1373,13 +1362,7 @@ def convert_list node convert_list_item item, node, opts end end - # NOTE: children will provide the necessary bottom margin if last item is complex. - # However, don't leave gap at the bottom if list is nested in an outline list - #unless complex || (node.nested? && node.parent.parent.outline?) - unless node.nested? && node.parent.parent.outline? - # correct bottom margin of last item - margin_bottom @theme.prose_margin_bottom - @theme.outline_list_item_spacing - end + theme_margin :prose, :bottom, (next_enclosed_block node) unless node.nested? end def convert_list_item node, list, opts = {} @@ -1392,11 +1375,11 @@ def convert_list_item node, list, opts = {} case (list_type = list.context) when :dlist # NOTE: list.style is always 'qanda' - complex = node[1]&.compound? + junction = node[1] @list_numerals << (index = @list_numerals.pop).next marker = %(#{index}.) when :olist - complex = node.compound? + junction = node if (index = @list_numerals.pop) if index == '' marker = '' @@ -1407,7 +1390,7 @@ def convert_list_item node, list, opts = {} end end else # :ulist - complex = node.compound? + junction = node if (marker_type = @list_bullets[-1]) if marker_type == :checkbox # QUESTION: should we remove marker indent if not a checkbox? @@ -1457,17 +1440,21 @@ def convert_list_item node, list, opts = {} end end - if complex - traverse_list_item node, list_type, (opts.merge normalize_line_height: true) - else - traverse_list_item node, list_type, (opts.merge margin_bottom: @theme.outline_list_item_spacing, normalize_line_height: true) + opts = opts.merge margin_bottom: 0, normalize_line_height: true + if junction + if junction.compound? + opts.delete :margin_bottom + elsif next_enclosed_block junction, descend: true + opts[:margin_bottom] = @theme.outline_list_item_spacing + end end + traverse_list_item node, list_type, opts end def traverse_list_item node, list_type, opts = {} if list_type == :dlist # qanda terms, desc = node - terms.each {|term| layout_prose %(#{term.text}), (opts.merge margin_top: 0, margin_bottom: @theme.description_list_term_spacing) } + terms.each {|term| layout_prose %(#{term.text}), (opts.merge margin_bottom: @theme.description_list_term_spacing) } if desc layout_prose desc.text, (opts.merge hyphenate: true) if desc.text? traverse desc @@ -1527,8 +1514,6 @@ def convert_image node, opts = {} end end - top_margin = (pinned = opts[:pinned]) ? 0 : (theme_margin :block, :top) - return on_image_error :missing, node, target, opts unless image_path alignment = (alignment = node.attr 'align') ? @@ -1543,6 +1528,7 @@ def convert_image node, opts = {} 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, force_top_margin: true) : 0 align_to_page = node.option? 'align-to-page' + pinned = opts[:pinned] begin rendered_w = nil @@ -1572,13 +1558,12 @@ def convert_image node, opts = {} unless pinned || at_page_top? advance_page available_h = cursor - caption_h - top_margin = 0 end rendered_w = (svg_obj.resize height: (rendered_h = available_h)).output_width if rendered_h > available_h end image_y = y image_cursor = cursor - add_dest_for_block node, y: image_y + top_margin if node.id + add_dest_for_block node, y: image_y if node.id # NOTE: workaround to fix Prawn not adding fill and stroke commands on page that only has an image; # breakage occurs when running content (stamps) are added to page update_colors if graphic_state.color_space.empty? @@ -1604,13 +1589,12 @@ def convert_image node, opts = {} unless pinned || at_page_top? advance_page available_h = cursor - caption_h - top_margin = 0 end rendered_w, rendered_h = image_info.calc_image_dimensions height: available_h if rendered_h > available_h end image_y = y image_cursor = cursor - add_dest_for_block node, y: image_y + top_margin if node.id + add_dest_for_block node, y: image_y if node.id # NOTE: workaround to fix Prawn not adding fill and stroke commands on page that only has an image; # breakage occurs when running content (stamps) are added to page update_colors if graphic_state.color_space.empty? @@ -1625,7 +1609,7 @@ def convert_image node, opts = {} end end layout_caption node, category: :image, side: :bottom, block_align: alignment, block_width: rendered_w, max_width: @theme.image_caption_max_width if node.title? - theme_margin :block, :bottom unless pinned + theme_margin :block, :bottom, (next_enclosed_block node) unless pinned rescue => e raise if ::StopIteration === e on_image_error :exception, node, target, (opts.merge message: %(could not embed image: #{image_path}; #{e.message}#{::Prawn::Errors::UnsupportedImageType === e && !(defined? ::GMagick::Image) ? '; install prawn-gmagick gem to add support' : ''})) @@ -1667,18 +1651,17 @@ def on_image_error _reason, node, target, opts layout_prose alt_text_template % alt_text_vars, align: alignment, margin: 0, normalize: false, single_line: true end layout_caption node, category: :image, side: :bottom if node.title? - theme_margin :block, :bottom unless opts[:pinned] + theme_margin :block, :bottom, (next_enclosed_block node) unless opts[:pinned] nil end def convert_audio node add_dest_for_block node if node.id - theme_margin :block, :top audio_path = node.media_uri node.attr 'target' play_symbol = (node.document.attr? 'icons', 'font') ? %(#{(icon_font_data 'fas').unicode 'play'}) : RightPointer layout_prose %(#{play_symbol}#{NoBreakSpace}#{audio_path} (audio)), normalize: false, margin: 0, single_line: true layout_caption node, labeled: false, side: :bottom if node.title? - theme_margin :block, :bottom + theme_margin :block, :bottom, (next_enclosed_block node) end def convert_video node @@ -1703,11 +1686,10 @@ def convert_video node if poster.nil_or_empty? add_dest_for_block node if node.id - theme_margin :block, :top play_symbol = (node.document.attr? 'icons', 'font') ? %(#{(icon_font_data 'fas').unicode 'play'}) : RightPointer layout_prose %(#{play_symbol}#{NoBreakSpace}#{video_path} (#{type})), normalize: false, margin: 0, single_line: true layout_caption node, labeled: false, side: :bottom if node.title? - theme_margin :block, :bottom + theme_margin :block, :bottom, (next_enclosed_block node) else original_attributes = node.attributes.dup begin @@ -1847,8 +1829,6 @@ def convert_listing_or_literal node adjusted_font_size = ((node.option? 'autofit') || (node.document.attr? 'autofit-option')) ? (compute_autofit_font_size source_chunks, :code) : nil end - theme_margin :block, :top - arrange_block node do |extent| add_dest_for_block node if node.id tare_first_page_content_stream do @@ -1866,7 +1846,7 @@ def convert_listing_or_literal node end end - theme_margin :block, :bottom + theme_margin :block, :bottom, (next_enclosed_block node) end alias convert_listing convert_listing_or_literal @@ -2264,8 +2244,6 @@ def convert_table node table_settings[:row_colors] = [body_bg_color] end - theme_margin :block, :top - left_padding = right_padding = nil table table_data, table_settings do # NOTE: call width to capture resolved table width @@ -2344,15 +2322,15 @@ def convert_table node bounds.subtract_right_padding right_padding if right_padding end layout_table_caption node, alignment, table_width, caption_max_width, caption_side if node.title? && caption_side == :bottom - theme_margin :block, :bottom + theme_margin :block, :bottom, (next_enclosed_block node) rescue ::Prawn::Errors::CannotFit log :error, (message_with_context 'cannot fit contents of table cell into specified column width', source_location: node.source_location) end - def convert_thematic_break _node + def convert_thematic_break node theme_margin :thematic_break, :top stroke_horizontal_rule @theme.thematic_break_border_color, line_width: @theme.thematic_break_border_width, line_style: (@theme.thematic_break_border_style&.to_sym || :solid) - theme_margin :thematic_break, :bottom + theme_margin :thematic_break, ((block_next = next_enclosed_block node) ? :bottom : :top), block_next || true end def convert_toc node, opts = {} @@ -2410,10 +2388,10 @@ def @bounding_box.move_past_bottom *args # rubocop:disable Lint/NestedMethodDefi layout_prose category.name, align: :left, inline_format: false, - margin_top: 0, margin_bottom: @theme.description_list_term_spacing, style: @theme.description_list_term_font_style.to_sym category.terms.each {|term| convert_index_list_item term } + # NOTE: see previous note for why we can't use margin_bottom method if @theme.prose_margin_bottom > y - reference_bounds.absolute_bottom bounds.move_past_bottom else @@ -2949,7 +2927,7 @@ def layout_heading string, opts = {} # NOTE: inline_format is true by default def layout_prose string, opts = {} - top_margin = (margin = (opts.delete :margin)) || (opts.delete :margin_top) || @theme.prose_margin_top + top_margin = (margin = (opts.delete :margin)) || (opts.delete :margin_top) || 0 bot_margin = margin || (opts.delete :margin_bottom) || @theme.prose_margin_bottom if (transform = resolve_text_transform opts) string = transform_text string, transform @@ -3090,7 +3068,7 @@ def allocate_toc doc, toc_num_levels, toc_start_cursor, use_title_page toc_start_page = page_number extent = dry_run onto: self do layout_toc doc, toc_num_levels, toc_start_page, toc_start_cursor - move_down @theme.block_margin_bottom unless use_title_page + margin_bottom @theme.block_margin_bottom unless use_title_page end # NOTE: reserve pages for the toc; leaves cursor on page after last page in toc if use_title_page @@ -3908,8 +3886,13 @@ def margin amount, _side # Lookup margin for theme element and side, then delegate to margin method. # If margin value is not found, assume 0. - def theme_margin category, side - margin (@theme[%(#{category}_margin_#{side})] || 0), side + def theme_margin category, side, node = true + if node + category = :block if node != true && node.context == :section + margin (@theme[%(#{category}_margin_#{side})] || 0), side + else + 0 + end end def theme_font category, opts = {} @@ -4514,6 +4497,25 @@ def apply_subs_discretely doc, value, opts = {} value end + def next_enclosed_block block, descend: false + return if (context = block.context) == :document + parent_context = (parent = block.parent).context + if (list_item = context == :list_item) + return block.blocks[0] if descend && block.blocks? + siblings = parent.items + else + siblings = parent.blocks + end + siblings = siblings.flatten if parent_context == :dlist + if block != siblings[-1] + (self_idx = siblings.index block) && siblings[self_idx + 1] + elsif parent_context == :list_item || (parent_context == :open && parent.style != 'abstract') || parent_context == :section + next_enclosed_block parent + elsif list_item && (grandparent = parent.parent).context == :list_item + next_enclosed_block grandparent + end + end + private def add_link_to_image uri, image_info, image_opts diff --git a/lib/asciidoctor/pdf/ext/prawn/extensions.rb b/lib/asciidoctor/pdf/ext/prawn/extensions.rb index b707560ca..0f49da9e4 100644 --- a/lib/asciidoctor/pdf/ext/prawn/extensions.rb +++ b/lib/asciidoctor/pdf/ext/prawn/extensions.rb @@ -555,13 +555,7 @@ def pad_box padding bounds.add_left_padding p_left bounds.add_right_padding p_right yield - # NOTE: support negative bottom padding to shave bottom margin of last child - # NOTE: this doesn't work well at a page boundary since not all of the bottom margin may have been applied - if p_bottom < 0 - p_bottom < cursor - reference_bounds.top ? (move_cursor_to reference_bounds.top) : (move_down p_bottom) - else - p_bottom < cursor ? (move_down p_bottom) : reference_bounds.move_past_bottom - end + cursor > p_bottom ? (move_down p_bottom) : reference_bounds.move_past_bottom unless at_page_top? ensure bounds.subtract_left_padding p_left bounds.subtract_right_padding p_right diff --git a/spec/abstract_spec.rb b/spec/abstract_spec.rb index ccab0b42e..303306932 100644 --- a/spec/abstract_spec.rb +++ b/spec/abstract_spec.rb @@ -80,6 +80,45 @@ (expect quote_text[:y]).to be > lines[0][:to][:y] end + it 'should only apply bottom margin once when quote block is nested inside abstract block followed by more preamble' do + pdf_theme = { + base_line_height: 1, + abstract_line_height: 1, + abstract_font_size: 10.5, + blockquote_padding: 0, + blockquote_border_left_width: 0, + blockquote_font_size: 10.5, + heading_h2_font_size: 10.5, + heading_margin_top: 0, + heading_margin_bottom: 12, + } + pdf = to_pdf <<~'EOS', pdf_theme: pdf_theme, analyze: true + = Document Title + + [abstract] + -- + ____ + This quote is the abstract. + ____ + -- + + This is more preamble. + + == Section Title + + Now we are getting to the main event. + EOS + + texts = pdf.text + margins = [] + (1.upto texts.size - 2).each do |idx| + margins << ((texts[idx][:y] - (texts[idx + 1].yield_self {|it| it[:y] + it[:font_size] })).round 2) + end + (expect margins).to have_size 3 + (expect margins.uniq).to have_size 1 + (expect margins[0]).to (be_within 1).of 16.0 + end + it 'should decorate first line of abstract when abstract has multiple lines' do pdf = to_pdf <<~'EOS', analyze: true = Document Title @@ -372,4 +411,38 @@ (expect p2_l1_text[:y] - p2_l2_text[:y]).to eql p1_l1_text[:y] - p1_l2_text[:y] end + + it 'should apply margin below abstract when followed by other blocks in preamble' do + pdf_theme = { + base_line_height: 1, + abstract_line_height: 1, + abstract_font_size: 10.5, + heading_h2_font_size: 10.5, + heading_margin_top: 0, + heading_margin_bottom: 12, + } + pdf = to_pdf <<~'EOS', pdf_theme: pdf_theme, analyze: true + = Document Title + + [abstract] + -- + This is the abstract. + -- + + This is more preamble. + + == Section Title + + Now we are getting to the main event. + EOS + + texts = pdf.text + margins = [] + (1.upto texts.size - 2).each do |idx| + margins << ((texts[idx][:y] - (texts[idx + 1].yield_self {|it| it[:y] + it[:font_size] })).round 2) + end + (expect margins).to have_size 3 + (expect margins.uniq).to have_size 1 + (expect margins[0]).to (be_within 1).of 16.0 + end end diff --git a/spec/admonition_spec.rb b/spec/admonition_spec.rb index 06eda1536..5d8c2d97c 100644 --- a/spec/admonition_spec.rb +++ b/spec/admonition_spec.rb @@ -17,6 +17,7 @@ (expect admon_page_numbers).to eql [2] end + # NOTE: for now, the margin top setting is ignored, so the test will pass with any value it 'should place anchor below top margin of block' do input = <<~EOS paragraph @@ -44,9 +45,8 @@ ==== EOS - pdf_theme = { block_margin_top: 10 } - lines = (to_pdf input, pdf_theme: pdf_theme, analyze: :line).lines - pdf = to_pdf input, pdf_theme: pdf_theme + lines = (to_pdf input, analyze: :line).lines + pdf = to_pdf input (expect (dest = get_dest pdf, 'admon-1')).not_to be_nil (expect dest[:page_number]).to be 2 (expect dest[:y]).to eql lines[0][:from][:y] @@ -204,23 +204,22 @@ (expect top_of_page_texts[0][:y]).to eql top_of_page_texts[0][:y] end - it 'should pad content box based on prose_margin_bottom value' do + it 'should not allow prose_margin_bottom to impact padding' do input = <<~'EOS' - NOTE: The prose_margin_bottom value controls the padding around the content box. + NOTE: The prose_margin_bottom value does not impact the padding around the content box. EOS pdf = to_pdf input, pdf_theme: { prose_margin_bottom: 12 }, analyze: :line reference_line = pdf.lines[0] reference_text = (to_pdf input, pdf_theme: { prose_margin_bottom: 12 }, analyze: true).text[0] - pdf = to_pdf input, pdf_theme: { prose_margin_bottom: 0 }, analyze: :line + pdf = to_pdf input, pdf_theme: { prose_margin_bottom: 24 }, analyze: :line line = pdf.lines[0] - text = (to_pdf input, pdf_theme: { prose_margin_bottom: 0 }, analyze: true).text[0] + text = (to_pdf input, pdf_theme: { prose_margin_bottom: 24 }, analyze: true).text[0] (expect line[:from][:y]).to eql reference_line[:from][:y] - (expect line[:to][:y]).to eql (reference_line[:to][:y] + 8) - # NOTE: verify text moves up by half the change in line size - (expect text[:y]).to eql (reference_text[:y] + 4) + (expect line[:to][:y]).to eql reference_line[:to][:y] + (expect text[:y]).to eql reference_text[:y] end context 'Text' do diff --git a/spec/arrange_block_spec.rb b/spec/arrange_block_spec.rb index b1e6d4211..4bbbdbb06 100644 --- a/spec/arrange_block_spec.rb +++ b/spec/arrange_block_spec.rb @@ -30,7 +30,8 @@ (expect (pdf.find_unique_text 'before block')[:page_number]).to be 1 (expect (pdf.find_unique_text 'after block')[:page_number]).to be 1 gs = (pdf.extract_graphic_states pages[0][:raw_content])[0] - (expect gs).to have_background color: 'FFFFCC', top_left: [50.0, 714.22], bottom_right: [562.0, 702.22] + # NOTE: height is equivalent to top + bottom padding + (expect gs).to have_background color: 'FFFFCC', top_left: [50.0, 714.22], bottom_right: [562.0, 690.22] end it 'should not draw backgrounds and borders in scratch document' do @@ -100,6 +101,48 @@ (expect scratch_pdf.pages[0][:raw_content]).to include %(/DeviceRGB cs\n0.8 0.8 0.8 scn\n0.0 0.0 612.0 792.0 re) end + it 'should not add bottom margin to last block or styled paragraph in enclosure that supports blocks' do + pdf_theme = { + sidebar_background_color: 'transparent', + admonition_border_color: 'EEEEEE', + admonition_border_width: 0.5, + admonition_padding: 12, + blockquote_border_width: 0.5, + blockquote_border_left_width: 0, + blockquote_font_size: 10.5, + blockquote_padding: 12, + code_padding: 12, + } + %w(==== **** ____ ---- .... [NOTE]==== example sidebar quote NOTE).each do |style| + block_lines = [] + if style.start_with? '[' + delim = (style.split ']', 2)[1] + block_lines << %([#{style.slice 1, (style.index ']') - 1}]) + block_lines << delim + block_lines << 'content' + block_lines << delim + elsif /\p{Alpha}/ =~ style.chr + block_lines << %([#{style}]) + block_lines << 'content' + else + block_lines << style + block_lines << 'content' + block_lines << style + end + input = <<~EOS + ****** + #{block_lines * ?\n} + ****** + EOS + + pdf = to_pdf input, pdf_theme: pdf_theme, analyze: true + horizontal_lines = (to_pdf input, pdf_theme: pdf_theme, analyze: :line).lines + .select {|it| it[:from][:y] == it[:to][:y] }.sort_by {|it| -it[:from][:y] } + (expect horizontal_lines[-2][:from][:y] - horizontal_lines[-1][:from][:y]).to eql 12.0 + (expect (pdf.find_unique_text 'content')[:y] - horizontal_lines[-2][:from][:y]).to (be_within 1).of 15.0 + end + end + describe 'unbreakable block' do # NOTE: only add tests that verify at top ignores unbreakable option; otherwise, put test in breakable at top describe 'at top' do @@ -1549,7 +1592,7 @@ def content last_content_bottom_y = last_content[:y] (expect border_bottom_y).to be < last_content_bottom_y padding_below = last_content_bottom_y - border_bottom_y - (expect padding_below).to ((be_within 2).of 10) + (expect padding_below).to be < 2 (expect (pdf.find_text 'block content')[0][:font_size]).to eql 5.25 (expect (pdf.find_text 'table cell')[0][:font_size]).to eql 5.25 end @@ -1585,7 +1628,7 @@ def content (expect (pdf.find_unique_text 'after table')[:page_number]).to be 2 (expect (pdf.find_text 'block content')[0][:page_number]).to be 2 (expect (pdf.find_unique_text 'block content end')[:page_number]).to be 2 - table_edges_expected = { x: [36.0, 576.0], y: [756.0, 278.0] } + table_edges_expected = { x: [36.0, 576.0], y: [756.0, 290.0] } block_edges_expected = { x: [41.0, 571.0], y: [751.0, 294.52] } table_border_lines = lines.select {|it| it[:color] == 'DDDDDD' } (expect table_border_lines.map {|it| it[:page_number] }.uniq).to eql [2] @@ -1638,7 +1681,7 @@ def content (expect (pdf.find_unique_text 'before block')[:page_number]).to be 2 (expect (pdf.find_text 'block content')[0][:page_number]).to be 2 (expect (pdf.find_unique_text 'block content end')[:page_number]).to be 2 - table_edges_expected = { x: [36.0, 576.0], y: [756.0, 250.0] } + table_edges_expected = { x: [36.0, 576.0], y: [756.0, 262.0] } block_edges_expected = { x: [41.0, 571.0], y: [723.22, 266.74] } table_border_lines = lines.select {|it| it[:color] == 'DDDDDD' } (expect table_border_lines.map {|it| it[:page_number] }.uniq).to eql [2] diff --git a/spec/converter_spec.rb b/spec/converter_spec.rb index 40a1c6ad2..1e2a8e737 100644 --- a/spec/converter_spec.rb +++ b/spec/converter_spec.rb @@ -429,6 +429,589 @@ end end + describe '#next_enclosed_block' do + let(:doc) { Asciidoctor.load input_source, backend: 'pdf' } + let(:converter) { doc.converter } + let(:result) { converter.next_enclosed_block start } + + context 'of document' do + let(:input_source) { 'paragraph' } + let(:start) { doc } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of last block in document' do + let(:input_source) { 'paragraph' } + let(:start) { doc.blocks[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of block followed by block' do + let :input_source do + <<~'EOS' + first paragraph + + second paragraph + EOS + end + + let(:start) { doc.blocks[0] } + + it('should be next block') { (expect result).to eql doc.blocks[1] } + end + + context 'of last block in open block followed by block' do + let :input_source do + <<~'EOS' + first paragraph + + -- + second paragraph + -- + + third paragraph + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[1] } + + it('should be next block adjacent to open block') { (expect result).to eql doc.blocks[2] } + end + + context 'of last block before parent section' do + let :input_source do + <<~'EOS' + == First Section + + paragraph + + == Second Section + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be next section') { (expect result).to eql doc.sections[1] } + end + + context 'of last block before subsection' do + let :input_source do + <<~'EOS' + == Section + + paragraph + + === Subsection + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be next section') { (expect result).to eql (doc.find_by context: :section)[-1] } + end + + context 'of last block before grandparent section' do + let :input_source do + <<~'EOS' + == First Section + + paragraph + + === Subsection + + paragraph + + == Last Section + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[-1] } + + it('should be next section') { (expect result).to eql (doc.find_by context: :section)[-1] } + end + + context 'of preamble' do + let :input_source do + <<~'EOS' + = Document Title + + preamble + + == First Section + EOS + end + + let(:start) { (doc.find_by context: :preamble)[0] } + + it('should be first section') { (expect result).to eql doc.sections[0] } + end + + context 'of abstract' do + let :input_source do + <<~'EOS' + = Document Title + + [abstract] + -- + abstract + -- + + == First Section + EOS + end + + let(:start) { (doc.find_by context: :open, style: 'abstract')[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of abstract followed by more preamble' do + let :input_source do + <<~'EOS' + = Document Title + + [abstract] + -- + abstract + -- + + more preamble + + == First Section + EOS + end + + let(:start) { (doc.find_by context: :open, style: 'abstract')[0] } + + it('should be next block in preamble') { (expect result).to eql (doc.find_by context: :paragraph)[1] } + end + + context 'of last block in abstract' do + let :input_source do + <<~'EOS' + = Document Title + + [abstract] + -- + abstract + -- + + == First Section + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of last block inside abstract followed by more preamble' do + let :input_source do + <<~'EOS' + = Document Title + + [abstract] + -- + abstract + -- + + more preamble + + == First Section + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of last block inside delimited block' do + let :input_source do + <<~'EOS' + **** + inside paragraph + **** + + outside paragraph + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of list followed by block' do + let :input_source do + <<~'EOS' + * list item + + paragraph + EOS + end + + let(:start) { doc.blocks[0] } + + it('should be next block adjacent to list') { (expect result).to eql doc.blocks[1] } + end + + context 'of first list item in list' do + let :input_source do + <<~'EOS' + * yin + * yang + EOS + end + + let(:start) { doc.blocks[0].items[0] } + + it('should be next list item') { (expect result).to eql doc.blocks[0].items[1] } + end + + context 'of last list item in list' do + let :input_source do + <<~'EOS' + * yin + * yang + + paragraph + EOS + end + + let(:start) { doc.blocks[0].items[-1] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of last attached block in first item in list' do + let :input_source do + <<~'EOS' + * moon + + + stars + * sun + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be next list item') { (expect result).to eql doc.blocks[0].items[-1] } + end + + context 'of last attached block in last item in list' do + let :input_source do + <<~'EOS' + * sun + * moon + + + stars + + paragraph + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of last block in open block attached to first item in list' do + let :input_source do + <<~'EOS' + * moon + + + -- + light side + + dark side + -- + * sun + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[1] } + + it('should be next list item') { (expect result).to eql doc.blocks[0].items[-1] } + end + + context 'of last item in nested list of first item in list' do + let :input_source do + <<~'EOS' + * sun + ** star + * moon + EOS + end + + let(:start) { (doc.find_by context: :list_item)[1] } + + it('should be next top-level list item') { (expect result).to eql doc.blocks[0].items[-1] } + end + + context 'of last item in nested list of last item in list' do + let :input_source do + <<~'EOS' + * moon + * sun + ** star + + paragraph + EOS + end + + let(:start) { (doc.find_by context: :list_item)[2] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of last item in deeply nested list of first item in list' do + let :input_source do + <<~'EOS' + * foo + ** bar + *** baz + * moon + EOS + end + + let(:start) { (doc.find_by context: :list_item)[2] } + + it('should be next top-level list item') { (expect result).to eql doc.blocks[0].items[-1] } + end + + context 'of term of first item in dlist' do + let :input_source do + <<~'EOS' + foo:: bar + EOS + end + + let(:start) { (doc.find_by context: :list_item)[0] } + + it('should be desc of current item') { (expect result).to eql (doc.find_by context: :list_item)[1] } + end + + context 'of desc text of first item in dlist' do + let :input_source do + <<~'EOS' + foo:: bar + yin:: yang + EOS + end + + let(:start) { (doc.find_by context: :list_item)[1] } + + it('should be term of next item') { (expect result).to eql (doc.find_by context: :list_item)[2] } + end + + context 'of desc text of last item in dlist' do + let :input_source do + <<~'EOS' + foo:: bar + yin:: yang + + paragraph + EOS + end + + let(:start) { (doc.find_by context: :list_item)[3] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of attached block in last item in dlist' do + let :input_source do + <<~'EOS' + foo:: bar + sun:: moon + + + stars + + paragraph + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of missing block' do + let :input_source do + <<~'EOS' + foo:: bar + yin:: yang + EOS + end + + let :start do + list_items = (doc.find_by context: :list_item) + list_items[0].parent.items[0].replace [[list_items[0].dup], list_items[1].dup] + list_items[1] + end + + it('should be nil') { (expect result).to be_nil } + end + + context 'of preamble followed by section' do + let :input_source do + <<~'EOS' + = Document Title + + [abstract] + -- + A glimpse at what is to come. + -- + + == Intro + EOS + end + + let(:start) { (doc.find_by context: :open)[0].parent } + + it('should be next section') { (expect result).to eql doc.sections[-1] } + end + + context 'of paragraph in abstract followed by section' do + let :input_source do + <<~'EOS' + = Document Title + + [abstract] + -- + A glimpse at what is to come. + -- + + == Intro + EOS + end + + let(:start) { (doc.find_by context: :paragraph)[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of quote block in abstract followed by section' do + let :input_source do + <<~'EOS' + = Document Title + + [abstract] + -- + ____ + A glimpse at what is to come. + ____ + -- + + == Intro + EOS + end + + let(:start) { (doc.find_by context: :quote)[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of last block in AsciiDoc table cell' do + let :input_source do + <<~'EOS' + [cols=2*] + |=== + a| + foo + + bar + + ____ + quote + ____ + + | another cell + |=== + + after + EOS + end + + let(:start) { (doc.find_by context: :quote, traverse_documents: true)[0] } + + it('should be nil') { (expect result).to be_nil } + end + + context 'of last block in description of first item in horizontal dlist' do + example_group = self + + let :input_source do + <<~'EOS' + .Title + [horizontal] + term:: desc + + + [quote] + capture:quote[] + + another term:: + EOS + end + + let :doc do + Asciidoctor.load input_source, backend: 'pdf', extensions: (proc do + inline_macro :capture do + process do |parent, target| + example_group.let(:captured_block) { parent } + create_inline parent, :quoted, target + end + end + end) + end + + let :start do + doc.convert + captured_block + end + + it('should be next term') { (expect result).to eql (doc.find_by context: :list_item)[-1] } + end + + context 'of last block in description of last item in horizontal dlist' do + example_group = self + + let :input_source do + <<~'EOS' + .Title + [horizontal] + term:: desc + + + [quote] + capture:quote[] + + after + EOS + end + + let :doc do + Asciidoctor.load input_source, backend: 'pdf', extensions: (proc do + inline_macro :capture do + process do |parent, target| + example_group.let(:captured_block) { parent } + create_inline parent, :quoted, target + end + end + end) + end + + let :start do + doc.convert + captured_block + end + + it('should be nil') { (expect result).to be_nil } + end + end + describe 'extend' do it 'should use specified extended converter' do backend = nil diff --git a/spec/hyphens_spec.rb b/spec/hyphens_spec.rb index 47f5f238d..2317f60d6 100644 --- a/spec/hyphens_spec.rb +++ b/spec/hyphens_spec.rb @@ -173,12 +173,16 @@ end it 'should apply hyphenation when line is advanced to next page' do - pdf = to_pdf <<~'EOS', pdf_theme: { prose_margin_top: 700 }, analyze: true - = Document Title - :hyphens: + pdf = with_content_spacer 10, 690 do |spacer_path| + to_pdf <<~EOS, analyze: true + = Document Title + :hyphens: - foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar paragraph - EOS + image::#{spacer_path}[] + + foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar paragraph + EOS + end lines = pdf.lines pdf.find_text page_number: 2 (expect lines).to have_size 2 diff --git a/spec/image_spec.rb b/spec/image_spec.rb index bb37d1172..9dd90afc3 100644 --- a/spec/image_spec.rb +++ b/spec/image_spec.rb @@ -13,6 +13,7 @@ (expect images[0].data).to eql image_data end + # NOTE: for now, the margin top setting is ignored, which this test asserts it 'should place anchor above top margin of block image' do input = <<~'EOS' paragraph @@ -26,7 +27,8 @@ images = (to_pdf input, pdf_theme: pdf_theme, analyze: :image).images pdf = to_pdf input, pdf_theme: pdf_theme (expect (image_dest = get_dest pdf, 'tux')).not_to be_nil - (expect image_dest[:y]).to eql images[0][:y] + 10 + #(expect image_dest[:y]).to eql images[0][:y] + 10 + (expect image_dest[:y]).to eql images[0][:y] end it 'should place anchor at top of block image if advanced to next page' do @@ -37,10 +39,8 @@ image::tall-diagram.png[Tall Diagram] EOS - pdf_theme = { block_margin_top: 10 } - - images = (to_pdf input, pdf_theme: pdf_theme, analyze: :image).images - pdf = to_pdf input, pdf_theme: pdf_theme + images = (to_pdf input, analyze: :image).images + pdf = to_pdf input (expect (image_dest = get_dest pdf, 'tall-diagram')).not_to be_nil (expect image_dest[:page_number]).to be 2 (expect image_dest[:y]).to eql images[0][:y] diff --git a/spec/list_spec.rb b/spec/list_spec.rb index 3cc8a791a..1bd83042b 100644 --- a/spec/list_spec.rb +++ b/spec/list_spec.rb @@ -970,7 +970,60 @@ (expect to_file).to visually_match 'list-complex-dlist.pdf' end - it 'should support item with no desc' do + it 'should put margin below description when item has an attached block' do + pdf_theme = { base_line_height: 1, sidebar_background_color: 'transparent' } + input = <<~'EOS' + term:: desc + + + **** + sidebar + **** + + **** + after + **** + EOS + + pdf = to_pdf input, pdf_theme: pdf_theme, analyze: true + horizontal_lines = (to_pdf input, pdf_theme: pdf_theme, analyze: :line).lines + .select {|it| it[:from][:y] == it[:to][:y] }.sort_by {|it| -it[:from][:y] } + desc_text = pdf.find_unique_text 'desc' + (expect desc_text[:y] - horizontal_lines[0][:from][:y]).to (be_within 1).of 15.0 + (expect horizontal_lines[1][:from][:y] - horizontal_lines[2][:from][:y]).to eql 12.0 + end + + it 'should use narrow spacing around lineal list' do + pdf = to_pdf <<~'EOS', pdf_theme: { extends: 'base', base_line_height: 1 }, analyze: true + yin:: + * foobar + yang:: + EOS + + spacing_above = (pdf.find_unique_text %r/^yin/)[:y] - (pdf.find_unique_text 'foobar').yield_self {|it| it[:y] + it[:font_size] } + spacing_below = (pdf.find_unique_text 'foobar')[:y] - (pdf.find_unique_text 'yang').yield_self {|it| it[:y] + it[:font_size] } + (expect spacing_above).to (be_within 1).of 6.0 # 3.0 + font metrics + (expect spacing_below).to (be_within 1).of 8.0 # 6.0 + font metrics + end + + it 'should put margin below description when item has a single nested list' do + input = <<~'EOS' + term:: desc + * nested item + + after + EOS + + pdf = to_pdf input, pdf_theme: { base_line_height: 1 }, analyze: true + desc_text = pdf.find_unique_text 'desc' + nested_item_text = pdf.find_unique_text 'nested item' + after_text = pdf.find_unique_text 'after' + above_list_item = (desc_text[:y] - nested_item_text[:y]).round 2 + below_list_item = (nested_item_text[:y] - after_text[:y]).round 2 + (expect above_list_item).to eql below_list_item + (expect desc_text[:y] - (nested_item_text[:y] + nested_item_text[:font_size])).to (be_within 1).of 15.0 + end + + it 'should support last item with no description' do pdf = to_pdf <<~'EOS', analyze: true yin:: yang foo:: @@ -983,7 +1036,47 @@ (expect foo_text[:x]).to eql yin_text[:x] end + it 'should apply correct margin to last item with no description' do + pdf = to_pdf <<~'EOS', analyze: true + [cols=2*a] + |=== + | + term:: + + [] + after + + | + term:: desc + |=== + EOS + + after_text = pdf.find_unique_text 'after' + desc_text = pdf.find_unique_text 'desc' + (expect desc_text[:y]).to be > after_text[:y] + delta = desc_text[:y] - after_text[:y] + (expect delta).to eql 9.0 # bottom margin - term spacing + end + context 'Horizontal' do + it 'should not modify original document model during conversion' do + doc = Asciidoctor.load <<~'EOS', backend: 'pdf' + [horizontal] + foo:: bar + EOS + + original_dlist = doc.blocks[0] + original_term, original_desc = (original_item = (original_items = original_dlist.items)[0]) + doc.convert + dlist = doc.blocks[0] + term, desc = (item = (items = dlist.items)[0]) + (expect dlist).to be == original_dlist + (expect term).to be == original_term + (expect items).to be == original_items + (expect item).to be == original_item + (expect desc).to be == original_desc + end + it 'should arrange horizontal list in two columns' do pdf = to_pdf <<~'EOS', analyze: true [horizontal] @@ -1252,8 +1345,85 @@ (expect horizontal_lines).to have_size 6 item_spacing = horizontal_lines[1][:from][:y] - horizontal_lines[2][:from][:y] spacing_below_list = horizontal_lines[3][:from][:y] - horizontal_lines[4][:from][:y] - (expect item_spacing.to_f).to eql 18.0 # FIXME: ideally, this should be 12.0 - (expect spacing_below_list.to_f).to eql 24.0 # FIXME: ideally, this should be 12.0 + (expect item_spacing.round 2).to eql 12.0 + (expect spacing_below_list.round 2).to eql 12.0 + end + + it 'should convert horizontal dlist inside AsciiDoc table cell and not add bottom margin' do + pdf_theme = { sidebar_background_color: 'transparent' } + input = <<~'EOS' + [frame=ends,grid=none] + |=== + a| + [horizontal] + term:: desc + + + **** + sidebar for term + **** + |=== + EOS + + horizontal_lines = (to_pdf input, pdf_theme: pdf_theme, analyze: :line).lines + .select {|it| it[:from][:y] == it[:to][:y] }.sort_by {|it| -it[:from][:y] } + (expect horizontal_lines).to have_size 4 + cell_bottom_padding = horizontal_lines[2][:from][:y] - horizontal_lines[3][:from][:y] + (expect cell_bottom_padding.round 2).to eql 3.0 + end + + it 'should apply correct margin to last item with no description' do + pdf = to_pdf <<~'EOS', analyze: true + [cols=2*a] + |=== + | + term:: + + [] + after regular + + | + [horizontal] + term:: + + [] + after horizontal + |=== + EOS + + term_texts = pdf.find_text 'term' + (expect term_texts).to have_size 2 + (expect term_texts[0][:y]).to eql term_texts[1][:y] + after_regular = pdf.find_unique_text 'after regular' + after_horizontal = pdf.find_unique_text 'after horizontal' + (expect after_horizontal[:y]).to eql after_regular[:y] + end + + it 'should use prose margin around dlist nested in regular list' do + pdf = to_pdf <<~'EOS', analyze: true + [cols=2*a] + |=== + | + * list item + + + [horizontal] + term:: desc + + * second list item + + | + list item + + *term* desc + + second list item + |=== + EOS + + ['list item', 'term', 'second list item'].each do |string| + texts = pdf.find_text string + (expect texts).to have_size 2 + (expect texts[0][:y].round 2).to eql (texts[1][:y].round 2) + end end end diff --git a/spec/listing_spec.rb b/spec/listing_spec.rb index 265bcbcc4..982b4f7a4 100644 --- a/spec/listing_spec.rb +++ b/spec/listing_spec.rb @@ -51,6 +51,7 @@ (expect dest[:y]).to eql 805.89 end + # NOTE: for now, the margin top setting is ignored, so the test will pass with any value it 'should place anchor below top margin of block' do input = <<~'EOS' paragraph @@ -80,10 +81,8 @@ ---- EOS - pdf_theme = { block_margin_top: 10 } - - lines = (to_pdf input, pdf_theme: pdf_theme, analyze: :line).lines - pdf = to_pdf input, pdf_theme: pdf_theme + lines = (to_pdf input, analyze: :line).lines + pdf = to_pdf input (expect (dest = get_dest pdf, 'listing-1')).not_to be_nil (expect dest[:page_number]).to be 2 (expect dest[:y]).to eql lines[0][:from][:y] diff --git a/spec/quote_spec.rb b/spec/quote_spec.rb index 97cbecb90..665f4fe52 100644 --- a/spec/quote_spec.rb +++ b/spec/quote_spec.rb @@ -230,7 +230,7 @@ blockquote_border_width: 0.5, blockquote_border_color: 'CCCCCC', blockquote_background_color: 'EEEEEE', - blockquote_padding: [6, 10, 0, 10], + blockquote_padding: [6, 10, 12, 10], } to_file = to_pdf_file <<~EOS, 'quote-page-split.pdf', pdf_theme: pdf_theme ____ @@ -264,7 +264,7 @@ it 'should keep caption with block and draw border across extent if only caption fits on current page' do block_content = ['text of quote'] * 15 * %(\n\n) - pdf_theme = { prose_margin_bottom: 12, blockquote_padding: [0, 0, -12, 15] } + pdf_theme = { prose_margin_bottom: 12, blockquote_padding: [0, 0, 0, 15] } with_content_spacer 10, 690 do |spacer_path| input = <<~EOS before diff --git a/spec/reference/arrange-block-at-top-does-not-fit.pdf b/spec/reference/arrange-block-at-top-does-not-fit.pdf index 791f170b682877c30c8ae0d1b2c8f4cbc4acf5e0..920223f0e71ebda467737cc2280eecfd1d644cf1 100644 GIT binary patch delta 10665 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 JB_%~qMhadu?79E| diff --git a/spec/reference/arrange-block-at-top-fits.pdf b/spec/reference/arrange-block-at-top-fits.pdf index f5a78543c6c10e7bb6c52d4e6e39376ee58e438b..ee26252485d9a1c0a5f3a5305b97d7b556d399af 100644 GIT binary patch delta 18193 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 delta 18370 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%0D6EjP-RKq9_n=>;9 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 blDYja#l(?amr4=>9||`xG72RnMNdWw`CLvl diff --git a/spec/reference/arrange-block-below-top-does-not-fit-prepress.pdf b/spec/reference/arrange-block-below-top-does-not-fit-prepress.pdf index ae181e025a8da4a333105c991bc831fba0e180b8..763ad018a318a499c382121b8739e7f3b850eb95 100644 GIT binary patch delta 10713 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 delta 10723 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 C!`W*9 diff --git a/spec/reference/arrange-block-below-top-does-not-fit.pdf b/spec/reference/arrange-block-below-top-does-not-fit.pdf index b9fc151bb16f4617851ee69f5036683e3f539139..45a1ff6e33f8a76ff562d576607e3dff9475e568 100644 GIT binary patch delta 11484 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 diff --git a/spec/reference/arrange-block-below-top-fits.pdf b/spec/reference/arrange-block-below-top-fits.pdf index a97affcf13db022965ca9c8f5d9623effc82f6d4..880e30d5cdf556043604bb1c8586d20793cbe25e 100644 GIT binary patch delta 12516 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 delta 12481 zcmX}x1ACYauz=~y_Ikx`Lv?}QKy&HU+cG`dpE_dMz#mpMKitAYxe5jm9D-jBCqA51A4yU#adS) z(@cK^+QHp&b{MjXbp1Tu74jw(1S&9=8)06V9`1>FcC-iuRs;Pe!FtDyU^xFji-=Tt zgt-nNn<>G7kMvbN5H+k8LZWRUucd-ao);6DvU<*V5rfWP&N0K5qS}C_e97L9&=?u4 zKJ%>SL0Sf)D)GZ_s-}7+OBq7J$|~vhv7hlNhIy>{a@**mQ6c`__#l7@XA8TPp>~Gl zyleR#VZ1%1xr)n~3H)WrQzCPP6e!#*H>s7Vpr{2hKOJ3{Wy0P9Do6B{q=V@klsfGk ziYYm(x-&0)=U-O-YXOKk5=#3~U9g7BU zNGz>h%!dcGgr9GlvGzM}Pznc?74EQ_5MI?n^Tl&`t)SoZj@3$X^bk!zo?YQPw2d|Y zJ0}FdAtp|?4;~7QCCsQ9e=$p%Xh)d((e}0b{OW*+i{R#RR?X_yF7aj=w1$P`%MXQ? zTvX1E5hz-+ndqkQY3p!QqmW9@vX|4hU<~!7b}W<0rEI>ue6bNc_$jOZ17heW>?Nrr z_8Weo7RjrBio=s>mHY=`Qf`;u1Ua%j*~U8%ZYm1GdEFeMKWY3X6B(P>B^L>cG{G(B z+Fa4*acMe--l23OFq+I6`*}t5be(Y_${9{`Tls@<6vZroI~yn1+-7jE|IUl2^wW>( z)n$uKPj<;&v%oIkR}XE)G&n4poRQaYdGO+>Tc=IfY!Tw*(>4o}KpLD<`b<|8I=M6e zs^iwFq3c6vRmub_YlVe%7|YUF|9dgT;ke@JSlem-!ru|+jh(LN(@}zNq|^ZYgw8s5 zyXf$9nsEq$xRLgJ>Ne1}%cn39tKFd1MQ|Sy6JfGH%cHIF(Yh_u{BmXQF1dC9!cfOc zWi^w2`x@8Tz%^F>XI@jGr!mI!qjw^pE12s2(FwsbDO1&Yn6^^o?B6TWX#rKk4i)

jrX~XAXiL8E?>$AN(9!Sxs{3jrD`-$FT;Gl@vFF zef3mGe3WUv2Zz4sp4X_xWs+58RW1<|kjKH)FVRM_9}VdpYK<734*C23z`+E~cf&gp!y=1bO7Iw36VLq{ z11NKf%Mo#g92e*hz<4(_4|1F&hz-mY`!La31a%ra6FU+Rs>?R_a!VSPh$bNBlq`x~ zGSkrN(arX)`RniY`H}E-S9Y_r{Go(l)qVXfcqNo>wIlRABiQ?|!MCQ_N_BO{@3;rO zGO!}nG#DBOZqE(V*D(_*k=;n12&fCJ6^g%(_c}|ffcN;>aU=YwM_cY{|MsaD zy?Xk@s?{+x?~$%S?3@zg5s*_g#MJ==RccS5|0Like0Q8jnFl6VE5N}+jAyuvaCMm> z5(ikiU<*|Sv?sd%fRIX~GR>R7ix>YyjONKhu{RcFTrdF_tqNI^A0}P|-ID|vWmF>} zA;&l-ZN4i8K#Z#~Z3t-O+aS%eD1WJc;ne-ry*S_FJBmza zohe0_cOj0-uNpf)%gA1Zrlzn0qlD^-mC*p1(VAl^#O=OD%(gj6AEdZoHC%84Qx>H23L@rbDRC_4h>!LaqtUr zQ?_h??g#1?PVOsof>2rRRzbrUx|+tmJ%qO4L6Cye4?pR6C!oShs5&mpkEJd)9Mjo? zo!))NpB5`9EWB#J@KgRo&b9yvxu`XQXivxc@eqNRFd7PJHl-}?LELl9Yzd!=X2*Kb z>*J#QCtYnZqqR-yW$xesEjdcIi$a_sa>){4y{%7~r6RgPzk7x8QHg=Wlnn4C!6Q^g zC|lWwqHpN0R3<`xD9+RShD)>7aO1|&JFIdJd4>EQ6s!SMA9-SU%~(BKy_+@t5J;AG zA;N&C+a8yo;$I&?8dvQ-8D&+~(!RVOntRX3)|~t}%+DNJw{XhW?luGAo3!TAe*f-!(muIEn=&M3=b_CMC4Mg~f1%WYjv8~hP{@5blG zCd}dO3>=bs#)T9`d*nC@326!{tmLJk~sN@{DOBKK%nk9U`OJo z6dkS0r=6eXun1YR2eaXgxgL{+y%D6Ymd5n&-!Wo;#k62Y5JI#KKAoH;5wOJDd)@^KX< zG}-AJ$HefD%Tsdq(egz4p)UaBjfmksxq0EY_Q*)pCOd?S@xXjD6kc?sWcv1*FoL`~nmsetPJ< zNpKPn`UQhd^EISODP+xIU1e>(aVrD2n{iz26}z1*?ZD=Dpa^$=nU)uLwm)&UybA~K zaCsBvI0kfd5cdZpFVHEbWUvtMXzm8N{b1IgahEcXb|(FjUne6W1gDLlgHoMX~%hg~9Wv4iz5UFTOiaVs2EIg*aK zs*_@7oph9|XQY|c zpt2T&R_se5F37~N%m_(Dw2yy0%W~AR!DPfUodYG!7Y>#XOS1B;2W9@*4gDk{vm{5l z?E3o99S}NXyxXXxC-}p}>{ou@cy+M}8E0~OYXO)vl%^7vboJI74S25qhMZv)7(Xl>+9Sd0P2*xc2dxj0;Uwrm%Qxr_$B-7WP^0vi;qQQW<#_QwAac$`mnMf^xJV* zta%Pc2n=NctRL^5e&xAbEqM!^qWQk(j^&CM<=%YPP>Hg63|9BwJg3@zAT>BDhBl5l zfoeU!hK1|0;~LsdT0K-k$m7;t-peT!e}s(rQqT)YAYEHb>Ko7c-HJUSft;utWZdC_ zqG$L}fue)4^8BxobyT4603wqZs`eqt8RV&0u=|fkl5w$f_zhD6W4vE)Uo*;B$;sV~ z#9|D^ot@U4x- znp{F`nNzeapT(dx5vI$7El8e|qw^=0c^LUVxLK}yDx2Rv+m^Wj&gBV(@W{HsifyHs zXCM)tzV$_(uRb#s1={8`Mf(YR=S4VpsV7Wh{}0OeZ!vht5w2XgL8w;wEMgeYpAUaB z!Z8s*)t$k(NZ4t$uYR_|f`pjfp%SzTv&&-t=E_56hEa}jUkjQm{}qab9XdUiWCaov zqb?281Gh@*4%~@>j2idFx_2}pavDR>kyH20Ay+`^w*4?qA{{P!hwt$fH&0H#$tBk9 z)jnMmlL|6?R2R^^5n5^#OjJCV?avoHVJT+qr+_Q6z3t@lMww#_o2tIJ_5Gp*AsI~L z(SXzN0=mbSa||S$t5YOR$We!{m3!Vr8eX(Zwkv#@0bHeaFH9tF^#y#C)A8O~FFOSudgZ`yY|8zfM{i<{53;Qy9cg069u8Qg(?u4mv+Ux|zY{bKJ?eSaIFUcVIDClsoq8EJge7}Fje=f4qmwe#0g%S_Yujea!lHJYEUJrAV zQ`40c0ZAHD=TRF$&-jG-6!f*b&uCl$gQ^WB%6(+G3Bc|BDZ=+fEjH>mq3aP_%DI4X zWIL~IV_6qr8^m%Cb#8A3=IFo^4+;1*yFP~Yo0VX}N#s=0D9>OD9u2~HA(d2` zV0c;?@&b9ojN6JcYxquc4xWQ-n^1x-D8r8n0CfnCw@jLoCn{fh_{ua$-?oA!A!8m) zgqago-fyJWR$|5UX2;MR0vp7L%HB@HPp3*0^^#8_Ho2L@c*&-$Es;5dC(hAzUO0M4nZ9Pa6L91Wv57L zyp$W0D$1f4Az)g&30WFFE5&wQLclNErdmGTO985tt)ytS9hXzR$u*c zoXTwO4LYQq+dcwf-=bdAwg zfpge93oC}mt~$1u-#z6I-hQ@6)jwHx)R|AkZ}qYd5$jf+z-~9zp?vt3RA!wpmT%v> zb>DkqBDt&P?#7wO?5pc4SSpeGi}8ROlOJ`OxNA>4o2upjxFKJ+Or<{ ziWlHV87Unu=H4B01kW{j*(90vAWP&P-~_a4#+nW8i?bq*ei#+@Z=j-28% z&bYwzyOv7~#pbb?>+!jC}4d{htT!xKXM>a3NpFaHl1nxe=b(t@g>FrH@po^&B zHn$Wa*lZNdMG0G>Fbjq46zNG25EKS&3G_rb#=&a-b?h$831N>LIC7Z!3UMYbm;tV# z*xx|1H_f~B8*dJ^#*M5B^4s49Aq2y z;5!8;mJ0cdiVjkVu=S)Ic2{Li1L0Ka61D6O(}J~Vdn$Mbh?3t<1M@14DoRcjs-D{UXn$8$%rawF5`DeXdT1E7<@%4#Ge%I(|Ffx zm#+C%pKnyXmH0jkeed*Te>n;D)#TLuZ&>zn7ED#$9NIUn$dW7Uujd6AVE~~_z2>X^dPZY)D;PvrTgl;N{3g|#4J3s7v{`_0~ zoBMj6Q-JP>tnFMHD5y?E7#mn^VLXFpasf?O-5ke}Oh@rztgyN3F4q8UM==I`Wxod2 zPkw`T#sG8z<$iX#gH~o99itUv2~Q79Q6GhrV|+{tgwX?mBy(s&V=et={AZAz%i7399 zwGz@R!kX3g@0~E(3~^`|B>&s6@(6qE0Q}!`1!B3^AkfvF+w+H)9X55CaphiO4QH~3}O>L83JbCZ}%D%@A0hHzTat9u^5d4y5+M(?b! z6=-~M=Vh-F`C?_~)spWcDIjK{YmnD*tuALsHO~b|4`#B*-rsIy61x=L&;$tRfMSA! z3k@z6bxHlQuCSZ{oO>i={x$tUm88f;)NY48gghCKg2L1+!{1_xCtxLE78`p*~--+Xz~qJ3cRb+?tE)~ zvfVXKCQFQwRW@^Upok_bp|MH+0#Xt)xXRCZv6qI72H84b`ZkvESNreSDj=BnwXDq@ zzC0tbZ0S-gLt=3ahhYQQWyJ&DnF#1{_=@Z@mGN*wznGb+mISn3REv@6r4)Dr%c`O; z#))w9Ptiwg@L10v$zdN5ihkoZ)4OCzB^|a*K%{80YmnNQWpWazlhR~T09d^;%PGk6@_2%p)qx=C&I*2s>!EGwL>d!u!eI#@y*s(5+75GLwAiZs`ZF12A$w_ zH#i=@i|%z_iX%lex{7T}1R|Pkj}LJk=V{oK#}rsADfm0xfub{=jZ7+%EH?qA(k(N( z+~1$j@%`(hg0(PpS6@GHC2NnLf4`Bx1(0XB9?ytP&|GZt$z1M*@1+hu`Vm#6Wp{ii zpA%Fg3%XEspagbvQ@x0;bG;U?obXKEjXa+5_rR&ghLa++Kx?;b0aA54EEQR*b(S3k3P;3p&oLt(lXx0+L|dWHK=tXY)aU_e=iVm9M|MH$YOa`WEU z#5sNIp2)X@^W*$ zVE#~b5?r7*pardUuLu)#ev17KLC>v!rB1V!?^1zOqa;yh-7|je<-#1IXtq+YuO7$C z4ZZmH>Dy}tm%8gRLajZ%Nse%Z=fj4`ZlgI(fUa&7H!0ln@S2ps^Ss-4_nAORlhwtR zT^e*ubq=HwFsv70FV08O@nJ9>rWe{sPMNiRA1`7Q>{FXXT?ewM~XEoqKcYE79gyOX(Qub95hAr@rO@%~Q&BG^0^)z-j|COzL$Q|cD1@6q^Op!pNoX0EK#fds-a(E0j(H^~j}?)%fBO9`eFec@c1ec0HCHUKI4svbR(Vi5Gw zE*m56BeVm7mqF5z$rMwLwsae|q4tcGk)^R09z~R`YA|y|1dY^5zz5Y@ZTPXY?Ns$x zZK(vpLfLE)JlOef?S541FSpo^++5nB+`BvpKu-)NWWPsJM=P@Yn2Lf_!{q=Cv+@j4 z5ouQI+O#IhqO9Dm0WH3air1=f=?B9oGx+CxuWhidsI8xm(dul5V{2Ozs`SJmbu7?_ zYTnu*E`2vxW9-LXKOG)0b#JC>Z|}fGIg9rkl;vLB84QBrln&;3j}ZhJfz}^}7OB!> zPBI(sM}bkGGL{kd9Npq3@Ki3HSUd(O8qbib^#3D-T8C63g~1%|@!t53Jp8jwjP<-d zBxwitkwnCr zNip#x&XDE$FO%JG;F)g+X21@S`*A>d5d73w`TOM@}K%y`~)}YJbGBbqjQb=0fbgjtFc)PSFd9Mt)YL{ zXRO|AREyK7WADrQ z_ZtGx`Gbz29J;t>*vdh@V|22O=wh2m=Dm<=Ed696+~1gX%0%>LPqok=e9>i`pvEIA z__mdW%O#T3`V5bZ4ct)&JcBW54-=EdoZiWM_gA-_K0~bCBPkARgn7gTk2nef(MHmn zWECE^b7`VXjQj2=`@+_+X)tnR&O4rA9!oetJ9wLC$~{t!PR%E{RK$4dyI|&FB;a4I z(-R@SFB={(E~rr4Zrm;|Oh(!#ZlaE~r0N;wNzfP1K9&gWdC*LR$wI4}EmgxH+nQcs z4SP=z^)uU}j2uqZu4NrBmD)pCWCQQ3_3sx)1;eV3<9=D0EZt`PQ*916t(*QySJ)`f zJ6*3_Z?=}?c$Ys6Wy$HW1Ef=TC<-aay<`s`C`*)+-bLoQSD6*=YK?Q5wA0_kt|~XY z;4|@iq0%>-){a(&Nm8kK)@lJU4ana)>DGRBaSnNz_s5WCxVKR{CbL8Yy$hc z*F`Q7b3^0^Tb?1i!}=R_D2=3r8LAejgN7Uu9jpq8R<7kj2(tZDw9Hu37wc#YQ_!L3 zZf&d31XFzO{%yN^RgWN?#Z$s2Qi|b_CcS~Plozi-S|RB?YLMq+_aE8hqLj^fzp@@- zPzB|V)#$oY|CAa3eaB?kK+zW1b{Pkx_efQR zAtb$OCG4PuWcI8+>7dGpSuddYs~cFTs%LqZ%Qa%?U)~kaV9=)iHxpf$6Q*L#8*r6| zL#4J$vMLg}Rkm&fOPKG!SVV}pi)Vkq%5!9FNGzx@Cf&IrZBB$(FZe2^Kc^VO=Ube@}=`^XnjW`?5DDWJv(LOo_y2jL7q!zah5ZHWc=tU&VTDe_AJC${R*{=Xt(x z3sReXg^^Nfz+d5dfKgfRBEK^HioKOhd_=xSsI$3sIf$kR)Q**M0!KQa5uIg9(cHH< znH*L971X}0{QGcqifiZ=*PjoI3PsU2_{V@DLQ3s_uOkPLYH`Tsmg7u7zknCF2)?cV zZIn(i#3dMs{8x#}c86ac82v0A66s!_W5$P*YnPdht zVu|qXLz#O9^yzg<%aAYK{>qCiW}3MQ|9!Q@Q|pl|XbH0&}=wz`gtU_u9m1tJD4h>=l_)Lb;@a2nk? zIfxA6B>LvAz5Ilr?qjUYApM0^@Hy2mF5aQ=d|XoC(^K@^_meO{SmUb8VRfAo?3T_J zNlK2mxfUZE(kbGBVtx5?J}N9LVoPuia-dA%VI6w`sk{t7C{GF?`otxX8e>m zA8u1aPJ^J>Tvhzu&th#t&To_VT!kb~E1AwV#4n=MbBYl;31Or|Eg77+9 zep+knfR+<;M%`&#W0seMn1#^{c7)=Jk^`(7PlQ+qo+_}*%;t<8&bJ4CPD_0_@6hc% z&bIxkHii)%!bzB;FKv&bIT5%F!zkQz1&w$VWPINhi~%0<-TYh}Q#f+kaXD9z!Hf3Kc( zLgL8azz2XHR{nya!H?LHibTp@FB6l9>K=iT@cPgYE1ttul8S54wXZSNjKOse^nEEJ zmzXGWPt{pl#epnjVO>a&z@KIqHaQTX!^(~x;OXMuQX!xuQUDPmK#f6_Hj=E)xTWn> zkn59hjk}r|02|3Jn%1AUIUluMZR5_?c1|GogaQg0<6U*Qq&C-+YGreuN%ykFTPszf zeOr=-sgm|CD`q@Nia|4CvDY;UlTJjlraTRVf&tJ?xObN`=EFJ+zn@C3+Vm_OU(xK} zadizA^0FSf~$i_EUrT%Y0^Bi(E=SiSRiwS?AM73@{G4hH?ao2n$q|r#6@y(Y)}L1Zw?=BaG0!>(o#ngs7j_V^+fqWLEcn|0+1CdV3i$ zeIKf7d#IW?{n(62YyN6(XW-2Hi#0Vh@+et4>ibo+I^z0tJ;oAPINx?qDZdi`?Z>P0 zMST;euyU~Y>C|*~UWlatttU=FZtXb|wXUbi>j^QQ|5S)uPs zlzO@o@5(ZKphvl3nE8qmL9OGI>au`i#mR{#44A^GrUS_-i{Fmdvy0R7-rS`@P=fYs zuZo$%cwSP5DN#B5r7JxCC8Fb>x3~$(_!f$9OOD=b!@mN5+>P`SY&6^CmrJu88RZiD z@|Y+`ir4{=bGMFcDy)&^&x@+Fr$7D;xU-sdy^2~wy|}ZCKrWLamwy0X-WLJoo~wr? z{Rt~{UW1#D`DiQyIBSZ_9M2rd2aiI}(ta7PmfLtS3qETr@2ci#$*G$q)s2i7CzpR; zVP8B})7hn5fU&=VVa;$aes1Rgv83TCbju6|JR7jQ6s3UZuz#C-V2Ac#EN)+@#Iufy z01ngaCSo|4ulLt#Z+huBd)7zG=Zc;EZAUG9Ta6Z&|IJgW)oOF?*c7mZnbNhAQanV9 zE6zTbwbcN22PZ$olAxQ`Tg{XyAhj(D)07KMSKN5-V{FCG&C+o!h2$TBK9Y!Mck~Kg zbq`n{U4ONpi$ou#!uihJ*{S|iY00>YgM)#Z6a!PXyA*`Cs@)@I$Ny>CV|KyG81Q(l zP%4#S=B>DMS)IoyHCtV(4_#(j*7Jz#S^)q7ZXR7rt4&%l`%_oT-t$9-8@7l;tnH2=WB^xW|-Xt+4&fMxkZxPPcp#FARqy0hwS$gO+>$IkTYz~^ZDZrpA zl$zC7rdxrSI}a7@Re|h8c)-Q(AF=XtPCqtHTvzr*(+*w_Q)49ZqXnDn`O8OEmYP({!U$43>M#?z8KC{*QJ1jy-4YcM#- zHxfLOWvn901LzT=agu3^lw(0T+Q315VNdLV9NO!>R?N- zAgUIvV9fJjyB*@C%Wb|P;?!f&6V_${Z-+8={jo^EKMfgj1N|y`okMzO7(HAlbzPsU z7#(w0G$Lz{fvLlh$z)h~C6bitJ(Q6%+uwb{ZIAcLn*P_D93RD_sDte4~GexaV zm_DNlC_Kp(+o4=vEmfsc9RCRCBHhkORos;OB6Z<8s&_ib4&y6vU(l-S=6LT_$jKei zBCNJ6+#n^4@}*>wbE^WH0+vYO2Q~pmLw?(rUP;t`-pg5u?=H!L%p8 zsW{~1^`p-V6`sgG381f&h*@jyuBk0#l_aS0s154Ax*;oy9FqggX@(#=Bt=eks0<3oCI0zh-RPZ!352gNlo-Wy0^et_Uj^vkqTr+$S zY_9S-c5}((0f;M?r>$ugE^1{<&N&vt8}2j%UdyWlR!ec|5w%x8ebJR6TXU4FP-1K7 zHusUs{Mc*3@bTVT9S{fN9Q_Ed)S=HE8?bD{=8A_p8D1PVoy*I7p%1B^hBsa#Q0gLt zd7n?53o4+vI=Kod!H?qu|Ew$#B<7Dgtc`R|`LcMd02`wv){+iEku`P(Ry8-(aaXIL z8d_3|neicF8jWg8rf-CM5}RIqeC8&r@`9%R4j1R1vtO2Zp4>$3e~Po7{kSe;AM$?S zYEI>JZEEUwtu>v+2j9Jud}Zs0eJ=n@I4io=^TMmwndmp^w%Yr1fur& zHZ)26$vK3R8Qozl!Q=T539+BTb8DFrDQHBy^$j{Sdwv4t>|Hr&tk8~zvetP+hK>Hh zczl#*8223O4G@>3^(~uI&zWd@5q|WKWIi$}09EN0&z^WKo{O@`Os7<|d~kz>HFee^{@OKjqfHi5D3x?AlYowgxg z>PO^GzWC6MXkMY%+|#LDx3-z8zIKfv46iR{&ai~ zAYupwVM0sBM}g%FqkA;zXPi6AicWf5UAIcj1?XJE50KSI`{g zWbYTgSXvig*-gOgY110%EN=pYARF9_I+4{f#=HugInI{lKd#hy_@eLfSG@8l- z)!r%ITpf8mmRxAk1+Fi59C>AS+N_uWI+0Ek&Z{~c?dNR<&j-=QR;h?5sK&EJ?;gtr zr_E7h&6n#H+$F(qakBTGG5q)QNX}X%=CvQ!B#Wg1j8sN0!u-+}{mATF6s&y3$SAZe zeK%HJ*R@rvyo#H*t}%_iOSP5}UJ(si&Q6N?*}+~JF1u#Cgxyg`f%fd@hI|9EUv(%1 z2wmj}U9HpF5CoIm{8X@?<;cnDQ*fNSE_)2@q+(ZyHB~qItMy&Ax5t0SvLkG~Ii@lIq4~FS(<5`ZdX={Oa!yx~8H2+uLXKd;bzl zgn((d<4Qq3g9Q{U008aLr(T_I2^Z27OZ+*hA8lPwm-!EY1 z#c#%E#;x^2q|bTn0CdVphj3Frz%byuYqq|_LqzaS8*2UV8^F34*%Ap|!TZcEx!$_4 z%D7i1Lqf93f7Pnc2)Kdg=goa@V5?C18Y$*yN&fnq*^l}3<)6PV?SbZ{R?*oMqr=_MJNvFtTH)tU5YG16cd zz!1>=sMLF*4-~AIo&D?Hx!g=UdH?f~)!i}QeS;hTU&?cW_QhU)Jru;lm2%?uhX)`@md-W#UFe!z>j8oXTUiA94S_lvPpVp!$u#PNZ&$A?!U zRYJ7e3h+l?zR9nfBL+Ivs=0nFk4V8P|31sX|9mE)fK=-3QC%=aY5FAa!!V8SK`C!q z&@131Z(1Y&6T=9hrSBT*y5S=w_Xb^HD$DAVcwjGgD2&FuGH}bLHV5pgO5Flps~htfS7P-nfo@t@XNJvfM*02nw~r?{t~QgEc+uI_HrB>fERmaqr! zi85}-8xCI82-}5I{r}k4u00UGeSE*=e#i8POL-H~?U6B7U4M#p-~S%^$u8&{wYak^ zR(;>h3U&Cb>VN%><9C|U6O;QM`Ze4&c4IhnGl`_`e5HJ`qc`D%yJIxy@o(s#3LRB{ z0Upk9!ik)fHMrMU%2l99~_s=>rW&%)9OqCs+VG~1s`$6`_d2&_=* diff --git a/spec/reference/list-horizontal-dlist.pdf b/spec/reference/list-horizontal-dlist.pdf index 044dc47cb5ecd81a52d2cb08e06339949e9e325f..116750d2dd03e0548a833680a39305851039d337 100644 GIT binary patch delta 15126 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 DYLwn- delta 15111 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