Beispiel #1
0
/*
 * Walk throught the children tokens tree, and execute function
 * for each token with a text range relative to the base token
 *
 * It stops at block tokens
 *
 * @param {Token} base
 * @param {Function(token, range)} iter: function to call for each range of text
 * @return {String}
 */
function walk(base, iter) {
    var offset = 0;
    var tokens = base.getTokens();

    if (tokens.size === 0) {
        iter(base, Range(0, base.getText().length));

        return base.getText();
    }

    return tokens.reduce(function(output, token) {
        if (token.isBlock()) {
            return output;
        }

        var innerText = walk(token, function(tok, range) {
            var realRange = Range.moveBy(range, offset);
            iter(tok, realRange);
        });

        iter(
            token,
            Range(offset, innerText.length)
        );

        offset += innerText.length;
        return (output + innerText);
    }, '');
}
Beispiel #2
0
    return tokens.reduce(function(output, token) {
        if (token.isBlock()) {
            return output;
        }

        var innerText = walk(token, function(tok, range) {
            var realRange = Range.moveBy(range, offset);
            iter(tok, realRange);
        });

        iter(
            token,
            Range(offset, innerText.length)
        );

        offset += innerText.length;
        return (output + innerText);
    }, '');