mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-01 09:47:56 +08:00
These packages will be used to dynamically optimize SVG images during the build. R=jacktfranklin@chromium.org Bug: 1216402 Change-Id: I04e95aa7d79c9d67beaf8a7861182c52b16b7d0f Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2939992 Reviewed-by: Jack Franklin <jacktfranklin@chromium.org> Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
66 lines
1.6 KiB
JavaScript
66 lines
1.6 KiB
JavaScript
var List = require('../common/List');
|
|
|
|
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) {
|
|
var start = getFirstMatchNode(matchNode);
|
|
var end = getLastMatchNode(matchNode);
|
|
|
|
lexer.syntax.walk(ast, function(node, item, list) {
|
|
if (node === start) {
|
|
var nodes = new List();
|
|
|
|
do {
|
|
nodes.appendData(item.data);
|
|
|
|
if (item.data === end) {
|
|
break;
|
|
}
|
|
|
|
item = item.next;
|
|
} while (item !== null);
|
|
|
|
fragments.push({
|
|
parent: list,
|
|
nodes: nodes
|
|
});
|
|
}
|
|
});
|
|
}
|
|
|
|
if (Array.isArray(matchNode.match)) {
|
|
matchNode.match.forEach(findFragments);
|
|
}
|
|
}
|
|
|
|
var fragments = [];
|
|
|
|
if (match.matched !== null) {
|
|
findFragments(match.matched);
|
|
}
|
|
|
|
return fragments;
|
|
}
|
|
|
|
module.exports = {
|
|
matchFragments: matchFragments
|
|
};
|