From 4e37dc09638e92f509d8de6663fc16e6f0962e5b Mon Sep 17 00:00:00 2001 From: Chuck Hagenbuch Date: Wed, 28 Jan 2009 16:49:31 -0500 Subject: [PATCH] initial handler port --- .../Date_Parser/lib/Horde/Date/Parser/Handler.php | 69 ++++++++++++---------- 1 file changed, 38 insertions(+), 31 deletions(-) diff --git a/framework/Date_Parser/lib/Horde/Date/Parser/Handler.php b/framework/Date_Parser/lib/Horde/Date/Parser/Handler.php index d050197d8..179f64693 100644 --- a/framework/Date_Parser/lib/Horde/Date/Parser/Handler.php +++ b/framework/Date_Parser/lib/Horde/Date/Parser/Handler.php @@ -1,24 +1,23 @@ -module Chronic +pattern = $pattern; + $this->handlerMethod = $handlerMethod; + } - def initialize(pattern, handler_method) - @pattern = pattern - @handler_method = handler_method - end - - def constantize(name) - camel = name.to_s.gsub(/(^|_)(.)/) { $2.upcase } - ::Chronic.module_eval(camel, __FILE__, __LINE__) - end - - def match(tokens, definitions) - token_index = 0 - @pattern.each do |element| - name = element.to_s - optional = name.reverse[0..0] == '?' - name = name.chop if optional + public function match($tokens, $definitions) + { + $tokenIndex = 0; + foreach ($this->pattern as $element) { + $name = (string)$element; + $optional = substr($name, -1) == '?'; + if ($optional) { $name = rtrim($name, '?'); } + /* if element.instance_of? Symbol klass = constantize(name) match = tokens[token_index] && !tokens[token_index].tags.select { |o| o.kind_of?(klass) }.empty? @@ -26,19 +25,27 @@ module Chronic (token_index += 1; next) if match next if !match && optional elsif element.instance_of? String - return true if optional && token_index == tokens.size - sub_handlers = definitions[name.intern] || raise(ChronicPain, "Invalid subset #{name} specified") - sub_handlers.each do |sub_handler| - return true if sub_handler.match(tokens[token_index..tokens.size], definitions) - end - return false + */ + if ($optional && $tokenIndex == count($tokens)) { return true; } + if (!isset($definitions[$name])) { + throw new Horde_Date_Parser_Exception("Invalid subset $name specified"); + } + $subHandlers = $definitions[$name]; + foreach ($subHandlers as $subHandler) { + if ($subHandler->match(array_slice($tokens, $tokenIndex), $definitions)) { + return true; + } + } + return false; + /* else raise(ChronicPain, "Invalid match type: #{element.class}") end - end - return false if token_index != tokens.size - return true - end - end + */ + } + + if ($tokenIndex != count($tokens)) { return false; } + return true; + } -end \ No newline at end of file +} -- 2.11.0