-#module Chronic
+<?php
+class Horde_Date_Parser_Locale_Base_Grabber extends Horde_Date_Parser_Tag
+{
+ /**
+ * Regex tokens
+ */
+ public $scanner = array(
+ '/last/' => '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;
+ }
+
+}
-module Chronic
+<?php
+class Horde_Date_Parser_Locale_Base_Ordinal extends Horde_Date_Parser_Tag
+{
+ public $ordinalRegex = '/^(\d*)(st|nd|rd|th)$/';
+ public $ordinalDayRegex = '/^(\d*)(st|nd|rd|th)$/';
- class Ordinal < Tag #:nodoc:
- def self.scan(tokens)
- # for each token
- tokens.each_index do |i|
- if t = self.scan_for_ordinals(tokens[i]) then tokens[i].tag(t) end
- if t = self.scan_for_days(tokens[i]) then tokens[i].tag(t) end
- end
- tokens
- end
-
- def self.scan_for_ordinals(token)
- if token.word =~ /^(\d*)(st|nd|rd|th)$/
- return Ordinal.new($1.to_i)
- end
- return nil
- end
-
- def self.scan_for_days(token)
- if token.word =~ /^(\d*)(st|nd|rd|th)$/
- unless $1.to_i > 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';
+ }
+
+}
--- /dev/null
+<?php
+class Horde_Date_Parser_Locale_Base_OrdinalDay extends Horde_Date_Parser_Locale_Base_Ordinal
+{
+ public function __toString()
+ {
+ return parent::__toString() . '-day-' . $this->type;
+ }
+
+}
-module Chronic
+<?php
+class Horde_Date_Parser_Locale_Base_Pointer extends Horde_Date_Parser_Tag
+{
+ public $scanner = array(
+ '/\bpast\b/' => '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;
+ }
+
+}
-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
+<?php
+class Horde_Date_Parser_Locale_Base_Timezone extends Horde_Date_Parser_Tag
+{
+ public $scanner = array(
+ '/[PMCE][DS]T/i' => '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';
+ }
+
+}