summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Allen <dan.j.allen@gmail.com>2022-10-29 23:13:13 -0600
committerGitHub <noreply@github.com>2022-10-29 23:13:13 -0600
commit22b98c054c940d10f5eef8db03169ac0fa5823b7 (patch)
tree3357fd9de83b4f712f1bbf0d6bf9dfe762be2fe9
parent90fb17543fa8f2df2defa3ae9383b4389bb5b5fb (diff)
resolves #2362 allow revision content to be customized by theme (PR #2366)
-rw-r--r--CHANGELOG.adoc1
-rw-r--r--docs/modules/theme/pages/title-page.adoc14
-rw-r--r--lib/asciidoctor/pdf/converter.rb36
-rw-r--r--spec/title_page_spec.rb40
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