llms-py 2.0.9__py3-none-any.whl → 3.0.10__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (194) hide show
  1. llms/__init__.py +4 -0
  2. llms/__main__.py +9 -0
  3. llms/db.py +359 -0
  4. llms/extensions/analytics/ui/index.mjs +1444 -0
  5. llms/extensions/app/README.md +20 -0
  6. llms/extensions/app/__init__.py +589 -0
  7. llms/extensions/app/db.py +536 -0
  8. {llms_py-2.0.9.data/data → llms/extensions/app}/ui/Recents.mjs +100 -73
  9. llms_py-2.0.9.data/data/ui/Sidebar.mjs → llms/extensions/app/ui/index.mjs +150 -79
  10. llms/extensions/app/ui/threadStore.mjs +433 -0
  11. llms/extensions/core_tools/CALCULATOR.md +32 -0
  12. llms/extensions/core_tools/__init__.py +637 -0
  13. llms/extensions/core_tools/ui/codemirror/addon/edit/closebrackets.js +201 -0
  14. llms/extensions/core_tools/ui/codemirror/addon/edit/closetag.js +185 -0
  15. llms/extensions/core_tools/ui/codemirror/addon/edit/continuelist.js +101 -0
  16. llms/extensions/core_tools/ui/codemirror/addon/edit/matchbrackets.js +160 -0
  17. llms/extensions/core_tools/ui/codemirror/addon/edit/matchtags.js +66 -0
  18. llms/extensions/core_tools/ui/codemirror/addon/edit/trailingspace.js +27 -0
  19. llms/extensions/core_tools/ui/codemirror/addon/selection/active-line.js +72 -0
  20. llms/extensions/core_tools/ui/codemirror/addon/selection/mark-selection.js +119 -0
  21. llms/extensions/core_tools/ui/codemirror/addon/selection/selection-pointer.js +98 -0
  22. llms/extensions/core_tools/ui/codemirror/codemirror.css +344 -0
  23. llms/extensions/core_tools/ui/codemirror/codemirror.js +9884 -0
  24. llms/extensions/core_tools/ui/codemirror/doc/docs.css +225 -0
  25. llms/extensions/core_tools/ui/codemirror/doc/source_sans.woff +0 -0
  26. llms/extensions/core_tools/ui/codemirror/mode/clike/clike.js +942 -0
  27. llms/extensions/core_tools/ui/codemirror/mode/javascript/index.html +118 -0
  28. llms/extensions/core_tools/ui/codemirror/mode/javascript/javascript.js +962 -0
  29. llms/extensions/core_tools/ui/codemirror/mode/javascript/typescript.html +62 -0
  30. llms/extensions/core_tools/ui/codemirror/mode/python/python.js +402 -0
  31. llms/extensions/core_tools/ui/codemirror/theme/dracula.css +40 -0
  32. llms/extensions/core_tools/ui/codemirror/theme/mocha.css +135 -0
  33. llms/extensions/core_tools/ui/index.mjs +650 -0
  34. llms/extensions/gallery/README.md +61 -0
  35. llms/extensions/gallery/__init__.py +63 -0
  36. llms/extensions/gallery/db.py +243 -0
  37. llms/extensions/gallery/ui/index.mjs +482 -0
  38. llms/extensions/katex/README.md +39 -0
  39. llms/extensions/katex/__init__.py +6 -0
  40. llms/extensions/katex/ui/README.md +125 -0
  41. llms/extensions/katex/ui/contrib/auto-render.js +338 -0
  42. llms/extensions/katex/ui/contrib/auto-render.min.js +1 -0
  43. llms/extensions/katex/ui/contrib/auto-render.mjs +244 -0
  44. llms/extensions/katex/ui/contrib/copy-tex.js +127 -0
  45. llms/extensions/katex/ui/contrib/copy-tex.min.js +1 -0
  46. llms/extensions/katex/ui/contrib/copy-tex.mjs +105 -0
  47. llms/extensions/katex/ui/contrib/mathtex-script-type.js +109 -0
  48. llms/extensions/katex/ui/contrib/mathtex-script-type.min.js +1 -0
  49. llms/extensions/katex/ui/contrib/mathtex-script-type.mjs +24 -0
  50. llms/extensions/katex/ui/contrib/mhchem.js +3213 -0
  51. llms/extensions/katex/ui/contrib/mhchem.min.js +1 -0
  52. llms/extensions/katex/ui/contrib/mhchem.mjs +3109 -0
  53. llms/extensions/katex/ui/contrib/render-a11y-string.js +887 -0
  54. llms/extensions/katex/ui/contrib/render-a11y-string.min.js +1 -0
  55. llms/extensions/katex/ui/contrib/render-a11y-string.mjs +800 -0
  56. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.ttf +0 -0
  57. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff +0 -0
  58. llms/extensions/katex/ui/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  59. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.ttf +0 -0
  60. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff +0 -0
  61. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  62. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.ttf +0 -0
  63. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff +0 -0
  64. llms/extensions/katex/ui/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  65. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.ttf +0 -0
  66. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff +0 -0
  67. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  68. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.ttf +0 -0
  69. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff +0 -0
  70. llms/extensions/katex/ui/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  71. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.ttf +0 -0
  72. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff +0 -0
  73. llms/extensions/katex/ui/fonts/KaTeX_Main-Bold.woff2 +0 -0
  74. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.ttf +0 -0
  75. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff +0 -0
  76. llms/extensions/katex/ui/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  77. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.ttf +0 -0
  78. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff +0 -0
  79. llms/extensions/katex/ui/fonts/KaTeX_Main-Italic.woff2 +0 -0
  80. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.ttf +0 -0
  81. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff +0 -0
  82. llms/extensions/katex/ui/fonts/KaTeX_Main-Regular.woff2 +0 -0
  83. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.ttf +0 -0
  84. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff +0 -0
  85. llms/extensions/katex/ui/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  86. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.ttf +0 -0
  87. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff +0 -0
  88. llms/extensions/katex/ui/fonts/KaTeX_Math-Italic.woff2 +0 -0
  89. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.ttf +0 -0
  90. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff +0 -0
  91. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  92. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.ttf +0 -0
  93. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff +0 -0
  94. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  95. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.ttf +0 -0
  96. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff +0 -0
  97. llms/extensions/katex/ui/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  98. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.ttf +0 -0
  99. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff +0 -0
  100. llms/extensions/katex/ui/fonts/KaTeX_Script-Regular.woff2 +0 -0
  101. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.ttf +0 -0
  102. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff +0 -0
  103. llms/extensions/katex/ui/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  104. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.ttf +0 -0
  105. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff +0 -0
  106. llms/extensions/katex/ui/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  107. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.ttf +0 -0
  108. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff +0 -0
  109. llms/extensions/katex/ui/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  110. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.ttf +0 -0
  111. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff +0 -0
  112. llms/extensions/katex/ui/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  113. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.ttf +0 -0
  114. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff +0 -0
  115. llms/extensions/katex/ui/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  116. llms/extensions/katex/ui/index.mjs +92 -0
  117. llms/extensions/katex/ui/katex-swap.css +1230 -0
  118. llms/extensions/katex/ui/katex-swap.min.css +1 -0
  119. llms/extensions/katex/ui/katex.css +1230 -0
  120. llms/extensions/katex/ui/katex.js +19080 -0
  121. llms/extensions/katex/ui/katex.min.css +1 -0
  122. llms/extensions/katex/ui/katex.min.js +1 -0
  123. llms/extensions/katex/ui/katex.min.mjs +1 -0
  124. llms/extensions/katex/ui/katex.mjs +18547 -0
  125. llms/extensions/providers/__init__.py +22 -0
  126. llms/extensions/providers/anthropic.py +233 -0
  127. llms/extensions/providers/cerebras.py +37 -0
  128. llms/extensions/providers/chutes.py +153 -0
  129. llms/extensions/providers/google.py +481 -0
  130. llms/extensions/providers/nvidia.py +103 -0
  131. llms/extensions/providers/openai.py +154 -0
  132. llms/extensions/providers/openrouter.py +74 -0
  133. llms/extensions/providers/zai.py +182 -0
  134. llms/extensions/system_prompts/README.md +22 -0
  135. llms/extensions/system_prompts/__init__.py +45 -0
  136. llms/extensions/system_prompts/ui/index.mjs +280 -0
  137. llms/extensions/system_prompts/ui/prompts.json +1067 -0
  138. llms/extensions/tools/__init__.py +144 -0
  139. llms/extensions/tools/ui/index.mjs +706 -0
  140. llms/index.html +58 -0
  141. llms/llms.json +400 -0
  142. llms/main.py +4407 -0
  143. llms/providers-extra.json +394 -0
  144. llms/providers.json +1 -0
  145. llms/ui/App.mjs +188 -0
  146. llms/ui/ai.mjs +217 -0
  147. llms/ui/app.css +7081 -0
  148. llms/ui/ctx.mjs +412 -0
  149. llms/ui/index.mjs +131 -0
  150. llms/ui/lib/chart.js +14 -0
  151. llms/ui/lib/charts.mjs +16 -0
  152. llms/ui/lib/color.js +14 -0
  153. llms/ui/lib/servicestack-vue.mjs +37 -0
  154. llms/ui/lib/vue.min.mjs +13 -0
  155. llms/ui/lib/vue.mjs +18530 -0
  156. {llms_py-2.0.9.data/data → llms}/ui/markdown.mjs +33 -15
  157. llms/ui/modules/chat/ChatBody.mjs +976 -0
  158. llms/ui/modules/chat/SettingsDialog.mjs +374 -0
  159. llms/ui/modules/chat/index.mjs +991 -0
  160. llms/ui/modules/icons.mjs +46 -0
  161. llms/ui/modules/layout.mjs +271 -0
  162. llms/ui/modules/model-selector.mjs +811 -0
  163. llms/ui/tailwind.input.css +742 -0
  164. {llms_py-2.0.9.data/data → llms}/ui/typography.css +133 -7
  165. llms/ui/utils.mjs +261 -0
  166. llms_py-3.0.10.dist-info/METADATA +49 -0
  167. llms_py-3.0.10.dist-info/RECORD +177 -0
  168. llms_py-3.0.10.dist-info/entry_points.txt +2 -0
  169. {llms_py-2.0.9.dist-info → llms_py-3.0.10.dist-info}/licenses/LICENSE +1 -2
  170. llms.py +0 -1402
  171. llms_py-2.0.9.data/data/index.html +0 -64
  172. llms_py-2.0.9.data/data/llms.json +0 -447
  173. llms_py-2.0.9.data/data/requirements.txt +0 -1
  174. llms_py-2.0.9.data/data/ui/App.mjs +0 -20
  175. llms_py-2.0.9.data/data/ui/ChatPrompt.mjs +0 -389
  176. llms_py-2.0.9.data/data/ui/Main.mjs +0 -680
  177. llms_py-2.0.9.data/data/ui/app.css +0 -3951
  178. llms_py-2.0.9.data/data/ui/lib/servicestack-vue.min.mjs +0 -37
  179. llms_py-2.0.9.data/data/ui/lib/vue.min.mjs +0 -12
  180. llms_py-2.0.9.data/data/ui/tailwind.input.css +0 -261
  181. llms_py-2.0.9.data/data/ui/threadStore.mjs +0 -273
  182. llms_py-2.0.9.data/data/ui/utils.mjs +0 -114
  183. llms_py-2.0.9.data/data/ui.json +0 -1069
  184. llms_py-2.0.9.dist-info/METADATA +0 -941
  185. llms_py-2.0.9.dist-info/RECORD +0 -30
  186. llms_py-2.0.9.dist-info/entry_points.txt +0 -2
  187. {llms_py-2.0.9.data/data → llms}/ui/fav.svg +0 -0
  188. {llms_py-2.0.9.data/data → llms}/ui/lib/highlight.min.mjs +0 -0
  189. {llms_py-2.0.9.data/data → llms}/ui/lib/idb.min.mjs +0 -0
  190. {llms_py-2.0.9.data/data → llms}/ui/lib/marked.min.mjs +0 -0
  191. /llms_py-2.0.9.data/data/ui/lib/servicestack-client.min.mjs → /llms/ui/lib/servicestack-client.mjs +0 -0
  192. {llms_py-2.0.9.data/data → llms}/ui/lib/vue-router.min.mjs +0 -0
  193. {llms_py-2.0.9.dist-info → llms_py-3.0.10.dist-info}/WHEEL +0 -0
  194. {llms_py-2.0.9.dist-info → llms_py-3.0.10.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,62 @@
1
+ <!doctype html>
2
+
3
+ <title>CodeMirror: TypeScript mode</title>
4
+ <meta charset="utf-8"/>
5
+ <link rel=stylesheet href="../../doc/docs.css">
6
+
7
+ <link rel="stylesheet" href="../../lib/codemirror.css">
8
+ <script src="../../lib/codemirror.js"></script>
9
+ <script src="../../addon/edit/matchbrackets.js"></script>
10
+ <script src="javascript.js"></script>
11
+ <style>.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
12
+ <div id=nav>
13
+ <a href="https://codemirror.net/5"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png" alt=""></a>
14
+
15
+ <ul>
16
+ <li><a href="../../index.html">Home</a>
17
+ <li><a href="../../doc/manual.html">Manual</a>
18
+ <li><a href="https://github.com/codemirror/codemirror5">Code</a>
19
+ </ul>
20
+ <ul>
21
+ <li><a href="../index.html">Language modes</a>
22
+ <li><a class=active href="#">TypeScript</a>
23
+ </ul>
24
+ </div>
25
+
26
+ <article>
27
+ <h2>TypeScript mode</h2>
28
+
29
+
30
+ <div><textarea id="code" name="code">
31
+ class Greeter {
32
+ greeting: string;
33
+ constructor (message: string) {
34
+ this.greeting = message;
35
+ }
36
+ greet() {
37
+ return "Hello, " + this.greeting;
38
+ }
39
+ }
40
+
41
+ var greeter = new Greeter("world");
42
+
43
+ var button = document.createElement('button')
44
+ button.innerText = "Say Hello"
45
+ button.onclick = function() {
46
+ alert(greeter.greet())
47
+ }
48
+
49
+ document.body.appendChild(button)
50
+
51
+ </textarea></div>
52
+
53
+ <script>
54
+ var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
55
+ lineNumbers: true,
56
+ matchBrackets: true,
57
+ mode: "text/typescript"
58
+ });
59
+ </script>
60
+
61
+ <p>This is a specialization of the <a href="index.html">JavaScript mode</a>.</p>
62
+ </article>
@@ -0,0 +1,402 @@
1
+ // CodeMirror, copyright (c) by Marijn Haverbeke and others
2
+ // Distributed under an MIT license: https://codemirror.net/5/LICENSE
3
+
4
+ (function(mod) {
5
+ if (typeof exports == "object" && typeof module == "object") // CommonJS
6
+ mod(require("../../lib/codemirror"));
7
+ else if (typeof define == "function" && define.amd) // AMD
8
+ define(["../../lib/codemirror"], mod);
9
+ else // Plain browser env
10
+ mod(CodeMirror);
11
+ })(function(CodeMirror) {
12
+ "use strict";
13
+
14
+ function wordRegexp(words) {
15
+ return new RegExp("^((" + words.join(")|(") + "))\\b");
16
+ }
17
+
18
+ var wordOperators = wordRegexp(["and", "or", "not", "is"]);
19
+ var commonKeywords = ["as", "assert", "break", "class", "continue",
20
+ "def", "del", "elif", "else", "except", "finally",
21
+ "for", "from", "global", "if", "import",
22
+ "lambda", "pass", "raise", "return",
23
+ "try", "while", "with", "yield", "in", "False", "True"];
24
+ var commonBuiltins = ["abs", "all", "any", "bin", "bool", "bytearray", "callable", "chr",
25
+ "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod",
26
+ "enumerate", "eval", "filter", "float", "format", "frozenset",
27
+ "getattr", "globals", "hasattr", "hash", "help", "hex", "id",
28
+ "input", "int", "isinstance", "issubclass", "iter", "len",
29
+ "list", "locals", "map", "max", "memoryview", "min", "next",
30
+ "object", "oct", "open", "ord", "pow", "property", "range",
31
+ "repr", "reversed", "round", "set", "setattr", "slice",
32
+ "sorted", "staticmethod", "str", "sum", "super", "tuple",
33
+ "type", "vars", "zip", "__import__", "NotImplemented",
34
+ "Ellipsis", "__debug__"];
35
+ CodeMirror.registerHelper("hintWords", "python", commonKeywords.concat(commonBuiltins).concat(["exec", "print"]));
36
+
37
+ function top(state) {
38
+ return state.scopes[state.scopes.length - 1];
39
+ }
40
+
41
+ CodeMirror.defineMode("python", function(conf, parserConf) {
42
+ var ERRORCLASS = "error";
43
+
44
+ var delimiters = parserConf.delimiters || parserConf.singleDelimiters || /^[\(\)\[\]\{\}@,:`=;\.\\]/;
45
+ // (Backwards-compatibility with old, cumbersome config system)
46
+ var operators = [parserConf.singleOperators, parserConf.doubleOperators, parserConf.doubleDelimiters, parserConf.tripleDelimiters,
47
+ parserConf.operators || /^([-+*/%\/&|^]=?|[<>=]+|\/\/=?|\*\*=?|!=|[~!@]|\.\.\.)/]
48
+ for (var i = 0; i < operators.length; i++) if (!operators[i]) operators.splice(i--, 1)
49
+
50
+ var hangingIndent = parserConf.hangingIndent || conf.indentUnit;
51
+
52
+ var myKeywords = commonKeywords, myBuiltins = commonBuiltins;
53
+ if (parserConf.extra_keywords != undefined)
54
+ myKeywords = myKeywords.concat(parserConf.extra_keywords);
55
+
56
+ if (parserConf.extra_builtins != undefined)
57
+ myBuiltins = myBuiltins.concat(parserConf.extra_builtins);
58
+
59
+ var py3 = !(parserConf.version && Number(parserConf.version) < 3)
60
+ if (py3) {
61
+ // since http://legacy.python.org/dev/peps/pep-0465/ @ is also an operator
62
+ var identifiers = parserConf.identifiers|| /^[_A-Za-z\u00A1-\uFFFF][_A-Za-z0-9\u00A1-\uFFFF]*/;
63
+ myKeywords = myKeywords.concat(["nonlocal", "None", "aiter", "anext", "async", "await", "breakpoint", "match", "case"]);
64
+ myBuiltins = myBuiltins.concat(["ascii", "bytes", "exec", "print"]);
65
+ var stringPrefixes = new RegExp("^(([rbuf]|(br)|(rb)|(fr)|(rf))?('{3}|\"{3}|['\"]))", "i");
66
+ } else {
67
+ var identifiers = parserConf.identifiers|| /^[_A-Za-z][_A-Za-z0-9]*/;
68
+ myKeywords = myKeywords.concat(["exec", "print"]);
69
+ myBuiltins = myBuiltins.concat(["apply", "basestring", "buffer", "cmp", "coerce", "execfile",
70
+ "file", "intern", "long", "raw_input", "reduce", "reload",
71
+ "unichr", "unicode", "xrange", "None"]);
72
+ var stringPrefixes = new RegExp("^(([rubf]|(ur)|(br))?('{3}|\"{3}|['\"]))", "i");
73
+ }
74
+ var keywords = wordRegexp(myKeywords);
75
+ var builtins = wordRegexp(myBuiltins);
76
+
77
+ // tokenizers
78
+ function tokenBase(stream, state) {
79
+ var sol = stream.sol() && state.lastToken != "\\"
80
+ if (sol) state.indent = stream.indentation()
81
+ // Handle scope changes
82
+ if (sol && top(state).type == "py") {
83
+ var scopeOffset = top(state).offset;
84
+ if (stream.eatSpace()) {
85
+ var lineOffset = stream.indentation();
86
+ if (lineOffset > scopeOffset)
87
+ pushPyScope(state);
88
+ else if (lineOffset < scopeOffset && dedent(stream, state) && stream.peek() != "#")
89
+ state.errorToken = true;
90
+ return null;
91
+ } else {
92
+ var style = tokenBaseInner(stream, state);
93
+ if (scopeOffset > 0 && dedent(stream, state))
94
+ style += " " + ERRORCLASS;
95
+ return style;
96
+ }
97
+ }
98
+ return tokenBaseInner(stream, state);
99
+ }
100
+
101
+ function tokenBaseInner(stream, state, inFormat) {
102
+ if (stream.eatSpace()) return null;
103
+
104
+ // Handle Comments
105
+ if (!inFormat && stream.match(/^#.*/)) return "comment";
106
+
107
+ // Handle Number Literals
108
+ if (stream.match(/^[0-9\.]/, false)) {
109
+ var floatLiteral = false;
110
+ // Floats
111
+ if (stream.match(/^[\d_]*\.\d+(e[\+\-]?\d+)?/i)) { floatLiteral = true; }
112
+ if (stream.match(/^[\d_]+\.\d*/)) { floatLiteral = true; }
113
+ if (stream.match(/^\.\d+/)) { floatLiteral = true; }
114
+ if (floatLiteral) {
115
+ // Float literals may be "imaginary"
116
+ stream.eat(/J/i);
117
+ return "number";
118
+ }
119
+ // Integers
120
+ var intLiteral = false;
121
+ // Hex
122
+ if (stream.match(/^0x[0-9a-f_]+/i)) intLiteral = true;
123
+ // Binary
124
+ if (stream.match(/^0b[01_]+/i)) intLiteral = true;
125
+ // Octal
126
+ if (stream.match(/^0o[0-7_]+/i)) intLiteral = true;
127
+ // Decimal
128
+ if (stream.match(/^[1-9][\d_]*(e[\+\-]?[\d_]+)?/)) {
129
+ // Decimal literals may be "imaginary"
130
+ stream.eat(/J/i);
131
+ // TODO - Can you have imaginary longs?
132
+ intLiteral = true;
133
+ }
134
+ // Zero by itself with no other piece of number.
135
+ if (stream.match(/^0(?![\dx])/i)) intLiteral = true;
136
+ if (intLiteral) {
137
+ // Integer literals may be "long"
138
+ stream.eat(/L/i);
139
+ return "number";
140
+ }
141
+ }
142
+
143
+ // Handle Strings
144
+ if (stream.match(stringPrefixes)) {
145
+ var isFmtString = stream.current().toLowerCase().indexOf('f') !== -1;
146
+ if (!isFmtString) {
147
+ state.tokenize = tokenStringFactory(stream.current(), state.tokenize);
148
+ return state.tokenize(stream, state);
149
+ } else {
150
+ state.tokenize = formatStringFactory(stream.current(), state.tokenize);
151
+ return state.tokenize(stream, state);
152
+ }
153
+ }
154
+
155
+ for (var i = 0; i < operators.length; i++)
156
+ if (stream.match(operators[i])) return "operator"
157
+
158
+ if (stream.match(delimiters)) return "punctuation";
159
+
160
+ if (state.lastToken == "." && stream.match(identifiers))
161
+ return "property";
162
+
163
+ if (stream.match(keywords) || stream.match(wordOperators))
164
+ return "keyword";
165
+
166
+ if (stream.match(builtins))
167
+ return "builtin";
168
+
169
+ if (stream.match(/^(self|cls)\b/))
170
+ return "variable-2";
171
+
172
+ if (stream.match(identifiers)) {
173
+ if (state.lastToken == "def" || state.lastToken == "class")
174
+ return "def";
175
+ return "variable";
176
+ }
177
+
178
+ // Handle non-detected items
179
+ stream.next();
180
+ return inFormat ? null :ERRORCLASS;
181
+ }
182
+
183
+ function formatStringFactory(delimiter, tokenOuter) {
184
+ while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)
185
+ delimiter = delimiter.substr(1);
186
+
187
+ var singleline = delimiter.length == 1;
188
+ var OUTCLASS = "string";
189
+
190
+ function tokenNestedExpr(depth) {
191
+ return function(stream, state) {
192
+ var inner = tokenBaseInner(stream, state, true)
193
+ if (inner == "punctuation") {
194
+ if (stream.current() == "{") {
195
+ state.tokenize = tokenNestedExpr(depth + 1)
196
+ } else if (stream.current() == "}") {
197
+ if (depth > 1) state.tokenize = tokenNestedExpr(depth - 1)
198
+ else state.tokenize = tokenString
199
+ }
200
+ }
201
+ return inner
202
+ }
203
+ }
204
+
205
+ function tokenString(stream, state) {
206
+ while (!stream.eol()) {
207
+ stream.eatWhile(/[^'"\{\}\\]/);
208
+ if (stream.eat("\\")) {
209
+ stream.next();
210
+ if (singleline && stream.eol())
211
+ return OUTCLASS;
212
+ } else if (stream.match(delimiter)) {
213
+ state.tokenize = tokenOuter;
214
+ return OUTCLASS;
215
+ } else if (stream.match('{{')) {
216
+ // ignore {{ in f-str
217
+ return OUTCLASS;
218
+ } else if (stream.match('{', false)) {
219
+ // switch to nested mode
220
+ state.tokenize = tokenNestedExpr(0)
221
+ if (stream.current()) return OUTCLASS;
222
+ else return state.tokenize(stream, state)
223
+ } else if (stream.match('}}')) {
224
+ return OUTCLASS;
225
+ } else if (stream.match('}')) {
226
+ // single } in f-string is an error
227
+ return ERRORCLASS;
228
+ } else {
229
+ stream.eat(/['"]/);
230
+ }
231
+ }
232
+ if (singleline) {
233
+ if (parserConf.singleLineStringErrors)
234
+ return ERRORCLASS;
235
+ else
236
+ state.tokenize = tokenOuter;
237
+ }
238
+ return OUTCLASS;
239
+ }
240
+ tokenString.isString = true;
241
+ return tokenString;
242
+ }
243
+
244
+ function tokenStringFactory(delimiter, tokenOuter) {
245
+ while ("rubf".indexOf(delimiter.charAt(0).toLowerCase()) >= 0)
246
+ delimiter = delimiter.substr(1);
247
+
248
+ var singleline = delimiter.length == 1;
249
+ var OUTCLASS = "string";
250
+
251
+ function tokenString(stream, state) {
252
+ while (!stream.eol()) {
253
+ stream.eatWhile(/[^'"\\]/);
254
+ if (stream.eat("\\")) {
255
+ stream.next();
256
+ if (singleline && stream.eol())
257
+ return OUTCLASS;
258
+ } else if (stream.match(delimiter)) {
259
+ state.tokenize = tokenOuter;
260
+ return OUTCLASS;
261
+ } else {
262
+ stream.eat(/['"]/);
263
+ }
264
+ }
265
+ if (singleline) {
266
+ if (parserConf.singleLineStringErrors)
267
+ return ERRORCLASS;
268
+ else
269
+ state.tokenize = tokenOuter;
270
+ }
271
+ return OUTCLASS;
272
+ }
273
+ tokenString.isString = true;
274
+ return tokenString;
275
+ }
276
+
277
+ function pushPyScope(state) {
278
+ while (top(state).type != "py") state.scopes.pop()
279
+ state.scopes.push({offset: top(state).offset + conf.indentUnit,
280
+ type: "py",
281
+ align: null})
282
+ }
283
+
284
+ function pushBracketScope(stream, state, type) {
285
+ var align = stream.match(/^[\s\[\{\(]*(?:#|$)/, false) ? null : stream.column() + 1
286
+ state.scopes.push({offset: state.indent + hangingIndent,
287
+ type: type,
288
+ align: align})
289
+ }
290
+
291
+ function dedent(stream, state) {
292
+ var indented = stream.indentation();
293
+ while (state.scopes.length > 1 && top(state).offset > indented) {
294
+ if (top(state).type != "py") return true;
295
+ state.scopes.pop();
296
+ }
297
+ return top(state).offset != indented;
298
+ }
299
+
300
+ function tokenLexer(stream, state) {
301
+ if (stream.sol()) {
302
+ state.beginningOfLine = true;
303
+ state.dedent = false;
304
+ }
305
+
306
+ var style = state.tokenize(stream, state);
307
+ var current = stream.current();
308
+
309
+ // Handle decorators
310
+ if (state.beginningOfLine && current == "@")
311
+ return stream.match(identifiers, false) ? "meta" : py3 ? "operator" : ERRORCLASS;
312
+
313
+ if (/\S/.test(current)) state.beginningOfLine = false;
314
+
315
+ if ((style == "variable" || style == "builtin")
316
+ && state.lastToken == "meta")
317
+ style = "meta";
318
+
319
+ // Handle scope changes.
320
+ if (current == "pass" || current == "return")
321
+ state.dedent = true;
322
+
323
+ if (current == "lambda") state.lambda = true;
324
+ if (current == ":" && !state.lambda && top(state).type == "py" && stream.match(/^\s*(?:#|$)/, false))
325
+ pushPyScope(state);
326
+
327
+ if (current.length == 1 && !/string|comment/.test(style)) {
328
+ var delimiter_index = "[({".indexOf(current);
329
+ if (delimiter_index != -1)
330
+ pushBracketScope(stream, state, "])}".slice(delimiter_index, delimiter_index+1));
331
+
332
+ delimiter_index = "])}".indexOf(current);
333
+ if (delimiter_index != -1) {
334
+ if (top(state).type == current) state.indent = state.scopes.pop().offset - hangingIndent
335
+ else return ERRORCLASS;
336
+ }
337
+ }
338
+ if (state.dedent && stream.eol() && top(state).type == "py" && state.scopes.length > 1)
339
+ state.scopes.pop();
340
+
341
+ return style;
342
+ }
343
+
344
+ var external = {
345
+ startState: function(basecolumn) {
346
+ return {
347
+ tokenize: tokenBase,
348
+ scopes: [{offset: basecolumn || 0, type: "py", align: null}],
349
+ indent: basecolumn || 0,
350
+ lastToken: null,
351
+ lambda: false,
352
+ dedent: 0
353
+ };
354
+ },
355
+
356
+ token: function(stream, state) {
357
+ var addErr = state.errorToken;
358
+ if (addErr) state.errorToken = false;
359
+ var style = tokenLexer(stream, state);
360
+
361
+ if (style && style != "comment")
362
+ state.lastToken = (style == "keyword" || style == "punctuation") ? stream.current() : style;
363
+ if (style == "punctuation") style = null;
364
+
365
+ if (stream.eol() && state.lambda)
366
+ state.lambda = false;
367
+ return addErr ? style + " " + ERRORCLASS : style;
368
+ },
369
+
370
+ indent: function(state, textAfter) {
371
+ if (state.tokenize != tokenBase)
372
+ return state.tokenize.isString ? CodeMirror.Pass : 0;
373
+
374
+ var scope = top(state)
375
+ var closing = scope.type == textAfter.charAt(0) ||
376
+ scope.type == "py" && !state.dedent && /^(else:|elif |except |finally:)/.test(textAfter)
377
+ if (scope.align != null)
378
+ return scope.align - (closing ? 1 : 0)
379
+ else
380
+ return scope.offset - (closing ? hangingIndent : 0)
381
+ },
382
+
383
+ electricInput: /^\s*([\}\]\)]|else:|elif |except |finally:)$/,
384
+ closeBrackets: {triples: "'\""},
385
+ lineComment: "#",
386
+ fold: "indent"
387
+ };
388
+ return external;
389
+ });
390
+
391
+ CodeMirror.defineMIME("text/x-python", "python");
392
+
393
+ var words = function(str) { return str.split(" "); };
394
+
395
+ CodeMirror.defineMIME("text/x-cython", {
396
+ name: "python",
397
+ extra_keywords: words("by cdef cimport cpdef ctypedef enum except "+
398
+ "extern gil include nogil property public "+
399
+ "readonly struct union DEF IF ELIF ELSE")
400
+ });
401
+
402
+ });
@@ -0,0 +1,40 @@
1
+ /*
2
+
3
+ Name: dracula
4
+ Author: Michael Kaminsky (http://github.com/mkaminsky11)
5
+
6
+ Original dracula color scheme by Zeno Rocha (https://github.com/zenorocha/dracula-theme)
7
+
8
+ */
9
+
10
+
11
+ .cm-s-dracula.CodeMirror, .cm-s-dracula .CodeMirror-gutters {
12
+ background-color: #282a36 !important;
13
+ color: #f8f8f2 !important;
14
+ border: none;
15
+ }
16
+ .cm-s-dracula .CodeMirror-gutters { color: #282a36; }
17
+ .cm-s-dracula .CodeMirror-cursor { border-left: solid thin #f8f8f0; }
18
+ .cm-s-dracula .CodeMirror-linenumber { color: #6D8A88; }
19
+ .cm-s-dracula .CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }
20
+ .cm-s-dracula .CodeMirror-line::selection, .cm-s-dracula .CodeMirror-line > span::selection, .cm-s-dracula .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }
21
+ .cm-s-dracula .CodeMirror-line::-moz-selection, .cm-s-dracula .CodeMirror-line > span::-moz-selection, .cm-s-dracula .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }
22
+ .cm-s-dracula span.cm-comment { color: #6272a4; }
23
+ .cm-s-dracula span.cm-string, .cm-s-dracula span.cm-string-2 { color: #f1fa8c; }
24
+ .cm-s-dracula span.cm-number { color: #bd93f9; }
25
+ .cm-s-dracula span.cm-variable { color: #50fa7b; }
26
+ .cm-s-dracula span.cm-variable-2 { color: white; }
27
+ .cm-s-dracula span.cm-def { color: #50fa7b; }
28
+ .cm-s-dracula span.cm-operator { color: #ff79c6; }
29
+ .cm-s-dracula span.cm-keyword { color: #ff79c6; }
30
+ .cm-s-dracula span.cm-atom { color: #bd93f9; }
31
+ .cm-s-dracula span.cm-meta { color: #f8f8f2; }
32
+ .cm-s-dracula span.cm-tag { color: #ff79c6; }
33
+ .cm-s-dracula span.cm-attribute { color: #50fa7b; }
34
+ .cm-s-dracula span.cm-qualifier { color: #50fa7b; }
35
+ .cm-s-dracula span.cm-property { color: #66d9ef; }
36
+ .cm-s-dracula span.cm-builtin { color: #50fa7b; }
37
+ .cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; }
38
+
39
+ .cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); }
40
+ .cm-s-dracula .CodeMirror-matchingbracket { text-decoration: underline; color: white !important; }
@@ -0,0 +1,135 @@
1
+ div.cm-s-ctp-mocha.CodeMirror {
2
+ --bg0: #1e1e2e;
3
+ --bg1: #7f849c;
4
+ --bg4: #6c7086;
5
+ --fg: #cdd6f4;
6
+ --fg3: #a6adc8;
7
+ --gray: #bac2de;
8
+ --blue: #89b4fa;
9
+ --yellow: #f9e2af;
10
+ --aqua: #89b4fa;
11
+ --orange: #fab387;
12
+ --primary-bg: #1e1e2e;
13
+ --current-line: #313244;
14
+ --selection: #585b70;
15
+ --atom: #b4befe;
16
+ --cursor: #7f849c;
17
+ --keyword: #f38ba8;
18
+ --operator: #89dceb;
19
+ --number: #fab387;
20
+ --definition: #89b4fa;
21
+ --string: #a6e3a1;
22
+ }
23
+
24
+ .cm-s-ctp-mocha.CodeMirror,
25
+ .cm-s-ctp-mocha .CodeMirror-gutters {
26
+ background-color: var(--primary-bg);
27
+ color: var(--fg3);
28
+ }
29
+
30
+ .cm-s-ctp-mocha .CodeMirror-gutters {
31
+ background: var(--primary-bg);
32
+ border-right: 0px;
33
+ }
34
+
35
+ .cm-s-ctp-mocha .CodeMirror-linenumber {
36
+ color: var(--bg4);
37
+ }
38
+
39
+ .cm-s-ctp-mocha .CodeMirror-cursor {
40
+ border-left: 1px solid var(--fg);
41
+ }
42
+
43
+ .cm-s-ctp-mocha.cm-fat-cursor .CodeMirror-cursor {
44
+ background-color: var(--cursor) !important;
45
+ }
46
+
47
+ .cm-s-ctp-mocha .cm-animate-fat-cursor {
48
+ background-color: var(--cursor) !important;
49
+ }
50
+
51
+ .cm-s-ctp-mocha div.CodeMirror-selected {
52
+ background: var(--selection);
53
+ }
54
+
55
+ .cm-s-ctp-mocha span.cm-meta {
56
+ color: var(--blue);
57
+ }
58
+
59
+ .cm-s-ctp-mocha span.cm-comment {
60
+ color: var(--gray);
61
+ }
62
+
63
+ .cm-s-ctp-mocha span.cm-number {
64
+ color: var(--number);
65
+ }
66
+
67
+ .cm-s-ctp-mocha span.cm-atom {
68
+ color: var(--atom);
69
+ }
70
+
71
+ .cm-s-ctp-mocha span.cm-keyword {
72
+ color: var(--keyword);
73
+ }
74
+
75
+ .cm-s-ctp-mocha span.cm-variable {
76
+ color: var(--fg);
77
+ }
78
+
79
+ .cm-s-ctp-mocha span.cm-variable-2 {
80
+ color: var(--fg);
81
+ }
82
+
83
+ .cm-s-ctp-mocha span.cm-variable-3,
84
+ .cm-s-ctp-mocha .cm-s-gruvbox-dark span.cm-type {
85
+ color: var(--yellow);
86
+ }
87
+
88
+ .cm-s-ctp-mocha span.cm-operator {
89
+ color: var(--operator);
90
+ }
91
+
92
+ .cm-s-ctp-mocha span.cm-callee {
93
+ color: var(--fg);
94
+ }
95
+
96
+ .cm-s-ctp-mocha span.cm-def {
97
+ color: var(--definition);
98
+ }
99
+
100
+ .cm-s-ctp-mocha span.cm-property {
101
+ color: var(--fg);
102
+ }
103
+
104
+ .cm-s-ctp-mocha span.cm-string {
105
+ color: var(--string);
106
+ }
107
+
108
+ .cm-s-ctp-mocha span.cm-string-2 {
109
+ color: var(--aqua);
110
+ }
111
+
112
+ .cm-s-ctp-mocha span.cm-qualifier {
113
+ color: var(--aqua);
114
+ }
115
+
116
+ .cm-s-ctp-mocha span.cm-attribute {
117
+ color: var(--aqua);
118
+ }
119
+
120
+ .cm-s-ctp-mocha .CodeMirror-activeline-background {
121
+ background: var(--current-line);
122
+ }
123
+
124
+ .cm-s-ctp-mocha .CodeMirror-matchingbracket {
125
+ background: var(--gray);
126
+ color: var(--bg0) !important;
127
+ }
128
+
129
+ .cm-s-ctp-mocha span.cm-builtin {
130
+ color: var(--orange);
131
+ }
132
+
133
+ .cm-s-ctp-mocha span.cm-tag {
134
+ color: var(--orange);
135
+ }