diff options
Diffstat (limited to '3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx')
-rw-r--r-- | 3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx | 525 |
1 files changed, 0 insertions, 525 deletions
diff --git a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx b/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx deleted file mode 100644 index df487e63a50..00000000000 --- a/3rdparty/bgfx/3rdparty/scintilla/lexers/LexOpal.cxx +++ /dev/null @@ -1,525 +0,0 @@ -// Scintilla source code edit control -/** @file LexOpal.cxx - ** Lexer for OPAL (functional language similar to Haskell) - ** Written by Sebastian Pipping <webmaster@hartwork.org> - **/ - -#include <stdlib.h> -#include <string.h> -#include <stdio.h> -#include <stdarg.h> -#include <assert.h> -#include <ctype.h> - -#include "ILexer.h" -#include "Scintilla.h" -#include "SciLexer.h" - -#include "WordList.h" -#include "LexAccessor.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "CharacterSet.h" -#include "LexerModule.h" - -#ifdef SCI_NAMESPACE -using namespace Scintilla; -#endif - -inline static void getRange( unsigned int start, unsigned int end, Accessor & styler, char * s, unsigned int len ) -{ - unsigned int i = 0; - while( ( i < end - start + 1 ) && ( i < len - 1 ) ) - { - s[i] = static_cast<char>( styler[ start + i ] ); - i++; - } - s[ i ] = '\0'; -} - -inline bool HandleString( unsigned int & cur, unsigned int one_too_much, Accessor & styler ) -{ - char ch; - - // Wait for string to close - bool even_backslash_count = true; // Without gaps in between - cur++; // Skip initial quote - for( ; ; ) - { - if( cur >= one_too_much ) - { - styler.ColourTo( cur - 1, SCE_OPAL_STRING ); - return false; // STOP - } - - ch = styler.SafeGetCharAt( cur ); - if( ( ch == '\015' ) || ( ch == '\012' ) ) // Deny multi-line strings - { - styler.ColourTo( cur - 1, SCE_OPAL_STRING ); - styler.StartSegment( cur ); - return true; - } - else - { - if( even_backslash_count ) - { - if( ch == '"' ) - { - styler.ColourTo( cur, SCE_OPAL_STRING ); - cur++; - if( cur >= one_too_much ) - { - return false; // STOP - } - else - { - styler.StartSegment( cur ); - return true; - } - } - else if( ch == '\\' ) - { - even_backslash_count = false; - } - } - else - { - even_backslash_count = true; - } - } - - cur++; - } -} - -inline bool HandleCommentBlock( unsigned int & cur, unsigned int one_too_much, Accessor & styler, bool could_fail ) -{ - char ch; - - if( could_fail ) - { - cur++; - if( cur >= one_too_much ) - { - styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT ); - return false; // STOP - } - - ch = styler.SafeGetCharAt( cur ); - if( ch != '*' ) - { - styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT ); - styler.StartSegment( cur ); - return true; - } - } - - // Wait for comment close - cur++; - bool star_found = false; - for( ; ; ) - { - if( cur >= one_too_much ) - { - styler.ColourTo( cur - 1, SCE_OPAL_COMMENT_BLOCK ); - return false; // STOP - } - - ch = styler.SafeGetCharAt( cur ); - if( star_found ) - { - if( ch == '/' ) - { - styler.ColourTo( cur, SCE_OPAL_COMMENT_BLOCK ); - cur++; - if( cur >= one_too_much ) - { - return false; // STOP - } - else - { - styler.StartSegment( cur ); - return true; - } - } - else if( ch != '*' ) - { - star_found = false; - } - } - else if( ch == '*' ) - { - star_found = true; - } - cur++; - } -} - -inline bool HandleCommentLine( unsigned int & cur, unsigned int one_too_much, Accessor & styler, bool could_fail ) -{ - char ch; - - if( could_fail ) - { - cur++; - if( cur >= one_too_much ) - { - styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT ); - return false; // STOP - } - - ch = styler.SafeGetCharAt( cur ); - if( ch != '-' ) - { - styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT ); - styler.StartSegment( cur ); - return true; - } - - cur++; - if( cur >= one_too_much ) - { - styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT ); - return false; // STOP - } - - ch = styler.SafeGetCharAt( cur ); - if( ( ch != ' ' ) && ( ch != '\t' ) ) - { - styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT ); - styler.StartSegment( cur ); - return true; - } - } - - // Wait for end of line - bool fifteen_found = false; - - for( ; ; ) - { - cur++; - - if( cur >= one_too_much ) - { - styler.ColourTo( cur - 1, SCE_OPAL_COMMENT_LINE ); - return false; // STOP - } - - ch = styler.SafeGetCharAt( cur ); - if( fifteen_found ) - { -/* - if( ch == '\012' ) - { - // One newline on Windows (015, 012) - } - else - { - // One newline on MAC (015) and another char - } -*/ - cur--; - styler.ColourTo( cur - 1, SCE_OPAL_COMMENT_LINE ); - styler.StartSegment( cur ); - return true; - } - else - { - if( ch == '\015' ) - { - fifteen_found = true; - } - else if( ch == '\012' ) - { - // One newline on Linux (012) - styler.ColourTo( cur - 1, SCE_OPAL_COMMENT_LINE ); - styler.StartSegment( cur ); - return true; - } - } - } -} - -inline bool HandlePar( unsigned int & cur, Accessor & styler ) -{ - styler.ColourTo( cur, SCE_OPAL_PAR ); - - cur++; - - styler.StartSegment( cur ); - return true; -} - -inline bool HandleSpace( unsigned int & cur, unsigned int one_too_much, Accessor & styler ) -{ - char ch; - - cur++; - for( ; ; ) - { - if( cur >= one_too_much ) - { - styler.ColourTo( cur - 1, SCE_OPAL_SPACE ); - return false; - } - - ch = styler.SafeGetCharAt( cur ); - switch( ch ) - { - case ' ': - case '\t': - case '\015': - case '\012': - cur++; - break; - - default: - styler.ColourTo( cur - 1, SCE_OPAL_SPACE ); - styler.StartSegment( cur ); - return true; - } - } -} - -inline bool HandleInteger( unsigned int & cur, unsigned int one_too_much, Accessor & styler ) -{ - char ch; - - for( ; ; ) - { - cur++; - if( cur >= one_too_much ) - { - styler.ColourTo( cur - 1, SCE_OPAL_INTEGER ); - return false; // STOP - } - - ch = styler.SafeGetCharAt( cur ); - if( !( IsASCII( ch ) && isdigit( ch ) ) ) - { - styler.ColourTo( cur - 1, SCE_OPAL_INTEGER ); - styler.StartSegment( cur ); - return true; - } - } -} - -inline bool HandleWord( unsigned int & cur, unsigned int one_too_much, Accessor & styler, WordList * keywordlists[] ) -{ - char ch; - const unsigned int beg = cur; - - cur++; - for( ; ; ) - { - ch = styler.SafeGetCharAt( cur ); - if( ( ch != '_' ) && ( ch != '-' ) && - !( IsASCII( ch ) && ( islower( ch ) || isupper( ch ) || isdigit( ch ) ) ) ) break; - - cur++; - if( cur >= one_too_much ) - { - break; - } - } - - const int ide_len = cur - beg + 1; - char * ide = new char[ ide_len ]; - getRange( beg, cur, styler, ide, ide_len ); - - WordList & keywords = *keywordlists[ 0 ]; - WordList & classwords = *keywordlists[ 1 ]; - - if( keywords.InList( ide ) ) // Keyword - { - delete [] ide; - - styler.ColourTo( cur - 1, SCE_OPAL_KEYWORD ); - if( cur >= one_too_much ) - { - return false; // STOP - } - else - { - styler.StartSegment( cur ); - return true; - } - } - else if( classwords.InList( ide ) ) // Sort - { - delete [] ide; - - styler.ColourTo( cur - 1, SCE_OPAL_SORT ); - if( cur >= one_too_much ) - { - return false; // STOP - } - else - { - styler.StartSegment( cur ); - return true; - } - } - else if( !strcmp( ide, "true" ) || !strcmp( ide, "false" ) ) // Bool const - { - delete [] ide; - - styler.ColourTo( cur - 1, SCE_OPAL_BOOL_CONST ); - if( cur >= one_too_much ) - { - return false; // STOP - } - else - { - styler.StartSegment( cur ); - return true; - } - } - else // Unknown keyword - { - delete [] ide; - - styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT ); - if( cur >= one_too_much ) - { - return false; // STOP - } - else - { - styler.StartSegment( cur ); - return true; - } - } - -} - -inline bool HandleSkip( unsigned int & cur, unsigned int one_too_much, Accessor & styler ) -{ - cur++; - styler.ColourTo( cur - 1, SCE_OPAL_DEFAULT ); - if( cur >= one_too_much ) - { - return false; // STOP - } - else - { - styler.StartSegment( cur ); - return true; - } -} - -static void ColouriseOpalDoc( unsigned int startPos, int length, int initStyle, WordList *keywordlists[], Accessor & styler ) -{ - styler.StartAt( startPos ); - styler.StartSegment( startPos ); - - unsigned int & cur = startPos; - const unsigned int one_too_much = startPos + length; - - int state = initStyle; - - for( ; ; ) - { - switch( state ) - { - case SCE_OPAL_KEYWORD: - case SCE_OPAL_SORT: - if( !HandleWord( cur, one_too_much, styler, keywordlists ) ) return; - state = SCE_OPAL_DEFAULT; - break; - - case SCE_OPAL_INTEGER: - if( !HandleInteger( cur, one_too_much, styler ) ) return; - state = SCE_OPAL_DEFAULT; - break; - - case SCE_OPAL_COMMENT_BLOCK: - if( !HandleCommentBlock( cur, one_too_much, styler, false ) ) return; - state = SCE_OPAL_DEFAULT; - break; - - case SCE_OPAL_COMMENT_LINE: - if( !HandleCommentLine( cur, one_too_much, styler, false ) ) return; - state = SCE_OPAL_DEFAULT; - break; - - case SCE_OPAL_STRING: - if( !HandleString( cur, one_too_much, styler ) ) return; - state = SCE_OPAL_DEFAULT; - break; - - default: // SCE_OPAL_DEFAULT: - { - char ch = styler.SafeGetCharAt( cur ); - - switch( ch ) - { - // String - case '"': - if( !HandleString( cur, one_too_much, styler ) ) return; - break; - - // Comment block - case '/': - if( !HandleCommentBlock( cur, one_too_much, styler, true ) ) return; - break; - - // Comment line - case '-': - if( !HandleCommentLine( cur, one_too_much, styler, true ) ) return; - break; - - // Par - case '(': - case ')': - case '[': - case ']': - case '{': - case '}': - if( !HandlePar( cur, styler ) ) return; - break; - - // Whitespace - case ' ': - case '\t': - case '\015': - case '\012': - if( !HandleSpace( cur, one_too_much, styler ) ) return; - break; - - default: - { - // Integer - if( IsASCII( ch ) && isdigit( ch ) ) - { - if( !HandleInteger( cur, one_too_much, styler ) ) return; - } - - // Keyword - else if( IsASCII( ch ) && ( islower( ch ) || isupper( ch ) ) ) - { - if( !HandleWord( cur, one_too_much, styler, keywordlists ) ) return; - - } - - // Skip - else - { - if( !HandleSkip( cur, one_too_much, styler ) ) return; - } - } - } - - break; - } - } - } -} - -static const char * const opalWordListDesc[] = { - "Keywords", - "Sorts", - 0 -}; - -LexerModule lmOpal(SCLEX_OPAL, ColouriseOpalDoc, "opal", NULL, opalWordListDesc); |