Blame |
    Last modification |
    View Log
    | RSS feed
  
  
    1
  
  
<?php
namespace de\pointedears\css\least
;
require_once 'Base.php';
require_once 'Parser.php';
define('DEBUG', 2);
/**
 * @author Thomas 'PointedEars' Lahn
 */
class LEAST
{
  /**
   * Default name of parsed file
   *
   * @var string
   */
  protected $_filename;
  
  /**
   * Default name of parsed file
   *
   * @param string $filename
   */
  public function __construct 
($code = null)
  {
    if ($code !== null)
    {
       $this->_code 
= $code;
    }
  }
  
  /**
   * Gets a template variable or a property
   *
   * @param string $name
   * @throws InvalidArgumentException
   * @return mixed
   */
  public function __get
($name)
  {
    if (property_exists
($this, "_$name"))
    {
      return $this->{"_$name"};
    }
    
    if (array_key_exists($name, $this->_vars
))
    {
      return $this->_vars
[$name];
    }
    
    throw new InvalidArgumentException
("no property '{$name}'");
  }
  
  /**
   * Sets a template variable
   *
   * @param string $name
   * @param mixed $value
   */
  public function __set
($name, $value)
  {
    $this->_vars
[$name] = $value;
  }
  
  /**
   * Replaces characters in LEAST source code
   *
   * @param string $count
   *   Number of characters to replace
   * @param string $replacement
   *   Replacement string
   * @param string $haystack
   *   String to be searched
   * @param int $start
   *   Start replace from here
   * @return string
   */
  protected static 
function replace 
($count, $replacement, $haystack, $start)
  {
    return substr($haystack, 0, $start) . $replacement . substr($haystack, $start + $count);
  }
  
  /**
   * Parses LEAST source code, replacing special tokens, and returns the result
   *
   * @param string[optional] $code
   * @return string
   */
  public function parse 
($code = null)
  {
    if ($code === null)
    {
      $code = $this->_code
;
    }
    static 
$nl = 'n';
    \
mb_internal_encoding(mb_detect_encoding($code));
    $parser = new \de\pointedears\css\least\Parser
($code);
    $parser->parse();
    return $parser->compiled;
//     return $code;
  }
  
  /**
   * Parses a LEAST file and returns the result
   *
   * @param string $filename
   * @return string
   */
  public function parse_file 
($filename = null)
  {
    $contents = file_get_contents(
      $filename === null ? 
$this->filename : $filename);
    return $this->parse($contents);
  }
  
  /**
   * Compiles a CSS file from a LEAST file
   *
   * @param string $source
   * @param string $target
   */
  public static 
function compile 
($source, $target)
  {
    if (@filemtime($target) < @filemtime($source))
    {
      $least = new self();
      file_put_contents($target, $least->parse_file($source));
    }
  }
}