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 = 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, // 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 ); } }