You are here

class Haml in Sassy 7

HamlViewRenderer allows you to write view files in {@link Haml http://haml-lang.com/}. @package PHamlP @subpackage Yii

Hierarchy

  • class \Haml extends \CViewRenderer

Expanded class hierarchy of Haml

1 string reference to 'Haml'
HamlParser::getFilter in phamlp/haml/HamlParser.php
* Gets a filter. * Filters are loaded on first use. *

File

phamlp/Yii/phamlp/Haml.php, line 35

View source
class Haml extends CViewRenderer {

  /**#@+
   * Configurable Options - Renderer
   */

  /**
   * @var string the extension name of the source file. Defaults to '.haml'.
   */
  public $fileExtension = '.haml';

  /**
   * @var string the extension name of the view file. Defaults to '.php'.
   */
  public $viewFileExtension = '.php';

  /**
   * @var boolean whether to cache parsed files. If false files will be parsed
   * every time.
   */
  public $cache = true;

  /**#@-*/

  /**#@+
   * Configurable Options - Haml
   */

  /**
   * @var string DOCTYPE format
   * @see doctypes
   */
  public $format = 'xhtml';

  /**
   * @var string custom doctype. If null (default) {@link format} must be
   * a key in {@link doctypes}
   */
  public $doctype;

  /**
   * @var boolean whether or not to escape X(HT)ML-sensitive characters in script.
   * If this is true, = behaves like &=; otherwise, it behaves like !=.
   * Note that if this is set, != should be used for yielding to subtemplates
   * and rendering partials. Defaults to false.
   */
  public $escapeHtml;

  /**
   * @var boolean Whether or not attribute hashes and scripts designated by
   * = or ~ should be evaluated. If true, the scripts are rendered as empty strings.
   * Defaults to false.
   */
  public $suppressEval;

  /**
   * @var string The character that should wrap element attributes. Characters
   * of this type within attributes will be escaped (e.g. by replacing them with
   * ') if the character is an apostrophe or a quotation mark.
   * Defaults to " (an quotation mark).
   */
  public $attrWrapper;

  /**
   * @var string style of output. Can be:
   * nested: output is nested according to the indent level in the source
   * expanded: block tags have their own lines as does content which is indented
   * compact: block tags and their content go on one line
   * compressed: all unneccessary whitepaces is removed. If ugly is true this style is used.
   */
  public $style;

  /**
   * @var boolean if true no attempt is made to properly indent or format
   * the output. Reduces size of output file but is not very readable.
   * Defaults to true.
   */
  public $ugly;

  /**
   * @var boolean if true comments are preserved in ugly mode. If not in
   * ugly mode comments are always output. Defaults to false.
   */
  public $preserveComments;

  /**
   * @var integer Initial debug setting:
   * no debug, show source, show output, or show all.
   * Debug settings can be controlled in the template
   * Defaults to DEBUG_NONE.
   */
  public $debug;

  /**
   * @var string Path alias to filters. If specified this will be searched
   * first followed by 'haml.filters'. This allows the default filters to be
   * overridden.
   */
  public $filterPathAlias;

  /**
   * @var array supported doctypes
   * @see format
   */
  public $doctypes;

  /**
   * @var array A list of tag names that should be automatically self-closed
   * if they have no content.
   */
  public $emptyTags;

  /**
   * @var array A list of inline tags for which whitespace is not collapsed
   * fully when in ugly mode or stripping outer whitespace.
   */
  public $inlineTags;

  /**
   * @var array attributes that are minimised
   */
  public $minimizedAttributes;

  /**
   * @var array A list of tag names that should automatically have their newlines preserved.
   */
  public $preserve;

  /**
   * @var string Path to a file containing user defined Haml helpers.
   */
  public $helperFile;

  /**#@-*/

  /**
   * @var HamlParser the Haml parser
   */
  private $haml;

  /**
   * @var array Haml parser option names. These are passed to the parser if set.
   */
  private $hamlOptions = array(
    'format',
    'doctype',
    'escapeHtml',
    'suppressEval',
    'attrWrapper',
    'style',
    'ugly',
    'preserveComments',
    'debug',
    'filterDir',
    'doctypes',
    'emptyTags',
    'inlineTags',
    'minimizedAttributes',
    'preserve',
    'helperFile',
  );

  /**
   * @var string Path to filters. Derived from filterPathAlias.
   */
  private $filterDir;

  /**
   * Do a sanity check on the options and setup alias to filters
   */
  private function _init() {
    if (isset($this->filterPathAlias)) {
      $this->filterDir = Yii::getPathOfAlias($this->filterPathAlias);
    }
    if (isset($this->helperFile)) {
      $this->helperFile = Yii::getPathOfAlias($this->helperFile) . '.php';
    }
    $options = array();
    foreach ($this->hamlOptions as $option) {
      if (isset($this->{$option})) {
        $options[$option] = $this->{$option};
      }
    }

    // foreach
    Yii::import('ext.phamlp.vendors.phamlp.haml.HamlParser');
    $this->haml = new HamlParser($options);
  }

  /**
   * Parses the source view file and saves the results as another file.
   * This method is required by the parent class.
   * @param string the source view file path
   * @param string the resulting view file path
   */
  protected function generateViewFile($sourceFile, $viewFile) {
    if (substr($sourceFile, strlen($this->fileExtension) * -1) === $this->fileExtension) {
      if (empty($this->haml)) {
        $this
          ->_init();
      }
      $data = $this->haml
        ->parse($sourceFile);
    }
    else {
      $data = file_get_contents($sourceFile);
    }
    file_put_contents($viewFile, $data);
  }

  /**
   * Renders a view file.
   * This method is required by {@link IViewRenderer}.
   * @param CBaseController the controller or widget who is rendering the view file.
   * @param string the view file path
   * @param mixed the data to be passed to the view
   * @param boolean whether the rendering result should be returned
   * @return mixed the rendering result, or null if the rendering result is not needed.
   */
  public function renderFile($context, $sourceFile, $data, $return) {
    $hamlSourceFile = substr($sourceFile, 0, strrpos($sourceFile, '.')) . $this->fileExtension;
    if (!is_file($hamlSourceFile) || ($file = realpath($hamlSourceFile)) === false) {
      return parent::renderFile($context, $sourceFile, $data, $return);
    }
    $viewFile = $this
      ->getViewFile($sourceFile);
    $viewFile = str_replace($this->fileExtension . ($this->useRuntimePath ? '' : 'c'), $this->viewFileExtension, $viewFile);
    if (!$this->cache || @filemtime($sourceFile) > @filemtime($viewFile)) {
      $this
        ->generateViewFile($sourceFile, $viewFile);
      @chmod($viewFile, $this->filePermission);
    }
    return $context
      ->renderInternal($viewFile, $data, $return);
  }

}

Members

Namesort descending Modifiers Type Description Overrides
Haml::$attrWrapper public property * * of this type within attributes will be escaped (e.g. by replacing them with * ') if the character is an apostrophe or a quotation mark. * Defaults to " (an quotation mark).
Haml::$cache public property * * every time.
Haml::$debug public property * * no debug, show source, show output, or show all. * Debug settings can be controlled in the template * Defaults to DEBUG_NONE.
Haml::$doctype public property * * a key in {@link doctypes}
Haml::$doctypes public property * *
Haml::$emptyTags public property * * if they have no content.
Haml::$escapeHtml public property * * If this is true, = behaves like &=; otherwise, it behaves like !=. * Note that if this is set, != should be used for yielding to subtemplates * and rendering partials. Defaults to false.
Haml::$fileExtension public property *
Haml::$filterDir private property *
Haml::$filterPathAlias public property * * first followed by 'haml.filters'. This allows the default filters to be * overridden.
Haml::$format public property * *
Haml::$haml private property *
Haml::$hamlOptions private property *
Haml::$helperFile public property *
Haml::$inlineTags public property * * fully when in ugly mode or stripping outer whitespace.
Haml::$minimizedAttributes public property *
Haml::$preserve public property *
Haml::$preserveComments public property * * ugly mode comments are always output. Defaults to false.
Haml::$style public property * * nested: output is nested according to the indent level in the source * expanded: block tags have their own lines as does content which is indented * compact: block tags and their content go on one line * compressed: all unneccessary…
Haml::$suppressEval public property = or ~ should be evaluated. If true, the scripts are rendered as empty strings. Defaults to false.
Haml::$ugly public property * * the output. Reduces size of output file but is not very readable. * Defaults to true.
Haml::$viewFileExtension public property *
Haml::generateViewFile protected function * Parses the source view file and saves the results as another file. * This method is required by the parent class. *
Haml::renderFile public function * Renders a view file. * This method is required by {@link IViewRenderer}. *
Haml::_init private function * Do a sanity check on the options and setup alias to filters