290 | | $this->pluralheader = $expr; |
| 290 | |
| 291 | // sanitize |
| 292 | $expr = preg_replace( |
| 293 | '@[^a-zA-Z0-9_:;\(\)\?\|\&=!<>+*/\%-]@', |
| 294 | '', |
| 295 | $expr |
| 296 | ); |
| 297 | |
| 298 | // add parens |
| 299 | // important since PHP's ternary evaluates from left to right |
| 300 | $expr.= ';'; |
| 301 | $res= ''; |
| 302 | $p= 0; |
| 303 | for ($i= 0; $i < strlen($expr); $i++) { |
| 304 | $ch= $expr[$i]; |
| 305 | switch ($ch) { |
| 306 | case '?': |
| 307 | $res.= ' ? ('; |
| 308 | $p++; |
| 309 | break; |
| 310 | case ':': |
| 311 | $res.= ') : ('; |
| 312 | break; |
| 313 | case ';': |
| 314 | $res.= str_repeat( ')', $p) . ';'; |
| 315 | $p= 0; |
| 316 | break; |
| 317 | default: |
| 318 | $res.= $ch; |
| 319 | } |
| 320 | } |
| 321 | |
| 322 | $this->pluralheader = $res; |