From 2adc4c7c964373a9f92d729b619d89549265beef Mon Sep 17 00:00:00 2001 From: nightwing Date: Sat, 4 May 2013 16:03:27 +0400 Subject: [PATCH] fix python string highlighting --- lib/ace/mode/python_highlight_rules.js | 70 ++++++++++++++++++-------- 1 file changed, 50 insertions(+), 20 deletions(-) diff --git a/lib/ace/mode/python_highlight_rules.js b/lib/ace/mode/python_highlight_rules.js index 0e7a8bde..ccb40675 100644 --- a/lib/ace/mode/python_highlight_rules.js +++ b/lib/ace/mode/python_highlight_rules.js @@ -84,30 +84,28 @@ var PythonHighlightRules = function() { var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")"; var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")"; + var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})"; + this.$rules = { "start" : [ { token : "comment", regex : "#.*$" - }, { - token : "string", // """ string - regex : strPre + '"{3}(?:[^\\\\]|\\\\.)*?"{3}' }, { token : "string", // multi line """ string start - regex : strPre + '"{3}.*$', - next : "qqstring" + regex : strPre + '"{3}', + next : "qqstring3" }, { token : "string", // " string - regex : strPre + '"(?:[^\\\\]|\\\\.)*?"' - }, { - token : "string", // ''' string - regex : strPre + "'{3}(?:[^\\\\]|\\\\.)*?'{3}" + regex : strPre + '"(?=.)', + next : "qqstring" }, { token : "string", // multi line ''' string start - regex : strPre + "'{3}.*$", - next : "qstring" + regex : strPre + "'{3}", + next : "qstring3" }, { token : "string", // ' string - regex : strPre + "'(?:[^\\\\]|\\\\.)*?'" + regex : strPre + "'(?=.)", + next : "qstring" }, { token : "constant.numeric", // imaginary regex : "(?:" + floatNumber + "|\\d+)[jJ]\\b" @@ -136,22 +134,54 @@ var PythonHighlightRules = function() { token : "text", regex : "\\s+" } ], - "qqstring" : [ { + "qqstring3" : [ { + token : "constant.language.escape", + regex : stringEscape + }, { token : "string", // multi line """ string end - regex : '(?:[^\\\\]|\\\\.)*?"{3}', + regex : '"{3}', next : "start" }, { - token : "string", - regex : '.+' + defaultToken : "string" } ], - "qstring" : [ { + "qstring3" : [ { + token : "constant.language.escape", + regex : stringEscape + }, { token : "string", // multi line ''' string end - regex : "(?:[^\\\\]|\\\\.)*?'{3}", + regex : "'{3}", next : "start" + }, { + defaultToken : "string" + } ], + "qqstring" : [{ + token : "constant.language.escape", + regex : stringEscape }, { token : "string", - regex : '.+' - } ] + regex : "\\\\$", + next : "qqstring" + }, { + token : "string", + regex : '"|$', + next : "start" + }, { + defaultToken: "string" + }], + "qstring" : [{ + token : "constant.language.escape", + regex : stringEscape + }, { + token : "string", + regex : "\\\\$", + next : "qstring" + }, { + token : "string", + regex : "'|$", + next : "start" + }, { + defaultToken: "string" + }] }; };