UPD: SynUniHighlighter - clean up

This commit is contained in:
Alexander Koblov 2023-05-23 21:06:24 +03:00
commit bf64771da5
4 changed files with 74 additions and 379 deletions

View file

@ -63,7 +63,7 @@ type
Name: string; Extensions: string; Other: Boolean
end;
TSynInfo = class //Vitalik 2004
TSynInfo = class
Author: TAuthorInfo;
Version: TVerInfo;
General: THighInfo;
@ -77,15 +77,15 @@ type
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload;
end;
TSynEditProperties = class //Vitalik 2004
TSynEditProperties = class
end;
TSymbStartType = (stUnspecified, stAny, stTerm); //Vitalik 2004
TSymbStartType = (stUnspecified, stAny, stTerm);
TSymbBrakeType = (btUnspecified, btAny, btTerm);
TSymbStartLine = (slNotFirst, slFirst, slFirstNonSpace); //Vitalik 2004
TSymbStartLine = (slNotFirst, slFirst, slFirstNonSpace);
TStreamWriter = class //Vitalik 2004
TStreamWriter = class
Stream: TStream;
constructor Create(aStream: TStream);
procedure WriteString(const Str: string);
@ -95,15 +95,13 @@ type
procedure WriteBoolParam(Key: string; Value, Default: boolean; CloseTag: string = '');
end;
TSynAttributes = class (TSynHighlighterAttributes) //Vitalik 2004
TSynAttributes = class (TSynHighlighterAttributes)
public
// UseStyle: boolean;
OldColorForeground: TColor;
OldColorBackground: TColor;
ParentForeground: boolean;
ParentBackground: boolean;
constructor Create(Name: string);
// destructor Destroy(); override;
function ToString: String; override;
function GetHashCode: PtrInt; override;
procedure LoadFromString(Value: string);
@ -116,9 +114,9 @@ type
public
Symbol: string;
fOpenRule: TAbstractRule;
StartType: TSymbStartType; //Vitalik 2004
StartType: TSymbStartType;
BrakeType: TSymbBrakeType;
StartLine: TSymbStartLine; //Vitalik 2004
StartLine: TSymbStartLine;
Attributes: TSynHighlighterAttributes;
constructor Create(st: string; Attribs: TSynHighlighterAttributes); virtual;
destructor Destroy(); override;
@ -127,7 +125,7 @@ type
TSymbolNode = class
ch: char;
BrakeType: TSymbBrakeType;
StartType: TSymbStartType; //Vitalik 2004
StartType: TSymbStartType;
NextSymbs: TSymbolList;
tkSynSymbol: TSynSymbol;
constructor Create(AC: char; SynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); overload; virtual;
@ -136,7 +134,7 @@ type
end;
TSymbolList = class
SymbList: TList; //Vitalik 2004
SymbList: TList;
procedure AddSymbol(symb: TSymbolNode);
procedure SetSymbolNode(Index: Integer; Value: TSymbolNode);
function FindSymbol(ch: char): TSymbolNode;
@ -153,8 +151,8 @@ type
FileName: string;
constructor Create();
destructor Destroy(); override;
function GetStyle(const Name: string): {TSynHighlighter}TSynAttributes;
function GetStyleDef(const Name: string; const Def: {TSynHighlighter}TSynAttributes): {TSynHighlighter}TSynAttributes;
function GetStyle(const Name: string): TSynAttributes;
function GetStyleDef(const Name: string; const Def: TSynAttributes): TSynAttributes;
procedure AddStyle(Name: string; Foreground, Background: TColor; FontStyle: TFontStyles);
procedure ListStylesNames(const AList: TStrings);
function GetStylesAsXML(): string;
@ -162,12 +160,12 @@ type
procedure Save();
end;
TAbstractRule = class //Vitalik 2004
TAbstractRule = class
Enabled: boolean;
constructor Create();
end;
TSynRule = class(TAbstractRule) //Vitalik 2004
TSynRule = class(TAbstractRule)
public
Ind: integer; //temp
Name: string;
@ -455,38 +453,12 @@ end;
WriteString(Format('%s<%s>%s</%s>'+EOL, [Indent(Ind), Name, GetValidValue(Value), Name]));
end;
{ procedure OpenTag(Ind: integer; Name: string; Param: string = ''; ParamValue: string = '');
begin
if Param = '' then
WriteString(Format('%s<%s>', [Indent(Ind), Name]))
else
WriteString(Format('%s<%s %s="%s">', [Indent(Ind), Name, Param, GetValidValue(ParamValue)]));
end;}
procedure TStreamWriter.WriteTag(Ind: integer; Name: string; EndLine: boolean = False);
begin
WriteString(Format('%s<%s', [Indent(Ind), Name]));
if EndLine then WriteString('>' + EOL);
end;
{ procedure SaveColor(MainTag: string; Ind, Fore, Back: integer; Style: TFontStyles; PFore, PBack: boolean);
procedure InsertTagBool(Ind: integer; Name: string; Value: Boolean);
begin
if Value then
WriteString(Format('%s<%s>True</%s>', [Indent(Ind), Name, Name]))
else
WriteString(Format('%s<%s>False</%s>', [Indent(Ind), Name, Name]))
end;
begin
OpenTag(Ind, MainTag);
InsertTag(Ind+1, 'Back', Inttostr(Back));
InsertTag(Ind+1, 'Fore', Inttostr(Fore));
InsertTag(Ind+1, 'Style', Fs2String(Style));
InsertTagBool(Ind+1, 'ParentForeground', PFore);
InsertTagBool(Ind+1, 'ParentBackground', PBack);
OpenTag(Ind, '/'+MainTag);
end;}
procedure TStreamWriter.WriteParam(Key, Value: string; CloseTag: string = '');
begin
WriteString(Format(' %s="%s"', [Key, GetValidValue(Value)]));
@ -502,9 +474,7 @@ end;
//==== TAttributes ===========================================================
constructor TSynAttributes.Create(Name: String);
begin
// Std := TSynHighlighterAttributes.Create(SYNS_AttrDefaultPackage);
inherited Create(Name{SYNS_AttrDefaultPackage});
// UseStyle := False;
end;
function TSynAttributes.ToString: String;
@ -527,16 +497,6 @@ begin
Result:= PtrInt(CRC32(ACrc, @ParentBackground, SizeOf(Boolean)));
end;
{destructor TSynAttributes.Destroy;
//var xml: TXMLParser;
begin
// if not UseStyle then
//Std.Free;
// xml := TXMLParser.Create;
// xml.Standalone
inherited;
end;
}
procedure TSynAttributes.LoadFromString(Value: string);
begin
ParentForeground := False;
@ -548,14 +508,6 @@ begin
ParentForeground := LowerCase(Copy(Value, pos(';',Value)+1, pos(':',Value)-pos(';',Value)-1)) = 'true';
ParentBackground := LowerCase(Copy(Value, pos(':',Value)+1, pos('.',Value)-pos(':',Value)-1)) = 'true';
Style := StrToFontStyle(Copy(Value, pos('.',Value)+1, Length(Value)-pos('.',Value)));
// '12345,0;true:false.'
{ Std.Background := StrToIntDef(Value, $FFFFFF);
OldColorBackground := Std.Background;
Std.Foreground := StrToIntDef(Value, 0);
OldColorForeground := Std.Foreground;
Std.Style := String2Fs(Value)
ParentForeground := LoweValue = 'true'
ParentBackground := LowerValue = 'true';}
end;
procedure TSynAttributes.SaveToStream(StreamWriter: TStreamWriter);
@ -666,115 +618,19 @@ begin
end;
//==== TSynRule ==============================================================
{function TSynRule.GetAttribs: TAttributes;
begin
if (Ind < 0) or (Ind >= AttribsList.Count) then
raise Exception.CreateFmt ('Invalid index: %d', [Ind]);
Result := TAttributes(AttribsList[Ind]);
end;
function TSynRule.GetAttribsByIndex(Index: integer): TAttributes;
begin
if (Index < 0) or (Index >= AttribsList.Count) then
raise Exception.CreateFmt ('Invalid index: %d', [Ind]);
Result := TAttributes(AttribsList[Index]);
end;
}
constructor TSynRule.Create;
begin
inherited;
ind := -1;
Attribs := TSynAttributes.Create('unknown');
// AttribsList := TList.Create;
end;
destructor TSynRule.Destroy;
begin
// FreeList(AttribsList);
Attribs.Free;
inherited Destroy;
end;
{function TSynRule.AddAttribute(): integer;
var
i: integer;
begin
ind := AttribsList.Add(TAttributes.Create);
Attribs.ParentForeground := True;
Attribs.ParentBackground := True;
Attribs.Std.Foreground := clBlack;
Attribs.Std.Background := clWhite;
Attribs.OldColorForeground := Attribs.Std.Foreground;
Attribs.OldColorBackground := Attribs.Std.Background;
Attribs.Std.Style := [];
Result := ind;
if self is TSynRange then
with self as TSynRange do begin
for i := 0 to RangeCount-1 do
Ranges[i].AddAttribute();
for i := 0 to KeyListCount-1 do
KeyLists[i].AddAttribute();
for i := 0 to SetCount-1 do
Sets[i].AddAttribute();
end;
end;
procedure TSynRule.DeleteAttributes(Index: integer);
var
i: integer;
begin
AttribsList.Delete(Index);
if AttribsList.Count = Index then
ind := Index-1
else
ind := Index;
if self is TSynRange then
with self as TSynRange do begin
for i := 0 to RangeCount-1 do
Ranges[i].DeleteAttributes(Index);
for i := 0 to KeyListCount-1 do
KeyLists[i].DeleteAttributes(Index);
for i := 0 to SetCount-1 do
Sets[i].DeleteAttributes(Index);
end;
end;
procedure TSynRule.ClearAttributes();
var
i: integer;
begin
ClearList(AttribsList);
ind := -1;
if self is TSynRange then
with self as TSynRange do begin
for i := 0 to RangeCount-1 do
Ranges[i].ClearAttributes();
for i := 0 to KeyListCount-1 do
KeyLists[i].ClearAttributes();
for i := 0 to SetCount-1 do
Sets[i].ClearAttributes();
end;
end;
procedure TSynRule.SetAttributesIndex(Index: integer);
var
i: integer;
begin
ind := Index;
if self is TSynRange then
with self as TSynRange do begin
for i := 0 to RangeCount-1 do
Ranges[i].SetAttributesIndex(Index);
for i := 0 to KeyListCount-1 do
KeyLists[i].SetAttributesIndex(Index);
for i := 0 to SetCount-1 do
Sets[i].SetAttributesIndex(Index);
end;
end;}
function TSynRule.GetAsStream: TMemoryStream;
begin
Result := TMemoryStream.Create;
@ -840,20 +696,20 @@ begin
inherited;
end;
function TSynUniStyles.GetStyle(const Name: string): {TSynHighlighter}TSynAttributes;
function TSynUniStyles.GetStyle(const Name: string): TSynAttributes;
begin
Result := GetStyleDef(Name, nil);
end;
function TSynUniStyles.GetStyleDef(const Name: string;
const Def: {TSynHighlighter}TSynAttributes): {TSynHighlighter}TSynAttributes;
const Def: TSynAttributes): TSynAttributes;
var
i: integer;
begin
Result := Def;
for i := 0 to Self.Count-1 do
if SameText({TSynHighlighter}TSynAttributes(Self.Items[i]).Name, Name) then begin
Result := {TSynHighlighter}TSynAttributes(Self.Items[i]);
if SameText(TSynAttributes(Self.Items[i]).Name, Name) then begin
Result := TSynAttributes(Self.Items[i]);
Exit;
end;
end;
@ -861,9 +717,9 @@ end;
procedure TSynUniStyles.AddStyle(Name: string; Foreground, Background: TColor;
FontStyle: TFontStyles);
var
Atr: {TSynHighlighter}TSynAttributes;
Atr: TSynAttributes;
begin
Atr := {TSynHighlighter}TSynAttributes.Create(Name);
Atr := TSynAttributes.Create(Name);
Atr.Foreground := Foreground;
Atr.Background := Background;
Atr.Style := FontStyle;
@ -878,7 +734,7 @@ begin
try
aList.Clear;
for i := 0 to Self.Count-1 do
aList.Add({TSynHighlighter}TSynAttributes(Self.Items[i]).Name);
aList.Add(TSynAttributes(Self.Items[i]).Name);
finally
aList.EndUpdate;
end;
@ -892,7 +748,7 @@ begin
Result := '<Schemes>'#13#10;
Result := Result + ' <Scheme Name="Default">'#13#10;
for i := 0 to Self.Count-1 do
with {TSynHighlighter}TSynAttributes(Self.Items[I]) do
with TSynAttributes(Self.Items[I]) do
Result := Result + ' <Style Name="' + Name +
'" Fg="' + IntToStr(Foreground) +
'" Bg="' + IntToStr(Background) +

View file

@ -59,8 +59,6 @@ type
private
FFileName: String;
procedure ReadSyntax(Reader: TReader);
procedure WriteSyntax(Writer: TWriter);
protected
fMainRules: TSynRange;
fEol: boolean;
@ -75,15 +73,10 @@ type
SymbolList: array[char] of TAbstractSymbol; //???
fPrepared: boolean;
fSchemes: TStringList; //Vitalik 2004
fSchemeIndex: integer; //Vitalik 2004
fSchemes: TStringList;
fSchemeIndex: integer;
fImportFormats: TList;
procedure SpaceProc;
procedure NullProc;
function GetIdentChars: TSynIdentChars; override;
procedure DefineProperties(Filer: TFiler); override;
function GetSampleSource: string; override;
procedure SetSampleSource(Value: string); override;
function GetDefaultFilter: string; override;
@ -102,7 +95,6 @@ type
function GetToken: string; override; {Abstract}
procedure GetTokenEx(out TokenStart: PChar; out TokenLength: integer); override; {Abstract}
function GetTokenAttribute: TSynHighlighterAttributes; override; {Abstract}
function GetTokenID: Integer;
function GetTokenKind: integer; override; {Abstract}
function GetTokenPos: Integer; override; {Abstract}
function IsKeyword(const AKeyword: string): boolean; override;
@ -139,8 +131,8 @@ type
SchemeName: string;
property FileName: String read FFileName;
property MainRules: TSynRange read fMainRules;
property SchemesList: TStringList read fSchemes write fSchemes; //Vitalik 2004
property SchemeIndex: integer read fSchemeIndex write fSchemeIndex; //Vitalik 2004
property SchemesList: TStringList read fSchemes write fSchemes;
property SchemeIndex: integer read fSchemeIndex write fSchemeIndex;
end;
implementation
@ -148,13 +140,8 @@ implementation
uses
LazUTF8Classes, Laz2_XMLRead;
const
SYNS_AttrTest = 'Test';
//==== TSynUniSyn ============================================================
constructor TSynUniSyn.Create(AOwner: TComponent);
var
fTestAttri: TSynHighlighterAttributes;
begin
inherited Create(AOwner);
Info := TSynInfo.Create;
@ -162,13 +149,6 @@ begin
Info.Sample := TStringList.Create;
fPrepared := False;
//Вот так вот нужно все атрибуты будет добавлять! Потому как нужно еще и обработать [Underline + Italic]
fTestAttri := TSynHighLighterAttributes.Create(SYNS_AttrTest);
fTestAttri.Style := [fsUnderline, fsItalic];
fTestAttri.Foreground := clBlue;
fTestAttri.Background := clSilver;
AddAttribute(fTestAttri);
fSchemes := TStringList.Create;
fSchemeIndex := -1;
@ -177,8 +157,6 @@ begin
fEol := False;
fPrEol := False;
fCurrentRule := MainRules;
// AddNewScheme('Noname');
fImportFormats := TList.Create;
end;
destructor TSynUniSyn.Destroy;
@ -189,7 +167,6 @@ begin
Info.Sample.Free;
Info.Free;
fSchemes.Free;
fImportFormats.Free;
inherited;
end;
@ -277,17 +254,10 @@ begin
fCurrentRule.HasNodeAnyStart[char(i)] := HaveNodeAnyStart(TSymbols(SymbolList[fCurrentRule.CaseFunct(char(i))]).HeadNode);
(*}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}*)
end;
{begin} //Vitalik 2004
{was:
fTrueLine := PChar(NewValue);
l := Length(NewValue);
ReallocMem(fLine, l+1);
for i := 0 to l do
fLine[i] := fCurrentRule.CaseFunct(fTrueLine[i]);
}
fTrueLine := NewValue;
fLine := PChar(NewValue); //: Current string of SynEdit
{end} //Vitalik 2004
Run := 0; //: Set Position of "parser" at the first char of string
fTokenPos := 0; //: Set Position of current token at the first char of string
fLineNumber := LineNumber; //: Number of current line in SynEdit
@ -340,7 +310,7 @@ begin
end;
//: if we can't find token from current position:
if not fCurrentRule.SymbolList[fCurrentRule.CaseFunct(fLine[Run])].GetToken(fCurrentRule, fLine, Run, fCurrToken) then //Vitalik 2004
if not fCurrentRule.SymbolList[fCurrentRule.CaseFunct(fLine[Run])].GetToken(fCurrentRule, fLine, Run, fCurrToken) then
begin
fCurrToken := fCurrentRule.fDefaultSynSymbol; //: Current token is just default symbol
while not ((fLine[Run] in fCurrentRule.fTermSymbols) or fCurrentRule.HasNodeAnyStart[fCurrentRule.CaseFunct(fLine[Run])]) do
@ -400,14 +370,6 @@ begin
end;
procedure TSynUniSyn.SpaceProc;
//! Never used!!! SSS
begin
repeat
Inc(Run);
until (fLine[Run] > #32) or (fLine[Run] in [#0, #10, #13]);
end;
function TSynUniSyn.IsKeyword(const AKeyword: string): boolean;
//! Never used!!!! ??? SSS
begin
@ -455,21 +417,10 @@ begin
TokenStart := PAnsiChar(fTrueLine) + fTokenPos;
end;
function TSynUniSyn.GetTokenID: Integer;
//: Return ID of current token
//: ??? Оставлена для непонятной совместимости? Нигде же не вызывается и не используется!
//: Можено что-нить с ней сделать...
begin
Result := 1; //# CODE_REVIEW fCurrToken.ID;
end;
function TSynUniSyn.GetTokenAttribute: TSynHighlighterAttributes;
//: Returns attribute of current token
begin
// fCurrToken.Attr.Style := fCurrToken.Attr.Style + [fsUnderline];
// if GetEol then
// Result := nil
Result := fCurrToken.Attributes;
Result := fCurrToken.Attributes;
end;
function TSynUniSyn.GetTokenKind: integer;
@ -596,61 +547,12 @@ begin
MainRules.HasNodeAnyStart[char(i)] := HaveNodeAnyStart(TSymbols(MainRules.SymbolList[MainRules.CaseFunct(char(i))]).HeadNode);
end;
procedure TSynUniSyn.NullProc;
//: Never used!!! SSS ???
begin
// fEol := True;
end;
procedure TSynUniSyn.Reset;
//: Reset of SynUniSyn is Reset of SynUniSyn.MainRules
begin
MainRules.Reset;
end;
procedure TSynUniSyn.DefineProperties(Filer: TFiler);
//! Never used ????
var
iHasData: boolean;
begin
inherited;
if Filer.Ancestor <> nil then
iHasData := True
else
iHasData := MainRules.RangeCount > 0;
Filer.DefineProperty( 'Syntax', ReadSyntax, WriteSyntax, {True}iHasData );
end;
procedure TSynUniSyn.ReadSyntax(Reader: TReader);
//: This is some metods for reading ??? ??? ???
var
iBuffer: TStringStream;
begin
// iBuffer := nil;
// try
iBuffer := TStringStream.Create( Reader.ReadString );
iBuffer.Position := 0;
LoadFromStream( iBuffer );
// finally
// iBuffer.Free;
// end;
end;
procedure TSynUniSyn.WriteSyntax(Writer: TWriter);
//: This is some metods for writing ??? ??? ???
var
iBuffer: TStringStream;
begin
iBuffer := TStringStream.Create( '' );
try
SaveToStream( iBuffer );
iBuffer.Position := 0;
Writer.WriteString( iBuffer.DataString );
finally
iBuffer.Free;
end;
end;
function TSynUniSyn.GetIdentChars: TSynIdentChars;
//: Return IdentChars - hmm... What for ??? word selection?
begin

View file

@ -39,7 +39,7 @@ uses
type
TSynRange = class;
TSynSet = class; //Vitalik 2004
TSynSet = class;
TAbstractSymbol = class
function GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; virtual; abstract;
@ -47,13 +47,13 @@ type
TSymbols = class(TAbstractSymbol)
HeadNode: TSymbolNode;
SynSets: TList; //Vitalik 2004
SynSets: TList;
function GetToken(CurRule: TSynRange; fLine: PChar; var Run: integer; var tkSynSymbol: TSynSymbol): boolean; override;
function FindSymbol(st: string): TSymbolNode;
procedure AddSymbol(st: string; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType);
procedure AddSet(SymbolSet: TSynSet); //Vitalik 2004
procedure AddSet(SymbolSet: TSynSet);
constructor Create(ch: char; tkSynSymbol: TSynSymbol; ABrakeType: TSymbBrakeType); reintroduce; overload; virtual;
constructor Create(SymbolSet: TSynSet); reintroduce; overload; virtual; //Vitalik 2004
constructor Create(SymbolSet: TSynSet); reintroduce; overload; virtual;
destructor Destroy(); override;
end;
@ -75,16 +75,16 @@ type
KeyList: TStringList;
constructor Create(st: string = '');
destructor Destroy(); override;
procedure LoadHglFromXml(xml: TDOMNode; SchCount,SchIndex: integer); //Vitalik 2004
procedure LoadFromXml(xml: TDOMNode); override; //Vitalik 2004
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; //Vitalik 2004
procedure LoadHglFromXml(xml: TDOMNode; SchCount,SchIndex: integer);
procedure LoadFromXml(xml: TDOMNode); override;
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override;
end;
TSynKeyListLink = class(TAbstractRule) //Vitalik 2004
TSynKeyListLink = class(TAbstractRule)
KeyList: TSynKeyList;
end;
TSynSet = class (TSynRule) //Vitalik 2004
TSynSet = class (TSynRule)
SymbSet: TSymbSet;
StartType: TSymbStartType;
BrakeType: TSymbBrakeType;
@ -95,11 +95,11 @@ type
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override;
end;
TSynSetLink = class(TAbstractRule) //Vitalik 2004
TSynSetLink = class(TAbstractRule)
SynSet: TSynSet;
end;
TSynRangeLink = class(TAbstractRule) //Vitalik 2004
TSynRangeLink = class(TAbstractRule)
Range: TSynRange;
Parent: TSynRange;
constructor Create(aRange: TSynRange); virtual;
@ -110,7 +110,7 @@ type
fOpenSymbol: TSynSymbol;
fCloseOnTerm: boolean;
fCloseOnEol: boolean;
fAllowPredClose: boolean; //Vitalik 2004
fAllowPredClose: boolean;
constructor Create(OpenSymbs: string = ''; CloseSymbs: string = '');
destructor Destroy(); override;
end;
@ -123,7 +123,7 @@ type
fSynSymbols: TList;
fSynRanges: TList;
fSynKeyLists: TList;
fSynSets: TList; //Vitalik 2004
fSynSets: TList;
StringCaseFunct: function (const st: string): string;
fPrepared: boolean;
@ -144,7 +144,7 @@ type
CaseFunct: function (ch: char): char;
fTermSymbols: TSymbSet;
HasNodeAnyStart: array[char] of boolean; //Vitalik 2004
HasNodeAnyStart: array[char] of boolean;
SymbolList: array[char] of TAbstractSymbol;
private
function GetSynSymbol(Index: Integer): TSynSymbol;
@ -152,22 +152,22 @@ type
function GetSynRangeLink(Index: Integer): TSynRangeLink;
function GetSynRange(Index: Integer): TSynRange;
function GetSynKeyList(Index: Integer): TSynKeyList;
function GetSynSet(Index: Integer): TSynSet; //Vitalik 2004
function GetSynSet(Index: Integer): TSynSet;
function GetSynSymbolCount(): Integer;
function GetCommonSynRangeCount(): Integer;
function GetSynRangeLinkCount(): Integer;
function GetSynRangeCount(): Integer;
function GetSynKeyListCount(): Integer;
function GetSynSetCount(): Integer; //Vitalik 2004
function GetSynSetCount(): Integer;
function GetCaseSensitive: boolean;
procedure SetCaseSensitive(const Value: boolean);
public {temp}
procedure LoadHglFromXml(xml: TDOMNode; SchCount, SchIndex: integer); //Vitalik 2004
procedure LoadFromXml(xml: TDOMNode); override; //Vitalik 2004
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override; //Vitalik 2004
procedure LoadHglFromXml(xml: TDOMNode; SchCount, SchIndex: integer);
procedure LoadFromXml(xml: TDOMNode); override;
procedure SaveToStream(StreamWriter: TStreamWriter; Ind: integer = 0); overload; override;
public
constructor Create(OpenSymbs: string = ''; CloseSymbs: string = ''); virtual;
destructor Destroy(); override;
@ -181,7 +181,7 @@ type
function AddRange(aOpen, aClose, aName: string; aColor: TColor): TSynRange; overload;
procedure AddKeyList(NewKeyList: TSynKeyList); overload;
function AddKeyList(aName: string; aColor: TColor): TSynKeyList; overload;
procedure AddSet(NewSet: TSynSet); overload; //Vitalik 2004
procedure AddSet(NewSet: TSynSet); overload;
function AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet; overload;//Vitalik 2004
function FindSymbol(st: string): TSynSymbol;
@ -195,14 +195,14 @@ type
procedure DeleteRange(Range: TSynRange); overload;
procedure DeleteKeyList(index: integer); overload;
procedure DeleteKeyList(KeyList: TSynKeyList); overload;
procedure DeleteSet(index: integer); overload; //Vitalik 2004
procedure DeleteSet(SynSet: TSynSet); overload; //Vitalik 2004
procedure DeleteSet(index: integer); overload;
procedure DeleteSet(SynSet: TSynSet); overload;
{ procedure SetParentColor;
procedure RestoreOldColor; }
procedure SetDelimiters(Delimiters: TSymbSet);
// procedure SetStyles(aStyles: TSynUniStyles);
procedure SetColorForChilds(); //Vitalik 2004
procedure SetColorForChilds();
procedure ClearParsingFields();
procedure ResetParents(aParent: TSynRange);
@ -218,7 +218,7 @@ type
// property CloseSymbol: TSynSymbol read fCloseSymbol;
// property CloseOnTerm: boolean read fCloseOnTerm write fCloseOnTerm;
// property CloseOnEol: boolean read fCloseOnEol write fCloseOnEol;
// property AllowPredClose: boolean read fAllowPredClose write fAllowPredClose; //Vitalik 2004
// property AllowPredClose: boolean read fAllowPredClose write fAllowPredClose;
property CommonRanges[index: integer]: TSynRange read GetCommonSynRange;
property CommonRangeCount: integer read GetCommonSynRangeCount;
@ -230,8 +230,8 @@ type
property SymbolCount: integer read GetSynSymbolCount;
property KeyLists[index: integer]: TSynKeyList read GetSynKeyList;
property KeyListCount: Integer read GetSynKeyListCount;
property Sets[index: integer]: TSynSet read GetSynSet; //Vitalik 2004
property SetCount: Integer read GetSynSetCount; //Vitalik 2004
property Sets[index: integer]: TSynSet read GetSynSet;
property SetCount: Integer read GetSynSetCount;
property CaseSensitive: boolean read GetCaseSensitive write SetCaseSensitive;
property Prepared: boolean read fPrepared;
@ -365,7 +365,7 @@ var
end;
end;
begin //Vitalik 2004
begin
Result := False;
posStart := Run;
if Assigned(HeadNode) then begin
@ -428,10 +428,8 @@ begin //Vitalik 2004
end;
until nxtStart = nil;
end;
//l1:
{begin}
Run := posStart;
// Result := False;
AllowedTermSymbols := CurRule.fTermSymbols;
for i := 0 to SynSets.Count-1 do begin
AllowedTermSymbols := AllowedTermSymbols - TSynSet(SynSets[i]).SymbSet;
@ -455,44 +453,6 @@ begin //Vitalik 2004
end;
end;
Run := succ(posStart);
{end}
{ was:
Result := false;
curNode := HeadNode;
nxtNode := nil;
while (curNode.NextSymbs.Count > 0) and (parser.fLine[parser.Run] <> #0) do begin
inc(parser.Run);
nxtNode := curNode.NextSymbs.FindSymbol(parser.fCurrentRule.CaseFunct(parser.fLine[parser.Run])); //: Ищем этот символ среди текущих веток
if nxtNode = nil then begin
dec(parser.Run);
break;
end;
curNode := nxtNode;
end;
if curNode.tkSynSymbol = nil then
exit;
if (nxtNode = nil) and (curNode.NextSymbs.Count > 0) then
dec(parser.Run);
if parser.fLine[parser.Run] <> #0 then
inc(parser.Run);
if curNode.BrakeType = btAny then
begin
Result := True;
tkSynSymbol := curNode.tkSynSymbol;
exit;
end;
if parser.fLine[parser.Run] in parser.fCurrentRule.fTermSymbols then
begin
Result := True;
tkSynSymbol := curNode.tkSynSymbol;
end;
}
end;
//==== TDefaultSymbols =======================================================
@ -546,7 +506,7 @@ end;
constructor TSynKeyList.Create(st: string);
begin
inherited Create;
// AddAttribute();
KeyList := TStringList.Create;
KeyList.Text := st;
end;
@ -558,14 +518,14 @@ begin
end;
//==== TSynSet =========================================================
constructor TSynSet.Create(aSymbSet: TSymbSet = []); //Vitalik 2004
constructor TSynSet.Create(aSymbSet: TSymbSet = []);
begin
inherited Create;
// AddAttribute();
SymbSet := aSymbSet;
end;
destructor TSynSet.Destroy; //Vitalik 2004
destructor TSynSet.Destroy;
begin
inherited;
end;
@ -611,7 +571,6 @@ begin
fSynRangeLinks := TList.Create;
fTermSymbols := DefaultTermSymbols;
// AddAttribute();
end;
destructor TSynRange.Destroy;
@ -623,7 +582,6 @@ begin
fRule.fOpenSymbol.Free;
if Assigned(fRule.fCloseSymbol) then
fRule.fCloseSymbol.Free;}
// Attribs.Free;
FreeList(fSynKeyLists);
FreeList(fSynSets);
FreeList(fSynSymbols);
@ -742,12 +700,12 @@ begin
AddKeyList(Result);
end;
procedure TSynRange.AddSet(NewSet: TSynSet); //Vitalik 2004
procedure TSynRange.AddSet(NewSet: TSynSet);
begin
fSynSets.Add(NewSet);
end;
function TSynRange.AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet; //Vitalik 2004
function TSynRange.AddSet(aName: string; aSymbSet: TSymbSet; aColor: TColor): TSynSet;
begin
Result := TSynSet.Create(aSymbSet);
with Result do begin
@ -806,13 +764,13 @@ begin
fSynKeyLists.Delete(index);
end;
procedure TSynRange.DeleteSet(SynSet: TSynSet); //Vitalik 2004
procedure TSynRange.DeleteSet(SynSet: TSynSet);
begin
fSynSets.Remove(SynSet);
SynSet.Free;
end;
procedure TSynRange.DeleteSet(index: integer); //Vitalik 2004
procedure TSynRange.DeleteSet(index: integer);
begin
TSynSet(fSynSets[index]).Free;
fSynSets.Delete(index);
@ -844,7 +802,7 @@ begin
Result := fSynKeyLists.Count;
end;
function TSynRange.GetSynSetCount: Integer; //Vitalik 2004
function TSynRange.GetSynSetCount: Integer;
begin
Result := fSynSets.Count;
end;
@ -875,7 +833,7 @@ begin
Result := TSynKeyList(fSynKeyLists[Index]);
end;
function TSynRange.GetSynSet(Index: Integer): TSynSet; //Vitalik 2004
function TSynRange.GetSynSet(Index: Integer): TSynSet;
begin
Result := TSynSet(fSynSets[Index]);
end;
@ -949,27 +907,6 @@ Begin
end;
end;
// Used in prepare
(* replaced by quicksort... arb2004
procedure SortSymbolList(List: TList);
//: Sort list fSynSymbols
var
i: integer;
fin: boolean;
begin
fin := False;
while not fin do
begin
fin := True;
for i := 0 to List.Count-2 do
if TSynSymbol(List[i]).Symbol > TSynSymbol(List[i+1]).Symbol then
begin
List.Exchange(i, i+1);
fin := False;
end;
end;
end;*)
procedure TSynRange.ClearParsingFields();
var
i: integer;
@ -1120,7 +1057,7 @@ begin
end;
end;
{begin} //Vitalik 2004
{begin}
if fSynSets.Count > 0 then
for i := 0 to 255 do
for j := 0 to fSynSets.Count-1 do begin
@ -1132,7 +1069,7 @@ begin
end;
// SymbolList[char(i)] := fSetSymbols;
// TSetSymbols(SymbolList[char(i)]).AddSetfSetSymbols;
{end} //Vitalik 2004
{end}
end;
//Fill remaining table
for i := 0 to 255 do
@ -1197,7 +1134,7 @@ begin
end;
end;
procedure TSynRange.SetColorForChilds; //Vitalik 2004
procedure TSynRange.SetColorForChilds;
var
i: integer;
begin

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<CONFIG>
<Package Version="4">
<Package Version="5">
<Name Value="SynUni"/>
<AddToProjectUsesSection Value="True"/>
<Author Value="Vitaly Nevzorov (aka Vit); Kirill Burtsev (aka Fantasist); Vitaly Lyapota (aka Vitalik); eastorwest; Alexander Koblov"/>
@ -37,7 +37,7 @@ https://www.mozilla.org/en-US/MPL/1.1/
or
GNU General Public License, version 2
https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"/>
<Version Major="1" Minor="8" Release="1"/>
<Version Major="1" Minor="8" Release="2"/>
<Files Count="3">
<Item1>
<Filename Value="source/SynUniClasses.pas"/>
@ -52,6 +52,7 @@ https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"/>
<UnitName Value="SynUniRules"/>
</Item3>
</Files>
<CompatibilityMode Value="True"/>
<RequiredPkgs Count="3">
<Item1>
<PackageName Value="FCL"/>
@ -69,7 +70,6 @@ https://www.gnu.org/licenses/old-licenses/gpl-2.0.en.html"/>
</UsageOptions>
<PublishOptions>
<Version Value="2"/>
<IgnoreBinaries Value="False"/>
</PublishOptions>
</Package>
</CONFIG>