PageRenderTime 9ms CodeModel.GetById 2ms app.highlight 4ms RepoModel.GetById 1ms app.codeStats 0ms

/framework/vendor/smarty3/lib/libs/sysplugins/smarty_internal_compilebase.php

http://zoop.googlecode.com/
PHP | 103 lines | 48 code | 7 blank | 48 comment | 9 complexity | edac3322c2b587f53616533247afcc38 MD5 | raw file
  1<?php
  2
  3/**
  4* Smarty Internal Plugin CompileBase
  5* 
  6* @package Smarty
  7* @subpackage Compiler
  8* @author Uwe Tews 
  9*/
 10
 11/**
 12* This class does extend all internal compile plugins
 13*/
 14//abstract class Smarty_Internal_CompileBase implements TagCompilerInterface 
 15abstract class Smarty_Internal_CompileBase 
 16{
 17    function __construct()
 18    {
 19        // initialize valid attributes
 20        $this->required_attributes = array();
 21        $this->optional_attributes = array();
 22    } 
 23
 24    /**
 25    * This function checks if the attributes passed are valid
 26    * 
 27    * The attributes passed for the tag to compile are checked against the list of required and 
 28    * optional attributes. Required attributes must be present. Optional attributes are check against
 29    * against the corresponding list. The keyword '_any' specifies that any attribute will be accepted 
 30    * as valid
 31    * 
 32    * @todo More generallized handling of the nocache attributes in compile plugins
 33    * @param array $args attributes applied to the tag
 34    * @return array attributes for further processing
 35    */
 36    function _get_attributes ($args)
 37    { 
 38        // check if all required attributes present
 39        foreach ($this->required_attributes as $attr) {
 40            if (!array_key_exists($attr, $args)) {
 41                $this->compiler->trigger_template_error("missing \"" . $attr . "\" attribute");
 42            } 
 43        } 
 44        // check for unallowed attributes
 45        if ($this->optional_attributes != array('_any')) {
 46            $tmp_array = array_merge($this->required_attributes, $this->optional_attributes);
 47            foreach ($args as $key => $dummy) {
 48                 if (!in_array($key, $tmp_array) && $key !== 0) {
 49                   $this->compiler->trigger_template_error("unexpected \"" . $key . "\" attribute");
 50                } 
 51            } 
 52        } 
 53
 54        return $args;
 55    } 
 56
 57    /**
 58    * Push opening tag name on stack
 59    * 
 60    * Optionally additional data can be saved on stack
 61    * 
 62    * @param string $open_tag the opening tag's name
 63    * @param anytype $data optional data which shall be saved on stack
 64    */
 65    function _open_tag($open_tag, $data = null)
 66    {
 67        array_push($this->compiler->_tag_stack, array($open_tag, $data));
 68    } 
 69
 70    /**
 71    * Pop closing tag
 72    * 
 73    * Raise an error if this stack-top doesn't match with expected opening tags
 74    * 
 75    * @param array $ |string $expected_tag the expected opening tag names
 76    * @return anytype the opening tag's name or saved data
 77    */
 78    function _close_tag($expected_tag)
 79    {
 80        if (count($this->compiler->_tag_stack) > 0) {
 81            // get stacked info
 82            list($_open_tag, $_data) = array_pop($this->compiler->_tag_stack); 
 83            // open tag must match with the expected ones
 84            if (in_array($_open_tag, (array)$expected_tag)) {
 85                if (is_null($_data)) {
 86                    // return opening tag
 87                    return $_open_tag;
 88                } else {
 89                    // return restored data
 90                    return $_data;
 91                } 
 92            } 
 93            // wrong nesting of tags
 94            $this->compiler->trigger_template_error("unclosed {" . $_open_tag . "} tag");
 95            return;
 96        } 
 97        // wrong nesting of tags
 98        $this->compiler->trigger_template_error("unexpected closing tag");
 99        return;
100    } 
101} 
102
103?>