summaryrefslogtreecommitdiff
path: root/node_modules/postcss/lib/terminal-highlight.js
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-18 22:32:53 -0500
committerChristian Cleberg <[email protected]>2026-04-18 22:32:53 -0500
commit580e798e16346eb894eb899edac82d2efdf40adc (patch)
tree6dec3b7db678f781138b40d34da37d21ac8fbe7d /node_modules/postcss/lib/terminal-highlight.js
downloadbrand-bench-580e798e16346eb894eb899edac82d2efdf40adc.tar.gz
brand-bench-580e798e16346eb894eb899edac82d2efdf40adc.tar.bz2
brand-bench-580e798e16346eb894eb899edac82d2efdf40adc.zip
initial commit
Diffstat (limited to 'node_modules/postcss/lib/terminal-highlight.js')
-rw-r--r--node_modules/postcss/lib/terminal-highlight.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/node_modules/postcss/lib/terminal-highlight.js b/node_modules/postcss/lib/terminal-highlight.js
new file mode 100644
index 0000000..6196c9d
--- /dev/null
+++ b/node_modules/postcss/lib/terminal-highlight.js
@@ -0,0 +1,70 @@
+'use strict'
+
+let pico = require('picocolors')
+
+let tokenizer = require('./tokenize')
+
+let Input
+
+function registerInput(dependant) {
+ Input = dependant
+}
+
+const HIGHLIGHT_THEME = {
+ ';': pico.yellow,
+ ':': pico.yellow,
+ '(': pico.cyan,
+ ')': pico.cyan,
+ '[': pico.yellow,
+ ']': pico.yellow,
+ '{': pico.yellow,
+ '}': pico.yellow,
+ 'at-word': pico.cyan,
+ 'brackets': pico.cyan,
+ 'call': pico.cyan,
+ 'class': pico.yellow,
+ 'comment': pico.gray,
+ 'hash': pico.magenta,
+ 'string': pico.green
+}
+
+function getTokenType([type, value], processor) {
+ if (type === 'word') {
+ if (value[0] === '.') {
+ return 'class'
+ }
+ if (value[0] === '#') {
+ return 'hash'
+ }
+ }
+
+ if (!processor.endOfFile()) {
+ let next = processor.nextToken()
+ processor.back(next)
+ if (next[0] === 'brackets' || next[0] === '(') return 'call'
+ }
+
+ return type
+}
+
+function terminalHighlight(css) {
+ let processor = tokenizer(new Input(css), { ignoreErrors: true })
+ let result = ''
+ while (!processor.endOfFile()) {
+ let token = processor.nextToken()
+ let color = HIGHLIGHT_THEME[getTokenType(token, processor)]
+ if (color) {
+ result += token[1]
+ .split(/\r?\n/)
+ .map(i => color(i))
+ .join('\n')
+ } else {
+ result += token[1]
+ }
+ }
+ return result
+}
+
+terminalHighlight.registerInput = registerInput
+
+module.exports = terminalHighlight