summaryrefslogtreecommitdiff
path: root/node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:05:55 +0800
commitc06f7ee0a40255214c477e13d9b956a7e07c2900 (patch)
treef5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs
parent3fd9400d4dccc25aa29b5702216732e0b7542073 (diff)
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs')
-rw-r--r--node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs91
1 files changed, 91 insertions, 0 deletions
diff --git a/node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs b/node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs
new file mode 100644
index 00000000..2875466b
--- /dev/null
+++ b/node_modules/css-tree/cjs/tokenizer/OffsetToLocation.cjs
@@ -0,0 +1,91 @@
+'use strict';
+
+const adoptBuffer = require('./adopt-buffer.cjs');
+const charCodeDefinitions = require('./char-code-definitions.cjs');
+
+const N = 10;
+const F = 12;
+const R = 13;
+
+function computeLinesAndColumns(host) {
+ const source = host.source;
+ const sourceLength = source.length;
+ const startOffset = source.length > 0 ? charCodeDefinitions.isBOM(source.charCodeAt(0)) : 0;
+ const lines = adoptBuffer.adoptBuffer(host.lines, sourceLength);
+ const columns = adoptBuffer.adoptBuffer(host.columns, sourceLength);
+ let line = host.startLine;
+ let column = host.startColumn;
+
+ for (let i = startOffset; i < sourceLength; i++) {
+ const code = source.charCodeAt(i);
+
+ lines[i] = line;
+ columns[i] = column++;
+
+ if (code === N || code === R || code === F) {
+ if (code === R && i + 1 < sourceLength && source.charCodeAt(i + 1) === N) {
+ i++;
+ lines[i] = line;
+ columns[i] = column;
+ }
+
+ line++;
+ column = 1;
+ }
+ }
+
+ lines[sourceLength] = line;
+ columns[sourceLength] = column;
+
+ host.lines = lines;
+ host.columns = columns;
+ host.computed = true;
+}
+
+class OffsetToLocation {
+ constructor() {
+ this.lines = null;
+ this.columns = null;
+ this.computed = false;
+ }
+ setSource(source, startOffset = 0, startLine = 1, startColumn = 1) {
+ this.source = source;
+ this.startOffset = startOffset;
+ this.startLine = startLine;
+ this.startColumn = startColumn;
+ this.computed = false;
+ }
+ getLocation(offset, filename) {
+ if (!this.computed) {
+ computeLinesAndColumns(this);
+ }
+
+ return {
+ source: filename,
+ offset: this.startOffset + offset,
+ line: this.lines[offset],
+ column: this.columns[offset]
+ };
+ }
+ getLocationRange(start, end, filename) {
+ if (!this.computed) {
+ computeLinesAndColumns(this);
+ }
+
+ return {
+ source: filename,
+ start: {
+ offset: this.startOffset + start,
+ line: this.lines[start],
+ column: this.columns[start]
+ },
+ end: {
+ offset: this.startOffset + end,
+ line: this.lines[end],
+ column: this.columns[end]
+ }
+ };
+ }
+}
+
+exports.OffsetToLocation = OffsetToLocation;