All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sweetjs-0.2.5.node_modules.sweet.js.lib.syntax.js Maven / Gradle / Ivy

The newest version!
(function (root$97, factory$98) {
    if (typeof exports === 'object') {
        // CommonJS
        factory$98(exports, require('underscore'), require('es6-collections'), require('./parser'));
    } else if (typeof define === 'function' && define.amd) {
        // AMD. Register as an anonymous module.
        define([
            'exports',
            'underscore',
            'es6-collections',
            'parser'
        ], factory$98);
    }
}(this, function (exports$99, _$100, es6$101, parser$102) {
    // (CSyntax, Str) -> CContext
    function Rename$103(id$123, name$124, ctx$125, defctx$126) {
        defctx$126 = defctx$126 || null;
        return {
            id: id$123,
            name: name$124,
            context: ctx$125,
            def: defctx$126
        };
    }
    // (Num) -> CContext
    function Mark$104(mark$127, ctx$128) {
        return {
            mark: mark$127,
            context: ctx$128
        };
    }
    function Def$105(defctx$129, ctx$130) {
        return {
            defctx: defctx$129,
            context: ctx$130
        };
    }
    function Var$106(id$131) {
        return { id: id$131 };
    }
    var isRename$107 = function (r$132) {
        return r$132 && typeof r$132.id !== 'undefined' && typeof r$132.name !== 'undefined';
    };
    var isMark$108 = function isMark$108(m$133) {
        return m$133 && typeof m$133.mark !== 'undefined';
    };
    function isDef$109(ctx$134) {
        return ctx$134 && typeof ctx$134.defctx !== 'undefined';
    }
    // (CToken, CSyntax?) -> CSyntax
    function syntaxFromToken$110(token$135, oldstx$136) {
        return Object.create({
            mark: function mark$137(newMark$138) {
                if (this.token.inner) {
                    var next$139 = syntaxFromToken$110(this.token, this);
                    next$139.deferredContext = Mark$104(newMark$138, this.deferredContext);
                    return next$139;
                }
                return syntaxFromToken$110(this.token, { context: Mark$104(newMark$138, this.context) });
            },
            rename: function (id$140, name$141) {
                // deferr renaming of delimiters
                if (this.token.inner) {
                    var next$142 = syntaxFromToken$110(this.token, this);
                    next$142.deferredContext = Rename$103(id$140, name$141, this.deferredContext);
                    return next$142;
                }
                if (this.token.type === parser$102.Token.Identifier || this.token.type === parser$102.Token.Keyword) {
                    return syntaxFromToken$110(this.token, { context: Rename$103(id$140, name$141, this.context) });
                } else {
                    return this;
                }
            },
            addDefCtx: function (defctx$143) {
                if (this.token.inner) {
                    var next$144 = syntaxFromToken$110(this.token, this);
                    next$144.deferredContext = Def$105(defctx$143, this.deferredContext);
                    return next$144;
                }
                return syntaxFromToken$110(this.token, { context: Def$105(defctx$143, this.context) });
            },
            getDefCtx: function () {
                var ctx$145 = this.context;
                while (ctx$145 !== null) {
                    if (isDef$109(ctx$145)) {
                        return ctx$145.defctx;
                    }
                    ctx$145 = ctx$145.context;
                }
                return null;
            },
            expose: function () {
                parser$102.assert(this.token.type === parser$102.Token.Delimiter, 'Only delimiters can be exposed');
                function applyContext$146(stxCtx$147, ctx$148) {
                    if (ctx$148 == null) {
                        return stxCtx$147;
                    } else if (isRename$107(ctx$148)) {
                        return Rename$103(ctx$148.id, ctx$148.name, applyContext$146(stxCtx$147, ctx$148.context));
                    } else if (isMark$108(ctx$148)) {
                        return Mark$104(ctx$148.mark, applyContext$146(stxCtx$147, ctx$148.context));
                    } else if (isDef$109(ctx$148)) {
                        return Def$105(ctx$148.defctx, applyContext$146(stxCtx$147, ctx$148.context));
                    } else {
                        parser$102.assert(false, 'unknown context type');
                    }
                }
                this.token.inner = _$100.map(this.token.inner, _$100.bind(function (stx$149) {
                    if (stx$149.token.inner) {
                        var next$150 = syntaxFromToken$110(stx$149.token, stx$149);
                        next$150.deferredContext = applyContext$146(stx$149.deferredContext, this.deferredContext);
                        return next$150;
                    } else {
                        return syntaxFromToken$110(stx$149.token, { context: applyContext$146(stx$149.context, this.deferredContext) });
                    }
                }, this));
                this.deferredContext = null;
                return this;
            },
            toString: function () {
                var val$151 = this.token.type === parser$102.Token.EOF ? 'EOF' : this.token.value;
                return '[Syntax: ' + val$151 + ']';
            }
        }, {
            token: {
                value: token$135,
                enumerable: true,
                configurable: true
            },
            context: {
                value: oldstx$136 && oldstx$136.context ? oldstx$136.context : null,
                writable: true,
                enumerable: true,
                configurable: true
            },
            deferredContext: {
                value: oldstx$136 && oldstx$136.deferredContext ? oldstx$136.deferredContext : null,
                writable: true,
                enumerable: true,
                configurable: true
            }
        });
    }
    function mkSyntax$111(stx$152, value$153, type$154, inner$155) {
        if (stx$152 && Array.isArray(stx$152) && stx$152.length === 1) {
            stx$152 = stx$152[0];
        } else if (stx$152 && Array.isArray(stx$152)) {
            throw new Error('Expecting a syntax object or an array with a single syntax object, not: ' + stx$152);
        }
        if (type$154 === parser$102.Token.Delimiter) {
            var startLineNumber$156, startLineStart$157, endLineNumber$158, endLineStart$159, startRange$160, endRange$161;
            if (!Array.isArray(inner$155)) {
                throw new Error('Must provide inner array of syntax objects when creating a delimiter');
            }
            if (stx$152 && stx$152.token.type === parser$102.Token.Delimiter) {
                startLineNumber$156 = stx$152.token.startLineNumber;
                startLineStart$157 = stx$152.token.startLineStart;
                endLineNumber$158 = stx$152.token.endLineNumber;
                endLineStart$159 = stx$152.token.endLineStart;
                startRange$160 = stx$152.token.startRange;
                endRange$161 = stx$152.token.endRange;
            } else if (stx$152 && stx$152.token) {
                startLineNumber$156 = stx$152.token.lineNumber;
                startLineStart$157 = stx$152.token.lineStart;
                endLineNumber$158 = stx$152.token.lineNumber;
                endLineStart$159 = stx$152.token.lineStart;
                startRange$160 = stx$152.token.range;
                endRange$161 = stx$152.token.range;
            } else {
                startLineNumber$156 = 0;
                startLineStart$157 = 0;
                endLineNumber$158 = 0;
                endLineStart$159 = 0;
                startRange$160 = [
                    0,
                    0
                ];
                endRange$161 = [
                    0,
                    0
                ];
            }
            return syntaxFromToken$110({
                type: parser$102.Token.Delimiter,
                value: value$153,
                inner: inner$155,
                startLineStart: startLineStart$157,
                startLineNumber: startLineNumber$156,
                endLineStart: endLineStart$159,
                endLineNumber: endLineNumber$158,
                startRange: startRange$160,
                endRange: endRange$161
            }, stx$152);
        } else {
            var lineStart$162, lineNumber$163, range$164;
            if (stx$152 && stx$152.token.type === parser$102.Token.Delimiter) {
                lineStart$162 = stx$152.token.startLineStart;
                lineNumber$163 = stx$152.token.startLineNumber;
                range$164 = stx$152.token.startRange;
            } else if (stx$152 && stx$152.token) {
                lineStart$162 = stx$152.token.lineStart;
                lineNumber$163 = stx$152.token.lineNumber;
                range$164 = stx$152.token.range;
            } else {
                lineStart$162 = 0;
                lineNumber$163 = 0;
                range$164 = [
                    0,
                    0
                ];
            }
            return syntaxFromToken$110({
                type: type$154,
                value: value$153,
                lineStart: lineStart$162,
                lineNumber: lineNumber$163,
                range: range$164
            }, stx$152);
        }
    }
    function makeValue$112(val$165, stx$166) {
        if (typeof val$165 === 'boolean') {
            return mkSyntax$111(stx$166, val$165 ? 'true' : 'false', parser$102.Token.BooleanLiteral);
        } else if (typeof val$165 === 'number') {
            if (val$165 !== val$165) {
                return makeDelim$117('()', [
                    makeValue$112(0, stx$166),
                    makePunc$116('/', stx$166),
                    makeValue$112(0, stx$166)
                ], stx$166);
            }
            if (val$165 < 0) {
                return makeDelim$117('()', [
                    makePunc$116('-', stx$166),
                    makeValue$112(Math.abs(val$165), stx$166)
                ], stx$166);
            } else {
                return mkSyntax$111(stx$166, val$165, parser$102.Token.NumericLiteral);
            }
        } else if (typeof val$165 === 'string') {
            return mkSyntax$111(stx$166, val$165, parser$102.Token.StringLiteral);
        } else if (val$165 === null) {
            return mkSyntax$111(stx$166, 'null', parser$102.Token.NullLiteral);
        } else {
            throw new Error('Cannot make value syntax object from: ' + val$165);
        }
    }
    function makeRegex$113(val$167, flags$168, stx$169) {
        var newstx$170 = mkSyntax$111(stx$169, new RegExp(val$167, flags$168), parser$102.Token.RegexLiteral);
        // regex tokens need the extra field literal on token
        newstx$170.token.literal = val$167;
        return newstx$170;
    }
    function makeIdent$114(val$171, stx$172) {
        return mkSyntax$111(stx$172, val$171, parser$102.Token.Identifier);
    }
    function makeKeyword$115(val$173, stx$174) {
        return mkSyntax$111(stx$174, val$173, parser$102.Token.Keyword);
    }
    function makePunc$116(val$175, stx$176) {
        return mkSyntax$111(stx$176, val$175, parser$102.Token.Punctuator);
    }
    function makeDelim$117(val$177, inner$178, stx$179) {
        return mkSyntax$111(stx$179, val$177, parser$102.Token.Delimiter, inner$178);
    }
    function unwrapSyntax$118(stx$180) {
        if (Array.isArray(stx$180) && stx$180.length === 1) {
            // pull stx out of single element arrays for convenience 
            stx$180 = stx$180[0];
        }
        if (stx$180.token) {
            if (stx$180.token.type === parser$102.Token.Delimiter) {
                return stx$180.token;
            } else {
                return stx$180.token.value;
            }
        } else {
            throw new Error('Not a syntax object: ' + stx$180);
        }
    }
    // ([...CSyntax]) -> [...CToken]
    function syntaxToTokens$119(stx$181) {
        return _$100.map(stx$181, function (stx$182) {
            if (stx$182.token.inner) {
                stx$182.token.inner = syntaxToTokens$119(stx$182.token.inner);
            }
            return stx$182.token;
        });
    }
    // (CToken or [...CToken]) -> [...CSyntax]
    function tokensToSyntax$120(tokens$183) {
        if (!_$100.isArray(tokens$183)) {
            tokens$183 = [tokens$183];
        }
        return _$100.map(tokens$183, function (token$184) {
            if (token$184.inner) {
                token$184.inner = tokensToSyntax$120(token$184.inner);
            }
            return syntaxFromToken$110(token$184);
        });
    }
    // ([...CSyntax], Str) -> [...CSyntax])
    function joinSyntax$121(tojoin$185, punc$186) {
        if (tojoin$185.length === 0) {
            return [];
        }
        if (punc$186 === ' ') {
            return tojoin$185;
        }
        return _$100.reduce(_$100.rest(tojoin$185, 1), function (acc$187, join$188) {
            return acc$187.concat(makePunc$116(punc$186, join$188), join$188);
        }, [_$100.first(tojoin$185)]);
    }
    // ([...[...CSyntax]], Str) -> [...CSyntax]
    function joinSyntaxArr$122(tojoin$189, punc$190) {
        if (tojoin$189.length === 0) {
            return [];
        }
        if (punc$190 === ' ') {
            return _$100.flatten(tojoin$189, true);
        }
        return _$100.reduce(_$100.rest(tojoin$189, 1), function (acc$191, join$192) {
            return acc$191.concat(makePunc$116(punc$190, _$100.first(join$192)), join$192);
        }, _$100.first(tojoin$189));
    }
    exports$99.unwrapSyntax = unwrapSyntax$118;
    exports$99.makeDelim = makeDelim$117;
    exports$99.makePunc = makePunc$116;
    exports$99.makeKeyword = makeKeyword$115;
    exports$99.makeIdent = makeIdent$114;
    exports$99.makeRegex = makeRegex$113;
    exports$99.makeValue = makeValue$112;
    exports$99.Rename = Rename$103;
    exports$99.Mark = Mark$104;
    exports$99.Var = Var$106;
    exports$99.Def = Def$105;
    exports$99.isDef = isDef$109;
    exports$99.isMark = isMark$108;
    exports$99.isRename = isRename$107;
    exports$99.syntaxFromToken = syntaxFromToken$110;
    exports$99.tokensToSyntax = tokensToSyntax$120;
    exports$99.syntaxToTokens = syntaxToTokens$119;
    exports$99.joinSyntax = joinSyntax$121;
    exports$99.joinSyntaxArr = joinSyntaxArr$122;
}));




© 2015 - 2025 Weber Informatics LLC | Privacy Policy