diff options
| author | nyamatongwe <unknown> | 2010-07-13 21:16:48 +1000 | 
|---|---|---|
| committer | nyamatongwe <unknown> | 2010-07-13 21:16:48 +1000 | 
| commit | fd7c21165bbc5200aa24ef89560a8bb40fd37255 (patch) | |
| tree | b5cdec307f1b412f0527eb826a14b806b58cf006 /src/LexSmalltalk.cxx | |
| parent | d47313970ebf3736afffec781f2f9030fa3c8e1a (diff) | |
| download | scintilla-mirror-fd7c21165bbc5200aa24ef89560a8bb40fd37255.tar.gz | |
Moved lexers into lexers directory.
Diffstat (limited to 'src/LexSmalltalk.cxx')
| -rw-r--r-- | src/LexSmalltalk.cxx | 321 | 
1 files changed, 0 insertions, 321 deletions
| diff --git a/src/LexSmalltalk.cxx b/src/LexSmalltalk.cxx deleted file mode 100644 index 265de3803..000000000 --- a/src/LexSmalltalk.cxx +++ /dev/null @@ -1,321 +0,0 @@ -// Scintilla source code edit control -/** @file LexSmalltalk.cxx - ** Lexer for Smalltalk language. - ** Written by Sergey Philippov, sphilippov-at-gmail-dot-com - **/ -// Copyright 1998-2002 by Neil Hodgson <neilh@scintilla.org> -// The License.txt file describes the conditions under which this software may be distributed. - -#include <stdlib.h> -#include <string.h> -#include <ctype.h> - -#include "Platform.h" - -#include "PropSet.h" -#include "Accessor.h" -#include "StyleContext.h" -#include "KeyWords.h" -#include "Scintilla.h" -#include "SciLexer.h" - -#ifdef SCI_NAMESPACE -using namespace Scintilla; -#endif - -/* -| lexTable classificationBlock charClasses | -charClasses := #(#DecDigit #Letter #Special #Upper #BinSel). -lexTable := ByteArray new: 128. -classificationBlock := [ :charClass :chars | -    | flag | -    flag := 1 bitShift: (charClasses indexOf: charClass) - 1. -    chars do: [ :char | lexTable at: char codePoint + 1 put: ((lexTable at: char codePoint + 1) bitOr: flag)]]. - -classificationBlock -    value: #DecDigit value: '0123456789'; -    value: #Letter value: '_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; -    value: #Special value: '()[]{};.^:'; -    value: #BinSel value: '~@%&*-+=|\/,<>?!'; -    value: #Upper value: 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'. - -((String new: 500) streamContents: [ :stream |             -    stream crLf; nextPutAll: 'static int ClassificationTable[256] = {'. -    lexTable keysAndValuesDo: [ :index :value | -        ((index - 1) rem: 16) == 0 ifTrue: [ -            stream crLf; tab] -        ifFalse: [ -            stream space]. -        stream print: value. -        index ~= 256 ifTrue: [ -            stream nextPut: $,]]. -    stream crLf; nextPutAll: '};'; crLf. -     -    charClasses keysAndValuesDo: [ :index :name | -        stream -            crLf; -            nextPutAll: ( -                ('static inline bool is<1s>(int ch) {return (ch > 0) && (ch %< 0x80) && ((ClassificationTable[ch] & <2p>) != 0);}') -                    expandMacrosWith: name with: (1 bitShift: (index - 1))) -    ]]) edit -*/ - -// autogenerated {{{{ - -static int ClassificationTable[256] = { -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -    0, 16, 0, 0, 0, 16, 16, 0, 4, 4, 16, 16, 16, 16, 4, 16, -    1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 16, 16, 16, 16, -    16, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, -    10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 4, 16, 4, 4, 2, -    0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 16, 4, 16, 0, -}; - -static inline bool isDecDigit(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 1) != 0);} -static inline bool isLetter(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 2) != 0);} -static inline bool isSpecial(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 4) != 0);} -static inline bool isUpper(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 8) != 0);} -static inline bool isBinSel(int ch) {return (ch > 0) && (ch < 0x80) && ((ClassificationTable[ch] & 16) != 0);} -// autogenerated }}}} - -static inline bool isAlphaNumeric(int ch) { -    return isDecDigit(ch) || isLetter(ch); -} - -static inline bool isDigitOfRadix(int ch, int radix) -{ -    if (isDecDigit(ch)) -        return (ch - '0') < radix; -    else if (!isUpper(ch)) -        return false; -    else -        return (ch - 'A' + 10) < radix; -} - -static inline void skipComment(StyleContext& sc) -{     -    while (sc.More() && sc.ch != '\"') -        sc.Forward(); -} - -static inline void skipString(StyleContext& sc) -{ -    while (sc.More()) { -        if (sc.ch == '\'') { -            if (sc.chNext != '\'') -                return; -            sc.Forward(); -        } -        sc.Forward(); -    } -} - -static void handleHash(StyleContext& sc) -{ -    if (isSpecial(sc.chNext)) { -        sc.SetState(SCE_ST_SPECIAL); -        return; -    } -     -    sc.SetState(SCE_ST_SYMBOL); -    sc.Forward(); -    if (sc.ch == '\'') { -        sc.Forward(); -        skipString(sc); -    } -    else { -        if (isLetter(sc.ch)) { -            while (isAlphaNumeric(sc.chNext) || sc.chNext == ':') -                sc.Forward(); -        } -        else if (isBinSel(sc.ch)) { -            while (isBinSel(sc.chNext)) -                sc.Forward(); -        } -    } -} - -static inline void handleSpecial(StyleContext& sc) -{ -    if (sc.ch == ':' && sc.chNext == '=') { -        sc.SetState(SCE_ST_ASSIGN); -        sc.Forward(); -    } -    else { -        if (sc.ch == '^') -            sc.SetState(SCE_ST_RETURN); -        else -            sc.SetState(SCE_ST_SPECIAL); -    } -} - -static inline void skipInt(StyleContext& sc, int radix) -{ -    while (isDigitOfRadix(sc.chNext, radix)) -        sc.Forward(); -} - -static void handleNumeric(StyleContext& sc) -{ -    char num[256]; -    int nl; -    int radix; -     -    sc.SetState(SCE_ST_NUMBER); -    num[0] = static_cast<char>(sc.ch); -    nl = 1; -    while (isDecDigit(sc.chNext)) { -        num[nl++] = static_cast<char>(sc.chNext); -        sc.Forward(); -        if (nl+1 == sizeof(num)/sizeof(num[0])) // overrun check -            break; -    } -    if (sc.chNext == 'r') { -        num[nl] = 0; -        if (num[0] == '-') -            radix = atoi(num + 1); -        else -            radix = atoi(num); -        sc.Forward(); -        if (sc.chNext == '-') -            sc.Forward(); -        skipInt(sc, radix); -    } -    else -        radix = 10; -    if (sc.chNext != '.' || !isDigitOfRadix(sc.GetRelative(2), radix)) -        return; -    sc.Forward(); -    skipInt(sc, radix); -    if (sc.chNext == 's') { -        // ScaledDecimal -        sc.Forward(); -        while (isDecDigit(sc.chNext)) -            sc.Forward(); -        return; -    } -    else if (sc.chNext != 'e' && sc.chNext != 'd' && sc.chNext != 'q') -        return; -    sc.Forward(); -    if (sc.chNext == '+' || sc.chNext == '-') -        sc.Forward(); -    skipInt(sc, radix); -} - -static inline void handleBinSel(StyleContext& sc) -{ -    sc.SetState(SCE_ST_BINARY); -    while (isBinSel(sc.chNext)) -        sc.Forward(); -} - -static void handleLetter(StyleContext& sc, WordList* specialSelectorList) -{ -    char ident[256]; -    int il; -    int state; -    bool doubleColonPresent; -     -    sc.SetState(SCE_ST_DEFAULT); - -    ident[0] = static_cast<char>(sc.ch); -    il = 1; -    while (isAlphaNumeric(sc.chNext)) { -        ident[il++] = static_cast<char>(sc.chNext); -        sc.Forward(); -        if (il+2 == sizeof(ident)/sizeof(ident[0])) // overrun check -            break; -    } - -    if (sc.chNext == ':') { -        doubleColonPresent = true; -        ident[il++] = ':'; -        sc.Forward(); -    } -    else -        doubleColonPresent = false; -    ident[il] = 0; -     -    if (specialSelectorList->InList(ident)) -            state = SCE_ST_SPEC_SEL; -    else if (doubleColonPresent) -            state = SCE_ST_KWSEND; -    else if (isUpper(ident[0])) -        state = SCE_ST_GLOBAL; -    else { -        if (!strcmp(ident, "self")) -            state = SCE_ST_SELF; -        else if (!strcmp(ident, "super")) -            state = SCE_ST_SUPER; -        else if (!strcmp(ident, "nil")) -            state = SCE_ST_NIL; -        else if (!strcmp(ident, "true") || !strcmp(ident, "false")) -            state = SCE_ST_BOOL; -        else -            state = SCE_ST_DEFAULT; -    } -     -    sc.ChangeState(state); -} - -static void colorizeSmalltalkDoc(unsigned int startPos, int length, int initStyle, WordList *wordLists[], Accessor &styler) -{ -    StyleContext sc(startPos, length, initStyle, styler); - -    if (initStyle == SCE_ST_COMMENT) { -        skipComment(sc); -        if (sc.More()) -            sc.Forward(); -    } -    else if (initStyle == SCE_ST_STRING) { -        skipString(sc); -        if (sc.More()) -            sc.Forward(); -    } - -    for (; sc.More(); sc.Forward()) { -        int ch; -         -        ch = sc.ch; -        if (ch == '\"') { -            sc.SetState(SCE_ST_COMMENT); -            sc.Forward(); -            skipComment(sc); -        } -        else if (ch == '\'') { -            sc.SetState(SCE_ST_STRING); -            sc.Forward(); -            skipString(sc); -        } -        else if (ch == '#') -            handleHash(sc); -        else if (ch == '$') { -            sc.SetState(SCE_ST_CHARACTER); -            sc.Forward(); -        } -        else if (isSpecial(ch)) -            handleSpecial(sc); -        else if (isDecDigit(ch)) -            handleNumeric(sc); -        else if (isLetter(ch)) -            handleLetter(sc, wordLists[0]); -        else if (isBinSel(ch)) { -            if (ch == '-' && isDecDigit(sc.chNext)) -                handleNumeric(sc); -            else -                handleBinSel(sc); -        } -        else -            sc.SetState(SCE_ST_DEFAULT); -    } -    sc.Complete(); -} - -static const char* const smalltalkWordListDesc[] = { -    "Special selectors", -    0 -}; - -LexerModule lmSmalltalk(SCLEX_SMALLTALK, colorizeSmalltalkDoc, "smalltalk", NULL, smalltalkWordListDesc); | 
