39 lines
989 B
Ruby
39 lines
989 B
Ruby
require 'syntax/common'
|
|
|
|
module Syntax
|
|
|
|
# A default tokenizer for handling syntaxes that are not explicitly handled
|
|
# elsewhere. It simply yields the given text as a single token.
|
|
class Default
|
|
|
|
# Yield the given text as a single token.
|
|
def tokenize( text )
|
|
yield Token.new( text, :normal )
|
|
end
|
|
|
|
end
|
|
|
|
# A hash for registering syntax implementations.
|
|
SYNTAX = Hash.new( Default )
|
|
|
|
# Load the implementation of the requested syntax. If the syntax cannot be
|
|
# found, or if it cannot be loaded for whatever reason, the Default syntax
|
|
# handler will be returned.
|
|
def load( syntax )
|
|
begin
|
|
require "syntax/lang/#{syntax}"
|
|
rescue LoadError
|
|
end
|
|
SYNTAX[ syntax ].new
|
|
end
|
|
module_function :load
|
|
|
|
# Return an array of the names of supported syntaxes.
|
|
def all
|
|
lang_dir = File.join(File.dirname(__FILE__), "syntax", "lang")
|
|
Dir["#{lang_dir}/*.rb"].map { |path| File.basename(path, ".rb") }
|
|
end
|
|
module_function :all
|
|
|
|
end
|