From 8c558ffeb993ff93390fbfa6c489cad63807af18 Mon Sep 17 00:00:00 2001 From: Chuck Hagenbuch Date: Wed, 28 Jan 2009 12:22:55 -0500 Subject: [PATCH] port the smaller scanners --- .../lib/Horde/Date/Parser/Locale/Base/Grabber.php | 60 +++++++++------- .../lib/Horde/Date/Parser/Locale/Base/Ordinal.php | 81 ++++++++++++---------- .../Horde/Date/Parser/Locale/Base/OrdinalDay.php | 9 +++ .../lib/Horde/Date/Parser/Locale/Base/Pointer.php | 58 +++++++++------- .../lib/Horde/Date/Parser/Locale/Base/Timezone.php | 51 ++++++++------ 5 files changed, 152 insertions(+), 107 deletions(-) create mode 100644 framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/OrdinalDay.php diff --git a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Grabber.php b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Grabber.php index 4162a260b..3ef477077 100644 --- a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Grabber.php +++ b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Grabber.php @@ -1,26 +1,38 @@ -#module Chronic + 'last', + '/this/' => 'this', + '/next/' => 'next', + ); - class Chronic::Grabber < Chronic::Tag #:nodoc: - def self.scan(tokens) - tokens.each_index do |i| - if t = self.scan_for_all(tokens[i]) then tokens[i].tag(t); next end - end - tokens - end - - def self.scan_for_all(token) - scanner = {/last/ => :last, - /this/ => :this, - /next/ => :next} - scanner.keys.each do |scanner_item| - return self.new(scanner[scanner_item]) if scanner_item =~ token.word - end - return nil - end - - def to_s - 'grabber-' << @type.to_s - end - end + public function scan($tokens) + { + foreach ($tokens as &$token) { + if ($t = $this->scanForAll($token)) { + $token->tag($t); + } + } + return $tokens; + } -#end \ No newline at end of file + public function scanForAll($token) + { + foreach ($this->scanner as $scannerItem => $scannerTag) { + if (preg_match($scannerItem, $token->word)) { + return new self($scannerTag); + } + } + return null; + } + + public function __toString() + { + return 'grabber-' . $this->type; + } + +} diff --git a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Ordinal.php b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Ordinal.php index 45b8148e4..b98aacc62 100644 --- a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Ordinal.php +++ b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Ordinal.php @@ -1,40 +1,45 @@ -module Chronic + 31 - return OrdinalDay.new(token.word.to_i) - end - end - return nil - end - - def to_s - 'ordinal' - end - end - - class OrdinalDay < Ordinal #:nodoc: - def to_s - super << '-day-' << @type.to_s - end - end + public function scan($tokens) + { + foreach ($tokens as &$token) { + if ($t = $this->scanForOrdinals($token)) { + $token->tag($t); + } + if ($t = $this->scanForDays($token)) { + $token->tag($t); + } + } -end \ No newline at end of file + return $tokens; + } + + public function scanForOrdinals($token) + { + if (preg_match($this->ordinalRegex, $token->word, $matches)) { + return new self((int)$matches[1]); + } + return null; + } + + public function scanForDays($token) + { + if (preg_match($this->ordinalDayRegex, $token->word, $matches)) { + if ($matches[1] <= 31) { + /* @TODO FIXME - hardcoded class name */ + return new Horde_Date_Parser_Locale_Base_OrdinalDay((int)$m[1]); + } + } + return null; + } + + public function __toString() + { + return 'ordinal'; + } + +} diff --git a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/OrdinalDay.php b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/OrdinalDay.php new file mode 100644 index 000000000..8cf8626b3 --- /dev/null +++ b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/OrdinalDay.php @@ -0,0 +1,9 @@ +type; + } + +} diff --git a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Pointer.php b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Pointer.php index 224efaf96..f902efca2 100644 --- a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Pointer.php +++ b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Pointer.php @@ -1,27 +1,35 @@ -module Chronic + 'past', + '/\bfuture\b/' => 'future', + '/\bin\b/' => 'future', + ); - class Pointer < Tag #:nodoc: - def self.scan(tokens) - # for each token - tokens.each_index do |i| - if t = self.scan_for_all(tokens[i]) then tokens[i].tag(t) end - end - tokens - end - - def self.scan_for_all(token) - scanner = {/\bpast\b/ => :past, - /\bfuture\b/ => :future, - /\bin\b/ => :future} - scanner.keys.each do |scanner_item| - return self.new(scanner[scanner_item]) if scanner_item =~ token.word - end - return nil - end - - def to_s - 'pointer-' << @type.to_s - end - end + public function scan($tokens) + { + foreach ($tokens as &$token) { + if ($t = $this->scanForAll($token)) { + $token->tag($t); + } + } + return $tokens; + } -end \ No newline at end of file + public function scanForAll($token) + { + foreach ($this->scanner as $scannerItem => $scannerTag) { + if (preg_match($scannerItem, $token->word)) { + return new self($scannerTag); + } + } + return null; + } + + public function __toString() + { + return 'pointer-' . $this->type; + } + +} diff --git a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Timezone.php b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Timezone.php index 41041ef47..b3429f433 100644 --- a/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Timezone.php +++ b/framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Timezone.php @@ -1,22 +1,33 @@ -module Chronic - class TimeZone < Tag #:nodoc: - def self.scan(tokens) - tokens.each_index do |i| - if t = self.scan_for_all(tokens[i]) then tokens[i].tag(t); next end - end - tokens - end + 'tz', + ); - def self.scan_for_all(token) - scanner = {/[PMCE][DS]T/i => :tz} - scanner.keys.each do |scanner_item| - return self.new(scanner[scanner_item]) if scanner_item =~ token.word - end - return nil - end + public function scan($tokens) + { + foreach ($tokens as &$token) { + if ($t = $this->scanForAll($token)) { + $token->tag($t); + } + } + return $tokens; + } - def to_s - 'timezone' - end - end -end \ No newline at end of file + public function scanForAll($token) + { + foreach ($this->scanner as $scannerItem => $scannerTag) { + if (preg_match($scannerItem, $token->word)) { + return new self($scannerTag); + } + } + return null; + } + + public function __toString() + { + return 'timezone'; + } + +} -- 2.11.0