File indexing completed on 2024-05-12 06:02:08

0001 <?php
0002 error_reporting(E_ALL);
0003 
0004 require realpath(dirname(__FILE__)).'/../lessc.inc.php';
0005 
0006 // sorts the selectors in stylesheet in order to normalize it for comparison
0007 
0008 $exe = array_shift($argv); // remove filename
0009 
0010 if (!$fname = array_shift($argv)) {
0011   $fname = "php://stdin";
0012 }
0013 
0014 class lesscNormalized extends lessc {
0015   public $numberPrecision = 3;
0016 
0017   public function compileValue($value) {
0018     if ($value[0] == "raw_color") {
0019       $value = $this->coerceColor($value);
0020     }
0021 
0022     return parent::compileValue($value);
0023   }
0024 }
0025 
0026 class SortingFormatter extends lessc_formatter_lessjs {
0027   function sortKey($block) {
0028     if (!isset($block->sortKey)) {
0029       sort($block->selectors, SORT_STRING);
0030       $block->sortKey = implode(",", $block->selectors);
0031     }
0032 
0033     return $block->sortKey;
0034   }
0035 
0036   function sortBlock($block) {
0037     usort($block->children, function($a, $b) {
0038       $sort = strcmp($this->sortKey($a), $this->sortKey($b));
0039       if ($sort == 0) {
0040         // TODO
0041       }
0042       return $sort;
0043     });
0044 
0045   }
0046 
0047   function block($block) {
0048     $this->sortBlock($block);
0049     return parent::block($block);
0050   }
0051 
0052 }
0053 
0054 $less = new lesscNormalized();
0055 $less->setFormatter(new SortingFormatter);
0056 echo $less->parse(file_get_contents($fname));
0057