From 3d8d834aec770a99fb61dcdb6012cf0078b45442 Mon Sep 17 00:00:00 2001 From: Fabian Jakobs Date: Mon, 25 Oct 2010 16:19:39 +0200 Subject: [PATCH] make CSS highlighting more compatible with TextMate --- src/ace/layer/Text.js | 2 +- src/ace/mode/CssHighlightRules.js | 54 ++++++++++++++++++------------- src/ace/theme/Dawn.js | 8 +++-- src/ace/theme/IdleFingers.js | 6 +++- src/ace/theme/Twilight.js | 8 +++-- src/ace/theme/tm.css | 2 +- tool/Theme.tmpl.css | 8 +++-- tool/tmtheme.js | 3 ++ 8 files changed, 59 insertions(+), 32 deletions(-) diff --git a/src/ace/layer/Text.js b/src/ace/layer/Text.js index 1a966776..37780a67 100644 --- a/src/ace/layer/Text.js +++ b/src/ace/layer/Text.js @@ -244,7 +244,7 @@ var Text = function(parentEl) { .replace(/\t/g, this.$tabString); if (!this.$textToken[token.type]) { - var classes = "ace_" + token.type.replace(".", " ace_"); + var classes = "ace_" + token.type.replace(/\./g, " ace_"); stringBuilder.push("", output, ""); } else { diff --git a/src/ace/mode/CssHighlightRules.js b/src/ace/mode/CssHighlightRules.js index 39f053a0..9d25aab0 100644 --- a/src/ace/mode/CssHighlightRules.js +++ b/src/ace/mode/CssHighlightRules.js @@ -68,6 +68,11 @@ var CssHighlightRules = function() { "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" + "zero").split("|") ); + + var colors = lang.arrayToMap( + ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" + + "purple|red|silver|teal|white|yellow").split("|") + ); // regexp must not have capturing parentheses. Use (?:) instead. // regexps are ordered -> the first match is used @@ -100,61 +105,61 @@ var CssHighlightRules = function() { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("em") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("ex") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("px") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("cm") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("mm") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("in") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("pt") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("pc") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("deg") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("rad") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("grad") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("ms") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("s") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("hz") }, { - token : "number", + token : "constant.numeric", regex : numRe + ic("khz") }, { - token : "number", + token : "constant.numeric", regex : numRe + "%" }, { - token : "number", + token : "constant.numeric", regex : numRe }, { - token : "number", // hex6 color + token : "constant.numeric", // hex6 color regex : "#[a-fA-F0-9]{6}" }, { - token : "number", // hex3 color + token : "constant.numeric", // hex3 color regex : "#[a-fA-F0-9]{3}" }, { token : "lparen", @@ -165,16 +170,19 @@ var CssHighlightRules = function() { }, { token : function(value) { if (properties[value.toLowerCase()]) { - return "constant.language"; + return "support.type"; } else if (functions[value.toLowerCase()]) { - return "function.language"; + return "support.function"; } else if (constants[value.toLowerCase()]) { - return "constant.library"; + return "support.constant"; + } + else if (colors[value.toLowerCase()]) { + return "support.constant.color"; } else { - return "identifier"; + return "text"; } }, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" diff --git a/src/ace/theme/Dawn.js b/src/ace/theme/Dawn.js index 99074e0e..7d4daf9d 100644 --- a/src/ace/theme/Dawn.js +++ b/src/ace/theme/Dawn.js @@ -111,8 +111,12 @@ font-style:italic;\ color:#B52A1D;\ }\ \ -.ace-dawn .ace_function {\ - \ +.ace-dawn .ace_support {\ + color:#691C97;\ +}\ +\ +.ace-dawn .ace_support.ace_function {\ + color:#693A17;\ }\ \ .ace-dawn .ace_function.ace_buildin {\ diff --git a/src/ace/theme/IdleFingers.js b/src/ace/theme/IdleFingers.js index ced77897..d52bc240 100644 --- a/src/ace/theme/IdleFingers.js +++ b/src/ace/theme/IdleFingers.js @@ -107,10 +107,14 @@ background-color:#FF0000;\ \ }\ \ -.ace-idle-fingers .ace_function {\ +.ace-idle-fingers .ace_support {\ \ }\ \ +.ace-idle-fingers .ace_support.ace_function {\ + color:#B83426;\ +}\ +\ .ace-idle-fingers .ace_function.ace_buildin {\ \ }\ diff --git a/src/ace/theme/Twilight.js b/src/ace/theme/Twilight.js index af70a7a5..e228f62a 100644 --- a/src/ace/theme/Twilight.js +++ b/src/ace/theme/Twilight.js @@ -109,8 +109,12 @@ font-style:italic;\ color:#D2A8A1;\ }\ \ -.ace-twilight .ace_function {\ - \ +.ace-twilight .ace_support {\ + color:#9B859D;\ +}\ +\ +.ace-twilight .ace_support.ace_function {\ + color:#DAD085;\ }\ \ .ace-twilight .ace_function.ace_buildin {\ diff --git a/src/ace/theme/tm.css b/src/ace/theme/tm.css index a6b002bc..4e331482 100644 --- a/src/ace/theme/tm.css +++ b/src/ace/theme/tm.css @@ -61,7 +61,7 @@ color: white; } -.ace-tm .ace_line .ace_function { +.ace-tm .ace_line .ace_support.ace_function { color: rgb(60, 76, 114); } diff --git a/tool/Theme.tmpl.css b/tool/Theme.tmpl.css index f6dccb05..3ce12e1d 100644 --- a/tool/Theme.tmpl.css +++ b/tool/Theme.tmpl.css @@ -103,8 +103,12 @@ %invalid.deprecated% } -.%cssClass% .ace_function { - %function% +.%cssClass% .ace_support { + %support% +} + +.%cssClass% .ace_support.ace_function { + %support.function% } .%cssClass% .ace_function.ace_buildin { diff --git a/tool/tmtheme.js b/tool/tmtheme.js index 0540a376..bce7a1d7 100644 --- a/tool/tmtheme.js +++ b/tool/tmtheme.js @@ -63,6 +63,9 @@ var supportedScopes = { "constant.library": "constant.library", "constant.numeric": "constant.numeric", + "support": "support", + "support.function": "support.function", + "function": "function", "function.buildin": "function.buildin",