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