Skip to content

Commit

Permalink
Fancier looking kbd
Browse files Browse the repository at this point in the history
The keyboard keys now look more like keys.
  • Loading branch information
Hextremist committed Nov 19, 2015
1 parent bf38bcf commit d71c846
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 36 deletions.
6 changes: 4 additions & 2 deletions lib/asciidoctor-pdf/converter.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1448,9 +1448,11 @@ def convert_inline_indexterm node

def convert_inline_kbd node
if (keys = node.attr 'keys').size == 1
%(<code>#{keys[0]}</code>)
#%(<code>#{keys[0]}</code>)
%(<kbd>#{keys[0]}</kbd>)
else
keys.map {|key| %(<code>#{key}</code>+) }.join.chop
#keys.map {|key| %(<code>#{key}</code>+) }.join.chop
keys.map {|key| %(<kbd>#{key}</kbd>+) }.join.chop
end
end

Expand Down
81 changes: 48 additions & 33 deletions lib/asciidoctor-pdf/formatted_text/parser.rb
Original file line number Diff line number Diff line change
Expand Up @@ -191,7 +191,7 @@ def _nt_void_element
r1 = true
@index += match_len
else
terminal_parse_failure('<')
terminal_parse_failure('\'<\'')
r1 = nil
end
s0 << r1
Expand All @@ -215,7 +215,7 @@ def _nt_void_element
r8 = true
@index += match_len
else
terminal_parse_failure('/')
terminal_parse_failure('\'/\'')
r8 = nil
end
s5 << r8
Expand All @@ -238,7 +238,7 @@ def _nt_void_element
r9 = true
@index += match_len
else
terminal_parse_failure('>')
terminal_parse_failure('\'>\'')
r9 = nil
end
s0 << r9
Expand Down Expand Up @@ -297,7 +297,7 @@ def _nt_start_tag
r1 = true
@index += match_len
else
terminal_parse_failure('<')
terminal_parse_failure('\'<\'')
r1 = nil
end
s0 << r1
Expand All @@ -312,7 +312,7 @@ def _nt_start_tag
r4 = true
@index += match_len
else
terminal_parse_failure('>')
terminal_parse_failure('\'>\'')
r4 = nil
end
s0 << r4
Expand Down Expand Up @@ -349,7 +349,7 @@ def _nt_tag_name
r1 = true
@index += match_len
else
terminal_parse_failure('a')
terminal_parse_failure('\'a\'')
r1 = nil
end
if r1
Expand All @@ -360,7 +360,7 @@ def _nt_tag_name
r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('code')
terminal_parse_failure('\'code\'')
r2 = nil
end
if r2
Expand All @@ -371,7 +371,7 @@ def _nt_tag_name
r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('color')
terminal_parse_failure('\'color\'')
r3 = nil
end
if r3
Expand All @@ -382,7 +382,7 @@ def _nt_tag_name
r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('del')
terminal_parse_failure('\'del\'')
r4 = nil
end
if r4
Expand All @@ -393,7 +393,7 @@ def _nt_tag_name
r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('em')
terminal_parse_failure('\'em\'')
r5 = nil
end
if r5
Expand All @@ -404,7 +404,7 @@ def _nt_tag_name
r6 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('font')
terminal_parse_failure('\'font\'')
r6 = nil
end
if r6
Expand All @@ -415,7 +415,7 @@ def _nt_tag_name
r7 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('span')
terminal_parse_failure('\'span\'')
r7 = nil
end
if r7
Expand All @@ -426,7 +426,7 @@ def _nt_tag_name
r8 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('strong')
terminal_parse_failure('\'strong\'')
r8 = nil
end
if r8
Expand All @@ -437,7 +437,7 @@ def _nt_tag_name
r9 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('sub')
terminal_parse_failure('\'sub\'')
r9 = nil
end
if r9
Expand All @@ -448,15 +448,27 @@ def _nt_tag_name
r10 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('sup')
terminal_parse_failure('\'sup\'')
r10 = nil
end
if r10
r10 = SyntaxNode.new(input, (index-1)...index) if r10 == true
r0 = r10
else
@index = i0
r0 = nil
if (match_len = has_terminal?('kbd', false, index))
r11 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('\'kbd\'')
r11 = nil
end
if r11
r11 = SyntaxNode.new(input, (index-1)...index) if r11 == true
r0 = r11
else
@index = i0
r0 = nil
end
end
end
end
Expand Down Expand Up @@ -489,7 +501,7 @@ def _nt_void_tag_name
r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('br')
terminal_parse_failure('\'br\'')
r1 = nil
end
if r1
Expand All @@ -500,7 +512,7 @@ def _nt_void_tag_name
r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('img')
terminal_parse_failure('\'img\'')
r2 = nil
end
if r2
Expand Down Expand Up @@ -611,7 +623,7 @@ def _nt_attribute
r4 = true
@index += match_len
else
terminal_parse_failure('=')
terminal_parse_failure('\'=\'')
r4 = nil
end
s0 << r4
Expand All @@ -620,7 +632,7 @@ def _nt_attribute
r5 = true
@index += match_len
else
terminal_parse_failure('"')
terminal_parse_failure('\'"\'')
r5 = nil
end
s0 << r5
Expand All @@ -647,7 +659,7 @@ def _nt_attribute
r8 = true
@index += match_len
else
terminal_parse_failure('"')
terminal_parse_failure('\'"\'')
r8 = nil
end
s0 << r8
Expand Down Expand Up @@ -699,7 +711,7 @@ def _nt_end_tag
r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('</')
terminal_parse_failure('\'</\'')
r1 = nil
end
s0 << r1
Expand All @@ -711,7 +723,7 @@ def _nt_end_tag
r3 = true
@index += match_len
else
terminal_parse_failure('>')
terminal_parse_failure('\'>\'')
r3 = nil
end
s0 << r3
Expand Down Expand Up @@ -811,7 +823,7 @@ def _nt_entity
r1 = true
@index += match_len
else
terminal_parse_failure('&')
terminal_parse_failure('\'&\'')
r1 = nil
end
s0 << r1
Expand All @@ -822,7 +834,7 @@ def _nt_entity
r4 = true
@index += match_len
else
terminal_parse_failure('#')
terminal_parse_failure('\'#\'')
r4 = nil
end
s3 << r4
Expand Down Expand Up @@ -856,7 +868,7 @@ def _nt_entity
r7 = true
@index += match_len
else
terminal_parse_failure(';')
terminal_parse_failure('\';\'')
r7 = nil
end
s0 << r7
Expand Down Expand Up @@ -909,6 +921,9 @@ def _nt_entity_number
@index = i0
r0 = nil
else
if s0.size < 4
terminal_failures.pop
end
r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
end

Expand All @@ -933,7 +948,7 @@ def _nt_entity_name
r1 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('amp')
terminal_parse_failure('\'amp\'')
r1 = nil
end
if r1
Expand All @@ -944,7 +959,7 @@ def _nt_entity_name
r2 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('apos')
terminal_parse_failure('\'apos\'')
r2 = nil
end
if r2
Expand All @@ -955,7 +970,7 @@ def _nt_entity_name
r3 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('gt')
terminal_parse_failure('\'gt\'')
r3 = nil
end
if r3
Expand All @@ -966,7 +981,7 @@ def _nt_entity_name
r4 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('lt')
terminal_parse_failure('\'lt\'')
r4 = nil
end
if r4
Expand All @@ -977,7 +992,7 @@ def _nt_entity_name
r5 = instantiate_node(SyntaxNode,input, index...(index + match_len))
@index += match_len
else
terminal_parse_failure('quot')
terminal_parse_failure('\'quot\'')
r5 = nil
end
if r5
Expand Down Expand Up @@ -1014,7 +1029,7 @@ def _nt_spaces
r1 = true
@index += match_len
else
terminal_parse_failure(' ')
terminal_parse_failure('\' \'')
r1 = nil
end
if r1
Expand Down
2 changes: 1 addition & 1 deletion lib/asciidoctor-pdf/formatted_text/parser.treetop
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ grammar Markup
# QUESTION faster to do regex?
# QUESTION can we cut stuff we aren't using? what about supporting hr?
#'a' / 'b' / 'code' / 'color' / 'del' / 'em' / 'font' / 'i' / 'img' / 'link' / 'span' / 'strikethrough' / 'strong' / 'sub' / 'sup' / 'u'
'a' / 'code' / 'color' / 'del' / 'em' / 'font' / 'span' / 'strong' / 'sub' / 'sup'
'a' / 'code' / 'color' / 'del' / 'em' / 'font' / 'span' / 'strong' / 'sub' / 'sup' / 'kbd'
end

rule void_tag_name
Expand Down
23 changes: 23 additions & 0 deletions lib/asciidoctor-pdf/formatted_text/transform.rb
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ def initialize(options = {})
end
@backgrounds = {}
@overline = nil
@kbd = nil
@colors = {
white: 'ffffff', silver: 'c0c0c0', gray: '808080', black: '000000',
red: 'ff0000', maroon: '800000', yellow: 'ffff00', olive: '808000',
Expand Down Expand Up @@ -153,6 +154,24 @@ def render_in_front(fragment)
end
end

class KbdCallback
def initialize(options)
@document = options[:document]
end
def render_behind(fragment)
original_fill_color = @document.fill_color
original_stroke_color = @document.stroke_color
@document.stroke_color = 'e1dbc9';
@document.fill_color = 'f5f1de';
@document.fill_rounded_rectangle fragment.top_left, fragment.width,
fragment.height, fragment.height / 4
@document.stroke_rounded_rectangle fragment.top_left, fragment.width,
fragment.height, fragment.height / 4
@document.fill_color = original_fill_color;
@document.stroke_color = original_stroke_color;
end
end

def build_fragment(fragment, tag_name, attrs = {})
styles = (fragment[:styles] ||= ::Set.new)
case tag_name
Expand Down Expand Up @@ -264,6 +283,10 @@ def build_fragment(fragment, tag_name, attrs = {})
end
end
end
when :kbd
@kbd ||= KbdCallback.new(:document => @doc)
fragment[:callback] ||= []
fragment[:callback].push @kbd
end

attrs.each do |key,value|
Expand Down

0 comments on commit d71c846

Please sign in to comment.