| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 | 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};
 |