Source

						public function render($process, array $data = array(), array $options = array()) {
		$defaults = array(
			'type' => 'html',
			'layout' => null,
			'template' => null,
			'context' => array()
		);
		$options += $defaults;

		$data += isset($options['data']) ? (array) $options['data'] : array();
		$paths = isset($options['paths']) ? (array) $options['paths'] : array();
		unset($options['data'], $options['paths']);
		$params = array_filter($options, function($val) { return $val && is_string($val); });
		$result = null;

		foreach ($this->_process($process, $params) as $name => $step) {
			if (isset($paths[$name]) && $paths[$name] === false) {
				continue;
			}
			if (!$this->_conditions($step, $params, $data, $options)) {
				continue;
			}
			if ($step['multi'] && isset($options[$name])) {
				foreach ((array) $options[$name] as $value) {
					$params[$name] = $value;
					$result = $this->_step($step, $params, $data, $options);
				}
				continue;
			}
			$result = $this->_step((array) $step, $params, $data, $options);
		}
		return $result;
	}