HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //proc/1526/task/1529/cwd/tana/frontend/node_modules/css-tree/lib/lexer/search.js
var List = require('../utils/list');

function getFirstMatchNode(matchNode) {
    if (matchNode.type === 'ASTNode') {
        return matchNode.node;
    }

    if (matchNode.match.length !== 0) {
        return getFirstMatchNode(matchNode.match[0]);
    }

    return null;
}

function getLastMatchNode(matchNode) {
    if (matchNode.type === 'ASTNode') {
        return matchNode.node;
    }

    if (matchNode.match.length !== 0) {
        return getLastMatchNode(matchNode.match[matchNode.match.length - 1]);
    }

    return null;
}

function matchFragments(lexer, ast, match, type, name) {
    function findFragments(matchNode) {
        if (matchNode.type === 'ASTNode') {
            return;
        }

        if (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();
                    var loc = null;

                    do {
                        nodes.appendData(item.data);

                        if (item.data === end) {
                            break;
                        }

                        item = item.next;
                    } while (item !== null);

                    if (start.loc !== null && end.loc !== null) {
                        loc = {
                            source: start.loc.source,
                            start: start.loc.start,
                            end: end.loc.end
                        };
                    }

                    fragments.push({
                        parent: list,
                        loc: loc,
                        nodes: nodes
                    });
                }
            });
        }

        matchNode.match.forEach(findFragments);
    }

    var fragments = [];

    if (match.matched !== null) {
        findFragments(match.matched);
    }

    return fragments;
}

module.exports = {
    matchFragments: matchFragments
};