diff options
| author | nyamatongwe <unknown> | 2009-06-26 06:12:25 +0000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2009-06-26 06:12:25 +0000 | 
| commit | 9a9f898b77d8a242d47bc0a8875898002923485f (patch) | |
| tree | d74553d7937e94fe9fe91cdbb644fb83d05de1fd /src/LexMySQL.cxx | |
| parent | 247989f4c1f471d8a3ce6c368487ad8ee77ac39b (diff) | |
| download | scintilla-mirror-9a9f898b77d8a242d47bc0a8875898002923485f.tar.gz | |
Updated to current scintilla-cocoa bzr release which does not try to use
StyleContext within the folder.
Diffstat (limited to 'src/LexMySQL.cxx')
| -rw-r--r-- | src/LexMySQL.cxx | 68 | 
1 files changed, 50 insertions, 18 deletions
| diff --git a/src/LexMySQL.cxx b/src/LexMySQL.cxx index b6d7135b1..f29a183cd 100644 --- a/src/LexMySQL.cxx +++ b/src/LexMySQL.cxx @@ -113,6 +113,12 @@ static void ColouriseMySQLDoc(unsigned int startPos, int length, int initStyle,          if (!IsAWordChar(sc.ch))          {            CheckForKeyword(sc, keywordlists); +           +          // Additional check for function keywords needed. +          // A function name must be followed by an opening parenthesis. +          if (sc.state == SCE_MYSQL_FUNCTION && sc.ch != '(') +            sc.ChangeState(SCE_MYSQL_DEFAULT); +                        sc.SetState(SCE_MYSQL_DEFAULT);          }          break; @@ -256,7 +262,14 @@ static void ColouriseMySQLDoc(unsigned int startPos, int length, int initStyle,    // Do a final check for keywords if we currently have an identifier, to highlight them    // also at the end of a line.    if (sc.state == SCE_MYSQL_IDENTIFIER) +  {      CheckForKeyword(sc, keywordlists); + +    // Additional check for function keywords needed. +    // A function name must be followed by an opening parenthesis. +    if (sc.state == SCE_MYSQL_FUNCTION && sc.ch != '(') +      sc.ChangeState(SCE_MYSQL_DEFAULT); +  }    sc.Complete();  } @@ -273,6 +286,23 @@ static bool IsStreamCommentStyle(int style)  //-------------------------------------------------------------------------------------------------- +/** + * Code copied from StyleContext and modified to work here. Should go into Accessor as a + * companion to Match()... + */ +bool MatchIgnoreCase(Accessor &styler, int currentPos, const char *s) +{ +  for (int n = 0; *s; n++) +  { +    if (*s != tolower(styler.SafeGetCharAt(currentPos + n))) +      return false; +    s++; +  } +  return true; +} + +//-------------------------------------------------------------------------------------------------- +  // Store both the current line's fold level and the next lines in the  // level store to make it easy to pick up with each increment.  static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordList *[], Accessor &styler) @@ -281,8 +311,6 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL  	bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0;  	bool foldOnlyBegin = styler.GetPropertyInt("fold.sql.only.begin", 0) != 0; -  StyleContext sc(startPos, length, initStyle, styler); -    	int visibleChars = 0;  	int lineCurrent = styler.GetLine(startPos);  	int levelCurrent = SC_FOLDLEVELBASE; @@ -296,13 +324,17 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL    bool endFound = false;  	bool whenFound = false;  	bool elseFound = false; -	 -  for (unsigned int i = startPos; sc.More(); i++, sc.Forward()) + +  char nextChar = styler.SafeGetCharAt(startPos); +  for (unsigned int i = startPos; length > 0; i++, length--)    {  		int stylePrev = style;  		style = styleNext;  		styleNext = styler.StyleAt(i + 1); -		bool atEOL = (sc.ch == '\r' && sc.chNext != '\n') || (sc.ch == '\n'); +     +    char currentChar = nextChar; +    nextChar = styler.SafeGetCharAt(i + 1); +		bool atEOL = (currentChar == '\r' && nextChar != '\n') || (currentChar == '\n');      switch (style)      { @@ -329,7 +361,7 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL            // Not really a standard, but we add support for single line comments            // with special curly braces syntax as foldable comments too.            // MySQL needs -- comments to be followed by space or control char -          if (sc.Match('-', '-')) +          if (styler.Match(startPos, "--"))            {              char chNext2 = styler.SafeGetCharAt(i + 2);              char chNext3 = styler.SafeGetCharAt(i + 3); @@ -349,10 +381,10 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL              levelNext--;          break;        case SCE_MYSQL_OPERATOR: -        if (sc.ch == '(') +        if (currentChar == '(')            levelNext++;          else -          if (sc.ch == ')') +          if (currentChar == ')')              levelNext--;          break;        case SCE_MYSQL_MAJORKEYWORD: @@ -362,12 +394,12 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL          // Reserved and other keywords.          if (style != stylePrev)          { -          bool beginFound = sc.MatchIgnoreCase("begin"); -          bool ifFound = sc.MatchIgnoreCase("if"); -          bool thenFound = sc.MatchIgnoreCase("then"); -          bool whileFound = sc.MatchIgnoreCase("while"); -          bool loopFound = sc.MatchIgnoreCase("loop"); -          bool repeatFound = sc.MatchIgnoreCase("repeat"); +          bool beginFound = MatchIgnoreCase(styler, startPos, "begin"); +          bool ifFound = MatchIgnoreCase(styler, startPos, "if"); +          bool thenFound = MatchIgnoreCase(styler, startPos, "then"); +          bool whileFound = MatchIgnoreCase(styler, startPos, "while"); +          bool loopFound = MatchIgnoreCase(styler, startPos, "loop"); +          bool repeatFound = MatchIgnoreCase(styler, startPos, "repeat");            if (!foldOnlyBegin && endFound && (ifFound || whileFound || loopFound))            { @@ -381,7 +413,7 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL              // will be increased later, if not, then at eol.            }            else -            if (!foldOnlyBegin && sc.MatchIgnoreCase("else")) +            if (!foldOnlyBegin && MatchIgnoreCase(styler, startPos, "else"))              {                levelNext--;                elseFound = true; @@ -398,7 +430,7 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL                  if (ifFound)                    elseFound = false;                  else -                  if (sc.MatchIgnoreCase("when")) +                  if (MatchIgnoreCase(styler, startPos, "when"))                      whenFound = true;                    else                    { @@ -413,7 +445,7 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL                            levelNext++;                        }                        else -                        if (sc.MatchIgnoreCase("end")) +                        if (MatchIgnoreCase(styler, startPos, "end"))                          {                            // Multiple "end" in a row are counted multiple times!                            if (endFound) @@ -463,7 +495,7 @@ static void FoldMySQLDoc(unsigned int startPos, int length, int initStyle, WordL  			whenFound = false;  		} -		if (!isspacechar(static_cast<char>(sc.ch))) +		if (!isspacechar(currentChar))  			visibleChars++;  	}  } | 
