class Glaemscribe::API::Charset

Attributes

chars[R]
errors[RW]
name[R]
virtual_chars[R]

Public Class Methods

new(name) click to toggle source
# File lib/api/charset.rb, line 169
def initialize(name)
  @name           = name
  @chars          = []
  @errors         = []
  @virtual_chars  = []
end

Public Instance Methods

[](symbol) click to toggle source
# File lib/api/charset.rb, line 245
def [](symbol)
  @lookup_table[symbol]
end
add_char(line, code, names) click to toggle source

Pass integer (utf8 num) and array (of strings)

# File lib/api/charset.rb, line 177
def add_char(line, code, names)
  return if names.empty? || names.include?("?") # Ignore characters with '?'
  
  c         = Char.new
  c.line    = line
  c.code    = code
  c.names   = names
  c.str     = code.chr('UTF-8')
  c.charset = self
  @chars << c
end
add_sequence_char(line, names, seq) click to toggle source
# File lib/api/charset.rb, line 202
def add_sequence_char(line, names, seq)
  return if names.empty? || names.include?("?") # Ignore characters with '?'
  
  c             = SequenceChar.new
  c.line        = line
  c.names       = names
  c.sequence    = seq.split.reject{|token| token.empty? }    
  c.charset     = self
  @chars << c
end
add_virtual_char(line, classes, names, reversed = false, default = nil) click to toggle source
# File lib/api/charset.rb, line 189
def add_virtual_char(line, classes, names, reversed = false, default = nil)
  return if names.empty? || names.include?("?") # Ignore characters with '?'
  
  c           = VirtualChar.new
  c.line      = line
  c.names     = names
  c.classes   = classes # We'll check errors in finalize
  c.charset   = self
  c.reversed  = reversed
  c.default   = default
  @chars << c   
end
finalize() click to toggle source
# File lib/api/charset.rb, line 213
def finalize
  @errors         = []
  @lookup_table   = {}
  @virtual_chars  = [] # A convenient filtered array
  
  @chars.each { |c|
    c.names.each { |cname|
      found = @lookup_table[cname]
      if found
        @errors << Glaeml::Error.new(c.line, "Character #{cname} found twice.")
      else
        @lookup_table[cname] = c
      end
    }
  }
  
  @chars.each{ |c|
    if c.class == VirtualChar
      c.finalize
      @virtual_chars << c
    end
  }
  
  @chars.each{|c|
    if c.class == SequenceChar
      c.finalize
    end
  }
  
  API::Debug::log("Finalized charset '#{@name}', #{@lookup_table.count} symbols loaded.")
end