summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDan Allen <dan.j.allen@gmail.com>2020-09-06 23:59:07 -0600
committerDan Allen <dan.j.allen@gmail.com>2020-09-07 03:48:07 -0600
commitda2ea47a94de1bc75d6eb6a10b7a2cc3b24a65aa (patch)
treeb7d5583d4db3e32577c2e640eb549ae1e748d827 /lib
parent8968da3acf75ed6eba0ac552b421abf004ab4d1e (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.rb4
-rw-r--r--lib/asciidoctor/pdf/formatted_text/parser.rb48
-rw-r--r--lib/asciidoctor/pdf/formatted_text/parser.treetop2
-rw-r--r--lib/asciidoctor/pdf/formatted_text/transform.rb22
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