class Glaemscribe::API::CharsetParser
Public Class Methods
new()
click to toggle source
# File lib/api/charset_parser.rb, line 28 def initialize() @charset = nil end
Public Instance Methods
parse(file_path)
click to toggle source
# File lib/api/charset_parser.rb, line 32 def parse(file_path) @charset = Charset.new(ResourceManager::charset_name_from_file_path(file_path)) raw = File.open(file_path,"rb:utf-8").read doc = Glaeml::Parser.new.parse(raw) if(doc.errors.any?) @charset.errors = doc.errors return @charset end # TODO : verify charset glaeml like we do with modes doc.root_node.gpath("char").each { |char_element| code = char_element.args[0].hex names = char_element.args[1..-1].map{|cname| cname.strip }.reject{ |cname| cname.empty? } @charset.add_char(char_element.line,code,names) } doc.root_node.gpath("seq").each{ |seq_elemnt| names = seq_elemnt.args child_node = seq_elemnt.children.first seq = (child_node && child_node.text?)?(child_node.args.first):("") @charset.add_sequence_char(seq_elemnt.line,names,seq) } doc.root_node.gpath("virtual").each { |virtual_element| names = virtual_element.args reversed = false default = nil classes = [] virtual_element.gpath("class").each { |class_element| vc = Charset::VirtualChar::VirtualClass.new vc.target = class_element.args[0] vc.triggers = class_element.args[1..-1].map{|cname| cname.strip }.reject{ |cname| cname.empty? } classes << vc } virtual_element.gpath("reversed").each { |reversed_element| reversed = true } virtual_element.gpath("default").each { |default_element| default = default_element.args[0] } @charset.add_virtual_char(virtual_element.line,classes,names,reversed,default) } @charset.finalize @charset end