Bladeren bron

[Locale] inject named capture string into Transformer constructor

Eriksen Costa 14 jaren geleden
bovenliggende
commit
4a7c33ce82

+ 1 - 1
src/Symfony/Component/Locale/Stub/DateFormat/AmPmTransformer.php

@@ -25,7 +25,7 @@ class AmPmTransformer extends Transformer
 
     public function getReverseMatchingRegExp($length)
     {
-        return "?P<a>AM|PM";
+        return $this->addNamedCapture("AM|PM", 1);
     }
 
     public function extractDateOptions($matched, $length)

+ 4 - 2
src/Symfony/Component/Locale/Stub/DateFormat/DayTransformer.php

@@ -26,10 +26,12 @@ class DayTransformer extends Transformer
     public function getReverseMatchingRegExp($length)
     {
         if (1 == $length) {
-            return '?P<d>\d{1,2}';
+            $regExp = '\d{1,2}';
         } else {
-            return '?P<d>\d{'.$length.'}';
+            $regExp = '\d{'.$length.'}';
         }
+
+        return $this->addNamedCapture($regExp, 1);
     }
 
     public function extractDateOptions($matched, $length)

+ 17 - 17
src/Symfony/Component/Locale/Stub/DateFormat/FullTransformer.php

@@ -40,23 +40,23 @@ class FullTransformer
         $this->regExp = "/($this->quoteMatch|$implementedCharsMatch|$notImplementedCharsMatch)/";
 
         $this->transformers = array(
-            'M' => new MonthTransformer(),
-            'L' => new MonthTransformer(),
-            'y' => new YearTransformer(),
-            'd' => new DayTransformer(),
-            'G' => new EraTransformer(),
-            'q' => new QuarterTransformer(),
-            'Q' => new QuarterTransformer(),
-            'h' => new Hour1201Transformer(),
-            'D' => new DayOfYearTransformer(),
-            'E' => new DayOfWeekTransformer(),
-            'a' => new AmPmTransformer(),
-            'H' => new Hour2400Transformer(),
-            'K' => new Hour1200Transformer(),
-            'k' => new Hour2401Transformer(),
-            'm' => new MinuteTransformer(),
-            's' => new SecondTransformer(),
-            'z' => new TimeZoneTransformer(),
+            'M' => new MonthTransformer('M'),
+            'L' => new MonthTransformer('L'),
+            'y' => new YearTransformer('y'),
+            'd' => new DayTransformer('d'),
+            'G' => new EraTransformer('G'),
+            'q' => new QuarterTransformer('q'),
+            'Q' => new QuarterTransformer('Q'),
+            'h' => new Hour1201Transformer('h'),
+            'D' => new DayOfYearTransformer('D'),
+            'E' => new DayOfWeekTransformer('E'),
+            'a' => new AmPmTransformer('a'),
+            'H' => new Hour2400Transformer('H'),
+            'K' => new Hour1200Transformer('K'),
+            'k' => new Hour2401Transformer('k'),
+            'm' => new MinuteTransformer('m'),
+            's' => new SecondTransformer('s'),
+            'z' => new TimeZoneTransformer('z'),
         );
     }
 

+ 1 - 2
src/Symfony/Component/Locale/Stub/DateFormat/Hour1200Transformer.php

@@ -27,8 +27,7 @@ class Hour1200Transformer extends Transformer
 
     public function getReverseMatchingRegExp($length)
     {
-        $capture = str_pad('', $length, 'K');
-        return '?P<'.$capture.'>\d{1,2}';
+        return $this->addNamedCapture('\d{1,2}', $length);
     }
 
     public function extractDateOptions($matched, $length)

+ 1 - 2
src/Symfony/Component/Locale/Stub/DateFormat/Hour1201Transformer.php

@@ -25,8 +25,7 @@ class Hour1201Transformer extends Transformer
 
     public function getReverseMatchingRegExp($length)
     {
-        $capture = str_pad('', $length, 'h');
-        return '?P<'.$capture.'>\d{1,2}';
+        return $this->addNamedCapture('\d{1,2}', $length);
     }
 
     public function extractDateOptions($matched, $length)

+ 1 - 2
src/Symfony/Component/Locale/Stub/DateFormat/Hour2400Transformer.php

@@ -25,8 +25,7 @@ class Hour2400Transformer extends Transformer
 
     public function getReverseMatchingRegExp($length)
     {
-        $capture = str_pad('', $length, 'H');
-        return '?P<'.$capture.'>\d{1,2}';
+        return $this->addNamedCapture('\d{1,2}', $length);
     }
 
     public function extractDateOptions($matched, $length)

+ 1 - 2
src/Symfony/Component/Locale/Stub/DateFormat/Hour2401Transformer.php

@@ -27,8 +27,7 @@ class Hour2401Transformer extends Transformer
 
     public function getReverseMatchingRegExp($length)
     {
-        $capture = str_pad('', $length, 'k');
-        return '?P<'.$capture.'>\d{1,2}';
+        return $this->addNamedCapture('\d{1,2}', $length);
     }
 
     public function extractDateOptions($matched, $length)

+ 10 - 6
src/Symfony/Component/Locale/Stub/DateFormat/MonthTransformer.php

@@ -41,7 +41,7 @@ class MonthTransformer extends Transformer
 
     private static $flippedShortMonths = array();
 
-    public function __construct()
+    public function __construct($namedCapture)
     {
         if (0 == count(self::$shortMonths)) {
             self::$shortMonths = array_map(function($month) {
@@ -51,6 +51,8 @@ class MonthTransformer extends Transformer
             self::$flippedMonths = array_flip(self::$months);
             self::$flippedShortMonths = array_flip(self::$shortMonths);
         }
+
+        parent::__construct($namedCapture);
     }
 
     public function format(\DateTime $dateTime, $length)
@@ -75,21 +77,23 @@ class MonthTransformer extends Transformer
     {
         switch ($length) {
             case 1:
-                return '?P<M>\d{1,2}';
+                $regExp = '\d{1,2}';
                 break;
             case 3:
-                return '?P<MMM>' . implode('|', self::$shortMonths);
+                $regExp = implode('|', self::$shortMonths);
                 break;
             case 4:
-                return '?P<MMMM>' . implode('|', self::$months);
+                $regExp = implode('|', self::$months);
                 break;
             case 5:
-                return '?P<MMMMM>' . '[JFMASOND]';
+                $regExp = '[JFMASOND]';
                 break;
             default:
-                return "\d{$length}";
+                $regExp = '\d{'.$length.'}';
                 break;
         }
+
+        return $this->addNamedCapture($regExp, $length);
     }
 
     public function extractDateOptions($matched, $length)

+ 19 - 0
src/Symfony/Component/Locale/Stub/DateFormat/Transformer.php

@@ -18,6 +18,25 @@ namespace Symfony\Component\Locale\Stub\DateFormat;
  */
 abstract class Transformer
 {
+    protected $namedCapture;
+
+    public function __construct($namedCapture)
+    {
+        $this->namedCapture = $namedCapture;
+    }
+
+    public function getNamedCapture()
+    {
+        return $this->namedCapture;
+    }
+
+    public function addNamedCapture($regExp, $lenght = 1)
+    {
+        $namedCapture = $this->getNamedCapture();
+        $namedCapture = str_repeat($namedCapture, $lenght);
+        return '?P<'.$namedCapture.'>' . $regExp;
+    }
+
     abstract public function format(\DateTime $dateTime, $length);
     abstract public function getReverseMatchingRegExp($length);
     abstract public function extractDateOptions($matched, $length);

+ 7 - 3
src/Symfony/Component/Locale/Stub/DateFormat/YearTransformer.php

@@ -30,11 +30,15 @@ class YearTransformer extends Transformer
     public function getReverseMatchingRegExp($length)
     {
         if (2 == $length) {
-            return '?P<yy>\d{2}';
+            $regExp = '\d{2}';
         } else {
-            $length = $length < 4 ? 4 : $length;
-            return "?P<y>\d{1,$length}";
+            $regExp = '\d{4}';
+
+            // The named capture in this case will be always y (that equals to yyyy)
+            $length = 1;
         }
+
+        return $this->addNamedCapture($regExp, $length);
     }
 
     public function extractDateOptions($matched, $length)