Exemplo n.º 1
0
 /**
  * Adds a chunk to the stack
  * The $index for less.php may be different from less.js since less.php does not chunkify inputs
  *
  * @param string $chunk
  * @param string $fileInfo
  * @param integer $index
  * @param mixed $mapLines
  */
 public function add($chunk, $fileInfo = null, $index = 0, $mapLines = null)
 {
     //ignore adding empty strings
     if ($chunk === '') {
         return;
     }
     $sourceLines = array();
     $sourceColumns = ' ';
     if ($fileInfo) {
         $url = $fileInfo['currentUri'];
         if (isset($this->contentsMap[$url])) {
             $inputSource = substr($this->contentsMap[$url], 0, $index);
             $sourceLines = explode("\n", $inputSource);
             $sourceColumns = end($sourceLines);
         } else {
             throw new Exception('Filename ' . $url . ' not in contentsMap');
         }
     }
     $lines = explode("\n", $chunk);
     $columns = end($lines);
     if ($fileInfo) {
         if (!$mapLines) {
             $this->generator->addMapping($this->lineNumber + 1, $this->column, count($sourceLines), strlen($sourceColumns), $fileInfo['currentUri']);
         } else {
             for ($i = 0, $count = count($lines); $i < $count; $i++) {
                 $this->generator->addMapping($this->lineNumber + $i + 1, $i === 0 ? $this->column : 0, count($sourceLines) + $i, $i === 0 ? strlen($sourceColumns) : 0, $fileInfo['currentUri']);
             }
         }
     }
     if (count($lines) === 1) {
         $this->column += strlen($columns);
     } else {
         $this->lineNumber += count($lines) - 1;
         $this->column = strlen($columns);
     }
     // add only chunk
     parent::add($chunk);
 }