aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornyamatongwe <devnull@localhost>2012-01-23 13:29:48 +1100
committernyamatongwe <devnull@localhost>2012-01-23 13:29:48 +1100
commit9f7103b95221dc5e96f26049ae191254c428b509 (patch)
tree75f430302f31bc85791d55aa3e560686b9ae4b0b
parentbc41eb75b417568f05b455b41b775c6109875ca6 (diff)
downloadscintilla-mirror-9f7103b95221dc5e96f26049ae191254c428b509.tar.gz
Better handling of data URLs by maintaining state until a ')' marks their end.
From Ross McKay.
-rw-r--r--lexers/LexCSS.cxx27
1 files changed, 19 insertions, 8 deletions
diff --git a/lexers/LexCSS.cxx b/lexers/LexCSS.cxx
index be3e688a5..305a1dd74 100644
--- a/lexers/LexCSS.cxx
+++ b/lexers/LexCSS.cxx
@@ -144,7 +144,6 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo
sc.Forward();
sc.ForwardSetState(lastStateC);
} else /* eCommentLine */ {
- sc.Forward();
sc.SetState(lastStateC);
}
}
@@ -286,16 +285,28 @@ static void ColouriseCssDoc(unsigned int startPos, int length, int initStyle, Wo
break;
case SCE_CSS_VALUE:
case SCE_CSS_IMPORTANT:
- if (lastStateVal == SCE_CSS_VARIABLE)
- sc.SetState(SCE_CSS_DEFAULT);
- else
- sc.SetState(SCE_CSS_IDENTIFIER);
+ // data URLs can have semicolons; simplistically check for wrapping parentheses and move along
+ if (insideParentheses) {
+ sc.SetState(lastState);
+ } else {
+ if (lastStateVal == SCE_CSS_VARIABLE) {
+ sc.SetState(SCE_CSS_DEFAULT);
+ } else {
+ sc.SetState(SCE_CSS_IDENTIFIER);
+ }
+ }
break;
case SCE_CSS_VARIABLE:
- if (lastStateVar == SCE_CSS_VALUE)
- sc.SetState(SCE_CSS_IDENTIFIER);
- else
+ if (lastStateVar == SCE_CSS_VALUE) {
+ // data URLs can have semicolons; simplistically check for wrapping parentheses and move along
+ if (insideParentheses) {
+ sc.SetState(SCE_CSS_VALUE);
+ } else {
+ sc.SetState(SCE_CSS_IDENTIFIER);
+ }
+ } else {
sc.SetState(SCE_CSS_DEFAULT);
+ }
break;
}
break;