9 changed files with 568 additions and 5 deletions
@ -0,0 +1,434 @@
|
||||
.CodeMirror { |
||||
font-family: monospace; |
||||
height: 300px; |
||||
color: #000; |
||||
direction: ltr; |
||||
position: relative; |
||||
overflow: hidden; |
||||
background: #fff; |
||||
} |
||||
|
||||
.CodeMirror-lines { |
||||
padding: 4px 0; |
||||
} |
||||
|
||||
.CodeMirror pre.CodeMirror-line, |
||||
.CodeMirror pre.CodeMirror-line-like { |
||||
padding: 0 4px; |
||||
} |
||||
|
||||
.CodeMirror-gutter-filler, |
||||
.CodeMirror-scrollbar-filler { |
||||
background-color: #fff; |
||||
} |
||||
|
||||
.CodeMirror-gutters { |
||||
border-right: 1px solid #ddd; |
||||
background-color: #f7f7f7; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.CodeMirror-linenumber { |
||||
padding: 0 3px 0 5px; |
||||
min-width: 20px; |
||||
text-align: right; |
||||
color: #999; |
||||
white-space: nowrap; |
||||
} |
||||
|
||||
.CodeMirror-guttermarker { |
||||
color: #000; |
||||
} |
||||
|
||||
.CodeMirror-guttermarker-subtle { |
||||
color: #999; |
||||
} |
||||
|
||||
.CodeMirror-cursor { |
||||
border-left: 1px solid #000; |
||||
border-right: none; |
||||
width: 0; |
||||
} |
||||
|
||||
div.CodeMirror-secondarycursor { |
||||
border-left: 1px solid silver; |
||||
} |
||||
|
||||
.cm-fat-cursor .CodeMirror-cursor { |
||||
width: auto; |
||||
border: 0 !important; |
||||
background: #7e7; |
||||
} |
||||
|
||||
.cm-fat-cursor div.CodeMirror-cursors { |
||||
z-index: 1; |
||||
} |
||||
|
||||
.cm-fat-cursor .CodeMirror-line::selection, |
||||
.cm-fat-cursor .CodeMirror-line > span::selection, |
||||
.cm-fat-cursor .CodeMirror-line > span > span::selection { |
||||
background: transparent; |
||||
} |
||||
|
||||
.cm-fat-cursor .CodeMirror-line::-moz-selection, |
||||
.cm-fat-cursor .CodeMirror-line > span::-moz-selection, |
||||
.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { |
||||
background: transparent; |
||||
} |
||||
|
||||
.cm-fat-cursor { |
||||
caret-color: transparent; |
||||
} |
||||
|
||||
@-moz-keyframes blink { |
||||
50% { |
||||
background-color: transparent; |
||||
} |
||||
} |
||||
|
||||
@-webkit-keyframes blink { |
||||
50% { |
||||
background-color: transparent; |
||||
} |
||||
} |
||||
|
||||
@keyframes blink { |
||||
50% { |
||||
background-color: transparent; |
||||
} |
||||
} |
||||
|
||||
.cm-tab { |
||||
display: inline-block; |
||||
text-decoration: inherit; |
||||
} |
||||
|
||||
.CodeMirror-rulers { |
||||
position: absolute; |
||||
left: 0; |
||||
right: 0; |
||||
top: -50px; |
||||
bottom: 0; |
||||
overflow: hidden; |
||||
} |
||||
|
||||
.CodeMirror-ruler { |
||||
border-left: 1px solid #ccc; |
||||
top: 0; |
||||
bottom: 0; |
||||
position: absolute; |
||||
} |
||||
|
||||
.cm-s-default .cm-header { |
||||
color: #00f; |
||||
} |
||||
|
||||
.cm-s-default .cm-quote { |
||||
color: #090; |
||||
} |
||||
|
||||
.cm-negative { |
||||
color: #d44; |
||||
} |
||||
|
||||
.cm-positive { |
||||
color: #292; |
||||
} |
||||
|
||||
.cm-header, |
||||
.cm-strong { |
||||
font-weight: 700; |
||||
} |
||||
|
||||
.cm-em { |
||||
font-style: italic; |
||||
} |
||||
|
||||
.cm-link { |
||||
text-decoration: underline; |
||||
} |
||||
|
||||
.cm-strikethrough { |
||||
text-decoration: line-through; |
||||
} |
||||
|
||||
.cm-s-default .cm-keyword { |
||||
color: #708; |
||||
} |
||||
|
||||
.cm-s-default .cm-atom { |
||||
color: #219; |
||||
} |
||||
|
||||
.cm-s-default .cm-number { |
||||
color: #164; |
||||
} |
||||
|
||||
.cm-s-default .cm-def { |
||||
color: #00f; |
||||
} |
||||
|
||||
.cm-s-default .cm-variable-2 { |
||||
color: #05a; |
||||
} |
||||
|
||||
.cm-s-default .cm-type, |
||||
.cm-s-default .cm-variable-3 { |
||||
color: #085; |
||||
} |
||||
|
||||
.cm-s-default .cm-comment { |
||||
color: #a50; |
||||
} |
||||
|
||||
.cm-s-default .cm-string { |
||||
color: #a11; |
||||
} |
||||
|
||||
.cm-s-default .cm-string-2 { |
||||
color: #f50; |
||||
} |
||||
|
||||
.cm-s-default .cm-meta, |
||||
.cm-s-default .cm-qualifier { |
||||
color: #555; |
||||
} |
||||
|
||||
.cm-s-default .cm-builtin { |
||||
color: #30a; |
||||
} |
||||
|
||||
.cm-s-default .cm-bracket { |
||||
color: #997; |
||||
} |
||||
|
||||
.cm-s-default .cm-tag { |
||||
color: #170; |
||||
} |
||||
|
||||
.cm-s-default .cm-attribute, |
||||
.cm-s-default .cm-link { |
||||
color: #00c; |
||||
} |
||||
|
||||
.cm-s-default .cm-hr { |
||||
color: #999; |
||||
} |
||||
|
||||
.cm-s-default .cm-error, |
||||
.cm-invalidchar { |
||||
color: red; |
||||
} |
||||
|
||||
.CodeMirror-composing { |
||||
border-bottom: 2px solid; |
||||
} |
||||
|
||||
div.CodeMirror span.CodeMirror-matchingbracket { |
||||
color: #0b0; |
||||
} |
||||
|
||||
div.CodeMirror span.CodeMirror-nonmatchingbracket { |
||||
color: #a22; |
||||
} |
||||
|
||||
.CodeMirror-matchingtag { |
||||
background: rgba(255, 150, 0, 0.3); |
||||
} |
||||
|
||||
.CodeMirror-activeline-background { |
||||
background: #e8f2ff; |
||||
} |
||||
|
||||
.CodeMirror-scroll { |
||||
overflow: scroll !important; |
||||
margin-bottom: -50px; |
||||
margin-right: -50px; |
||||
padding-bottom: 50px; |
||||
height: 100%; |
||||
outline: 0; |
||||
position: relative; |
||||
z-index: 0; |
||||
} |
||||
|
||||
.CodeMirror-sizer { |
||||
position: relative; |
||||
border-right: 50px solid transparent; |
||||
} |
||||
|
||||
.CodeMirror-gutter-filler, |
||||
.CodeMirror-hscrollbar, |
||||
.CodeMirror-scrollbar-filler, |
||||
.CodeMirror-vscrollbar { |
||||
position: absolute; |
||||
z-index: 6; |
||||
display: none; |
||||
outline: 0; |
||||
} |
||||
|
||||
.CodeMirror-vscrollbar { |
||||
right: 0; |
||||
top: 0; |
||||
overflow-x: hidden; |
||||
overflow-y: scroll; |
||||
} |
||||
|
||||
.CodeMirror-hscrollbar { |
||||
bottom: 0; |
||||
left: 0; |
||||
overflow-y: hidden; |
||||
overflow-x: scroll; |
||||
} |
||||
|
||||
.CodeMirror-scrollbar-filler { |
||||
right: 0; |
||||
bottom: 0; |
||||
} |
||||
|
||||
.CodeMirror-gutter-filler { |
||||
left: 0; |
||||
bottom: 0; |
||||
} |
||||
|
||||
.CodeMirror-gutters { |
||||
position: absolute; |
||||
left: 0; |
||||
top: 0; |
||||
min-height: 100%; |
||||
z-index: 3; |
||||
} |
||||
|
||||
.CodeMirror-gutter { |
||||
white-space: normal; |
||||
height: 100%; |
||||
display: inline-block; |
||||
vertical-align: top; |
||||
margin-bottom: -50px; |
||||
} |
||||
|
||||
.CodeMirror-gutter-wrapper { |
||||
position: absolute; |
||||
z-index: 4; |
||||
background: transparent !important; |
||||
border: none !important; |
||||
} |
||||
|
||||
.CodeMirror-gutter-background { |
||||
position: absolute; |
||||
top: 0; |
||||
bottom: 0; |
||||
z-index: 4; |
||||
} |
||||
|
||||
.CodeMirror-gutter-elt { |
||||
position: absolute; |
||||
cursor: default; |
||||
z-index: 4; |
||||
} |
||||
|
||||
.CodeMirror-gutter-wrapper ::selection, |
||||
.CodeMirror-gutter-wrapper ::-moz-selection { |
||||
background-color: transparent; |
||||
} |
||||
|
||||
.CodeMirror-lines { |
||||
cursor: text; |
||||
min-height: 1px; |
||||
} |
||||
|
||||
.CodeMirror pre.CodeMirror-line, |
||||
.CodeMirror pre.CodeMirror-line-like { |
||||
border-radius: 0; |
||||
border-width: 0; |
||||
background: transparent; |
||||
font-family: inherit; |
||||
font-size: inherit; |
||||
margin: 0; |
||||
white-space: pre; |
||||
word-wrap: normal; |
||||
line-height: inherit; |
||||
color: inherit; |
||||
z-index: 2; |
||||
position: relative; |
||||
overflow: visible; |
||||
-webkit-tap-highlight-color: transparent; |
||||
-webkit-font-variant-ligatures: contextual; |
||||
font-variant-ligatures: contextual; |
||||
} |
||||
|
||||
.CodeMirror-wrap pre.CodeMirror-line, |
||||
.CodeMirror-wrap pre.CodeMirror-line-like { |
||||
word-wrap: break-word; |
||||
white-space: pre-wrap; |
||||
word-break: normal; |
||||
} |
||||
|
||||
.CodeMirror-linebackground { |
||||
position: absolute; |
||||
left: 0; |
||||
right: 0; |
||||
top: 0; |
||||
bottom: 0; |
||||
z-index: 0; |
||||
} |
||||
|
||||
.CodeMirror-linewidget { |
||||
position: relative; |
||||
z-index: 2; |
||||
padding: 0.1px; |
||||
} |
||||
|
||||
.CodeMirror-rtl pre { |
||||
direction: rtl; |
||||
} |
||||
|
||||
.CodeMirror-code { |
||||
outline: 0; |
||||
} |
||||
|
||||
.CodeMirror-selected { |
||||
background: #d9d9d9; |
||||
} |
||||
|
||||
.CodeMirror-focused .CodeMirror-selected { |
||||
background: #d7d4f0; |
||||
} |
||||
|
||||
.CodeMirror-crosshair { |
||||
cursor: crosshair; |
||||
} |
||||
|
||||
.CodeMirror-line::selection, |
||||
.CodeMirror-line > span::selection, |
||||
.CodeMirror-line > span > span::selection { |
||||
background: #d7d4f0; |
||||
} |
||||
|
||||
.CodeMirror-line::-moz-selection, |
||||
.CodeMirror-line > span::-moz-selection, |
||||
.CodeMirror-line > span > span::-moz-selection { |
||||
background: #d7d4f0; |
||||
} |
||||
|
||||
.cm-searching { |
||||
background-color: #ffa; |
||||
background-color: rgba(255, 255, 0, 0.4); |
||||
} |
||||
|
||||
.cm-force-border { |
||||
padding-right: 0.1px; |
||||
} |
||||
|
||||
@media print { |
||||
.CodeMirror div.CodeMirror-cursors { |
||||
visibility: hidden; |
||||
} |
||||
} |
||||
|
||||
.cm-tab-wrap-hack:after { |
||||
content: ''; |
||||
} |
||||
|
||||
span.CodeMirror-selectedtext { |
||||
background: transparent; |
||||
} |
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,125 @@
|
||||
(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(" ") |
||||
}); |
||||
}); |
||||
Loading…
Reference in new issue