module Uv

Constants

Version

Attributes

default_style[RW]
render_path[RW]
syntax_path[RW]
theme_path[RW]

Public Class Methods

alpha_blend(bg, fg) click to toggle source
# File lib/uv/utility.rb, line 10
def Uv.alpha_blend bg, fg
  unless bg =~ /^#((\d|[ABCDEF]){3}|(\d|[ABCDEF]){6}|(\d|[ABCDEF]){8})$/i
    raise(ArgumentError, "Malformed background color '#{bg}'" )
  end
  unless fg =~ /^#((\d|[ABCDEF]){3}|(\d|[ABCDEF]){6}|(\d|[ABCDEF]){8})$/i
    raise(ArgumentError, "Malformed foreground color '#{fg}'" )
  end
  
  if bg.size == 4
    tbg  =  (fg[1,1].hex * 0xff / 0xf).to_s(16).upcase.rjust(2, '0')
    tbg +=  (fg[2,1].hex * 0xff / 0xf).to_s(16).upcase.rjust(2, '0')
    tbg +=  (fg[3,1].hex * 0xff / 0xf).to_s(16).upcase.rjust(2, '0')
    bg   =  "##{tbg}"
  end
  
  result = ""
  if fg.size == 4
    result += (fg[1,1].hex * 0xff / 0xf).to_s(16).upcase.rjust(2, '0')
    result += (fg[2,1].hex * 0xff / 0xf).to_s(16).upcase.rjust(2, '0')
    result += (fg[3,1].hex * 0xff / 0xf).to_s(16).upcase.rjust(2, '0')
  elsif fg.size == 9
    if bg.size == 7
      div0 = bg[1..-1].hex
      div1, alpha = fg[1..-1].hex.divmod( 0x100 )
      3.times {      
        div0, mod0 = div0.divmod( 0x100 )
        div1, mod1 = div1.divmod( 0x100 )
        result = ((mod0 * alpha + mod1 * ( 0x100 - alpha ) ) / 0x100).to_s(16).upcase.rjust(2, '0') + result
      } 
    else
      div_a, alpha_a = bg[1..-1].hex.divmod( 0x100 )
      div_b, alpha_b = fg[1..-1].hex.divmod( 0x100 )
      alpha = alpha_a + alpha_b * (0x100 - alpha_a)
      3.times {
        div_b, c_b = div_b.divmod( 0x100 )
        div_a, c_a = div_a.divmod( 0x100 )
        result = ((c_a * alpha_a + ( 0x100 - alpha_a ) * alpha_b * c_b ) / alpha).to_s(16).upcase.rjust(2, '0') + result
      } 
    end
    #result = "FF00FF"
  else
    result = fg[1..-1]
  end
  "##{result}"
end
copy_files(output, output_dir) click to toggle source
# File lib/uv.rb, line 31
def self.copy_files(output, output_dir)
  Uv.path.each do |dir|
    dir_name = File.join( dir, "render", output, "files" )
    FileUtils.cp_r( Dir.glob(File.join( dir_name, "." )), output_dir ) if File.exists?( dir_name )
  end
end
debug(text, syntax_name) click to toggle source
# File lib/uv.rb, line 90
def self.debug(text, syntax_name)
  syntax_node_for(syntax_name).parse(text, Textpow::DebugProcessor.new)
end
foreground(bg) click to toggle source
# File lib/uv/utility.rb, line 2
def Uv.foreground bg
  fg = "#FFFFFF"
  3.times do |i|
    fg = "#000000" if bg[i*2+1, 2].hex > 0xFF / 2 
  end
  fg
end
normalize_color(settings, color, fg = false) click to toggle source
# File lib/uv/utility.rb, line 56
def Uv.normalize_color settings, color, fg = false
  if color
    if fg
      alpha_blend( settings["foreground"] ? settings["foreground"] : "#000000FF", color )
    else
      alpha_blend( settings["background"] ? settings["background"] : "#000000FF", color )
    end
  else
    color
  end
end
parse(text, output = "xhtml", syntax_name = nil, line_numbers = false, render_style = nil, headers = false) click to toggle source
# File lib/uv.rb, line 84
def self.parse(text, output = "xhtml", syntax_name = nil, line_numbers = false, render_style = nil, headers = false)
  RenderProcessor.load(output, render_style, line_numbers, headers) do |processor|
    syntax_node_for(syntax_name).parse(text, processor)
  end.string
end
path() click to toggle source
# File lib/uv.rb, line 18
def self.path
  result = []
  result << File.join(File.dirname(__FILE__), ".." )
end
syntax_for_file(file_name) click to toggle source
# File lib/uv.rb, line 55
def self.syntax_for_file(file_name)
  # get first non-empty line
  first_line = ""
  File.open( file_name, 'r' ) { |f|
    while (first_line = f.readline).strip.size == 0; end
  }

  # find syntax by file-extension
  result = []
  syntax_nodes.each do |key, syntax|
    assigned = false
    if syntax.fileTypes
      syntax.fileTypes.each do |t|
        if t == File.basename( file_name ) || t == File.extname( file_name )[1..-1]
          result << [key, syntax]
          assigned = true
          break
        end
      end
    end
    unless assigned
      if syntax.firstLineMatch && syntax.firstLineMatch =~ first_line
        result << [key, syntax]
      end
    end
  end
  result
end
syntax_node_for(syntax) click to toggle source
# File lib/uv.rb, line 23
def self.syntax_node_for(syntax)
  if syntax_nodes.key?(syntax)
    syntax_nodes[syntax]
  else
    syntax_nodes[syntax] = Textpow.syntax(syntax) || raise(ArgumentError, "No syntax found for #{syntax}")
  end
end
syntaxes() click to toggle source
# File lib/uv.rb, line 38
def self.syntaxes
  Dir.glob( File.join(@syntax_path, '*.syntax') ).collect do |f|
    File.basename(f, '.syntax')
  end
end
themes() click to toggle source
# File lib/uv.rb, line 49
def self.themes
  Dir.glob( File.join(@theme_path, '*.css') ).collect do |f| 
    File.basename(f, '.css')
  end
end

Private Class Methods

syntax_nodes() click to toggle source
# File lib/uv.rb, line 44
def self.syntax_nodes
  @syntax_nodes ||= Hash[syntaxes.map { |name| [name, Textpow.syntax(name)] }]
end