diff options
author | nyamatongwe <unknown> | 2012-01-23 13:29:48 +1100 |
---|---|---|
committer | nyamatongwe <unknown> | 2012-01-23 13:29:48 +1100 |
commit | 5c1ab39e3566e535bab501671e3f66b25135b8eb (patch) | |
tree | 7c3ac3e3b486b50f542f9e3e8bc98a68ba59a90e | |
parent | 77f31dbbadb45f7269d9dee64da33db1f197dd6c (diff) | |
download | scintilla-mirror-5c1ab39e3566e535bab501671e3f66b25135b8eb.tar.gz |
Better handling of data URLs by maintaining state until a ')' marks their end.
From Ross McKay.
-rw-r--r-- | lexers/LexCSS.cxx | 27 |
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; |