module Uv

Attributes

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

Public Class Methods

alpha_blend(bg, fg) click to toggle source
# File lib/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/lib/uv.rb, line 36
def Uv.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/lib/uv.rb, line 88
def Uv.debug text, syntax_name
  syntax_node_for(syntax_name).parse(text, Textpow::DebugProcessor.new)
end
foreground(bg) click to toggle source
# File lib/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/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_number = 0, render_style = nil, headers = false) click to toggle source
# File lib/lib/uv.rb, line 82
def Uv.parse text, output = "xhtml", syntax_name = nil, line_number = 0, render_style = nil, headers = false
  RenderProcessor.load(output, render_style, line_number, headers) do |processor|
    syntax_node_for(syntax_name).parse(text, processor)
  end.string
end
path() click to toggle source
# File lib/lib/uv.rb, line 16
def Uv.path
  result = []
  result << File.join(File.dirname(__FILE__), ".." )
end
syntax_for_file(file_name) click to toggle source
# File lib/lib/uv.rb, line 55
def Uv.syntax_for_file file_name
  init_syntaxes unless @syntaxes
  first_line = ""
  File.open( file_name, 'r' ) { |f|
    while (first_line = f.readline).strip.size == 0; end
  }
  result = []
  @syntaxes.each do |key, value|
    assigned = false
    if value.fileTypes
      value.fileTypes.each do |t|
        if t == File.basename( file_name ) || t == File.extname( file_name )[1..-1]
          result << [key, value] 
          assigned = true
          break
        end
      end
    end
    unless assigned
      if value.firstLineMatch && value.firstLineMatch =~ first_line
        result << [key, value] 
      end
    end
  end
  result
end
syntax_node_for(syntax) click to toggle source
# File lib/lib/uv.rb, line 21
def self.syntax_node_for(syntax)
  if !@syntaxes.key?(syntax)
    filename = File.join(@syntax_path, "#{syntax}.syntax")
    @syntaxes[syntax] = if File.exist?(filename)
      Textpow::SyntaxNode.load(filename)
    else
      false
    end
  end
  if !@syntaxes[syntax]
    raise ArgumentError, "No #{syntax}.syntax file in #{@syntax_path}"
  end
  @syntaxes[syntax]
end
themes() click to toggle source
# File lib/lib/uv.rb, line 49
def Uv.themes
  Dir.glob( File.join(@theme_path, '*.css') ).collect do |f| 
    File.basename(f, '.css')
  end
end