diff options
author | nyamatongwe <devnull@localhost> | 2012-01-23 13:29:48 +1100 |
---|---|---|
committer | nyamatongwe <devnull@localhost> | 2012-01-23 13:29:48 +1100 |
commit | 9f7103b95221dc5e96f26049ae191254c428b509 (patch) | |
tree | 75f430302f31bc85791d55aa3e560686b9ae4b0b | |
parent | bc41eb75b417568f05b455b41b775c6109875ca6 (diff) | |
download | scintilla-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.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; |