lib/textpow.rb in textpow1x-1.1.0 vs lib/textpow.rb in textpow1x-1.2.0

- old
+ new

@@ -9,7 +9,42 @@ class ParsingError < Exception; end def self.syntax_path File.join(File.dirname(__FILE__), 'textpow', 'syntax') end + + @@syntax = {} + def self.syntax(syntax_name) + syntax_name = syntax_name.downcase + if @@syntax.has_key?(syntax_name) + @@syntax[syntax_name] + else + @@syntax[syntax_name] = uncached_syntax(syntax_name) + end + end + +private + + def self.uncached_syntax(name) + path = ( + find_syntax_by_path(name) || + find_syntax_by_scope_name(name) || + find_syntax_by_fuzzy_name(name) + ) + SyntaxNode.load(path) if path + end + + def self.find_syntax_by_scope_name(name) + path = File.join(syntax_path, "#{name}.syntax") + path if File.exist?(path) + end + + def self.find_syntax_by_fuzzy_name(name) + path = Dir.glob(File.join(syntax_path, "*.#{name}.*")).sort_by(&:size).first + path if path and File.exist?(path) + end + + def self.find_syntax_by_path(path) + path if File.exist?(path) + end end