diff options
| author | Dan Allen <dan.j.allen@gmail.com> | 2020-09-06 23:59:07 -0600 |
|---|---|---|
| committer | Dan Allen <dan.j.allen@gmail.com> | 2020-09-07 03:48:07 -0600 |
| commit | da2ea47a94de1bc75d6eb6a10b7a2cc3b24a65aa (patch) | |
| tree | b7d5583d4db3e32577c2e640eb549ae1e748d827 /lib | |
| parent | 8968da3acf75ed6eba0ac552b421abf004ab4d1e (diff) | |
use color attribute on font tag instead of color tag in psuedo-HTML and drop color tag
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/asciidoctor/pdf/converter.rb | 4 | ||||
| -rw-r--r-- | lib/asciidoctor/pdf/formatted_text/parser.rb | 48 | ||||
| -rw-r--r-- | lib/asciidoctor/pdf/formatted_text/parser.treetop | 2 | ||||
| -rw-r--r-- | lib/asciidoctor/pdf/formatted_text/transform.rb | 22 |
4 files changed, 31 insertions, 45 deletions
diff --git a/lib/asciidoctor/pdf/converter.rb b/lib/asciidoctor/pdf/converter.rb index 12b8cf1f..4aa741b1 100644 --- a/lib/asciidoctor/pdf/converter.rb +++ b/lib/asciidoctor/pdf/converter.rb @@ -2450,7 +2450,7 @@ module Asciidoctor end if (conum_font_color = @theme.conum_font_color) # NOTE: CMYK value gets flattened here, but is restored by formatted text parser - result = %(<color rgb="#{conum_font_color}">#{result}</color>) + result = %(<font color="#{conum_font_color}">#{result}</font>) end result end @@ -2465,7 +2465,7 @@ module Asciidoctor end %(#{anchor}<sup>[<a anchor="_footnotedef_#{index}">#{label}</a>]</sup>) elsif node.type == :xref - %(<sup><color rgb="#{theme.role_unresolved_font_color || 'FF0000'}">[#{node.text}]</color></sup>) + %(<sup><font color="#{theme.role_unresolved_font_color || 'FF0000'}">[#{node.text}]</font></sup>) else log :warn, %(unknown footnote type: #{node.type.inspect}) end diff --git a/lib/asciidoctor/pdf/formatted_text/parser.rb b/lib/asciidoctor/pdf/formatted_text/parser.rb index 1b35fca6..5e511fba 100644 --- a/lib/asciidoctor/pdf/formatted_text/parser.rb +++ b/lib/asciidoctor/pdf/formatted_text/parser.rb @@ -389,108 +389,96 @@ module Markup r4 = SyntaxNode.new(input, (index-1)...index) if r4 == true r0 = r4 else - if (match_len = has_terminal?('color', false, index)) + if (match_len = has_terminal?('font', false, index)) r5 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else - terminal_parse_failure('\'color\'') + terminal_parse_failure('\'font\'') r5 = nil end if r5 r5 = SyntaxNode.new(input, (index-1)...index) if r5 == true r0 = r5 else - if (match_len = has_terminal?('font', false, index)) + if (match_len = has_terminal?('span', false, index)) r6 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else - terminal_parse_failure('\'font\'') + terminal_parse_failure('\'span\'') r6 = nil end if r6 r6 = SyntaxNode.new(input, (index-1)...index) if r6 == true r0 = r6 else - if (match_len = has_terminal?('span', false, index)) + if (match_len = has_terminal?('button', false, index)) r7 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else - terminal_parse_failure('\'span\'') + terminal_parse_failure('\'button\'') r7 = nil end if r7 r7 = SyntaxNode.new(input, (index-1)...index) if r7 == true r0 = r7 else - if (match_len = has_terminal?('button', false, index)) + if (match_len = has_terminal?('key', false, index)) r8 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else - terminal_parse_failure('\'button\'') + terminal_parse_failure('\'key\'') r8 = nil end if r8 r8 = SyntaxNode.new(input, (index-1)...index) if r8 == true r0 = r8 else - if (match_len = has_terminal?('key', false, index)) + if (match_len = has_terminal?('sup', false, index)) r9 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else - terminal_parse_failure('\'key\'') + terminal_parse_failure('\'sup\'') r9 = nil end if r9 r9 = SyntaxNode.new(input, (index-1)...index) if r9 == true r0 = r9 else - if (match_len = has_terminal?('sup', false, index)) + if (match_len = has_terminal?('sub', false, index)) r10 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else - terminal_parse_failure('\'sup\'') + terminal_parse_failure('\'sub\'') r10 = nil end if r10 r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true r0 = r10 else - if (match_len = has_terminal?('sub', false, index)) + if (match_len = has_terminal?('mark', false, index)) r11 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else - terminal_parse_failure('\'sub\'') + terminal_parse_failure('\'mark\'') r11 = nil end if r11 r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true r0 = r11 else - if (match_len = has_terminal?('mark', false, index)) + if (match_len = has_terminal?('del', false, index)) r12 = instantiate_node(SyntaxNode,input, index...(index + match_len)) @index += match_len else - terminal_parse_failure('\'mark\'') + terminal_parse_failure('\'del\'') r12 = nil end if r12 r12 = SyntaxNode.new(input, (index-1)...index) if r12 == true r0 = r12 else - if (match_len = has_terminal?('del', false, index)) - r13 = instantiate_node(SyntaxNode,input, index...(index + match_len)) - @index += match_len - else - terminal_parse_failure('\'del\'') - r13 = nil - end - if r13 - r13 = SyntaxNode.new(input, (index-1)...index) if r13 == true - r0 = r13 - else - @index = i0 - r0 = nil - end + @index = i0 + r0 = nil end end end diff --git a/lib/asciidoctor/pdf/formatted_text/parser.treetop b/lib/asciidoctor/pdf/formatted_text/parser.treetop index 6e28cdc1..1ad5a5de 100644 --- a/lib/asciidoctor/pdf/formatted_text/parser.treetop +++ b/lib/asciidoctor/pdf/formatted_text/parser.treetop @@ -50,7 +50,7 @@ grammar Markup rule tag_name # QUESTION: faster to do regex? # QUESTION: what about supporting hr? - 'a' / 'strong' / 'em' / 'code' / 'color' / 'font' / 'span' / 'button' / 'key' / 'sup' / 'sub' / 'mark' / 'del' + 'a' / 'strong' / 'em' / 'code' / 'font' / 'span' / 'button' / 'key' / 'sup' / 'sub' / 'mark' / 'del' end rule void_tag_name diff --git a/lib/asciidoctor/pdf/formatted_text/transform.rb b/lib/asciidoctor/pdf/formatted_text/transform.rb index ca388316..ddc02795 100644 --- a/lib/asciidoctor/pdf/formatted_text/transform.rb +++ b/lib/asciidoctor/pdf/formatted_text/transform.rb @@ -229,18 +229,6 @@ module Asciidoctor styles << :italic when :button, :code, :key, :mark update_fragment fragment, @theme_settings[tag_name] - when :color - if (rgb = attrs[:rgb]) - case rgb.chr - when '#' - fragment[:color] = rgb.slice 1, rgb.length - when '[' - # treat value as CMYK array (e.g., "[50, 100, 0, 0]") - fragment[:color] = rgb.slice(1, rgb.length).chomp(']').split(', ').map {|it| (ival = it.to_i) == (fval = it.to_f) ? ival : fval } - else - fragment[:color] = rgb - end - end when :font if (value = attrs[:name]) fragment[:font] = value @@ -259,6 +247,16 @@ module Asciidoctor fragment[:align] = :center fragment[:callback] = (fragment[:callback] || []) | [InlineTextAligner] end + if (value = attrs[:color]) + case value.chr + when '#' # hex string (e.g., #FF0000) + fragment[:color] = value.length == 7 ? (value.slice 1, 6) : (value.slice 1, 3).each_char.map {|c| c * 2 }.join if HexColorRx.match? value + when '[' # CMYK array (e.g., [50, 100, 0, 0]) + if (value.end_with? ']') && (values = (value.slice 1, value.length).chop.split ', ').length == 4 + fragment[:color] = values.map {|it| (ival = it.to_i) == (fval = it.to_f) ? ival : fval } + end + end + end #if (value = attrs[:character_spacing]) # fragment[:character_spacing] = value.to_f #end |
