aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexers/LexDMIS.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'lexers/LexDMIS.cxx')
-rw-r--r--lexers/LexDMIS.cxx358
1 files changed, 0 insertions, 358 deletions
diff --git a/lexers/LexDMIS.cxx b/lexers/LexDMIS.cxx
deleted file mode 100644
index 3c8da6081..000000000
--- a/lexers/LexDMIS.cxx
+++ /dev/null
@@ -1,358 +0,0 @@
-// Scintilla source code edit control
-/** @file LexDMIS.cxx
- ** Lexer for DMIS.
- **/
-// Copyright 1998-2005 by Neil Hodgson <neilh@scintilla.org>
-// Copyright 2013-2014 by Andreas Tscharner <andy@vis.ethz.ch>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-
-#include <cstdlib>
-#include <cassert>
-#include <cstring>
-#include <cctype>
-
-#include "ILexer.h"
-#include "Scintilla.h"
-#include "SciLexer.h"
-
-#include "WordList.h"
-#include "LexAccessor.h"
-#include "StyleContext.h"
-#include "CharacterSet.h"
-#include "LexerModule.h"
-#include "DefaultLexer.h"
-
-using namespace Scintilla;
-
-
-static const char *const DMISWordListDesc[] = {
- "DMIS Major Words",
- "DMIS Minor Words",
- "Unsupported DMIS Major Words",
- "Unsupported DMIS Minor Words",
- "Keywords for code folding start",
- "Corresponding keywords for code folding end",
- 0
-};
-
-
-class LexerDMIS : public DefaultLexer
-{
- private:
- char *m_wordListSets;
- WordList m_majorWords;
- WordList m_minorWords;
- WordList m_unsupportedMajor;
- WordList m_unsupportedMinor;
- WordList m_codeFoldingStart;
- WordList m_codeFoldingEnd;
-
- char * SCI_METHOD UpperCase(char *item);
- void SCI_METHOD InitWordListSets(void);
-
- public:
- LexerDMIS(void);
- virtual ~LexerDMIS(void);
-
- int SCI_METHOD Version() const override {
- return lvRelease5;
- }
-
- void SCI_METHOD Release() override {
- delete this;
- }
-
- const char * SCI_METHOD PropertyNames() override {
- return NULL;
- }
-
- int SCI_METHOD PropertyType(const char *) override {
- return -1;
- }
-
- const char * SCI_METHOD DescribeProperty(const char *) override {
- return NULL;
- }
-
- Sci_Position SCI_METHOD PropertySet(const char *, const char *) override {
- return -1;
- }
-
- const char * SCI_METHOD PropertyGet(const char *) override {
- return NULL;
- }
-
- Sci_Position SCI_METHOD WordListSet(int n, const char *wl) override;
-
- void * SCI_METHOD PrivateCall(int, void *) override {
- return NULL;
- }
-
- static ILexer5 *LexerFactoryDMIS() {
- return new LexerDMIS;
- }
-
- const char * SCI_METHOD DescribeWordListSets() override;
- void SCI_METHOD Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) override;
- void SCI_METHOD Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess) override;
-};
-
-
-char * SCI_METHOD LexerDMIS::UpperCase(char *item)
-{
- char *itemStart;
-
-
- itemStart = item;
- while (item && *item) {
- *item = toupper(*item);
- item++;
- };
- return itemStart;
-}
-
-void SCI_METHOD LexerDMIS::InitWordListSets(void)
-{
- size_t totalLen = 0;
-
-
- for (int i=0; DMISWordListDesc[i]; i++) {
- totalLen += strlen(DMISWordListDesc[i]);
- totalLen++;
- };
-
- totalLen++;
- this->m_wordListSets = new char[totalLen];
- memset(this->m_wordListSets, 0, totalLen);
-
- for (int i=0; DMISWordListDesc[i]; i++) {
- strcat(this->m_wordListSets, DMISWordListDesc[i]);
- strcat(this->m_wordListSets, "\n");
- };
-}
-
-
-LexerDMIS::LexerDMIS(void) : DefaultLexer("DMIS", SCLEX_DMIS) {
- this->InitWordListSets();
-
- this->m_majorWords.Clear();
- this->m_minorWords.Clear();
- this->m_unsupportedMajor.Clear();
- this->m_unsupportedMinor.Clear();
- this->m_codeFoldingStart.Clear();
- this->m_codeFoldingEnd.Clear();
-}
-
-LexerDMIS::~LexerDMIS(void) {
- delete[] this->m_wordListSets;
-}
-
-Sci_Position SCI_METHOD LexerDMIS::WordListSet(int n, const char *wl)
-{
- switch (n) {
- case 0:
- this->m_majorWords.Clear();
- this->m_majorWords.Set(wl);
- break;
- case 1:
- this->m_minorWords.Clear();
- this->m_minorWords.Set(wl);
- break;
- case 2:
- this->m_unsupportedMajor.Clear();
- this->m_unsupportedMajor.Set(wl);
- break;
- case 3:
- this->m_unsupportedMinor.Clear();
- this->m_unsupportedMinor.Set(wl);
- break;
- case 4:
- this->m_codeFoldingStart.Clear();
- this->m_codeFoldingStart.Set(wl);
- break;
- case 5:
- this->m_codeFoldingEnd.Clear();
- this->m_codeFoldingEnd.Set(wl);
- break;
- default:
- return -1;
- break;
- }
-
- return 0;
-}
-
-const char * SCI_METHOD LexerDMIS::DescribeWordListSets()
-{
- return this->m_wordListSets;
-}
-
-void SCI_METHOD LexerDMIS::Lex(Sci_PositionU startPos, Sci_Position lengthDoc, int initStyle, IDocument *pAccess)
-{
- const Sci_PositionU MAX_STR_LEN = 100;
-
- LexAccessor styler(pAccess);
- StyleContext scCTX(startPos, lengthDoc, initStyle, styler);
- CharacterSet setDMISNumber(CharacterSet::setDigits, ".-+eE");
- CharacterSet setDMISWordStart(CharacterSet::setAlpha, "-234", 0x80, true);
- CharacterSet setDMISWord(CharacterSet::setAlpha);
-
-
- bool isIFLine = false;
-
- for (; scCTX.More(); scCTX.Forward()) {
- if (scCTX.atLineEnd) {
- isIFLine = false;
- };
-
- switch (scCTX.state) {
- case SCE_DMIS_DEFAULT:
- if (scCTX.Match('$', '$')) {
- scCTX.SetState(SCE_DMIS_COMMENT);
- scCTX.Forward();
- };
- if (scCTX.Match('\'')) {
- scCTX.SetState(SCE_DMIS_STRING);
- };
- if (IsADigit(scCTX.ch) || ((scCTX.Match('-') || scCTX.Match('+')) && IsADigit(scCTX.chNext))) {
- scCTX.SetState(SCE_DMIS_NUMBER);
- break;
- };
- if (setDMISWordStart.Contains(scCTX.ch)) {
- scCTX.SetState(SCE_DMIS_KEYWORD);
- };
- if (scCTX.Match('(') && (!isIFLine)) {
- scCTX.SetState(SCE_DMIS_LABEL);
- };
- break;
-
- case SCE_DMIS_COMMENT:
- if (scCTX.atLineEnd) {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- break;
-
- case SCE_DMIS_STRING:
- if (scCTX.Match('\'')) {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- break;
-
- case SCE_DMIS_NUMBER:
- if (!setDMISNumber.Contains(scCTX.ch)) {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- break;
-
- case SCE_DMIS_KEYWORD:
- if (!setDMISWord.Contains(scCTX.ch)) {
- char tmpStr[MAX_STR_LEN];
- memset(tmpStr, 0, MAX_STR_LEN*sizeof(char));
- scCTX.GetCurrent(tmpStr, (MAX_STR_LEN-1));
- strncpy(tmpStr, this->UpperCase(tmpStr), (MAX_STR_LEN-1));
-
- if (this->m_minorWords.InList(tmpStr)) {
- scCTX.ChangeState(SCE_DMIS_MINORWORD);
- };
- if (this->m_majorWords.InList(tmpStr)) {
- isIFLine = (strcmp(tmpStr, "IF") == 0);
- scCTX.ChangeState(SCE_DMIS_MAJORWORD);
- };
- if (this->m_unsupportedMajor.InList(tmpStr)) {
- scCTX.ChangeState(SCE_DMIS_UNSUPPORTED_MAJOR);
- };
- if (this->m_unsupportedMinor.InList(tmpStr)) {
- scCTX.ChangeState(SCE_DMIS_UNSUPPORTED_MINOR);
- };
-
- if (scCTX.Match('(') && (!isIFLine)) {
- scCTX.SetState(SCE_DMIS_LABEL);
- } else {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- };
- break;
-
- case SCE_DMIS_LABEL:
- if (scCTX.Match(')')) {
- scCTX.SetState(SCE_DMIS_DEFAULT);
- };
- break;
- };
- };
- scCTX.Complete();
-}
-
-void SCI_METHOD LexerDMIS::Fold(Sci_PositionU startPos, Sci_Position lengthDoc, int, IDocument *pAccess)
-{
- const int MAX_STR_LEN = 100;
-
- LexAccessor styler(pAccess);
- Sci_PositionU endPos = startPos + lengthDoc;
- char chNext = styler[startPos];
- Sci_Position lineCurrent = styler.GetLine(startPos);
- int levelPrev = styler.LevelAt(lineCurrent) & SC_FOLDLEVELNUMBERMASK;
- int levelCurrent = levelPrev;
- int strPos = 0;
- bool foldWordPossible = false;
- CharacterSet setDMISFoldWord(CharacterSet::setAlpha);
- char *tmpStr;
-
-
- tmpStr = new char[MAX_STR_LEN];
- memset(tmpStr, 0, MAX_STR_LEN*sizeof(char));
-
- for (Sci_PositionU i=startPos; i<endPos; i++) {
- char ch = chNext;
- chNext = styler.SafeGetCharAt(i+1);
-
- bool atEOL = ((ch == '\r' && chNext != '\n') || (ch == '\n'));
-
- if (strPos >= (MAX_STR_LEN-1)) {
- strPos = MAX_STR_LEN-1;
- };
-
- int style = styler.StyleAt(i);
- bool noFoldPos = ((style == SCE_DMIS_COMMENT) || (style == SCE_DMIS_STRING));
-
- if (foldWordPossible) {
- if (setDMISFoldWord.Contains(ch)) {
- tmpStr[strPos++] = ch;
- } else {
- tmpStr = this->UpperCase(tmpStr);
- if (this->m_codeFoldingStart.InList(tmpStr) && (!noFoldPos)) {
- levelCurrent++;
- };
- if (this->m_codeFoldingEnd.InList(tmpStr) && (!noFoldPos)) {
- levelCurrent--;
- };
- memset(tmpStr, 0, MAX_STR_LEN*sizeof(char));
- strPos = 0;
- foldWordPossible = false;
- };
- } else {
- if (setDMISFoldWord.Contains(ch)) {
- tmpStr[strPos++] = ch;
- foldWordPossible = true;
- };
- };
-
- if (atEOL || (i == (endPos-1))) {
- int lev = levelPrev;
-
- if (levelCurrent > levelPrev) {
- lev |= SC_FOLDLEVELHEADERFLAG;
- };
- if (lev != styler.LevelAt(lineCurrent)) {
- styler.SetLevel(lineCurrent, lev);
- };
- lineCurrent++;
- levelPrev = levelCurrent;
- };
- };
- delete[] tmpStr;
-}
-
-
-LexerModule lmDMIS(SCLEX_DMIS, LexerDMIS::LexerFactoryDMIS, "DMIS", DMISWordListDesc);