contentsMap = $contentsMap; $this->generator = $generator; } /** * 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 = []; $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, // generated_line $this->column, // generated_column count($sourceLines), // original_line strlen($sourceColumns), // original_column $fileInfo ); } else { for ($i = 0, $count = count($lines); $i < $count; $i++) { $this->generator->addMapping( $this->lineNumber + $i + 1, // generated_line $i === 0 ? $this->column : 0, // generated_column count($sourceLines) + $i, // original_line $i === 0 ? strlen($sourceColumns) : 0, // original_column $fileInfo ); } } } if (count($lines) === 1) { $this->column += strlen($columns); } else { $this->lineNumber += count($lines) - 1; $this->column = strlen($columns); } // add only chunk parent::add($chunk); } }