Development

/branches/1.2/lib/i18n/extract/sfI18nPhpExtractor.class.php

You must first sign up to be able to contribute.

root/branches/1.2/lib/i18n/extract/sfI18nPhpExtractor.class.php

Revision 9128, 2.3 kB (checked in by Carl.Vondrick, 7 years ago)

1.1: fixed @param phpdoc to fit specs in i18n (refs #2991)

  • Property svn:mime-type set to text/x-php
  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
Line 
1 <?php
2
3 /*
4  * This file is part of the symfony package.
5  * (c) Fabien Potencier <fabien.potencier@symfony-project.com>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 /**
12  * @package    symfony
13  * @subpackage i18n
14  * @author     Fabien Potencier <fabien.potencier@symfony-project.com>
15  * @version    SVN: $Id$
16  */
17 class sfI18nPhpExtractor implements sfI18nExtractorInterface
18 {
19   /**
20    * Extract i18n strings for the given content.
21    *
22    * @param  string $content The content
23    *
24    * @return array An array of i18n strings
25    */
26   public function extract($content)
27   {
28     $tokens = token_get_all($content);
29
30     $strings = array();
31     $i18n_function = 0;
32     $line = 0;
33     $heredoc = false;
34     $buffer = '';
35     foreach ($tokens as $token)
36     {
37       if (is_string($token))
38       {
39         switch ($token)
40         {
41           case '(':
42             if (1 == $i18n_function)
43             {
44               $i18n_function = 2;
45             }
46
47             break;
48           default:
49             $i18n_function = 0;
50         }
51       }
52       else
53       {
54         list($id, $text) = $token;
55
56         switch ($id)
57         {
58           case T_STRING:
59             if ($heredoc && 2 == $i18n_function)
60             {
61               $buffer .= $text;
62             }
63             else
64             {
65               $i18n_function = ('__' == $text || 'format_number_choice' == $text) ? 1 : 0;
66             }
67             break;
68           case T_WHITESPACE:
69             break;
70           case T_START_HEREDOC:
71             $heredoc = true;
72             break;
73           case T_END_HEREDOC:
74             $heredoc = false;
75             if ($buffer)
76             {
77               $strings[] = $buffer;
78             }
79             $i18n_function = 0;
80             break;
81           case T_CONSTANT_ENCAPSED_STRING:
82             if (2 == $i18n_function)
83             {
84               $delimiter = $text[0];
85               $strings[] = str_replace('\\'.$delimiter, $delimiter, substr($text, 1, -1));
86             }
87             $i18n_function = 0;
88             break;
89           default:
90             if ($heredoc && 2 == $i18n_function)
91             {
92               $buffer .= $text;
93             }
94             else
95             {
96               $i18n_function = 0;
97             }
98         }
99       }
100     }
101
102     return $strings;
103   }
104 }
105
Note: See TracBrowser for help on using the browser.