"Fossies" - the Fresh Open Source Software Archive

Member "yudit-3.0.7/stoolkit/syntax/SSyntax.h" (2 Jun 2020, 4650 Bytes) of package /linux/misc/yudit-3.0.7.tar.gz:


As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style: standard) with prefixed line numbers and code folding option. Alternatively you can here view or download the uninterpreted source code file. For more information about "SSyntax.h" see the Fossies "Dox" file reference documentation and the latest Fossies "Diffs" side-by-side code changes report: 3.0.5_vs_3.0.7.

    1 /** 
    2  *  Yudit Unicode Editor Source File
    3  *
    4  *  GNU Copyright (C) 1997-2006  Gaspar Sinai <gaspar@yudit.org>  
    5  *
    6  *  This program is free software; you can redistribute it and/or modify
    7  *  it under the terms of the GNU General Public License, version 2,
    8  *  dated June 1991. See file COPYYING for details.
    9  *
   10  *  This program is distributed in the hope that it will be useful,
   11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
   12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   13  *  GNU General Public License for more details.
   14  *
   15  *  You should have received a copy of the GNU General Public License
   16  *  along with this program; if not, write to the Free Software
   17  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   18  */
   19  
   20 #ifndef SSyntax_h
   21 #define SSyntax_h
   22 
   23 #include "stoolkit/STextData.h"
   24 #include "stoolkit/SBinVector.h"
   25 #include "stoolkit/SBinHashtable.h"
   26 #include "stoolkit/SVector.h"
   27 #include "stoolkit/SString.h"
   28 #include "stoolkit/SStringVector.h"
   29 #include "stoolkit/SLineTracker.h"
   30 #include "stoolkit/SEvent.h"
   31 #include "stoolkit/syntax/SMatcher.h"
   32 #include "stoolkit/syntax/SSyntaxMarker.h"
   33 
   34 // This many characters are processed, or this many unit works
   35 // are performed in each timer call.
   36 #define SD_UNIT_WORK_COUNT 100
   37 
   38 class SSyntaxListener
   39 {
   40 public:
   41   enum SS_EventType { SD_PARSING_STARTED, SD_PARSING_INSERT, SD_PARSING_DONE };
   42   SSyntaxListener (void) {}
   43   virtual ~SSyntaxListener () {}
   44   virtual void syntaxChanged (SS_EventType _evnt)=0;
   45 };
   46 
   47 class SSyntaxState
   48 {
   49 public:
   50   // Context will delete the objects in args when destructed
   51   SSyntaxState (SMatcher* _matcher, SSyntaxMarker* _marker, STimer* _timer)
   52     : matcher (_matcher), marker (_marker), timer (_timer) 
   53     {
   54     }
   55   ~SSyntaxState ()
   56     { delete timer; delete marker; delete matcher; }
   57   STextIndex getCurrentIndex  ()
   58     { return marker->getCurrentIndex (); }
   59   SMatcher*       matcher;
   60   SSyntaxMarker*  marker;
   61   STimer*         timer;
   62 };
   63 
   64 // SExentTarget is for crawling timeout
   65 class SSyntax : public SLineTracker, public SEventTarget
   66 {
   67 public:
   68   // color is a precious resource, we have only 
   69   // a limited number of them here.
   70   // The number of charactrers that are cached are
   71   // detemined by SAwt constuctor cacheSize=2000
   72 
   73   // We have a shadow vrsion of these in  SSyntaxMarker
   74   enum SS_Tag { SD_NONE=0, SD_ERROR, 
   75        SD_NUMBER, SD_STRING, SD_COMMENT, SD_KEYWORD, 
   76        SD_VARIABLE, SD_DEFINE, SD_CONTROL, SD_OTHER, SD_MAX };
   77   SSyntax (void);
   78   ~SSyntax ();
   79 
   80   bool setSyntax (const SString&  ps); 
   81   const SString& getParser () const; 
   82 
   83   void setTextData (const STextData* td); 
   84 
   85   /* by lines raw index */
   86   SS_Tag getTag (const STextIndex& index);
   87   /* get text data index */
   88   SS_Tag getTagByTDI (const STextIndex& index);
   89 
   90   virtual void lineRemoved (void* src, unsigned int index);
   91   virtual void lineInserted (void* src, unsigned int index);
   92   virtual void lineChanged (void* src, unsigned int index);
   93 
   94   // The patch for the syntax files.
   95   static void setPath(const SStringVector &p);
   96   static void guessPath(const SStringVector& files, const SString& property);
   97   static void guessPath();
   98   static const SStringVector& getPath();
   99 
  100   static bool isSupported (const SString& syn);
  101 
  102   // This will get called from time-to-time 
  103   // when this class crawls text and parses
  104   // Only whole lines will changed.
  105   void addTextDataListener (STextDataListener* _listener);
  106   void addSyntaxListener (SSyntaxListener* _listener);
  107 
  108   static SString       getMissingFile (const SString& name);
  109   static SString       getFolderFor (const SString& name);
  110   static SStringVector getCategories ();
  111   static SStringVector getAvaliableList (const SString& category);
  112 
  113 private:
  114   STextDataListener*       listener;
  115   SSyntaxListener*         syntaxListener;
  116   const STextData*         textData;
  117   SSyntaxState*            syntaxState;
  118 
  119   void clear ();
  120   void clearIterator ();
  121   void lineGlobalChange ();
  122   void applyActions ();
  123 
  124   // do another iteration of syntax checking
  125   virtual bool timeout (const SEventSource* s);
  126 
  127   // if ndx is a move back restart parsing.
  128   // if parse is "" delete parsing
  129   // ndx is our index, not datamodel index.
  130   void updateSyntaxState (const STextIndex ndx);
  131 
  132   SString                 parser;
  133   SPattern*               pattern;
  134 
  135   // These two are in sync. They contain the full expanded line
  136   SSyntaxData             syntaxLines;
  137   SUnicodeData            dataLines;
  138   // for consecutive getTagByTDI
  139   STextIndex              iteratorSyntaxIndex;  // syntaxLines, dataLines
  140   STextIndex              iteratorDataIndex;    // textData
  141   
  142 };
  143 
  144 #endif /* SSyntax */