0
-dirname = File.join(File.dirname(__FILE__), 'keyword_search')
0
-%w|grammar parser tokenizer evaluator definition|.each do |dependency|
0
- require File.join(dirname, dependency)
0
+# line 1 "lib/keyword_search.rl"
0
+require File.dirname(__FILE__) << '/keyword_search/definition.rb'
0
- class ParseError < ::SyntaxError; end
0
+ class ParseError < ::SyntaxError; end
0
+ # line 44 "lib/keyword_search.rl"
0
def search(input_string, definition=nil, &block)
0
- @evaluator ||= Evaluator.new
0
definition ||= Definition.new(&block)
0
- parse_result = Parser.parse(Tokenizer.tokenize(input_string))
0
- unless parse_result.has_error?
0
- results = @evaluator.evaluate(parse_result.parse_tree)
0
- results.each do |key, terms|
0
- definition.handle(key, terms)
0
- raise ParseError, "Unexpected token #{parse_result.unexpected_token.inspect}"
0
+ results = parse(input_string)
0
+ results.each do |key, terms|
0
+ definition.handle(key, terms)
0
+ def parse(input) #:nodoc:
0
+# line 30 "lib/keyword_search.rb"
0
+ attr_accessor :_parser_actions
0
+ private :_parser_actions, :_parser_actions=
0
+self._parser_actions = [
0
+ 0, 1, 3, 1, 4, 2, 0, 2,
0
+ attr_accessor :_parser_key_offsets
0
+ private :_parser_key_offsets, :_parser_key_offsets=
0
+self._parser_key_offsets = [
0
+ 0, 0, 5, 8, 12, 15, 16, 17,
0
+ attr_accessor :_parser_trans_keys
0
+ private :_parser_trans_keys, :_parser_trans_keys=
0
+self._parser_trans_keys = [
0
+ 0, 32, 34, 39, 58, 32, 34, 58,
0
+ 32, 34, 39, 58, 32, 34, 58, 34,
0
+ attr_accessor :_parser_single_lengths
0
+ private :_parser_single_lengths, :_parser_single_lengths=
0
+self._parser_single_lengths = [
0
+ 0, 5, 3, 4, 3, 1, 1, 1,
0
+ attr_accessor :_parser_range_lengths
0
+ private :_parser_range_lengths, :_parser_range_lengths=
0
+self._parser_range_lengths = [
0
+ 0, 0, 0, 0, 0, 0, 0, 0,
0
+ attr_accessor :_parser_index_offsets
0
+ private :_parser_index_offsets, :_parser_index_offsets=
0
+self._parser_index_offsets = [
0
+ 0, 0, 6, 10, 15, 19, 21, 23,
0
+ attr_accessor :_parser_trans_targs_wi
0
+ private :_parser_trans_targs_wi, :_parser_trans_targs_wi=
0
+self._parser_trans_targs_wi = [
0
+ 8, 0, 5, 7, 0, 2, 1, 0,
0
+ 3, 2, 0, 5, 7, 0, 4, 1,
0
+ 0, 0, 4, 6, 5, 1, 0, 6,
0
+ attr_accessor :_parser_trans_actions_wi
0
+ private :_parser_trans_actions_wi, :_parser_trans_actions_wi=
0
+self._parser_trans_actions_wi = [
0
+ 5, 3, 5, 5, 3, 5, 1, 0,
0
+ 0, 0, 0, 8, 8, 0, 8, 1,
0
+ 0, 0, 0, 0, 0, 1, 0, 0,
0
+ attr_accessor :parser_start
0
+ attr_accessor :parser_first_final
0
+self.parser_first_final = 8;
0
+ attr_accessor :parser_error
0
+ attr_accessor :parser_en_main
0
+self.parser_en_main = 1;
0
+# line 62 "lib/keyword_search.rl"
0
+# line 133 "lib/keyword_search.rb"
0
+# line 68 "lib/keyword_search.rl"
0
+# line 141 "lib/keyword_search.rb"
0
+ _klen, _trans, _keys, _acts, _nacts = nil
0
+ _keys = _parser_key_offsets[cs]
0
+ _trans = _parser_index_offsets[cs]
0
+ _klen = _parser_single_lengths[cs]
0
+ _upper = _keys + _klen - 1
0
+ break if _upper < _lower
0
+ _mid = _lower + ( (_upper - _lower) >> 1 )
0
+ if data[p] < _parser_trans_keys[_mid]
0
+ elsif data[p] > _parser_trans_keys[_mid]
0
+ _trans += (_mid - _keys)
0
+ _klen = _parser_range_lengths[cs]
0
+ _upper = _keys + (_klen << 1) - 2
0
+ break if _upper < _lower
0
+ _mid = _lower + (((_upper-_lower) >> 1) & ~1)
0
+ if data[p] < _parser_trans_keys[_mid]
0
+ elsif data[p] > _parser_trans_keys[_mid+1]
0
+ _trans += ((_mid - _keys) >> 1)
0
+ cs = _parser_trans_targs_wi[_trans]
0
+ break if _parser_trans_actions_wi[_trans] == 0
0
+ _acts = _parser_trans_actions_wi[_trans]
0
+ _nacts = _parser_actions[_acts]
0
+ case _parser_actions[_acts - 1]
0
+# line 13 "lib/keyword_search.rl"
0
+# line 13 "lib/keyword_search.rl"
0
+# line 17 "lib/keyword_search.rl"
0
+ key = data[tokstart...p-1]
0
+# line 17 "lib/keyword_search.rl"
0
+# line 22 "lib/keyword_search.rl"
0
+# line 22 "lib/keyword_search.rl"
0
+# line 26 "lib/keyword_search.rl"
0
+ value = data[tokstart..p-1]
0
+ value = value[1..-2] if ["'", '"'].include?(value[0,1])
0
+ (results[key || :default] ||= []) << value
0
+# line 26 "lib/keyword_search.rl"
0
+# line 42 "lib/keyword_search.rl"
0
+ raise ParseError, "At offset #{p}, near: '#{data[p,10]}'" end
0
+# line 42 "lib/keyword_search.rl"
0
+# line 244 "lib/keyword_search.rb"
0
+ break if _break_resume
0
+# line 69 "lib/keyword_search.rl"
0
+# line 258 "lib/keyword_search.rb"
0
+# line 70 "lib/keyword_search.rl"
0
\ No newline at end of file
Comments
No one has commented yet.