class CodeArea

Constants

REGEX_COLOR_HEX6

Public Class Methods

languages() click to toggle source
# File lib/glimmer/libui/custom_control/code_area.rb, line 3
def languages
  require 'rouge'
  Rouge::Lexer.all.map {|lexer| lexer.tag}.sort
end
lexers() click to toggle source
# File lib/glimmer/libui/custom_control/code_area.rb, line 8
def lexers
  require 'rouge'
  Rouge::Lexer.all.sort_by(&:title)
end

Public Instance Methods

lexer() click to toggle source
# File lib/glimmer/libui/custom_control/code_area.rb, line 42
def lexer
  require 'rouge'
  require 'glimmer-dsl-libui/ext/rouge/theme/glimmer'
  # TODO Try to use Rouge::Lexer.find_fancy('guess', code) in the future to guess the language or otherwise detect it from file extension
  @lexer ||= Rouge::Lexer.find_fancy(language)
  @lexer ||= Rouge::Lexer.find_fancy('ruby') # default to Ruby if no lexer is found
end
syntax_highlighting(text) click to toggle source
# File lib/glimmer/libui/custom_control/code_area.rb, line 50
def syntax_highlighting(text)
  return [] if text.to_s.strip.empty?
  @syntax_highlighting ||= {}
  unless @syntax_highlighting.keys.include?(text)
    lex = lexer.lex(text).to_a
    text_size = 0
    @syntax_highlighting[text] = lex.map do |pair|
      {token_type: pair.first, token_text: pair.last}
    end.each do |hash|
      hash[:token_index] = text_size
      text_size += hash[:token_text].size
    end
  end
  @syntax_highlighting[text]
end