4#ifndef _Stroika_Frameworks_Led_SyntaxColoring_h_
5#define _Stroika_Frameworks_Led_SyntaxColoring_h_ 1
27#include "Stroika/Frameworks/StroikaPreComp.h"
29#include "Stroika/Frameworks/Led/StyledTextImager.h"
30#include "Stroika/Frameworks/Led/Support.h"
31#include "Stroika/Frameworks/Led/TextInteractor.h"
33namespace Stroika::Frameworks::Led {
35#if qStroika_Frameworks_Led_SupportGDI
44 class SyntaxAnalyzer {
46 virtual void AdjustLookBackRange (TextStore* ts,
size_t* lookBackStart,
size_t* lookBackTo)
const = 0;
47 virtual void AddMarkers (TextStore* ts, TextInteractor* interactor, MarkerOwner* owner,
size_t lookBackStart,
size_t lookBackTo,
48 vector<Marker*>* appendNewMarkersToList)
const = 0;
57 class TrivialRGBSyntaxAnalyzer :
public SyntaxAnalyzer {
59 virtual void AdjustLookBackRange (TextStore* ts,
size_t* lookBackStart,
size_t* lookBackTo)
const override;
60 virtual void AddMarkers (TextStore* ts, TextInteractor* interactor, MarkerOwner* owner,
size_t lookBackStart,
size_t lookBackTo,
61 vector<Marker*>* appendNewMarkersToList)
const override;
74 class TableDrivenKeywordSyntaxAnalyzer :
public SyntaxAnalyzer {
76 using inherited = SyntaxAnalyzer;
81 KeywordTable (
const Led_tChar* keyWords[],
size_t nKeywords,
int (*cmpFunction) (
const Led_tChar*,
const Led_tChar*,
size_t) = Led_tStrnCmp);
84 nonvirtual
size_t MaxKeywordLength ()
const;
85 nonvirtual
size_t KeywordLength (
const Led_tChar* t,
size_t nTChars)
const;
88 const Led_tChar** fKeywords;
90 size_t fMaxKeywordLength;
91 int (*fCmpFunction) (
const Led_tChar*,
const Led_tChar*, size_t);
95 static KeywordTable kCPlusPlusKeywords;
96 static KeywordTable kVisualBasicKeywords;
99 TableDrivenKeywordSyntaxAnalyzer (
const KeywordTable& keyTable);
102 virtual void AdjustLookBackRange (TextStore* ts,
size_t* lookBackStart,
size_t* lookBackTo)
const override;
103 virtual void AddMarkers (TextStore* ts, TextInteractor* interactor, MarkerOwner* owner,
size_t lookBackStart,
size_t lookBackTo,
104 vector<Marker*>* appendNewMarkersToList)
const override;
107 KeywordTable fKeywordTable;
118 class SyntaxColoringMarkerOwner :
public MarkerOwner {
120 using inherited = MarkerOwner;
123 SyntaxColoringMarkerOwner (TextInteractor& interactor, TextStore& textStore,
const SyntaxAnalyzer& syntaxAnalyzer);
124 virtual ~SyntaxColoringMarkerOwner ();
127 nonvirtual
void RecheckAll ();
130 virtual void RecheckRange (
size_t updateFrom,
size_t updateTo) = 0;
133 class ColoredStyleMarker;
142 using FontChangeStyleMarker = TrivialFontSpecStyleMarker;
145 virtual TextStore* PeekAtTextStore ()
const override;
148 TextInteractor& fInteractor;
149 TextStore& fTextStore;
150 const SyntaxAnalyzer& fSyntaxAnalyzer;
162 class SimpleSyntaxColoringMarkerOwner :
public SyntaxColoringMarkerOwner {
164 using inherited = SyntaxColoringMarkerOwner;
167 SimpleSyntaxColoringMarkerOwner (TextInteractor& interactor, TextStore& textStore,
const SyntaxAnalyzer& syntaxAnalyzer);
168 virtual ~SimpleSyntaxColoringMarkerOwner ();
171 virtual void RecheckRange (
size_t updateFrom,
size_t updateTo)
override;
174 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
177 vector<Marker*> fMarkers;
192 class WindowedSyntaxColoringMarkerOwner :
public SyntaxColoringMarkerOwner {
194 using inherited = SyntaxColoringMarkerOwner;
197 WindowedSyntaxColoringMarkerOwner (TextInteractor& interactor, TextStore& textStore,
const SyntaxAnalyzer& syntaxAnalyzer);
198 virtual ~WindowedSyntaxColoringMarkerOwner ();
201 nonvirtual
void RecheckScrolling ();
204 virtual void RecheckRange (
size_t updateFrom,
size_t updateTo)
override;
207 virtual void AboutToUpdateText (
const UpdateInfo& updateInfo)
override;
208 virtual void DidUpdateText (
const UpdateInfo& updateInfo)
noexcept override;
211 vector<Marker*> fMarkers;
214 size_t fCachedWindowStart;
215 size_t fCachedWindowEnd;
224 class SyntaxColoringMarkerOwner::ColoredStyleMarker :
public SimpleStyleMarkerByFontSpec<>,
225 public Foundation::Memory::UseBlockAllocationIfAppropriate<ColoredStyleMarker> {
227 using inherited = SimpleStyleMarkerByFontSpec<>;
230 ColoredStyleMarker (
const Color& color);
233 virtual FontSpecification MakeFontSpec (
const StyledTextImager* imager,
const StyleRunElement& runElement)
const override;
247#include "SyntaxColoring.inl"