lib/ting/conversions.rb in ting-0.2.1 vs lib/ting/conversions.rb in ting-0.3.0

- old
+ new

@@ -10,11 +10,12 @@ #Load various representations for initials and finals %w(Initial Final).each do |c| klazz=Ting.const_get c begin CSV.open(DATA_DIR+c.downcase+'.csv', 'r').each do |name, *values| - All << name.to_s unless All.index name || name =~ /name|standalone/i + next if name == "name" + All << name.to_s unless All.include?(name) || name =~ /standalone/i klazz.class_eval {attr_accessor name.to_sym} values.each_with_index do |v,i| klazz::All[i].send(name+'=', v) end end @@ -27,14 +28,18 @@ #Substitution rules @@rules=YAML::load(IO.read(DATA_DIR+'rules.yaml')) def self.parse(type, string) - if (fin = Final::All.find {|f| f.respond_to?("#{type}_standalone") && f.send("#{type}_standalone") == string}) - TonelessSyllable.new(Initial::Empty, fin) + if (final = Final::All.find {|f| f.respond_to?("#{type}_standalone") && f.send("#{type}_standalone") == string}) + TonelessSyllable.new(Initial::Empty, final) else - Initial::All.find do |ini| - Final::All.find do |fin| + finals = Final::All.dup + finals.unshift(finals.delete(Final::Uo)) #hack : move Uo to the front + #otherwise wadegiles parses 'lo' as Le+O rather than Le+Uo + #probably better to add a hardcoded 'overrule' table for these cases + Initial::All.each do |ini| + finals.each do |fin| next if TonelessSyllable.illegal?(ini,fin) return TonelessSyllable.new(ini,fin) if apply_rules(type, (ini.send(type)||'') + (fin.send(type)||'')) == string end end end