Dotclear

Changeset 3617:bb465743f804


Ignore:
Timestamp:
12/11/17 15:59:17 (8 years ago)
Author:
franck <carnet.franck.paul@…>
Branch:
default
Message:

Update CodeMirror? from 5.25.1 to 5.32.1

Location:
admin/js/codemirror
Files:
37 edited

Legend:

Unmodified
Added
Removed
  • admin/js/codemirror/addon/edit/closebrackets.js

    r3532 r3617  
    2424    } 
    2525    if (val) { 
     26      ensureBound(getOption(val, "pairs")) 
    2627      cm.state.closeBrackets = val; 
    2728      cm.addKeyMap(keyMap); 
     
    3536  } 
    3637 
    37   var bind = defaults.pairs + "`"; 
    3838  var keyMap = {Backspace: handleBackspace, Enter: handleEnter}; 
    39   for (var i = 0; i < bind.length; i++) 
    40     keyMap["'" + bind.charAt(i) + "'"] = handler(bind.charAt(i)); 
     39  function ensureBound(chars) { 
     40    for (var i = 0; i < chars.length; i++) { 
     41      var ch = chars.charAt(i), key = "'" + ch + "'" 
     42      if (!keyMap[key]) keyMap[key] = handler(ch) 
     43    } 
     44  } 
     45  ensureBound(defaults.pairs + "`") 
    4146 
    4247  function handler(ch) { 
     
    8085    } 
    8186    cm.operation(function() { 
    82       cm.replaceSelection("\n\n", null); 
     87      var linesep = cm.lineSeparator() || "\n"; 
     88      cm.replaceSelection(linesep + linesep, null); 
    8389      cm.execCommand("goCharLeft"); 
    8490      ranges = cm.listSelections(); 
     
    128134        curType = "addFour"; 
    129135      } else if (identical) { 
    130         if (!CodeMirror.isWordChar(next) && enteringString(cm, cur, ch)) curType = "both"; 
     136        var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur) 
     137        if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both"; 
    131138        else return CodeMirror.Pass; 
    132139      } else if (opening && (cm.getLine(cur.line).length == cur.ch || 
     
    180187  } 
    181188 
    182   // Project the token type that will exists after the given char is 
    183   // typed, and use it to determine whether it would cause the start 
    184   // of a string token. 
    185   function enteringString(cm, pos, ch) { 
    186     var line = cm.getLine(pos.line); 
    187     var token = cm.getTokenAt(pos); 
    188     if (/\bstring2?\b/.test(token.type) || stringStartsAfter(cm, pos)) return false; 
    189     var stream = new CodeMirror.StringStream(line.slice(0, pos.ch) + ch + line.slice(pos.ch), 4); 
    190     stream.pos = stream.start = token.start; 
    191     for (;;) { 
    192       var type1 = cm.getMode().token(stream, token.state); 
    193       if (stream.pos >= pos.ch + 1) return /\bstring2?\b/.test(type1); 
    194       stream.start = stream.pos; 
    195     } 
    196   } 
    197  
    198189  function stringStartsAfter(cm, pos) { 
    199190    var token = cm.getTokenAt(Pos(pos.line, pos.ch + 1)) 
    200     return /\bstring/.test(token.type) && token.start == pos.ch 
     191    return /\bstring/.test(token.type) && token.start == pos.ch && 
     192      (pos.ch == 0 || !/\bstring/.test(cm.getTokenTypeAt(pos))) 
    201193  } 
    202194}); 
  • admin/js/codemirror/addon/edit/matchbrackets.js

    r3532 r3617  
    1717  var matching = {"(": ")>", ")": "(<", "[": "]>", "]": "[<", "{": "}>", "}": "{<"}; 
    1818 
    19   function findMatchingBracket(cm, where, strict, config) { 
     19  function findMatchingBracket(cm, where, config) { 
    2020    var line = cm.getLineHandle(where.line), pos = where.ch - 1; 
    21     var match = (pos >= 0 && matching[line.text.charAt(pos)]) || matching[line.text.charAt(++pos)]; 
     21    var afterCursor = config && config.afterCursor 
     22    if (afterCursor == null) 
     23      afterCursor = /(^| )cm-fat-cursor($| )/.test(cm.getWrapperElement().className) 
     24 
     25    // A cursor is defined as between two characters, but in in vim command mode 
     26    // (i.e. not insert mode), the cursor is visually represented as a 
     27    // highlighted box on top of the 2nd character. Otherwise, we allow matches 
     28    // from before or after the cursor. 
     29    var match = (!afterCursor && pos >= 0 && matching[line.text.charAt(pos)]) || 
     30        matching[line.text.charAt(++pos)]; 
    2231    if (!match) return null; 
    2332    var dir = match.charAt(1) == ">" ? 1 : -1; 
    24     if (strict && (dir > 0) != (pos == where.ch)) return null; 
     33    if (config && config.strict && (dir > 0) != (pos == where.ch)) return null; 
    2534    var style = cm.getTokenTypeAt(Pos(where.line, pos + 1)); 
    2635 
     
    7079    var marks = [], ranges = cm.listSelections(); 
    7180    for (var i = 0; i < ranges.length; i++) { 
    72       var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, false, config); 
     81      var match = ranges[i].empty() && findMatchingBracket(cm, ranges[i].head, config); 
    7382      if (match && cm.getLine(match.from.line).length <= maxHighlightLen) { 
    7483        var style = match.match ? "CodeMirror-matchingbracket" : "CodeMirror-nonmatchingbracket"; 
     
    114123 
    115124  CodeMirror.defineExtension("matchBrackets", function() {matchBrackets(this, true);}); 
    116   CodeMirror.defineExtension("findMatchingBracket", function(pos, strict, config){ 
    117     return findMatchingBracket(this, pos, strict, config); 
     125  CodeMirror.defineExtension("findMatchingBracket", function(pos, config, oldConfig){ 
     126    // Backwards-compatibility kludge 
     127    if (oldConfig || typeof config == "boolean") { 
     128      if (!oldConfig) { 
     129        config = config ? {strict: true} : null 
     130      } else { 
     131        oldConfig.strict = config 
     132        config = oldConfig 
     133      } 
     134    } 
     135    return findMatchingBracket(this, pos, config) 
    118136  }); 
    119137  CodeMirror.defineExtension("scanForBracket", function(pos, dir, style, config){ 
  • admin/js/codemirror/lib/codemirror.css

    r3542 r3617  
    66  height: 300px; 
    77  color: black; 
     8  direction: ltr; 
    89} 
    910 
     
    5960  z-index: 1; 
    6061} 
    61  
     62.cm-fat-cursor-mark { 
     63  background-color: rgba(20, 255, 20, 0.5); 
     64  -webkit-animation: blink 1.06s steps(1) infinite; 
     65  -moz-animation: blink 1.06s steps(1) infinite; 
     66  animation: blink 1.06s steps(1) infinite; 
     67} 
    6268.cm-animate-fat-cursor { 
    6369  width: auto; 
     
    120126.cm-s-default .cm-operator {} 
    121127.cm-s-default .cm-variable-2 {color: #05a;} 
    122 .cm-s-default .cm-variable-3 {color: #085;} 
     128.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;} 
    123129.cm-s-default .cm-comment {color: #a50;} 
    124130.cm-s-default .cm-string {color: #a11;} 
     
    140146/* Default styles for common addons */ 
    141147 
    142 div.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;} 
    143 div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;} 
     148div.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;} 
     149div.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;} 
    144150.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); } 
    145151.CodeMirror-activeline-background {background: #e8f2ff;} 
     
    320326 
    321327.cm-searching { 
    322   background: #ffa; 
    323   background: rgba(255, 255, 0, .4); 
     328  background-color: #ffa; 
     329  background-color: rgba(255, 255, 0, .4); 
    324330} 
    325331 
  • admin/js/codemirror/mode/css/css.js

    r3542 r3617  
    7878    } else if (/[:;{}\[\]\(\)]/.test(ch)) { 
    7979      return ret(null, ch); 
    80     } else if ((ch == "u" && stream.match(/rl(-prefix)?\(/)) || 
    81                (ch == "d" && stream.match("omain(")) || 
    82                (ch == "r" && stream.match("egexp("))) { 
     80    } else if (((ch == "u" || ch == "U") && stream.match(/rl(-prefix)?\(/i)) || 
     81               ((ch == "d" || ch == "D") && stream.match("omain(", true, true)) || 
     82               ((ch == "r" || ch == "R") && stream.match("egexp(", true, true))) { 
    8383      stream.backUp(1); 
    8484      state.tokenize = tokenParenthesized; 
     
    163163    } else if (type == "}" && state.context.prev) { 
    164164      return popContext(state); 
    165     } else if (supportsAtComponent && /@component/.test(type)) { 
     165    } else if (supportsAtComponent && /@component/i.test(type)) { 
    166166      return pushContext(state, stream, "atComponentBlock"); 
    167     } else if (/^@(-moz-)?document$/.test(type)) { 
     167    } else if (/^@(-moz-)?document$/i.test(type)) { 
    168168      return pushContext(state, stream, "documentTypes"); 
    169     } else if (/^@(media|supports|(-moz-)?document|import)$/.test(type)) { 
     169    } else if (/^@(media|supports|(-moz-)?document|import)$/i.test(type)) { 
    170170      return pushContext(state, stream, "atBlock"); 
    171     } else if (/^@(font-face|counter-style)/.test(type)) { 
     171    } else if (/^@(font-face|counter-style)/i.test(type)) { 
    172172      state.stateArg = type; 
    173173      return "restricted_atBlock_before"; 
    174     } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(type)) { 
     174    } else if (/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(type)) { 
    175175      return "keyframes"; 
    176176    } else if (type && type.charAt(0) == "@") { 
     
    384384      } 
    385385      override = style; 
    386       state.state = states[state.state](type, stream, state); 
     386      if (type != "comment") 
     387        state.state = states[state.state](type, stream, state); 
    387388      return override; 
    388389    }, 
     
    402403          // Dedent relative to current context. 
    403404          indent = Math.max(0, cx.indent - indentUnit); 
    404           cx = cx.prev; 
    405405        } 
    406406      } 
     
    411411    blockCommentStart: "/*", 
    412412    blockCommentEnd: "*/", 
     413    blockCommentContinue: " * ", 
    413414    lineComment: lineComment, 
    414415    fold: "brace" 
     
    473474    "border-top-width", "border-width", "bottom", "box-decoration-break", 
    474475    "box-shadow", "box-sizing", "break-after", "break-before", "break-inside", 
    475     "caption-side", "clear", "clip", "color", "color-profile", "column-count", 
     476    "caption-side", "caret-color", "clear", "clip", "color", "color-profile", "column-count", 
    476477    "column-fill", "column-gap", "column-rule", "column-rule-color", 
    477478    "column-rule-style", "column-rule-width", "column-span", "column-width", 
     
    494495    "grid-template-rows", "hanging-punctuation", "height", "hyphens", 
    495496    "icon", "image-orientation", "image-rendering", "image-resolution", 
    496     "inline-box-align", "justify-content", "left", "letter-spacing", 
     497    "inline-box-align", "justify-content", "justify-items", "justify-self", "left", "letter-spacing", 
    497498    "line-break", "line-height", "line-stacking", "line-stacking-ruby", 
    498499    "line-stacking-shift", "line-stacking-strategy", "list-style", 
     
    509510    "page", "page-break-after", "page-break-before", "page-break-inside", 
    510511    "page-policy", "pause", "pause-after", "pause-before", "perspective", 
    511     "perspective-origin", "pitch", "pitch-range", "play-during", "position", 
     512    "perspective-origin", "pitch", "pitch-range", "place-content", "place-items", "place-self", "play-during", "position", 
    512513    "presentation-level", "punctuation-trim", "quotes", "region-break-after", 
    513514    "region-break-before", "region-break-inside", "region-fragment", 
     
    660661    "scroll", "scrollbar", "scroll-position", "se-resize", "searchfield", 
    661662    "searchfield-cancel-button", "searchfield-decoration", 
    662     "searchfield-results-button", "searchfield-results-decoration", 
     663    "searchfield-results-button", "searchfield-results-decoration", "self-start", "self-end", 
    663664    "semi-condensed", "semi-expanded", "separate", "serif", "show", "sidama", 
    664665    "simp-chinese-formal", "simp-chinese-informal", "single", 
     
    666667    "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "slow", 
    667668    "small", "small-caps", "small-caption", "smaller", "soft-light", "solid", "somali", 
    668     "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "spell-out", "square", 
     669    "source-atop", "source-in", "source-out", "source-over", "space", "space-around", "space-between", "space-evenly", "spell-out", "square", 
    669670    "square-button", "start", "static", "status-bar", "stretch", "stroke", "sub", 
    670671    "subpixel-antialiased", "super", "sw-resize", "symbolic", "symbols", "system-ui", "table", 
     
    749750      }, 
    750751      ":": function(stream) { 
    751         if (stream.match(/\s*\{/)) 
    752           return [null, "{"]; 
     752        if (stream.match(/\s*\{/, false)) 
     753          return [null, null] 
    753754        return false; 
    754755      }, 
     
    793794      "@": function(stream) { 
    794795        if (stream.eat("{")) return [null, "interpolation"]; 
    795         if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/, false)) return false; 
     796        if (stream.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i, false)) return false; 
    796797        stream.eatWhile(/[\w\\\-]/); 
    797798        if (stream.match(/^\s*:/, false)) 
  • admin/js/codemirror/mode/htmlmixed/htmlmixed.js

    r3532 r3617  
    134134      }, 
    135135 
    136       indent: function (state, textAfter) { 
     136      indent: function (state, textAfter, line) { 
    137137        if (!state.localMode || /^\s*<\//.test(textAfter)) 
    138138          return htmlMode.indent(state.htmlState, textAfter); 
    139139        else if (state.localMode.indent) 
    140           return state.localMode.indent(state.localState, textAfter); 
     140          return state.localMode.indent(state.localState, textAfter, line); 
    141141        else 
    142142          return CodeMirror.Pass; 
  • admin/js/codemirror/mode/javascript/javascript.js

    r3542 r3617  
    1212"use strict"; 
    1313 
    14 function expressionAllowed(stream, state, backUp) { 
    15   return /^(?:operator|sof|keyword c|case|new|export|default|[\[{}\(,;:]|=>)$/.test(state.lastType) || 
    16     (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) 
    17 } 
    18  
    1914CodeMirror.defineMode("javascript", function(config, parserConfig) { 
    2015  var indentUnit = config.indentUnit; 
     
    2924  var keywords = function(){ 
    3025    function kw(type) {return {type: type, style: "keyword"};} 
    31     var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"); 
     26    var A = kw("keyword a"), B = kw("keyword b"), C = kw("keyword c"), D = kw("keyword d"); 
    3227    var operator = kw("operator"), atom = {type: "atom", style: "atom"}; 
    3328 
    3429    var jsKeywords = { 
    3530      "if": kw("if"), "while": A, "with": A, "else": B, "do": B, "try": B, "finally": B, 
    36       "return": C, "break": C, "continue": C, "new": kw("new"), "delete": C, "throw": C, "debugger": C, 
    37       "var": kw("var"), "const": kw("var"), "let": kw("var"), 
     31      "return": D, "break": D, "continue": D, "new": kw("new"), "delete": C, "void": C, "throw": C, 
     32      "debugger": kw("debugger"), "var": kw("var"), "const": kw("var"), "let": kw("var"), 
    3833      "function": kw("function"), "catch": kw("catch"), 
    3934      "for": kw("for"), "switch": kw("switch"), "case": kw("case"), "default": kw("default"), 
     
    4237      "this": kw("this"), "class": kw("class"), "super": kw("atom"), 
    4338      "yield": C, "export": kw("export"), "import": kw("import"), "extends": C, 
    44       "await": C, "async": kw("async") 
     39      "await": C 
    4540    }; 
    4641 
    4742    // Extend the 'normal' keywords with the TypeScript language extensions 
    4843    if (isTS) { 
    49       var type = {type: "variable", style: "variable-3"}; 
     44      var type = {type: "variable", style: "type"}; 
    5045      var tsKeywords = { 
    5146        // object-like things 
     
    5348        "implements": C, 
    5449        "namespace": C, 
    55         "module": kw("module"), 
    56         "enum": kw("module"), 
    57         "type": kw("type"), 
    5850 
    5951        // scope modifiers 
     
    6254        "protected": kw("modifier"), 
    6355        "abstract": kw("modifier"), 
    64  
    65         // operators 
    66         "as": operator, 
     56        "readonly": kw("modifier"), 
    6757 
    6858        // types 
     
    7868  }(); 
    7969 
    80   var isOperatorChar = /[+\-*&%=<>!?|~^]/; 
     70  var isOperatorChar = /[+\-*&%=<>!?|~^@]/; 
    8171  var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/; 
    8272 
     
    137127        return ret("regexp", "string-2"); 
    138128      } else { 
    139         stream.eatWhile(isOperatorChar); 
     129        stream.eat("="); 
    140130        return ret("operator", "operator", stream.current()); 
    141131      } 
     
    147137      return ret("error", "error"); 
    148138    } else if (isOperatorChar.test(ch)) { 
    149       if (ch != ">" || !state.lexical || state.lexical.type != ">") 
    150         stream.eatWhile(isOperatorChar); 
     139      if (ch != ">" || !state.lexical || state.lexical.type != ">") { 
     140        if (stream.eat("=")) { 
     141          if (ch == "!" || ch == "=") stream.eat("=") 
     142        } else if (/[<>*+\-]/.test(ch)) { 
     143          stream.eat(ch) 
     144          if (ch == ">") stream.eat(ch) 
     145        } 
     146      } 
    151147      return ret("operator", "operator", stream.current()); 
    152148    } else if (wordRE.test(ch)) { 
    153149      stream.eatWhile(wordRE); 
    154       var word = stream.current(), known = keywords.propertyIsEnumerable(word) && keywords[word]; 
    155       return (known && state.lastType != ".") ? ret(known.type, known.style, word) : 
    156                      ret("variable", "variable", word); 
     150      var word = stream.current() 
     151      if (state.lastType != ".") { 
     152        if (keywords.propertyIsEnumerable(word)) { 
     153          var kw = keywords[word] 
     154          return ret(kw.type, kw.style, word) 
     155        } 
     156        if (word == "async" && stream.match(/^(\s|\/\*.*?\*\/)*[\(\w]/, false)) 
     157          return ret("async", "keyword", word) 
     158      } 
     159      return ret("variable", "variable", word) 
    157160    } 
    158161  } 
     
    353356    if (type == "keyword a") return cont(pushlex("form"), parenExpr, statement, poplex); 
    354357    if (type == "keyword b") return cont(pushlex("form"), statement, poplex); 
     358    if (type == "keyword d") return cx.stream.match(/^\s*$/, false) ? cont() : cont(pushlex("stat"), maybeexpression, expect(";"), poplex); 
     359    if (type == "debugger") return cont(expect(";")); 
    355360    if (type == "{") return cont(pushlex("}"), block, poplex); 
    356361    if (type == ";") return cont(); 
     
    362367    if (type == "function") return cont(functiondef); 
    363368    if (type == "for") return cont(pushlex("form"), forspec, statement, poplex); 
    364     if (type == "variable") return cont(pushlex("stat"), maybelabel); 
    365     if (type == "switch") return cont(pushlex("form"), parenExpr, pushlex("}", "switch"), expect("{"), 
     369    if (type == "variable") { 
     370      if (isTS && value == "type") { 
     371        cx.marked = "keyword" 
     372        return cont(typeexpr, expect("operator"), typeexpr, expect(";")); 
     373      } else if (isTS && value == "declare") { 
     374        cx.marked = "keyword" 
     375        return cont(statement) 
     376      } else if (isTS && (value == "module" || value == "enum") && cx.stream.match(/^\s*\w/, false)) { 
     377        cx.marked = "keyword" 
     378        return cont(pushlex("form"), pattern, expect("{"), pushlex("}"), block, poplex, poplex) 
     379      } else { 
     380        return cont(pushlex("stat"), maybelabel); 
     381      } 
     382    } 
     383    if (type == "switch") return cont(pushlex("form"), parenExpr, expect("{"), pushlex("}", "switch"), 
    366384                                      block, poplex, poplex); 
    367385    if (type == "case") return cont(expression, expect(":")); 
     
    372390    if (type == "export") return cont(pushlex("stat"), afterExport, poplex); 
    373391    if (type == "import") return cont(pushlex("stat"), afterImport, poplex); 
    374     if (type == "module") return cont(pushlex("form"), pattern, pushlex("}"), expect("{"), block, poplex, poplex) 
    375     if (type == "type") return cont(typeexpr, expect("operator"), typeexpr, expect(";")); 
    376392    if (type == "async") return cont(statement) 
     393    if (value == "@") return cont(expression, statement) 
    377394    return pass(pushlex("stat"), expression, expect(";"), poplex); 
    378395  } 
     
    390407    if (cx.state.fatArrowAt == cx.stream.start) { 
    391408      var body = noComma ? arrowBodyNoComma : arrowBody; 
    392       if (type == "(") return cont(pushcontext, pushlex(")"), commasep(pattern, ")"), poplex, expect("=>"), body, popcontext); 
     409      if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, expect("=>"), body, popcontext); 
    393410      else if (type == "variable") return pass(pushcontext, pattern, expect("=>"), body, popcontext); 
    394411    } 
     
    398415    if (type == "function") return cont(functiondef, maybeop); 
    399416    if (type == "class") return cont(pushlex("form"), classExpression, poplex); 
    400     if (type == "keyword c" || type == "async") return cont(noComma ? maybeexpressionNoComma : maybeexpression); 
     417    if (type == "keyword c" || type == "async") return cont(noComma ? expressionNoComma : expression); 
    401418    if (type == "(") return cont(pushlex(")"), maybeexpression, expect(")"), poplex, maybeop); 
    402419    if (type == "operator" || type == "spread") return cont(noComma ? expressionNoComma : expression); 
     
    411428    return pass(expression); 
    412429  } 
    413   function maybeexpressionNoComma(type) { 
    414     if (type.match(/[;\}\)\],]/)) return pass(); 
    415     return pass(expressionNoComma); 
    416   } 
    417430 
    418431  function maybeoperatorComma(type, value) { 
     
    425438    if (type == "=>") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext); 
    426439    if (type == "operator") { 
    427       if (/\+\+|--/.test(value)) return cont(me); 
     440      if (/\+\+|--/.test(value) || isTS && value == "!") return cont(me); 
     441      if (isTS && value == "<" && cx.stream.match(/^([^>]|<.*?>)*>\s*\(/, false)) 
     442        return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, me); 
    428443      if (value == "?") return cont(expression, expect(":"), expr); 
    429444      return cont(expr); 
     
    434449    if (type == ".") return cont(property, me); 
    435450    if (type == "[") return cont(pushlex("]"), maybeexpression, expect("]"), poplex, me); 
     451    if (isTS && value == "as") { cx.marked = "keyword"; return cont(typeexpr, me) } 
     452    if (type == "regexp") { 
     453      cx.state.lastType = cx.marked = "operator" 
     454      cx.stream.backUp(cx.stream.pos - cx.stream.start - 1) 
     455      return cont(expr) 
     456    } 
    436457  } 
    437458  function quasi(type, value) { 
     
    458479    return function(type) { 
    459480      if (type == ".") return cont(noComma ? targetNoComma : target); 
     481      else if (type == "variable" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma) 
    460482      else return pass(noComma ? expressionNoComma : expression); 
    461483    }; 
     
    481503      cx.marked = "property"; 
    482504      if (value == "get" || value == "set") return cont(getterSetter); 
     505      var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params 
     506      if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\s*:\s*/, false))) 
     507        cx.state.fatArrowAt = cx.stream.pos + m[0].length 
    483508      return cont(afterprop); 
    484509    } else if (type == "number" || type == "string") { 
     
    492517      return cont(expression, expect("]"), afterprop); 
    493518    } else if (type == "spread") { 
    494       return cont(expression); 
     519      return cont(expressionNoComma, afterprop); 
     520    } else if (value == "*") { 
     521      cx.marked = "keyword"; 
     522      return cont(objprop); 
    495523    } else if (type == ":") { 
    496524      return pass(afterprop) 
     
    539567    } 
    540568  } 
    541   function typeexpr(type) { 
    542     if (type == "variable") {cx.marked = "variable-3"; return cont(afterType);} 
     569  function mayberettype(type) { 
     570    if (isTS && type == ":") { 
     571      if (cx.stream.match(/^\s*\w+\s+is\b/, false)) return cont(expression, isKW, typeexpr) 
     572      else return cont(typeexpr) 
     573    } 
     574  } 
     575  function isKW(_, value) { 
     576    if (value == "is") { 
     577      cx.marked = "keyword" 
     578      return cont() 
     579    } 
     580  } 
     581  function typeexpr(type, value) { 
     582    if (type == "variable" || value == "void") { 
     583      if (value == "keyof") { 
     584        cx.marked = "keyword" 
     585        return cont(typeexpr) 
     586      } else { 
     587        cx.marked = "type" 
     588        return cont(afterType) 
     589      } 
     590    } 
    543591    if (type == "string" || type == "number" || type == "atom") return cont(afterType); 
    544     if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex) 
     592    if (type == "[") return cont(pushlex("]"), commasep(typeexpr, "]", ","), poplex, afterType) 
     593    if (type == "{") return cont(pushlex("}"), commasep(typeprop, "}", ",;"), poplex, afterType) 
    545594    if (type == "(") return cont(commasep(typearg, ")"), maybeReturnType) 
    546595  } 
     
    556605    } else if (type == ":") { 
    557606      return cont(typeexpr) 
     607    } else if (type == "[") { 
     608      return cont(expression, maybetype, expect("]"), typeprop) 
    558609    } 
    559610  } 
     
    566617    if (value == "|" || type == ".") return cont(typeexpr) 
    567618    if (type == "[") return cont(expect("]"), afterType) 
     619    if (value == "extends") return cont(typeexpr) 
     620  } 
     621  function maybeTypeArgs(_, value) { 
     622    if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, afterType) 
     623  } 
     624  function typeparam() { 
     625    return pass(typeexpr, maybeTypeDefault) 
     626  } 
     627  function maybeTypeDefault(_, value) { 
     628    if (value == "=") return cont(typeexpr) 
    568629  } 
    569630  function vardef() { 
     
    620681    if (value == "*") {cx.marked = "keyword"; return cont(functiondef);} 
    621682    if (type == "variable") {register(value); return cont(functiondef);} 
    622     if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, maybetype, statement, popcontext); 
    623   } 
    624   function funarg(type) { 
    625     if (type == "spread") return cont(funarg); 
     683    if (type == "(") return cont(pushcontext, pushlex(")"), commasep(funarg, ")"), poplex, mayberettype, statement, popcontext); 
     684    if (isTS && value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, functiondef) 
     685  } 
     686  function funarg(type, value) { 
     687    if (value == "@") cont(expression, funarg) 
     688    if (type == "spread" || type == "modifier") return cont(funarg); 
    626689    return pass(pattern, maybetype, maybeAssign); 
    627690  } 
     
    635698  } 
    636699  function classNameAfter(type, value) { 
    637     if (value == "<") return cont(pushlex(">"), commasep(typeexpr, ">"), poplex, classNameAfter) 
     700    if (value == "<") return cont(pushlex(">"), commasep(typeparam, ">"), poplex, classNameAfter) 
    638701    if (value == "extends" || value == "implements" || (isTS && type == ",")) 
    639702      return cont(isTS ? typeexpr : expression, classNameAfter); 
     
    641704  } 
    642705  function classBody(type, value) { 
     706    if (type == "modifier" || type == "async" || 
     707        (type == "variable" && 
     708         (value == "static" || value == "get" || value == "set") && 
     709         cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false))) { 
     710      cx.marked = "keyword"; 
     711      return cont(classBody); 
     712    } 
    643713    if (type == "variable" || cx.style == "keyword") { 
    644       if ((value == "async" || value == "static" || value == "get" || value == "set" || 
    645            (isTS && (value == "public" || value == "private" || value == "protected" || value == "readonly" || value == "abstract"))) && 
    646           cx.stream.match(/^\s+[\w$\xa1-\uffff]/, false)) { 
    647         cx.marked = "keyword"; 
    648         return cont(classBody); 
    649       } 
    650714      cx.marked = "property"; 
    651715      return cont(isTS ? classfield : functiondef, classBody); 
     
    659723    if (type == ";") return cont(classBody); 
    660724    if (type == "}") return cont(); 
     725    if (value == "@") return cont(expression, classBody) 
    661726  } 
    662727  function classfield(type, value) { 
     
    704769      isOperatorChar.test(textAfter.charAt(0)) || 
    705770      /[,.]/.test(textAfter.charAt(0)); 
     771  } 
     772 
     773  function expressionAllowed(stream, state, backUp) { 
     774    return state.tokenize == tokenBase && 
     775      /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(state.lastType) || 
     776      (state.lastType == "quasi" && /\{\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0)))) 
    706777  } 
    707778 
     
    771842    blockCommentStart: jsonMode ? null : "/*", 
    772843    blockCommentEnd: jsonMode ? null : "*/", 
     844    blockCommentContinue: jsonMode ? null : " * ", 
    773845    lineComment: jsonMode ? null : "//", 
    774846    fold: "brace", 
     
    780852 
    781853    expressionAllowed: expressionAllowed, 
     854 
    782855    skipExpression: function(state) { 
    783856      var top = state.cc[state.cc.length - 1] 
  • admin/js/codemirror/mode/php/php.js

    r3251 r3617  
    152152 
    153153  CodeMirror.defineMode("php", function(config, parserConfig) { 
    154     var htmlMode = CodeMirror.getMode(config, "text/html"); 
     154    var htmlMode = CodeMirror.getMode(config, (parserConfig && parserConfig.htmlMode) || "text/html"); 
    155155    var phpMode = CodeMirror.getMode(config, phpConfig); 
    156156 
  • admin/js/codemirror/mode/xml/xml.js

    r3251 r3617  
    5353  allowUnquoted: false, 
    5454  allowMissing: false, 
     55  allowMissingTagName: false, 
    5556  caseFold: false 
    5657} 
     
    227228      setStyle = "tag"; 
    228229      return attrState; 
     230    } else if (config.allowMissingTagName && type == "endTag") { 
     231      setStyle = "tag bracket"; 
     232      return attrState(type, stream, state); 
    229233    } else { 
    230234      setStyle = "error"; 
     
    245249        return closeStateErr; 
    246250      } 
     251    } else if (config.allowMissingTagName && type == "endTag") { 
     252      setStyle = "tag bracket"; 
     253      return closeState(type, stream, state); 
    247254    } else { 
    248255      setStyle = "error"; 
  • admin/js/codemirror/theme/abcdef.css

    r3251 r3617  
    1515.cm-s-abcdef span.cm-variable { color: #abcdef; } 
    1616.cm-s-abcdef span.cm-variable-2 { color: #cacbcc; } 
    17 .cm-s-abcdef span.cm-variable-3 { color: #def; } 
     17.cm-s-abcdef span.cm-variable-3, .cm-s-abcdef span.cm-type { color: #def; } 
    1818.cm-s-abcdef span.cm-property { color: #fedcba; } 
    1919.cm-s-abcdef span.cm-operator { color: #ff0; } 
  • admin/js/codemirror/theme/ambiance.css

    r3251 r3617  
    1212.cm-s-ambiance .cm-variable { color: #ffb795; } 
    1313.cm-s-ambiance .cm-variable-2 { color: #eed1b3; } 
    14 .cm-s-ambiance .cm-variable-3 { color: #faded3; } 
     14.cm-s-ambiance .cm-variable-3, .cm-s-ambiance .cm-type { color: #faded3; } 
    1515.cm-s-ambiance .cm-property { color: #eed1b3; } 
    1616.cm-s-ambiance .cm-operator { color: #fa8d6a; } 
  • admin/js/codemirror/theme/cobalt.css

    r3251 r3617  
    1616.cm-s-cobalt span.cm-meta { color: #ff9d00; } 
    1717.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; } 
    18 .cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; } 
     18.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def, .cm-s-cobalt .cm-type { color: white; } 
    1919.cm-s-cobalt span.cm-bracket { color: #d8d8d8; } 
    2020.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; } 
  • admin/js/codemirror/theme/colorforth.css

    r3251 r3617  
    1616 
    1717.cm-s-colorforth span.cm-variable-2  { color: #EEE; } 
    18 .cm-s-colorforth span.cm-variable-3  { color: #DDD; } 
     18.cm-s-colorforth span.cm-variable-3, .cm-s-colorforth span.cm-type { color: #DDD; } 
    1919.cm-s-colorforth span.cm-property    {} 
    2020.cm-s-colorforth span.cm-operator    {} 
  • admin/js/codemirror/theme/dracula.css

    r3532 r3617  
    3535.cm-s-dracula span.cm-property { color: #66d9ef; } 
    3636.cm-s-dracula span.cm-builtin { color: #50fa7b; } 
    37 .cm-s-dracula span.cm-variable-3 { color: #ffb86c; } 
     37.cm-s-dracula span.cm-variable-3, .cm-s-dracula span.cm-type { color: #ffb86c; } 
    3838 
    3939.cm-s-dracula .CodeMirror-activeline-background { background: rgba(255,255,255,0.1); } 
  • admin/js/codemirror/theme/duotone-dark.css

    r3532 r3617  
    2525.cm-s-duotone-dark span.cm-positive { color: #6a51e6; } 
    2626 
    27 .cm-s-duotone-dark span.cm-variable-2, .cm-s-duotone-dark span.cm-variable-3, .cm-s-duotone-dark span.cm-string-2, .cm-s-duotone-dark span.cm-url { color: #7a63ee; } 
     27.cm-s-duotone-dark span.cm-variable-2, .cm-s-duotone-dark span.cm-variable-3, .cm-s-duotone-dark span.cm-type, .cm-s-duotone-dark span.cm-string-2, .cm-s-duotone-dark span.cm-url { color: #7a63ee; } 
    2828.cm-s-duotone-dark span.cm-def, .cm-s-duotone-dark span.cm-tag, .cm-s-duotone-dark span.cm-builtin, .cm-s-duotone-dark span.cm-qualifier, .cm-s-duotone-dark span.cm-header, .cm-s-duotone-dark span.cm-em { color: #eeebff; } 
    2929.cm-s-duotone-dark span.cm-bracket, .cm-s-duotone-dark span.cm-comment { color: #6c6783; } 
  • admin/js/codemirror/theme/duotone-light.css

    r3532 r3617  
    2424.cm-s-duotone-light span.cm-positive { color: #896724; } 
    2525 
    26 .cm-s-duotone-light span.cm-variable-2, .cm-s-duotone-light span.cm-variable-3, .cm-s-duotone-light span.cm-string-2, .cm-s-duotone-light span.cm-url { color: #896724; } 
     26.cm-s-duotone-light span.cm-variable-2, .cm-s-duotone-light span.cm-variable-3, .cm-s-duotone-light span.cm-type, .cm-s-duotone-light span.cm-string-2, .cm-s-duotone-light span.cm-url { color: #896724; } 
    2727.cm-s-duotone-light span.cm-def, .cm-s-duotone-light span.cm-tag, .cm-s-duotone-light span.cm-builtin, .cm-s-duotone-light span.cm-qualifier, .cm-s-duotone-light span.cm-header, .cm-s-duotone-light span.cm-em { color: #2d2006; } 
    2828.cm-s-duotone-light span.cm-bracket, .cm-s-duotone-light span.cm-comment { color: #b6ad9a; } 
  • admin/js/codemirror/theme/eclipse.css

    r3251 r3617  
    66.cm-s-eclipse span.cm-variable { color: black; } 
    77.cm-s-eclipse span.cm-variable-2 { color: #0000C0; } 
    8 .cm-s-eclipse span.cm-variable-3 { color: #0000C0; } 
     8.cm-s-eclipse span.cm-variable-3, .cm-s-eclipse span.cm-type { color: #0000C0; } 
    99.cm-s-eclipse span.cm-property { color: black; } 
    1010.cm-s-eclipse span.cm-operator { color: black; } 
  • admin/js/codemirror/theme/erlang-dark.css

    r3251 r3617  
    2828.cm-s-erlang-dark span.cm-variable   { color: #50fe50; } 
    2929.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; } 
    30 .cm-s-erlang-dark span.cm-variable-3 { color: #ccc; } 
     30.cm-s-erlang-dark span.cm-variable-3, .cm-s-erlang-dark span.cm-type { color: #ccc; } 
    3131.cm-s-erlang-dark span.cm-error      { color: #9d1e15; } 
    3232 
  • admin/js/codemirror/theme/icecoder.css

    r3251 r3617  
    1212.cm-s-icecoder span.cm-variable { color: #6cb5d9; }                /* blue */ 
    1313.cm-s-icecoder span.cm-variable-2 { color: #cc1e5c; }              /* pink */ 
    14 .cm-s-icecoder span.cm-variable-3 { color: #f9602c; }              /* orange */ 
     14.cm-s-icecoder span.cm-variable-3, .cm-s-icecoder span.cm-type { color: #f9602c; } /* orange */ 
    1515 
    1616.cm-s-icecoder span.cm-property { color: #eee; }                   /* off-white 1 */ 
  • admin/js/codemirror/theme/lesser-dark.css

    r3251 r3617  
    2828.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; } 
    2929.cm-s-lesser-dark span.cm-variable-2 { color: #669199; } 
    30 .cm-s-lesser-dark span.cm-variable-3 { color: white; } 
     30.cm-s-lesser-dark span.cm-variable-3, .cm-s-lesser-dark span.cm-type { color: white; } 
    3131.cm-s-lesser-dark span.cm-property { color: #92A75C; } 
    3232.cm-s-lesser-dark span.cm-operator { color: #92A75C; } 
  • admin/js/codemirror/theme/liquibyte.css

    r3251 r3617  
    3737 
    3838.cm-s-liquibyte span.cm-variable-2  { color: #007f7f; font-weight: bold; } 
    39 .cm-s-liquibyte span.cm-variable-3  { color: #c080ff; font-weight: bold; } 
     39.cm-s-liquibyte span.cm-variable-3, .cm-s-liquibyte span.cm-type { color: #c080ff; font-weight: bold; } 
    4040.cm-s-liquibyte span.cm-property    { color: #999; font-weight: bold; } 
    4141.cm-s-liquibyte span.cm-operator    { color: #fff; } 
     
    6060/* Scrollbars */ 
    6161/* Simple */ 
    62 .cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover, div.CodeMirror-simplescroll-vertical div:hover { 
     62.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div:hover, .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div:hover { 
    6363     background-color: rgba(80, 80, 80, .7); 
    6464} 
    65 .cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div, div.CodeMirror-simplescroll-vertical div { 
     65.cm-s-liquibyte div.CodeMirror-simplescroll-horizontal div, .cm-s-liquibyte div.CodeMirror-simplescroll-vertical div { 
    6666     background-color: rgba(80, 80, 80, .3); 
    6767     border: 1px solid #404040; 
  • admin/js/codemirror/theme/material.css

    r3532 r3617  
    2828.cm-s-material .cm-operator { color: rgba(233, 237, 237, 1); } 
    2929.cm-s-material .cm-variable-2 { color: #80CBC4; } 
    30 .cm-s-material .cm-variable-3 { color: #82B1FF; } 
     30.cm-s-material .cm-variable-3, .cm-s-material .cm-type { color: #82B1FF; } 
    3131.cm-s-material .cm-builtin { color: #DECB6B; } 
    3232.cm-s-material .cm-atom { color: #F77669; } 
     
    4242.cm-s-material .cm-property { color: #80CBAE; } 
    4343.cm-s-material .cm-qualifier { color: #DECB6B; } 
    44 .cm-s-material .cm-variable-3 { color: #DECB6B; } 
     44.cm-s-material .cm-variable-3, .cm-s-material .cm-type { color: #DECB6B; } 
    4545.cm-s-material .cm-tag { color: rgba(255, 83, 112, 1); } 
    4646.cm-s-material .cm-error { 
  • admin/js/codemirror/theme/mdn-like.css

    r3251 r3617  
    2222.cm-s-mdn-like .cm-def { color: #8DA6CE; } 
    2323.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; } 
    24 .cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; } 
     24.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def, .cm-s-mdn-like span.cm-type { color: #07a; } 
    2525 
    2626.cm-s-mdn-like .cm-variable { color: #07a; } 
  • admin/js/codemirror/theme/midnight.css

    r3251 r3617  
    1212    color: #D1EDFF; 
    1313} 
    14  
    15 .cm-s-midnight.CodeMirror { border-top: 1px solid black; border-bottom: 1px solid black; } 
    1614 
    1715.cm-s-midnight div.CodeMirror-selected { background: #314D67; } 
  • admin/js/codemirror/theme/monokai.css

    r3251 r3617  
    2222.cm-s-monokai span.cm-variable { color: #f8f8f2; } 
    2323.cm-s-monokai span.cm-variable-2 { color: #9effff; } 
    24 .cm-s-monokai span.cm-variable-3 { color: #66d9ef; } 
     24.cm-s-monokai span.cm-variable-3, .cm-s-monokai span.cm-type { color: #66d9ef; } 
    2525.cm-s-monokai span.cm-def { color: #fd971f; } 
    2626.cm-s-monokai span.cm-bracket { color: #f8f8f2; } 
  • admin/js/codemirror/theme/night.css

    r3251 r3617  
    1818.cm-s-night span.cm-meta { color: #7678e2; } 
    1919.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; } 
    20 .cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; } 
     20.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def, .cm-s-night span.cm-type { color: white; } 
    2121.cm-s-night span.cm-bracket { color: #8da6ce; } 
    2222.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; } 
  • admin/js/codemirror/theme/panda-syntax.css

    r3532 r3617  
    5353     color: #ff9ac1; 
    5454} 
    55 .cm-s-panda-syntax .cm-variable-3 { 
     55.cm-s-panda-syntax .cm-variable-3, .cm-s-panda-syntax .cm-type { 
    5656     color: #ff9ac1; 
    5757} 
  • admin/js/codemirror/theme/pastel-on-dark.css

    r3532 r3617  
    3535.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; } 
    3636.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; } 
    37 .cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; } 
     37.cm-s-pastel-on-dark span.cm-variable-3, .cm-s-pastel-on-dark span.cm-type { color: #DE8E30; } 
    3838.cm-s-pastel-on-dark span.cm-def { color: #757aD8; } 
    3939.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; } 
  • admin/js/codemirror/theme/rubyblue.css

    r3251 r3617  
    1616.cm-s-rubyblue span.cm-meta { color: #F0F; } 
    1717.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; } 
    18 .cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; } 
     18.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def, .cm-s-rubyblue span.cm-type { color: white; } 
    1919.cm-s-rubyblue span.cm-bracket { color: #F0F; } 
    2020.cm-s-rubyblue span.cm-link { color: #F4C20B; } 
  • admin/js/codemirror/theme/seti.css

    r3251 r3617  
    3939.cm-s-seti span.cm-qualifier { color: #9fca56; } 
    4040.cm-s-seti span.cm-property { color: #a074c4; } 
    41 .cm-s-seti span.cm-variable-3 { color: #9fca56; } 
     41.cm-s-seti span.cm-variable-3, .cm-s-seti span.cm-type { color: #9fca56; } 
    4242.cm-s-seti span.cm-builtin { color: #9fca56; } 
    4343.cm-s-seti .CodeMirror-activeline-background { background: #101213; } 
  • admin/js/codemirror/theme/solarized.css

    r3532 r3617  
    5858.cm-s-solarized .cm-variable { color: #839496; } 
    5959.cm-s-solarized .cm-variable-2 { color: #b58900; } 
    60 .cm-s-solarized .cm-variable-3 { color: #6c71c4; } 
     60.cm-s-solarized .cm-variable-3, .cm-s-solarized .cm-type { color: #6c71c4; } 
    6161 
    6262.cm-s-solarized .cm-property { color: #2aa198; } 
     
    8888  text-decoration-style: dotted; 
    8989} 
    90 .cm-s-solarized .cm-strong { color: #eee; } 
    9190.cm-s-solarized .cm-error, 
    9291.cm-s-solarized .cm-invalidchar { 
  • admin/js/codemirror/theme/the-matrix.css

    r3251 r3617  
    1515.cm-s-the-matrix span.cm-variable { color: #F6C; } 
    1616.cm-s-the-matrix span.cm-variable-2 { color: #C6F; } 
    17 .cm-s-the-matrix span.cm-variable-3 { color: #96F; } 
     17.cm-s-the-matrix span.cm-variable-3, .cm-s-the-matrix span.cm-type { color: #96F; } 
    1818.cm-s-the-matrix span.cm-property { color: #62FFA0; } 
    1919.cm-s-the-matrix span.cm-operator { color: #999; } 
  • admin/js/codemirror/theme/ttcn.css

    r3251 r3617  
    3030.cm-s-ttcn .cm-variable { color: #8B2252; } 
    3131.cm-s-ttcn .cm-variable-2 { color: #05a; } 
    32 .cm-s-ttcn .cm-variable-3 { color: #085; } 
     32.cm-s-ttcn .cm-variable-3, .cm-s-ttcn .cm-type { color: #085; } 
    3333 
    3434.cm-s-ttcn .cm-invalidchar { color: #f00; } 
  • admin/js/codemirror/theme/twilight.css

    r3251 r3617  
    1515.cm-s-twilight .cm-def { color: #8DA6CE; } 
    1616.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/ 
    17 .cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/ 
     17.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def, .cm-s-twilight span.cm-type { color: #607392; } /**/ 
    1818.cm-s-twilight .cm-operator { color: #cda869; } /**/ 
    1919.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/ 
  • admin/js/codemirror/theme/vibrant-ink.css

    r3251 r3617  
    1717.cm-s-vibrant-ink .cm-def { color: #8DA6CE; } 
    1818.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D; } 
    19 .cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D; } 
     19.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def, .cm-s-vibrant span.cm-type { color: #FFC66D; } 
    2020.cm-s-vibrant-ink .cm-operator { color: #888; } 
    2121.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; } 
  • admin/js/codemirror/theme/xq-dark.css

    r3251 r3617  
    3737.cm-s-xq-dark span.cm-variable { color: #FFF; } 
    3838.cm-s-xq-dark span.cm-variable-2 { color: #EEE; } 
    39 .cm-s-xq-dark span.cm-variable-3 { color: #DDD; } 
     39.cm-s-xq-dark span.cm-variable-3, .cm-s-xq-dark span.cm-type { color: #DDD; } 
    4040.cm-s-xq-dark span.cm-property {} 
    4141.cm-s-xq-dark span.cm-operator {} 
  • admin/js/codemirror/theme/xq-light.css

    r3251 r3617  
    2727.cm-s-xq-light span.cm-variable { color: black; } 
    2828.cm-s-xq-light span.cm-variable-2 { color:black; } 
    29 .cm-s-xq-light span.cm-variable-3 { color: black; } 
     29.cm-s-xq-light span.cm-variable-3, .cm-s-xq-light span.cm-type { color: black; } 
    3030.cm-s-xq-light span.cm-property {} 
    3131.cm-s-xq-light span.cm-operator {} 
  • admin/js/codemirror/theme/yeti.css

    r3251 r3617  
    4040.cm-s-yeti span.cm-property { color: #a074c4; } 
    4141.cm-s-yeti span.cm-builtin { color: #a074c4; } 
    42 .cm-s-yeti span.cm-variable-3 { color: #96c0d8; } 
     42.cm-s-yeti span.cm-variable-3, .cm-s-yeti span.cm-type { color: #96c0d8; } 
    4343.cm-s-yeti .CodeMirror-activeline-background { background: #E7E4E0; } 
    4444.cm-s-yeti .CodeMirror-matchingbracket { text-decoration: underline; } 
Note: See TracChangeset for help on using the changeset viewer.

Sites map