You are here

SassCompactRenderer.php in Sassy 7

File

phamlp/sass/renderers/SassCompactRenderer.php
View source
<?php

/* SVN FILE: $Id$ */

/**
 * SassCompactRenderer class file.
 * @author			Chris Yates <chris.l.yates@gmail.com>
 * @copyright 	Copyright (c) 2010 PBM Web Development
 * @license			http://phamlp.googlecode.com/files/license.txt
 * @package			PHamlP
 * @subpackage	Sass.renderers
 */
require_once 'SassCompressedRenderer.php';

/**
 * SassCompactRenderer class.
 * Each CSS rule takes up only one line, with every property defined on that
 * line. Nested rules are placed next to each other with no newline, while
 * groups of rules have newlines between them.
 * @package			PHamlP
 * @subpackage	Sass.renderers
 */
class SassCompactRenderer extends SassCompressedRenderer {
  const DEBUG_INFO_RULE = '@media -sass-debug-info';
  const DEBUG_INFO_PROPERTY = 'font-family';

  /**
   * Renders the brace between the selectors and the properties
   * @return string the brace between the selectors and the properties
   */
  protected function between() {
    return ' { ';
  }

  /**
   * Renders the brace at the end of the rule
   * @return string the brace between the rule and its properties
   */
  protected function end() {
    return " }\n";
  }

  /**
   * Renders a comment.
   * Comments preceeding a rule are on their own line.
   * Comments within a rule are on the same line as the rule.
   * @param SassNode the node being rendered
   * @return string the rendered commnt
   */
  public function renderComment($node) {
    $nl = $node->parent instanceof SassRuleNode ? '' : "\n";
    return "{$nl}/* " . join("\n * ", $node->children) . " */{$nl}";
  }

  /**
   * Renders a directive.
   * @param SassNode the node being rendered
   * @param array properties of the directive
   * @return string the rendered directive
   */
  public function renderDirective($node, $properties) {
    return str_replace("\n", '', parent::renderDirective($node, $properties)) . "\n\n";
  }

  /**
   * Renders properties.
   * @param SassNode the node being rendered
   * @param array properties to render
   * @return string the rendered properties
   */
  public function renderProperties($node, $properties) {
    return join(' ', $properties);
  }

  /**
   * Renders a property.
   * @param SassNode the node being rendered
   * @return string the rendered property
   */
  public function renderProperty($node) {
    return "{$node->name}: {$node->value};";
  }

  /**
   * Renders a rule.
   * @param SassNode the node being rendered
   * @param array rule properties
   * @param string rendered rules
   * @return string the rendered rule
   */
  public function renderRule($node, $properties, $rules) {
    return $this
      ->renderDebug($node) . parent::renderRule($node, $properties, str_replace("\n\n", "\n", $rules)) . "\n";
  }

  /**
   * Renders debug information.
   * If the node has the debug_info options set true the line number and filename
   * are rendered in a format compatible with
   * {@link https://addons.mozilla.org/en-US/firefox/addon/103988/ FireSass}.
   * Else if the node has the line_numbers option set true the line number and
   * filename are rendered in a comment.
   * @param SassNode the node being rendered
   * @return string the debug information
   */
  protected function renderDebug($node) {
    $indent = $this
      ->getIndent($node);
    $debug = '';
    if ($node->debug_info) {
      $debug = $indent . self::DEBUG_INFO_RULE . '{';
      $debug .= 'filename{' . self::DEBUG_INFO_PROPERTY . ':' . preg_replace('/([^-\\w])/', '\\\\\\1', "file://{$node->filename}") . ';}';
      $debug .= 'line{' . self::DEBUG_INFO_PROPERTY . ":'{$node->line}';}";
      $debug .= "}\n";
    }
    elseif ($node->line_numbers) {
      $debug .= "{$indent}/* line {$node->line} {$node->filename} */\n";
    }
    return $debug;
  }

  /**
   * Renders rule selectors.
   * @param SassNode the node being rendered
   * @return string the rendered selectors
   */
  protected function renderSelectors($node) {
    return join(', ', $node->selectors);
  }

}

Classes

Namesort descending Description
SassCompactRenderer SassCompactRenderer class. Each CSS rule takes up only one line, with every property defined on that line. Nested rules are placed next to each other with no newline, while groups of rules have newlines between…