| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,163 @@ | ||
| CodeMirror.defineMode("nginx", function(config) { | ||
|
|
||
| function words(str) { | ||
| var obj = {}, words = str.split(" "); | ||
| for (var i = 0; i < words.length; ++i) obj[words[i]] = true; | ||
| return obj; | ||
| } | ||
|
|
||
| var keywords = words( | ||
| /* ngxDirectiveControl */ "break return rewrite set" + | ||
| /* ngxDirective */ " accept_mutex accept_mutex_delay access_log add_after_body add_before_body add_header addition_types aio alias allow ancient_browser ancient_browser_value auth_basic auth_basic_user_file auth_http auth_http_header auth_http_timeout autoindex autoindex_exact_size autoindex_localtime charset charset_types client_body_buffer_size client_body_in_file_only client_body_in_single_buffer client_body_temp_path client_body_timeout client_header_buffer_size client_header_timeout client_max_body_size connection_pool_size create_full_put_path daemon dav_access dav_methods debug_connection debug_points default_type degradation degrade deny devpoll_changes devpoll_events directio directio_alignment empty_gif env epoll_events error_log eventport_events expires fastcgi_bind fastcgi_buffer_size fastcgi_buffers fastcgi_busy_buffers_size fastcgi_cache fastcgi_cache_key fastcgi_cache_methods fastcgi_cache_min_uses fastcgi_cache_path fastcgi_cache_use_stale fastcgi_cache_valid fastcgi_catch_stderr fastcgi_connect_timeout fastcgi_hide_header fastcgi_ignore_client_abort fastcgi_ignore_headers fastcgi_index fastcgi_intercept_errors fastcgi_max_temp_file_size fastcgi_next_upstream fastcgi_param fastcgi_pass_header fastcgi_pass_request_body fastcgi_pass_request_headers fastcgi_read_timeout fastcgi_send_lowat fastcgi_send_timeout fastcgi_split_path_info fastcgi_store fastcgi_store_access fastcgi_temp_file_write_size fastcgi_temp_path fastcgi_upstream_fail_timeout fastcgi_upstream_max_fails flv geoip_city geoip_country google_perftools_profiles gzip gzip_buffers gzip_comp_level gzip_disable gzip_hash gzip_http_version gzip_min_length gzip_no_buffer gzip_proxied gzip_static gzip_types gzip_vary gzip_window if_modified_since ignore_invalid_headers image_filter image_filter_buffer image_filter_jpeg_quality image_filter_transparency imap_auth imap_capabilities imap_client_buffer index ip_hash keepalive_requests keepalive_timeout kqueue_changes kqueue_events large_client_header_buffers limit_conn limit_conn_log_level limit_rate limit_rate_after limit_req limit_req_log_level limit_req_zone limit_zone lingering_time lingering_timeout lock_file log_format log_not_found log_subrequest map_hash_bucket_size map_hash_max_size master_process memcached_bind memcached_buffer_size memcached_connect_timeout memcached_next_upstream memcached_read_timeout memcached_send_timeout memcached_upstream_fail_timeout memcached_upstream_max_fails merge_slashes min_delete_depth modern_browser modern_browser_value msie_padding msie_refresh multi_accept open_file_cache open_file_cache_errors open_file_cache_events open_file_cache_min_uses open_file_cache_valid open_log_file_cache output_buffers override_charset perl perl_modules perl_require perl_set pid pop3_auth pop3_capabilities port_in_redirect postpone_gzipping postpone_output protocol proxy proxy_bind proxy_buffer proxy_buffer_size proxy_buffering proxy_buffers proxy_busy_buffers_size proxy_cache proxy_cache_key proxy_cache_methods proxy_cache_min_uses proxy_cache_path proxy_cache_use_stale proxy_cache_valid proxy_connect_timeout proxy_headers_hash_bucket_size proxy_headers_hash_max_size proxy_hide_header proxy_ignore_client_abort proxy_ignore_headers proxy_intercept_errors proxy_max_temp_file_size proxy_method proxy_next_upstream proxy_pass_error_message proxy_pass_header proxy_pass_request_body proxy_pass_request_headers proxy_read_timeout proxy_redirect proxy_send_lowat proxy_send_timeout proxy_set_body proxy_set_header proxy_ssl_session_reuse proxy_store proxy_store_access proxy_temp_file_write_size proxy_temp_path proxy_timeout proxy_upstream_fail_timeout proxy_upstream_max_fails random_index read_ahead real_ip_header recursive_error_pages request_pool_size reset_timedout_connection resolver resolver_timeout rewrite_log rtsig_overflow_events rtsig_overflow_test rtsig_overflow_threshold rtsig_signo satisfy secure_link_secret send_lowat send_timeout sendfile sendfile_max_chunk server_name_in_redirect server_names_hash_bucket_size server_names_hash_max_size server_tokens set_real_ip_from smtp_auth smtp_capabilities smtp_client_buffer smtp_greeting_delay so_keepalive source_charset ssi ssi_ignore_recycled_buffers ssi_min_file_chunk ssi_silent_errors ssi_types ssi_value_length ssl ssl_certificate ssl_certificate_key ssl_ciphers ssl_client_certificate ssl_crl ssl_dhparam ssl_engine ssl_prefer_server_ciphers ssl_protocols ssl_session_cache ssl_session_timeout ssl_verify_client ssl_verify_depth starttls stub_status sub_filter sub_filter_once sub_filter_types tcp_nodelay tcp_nopush thread_stack_size timeout timer_resolution types_hash_bucket_size types_hash_max_size underscores_in_headers uninitialized_variable_warn use user userid userid_domain userid_expires userid_mark userid_name userid_p3p userid_path userid_service valid_referers variables_hash_bucket_size variables_hash_max_size worker_connections worker_cpu_affinity worker_priority worker_processes worker_rlimit_core worker_rlimit_nofile worker_rlimit_sigpending worker_threads working_directory xclient xml_entities xslt_stylesheet xslt_typesdrew@li229-23" | ||
| ); | ||
|
|
||
| var keywords_block = words( | ||
| /* ngxDirectiveBlock */ "http mail events server types location upstream charset_map limit_except if geo map" | ||
| ); | ||
|
|
||
| var keywords_important = words( | ||
| /* ngxDirectiveImportant */ "include root server server_name listen internal proxy_pass memcached_pass fastcgi_pass try_files" | ||
| ); | ||
|
|
||
| var indentUnit = config.indentUnit, type; | ||
| function ret(style, tp) {type = tp; return style;} | ||
|
|
||
| function tokenBase(stream, state) { | ||
|
|
||
|
|
||
| stream.eatWhile(/[\w\$_]/); | ||
|
|
||
| var cur = stream.current(); | ||
|
|
||
|
|
||
| if (keywords.propertyIsEnumerable(cur)) { | ||
| return "keyword"; | ||
| } | ||
| else if (keywords_block.propertyIsEnumerable(cur)) { | ||
| return "variable-2"; | ||
| } | ||
| else if (keywords_important.propertyIsEnumerable(cur)) { | ||
| return "string-2"; | ||
| } | ||
| /**/ | ||
|
|
||
| var ch = stream.next(); | ||
| if (ch == "@") {stream.eatWhile(/[\w\\\-]/); return ret("meta", stream.current());} | ||
| else if (ch == "/" && stream.eat("*")) { | ||
| state.tokenize = tokenCComment; | ||
| return tokenCComment(stream, state); | ||
| } | ||
| else if (ch == "<" && stream.eat("!")) { | ||
| state.tokenize = tokenSGMLComment; | ||
| return tokenSGMLComment(stream, state); | ||
| } | ||
| else if (ch == "=") ret(null, "compare"); | ||
| else if ((ch == "~" || ch == "|") && stream.eat("=")) return ret(null, "compare"); | ||
| else if (ch == "\"" || ch == "'") { | ||
| state.tokenize = tokenString(ch); | ||
| return state.tokenize(stream, state); | ||
| } | ||
| else if (ch == "#") { | ||
| stream.skipToEnd(); | ||
| return ret("comment", "comment"); | ||
| } | ||
| else if (ch == "!") { | ||
| stream.match(/^\s*\w*/); | ||
| return ret("keyword", "important"); | ||
| } | ||
| else if (/\d/.test(ch)) { | ||
| stream.eatWhile(/[\w.%]/); | ||
| return ret("number", "unit"); | ||
| } | ||
| else if (/[,.+>*\/]/.test(ch)) { | ||
| return ret(null, "select-op"); | ||
| } | ||
| else if (/[;{}:\[\]]/.test(ch)) { | ||
| return ret(null, ch); | ||
| } | ||
| else { | ||
| stream.eatWhile(/[\w\\\-]/); | ||
| return ret("variable", "variable"); | ||
| } | ||
| } | ||
|
|
||
| function tokenCComment(stream, state) { | ||
| var maybeEnd = false, ch; | ||
| while ((ch = stream.next()) != null) { | ||
| if (maybeEnd && ch == "/") { | ||
| state.tokenize = tokenBase; | ||
| break; | ||
| } | ||
| maybeEnd = (ch == "*"); | ||
| } | ||
| return ret("comment", "comment"); | ||
| } | ||
|
|
||
| function tokenSGMLComment(stream, state) { | ||
| var dashes = 0, ch; | ||
| while ((ch = stream.next()) != null) { | ||
| if (dashes >= 2 && ch == ">") { | ||
| state.tokenize = tokenBase; | ||
| break; | ||
| } | ||
| dashes = (ch == "-") ? dashes + 1 : 0; | ||
| } | ||
| return ret("comment", "comment"); | ||
| } | ||
|
|
||
| function tokenString(quote) { | ||
| return function(stream, state) { | ||
| var escaped = false, ch; | ||
| while ((ch = stream.next()) != null) { | ||
| if (ch == quote && !escaped) | ||
| break; | ||
| escaped = !escaped && ch == "\\"; | ||
| } | ||
| if (!escaped) state.tokenize = tokenBase; | ||
| return ret("string", "string"); | ||
| }; | ||
| } | ||
|
|
||
| return { | ||
| startState: function(base) { | ||
| return {tokenize: tokenBase, | ||
| baseIndent: base || 0, | ||
| stack: []}; | ||
| }, | ||
|
|
||
| token: function(stream, state) { | ||
| if (stream.eatSpace()) return null; | ||
| type = null; | ||
| var style = state.tokenize(stream, state); | ||
|
|
||
| var context = state.stack[state.stack.length-1]; | ||
| if (type == "hash" && context == "rule") style = "atom"; | ||
| else if (style == "variable") { | ||
| if (context == "rule") style = "number"; | ||
| else if (!context || context == "@media{") style = "tag"; | ||
| } | ||
|
|
||
| if (context == "rule" && /^[\{\};]$/.test(type)) | ||
| state.stack.pop(); | ||
| if (type == "{") { | ||
| if (context == "@media") state.stack[state.stack.length-1] = "@media{"; | ||
| else state.stack.push("{"); | ||
| } | ||
| else if (type == "}") state.stack.pop(); | ||
| else if (type == "@media") state.stack.push("@media"); | ||
| else if (context == "{" && type != "comment") state.stack.push("rule"); | ||
| return style; | ||
| }, | ||
|
|
||
| indent: function(state, textAfter) { | ||
| var n = state.stack.length; | ||
| if (/^\}/.test(textAfter)) | ||
| n -= state.stack[state.stack.length-1] == "rule" ? 2 : 1; | ||
| return state.baseIndent + n * indentUnit; | ||
| }, | ||
|
|
||
| electricChars: "}" | ||
| }; | ||
| }); | ||
|
|
||
| CodeMirror.defineMIME("text/nginx", "text/x-nginx-conf"); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,107 @@ | ||
| <!doctype html> | ||
| <html> | ||
| <head> | ||
| <meta charset="utf-8"> | ||
| <title>CodeMirror: Smarty mixed mode</title> | ||
| <link rel="stylesheet" href="../../lib/codemirror.css"> | ||
| <script src="../../lib/codemirror.js"></script> | ||
| <link rel="stylesheet" href="../../doc/docs.css"> | ||
|
|
||
| <!-- smartymixed dependencies --> | ||
| <script src="../../mode/xml/xml.js"></script> | ||
| <script src="../../mode/javascript/javascript.js"></script> | ||
| <script src="../../mode/css/css.js"></script> | ||
| <script src="../../mode/htmlmixed/htmlmixed.js"></script> | ||
| <script src="../../mode/smarty/smarty.js"></script> | ||
|
|
||
| <!-- smartymixed --> | ||
| <script src="../../mode/smartymixed/smartymixed.js"></script> | ||
| </head> | ||
| <body> | ||
| <h1>CodeMirror: Smarty mixed mode</h1> | ||
| <form><textarea id="code" name="code"> | ||
| {** | ||
| * @brief Smarty mixed mode | ||
| * @author Ruslan Osmanov | ||
| * @date 29.06.2013 | ||
| *} | ||
| <html> | ||
| <head> | ||
| <title>{$title|htmlspecialchars|truncate:30}</title> | ||
| </head> | ||
| <body> | ||
| {* Multiline smarty | ||
| * comment, no {$variables} here | ||
| *} | ||
| {literal} | ||
| {literal} is just an HTML text. | ||
| <script type="text/javascript">//<![CDATA[ | ||
| var a = {$just_a_normal_js_object : "value"}; | ||
| var myCodeMirror = CodeMirror.fromTextArea(document.getElementById("code"), { | ||
| mode : "smartymixed", | ||
| tabSize : 2, | ||
| indentUnit : 2, | ||
| indentWithTabs : false, | ||
| lineNumbers : true, | ||
| smartyVersion : 3 | ||
| }); | ||
| // ]]> | ||
| </script> | ||
| <style> | ||
| /* CSS content | ||
| {$no_smarty} */ | ||
| .some-class { font-weight: bolder; color: "orange"; } | ||
| </style> | ||
| {/literal} | ||
|
|
||
| {extends file="parent.tpl"} | ||
| {include file="template.tpl"} | ||
|
|
||
| {* some example Smarty content *} | ||
| {if isset($name) && $name == 'Blog'} | ||
| This is a {$var}. | ||
| {$integer = 4511}, {$array[] = "a"}, {$stringvar = "string"} | ||
| {$integer = 4512} {$array[] = "a"} {$stringvar = "string"} | ||
| {assign var='bob' value=$var.prop} | ||
| {elseif $name == $foo} | ||
| {function name=menu level=0} | ||
| {foreach $data as $entry} | ||
| {if is_array($entry)} | ||
| - {$entry@key} | ||
| {menu data=$entry level=$level+1} | ||
| {else} | ||
| {$entry} | ||
| {* One | ||
| * Two | ||
| * Three | ||
| *} | ||
| {/if} | ||
| {/foreach} | ||
| {/function} | ||
| {/if} | ||
| </body> | ||
| <!-- R.O. --> | ||
| </html> | ||
| </textarea></form> | ||
|
|
||
| <script type="text/javascript"> | ||
| var myCodeMirror = CodeMirror.fromTextArea(document.getElementById("code"), { | ||
| mode : "smartymixed", | ||
| tabSize : 2, | ||
| indentUnit : 2, | ||
| indentWithTabs : false, | ||
| lineNumbers : true, | ||
| smartyVersion : 3, | ||
| matchBrackets : true, | ||
| }); | ||
| </script> | ||
|
|
||
| <p>The Smarty mixed mode depends on the Smarty and HTML mixed modes. HTML | ||
| mixed mode itself depends on XML, JavaScript, and CSS modes.</p> | ||
|
|
||
| <p>It takes the same options, as Smarty and HTML mixed modes.</p> | ||
|
|
||
| <p><strong>MIME types defined:</strong> <code>text/x-smarty</code>.</p> | ||
| </body> | ||
| </html> | ||
| <!-- vim: set ft=html ts=2 sts=2 sw=2 et: --> |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,170 @@ | ||
| /** | ||
| * @file smartymixed.js | ||
| * @brief Smarty Mixed Codemirror mode (Smarty + Mixed HTML) | ||
| * @author Ruslan Osmanov <rrosmanov at gmail dot com> | ||
| * @version 3.0 | ||
| * @date 05.07.2013 | ||
| */ | ||
| CodeMirror.defineMode("smartymixed", function(config) { | ||
| var settings, regs, helpers, parsers, | ||
| htmlMixedMode = CodeMirror.getMode(config, "htmlmixed"), | ||
| smartyMode = CodeMirror.getMode(config, "smarty"), | ||
|
|
||
| settings = { | ||
| rightDelimiter: '}', | ||
| leftDelimiter: '{' | ||
| }; | ||
|
|
||
| if (config.hasOwnProperty("leftDelimiter")) { | ||
| settings.leftDelimiter = config.leftDelimiter; | ||
| } | ||
| if (config.hasOwnProperty("rightDelimiter")) { | ||
| settings.rightDelimiter = config.rightDelimiter; | ||
| } | ||
|
|
||
| regs = { | ||
| smartyComment: new RegExp("^" + settings.leftDelimiter + "\\*"), | ||
| literalOpen: new RegExp(settings.leftDelimiter + "literal" + settings.rightDelimiter), | ||
| literalClose: new RegExp(settings.leftDelimiter + "\/literal" + settings.rightDelimiter), | ||
| hasLeftDelimeter: new RegExp(".*" + settings.leftDelimiter), | ||
| htmlHasLeftDelimeter: new RegExp("[^<>]*" + settings.leftDelimiter) | ||
| }; | ||
|
|
||
| helpers = { | ||
| chain: function(stream, state, parser) { | ||
| state.tokenize = parser; | ||
| return parser(stream, state); | ||
| }, | ||
|
|
||
| cleanChain: function(stream, state, parser) { | ||
| state.tokenize = null; | ||
| state.localState = null; | ||
| state.localMode = null; | ||
| return (typeof parser == "string") ? (parser ? parser : null) : parser(stream, state); | ||
| }, | ||
|
|
||
| maybeBackup: function(stream, pat, style) { | ||
| var cur = stream.current(); | ||
| var close = cur.search(pat), | ||
| m; | ||
| if (close > - 1) stream.backUp(cur.length - close); | ||
| else if (m = cur.match(/<\/?$/)) { | ||
| stream.backUp(cur.length); | ||
| if (!stream.match(pat, false)) stream.match(cur[0]); | ||
| } | ||
| return style; | ||
| } | ||
| }; | ||
|
|
||
| parsers = { | ||
| html: function(stream, state) { | ||
| if (!state.inLiteral && stream.match(regs.htmlHasLeftDelimeter, false)) { | ||
| state.tokenize = parsers.smarty; | ||
| state.localMode = smartyMode; | ||
| state.localState = smartyMode.startState(htmlMixedMode.indent(state.htmlMixedState, "")); | ||
| return helpers.maybeBackup(stream, settings.leftDelimiter, smartyMode.token(stream, state.localState)); | ||
| } | ||
| return htmlMixedMode.token(stream, state.htmlMixedState); | ||
| }, | ||
|
|
||
| smarty: function(stream, state) { | ||
| if (stream.match(settings.leftDelimiter, false)) { | ||
| if (stream.match(regs.smartyComment, false)) { | ||
| return helpers.chain(stream, state, parsers.inBlock("comment", "*" + settings.rightDelimiter)); | ||
| } | ||
| } else if (stream.match(settings.rightDelimiter, false)) { | ||
| stream.eat(settings.rightDelimiter); | ||
| state.tokenize = parsers.html; | ||
| state.localMode = htmlMixedMode; | ||
| state.localState = state.htmlMixedState; | ||
| return "tag"; | ||
| } | ||
|
|
||
| return helpers.maybeBackup(stream, settings.rightDelimiter, smartyMode.token(stream, state.localState)); | ||
| }, | ||
|
|
||
| inBlock: function(style, terminator) { | ||
| return function(stream, state) { | ||
| while (!stream.eol()) { | ||
| if (stream.match(terminator)) { | ||
| helpers.cleanChain(stream, state, ""); | ||
| break; | ||
| } | ||
| stream.next(); | ||
| } | ||
| return style; | ||
| }; | ||
| } | ||
| }; | ||
|
|
||
| return { | ||
| startState: function() { | ||
| var state = htmlMixedMode.startState(); | ||
| return { | ||
| token: parsers.html, | ||
| localMode: null, | ||
| localState: null, | ||
| htmlMixedState: state, | ||
| tokenize: null, | ||
| inLiteral: false | ||
| }; | ||
| }, | ||
|
|
||
| copyState: function(state) { | ||
| var local = null, tok = (state.tokenize || state.token); | ||
| if (state.localState) { | ||
| local = CodeMirror.copyState((tok != parsers.html ? smartyMode : htmlMixedMode), state.localState); | ||
| } | ||
| return { | ||
| token: state.token, | ||
| tokenize: state.tokenize, | ||
| localMode: state.localMode, | ||
| localState: local, | ||
| htmlMixedState: CodeMirror.copyState(htmlMixedMode, state.htmlMixedState), | ||
| inLiteral: state.inLiteral | ||
| }; | ||
| }, | ||
|
|
||
| token: function(stream, state) { | ||
| if (stream.match(settings.leftDelimiter, false)) { | ||
| if (!state.inLiteral && stream.match(regs.literalOpen, true)) { | ||
| state.inLiteral = true; | ||
| return "keyword"; | ||
| } else if (state.inLiteral && stream.match(regs.literalClose, true)) { | ||
| state.inLiteral = false; | ||
| return "keyword"; | ||
| } | ||
| } | ||
| if (state.inLiteral && state.localState != state.htmlMixedState) { | ||
| state.tokenize = parsers.html; | ||
| state.localMode = htmlMixedMode; | ||
| state.localState = state.htmlMixedState; | ||
| } | ||
|
|
||
| var style = (state.tokenize || state.token)(stream, state); | ||
| return style; | ||
| }, | ||
|
|
||
| indent: function(state, textAfter) { | ||
| if (state.localMode == smartyMode | ||
| || (state.inLiteral && !state.localMode) | ||
| || regs.hasLeftDelimeter.test(textAfter)) { | ||
| return CodeMirror.Pass; | ||
| } | ||
| return htmlMixedMode.indent(state.htmlMixedState, textAfter); | ||
| }, | ||
|
|
||
| electricChars: "/{}:", | ||
|
|
||
| innerMode: function(state) { | ||
| return { | ||
| state: state.localState || state.htmlMixedState, | ||
| mode: state.localMode || htmlMixedMode | ||
| }; | ||
| } | ||
| }; | ||
| }, | ||
| "htmlmixed"); | ||
|
|
||
| CodeMirror.defineMIME("text/x-smarty", "smartymixed"); | ||
| // vim: et ts=2 sts=2 sw=2 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,26 +1,334 @@ | ||
| /* | ||
| For extra ASP classic objects, initialize CodeMirror instance with this option: | ||
| isASP: true | ||
| E.G.: | ||
| var editor = CodeMirror.fromTextArea(document.getElementById("code"), { | ||
| lineNumbers: true, | ||
| isASP: true | ||
| }); | ||
| */ | ||
| CodeMirror.defineMode("vbscript", function(conf, parserConf) { | ||
| var ERRORCLASS = 'error'; | ||
|
|
||
| function wordRegexp(words) { | ||
| return new RegExp("^((" + words.join(")|(") + "))\\b", "i"); | ||
| } | ||
|
|
||
| var singleOperators = new RegExp("^[\\+\\-\\*/&\\\\\\^<>=]"); | ||
| var doubleOperators = new RegExp("^((<>)|(<=)|(>=))"); | ||
| var singleDelimiters = new RegExp('^[\\.,]'); | ||
| var brakets = new RegExp('^[\\(\\)]'); | ||
| var identifiers = new RegExp("^[A-Za-z][_A-Za-z0-9]*"); | ||
|
|
||
| var openingKeywords = ['class','sub','select','while','if','function', 'property', 'with', 'for']; | ||
| var middleKeywords = ['else','elseif','case']; | ||
| var endKeywords = ['next','loop','wend']; | ||
|
|
||
| var wordOperators = wordRegexp(['and', 'or', 'not', 'xor', 'is', 'mod', 'eqv', 'imp']); | ||
| var commonkeywords = ['dim', 'redim', 'then', 'until', 'randomize', | ||
| 'byval','byref','new','property', 'exit', 'in', | ||
| 'const','private', 'public', | ||
| 'get','set','let', 'stop', 'on error resume next', 'on error goto 0', 'option explicit', 'call', 'me']; | ||
|
|
||
| //This list was from: http://msdn.microsoft.com/en-us/library/f8tbc79x(v=vs.84).aspx | ||
| var atomWords = ['true', 'false', 'nothing', 'empty', 'null']; | ||
| //This list was from: http://msdn.microsoft.com/en-us/library/3ca8tfek(v=vs.84).aspx | ||
| var builtinFuncsWords = ['abs', 'array', 'asc', 'atn', 'cbool', 'cbyte', 'ccur', 'cdate', 'cdbl', 'chr', 'cint', 'clng', 'cos', 'csng', 'cstr', 'date', 'dateadd', 'datediff', 'datepart', | ||
| 'dateserial', 'datevalue', 'day', 'escape', 'eval', 'execute', 'exp', 'filter', 'formatcurrency', 'formatdatetime', 'formatnumber', 'formatpercent', 'getlocale', 'getobject', | ||
| 'getref', 'hex', 'hour', 'inputbox', 'instr', 'instrrev', 'int', 'fix', 'isarray', 'isdate', 'isempty', 'isnull', 'isnumeric', 'isobject', 'join', 'lbound', 'lcase', 'left', | ||
| 'len', 'loadpicture', 'log', 'ltrim', 'rtrim', 'trim', 'maths', 'mid', 'minute', 'month', 'monthname', 'msgbox', 'now', 'oct', 'replace', 'rgb', 'right', 'rnd', 'round', | ||
| 'scriptengine', 'scriptenginebuildversion', 'scriptenginemajorversion', 'scriptengineminorversion', 'second', 'setlocale', 'sgn', 'sin', 'space', 'split', 'sqr', 'strcomp', | ||
| 'string', 'strreverse', 'tan', 'time', 'timer', 'timeserial', 'timevalue', 'typename', 'ubound', 'ucase', 'unescape', 'vartype', 'weekday', 'weekdayname', 'year']; | ||
|
|
||
| //This list was from: http://msdn.microsoft.com/en-us/library/ydz4cfk3(v=vs.84).aspx | ||
| var builtinConsts = ['vbBlack', 'vbRed', 'vbGreen', 'vbYellow', 'vbBlue', 'vbMagenta', 'vbCyan', 'vbWhite', 'vbBinaryCompare', 'vbTextCompare', | ||
| 'vbSunday', 'vbMonday', 'vbTuesday', 'vbWednesday', 'vbThursday', 'vbFriday', 'vbSaturday', 'vbUseSystemDayOfWeek', 'vbFirstJan1', 'vbFirstFourDays', 'vbFirstFullWeek', | ||
| 'vbGeneralDate', 'vbLongDate', 'vbShortDate', 'vbLongTime', 'vbShortTime', 'vbObjectError', | ||
| 'vbOKOnly', 'vbOKCancel', 'vbAbortRetryIgnore', 'vbYesNoCancel', 'vbYesNo', 'vbRetryCancel', 'vbCritical', 'vbQuestion', 'vbExclamation', 'vbInformation', 'vbDefaultButton1', 'vbDefaultButton2', | ||
| 'vbDefaultButton3', 'vbDefaultButton4', 'vbApplicationModal', 'vbSystemModal', 'vbOK', 'vbCancel', 'vbAbort', 'vbRetry', 'vbIgnore', 'vbYes', 'vbNo', | ||
| 'vbCr', 'VbCrLf', 'vbFormFeed', 'vbLf', 'vbNewLine', 'vbNullChar', 'vbNullString', 'vbTab', 'vbVerticalTab', 'vbUseDefault', 'vbTrue', 'vbFalse', | ||
| 'vbEmpty', 'vbNull', 'vbInteger', 'vbLong', 'vbSingle', 'vbDouble', 'vbCurrency', 'vbDate', 'vbString', 'vbObject', 'vbError', 'vbBoolean', 'vbVariant', 'vbDataObject', 'vbDecimal', 'vbByte', 'vbArray']; | ||
| //This list was from: http://msdn.microsoft.com/en-us/library/hkc375ea(v=vs.84).aspx | ||
| var builtinObjsWords = ['WScript', 'err', 'debug', 'RegExp']; | ||
| var knownProperties = ['description', 'firstindex', 'global', 'helpcontext', 'helpfile', 'ignorecase', 'length', 'number', 'pattern', 'source', 'value', 'count']; | ||
| var knownMethods = ['clear', 'execute', 'raise', 'replace', 'test', 'write', 'writeline', 'close', 'open', 'state', 'eof', 'update', 'addnew', 'end', 'createobject', 'quit']; | ||
|
|
||
| var aspBuiltinObjsWords = ['server', 'response', 'request', 'session', 'application']; | ||
| var aspKnownProperties = ['buffer', 'cachecontrol', 'charset', 'contenttype', 'expires', 'expiresabsolute', 'isclientconnected', 'pics', 'status', //response | ||
| 'clientcertificate', 'cookies', 'form', 'querystring', 'servervariables', 'totalbytes', //request | ||
| 'contents', 'staticobjects', //application | ||
| 'codepage', 'lcid', 'sessionid', 'timeout', //session | ||
| 'scripttimeout']; //server | ||
| var aspKnownMethods = ['addheader', 'appendtolog', 'binarywrite', 'end', 'flush', 'redirect', //response | ||
| 'binaryread', //request | ||
| 'remove', 'removeall', 'lock', 'unlock', //application | ||
| 'abandon', //session | ||
| 'getlasterror', 'htmlencode', 'mappath', 'transfer', 'urlencode']; //server | ||
|
|
||
| var knownWords = knownMethods.concat(knownProperties); | ||
|
|
||
| builtinObjsWords = builtinObjsWords.concat(builtinConsts); | ||
|
|
||
| if (conf.isASP){ | ||
| builtinObjsWords = builtinObjsWords.concat(aspBuiltinObjsWords); | ||
| knownWords = knownWords.concat(aspKnownMethods, aspKnownProperties); | ||
| }; | ||
|
|
||
| var keywords = wordRegexp(commonkeywords); | ||
| var atoms = wordRegexp(atomWords); | ||
| var builtinFuncs = wordRegexp(builtinFuncsWords); | ||
| var builtinObjs = wordRegexp(builtinObjsWords); | ||
| var known = wordRegexp(knownWords); | ||
| var stringPrefixes = '"'; | ||
|
|
||
| var opening = wordRegexp(openingKeywords); | ||
| var middle = wordRegexp(middleKeywords); | ||
| var closing = wordRegexp(endKeywords); | ||
| var doubleClosing = wordRegexp(['end']); | ||
| var doOpening = wordRegexp(['do']); | ||
| var noIndentWords = wordRegexp(['on error resume next', 'exit']); | ||
| var comment = wordRegexp(['rem']); | ||
|
|
||
|
|
||
| function indent(_stream, state) { | ||
| state.currentIndent++; | ||
| } | ||
|
|
||
| function dedent(_stream, state) { | ||
| state.currentIndent--; | ||
| } | ||
| // tokenizers | ||
| function tokenBase(stream, state) { | ||
| if (stream.eatSpace()) { | ||
| return 'space'; | ||
| //return null; | ||
| } | ||
|
|
||
| var ch = stream.peek(); | ||
|
|
||
| // Handle Comments | ||
| if (ch === "'") { | ||
| stream.skipToEnd(); | ||
| return 'comment'; | ||
| } | ||
| if (stream.match(comment)){ | ||
| stream.skipToEnd(); | ||
| return 'comment'; | ||
| } | ||
|
|
||
|
|
||
| // Handle Number Literals | ||
| if (stream.match(/^((&H)|(&O))?[0-9\.]/i, false) && !stream.match(/^((&H)|(&O))?[0-9\.]+[a-z_]/i, false)) { | ||
| var floatLiteral = false; | ||
| // Floats | ||
| if (stream.match(/^\d*\.\d+/i)) { floatLiteral = true; } | ||
| else if (stream.match(/^\d+\.\d*/)) { floatLiteral = true; } | ||
| else if (stream.match(/^\.\d+/)) { floatLiteral = true; } | ||
|
|
||
| if (floatLiteral) { | ||
| // Float literals may be "imaginary" | ||
| stream.eat(/J/i); | ||
| return 'number'; | ||
| } | ||
| // Integers | ||
| var intLiteral = false; | ||
| // Hex | ||
| if (stream.match(/^&H[0-9a-f]+/i)) { intLiteral = true; } | ||
| // Octal | ||
| else if (stream.match(/^&O[0-7]+/i)) { intLiteral = true; } | ||
| // Decimal | ||
| else if (stream.match(/^[1-9]\d*F?/)) { | ||
| // Decimal literals may be "imaginary" | ||
| stream.eat(/J/i); | ||
| // TODO - Can you have imaginary longs? | ||
| intLiteral = true; | ||
| } | ||
| // Zero by itself with no other piece of number. | ||
| else if (stream.match(/^0(?![\dx])/i)) { intLiteral = true; } | ||
| if (intLiteral) { | ||
| // Integer literals may be "long" | ||
| stream.eat(/L/i); | ||
| return 'number'; | ||
| } | ||
| } | ||
|
|
||
| // Handle Strings | ||
| if (stream.match(stringPrefixes)) { | ||
| state.tokenize = tokenStringFactory(stream.current()); | ||
| return state.tokenize(stream, state); | ||
| } | ||
|
|
||
| // Handle operators and Delimiters | ||
| if (stream.match(doubleOperators) | ||
| || stream.match(singleOperators) | ||
| || stream.match(wordOperators)) { | ||
| return 'operator'; | ||
| } | ||
| if (stream.match(singleDelimiters)) { | ||
| return null; | ||
| } | ||
|
|
||
| if (stream.match(brakets)) { | ||
| return "bracket"; | ||
| } | ||
|
|
||
| if (stream.match(noIndentWords)) { | ||
| state.doInCurrentLine = true; | ||
|
|
||
| return 'keyword'; | ||
| } | ||
|
|
||
| if (stream.match(doOpening)) { | ||
| indent(stream,state); | ||
| state.doInCurrentLine = true; | ||
|
|
||
| return 'keyword'; | ||
| } | ||
| if (stream.match(opening)) { | ||
| if (! state.doInCurrentLine) | ||
| indent(stream,state); | ||
| else | ||
| state.doInCurrentLine = false; | ||
|
|
||
| return 'keyword'; | ||
| } | ||
| if (stream.match(middle)) { | ||
| return 'keyword'; | ||
| } | ||
|
|
||
|
|
||
| if (stream.match(doubleClosing)) { | ||
| dedent(stream,state); | ||
| dedent(stream,state); | ||
|
|
||
| return 'keyword'; | ||
| } | ||
| if (stream.match(closing)) { | ||
| if (! state.doInCurrentLine) | ||
| dedent(stream,state); | ||
| else | ||
| state.doInCurrentLine = false; | ||
|
|
||
| return 'keyword'; | ||
| } | ||
|
|
||
| if (stream.match(keywords)) { | ||
| return 'keyword'; | ||
| } | ||
|
|
||
| if (stream.match(atoms)) { | ||
| return 'atom'; | ||
| } | ||
|
|
||
| if (stream.match(known)) { | ||
| return 'variable-2'; | ||
| } | ||
|
|
||
| if (stream.match(builtinFuncs)) { | ||
| return 'builtin'; | ||
| } | ||
|
|
||
| if (stream.match(builtinObjs)){ | ||
| return 'variable-2'; | ||
| } | ||
|
|
||
| if (stream.match(identifiers)) { | ||
| return 'variable'; | ||
| } | ||
|
|
||
| // Handle non-detected items | ||
| stream.next(); | ||
| return ERRORCLASS; | ||
| } | ||
|
|
||
| function tokenStringFactory(delimiter) { | ||
| var singleline = delimiter.length == 1; | ||
| var OUTCLASS = 'string'; | ||
|
|
||
| return function(stream, state) { | ||
| while (!stream.eol()) { | ||
| stream.eatWhile(/[^'"]/); | ||
| if (stream.match(delimiter)) { | ||
| state.tokenize = tokenBase; | ||
| return OUTCLASS; | ||
| } else { | ||
| stream.eat(/['"]/); | ||
| } | ||
| } | ||
| if (singleline) { | ||
| if (parserConf.singleLineStringErrors) { | ||
| return ERRORCLASS; | ||
| } else { | ||
| state.tokenize = tokenBase; | ||
| } | ||
| } | ||
| return OUTCLASS; | ||
| }; | ||
| } | ||
|
|
||
|
|
||
| function tokenLexer(stream, state) { | ||
| var style = state.tokenize(stream, state); | ||
| var current = stream.current(); | ||
|
|
||
| // Handle '.' connected identifiers | ||
| if (current === '.') { | ||
| style = state.tokenize(stream, state); | ||
|
|
||
| current = stream.current(); | ||
| if (style.substr(0, 8) === 'variable' || style==='builtin' || style==='keyword'){//|| knownWords.indexOf(current.substring(1)) > -1) { | ||
| if (style === 'builtin' || style === 'keyword') style='variable'; | ||
| if (knownWords.indexOf(current.substr(1)) > -1) style='variable-2'; | ||
|
|
||
| return style; | ||
| } else { | ||
| return ERRORCLASS; | ||
| } | ||
| } | ||
|
|
||
| return style; | ||
| } | ||
|
|
||
| var external = { | ||
| electricChars:"dDpPtTfFeE ", | ||
| startState: function() { | ||
| return { | ||
| tokenize: tokenBase, | ||
| lastToken: null, | ||
| currentIndent: 0, | ||
| nextLineIndent: 0, | ||
| doInCurrentLine: false, | ||
| ignoreKeyword: false | ||
|
|
||
|
|
||
| }; | ||
| }, | ||
|
|
||
| token: function(stream, state) { | ||
| if (stream.sol()) { | ||
| state.currentIndent += state.nextLineIndent; | ||
| state.nextLineIndent = 0; | ||
| state.doInCurrentLine = 0; | ||
| } | ||
| var style = tokenLexer(stream, state); | ||
|
|
||
| state.lastToken = {style:style, content: stream.current()}; | ||
|
|
||
| if (style==='space') style=null; | ||
|
|
||
| return style; | ||
| }, | ||
|
|
||
| indent: function(state, textAfter) { | ||
| var trueText = textAfter.replace(/^\s+|\s+$/g, '') ; | ||
| if (trueText.match(closing) || trueText.match(doubleClosing) || trueText.match(middle)) return conf.indentUnit*(state.currentIndent-1); | ||
| if(state.currentIndent < 0) return 0; | ||
| return state.currentIndent * conf.indentUnit; | ||
| } | ||
|
|
||
| }; | ||
| return external; | ||
| }); | ||
|
|
||
| CodeMirror.defineMIME("text/vbscript", "vbscript"); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| /* | ||
| Name: 3024 day | ||
| Author: Jan T. Sott (http://github.com/idleberg) | ||
| CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) | ||
| Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) | ||
| */ | ||
|
|
||
| .cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;} | ||
| .cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;} | ||
| .cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;} | ||
| .cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;} | ||
| .cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;} | ||
|
|
||
| .cm-s-3024-day span.cm-comment {color: #cdab53;} | ||
| .cm-s-3024-day span.cm-atom {color: #a16a94;} | ||
| .cm-s-3024-day span.cm-number {color: #a16a94;} | ||
|
|
||
| .cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;} | ||
| .cm-s-3024-day span.cm-keyword {color: #db2d20;} | ||
| .cm-s-3024-day span.cm-string {color: #fded02;} | ||
|
|
||
| .cm-s-3024-day span.cm-variable {color: #01a252;} | ||
| .cm-s-3024-day span.cm-variable-2 {color: #01a0e4;} | ||
| .cm-s-3024-day span.cm-def {color: #e8bbd0;} | ||
| .cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;} | ||
| .cm-s-3024-day span.cm-bracket {color: #3a3432;} | ||
| .cm-s-3024-day span.cm-tag {color: #db2d20;} | ||
| .cm-s-3024-day span.cm-link {color: #a16a94;} | ||
|
|
||
| .cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| /* | ||
| Name: 3024 night | ||
| Author: Jan T. Sott (http://github.com/idleberg) | ||
| CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) | ||
| Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) | ||
| */ | ||
|
|
||
| .cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;} | ||
| .cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;} | ||
| .cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;} | ||
| .cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;} | ||
| .cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;} | ||
|
|
||
| .cm-s-3024-night span.cm-comment {color: #cdab53;} | ||
| .cm-s-3024-night span.cm-atom {color: #a16a94;} | ||
| .cm-s-3024-night span.cm-number {color: #a16a94;} | ||
|
|
||
| .cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;} | ||
| .cm-s-3024-night span.cm-keyword {color: #db2d20;} | ||
| .cm-s-3024-night span.cm-string {color: #fded02;} | ||
|
|
||
| .cm-s-3024-night span.cm-variable {color: #01a252;} | ||
| .cm-s-3024-night span.cm-variable-2 {color: #01a0e4;} | ||
| .cm-s-3024-night span.cm-def {color: #e8bbd0;} | ||
| .cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;} | ||
| .cm-s-3024-night span.cm-bracket {color: #d6d5d4;} | ||
| .cm-s-3024-night span.cm-tag {color: #db2d20;} | ||
| .cm-s-3024-night span.cm-link {color: #a16a94;} | ||
|
|
||
| .cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| /* | ||
| Name: Base16 Default Dark | ||
| Author: Chris Kempson (http://chriskempson.com) | ||
| CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) | ||
| Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) | ||
| */ | ||
|
|
||
| .cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;} | ||
| .cm-s-base16-dark div.CodeMirror-selected {background: #202020 !important;} | ||
| .cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;} | ||
| .cm-s-base16-dark .CodeMirror-linenumber {color: #505050;} | ||
| .cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;} | ||
|
|
||
| .cm-s-base16-dark span.cm-comment {color: #8f5536;} | ||
| .cm-s-base16-dark span.cm-atom {color: #aa759f;} | ||
| .cm-s-base16-dark span.cm-number {color: #aa759f;} | ||
|
|
||
| .cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;} | ||
| .cm-s-base16-dark span.cm-keyword {color: #ac4142;} | ||
| .cm-s-base16-dark span.cm-string {color: #f4bf75;} | ||
|
|
||
| .cm-s-base16-dark span.cm-variable {color: #90a959;} | ||
| .cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;} | ||
| .cm-s-base16-dark span.cm-def {color: #d28445;} | ||
| .cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;} | ||
| .cm-s-base16-dark span.cm-bracket {color: #e0e0e0;} | ||
| .cm-s-base16-dark span.cm-tag {color: #ac4142;} | ||
| .cm-s-base16-dark span.cm-link {color: #aa759f;} | ||
|
|
||
| .cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| /* | ||
| Name: Base16 Default Light | ||
| Author: Chris Kempson (http://chriskempson.com) | ||
| CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools) | ||
| Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) | ||
| */ | ||
|
|
||
| .cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;} | ||
| .cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;} | ||
| .cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;} | ||
| .cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;} | ||
| .cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;} | ||
|
|
||
| .cm-s-base16-light span.cm-comment {color: #8f5536;} | ||
| .cm-s-base16-light span.cm-atom {color: #aa759f;} | ||
| .cm-s-base16-light span.cm-number {color: #aa759f;} | ||
|
|
||
| .cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;} | ||
| .cm-s-base16-light span.cm-keyword {color: #ac4142;} | ||
| .cm-s-base16-light span.cm-string {color: #f4bf75;} | ||
|
|
||
| .cm-s-base16-light span.cm-variable {color: #90a959;} | ||
| .cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;} | ||
| .cm-s-base16-light span.cm-def {color: #d28445;} | ||
| .cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;} | ||
| .cm-s-base16-light span.cm-bracket {color: #202020;} | ||
| .cm-s-base16-light span.cm-tag {color: #ac4142;} | ||
| .cm-s-base16-light span.cm-link {color: #aa759f;} | ||
|
|
||
| .cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,33 @@ | ||
| /* | ||
| Name: Tomorrow Night - Eighties | ||
| Author: Chris Kempson | ||
| CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror) | ||
| Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16) | ||
| */ | ||
|
|
||
| .cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;} | ||
| .cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;} | ||
| .cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;} | ||
| .cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;} | ||
| .cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;} | ||
|
|
||
| .cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;} | ||
| .cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;} | ||
| .cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;} | ||
|
|
||
| .cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;} | ||
| .cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;} | ||
| .cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;} | ||
|
|
||
| .cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;} | ||
| .cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;} | ||
| .cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;} | ||
| .cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;} | ||
| .cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;} | ||
| .cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;} | ||
| .cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;} | ||
|
|
||
| .cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;} |