From 9f7103b95221dc5e96f26049ae191254c428b509 Mon Sep 17 00:00:00 2001 From: nyamatongwe Date: Mon, 23 Jan 2012 13:29:48 +1100 Subject: Better handling of data URLs by maintaining state until a ')' marks their end. From Ross McKay. --- lexers/LexCSS.cxx | 27 +++++++++++++++++++-------- 1 file 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; -- cgit v1.2.3