diff options
author | nyamatongwe <devnull@localhost> | 2007-07-15 04:59:13 +0000 |
---|---|---|
committer | nyamatongwe <devnull@localhost> | 2007-07-15 04:59:13 +0000 |
commit | d53089b9a6b62776dabf882b58246dc527941f04 (patch) | |
tree | fac58b77a52628b9a706964658e5fa2d50ae7caf /src | |
parent | 272cb46f99debcd764f3a8806d5cf5c64d0b4144 (diff) | |
download | scintilla-mirror-d53089b9a6b62776dabf882b58246dc527941f04.tar.gz |
Updated metapost folder uses keyword lists for fold strats and ends.
Diffstat (limited to 'src')
-rw-r--r-- | src/LexMetapost.cxx | 54 |
1 files changed, 15 insertions, 39 deletions
diff --git a/src/LexMetapost.cxx b/src/LexMetapost.cxx index 552d68cb4..6afc9d826 100644 --- a/src/LexMetapost.cxx +++ b/src/LexMetapost.cxx @@ -3,8 +3,8 @@ // File: LexMetapost.cxx - general context conformant metapost coloring scheme // Author: Hans Hagen - PRAGMA ADE - Hasselt NL - www.pragma-ade.com // Version: September 28, 2003 -// Modified by instanton: June 22, 2007 -// Added folding code +// Modified by instanton: July 10, 2007 +// Folding based on keywordlists[] // Copyright: 1998-2003 by Neil Hodgson <neilh@scintilla.org> // The License.txt file describes the conditions under which this software may be distributed. @@ -323,21 +323,14 @@ static const char * const metapostWordListDesc[] = { 0 } ; -static int classifyFoldPointMetapost(const char* s) { - int lev=0; - if (!(isdigit(s[0]) || (s[0] == '.'))){ - if (strcmp(s, "beginfig")==0||strcmp(s,"for")==0||strcmp(s,"verbatimtex")==0|| - strcmp(s,"def")==0||strcmp(s,"vardef")==0||strcmp(s,"begingroup")==0|| - strcmp(s,"btex")==0||strcmp(s,"if")==0 - ) - lev=1; - if (strcmp(s,"endfig")==0||strcmp(s,"enddef")==0||strcmp(s,"endfor")==0|| - strcmp(s,"endgroup")==0||strcmp(s,"etex")==0|| - strcmp(s,"fi")==0||strcmp(s,"endif")==0 - ) - lev=-1; - } - return lev; +static int classifyFoldPointMetapost(const char* s,WordList *keywordlists[]) { + WordList& keywordsStart=*keywordlists[3]; + WordList& keywordsStop1=*keywordlists[4]; + + if (keywordsStart.InList(s)) {return 1;} + else if (keywordsStop1.InList(s)) {return -1;} + return 0; + } static int ParseMetapostWord(unsigned int pos, Accessor &styler, char *word) @@ -355,7 +348,7 @@ static int ParseMetapostWord(unsigned int pos, Accessor &styler, char *word) return length; } -static void FoldMetapostDoc(unsigned int startPos, int length, int, WordList *[], Accessor &styler) +static void FoldMetapostDoc(unsigned int startPos, int length, int, WordList *keywordlists[], Accessor &styler) { bool foldCompact = styler.GetPropertyInt("fold.compact", 1) != 0; unsigned int endPos = startPos+length; @@ -370,31 +363,14 @@ static void FoldMetapostDoc(unsigned int startPos, int length, int, WordList *[] for (unsigned int i=startPos; i < endPos; i++) { char ch=chNext; chNext=styler.SafeGetCharAt(i+1); + char chPrev=styler.SafeGetCharAt(i-1); bool atEOL = (ch == '\r' && chNext != '\n') || (ch == '\n'); + if(i==0 || chPrev == '\r' || chPrev=='\n'|| chPrev==' '|| chPrev=='(' || chPrev=='$') + { ParseMetapostWord(i, styler, buffer); - levelCurrent += classifyFoldPointMetapost(buffer); - - char chNext2; - char chNext3; - char chNext4; - char chNext5; - chNext2=styler.SafeGetCharAt(i+2); - chNext3=styler.SafeGetCharAt(i+3); - chNext4=styler.SafeGetCharAt(i+4); - chNext5=styler.SafeGetCharAt(i+5); - - bool atenddef =(ch == 'e') && (chNext=='n') && - (chNext2=='d')&& (chNext3=='d')&& (chNext4=='e')&& (chNext5=='f'); - - bool atendfor = (ch == 'e') && (chNext=='n') && - (chNext2=='d') && (chNext3=='f') && (chNext4=='o')&& (chNext5=='r'); - - if(atenddef||atendfor - ){ - levelCurrent-=1; + levelCurrent += classifyFoldPointMetapost(buffer,keywordlists); } - if (atEOL) { int lev = levelPrev; |