<?php
/**
 * Template Lite compile IS exprenssion in IF tag - template internal module
 *
 * Type:	 template
 * Name:	 compile_parse_is_expr
 */

function compile_parse_is_expr($is_arg, $_args, &$object)
{
	$expr_end = 0;
	$negate_expr = false;

	if (($first_arg = array_shift($_args)) == 'not') {
		$negate_expr = true;
		$expr_type = array_shift($_args);
	}
	else
	{
		$expr_type = $first_arg;
	}

	switch ($expr_type) {
		case 'even':
			if (isset($_args[$expr_end]) && $_args[$expr_end] == 'by')
			{
				$expr_end++;
				$expr_arg = $_args[$expr_end++];
				$expr = "!(1 & ($is_arg / " . $object->_parse_variable($expr_arg) . "))";
			}
			else
			{
				$expr = "!(1 & $is_arg)";
			}
			break;

		case 'odd':
			if (isset($_args[$expr_end]) && $_args[$expr_end] == 'by')
			{
				$expr_end++;
				$expr_arg = $_args[$expr_end++];
				$expr = "(1 & ($is_arg / " . $object->_parse_variable($expr_arg) . "))";
				}
				else
				{
					$expr = "(1 & $is_arg)";
				}
				break;

			case 'div':
				if (@$_args[$expr_end] == 'by')
				{
					$expr_end++;
					$expr_arg = $_args[$expr_end++];
					$expr = "!($is_arg % " . $object->_parse_variable($expr_arg) . ")";
				}
				else
				{
					$object->trigger_error("expecting 'by' after 'div'", E_USER_ERROR, __FILE__, __LINE__);
				}
			break;

			default:
				$object->trigger_error("unknown 'is' expression - '$expr_type'", E_USER_ERROR, __FILE__, __LINE__);
				break;
		}

	if ($negate_expr) {
		$expr = "!($expr)";
	}

	array_splice($_args, 0, $expr_end, $expr);

	return $_args;
}
