Coverage for Doctrine_Tokenizer

Back to coverage report

1 <?php
2 /*
3  *  $Id: From.php 1080 2007-02-10 18:17:08Z romanb $
4  *
5  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
6  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
7  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
8  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
9  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
10  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
11  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
12  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
13  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
14  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
15  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
16  *
17  * This software consists of voluntary contributions made by many individuals
18  * and is licensed under the LGPL. For more information, see
19  * <http://www.phpdoctrine.com>.
20  */
21
22 /**
23  * Doctrine_Tokenizer
24  *
25  * @package     Doctrine
26  * @subpackage  Tokenizer
27  * @license     http://www.opensource.org/licenses/lgpl-license.php LGPL
28  * @link        www.phpdoctrine.com
29  * @since       1.0
30  * @version     $Revision: 1080 $
31  * @author      Konsta Vesterinen <kvesteri@cc.hut.fi>
32  */
33 class Doctrine_Tokenizer 
34 {
35     public function __construct() 
36     {
37         
38     }
39     public function tokenize() 
40     {
41
42     }
43
44     /**
45      * trims brackets
46      *
47      * @param string $str
48      * @param string $e1        the first bracket, usually '('
49      * @param string $e2        the second bracket, usually ')'
50      */
51     public static function bracketTrim($str, $e1 = '(', $e2 = ')')
52     {
53         if (substr($str, 0, 1) === $e1 && substr($str, -1) === $e2) {
54             return substr($str, 1, -1);
55         } else {
56             return $str;
57         }
58     }
59
60     /**
61      * bracketExplode
62      *
63      * example:
64      *
65      * parameters:
66      *      $str = (age < 20 AND age > 18) AND email LIKE 'John@example.com'
67      *      $d = ' AND '
68      *      $e1 = '('
69      *      $e2 = ')'
70      *
71      * would return an array:
72      *      array("(age < 20 AND age > 18)",
73      *            "email LIKE 'John@example.com'")
74      *
75      * @param string $str
76      * @param string $d         the delimeter which explodes the string
77      * @param string $e1        the first bracket, usually '('
78      * @param string $e2        the second bracket, usually ')'
79      *
80      */
81     public static function bracketExplode($str, $d = ' ', $e1 = '(', $e2 = ')')
82     {
83         if (is_array($d)) {
84             $a = preg_split('/('.implode('|', $d).')/', $str);
85             $d = stripslashes($d[0]);
86         } else {
87             $a = explode($d, $str);
88         }
89
90         $i = 0;
91         $term = array();
92         foreach($a as $key=>$val) {
93             if (empty($term[$i])) {
94                 $term[$i] = trim($val);
95                 $s1 = substr_count($term[$i], $e1);
96                 $s2 = substr_count($term[$i], $e2);
97                 
98                 if ($s1 == $s2) {
99                     $i++;
100                 }
101             } else {
102                 $term[$i] .= $d . trim($val);
103                 $c1 = substr_count($term[$i], $e1);
104                 $c2 = substr_count($term[$i], $e2);
105                 
106                 if ($c1 == $c2) { 
107                     $i++;
108                 }
109             }
110         }
111         return $term;
112     }
113
114     /**
115      * quoteExplode
116      *
117      * example:
118      *
119      * parameters:
120      *      $str = email LIKE 'John@example.com'
121      *      $d = ' AND '
122      *
123      * would return an array:
124      *      array("email", "LIKE", "'John@example.com'")
125      *
126      * @param string $str
127      * @param string $d         the delimeter which explodes the string
128      */
129     public static function quoteExplode($str, $d = ' ')
130     {
131         if (is_array($d)) {
132             $a = preg_split('/('.implode('|', $d).')/', $str);
133             $d = stripslashes($d[0]);
134         } else {
135             $a = explode($d, $str);
136         }
137
138         $i = 0;
139         $term = array();
140         foreach ($a as $key => $val) {
141             if (empty($term[$i])) {
142                 $term[$i] = trim($val);
143
144                 if ( ! (substr_count($term[$i], "'") & 1)) {
145                     $i++;
146                 }
147             } else {
148                 $term[$i] .= $d . trim($val);
149
150                 if ( ! (substr_count($term[$i], "'") & 1)) {
151                     $i++;
152                 }
153             }
154         }
155         return $term;
156     }
157
158     /**
159      * sqlExplode
160      *
161      * explodes a string into array using custom brackets and
162      * quote delimeters
163      *
164      *
165      * example:
166      *
167      * parameters:
168      *      $str = "(age < 20 AND age > 18) AND name LIKE 'John Doe'"
169      *      $d   = ' '
170      *      $e1  = '('
171      *      $e2  = ')'
172      *
173      * would return an array:
174      *      array('(age < 20 AND age > 18)',
175      *            'name',
176      *            'LIKE',
177      *            'John Doe')
178      *
179      * @param string $str
180      * @param string $d         the delimeter which explodes the string
181      * @param string $e1        the first bracket, usually '('
182      * @param string $e2        the second bracket, usually ')'
183      *
184      * @return array
185      */
186     public static function sqlExplode($str, $d = ' ', $e1 = '(', $e2 = ')')
187     {
188         if ($d == ' ') {
189             $d = array(' ', '\s');
190         }
191         if (is_array($d)) {
192             $d = array_map('preg_quote', $d);
193
194             if (in_array(' ', $d)) {
195                 $d[] = '\s';
196             }
197
198             $split = '§(' . implode('|', $d) . ')§';
199
200             $str = preg_split($split, $str);
201             $d = stripslashes($d[0]);
202         } else {
203             $str = explode($d, $str);
204         }
205
206         $i = 0;
207         $term = array();
208
209         foreach ($str as $key => $val) {
210             if (empty($term[$i])) {
211                 $term[$i] = trim($val);
212
213                 $s1 = substr_count($term[$i], $e1);
214                 $s2 = substr_count($term[$i], $e2);
215
216                 if (strpos($term[$i], '(') !== false) {
217                     if ($s1 == $s2) {
218                         $i++;
219                     }
220                 } else {
221                     if ( ! (substr_count($term[$i], "'") & 1) &&
222                          ! (substr_count($term[$i], "\"") & 1)) {
223                         $i++;
224                     }
225                 }
226             } else {
227                 $term[$i] .= $d . trim($val);
228                 $c1 = substr_count($term[$i], $e1);
229                 $c2 = substr_count($term[$i], $e2);
230
231                 if (strpos($term[$i], '(') !== false) {
232                     if ($c1 == $c2) {
233                         $i++;
234                     }
235                 } else {
236                     if ( ! (substr_count($term[$i], "'") & 1) &&
237                          ! (substr_count($term[$i], "\"") & 1)) {
238                         $i++;
239                     }
240                 }
241             }
242         }
243         return $term;
244     }
245
246     /**
247      * clauseExplode
248      *
249      * explodes a string into array using custom brackets and
250      * quote delimeters
251      *
252      *
253      * example:
254      *
255      * parameters:
256      *      $str = "(age < 20 AND age > 18) AND name LIKE 'John Doe'"
257      *      $d   = ' '
258      *      $e1  = '('
259      *      $e2  = ')'
260      *
261      * would return an array:
262      *      array('(age < 20 AND age > 18)',
263      *            'name',
264      *            'LIKE',
265      *            'John Doe')
266      *
267      * @param string $str
268      * @param string $d         the delimeter which explodes the string
269      * @param string $e1        the first bracket, usually '('
270      * @param string $e2        the second bracket, usually ')'
271      *
272      * @return array
273      */
274     public static function clauseExplode($str, array $d, $e1 = '(', $e2 = ')')
275     {
276         if (is_array($d)) {
277             $d = array_map('preg_quote', $d);
278
279             if (in_array(' ', $d)) {
280                 $d[] = '\s';
281             }
282
283             $split = '§(' . implode('|', $d) . ')§';
284
285             $str = preg_split($split, $str, -1, PREG_SPLIT_DELIM_CAPTURE);
286         }
287
288         $i = 0;
289         $term = array();
290
291         foreach ($str as $key => $val) {
292             if ($key & 1) {
293                 if (isset($term[($i - 1)]) && ! is_array($term[($i - 1)])) {
294                     $term[($i - 1)] = array($term[($i - 1)], $val);
295                 }
296                 continue;
297             }
298             if (empty($term[$i])) {
299                 $term[$i] = $val;
300             } else {
301                 $term[$i] .= $str[($key - 1)] . $val;
302             }
303
304             $c1 = substr_count($term[$i], $e1);
305             $c2 = substr_count($term[$i], $e2);
306
307             if (strpos($term[$i], '(') !== false) {
308                 if ($c1 == $c2) {
309                     $i++;
310                 }
311             } else {
312                 if ( ! (substr_count($term[$i], "'") & 1) &&
313                      ! (substr_count($term[$i], "\"") & 1)) {
314                     $i++;
315                 }
316             }
317         }
318         $term[$i - 1] = array($term[$i - 1], '');
319
320         return $term;
321     }
322 }