summaryrefslogtreecommitdiffstats
path: root/library/vendor/lessphp/lib/Less/Output/Mapped.php
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 12:39:39 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-28 12:39:39 +0000
commit8ca6cc32b2c789a3149861159ad258f2cb9491e3 (patch)
tree2492de6f1528dd44eaa169a5c1555026d9cb75ec /library/vendor/lessphp/lib/Less/Output/Mapped.php
parentInitial commit. (diff)
downloadicingaweb2-a598b28402ead15d3701df32e198513e7b1f299c.tar.xz
icingaweb2-a598b28402ead15d3701df32e198513e7b1f299c.zip
Adding upstream version 2.11.4.upstream/2.11.4upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'library/vendor/lessphp/lib/Less/Output/Mapped.php')
-rw-r--r--library/vendor/lessphp/lib/Less/Output/Mapped.php119
1 files changed, 119 insertions, 0 deletions
diff --git a/library/vendor/lessphp/lib/Less/Output/Mapped.php b/library/vendor/lessphp/lib/Less/Output/Mapped.php
new file mode 100644
index 0000000..71d7b71
--- /dev/null
+++ b/library/vendor/lessphp/lib/Less/Output/Mapped.php
@@ -0,0 +1,119 @@
+<?php
+
+/**
+ * Parser output with source map
+ *
+ * @package Less
+ * @subpackage Output
+ */
+class Less_Output_Mapped extends Less_Output {
+
+ /**
+ * The source map generator
+ *
+ * @var Less_SourceMap_Generator
+ */
+ protected $generator;
+
+ /**
+ * Current line
+ *
+ * @var integer
+ */
+ protected $lineNumber = 0;
+
+ /**
+ * Current column
+ *
+ * @var integer
+ */
+ protected $column = 0;
+
+ /**
+ * Array of contents map (file and its content)
+ *
+ * @var array
+ */
+ protected $contentsMap = array();
+
+ /**
+ * Constructor
+ *
+ * @param array $contentsMap Array of filename to contents map
+ * @param Less_SourceMap_Generator $generator
+ */
+ public function __construct( array $contentsMap, $generator ) {
+ $this->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 array|null $fileInfo
+ * @param int $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 );
+ }
+
+}