From f47e755c74083eebb58e252881a7045a9e2e9d09 Mon Sep 17 00:00:00 2001 From: Dan Allen Date: Tue, 31 Dec 2019 20:03:36 -0500 Subject: [PATCH] resolves #1309 allow theme to specify background color and full border for quote and verse blocks (PR #1457) --- CHANGELOG.adoc | 1 + data/themes/base-theme.yml | 4 +- data/themes/default-theme.yml | 6 +- docs/theming-guide.adoc | 34 ++++++++-- lib/asciidoctor/pdf/converter.rb | 58 ++++++++++++++++-- .../verse-border-and-background-color.pdf | Bin 0 -> 11137 bytes spec/quote_spec.rb | 37 ++++++++++- spec/reference/quote-background-color.pdf | Bin 0 -> 9703 bytes .../quote-border-and-background-color.pdf | Bin 0 -> 11137 bytes spec/reference/verse-background-color.pdf | Bin 0 -> 9703 bytes .../verse-border-and-background-color.pdf | Bin 0 -> 11137 bytes spec/spec_helper.rb | 4 +- spec/verse_spec.rb | 39 +++++++++++- 13 files changed, 164 insertions(+), 19 deletions(-) create mode 100644 spec/output/verse-border-and-background-color.pdf create mode 100644 spec/reference/quote-background-color.pdf create mode 100644 spec/reference/quote-border-and-background-color.pdf create mode 100644 spec/reference/verse-background-color.pdf create mode 100644 spec/reference/verse-border-and-background-color.pdf diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 9067540e9..4e2055411 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -28,6 +28,7 @@ For a detailed view of what has changed, refer to the {uri-repo}/commits/master[ * allow theme to specify background image for running content (#356) * allow theme to specify border for admonition block (#444) * allow theme to specify background color for admonition block (#444) +* allow theme to specify background color and full border for quote and verse blocks (#1309) * allow text alignment roles to be used to control alignment of discrete heading * don't apply border to block if border width is not set (or nil) * use font color from pygments style for unhighlighted text (#1441) diff --git a/data/themes/base-theme.yml b/data/themes/base-theme.yml index 341d1bfe0..2b7e9dd8b 100644 --- a/data/themes/base-theme.yml +++ b/data/themes/base-theme.yml @@ -75,10 +75,10 @@ admonition_padding: [0, 12, 0, 12] admonition_label_font_style: bold admonition_label_text_transform: uppercase blockquote_border_color: 'EEEEEE' -blockquote_border_width: 4 +blockquote_border_left_width: 4 blockquote_padding: [6, 12, -6, 14] verse_border_color: 'EEEEEE' -verse_border_width: 4 +verse_border_left_width: 4 verse_padding: [6, 12, -6, 14] code_font_family: Courier code_font_size: 10.8 diff --git a/data/themes/default-theme.yml b/data/themes/default-theme.yml index edd8ea5ab..a0a52df10 100644 --- a/data/themes/default-theme.yml +++ b/data/themes/default-theme.yml @@ -173,15 +173,17 @@ admonition: blockquote: font_size: $base_font_size_large border_color: $base_border_color - border_width: 5 + 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_width / 2] + padding: [0, $horizontal_rhythm, $block_margin_bottom * -0.75, $horizontal_rhythm + $blockquote_border_left_width / 2] cite_font_size: $base_font_size_small cite_font_color: 999999 verse: font_size: $blockquote_font_size border_color: $blockquote_border_color border_width: $blockquote_border_width + border_left_width: $blockquote_border_left_width padding: $blockquote_padding cite_font_size: $blockquote_cite_font_size cite_font_color: $blockquote_cite_font_color diff --git a/docs/theming-guide.adoc b/docs/theming-guide.adoc index 85610608a..6b1975675 100644 --- a/docs/theming-guide.adoc +++ b/docs/theming-guide.adoc @@ -2621,11 +2621,23 @@ The keys in this category control the arrangement and style of quote blocks. 3+|[#key-prefix-blockquote]*Key Prefix:* <> +|background-color +|<> + +(default: _not set_) +|blockquote: + background-color: #dddddd + |border-width^[1]^ |<> + +(default: 0) +|blockquote: + border-width: 0.5 + +|border-left-width^[1]^ +|<> + (default: 4) |blockquote: - border-width: 5 + border-left-width: 5 |border-color^[1]^ |<> + @@ -2720,7 +2732,8 @@ The keys in this category control the arrangement and style of quote blocks. text-transform: uppercase |=== -. Only applies to the left side. +. If border-left-width is non-zero, the border is only applied to the left side. +Otherwise, if border-width is non-zero, the border is drawn around the whole block. [#keys-verse] === Verse @@ -2733,11 +2746,23 @@ The keys in this category control the arrangement and style of verse blocks. 3+|[#key-prefix-verse]*Key Prefix:* <> +|background-color +|<> + +(default: _not set_) +|verse: + background-color: #dddddd + |border-width^[1]^ |<> + +(default: 0) +|verse: + border-width: 0.5 + +|border-left-width^[1]^ +|<> + (default: 4) |verse: - border-width: 5 + border-left-width: 5 |border-color^[1]^ |<> + @@ -2832,7 +2857,8 @@ The keys in this category control the arrangement and style of verse blocks. text-transform: uppercase |=== -. Only applies to the left side. +. If border-left-width is non-zero, the border is only applied to the left side. +Otherwise, if border-width is non-zero, the border is drawn around the whole block. [#keys-sidebar] === Sidebar diff --git a/lib/asciidoctor/pdf/converter.rb b/lib/asciidoctor/pdf/converter.rb index 9bc84588d..98714b15b 100644 --- a/lib/asciidoctor/pdf/converter.rb +++ b/lib/asciidoctor/pdf/converter.rb @@ -983,10 +983,60 @@ def convert_quote_or_verse node add_dest_for_block node if node.id theme_margin :block, :top category = node.context == :quote ? :blockquote : :verse - b_width = @theme[%(#{category}_border_width)] || 0 - b_color = @theme[%(#{category}_border_color)] + unless (b_left_width = @theme[%(#{category}_border_left_width)]) && b_left_width > 0 + b_left_width = nil + if (b_width = @theme[%(#{category}_border_width)]) + b_width = nil unless b_width > 0 + end + end + b_color = @theme[%(#{category}_border_color)] if b_width || b_left_width + bg_color = @theme[%(#{category}_background_color)] keep_together do |box_height = nil| push_scratch node.document if scratch? + if box_height && (b_width || bg_color) + # FIXME: due to the calculation error logged in #789, we must advance page even when content is split across pages + advance_page if box_height > cursor && !at_page_top? + float do + # TODO: move the multi-page logic to theme_fill_and_stroke_bounds + if b_width + if b_color == @page_bg_color # let page background cut into sidebar background + b_gap_color, b_shift = @page_bg_color, b_width + elsif (b_gap_color = bg_color) && b_gap_color != b_color + b_shift = 0 + else # let page background cut into border + b_gap_color, b_shift = @page_bg_color, 0 + end + else # let page background cut into sidebar background + b_shift, b_gap_color = (b_width = 0.5) * 0.5, @page_bg_color + end + b_radius = @theme[%(#{category}_border_radius)] || 0 + initial_page, remaining_height = true, box_height + while remaining_height > 0 + advance_page unless initial_page + fragment_height = [(available_height = cursor), remaining_height].min + bounding_box [0, available_height], width: bounds.width, height: fragment_height do + theme_fill_and_stroke_bounds category + unless b_width == 0 + indent b_radius, b_radius do + move_down b_shift + # dashed line to indicate continuation from previous page; swell line to cover background + stroke_horizontal_rule b_gap_color, line_width: b_width * 1.2, line_style: :dashed + move_up b_shift + end unless initial_page + if remaining_height > fragment_height + move_down fragment_height - b_shift + indent b_radius, b_radius do + # dashed line to indicate continuation to next page; swell line to cover background + stroke_horizontal_rule b_gap_color, line_width: b_width * 1.2, line_style: :dashed + end + end + end + end + remaining_height -= fragment_height + initial_page = false + end + end + end start_page_number = page_number start_cursor = cursor caption_height = node.title? ? (layout_caption node, category: category) : 0 @@ -1007,7 +1057,7 @@ def convert_quote_or_verse node end # FIXME: we want to draw graphics before content, but box_height is not reliable when spanning pages # FIXME: border extends to bottom of content area if block terminates at bottom of page - if box_height && b_width > 0 + if box_height && b_left_width page_spread = page_number - start_page_number + 1 end_cursor = cursor go_to_page start_page_number @@ -1034,7 +1084,7 @@ def convert_quote_or_verse node # NOTE: b_height is 0 when block terminates at bottom of page next if b_height == 0 bounding_box [0, y_draw], width: bounds.width, height: b_height do - stroke_vertical_rule b_color, line_width: b_width, at: b_width / 2.0 + stroke_vertical_rule b_color, line_width: b_left_width, at: b_left_width * 0.5 end end end diff --git a/spec/output/verse-border-and-background-color.pdf b/spec/output/verse-border-and-background-color.pdf new file mode 100644 index 0000000000000000000000000000000000000000..31e13ddf223724a87fc5466d34b1ee3fa8ba85ad GIT binary patch literal 11137 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 VD>vfK$N}jsS{fuMcuGqN^j|kuOfCQb literal 0 HcmV?d00001 diff --git a/spec/quote_spec.rb b/spec/quote_spec.rb index b95acfa6d..c460fdcfe 100644 --- a/spec/quote_spec.rb +++ b/spec/quote_spec.rb @@ -17,8 +17,8 @@ (expect title_text[:x]).to eql 48.24 end - it 'should not draw left border if border_width is 0' do - pdf = to_pdf <<~'EOS', pdf_theme: { blockquote_border_width: 0 }, analyze: :line + it 'should not draw left border if border_left_width is 0' do + pdf = to_pdf <<~'EOS', pdf_theme: { blockquote_border_left_width: 0 }, analyze: :line ____ Let it be. ____ @@ -50,4 +50,37 @@ (expect quote_borders).to have_size 1 (expect quote_borders[0][:page_number]).to be 1 end + + it 'should apply specified background color', visual: true do + pdf_theme = { + blockquote_background_color: 'dddddd', + blockquote_border_color: 'aa0000', + } + to_file = to_pdf_file <<~'EOS', 'quote-background-color.pdf', pdf_theme: pdf_theme + ____ + Let it be. + + Let it be. + ____ + EOS + + (expect to_file).to visually_match 'quote-background-color.pdf' + end + + it 'should apply specified border and background color', visual: true do + pdf_theme = build_pdf_theme \ + blockquote_border_left_width: 0, + blockquote_border_width: 0.5, + blockquote_border_color: 'aa0000', + blockquote_background_color: 'dddddd' + pdf_theme.blockquote_padding = pdf_theme.sidebar_padding + to_file = to_pdf_file <<~'EOS', 'quote-border-and-background-color.pdf', pdf_theme: pdf_theme + [,Paul McCartney] + ____ + Let it be. + + Let it be. + ____ + EOS + + (expect to_file).to visually_match 'quote-border-and-background-color.pdf' + end end diff --git a/spec/reference/quote-background-color.pdf b/spec/reference/quote-background-color.pdf new file mode 100644 index 0000000000000000000000000000000000000000..23c0050c1b1a8d80f120cb9b6ba547ad38ae1bb3 GIT binary patch literal 9703 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

d=_xlFUPVp3vIte z&+=M5&yfk1=RK*l(l%p5rZwn8zc6ERZF_cl*j2QyGfZM;r$uu!hHUC?b1us`)n%0{ z=y?uyMvDT!o*2xuR4KTi(UswU+sO@aoe39qkh?qWO0z}uq3Q_B8Rno1!8g|-=i~Mr z_8QF|$G>rUdU-8G%8|b&a&+BfJ!^fJL7%YE@3n%BJkrmZpPw^L-!o6tWEc2fB&w)= zfdmN-4u(l833HT^=(c~K!rxGa$1Qp0#^<6NCx04f3nz!qB& zR95E4eAbW2(#>oR3@!sm{m-*GxVAcchbC88Us<+l9ciDow+Kz;(QA0h2#rqwjW>z* zT?|-aPfyTt8QVSA1K?MXh-ANVyUIg8UltZxT9!#Y2ZKv(#=M_RSC4k$S10EN&Ayf| zB)0fDPn4&Ot&U5qy>AQb;wy~3)zdSzx;UyJ^))=at8Zztvgqq%(0X6>X|YuRZnGXQ zYFWmu_ca+db&L-~+Q#ix3vNw+?VpRD;0TamRp^ExN!OmF@b!&6_sknPiweiFgNn&}ms+Oi^wV6+jqvBJZWbwvX-=#m- zR^vXyppAcCuu8@^U{5=fc%KUkrUtc zsbJ2EVrKh~#PGJ)<1=!8e71*kD#r(W$SD-&oY=NLpE)^-f$cvMue8;T&-(i*+Cp-w z#|Ib5WfcCL#J2v$Ie&_+?LQH_L(nw`X6XEOc7qAe4-7Do&rxUySJAypb95AyeHMZpC&=idM9-$y^~{=p+(ZL?#3#z zJX=42{RCjYw@W3TCOzPFbT zKG5Jk+?YJep-ZvM!%-~5BGD3o%*n54$d?(p2_}~S(E8O)T+Pk48-6_9clUD>%)ZVI z6(sDD?0*z_xo9**AZKvR_`Z3RctQ)p!Ygh}Ey-4Q#ac9txi{OE^&ITQi_*KCem3!U zYTQeL_ERkNCCPizSH^41hWxJ<)vwiBTe4{Mn*p+0KiCD)utU&o;yISWSz|f4{zolY zUJ|Qaa!XxOY@eQ?lXUwp*K}yyfka4KidrU#t6Vf^Fkb93$kJudRGpH^SQDQkamjcISpc$X6AC6TF?td^ApH(?)2=al@Obod{(S5sb@ z(^Xox_B6i8o;$r_&0gNL2A`V9dE&ET9e+2^=!V>f;TLB0cQRTpC^1s>!zxr=;fzvM z_amx1N8W`W%ITYR1iWD%MoCa4)bF|GW!@d{>!_`|fPlM|EC{;&1EY{gU@1C*w{g^K8TALoZ{y%dU@!lILjarlR~(XhH~gg^ zlKN4^FE|E2WqRbK#7|`Ac3hRRp36X dgLfi;w+q$YBn*+XF>|tT1QH}HtYN4L`VTdP^Z5V( literal 0 HcmV?d00001 diff --git a/spec/reference/quote-border-and-background-color.pdf b/spec/reference/quote-border-and-background-color.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4fc269878c1ac09e771e87bb1db95fd6abfabb26 GIT binary patch literal 11137 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 YiyO((m9#x`KzfUj1_=wF)Kmif7cRC-`2YX_ literal 0 HcmV?d00001 diff --git a/spec/reference/verse-background-color.pdf b/spec/reference/verse-background-color.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e0f80a156f522b8d2f55ec500683ad9050333373 GIT binary patch literal 9703 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 ewF!jzEHhh1Cr-K>q=Mtn>Q- literal 0 HcmV?d00001 diff --git a/spec/reference/verse-border-and-background-color.pdf b/spec/reference/verse-border-and-background-color.pdf new file mode 100644 index 0000000000000000000000000000000000000000..31e13ddf223724a87fc5466d34b1ee3fa8ba85ad GIT binary patch literal 11137 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 VD>vfK$N}jsS{fuMcuGqN^j|kuOfCQb literal 0 HcmV?d00001 diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index 933c3a377..25768199a 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -200,9 +200,7 @@ def initialize end def append_line x, y - unless @color.nil? && @width.nil? - @lines << { page_number: @page_number, from: @from, to: { x: x, y: y }, color: @color, width: @width } - end + @lines << { page_number: @page_number, from: @from, to: { x: x, y: y }, color: @color, width: @width } unless @color.nil? && @width.nil? end def begin_new_subpath x, y diff --git a/spec/verse_spec.rb b/spec/verse_spec.rb index 4f7e04d82..4eae23052 100644 --- a/spec/verse_spec.rb +++ b/spec/verse_spec.rb @@ -36,8 +36,9 @@ (expect lines[2]).to eql %(\u00a0 go) end - it 'should not draw left border if border_width is 0' do - pdf = to_pdf <<~'EOS', pdf_theme: { blockquote_border_width: 0 }, analyze: :line + it 'should not draw left border if border_left_width is 0' do + pdf = to_pdf <<~'EOS', pdf_theme: { verse_border_left_width: 0 }, analyze: :line + [verse] ____ here we @@ -69,4 +70,38 @@ (expect text[0][:font_size]).to eql 10.5 (expect text[0][:font_color]).to eql '555555' end + + it 'should apply specified background color', visual: true do + pdf_theme = { + verse_background_color: 'dddddd', + verse_border_color: 'aa0000', + } + to_file = to_pdf_file <<~'EOS', 'verse-background-color.pdf', pdf_theme: pdf_theme + [verse] + ____ + Let it be. + Let it be. + ____ + EOS + + (expect to_file).to visually_match 'verse-background-color.pdf' + end + + it 'should apply specified border and background color', visual: true do + pdf_theme = build_pdf_theme \ + verse_border_left_width: 0, + verse_border_width: 0.5, + verse_border_color: 'aa0000', + verse_background_color: 'dddddd' + pdf_theme.blockquote_padding = pdf_theme.sidebar_padding + to_file = to_pdf_file <<~'EOS', 'verse-border-and-background-color.pdf', pdf_theme: pdf_theme + [verse,Paul McCartney] + ____ + Let it be. + Let it be. + ____ + EOS + + (expect to_file).to visually_match 'verse-border-and-background-color.pdf' + end end