Small optimization in sieve script parser
| | |
| | | { |
| | | $result = array(); |
| | | $length = strlen($str); |
| | | $mask = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:_'; |
| | | |
| | | // remove spaces from the beginning of the string |
| | | while ($position < $length && (!$num || $num === true || count($result) < $num)) { |
| | |
| | | if ($position == $length) { |
| | | break 2; |
| | | } |
| | | if ($length - $position < 2) { |
| | | $result[] = substr($str, $position); |
| | | $position = $length; |
| | | break; |
| | | } |
| | | |
| | | // tag/identifier/number |
| | | if (preg_match('/[a-zA-Z0-9:_]+/', $str, $m, PREG_OFFSET_CAPTURE, $position) |
| | | && $m[0][1] == $position |
| | | ) { |
| | | $atom = $m[0][0]; |
| | | $position += strlen($atom); |
| | | if ($len = strspn($str, $mask, $position)) { |
| | | $atom = substr($str, $position, $len); |
| | | $position += $len; |
| | | |
| | | if ($atom != 'text:') { |
| | | $result[] = $atom; |