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