diff options
| author | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:05:55 +0800 |
|---|---|---|
| committer | littleblack111 <littleblack11111@gmail.com> | 2023-10-14 15:05:55 +0800 |
| commit | c06f7ee0a40255214c477e13d9b956a7e07c2900 (patch) | |
| tree | f5982a568ef8fab865d0142e71c7494fea3e4c1b /node_modules/css-tree/cjs/lexer/search.cjs | |
| parent | 3fd9400d4dccc25aa29b5702216732e0b7542073 (diff) | |
postcss,(plugins): nanocss, postcss-preset-env
Diffstat (limited to 'node_modules/css-tree/cjs/lexer/search.cjs')
| -rw-r--r-- | node_modules/css-tree/cjs/lexer/search.cjs | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/node_modules/css-tree/cjs/lexer/search.cjs b/node_modules/css-tree/cjs/lexer/search.cjs new file mode 100644 index 00000000..2b1e12c3 --- /dev/null +++ b/node_modules/css-tree/cjs/lexer/search.cjs @@ -0,0 +1,65 @@ +'use strict'; + +const List = require('../utils/List.cjs'); + +function getFirstMatchNode(matchNode) { + if ('node' in matchNode) { + return matchNode.node; + } + + return getFirstMatchNode(matchNode.match[0]); +} + +function getLastMatchNode(matchNode) { + if ('node' in matchNode) { + return matchNode.node; + } + + return getLastMatchNode(matchNode.match[matchNode.match.length - 1]); +} + +function matchFragments(lexer, ast, match, type, name) { + function findFragments(matchNode) { + if (matchNode.syntax !== null && + matchNode.syntax.type === type && + matchNode.syntax.name === name) { + const start = getFirstMatchNode(matchNode); + const end = getLastMatchNode(matchNode); + + lexer.syntax.walk(ast, function(node, item, list) { + if (node === start) { + const nodes = new List.List(); + + do { + nodes.appendData(item.data); + + if (item.data === end) { + break; + } + + item = item.next; + } while (item !== null); + + fragments.push({ + parent: list, + nodes + }); + } + }); + } + + if (Array.isArray(matchNode.match)) { + matchNode.match.forEach(findFragments); + } + } + + const fragments = []; + + if (match.matched !== null) { + findFragments(match.matched); + } + + return fragments; +} + +exports.matchFragments = matchFragments; |
