compile.parse_is_expr.php 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. /**
  3. * Template Lite compile IS exprenssion in IF tag - template internal module
  4. *
  5. * Type: template
  6. * Name: compile_parse_is_expr
  7. */
  8. function compile_parse_is_expr($is_arg, $_args, &$object)
  9. {
  10. $expr_end = 0;
  11. $negate_expr = false;
  12. if (($first_arg = array_shift($_args)) == 'not') {
  13. $negate_expr = true;
  14. $expr_type = array_shift($_args);
  15. }
  16. else
  17. {
  18. $expr_type = $first_arg;
  19. }
  20. switch ($expr_type) {
  21. case 'even':
  22. if (isset($_args[$expr_end]) && $_args[$expr_end] == 'by')
  23. {
  24. $expr_end++;
  25. $expr_arg = $_args[$expr_end++];
  26. $expr = "!(1 & ($is_arg / " . $object->_parse_variable($expr_arg) . "))";
  27. }
  28. else
  29. {
  30. $expr = "!(1 & $is_arg)";
  31. }
  32. break;
  33. case 'odd':
  34. if (isset($_args[$expr_end]) && $_args[$expr_end] == 'by')
  35. {
  36. $expr_end++;
  37. $expr_arg = $_args[$expr_end++];
  38. $expr = "(1 & ($is_arg / " . $object->_parse_variable($expr_arg) . "))";
  39. }
  40. else
  41. {
  42. $expr = "(1 & $is_arg)";
  43. }
  44. break;
  45. case 'div':
  46. if (@$_args[$expr_end] == 'by')
  47. {
  48. $expr_end++;
  49. $expr_arg = $_args[$expr_end++];
  50. $expr = "!($is_arg % " . $object->_parse_variable($expr_arg) . ")";
  51. }
  52. else
  53. {
  54. $object->trigger_error("expecting 'by' after 'div'", E_USER_ERROR, __FILE__, __LINE__);
  55. }
  56. break;
  57. default:
  58. $object->trigger_error("unknown 'is' expression - '$expr_type'", E_USER_ERROR, __FILE__, __LINE__);
  59. break;
  60. }
  61. if ($negate_expr) {
  62. $expr = "!($expr)";
  63. }
  64. array_splice($_args, 0, $expr_end, $expr);
  65. return $_args;
  66. }
  67. ?>