60: def add_token(name, regex, options = {}, &block)
61: token = Token.new(regex, name)
62: raise(ArgumentError, "Token %s already exists" % name) if @tokens.include?(name)
63: @tokens[token.name] = token
64: if token.string
65: @string_tokens << token
66: @tokens_by_string[token.string] = token
67: else
68: @regex_tokens << token
69: end
70:
71: options.each do |name, option|
72: token.send(name.to_s + "=", option)
73: end
74:
75: token.meta_def(:convert, &block) if block_given?
76:
77: token
78: end