You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

125 lines
6.0 KiB

(function (e) {
if (typeof exports === "object" && typeof module === "object") {
e(require("../../lib/codemirror"));
} else if (typeof define === "function" && define.amd) {
define(["../../lib/codemirror"], e);
} else {
e(CodeMirror);
}
})(function (x) {
"use strict";
function k(e) {
return new RegExp("^((" + e.join(")|(") + "))\\b");
}
var _ = k(["and", "or", "not", "is"]),
v = ["as", "assert", "break", "class", "continue", "def", "del", "elif", "else", "except", "finally", "for", "from", "global", "if", "import", "lambda", "pass", "raise", "return", "try", "while", "with", "yield", "in"],
z = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr", "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", "enumerate", "eval", "filter", "float", "format", "frozenset", "getattr", "globals", "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", "list", "locals", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip", "__import__", "NotImplemented", "Ellipsis", "__debug__"];
function w(e) {
return e.scopes[e.scopes.length - 1];
}
x.registerHelper("hintWords", "python", v.concat(z));
x.defineMode("python", function (t, l) {
var s = "error",
o = l.delimiters || l.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.\\]/,
a = [l.singleOperators, l.doubleOperators, l.doubleDelimiters, l.tripleDelimiters, l.operators || /^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/];
for (var e = 0; e < a.length; e++) {
if (!a[e]) a.splice(e--, 1);
}
var c, u, f = l.hangingIndent || t.indentUnit, n = v, r = z;
var p = (l.extra_keywords && (n = n.concat(l.extra_keywords)),
l.extra_builtins && (r = r.concat(l.extra_builtins)),
!(l.version && Number(l.version) < 3));
var d = p ? (
c = l.identifiers || /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/,
n = n.concat(["nonlocal", "False", "True", "None", "async", "await"]),
r = r.concat(["ascii", "bytes", "exec", "print"]),
new RegExp("^(([rbuf]|(br)|(rb)|(fr)|(rf))?('{3}|\"{3}|['\"]))", "i")
) : (
c = l.identifiers || /^[_A-Za-z][_A-Za-z0-9]*/,
n = n.concat(["exec", "print"]),
r = r.concat(["apply", "basestring", "buffer", "cmp", "coerce", "execfile", "file", "intern", "long", "raw_input", "reduce", "reload", "unichr", "unicode", "xrange", "False", "True", "None"]),
new RegExp("^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i")
);
var kRegExp = k(n), m = k(r);
function i(e, t) {
var n, r = e.sol() && "\\" !== t.lastToken;
if (r) {
t.indent = e.indentation();
}
if (r && "py" === w(t).type) {
r = w(t).offset;
return e.eatSpace() ? (r < (n = e.indentation()) ? b(t) : (n < r && y(e, t) && "#" !== e.peek() && (t.errorToken = true), null)) : (n = h(e, t), r > 0 && y(e, t) && (n += " " + s), n);
}
return h(e, t);
}
function h(e, t, n) {
if (e.eatSpace()) return null;
if (!n && e.match(/^#.*/)) return "comment";
if (e.match(/^[0-9\.]/, false)) {
var r = false;
if (e.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i) && (r = true), e.match(/^[\d_]+\.\d*/)) {
return e.eat(/J/i), "number";
}
}
if (e.match(u)) return s;
if (e.match(a)) return "operator";
if (e.match(o)) return "punctuation";
return e.match(c) ? ("def" === t.lastToken || "class" === t.lastToken ? "def" : "variable") : null;
}
function b(e) {
while ("py" !== w(e).type) {
e.scopes.pop();
}
e.scopes.push({ offset: w(e).offset + t.indentUnit, type: "py", align: null });
}
function y(e, t) {
for (var n = e.indentation(); 1 < t.scopes.length && w(t).offset > n;) {
if ("py" !== w(t).type) return true;
t.scopes.pop();
}
return w(t).offset !== n;
}
return {
startState: function (e) {
return {
tokenize: i,
scopes: [{ offset: e || 0, type: "py", align: null }],
indent: e || 0,
lastToken: null,
lambda: false,
dedent: 0
};
},
token: function (e, t) {
var n = t.errorToken, r = g(e, t);
return n && (t.errorToken = false), r && "comment" !== r && (t.lastToken = "keyword" === r || "punctuation" === r ? e.current() : r), "punctuation" === r && (r = null), e.eol() && t.lambda && (t.lambda = false), n ? r + " " + s : r;
},
indent: function (e, t) {
if (e.tokenize !== i) return e.tokenize.isString ? x.Pass : 0;
var n = w(e);
return n.type === t.charAt(0) || "py" === n.type && !e.dedent && /^(else:|elif |except |finally:)/.test(t) ? n.align - 1 : n.offset;
},
electricInput: /^\s*([\}\]\)]|else:|elif |except |finally:)$/,
closeBrackets: { triples: "'\"" },
lineComment: "#",
fold: "indent"
};
});
x.defineMIME("text/x-python", "python");
x.defineMIME("text/x-cython", {
name: "python",
extra_keywords: "by cdef cimport cpdef ctypedef enum except extern gil include nogil property public readonly struct union DEF IF ELIF ELSE".split(" ")
});
});