diff options
| author | Dan Allen <dan.j.allen@gmail.com> | 2022-10-29 23:13:13 -0600 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-10-29 23:13:13 -0600 |
| commit | 22b98c054c940d10f5eef8db03169ac0fa5823b7 (patch) | |
| tree | 3357fd9de83b4f712f1bbf0d6bf9dfe762be2fe9 | |
| parent | 90fb17543fa8f2df2defa3ae9383b4389bb5b5fb (diff) | |
resolves #2362 allow revision content to be customized by theme (PR #2366)
| -rw-r--r-- | CHANGELOG.adoc | 1 | ||||
| -rw-r--r-- | docs/modules/theme/pages/title-page.adoc | 14 | ||||
| -rw-r--r-- | lib/asciidoctor/pdf/converter.rb | 36 | ||||
| -rw-r--r-- | spec/title_page_spec.rb | 40 |
4 files changed, 78 insertions, 13 deletions
diff --git a/CHANGELOG.adoc b/CHANGELOG.adoc index 9c77c75f..e52fc60d 100644 --- a/CHANGELOG.adoc +++ b/CHANGELOG.adoc @@ -27,6 +27,7 @@ Enhancements:: * honor `GS_OPTIONS` environment variable for supplying additional parameters to command called by RGhost optimizer (#2337) * add support for passing a color mode to the default optimizer (#2347) * support horizontal alignment on AsciiDoc table cell that only contains paragraphs (#2358) +* allow revision content to be customized by theme (#2362) Improvements:: diff --git a/docs/modules/theme/pages/title-page.adoc b/docs/modules/theme/pages/title-page.adoc index bfc783d4..302bc15c 100644 --- a/docs/modules/theme/pages/title-page.adoc +++ b/docs/modules/theme/pages/title-page.adoc @@ -442,13 +442,21 @@ The keys in the `title-page-revision` category control the display, arrangement |=== |Key |Value Type |Example +|<<content,content>> +|xref:quoted-string.adoc[Quoted AsciiDoc string] +(default: _not set_) +|[source] +title-page: + revision: + content: '{revdate} (v{revnumber})' + |delimiter -|xref:quoted-string.adoc[Quoted string] + -(default: `', '`) +|xref:quoted-string.adoc[Quoted string] {vbar} xref:quoted-string.adoc[Quoted string[2\]] + +(default: `[', ', ': ']`) |[source] title-page: revision: - delimiter: ': ' + delimiter: [' - ', ' / '] |display |`none` + diff --git a/lib/asciidoctor/pdf/converter.rb b/lib/asciidoctor/pdf/converter.rb index caf80896..fb583f54 100644 --- a/lib/asciidoctor/pdf/converter.rb +++ b/lib/asciidoctor/pdf/converter.rb @@ -593,7 +593,6 @@ module Asciidoctor theme.kbd_separator_content ||= %(+#{ZeroWidthSpace}) theme.menu_caret_content ||= %(#{NoBreakSpace}\u203a ) theme.title_page_authors_delimiter ||= ', ' - theme.title_page_revision_delimiter ||= ', ' theme.toc_indent ||= 0 theme.toc_hanging_indent ||= 0 if ::Array === (quotes = theme.quotes) @@ -3795,18 +3794,35 @@ module Asciidoctor end move_down @theme.title_page_authors_margin_bottom || 0 end - unless @theme.title_page_revision_display == 'none' || (revision_info = [(doc.attr? 'revnumber') ? %(#{doc.attr 'version-label'} #{doc.attr 'revnumber'}) : nil, (doc.attr 'revdate')].compact).empty? - move_down @theme.title_page_revision_margin_top || 0 - revision_text = revision_info.join @theme.title_page_revision_delimiter - if (revremark = doc.attr 'revremark') - revision_text = %(#{revision_text}: #{revremark}) + if @theme.title_page_revision_display != 'none' + if (revision_content = @theme.title_page_revision_content) + revision_content = apply_subs_discretely doc, revision_content, drop_lines_with_unresolved_attributes: true, imagesdir: @themesdir + else + delimiters = [', ', ': '] + if (delimiter_overrides = @theme.title_page_revision_delimiter) + delimiter_overrides = [delimiter_overrides] unless Array === delimiter_overrides + delimiters[0..delimiter_overrides.size - 1] = delimiter_overrides + end + revision_content = (doc.attr? 'revnumber') ? [([(doc.attr 'version-label'), (doc.attr 'revnumber')].compact.join ' ')] : [] + if doc.attr? 'revdate' + revision_content << delimiters[0] unless revision_content.empty? + revision_content << (doc.attr 'revdate') + end + if doc.attr? 'revremark' + revision_content << delimiters[1] unless revision_content.empty? + revision_content << (doc.attr 'revremark') + end + revision_content = revision_content.join end - indent (@theme.title_page_revision_margin_left || 0), (@theme.title_page_revision_margin_right || 0) do - theme_font :title_page_revision do - ink_prose revision_text, align: title_text_align, margin: 0, normalize: false + unless revision_content.empty? + move_down @theme.title_page_revision_margin_top || 0 + indent (@theme.title_page_revision_margin_left || 0), (@theme.title_page_revision_margin_right || 0) do + theme_font :title_page_revision do + ink_prose revision_content, align: title_text_align, margin: 0, normalize: false + end end + move_down @theme.title_page_revision_margin_bottom || 0 end - move_down @theme.title_page_revision_margin_bottom || 0 end end end diff --git a/spec/title_page_spec.rb b/spec/title_page_spec.rb index 5912e743..8e3cabde 100644 --- a/spec/title_page_spec.rb +++ b/spec/title_page_spec.rb @@ -753,6 +753,46 @@ describe 'Asciidoctor::PDF::Converter - Title Page' do (expect lines).to include 'Version 1.0 - 2019-01-01' end + it 'should allow theme to customize content of revision line' do + pdf = to_pdf <<~'EOS', pdf_theme: { title_page_revision_content: '{revdate} (*v{revnumber}*)' } + = Document Title + Author Name + v1.0, 2022-10-22 + :doctype: book + + body + EOS + + (expect (pdf.page 1).text).to include '2022-10-22 (v1.0)' + end + + it 'should include version label in revision line if revnumber attribute is set' do + pdf = to_pdf <<~'EOS', analyze: true + = Document Title + Author Name + v1.0, 2022-10-22 + :doctype: book + + body + EOS + + (expect pdf.lines).to include 'Version 1.0, 2022-10-22' + end + + it 'should not include version label in revision line if version-label attribute is unset' do + pdf = to_pdf <<~'EOS', analyze: true + = Document Title + Author Name + v1.0, 2022-10-22 + :doctype: book + :!version-label: + + body + EOS + + (expect pdf.lines).to include '1.0, 2022-10-22' + end + it 'should add logo specified by title_page_logo_image theme key to title page' do pdf = to_pdf <<~'EOS', pdf_theme: { title_page_logo_image: 'image:{docdir}/tux.png[]' }, attribute_overrides: { 'docdir' => fixtures_dir } = Document Title |
