port the smaller scanners
authorChuck Hagenbuch <chuck@horde.org>
Wed, 28 Jan 2009 17:22:55 +0000 (12:22 -0500)
committerChuck Hagenbuch <chuck@horde.org>
Wed, 28 Jan 2009 22:13:38 +0000 (17:13 -0500)
framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Grabber.php
framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Ordinal.php
framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/OrdinalDay.php [new file with mode: 0644]
framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Pointer.php
framework/Date_Parser/lib/Horde/Date/Parser/Locale/Base/Timezone.php

index 4162a26..3ef4770 100644 (file)
@@ -1,26 +1,38 @@
-#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;
+    }
+
+}
index 45b8148..b98aacc 100644 (file)
@@ -1,40 +1,45 @@
-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';
+    }
+
+}
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 (file)
index 0000000..8cf8626
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+class Horde_Date_Parser_Locale_Base_OrdinalDay extends Horde_Date_Parser_Locale_Base_Ordinal
+{
+    public function __toString()
+    {
+        return parent::__toString() . '-day-' . $this->type;
+    }
+
+}
index 224efaf..f902efc 100644 (file)
@@ -1,27 +1,35 @@
-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;
+    }
+
+}
index 41041ef..b3429f4 100644 (file)
@@ -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
+<?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';
+    }
+
+}