Module: HH::Markup
- Included in:
- Manual
- Defined in:
- lib/ext/highlighter/markup.rb
Constant Summary
- TOKENIZER =
HH::Syntax.load "ruby"
- COLORS =
{ :comment => {:stroke => "#887"}, :keyword => {:stroke => "#111"}, :method => {:stroke => "#C09", :weight => "bold"}, # :class => {:stroke => "#0c4", :weight => "bold"}, # :module => {:stroke => "#050"}, # :punct => {:stroke => "#668", :weight => "bold"}, :symbol => {:stroke => "#C30"}, :string => {:stroke => "#C90"}, :number => {:stroke => "#396" }, :regex => {:stroke => "#000", :fill => "#FFC" }, # :char => {:stroke => "#f07"}, :attribute => {:stroke => "#369" }, # :global => {:stroke => "#7FB" }, :expr => {:stroke => "#722" }, # :escape => {:stroke => "#277" } :ident => {:stroke => "#994c99"}, :constant => {:stroke => "#630", :weight => "bold"}, :class => {:stroke => "#630", :weight => "bold"}, :matching => {:stroke => "#ff0", :weight => "bold"}, }
- OPEN_BRACKETS =
{ '{' => '}', '(' => ')', '[' => ']', }
- CLOSE_BRACKETS =
close_bracket = {} OPEN_BRACKETS.each{|open, close| opens_bracket = open} CLOSE_BRACKETS = opens_bracket the following is more readable :)
{ '}' => '{', ')' => '(', ']' => '[', }
- BRACKETS =
CLOSE_BRACKETS.keys + OPEN_BRACKETS.keys
- OPEN_BLOCK =
[ 'def', 'class', 'module', 'do', 'if', 'unless', 'while', 'until', 'begin', 'for' ]
- MODIFIERS =
%w[if unless while until]
- NON_TERMINATING =
%w{+ - * / , . = ~ < > ( [}
Instance Method Summary (collapse)
Instance Method Details
- (Object) highlight(str, pos = nil, colors = COLORS)
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ext/highlighter/markup.rb', line 31 def highlight str, pos=nil, colors=COLORS tokens = [] TOKENIZER.tokenize(str) do |t| if t.group == :punct # split punctuation into single characters tokens # TODO: to it in the parser tokens += t.split('').map{|s| HH::Syntax::Token.new(s, :punct)} else # add token as is tokens << t end end res = [] tokens.each do |token| res << if colors[token.group] #span(token, colors[token.group]) tmp = fg(token, tr_color(colors[token.group][:stroke])) colors[token.group][:fill] ? bg(tmp, tr_color(colors[token.group][:fill])) : tmp elsif colors[:any] #span(token, colors[:any]) tmp = fg(token, tr_color(colors[:any][:stroke])) colors[:any][:fill] ? bg(tmp, tr_color(colors[:any][:fill])) : tmp else token end end if pos.nil? or pos < 0 return res.join end token_index, matching_index = matching_token(tokens, pos) if token_index #res[token_index] = span(tokens[token_index], colors[:matching]) tmp = fg(tokens[token_index], tr_color(colors[:matching][:stroke])) res[token_index] = colors[:matching][:fill] ? bg(tmp, tr_color(colors[:matching][:fill])) : tmp if matching_index #res[matching_index] = span(tokens[matching_index], colors[:matching]) tmp = fg(tokens[matching_index], tr_color(colors[:matching][:stroke])) res[matching_index] = colors[:matching][:fill] ? bg(tmp, tr_color(colors[:matching][:fill])) : tmp end end res.join end |