implemented non interactive code macros for IDE

git-svn-id: trunk@8097 -
This commit is contained in:
mattias 2005-11-07 21:14:13 +00:00
parent 1f7ea673d8
commit 504f83432a
3 changed files with 205 additions and 207 deletions

View File

@ -181,103 +181,119 @@ end;
function SubstituteCodeMacros(SrcEdit: TSourceEditorInterface; function SubstituteCodeMacros(SrcEdit: TSourceEditorInterface;
var Pattern: string): boolean; var Pattern: string): boolean;
var
p: Integer;
len: Integer;
MacroStartPos: LongInt;
MacroParamStartPos: LongInt;
Level: Integer;
MacroParamEndPos: LongInt;
MacroEndPos: LongInt;
function SubstituteCodeMacro: boolean; const
MaxLevel = 10; // prevent cycling
function SubstituteMacros(var Pattern: string; Level: integer): boolean; forward;
function SubstituteMacro(const MacroName, MacroParameter: string;
var MacroValue: string; Level: Integer): boolean;
var var
MacroName: String;
Macro: TIDECodeMacro; Macro: TIDECodeMacro;
NewValue: String; NewValue: String;
//Parameter: String; ErrMsg: string;
begin begin
Result:=false; Result:=false;
MacroName:=copy(Pattern,MacroStartPos+1,MacroParamStartPos-MacroStartPos-2);
Macro:=IDECodeMacros.FindByName(MacroName); Macro:=IDECodeMacros.FindByName(MacroName);
if Macro<>nil then begin if Macro<>nil then begin
// macro found // macro found
//Parameter:=copy(Pattern,MacroParamStartPos,
// MacroParamEndPos-MacroParamStartPos);
// substitute macros in Parameter // substitute macros in Parameter
MacroValue:=MacroParameter;
// TODO if (Level<MaxLevel) and (not SubstituteMacros(MacroValue,Level+1)) then
exit;
if Macro.Interactive then begin if Macro.Interactive then begin
// collect interactive macro // collect interactive macro
debugln('SubstituteCodeMacros TODO interactive macros');
// TODO
end else begin end else begin
// normal macro -> substitute // normal macro -> substitute
// TODO NewValue:='';
if not Macro.GetValue(MacroValue,nil,NewValue,ErrMsg) then exit;
MacroValue:=NewValue;
end; end;
end else begin end else begin
// macro unknown // macro unknown
NewValue:='UnknownMacro('+MacroName+')'; MacroValue:='UnknownMacro('+MacroName+')';
end; end;
Pattern:=copy(Pattern,1,MacroStartPos)+NewValue Result:=true;
+copy(Pattern,MacroEndPos,len); end;
function SubstituteMacros(var Pattern: string; Level: integer): boolean;
var
p: Integer;
len: Integer;
MacroStartPos: LongInt;
MacroParamStartPos: LongInt;
MacroParamEndPos: LongInt;
MacroEndPos: LongInt;
MacroName: String;
MacroParameter: String;
MacroValue: string;
begin
// replace as many macros as possible
p:=1;
len:=length(Pattern); len:=length(Pattern);
p:=MacroStartPos+length(NewValue); while p<len do begin
if Pattern[p]<>'$' then begin
inc(p);
end else begin
// could be a macro start
MacroStartPos:=p;
inc(p);
if Pattern[p+1]='$' then begin
// $$ is a simple $ character
System.Delete(Pattern,p,1);
len:=length(Pattern);
end else if Pattern[p+1] in ['a'..'z','A'..'Z'] then begin
// read macro name
while (p<len) and (Pattern[p] in ['a'..'z','A'..'Z','0'..'9','_']) do
inc(p);
if (p>len) or (p-MacroStartPos=1) or (Pattern[p]<>'(') then begin
// missing name or missing round bracket open
end else begin
// round bracket open found
inc(p);
MacroParamStartPos:=p;
Level:=1;
while (p<=len) and (Level>0) do begin
case Pattern[p] of
'(': inc(Level);
')': dec(Level);
end;
inc(p);
end;
if Level=0 then begin
// macro parameter end found
MacroParamEndPos:=p-1;
MacroEndPos:=p;
MacroName:=copy(Pattern,MacroStartPos+1,
MacroParamStartPos-MacroStartPos-2);
MacroParameter:=copy(Pattern,MacroParamStartPos,
MacroParamEndPos-MacroParamStartPos);
if not SubstituteMacro(MacroName,MacroParameter,MacroValue,Level)
then
exit(false);
//debugln('SubstituteMacros MacroName="',MacroName,'" MacroParameter="',MacroParameter,'" MacroValue="',MacroValue,'"');
Pattern:=copy(Pattern,1,MacroStartPos-1)+MacroValue
+copy(Pattern,MacroEndPos,len);
len:=length(Pattern);
p:=MacroStartPos+length(MacroValue);
end else begin
// macro parameter end not found
end;
end;
end else begin
// a normal $ character
end;
end;
end;
Result:=true; Result:=true;
end; end;
begin begin
// replace as many macros as possible Result:=SubstituteMacros(Pattern,0);
p:=1;
len:=length(Pattern);
while p<len do begin
if Pattern[p]<>'$' then begin
inc(p);
end else begin
// could be a macro start
MacroStartPos:=p;
inc(p);
if Pattern[p+1]='$' then begin
// $$ is a simple $ character
System.Delete(Pattern,p,1);
len:=length(Pattern);
end else if Pattern[p+1] in ['a'..'z','A'..'Z'] then begin
// read macro name
while (p<len) and (Pattern[p] in ['a'..'z','A'..'Z','0'..'9','_']) do
inc(p);
if (p>len) or (p-MacroStartPos=1) or (Pattern[p]<>'(') then begin
// missing name or missing round bracket open
end else begin
// round bracket open found
inc(p);
MacroParamStartPos:=p;
Level:=1;
while (p<=len) and (Level>0) do begin
case Pattern[p] of
'(': inc(Level);
')': dec(Level);
end;
inc(p);
end;
if Level=0 then begin
// macro parameter end found
MacroParamEndPos:=p;
inc(p);
MacroEndPos:=p;
if not SubstituteCodeMacro then exit(false);
end else begin
// macro parameter end not found
end;
end;
end else begin
// a normal $ character
end;
end;
end;
Result:=true;
end; end;
initialization initialization

View File

@ -1,4 +1,5 @@
object CodeTemplateDialog: TCodeTemplateDialog object CodeTemplateDialog: TCodeTemplateDialog
ActiveControl = FilenameEdit
Caption = 'CodeTemplateDialog' Caption = 'CodeTemplateDialog'
ClientHeight = 432 ClientHeight = 432
ClientWidth = 596 ClientWidth = 596
@ -12,7 +13,6 @@ object CodeTemplateDialog: TCodeTemplateDialog
Width = 596 Width = 596
object FilenameGroupBox: TGroupBox object FilenameGroupBox: TGroupBox
Align = alTop Align = alTop
BorderSpacing.OnChange = nil
BorderSpacing.Around = 5 BorderSpacing.Around = 5
Caption = 'FilenameGroupBox' Caption = 'FilenameGroupBox'
ClientHeight = 42 ClientHeight = 42
@ -25,7 +25,6 @@ object CodeTemplateDialog: TCodeTemplateDialog
Width = 586 Width = 586
object FilenameEdit: TEdit object FilenameEdit: TEdit
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
BorderSpacing.OnChange = nil
BorderSpacing.Right = 5 BorderSpacing.Right = 5
TabOrder = 0 TabOrder = 0
Text = 'FilenameEdit' Text = 'FilenameEdit'
@ -37,7 +36,6 @@ object CodeTemplateDialog: TCodeTemplateDialog
end end
object FilenameButton: TButton object FilenameButton: TButton
Anchors = [akTop, akLeft, akBottom] Anchors = [akTop, akLeft, akBottom]
BorderSpacing.OnChange = nil
BorderSpacing.InnerBorder = 2 BorderSpacing.InnerBorder = 2
Caption = '...' Caption = '...'
OnClick = FilenameButtonClick OnClick = FilenameButtonClick
@ -53,7 +51,6 @@ object CodeTemplateDialog: TCodeTemplateDialog
object OkButton: TButton object OkButton: TButton
Anchors = [akRight, akBottom] Anchors = [akRight, akBottom]
AutoSize = True AutoSize = True
BorderSpacing.OnChange = nil
BorderSpacing.Right = 14 BorderSpacing.Right = 14
BorderSpacing.InnerBorder = 2 BorderSpacing.InnerBorder = 2
Caption = 'OkButton' Caption = 'OkButton'
@ -62,60 +59,54 @@ object CodeTemplateDialog: TCodeTemplateDialog
AnchorSideRight.Control = CancelButton AnchorSideRight.Control = CancelButton
AnchorSideBottom.Control = CancelButton AnchorSideBottom.Control = CancelButton
AnchorSideBottom.Side = asrBottom AnchorSideBottom.Side = asrBottom
Left = 403 Left = 423
Height = 25 Height = 26
Top = 397 Top = 396
Width = 91 Width = 61
end end
object CancelButton: TButton object CancelButton: TButton
Anchors = [akRight, akBottom] Anchors = [akRight, akBottom]
AutoSize = True AutoSize = True
BorderSpacing.OnChange = nil
BorderSpacing.InnerBorder = 2 BorderSpacing.InnerBorder = 2
Caption = 'CancelButton' Caption = 'CancelButton'
ModalResult = 2 ModalResult = 2
TabOrder = 2 TabOrder = 2
Left = 508 Left = 498
Height = 25 Height = 26
Top = 397 Top = 396
Width = 75 Width = 85
end end
object TemplateGroupBox: TGroupBox object TemplateGroupBox: TGroupBox
Align = alTop Align = alTop
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.OnChange = nil
BorderSpacing.Around = 5 BorderSpacing.Around = 5
Caption = 'TemplateGroupBox' Caption = 'TemplateGroupBox'
ClientHeight = 306 ClientHeight = 305
ClientWidth = 582 ClientWidth = 582
ParentColor = True ParentColor = True
TabOrder = 3 TabOrder = 3
AnchorSideBottom.Control = CancelButton AnchorSideBottom.Control = CancelButton
Left = 5 Left = 5
Height = 323 Height = 322
Top = 69 Top = 69
Width = 586 Width = 586
object TemplateListBox: TListBox object TemplateListBox: TListBox
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
BorderSpacing.OnChange = nil
OnSelectionChange = TemplateListBoxSelectionChange OnSelectionChange = TemplateListBoxSelectionChange
TabOrder = 0 TabOrder = 0
TopIndex = -1 TopIndex = -1
AnchorSideBottom.Control = TemplateSynEdit AnchorSideBottom.Control = TemplateSplitter
Height = 156 Height = 150
Width = 408 Width = 408
end end
object TemplateSynEdit: TSynEdit object TemplateSynEdit: TSynEdit
Align = alBottom Align = alBottom
BorderSpacing.OnChange = nil
Font.Height = -18 Font.Height = -18
Font.Name = 'courier' Font.Name = 'courier'
Height = 150 Height = 150
Name = 'TemplateSynEdit' Name = 'TemplateSynEdit'
TabOrder = 1 TabOrder = 1
Width = 582 Width = 582
BookMarkOptions.OnChange = nil
Gutter.OnChange = nil
Gutter.CodeFoldingWidth = 14 Gutter.CodeFoldingWidth = 14
Highlighter = ASynPasSyn Highlighter = ASynPasSyn
Keystrokes = < Keystrokes = <
@ -442,10 +433,9 @@ object CodeTemplateDialog: TCodeTemplateDialog
Lines.Strings = ( Lines.Strings = (
'TemplateSynEdit' 'TemplateSynEdit'
) )
SelectedColor.OnChange = nil
Cursor = crIBeam Cursor = crIBeam
Height = 150 Height = 150
Top = 156 Top = 155
Width = 582 Width = 582
end end
object TemplateSplitter: TSplitter object TemplateSplitter: TSplitter
@ -454,14 +444,14 @@ object CodeTemplateDialog: TCodeTemplateDialog
Height = 5 Height = 5
ParentColor = True ParentColor = True
Width = 582 Width = 582
ResizeAnchor = akBottom
Cursor = crVSplit Cursor = crVSplit
Height = 5 Height = 5
Top = 151 Top = 150
Width = 582 Width = 582
end end
object AddButton: TButton object AddButton: TButton
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
BorderSpacing.OnChange = nil
BorderSpacing.InnerBorder = 2 BorderSpacing.InnerBorder = 2
Caption = 'AddButton' Caption = 'AddButton'
OnClick = AddButtonClick OnClick = AddButtonClick
@ -472,7 +462,6 @@ object CodeTemplateDialog: TCodeTemplateDialog
end end
object DeleteButton: TButton object DeleteButton: TButton
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
BorderSpacing.OnChange = nil
BorderSpacing.InnerBorder = 2 BorderSpacing.InnerBorder = 2
Caption = 'DeleteButton' Caption = 'DeleteButton'
OnClick = DeleteButtonClick OnClick = DeleteButtonClick
@ -484,7 +473,6 @@ object CodeTemplateDialog: TCodeTemplateDialog
end end
object EditButton: TButton object EditButton: TButton
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
BorderSpacing.OnChange = nil
BorderSpacing.InnerBorder = 2 BorderSpacing.InnerBorder = 2
Caption = 'EditButton' Caption = 'EditButton'
OnClick = EditButtonClick OnClick = EditButtonClick
@ -496,13 +484,12 @@ object CodeTemplateDialog: TCodeTemplateDialog
end end
object UseMakrosCheckBox: TCheckBox object UseMakrosCheckBox: TCheckBox
Anchors = [akTop, akRight] Anchors = [akTop, akRight]
BorderSpacing.OnChange = nil
Caption = 'UseMakrosCheckBox' Caption = 'UseMakrosCheckBox'
TabOrder = 5 TabOrder = 5
Left = 439 Left = 426
Height = 23 Height = 24
Top = 106 Top = 106
Width = 133 Width = 146
end end
end end
object ASynPasSyn: TSynPasSyn object ASynPasSyn: TSynPasSyn

View File

@ -1,105 +1,100 @@
{ This is an automatically generated lazarus resource file } { This is an automatically generated lazarus resource file }
LazarusResources.Add('TCodeTemplateDialog','FORMDATA',[ LazarusResources.Add('TCodeTemplateDialog','FORMDATA',[
'TPF0'#19'TCodeTemplateDialog'#18'CodeTemplateDialog'#7'Caption'#6#18'CodeTem' 'TPF0'#19'TCodeTemplateDialog'#18'CodeTemplateDialog'#13'ActiveControl'#7#12
+'plateDialog'#12'ClientHeight'#3#176#1#11'ClientWidth'#3'T'#2#8'OnCreate'#7 +'FilenameEdit'#7'Caption'#6#18'CodeTemplateDialog'#12'ClientHeight'#3#176#1
+#10'FormCreate'#13'PixelsPerInch'#2'p'#18'HorzScrollBar.Page'#3'S'#2#18'Vert' +#11'ClientWidth'#3'T'#2#8'OnCreate'#7#10'FormCreate'#13'PixelsPerInch'#2'p'
+'ScrollBar.Page'#3#175#1#4'Left'#3'"'#1#6'Height'#3#176#1#3'Top'#3#163#0#5'W' +#18'HorzScrollBar.Page'#3'S'#2#18'VertScrollBar.Page'#3#175#1#4'Left'#3'"'#1
+'idth'#3'T'#2#0#9'TGroupBox'#16'FilenameGroupBox'#5'Align'#7#5'alTop'#22'Bor' +#6'Height'#3#176#1#3'Top'#3#163#0#5'Width'#3'T'#2#0#9'TGroupBox'#16'Filename'
+'derSpacing.OnChange'#13#20'BorderSpacing.Around'#2#5#7'Caption'#6#16'Filena' +'GroupBox'#5'Align'#7#5'alTop'#20'BorderSpacing.Around'#2#5#7'Caption'#6#16
+'meGroupBox'#12'ClientHeight'#2'*'#11'ClientWidth'#3'F'#2#11'ParentColor'#9#8 +'FilenameGroupBox'#12'ClientHeight'#2'*'#11'ClientWidth'#3'F'#2#11'ParentCol'
+'TabOrder'#2#0#4'Left'#2#5#6'Height'#2';'#3'Top'#2#5#5'Width'#3'J'#2#0#5'TEd' +'or'#9#8'TabOrder'#2#0#4'Left'#2#5#6'Height'#2';'#3'Top'#2#5#5'Width'#3'J'#2
+'it'#12'FilenameEdit'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#22'Borde' +#0#5'TEdit'#12'FilenameEdit'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#0#19
+'rSpacing.OnChange'#13#19'BorderSpacing.Right'#2#5#8'TabOrder'#2#0#4'Text'#6 +'BorderSpacing.Right'#2#5#8'TabOrder'#2#0#4'Text'#6#12'FilenameEdit'#23'Anch'
+#12'FilenameEdit'#23'AnchorSideRight.Control'#7#14'FilenameButton'#4'Left'#2 +'orSideRight.Control'#7#14'FilenameButton'#4'Left'#2#9#6'Height'#2#23#3'Top'
+#9#6'Height'#2#23#3'Top'#2#4#5'Width'#3#19#2#0#0#7'TButton'#14'FilenameButto' +#2#4#5'Width'#3#19#2#0#0#7'TButton'#14'FilenameButton'#7'Anchors'#11#5'akTop'
+'n'#7'Anchors'#11#5'akTop'#6'akLeft'#8'akBottom'#0#22'BorderSpacing.OnChange' +#6'akLeft'#8'akBottom'#0#25'BorderSpacing.InnerBorder'#2#2#7'Caption'#6#3'..'
+#13#25'BorderSpacing.InnerBorder'#2#2#7'Caption'#6#3'...'#7'OnClick'#7#19'Fi' +'.'#7'OnClick'#7#19'FilenameButtonClick'#8'TabOrder'#2#1#24'AnchorSideBottom'
+'lenameButtonClick'#8'TabOrder'#2#1#24'AnchorSideBottom.Control'#7#12'Filena' +'.Control'#7#12'FilenameEdit'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Lef'
+'meEdit'#21'AnchorSideBottom.Side'#7#9'asrBottom'#4'Left'#3'!'#2#6'Height'#2 +'t'#3'!'#2#6'Height'#2#23#3'Top'#2#4#5'Width'#2#30#0#0#0#7'TButton'#8'OkButt'
+#23#3'Top'#2#4#5'Width'#2#30#0#0#0#7'TButton'#8'OkButton'#7'Anchors'#11#7'ak' +'on'#7'Anchors'#11#7'akRight'#8'akBottom'#0#8'AutoSize'#9#19'BorderSpacing.R'
+'Right'#8'akBottom'#0#8'AutoSize'#9#22'BorderSpacing.OnChange'#13#19'BorderS' +'ight'#2#14#25'BorderSpacing.InnerBorder'#2#2#7'Caption'#6#8'OkButton'#7'OnC'
+'pacing.Right'#2#14#25'BorderSpacing.InnerBorder'#2#2#7'Caption'#6#8'OkButto' +'lick'#7#13'OkButtonClick'#8'TabOrder'#2#1#23'AnchorSideRight.Control'#7#12
+'n'#7'OnClick'#7#13'OkButtonClick'#8'TabOrder'#2#1#23'AnchorSideRight.Contro' +'CancelButton'#24'AnchorSideBottom.Control'#7#12'CancelButton'#21'AnchorSide'
+'l'#7#12'CancelButton'#24'AnchorSideBottom.Control'#7#12'CancelButton'#21'An' +'Bottom.Side'#7#9'asrBottom'#4'Left'#3#167#1#6'Height'#2#26#3'Top'#3#140#1#5
+'chorSideBottom.Side'#7#9'asrBottom'#4'Left'#3#147#1#6'Height'#2#25#3'Top'#3 +'Width'#2'='#0#0#7'TButton'#12'CancelButton'#7'Anchors'#11#7'akRight'#8'akBo'
+#141#1#5'Width'#2'['#0#0#7'TButton'#12'CancelButton'#7'Anchors'#11#7'akRight' +'ttom'#0#8'AutoSize'#9#25'BorderSpacing.InnerBorder'#2#2#7'Caption'#6#12'Can'
+#8'akBottom'#0#8'AutoSize'#9#22'BorderSpacing.OnChange'#13#25'BorderSpacing.' +'celButton'#11'ModalResult'#2#2#8'TabOrder'#2#2#4'Left'#3#242#1#6'Height'#2
+'InnerBorder'#2#2#7'Caption'#6#12'CancelButton'#11'ModalResult'#2#2#8'TabOrd' +#26#3'Top'#3#140#1#5'Width'#2'U'#0#0#9'TGroupBox'#16'TemplateGroupBox'#5'Ali'
+'er'#2#2#4'Left'#3#252#1#6'Height'#2#25#3'Top'#3#141#1#5'Width'#2'K'#0#0#9'T' +'gn'#7#5'alTop'#7'Anchors'#11#5'akTop'#6'akLeft'#7'akRight'#8'akBottom'#0#20
+'GroupBox'#16'TemplateGroupBox'#5'Align'#7#5'alTop'#7'Anchors'#11#5'akTop'#6 +'BorderSpacing.Around'#2#5#7'Caption'#6#16'TemplateGroupBox'#12'ClientHeight'
+'akLeft'#7'akRight'#8'akBottom'#0#22'BorderSpacing.OnChange'#13#20'BorderSpa' +#3'1'#1#11'ClientWidth'#3'F'#2#11'ParentColor'#9#8'TabOrder'#2#3#24'AnchorSi'
+'cing.Around'#2#5#7'Caption'#6#16'TemplateGroupBox'#12'ClientHeight'#3'2'#1 +'deBottom.Control'#7#12'CancelButton'#4'Left'#2#5#6'Height'#3'B'#1#3'Top'#2
+#11'ClientWidth'#3'F'#2#11'ParentColor'#9#8'TabOrder'#2#3#24'AnchorSideBotto' +'E'#5'Width'#3'J'#2#0#8'TListBox'#15'TemplateListBox'#7'Anchors'#11#5'akTop'
+'m.Control'#7#12'CancelButton'#4'Left'#2#5#6'Height'#3'C'#1#3'Top'#2'E'#5'Wi' +#6'akLeft'#7'akRight'#8'akBottom'#0#17'OnSelectionChange'#7#30'TemplateListB'
+'dth'#3'J'#2#0#8'TListBox'#15'TemplateListBox'#7'Anchors'#11#5'akTop'#6'akLe' +'oxSelectionChange'#8'TabOrder'#2#0#8'TopIndex'#2#255#24'AnchorSideBottom.Co'
+'ft'#7'akRight'#8'akBottom'#0#22'BorderSpacing.OnChange'#13#17'OnSelectionCh' +'ntrol'#7#16'TemplateSplitter'#6'Height'#3#150#0#5'Width'#3#152#1#0#0#8'TSyn'
+'ange'#7#30'TemplateListBoxSelectionChange'#8'TabOrder'#2#0#8'TopIndex'#2#255 +'Edit'#15'TemplateSynEdit'#5'Align'#7#8'alBottom'#11'Font.Height'#2#238#9'Fo'
+#24'AnchorSideBottom.Control'#7#15'TemplateSynEdit'#6'Height'#3#156#0#5'Widt' +'nt.Name'#6#7'courier'#6'Height'#3#150#0#4'Name'#6#15'TemplateSynEdit'#8'Tab'
+'h'#3#152#1#0#0#8'TSynEdit'#15'TemplateSynEdit'#5'Align'#7#8'alBottom'#22'Bo' +'Order'#2#1#5'Width'#3'F'#2#23'Gutter.CodeFoldingWidth'#2#14#11'Highlighter'
+'rderSpacing.OnChange'#13#11'Font.Height'#2#238#9'Font.Name'#6#7'courier'#6 +#7#10'ASynPasSyn'#10'Keystrokes'#14#1#7'Command'#2#3#8'ShortCut'#2'&'#0#1#7
+'Height'#3#150#0#4'Name'#6#15'TemplateSynEdit'#8'TabOrder'#2#1#5'Width'#3'F' +'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Command'#3#211#0#8'ShortCut'#3'&@'#0#1
+#2#24'BookMarkOptions.OnChange'#13#15'Gutter.OnChange'#13#23'Gutter.CodeFold' +#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Command'#2'h'#8'ShortCut'#3'( '#0#1#7
+'ingWidth'#2#14#11'Highlighter'#7#10'ASynPasSyn'#10'Keystrokes'#14#1#7'Comma' +'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7'Command'#2#1#8'ShortCut'#2'%'#0#1#7
+'nd'#2#3#8'ShortCut'#2'&'#0#1#7'Command'#2'g'#8'ShortCut'#3'& '#0#1#7'Comman' +'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'Command'#2#5#8'ShortCut'#3'%@'#0#1#7
+'d'#3#211#0#8'ShortCut'#3'&@'#0#1#7'Command'#2#4#8'ShortCut'#2'('#0#1#7'Comm' +'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'Command'#2#2#8'ShortCut'#2''''#0#1#7
+'and'#2'h'#8'ShortCut'#3'( '#0#1#7'Command'#3#212#0#8'ShortCut'#3'(@'#0#1#7 +'Command'#2'f'#8'ShortCut'#3''' '#0#1#7'Command'#2#6#8'ShortCut'#3'''@'#0#1#7
+'Command'#2#1#8'ShortCut'#2'%'#0#1#7'Command'#2'e'#8'ShortCut'#3'% '#0#1#7'C' +'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7'Command'#2#10#8'ShortCut'#2'"'#0#1#7
+'ommand'#2#5#8'ShortCut'#3'%@'#0#1#7'Command'#2'i'#8'ShortCut'#3'%`'#0#1#7'C' +'Command'#2'n'#8'ShortCut'#3'" '#0#1#7'Command'#2#14#8'ShortCut'#3'"@'#0#1#7
+'ommand'#2#2#8'ShortCut'#2''''#0#1#7'Command'#2'f'#8'ShortCut'#3''' '#0#1#7 +'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7'Command'#2#9#8'ShortCut'#2'!'#0#1#7'C'
+'Command'#2#6#8'ShortCut'#3'''@'#0#1#7'Command'#2'j'#8'ShortCut'#3'''`'#0#1#7 +'ommand'#2'm'#8'ShortCut'#3'! '#0#1#7'Command'#2#13#8'ShortCut'#3'!@'#0#1#7
+'Command'#2#10#8'ShortCut'#2'"'#0#1#7'Command'#2'n'#8'ShortCut'#3'" '#0#1#7 +'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7'Command'#2#7#8'ShortCut'#2'$'#0#1#7'C'
+'Command'#2#14#8'ShortCut'#3'"@'#0#1#7'Command'#2'r'#8'ShortCut'#3'"`'#0#1#7 +'ommand'#2'k'#8'ShortCut'#3'$ '#0#1#7'Command'#2#15#8'ShortCut'#3'$@'#0#1#7
+'Command'#2#9#8'ShortCut'#2'!'#0#1#7'Command'#2'm'#8'ShortCut'#3'! '#0#1#7'C' +'Command'#2's'#8'ShortCut'#3'$`'#0#1#7'Command'#2#8#8'ShortCut'#2'#'#0#1#7'C'
+'ommand'#2#13#8'ShortCut'#3'!@'#0#1#7'Command'#2'q'#8'ShortCut'#3'!`'#0#1#7 +'ommand'#2'l'#8'ShortCut'#3'# '#0#1#7'Command'#2#16#8'ShortCut'#3'#@'#0#1#7
+'Command'#2#7#8'ShortCut'#2'$'#0#1#7'Command'#2'k'#8'ShortCut'#3'$ '#0#1#7'C' +'Command'#2't'#8'ShortCut'#3'#`'#0#1#7'Command'#3#223#0#8'ShortCut'#2'-'#0#1
+'ommand'#2#15#8'ShortCut'#3'$@'#0#1#7'Command'#2's'#8'ShortCut'#3'$`'#0#1#7 +#7'Command'#3#201#0#8'ShortCut'#3'-@'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'- '
+'Command'#2#8#8'ShortCut'#2'#'#0#1#7'Command'#2'l'#8'ShortCut'#3'# '#0#1#7'C' +#0#1#7'Command'#3#246#1#8'ShortCut'#2'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3
+'ommand'#2#16#8'ShortCut'#3'#@'#0#1#7'Command'#2't'#8'ShortCut'#3'#`'#0#1#7 +'. '#0#1#7'Command'#3#245#1#8'ShortCut'#2#8#0#1#7'Command'#3#245#1#8'ShortCu'
+'Command'#3#223#0#8'ShortCut'#2'-'#0#1#7'Command'#3#201#0#8'ShortCut'#3'-@'#0 +'t'#3#8' '#0#1#7'Command'#3#248#1#8'ShortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8
+#1#7'Command'#3'\'#2#8'ShortCut'#3'- '#0#1#7'Command'#3#246#1#8'ShortCut'#2 +'ShortCut'#4#8#128#0#0#0#1#7'Command'#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'C'
+'.'#0#1#7'Command'#3'['#2#8'ShortCut'#3'. '#0#1#7'Command'#3#245#1#8'ShortCu' +'ommand'#3#253#1#8'ShortCut'#2#13#0#1#7'Command'#3#199#0#8'ShortCut'#3'A@'#0
+'t'#2#8#0#1#7'Command'#3#245#1#8'ShortCut'#3#8' '#0#1#7'Command'#3#248#1#8'S' +#1#7'Command'#3#201#0#8'ShortCut'#3'C@'#0#1#7'Command'#3'b'#2#8'ShortCut'#3
+'hortCut'#3#8'@'#0#1#7'Command'#3'Y'#2#8'ShortCut'#4#8#128#0#0#0#1#7'Command' +'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3'M@'#0#1#7'Command'#3#254#1#8'Short'
+#3'Z'#2#8'ShortCut'#4#8#160#0#0#0#1#7'Command'#3#253#1#8'ShortCut'#2#13#0#1#7 +'Cut'#3'N@'#0#1#7'Command'#3#247#1#8'ShortCut'#3'T@'#0#1#7'Command'#3'c'#2#8
+'Command'#3#199#0#8'ShortCut'#3'A@'#0#1#7'Command'#3#201#0#8'ShortCut'#3'C@' +'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8'ShortCut'#3'V@'#0#1#7'Command'#3'['
+#0#1#7'Command'#3'b'#2#8'ShortCut'#3'I`'#0#1#7'Command'#3#253#1#8'ShortCut'#3 +#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251#1#8'ShortCut'#3'Y@'#0#1#7'Command'
+'M@'#0#1#7'Command'#3#254#1#8'ShortCut'#3'N@'#0#1#7'Command'#3#247#1#8'Short' +#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command'#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Com'
,'Cut'#3'T@'#0#1#7'Command'#3'c'#2#8'ShortCut'#3'U`'#0#1#7'Command'#3'\'#2#8 ,'mand'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Command'#3'-'#1#8'ShortCut'#3'0@'#0#1#7
+'ShortCut'#3'V@'#0#1#7'Command'#3'['#2#8'ShortCut'#3'X@'#0#1#7'Command'#3#251 +'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7'Command'#3'/'#1#8'ShortCut'#3'2@'#0
+#1#8'ShortCut'#3'Y@'#0#1#7'Command'#3#250#1#8'ShortCut'#3'Y`'#0#1#7'Command' +#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0#1#7'Command'#3'1'#1#8'ShortCut'#3'4'
+#3'Y'#2#8'ShortCut'#3'Z@'#0#1#7'Command'#3'Z'#2#8'ShortCut'#3'Z`'#0#1#7'Comm' +'@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5@'#0#1#7'Command'#3'3'#1#8'ShortCut'
+'and'#3'-'#1#8'ShortCut'#3'0@'#0#1#7'Command'#3'.'#1#8'ShortCut'#3'1@'#0#1#7 +#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut'#3'7@'#0#1#7'Command'#3'5'#1#8'Short'
+'Command'#3'/'#1#8'ShortCut'#3'2@'#0#1#7'Command'#3'0'#1#8'ShortCut'#3'3@'#0 +'Cut'#3'8@'#0#1#7'Command'#3'6'#1#8'ShortCut'#3'9@'#0#1#7'Command'#3'_'#1#8
+#1#7'Command'#3'1'#1#8'ShortCut'#3'4@'#0#1#7'Command'#3'2'#1#8'ShortCut'#3'5' +'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8'ShortCut'#3'1`'#0#1#7'Command'#3'a'
+'@'#0#1#7'Command'#3'3'#1#8'ShortCut'#3'6@'#0#1#7'Command'#3'4'#1#8'ShortCut' +#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b'#1#8'ShortCut'#3'3`'#0#1#7'Command'#3
+#3'7@'#0#1#7'Command'#3'5'#1#8'ShortCut'#3'8@'#0#1#7'Command'#3'6'#1#8'Short' +'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3'd'#1#8'ShortCut'#3'5`'#0#1#7'Comman'
+'Cut'#3'9@'#0#1#7'Command'#3'_'#1#8'ShortCut'#3'0`'#0#1#7'Command'#3'`'#1#8 +'d'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Command'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'C'
+'ShortCut'#3'1`'#0#1#7'Command'#3'a'#1#8'ShortCut'#3'2`'#0#1#7'Command'#3'b' +'ommand'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'Command'#3'h'#1#8'ShortCut'#3'9`'#0#1
+#1#8'ShortCut'#3'3`'#0#1#7'Command'#3'c'#1#8'ShortCut'#3'4`'#0#1#7'Command'#3 +#7'Command'#3#231#0#8'ShortCut'#3'N`'#0#1#7'Command'#3#232#0#8'ShortCut'#3'C'
+'d'#1#8'ShortCut'#3'5`'#0#1#7'Command'#3'e'#1#8'ShortCut'#3'6`'#0#1#7'Comman' +'`'#0#1#7'Command'#3#233#0#8'ShortCut'#3'L`'#0#1#7'Command'#3'd'#2#8'ShortCu'
+'d'#3'f'#1#8'ShortCut'#3'7`'#0#1#7'Command'#3'g'#1#8'ShortCut'#3'8`'#0#1#7'C' +'t'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut'#3#9' '#0#1#7'Command'#3#250#0#8'Sh'
+'ommand'#3'h'#1#8'ShortCut'#3'9`'#0#1#7'Command'#3#231#0#8'ShortCut'#3'N`'#0 +'ortCut'#3'B`'#0#0#13'Lines.Strings'#1#6#15'TemplateSynEdit'#0#6'Cursor'#7#7
+#1#7'Command'#3#232#0#8'ShortCut'#3'C`'#0#1#7'Command'#3#233#0#8'ShortCut'#3 +'crIBeam'#6'Height'#3#150#0#3'Top'#3#155#0#5'Width'#3'F'#2#0#0#9'TSplitter'
+'L`'#0#1#7'Command'#3'd'#2#8'ShortCut'#2#9#0#1#7'Command'#3'e'#2#8'ShortCut' +#16'TemplateSplitter'#5'Align'#7#8'alBottom'#6'Cursor'#7#8'crVSplit'#6'Heigh'
+#3#9' '#0#1#7'Command'#3#250#0#8'ShortCut'#3'B`'#0#0#13'Lines.Strings'#1#6#15 +'t'#2#5#11'ParentColor'#9#5'Width'#3'F'#2#12'ResizeAnchor'#7#8'akBottom'#6'C'
+'TemplateSynEdit'#0#22'SelectedColor.OnChange'#13#6'Cursor'#7#7'crIBeam'#6'H' +'ursor'#7#8'crVSplit'#6'Height'#2#5#3'Top'#3#150#0#5'Width'#3'F'#2#0#0#7'TBu'
+'eight'#3#150#0#3'Top'#3#156#0#5'Width'#3'F'#2#0#0#9'TSplitter'#16'TemplateS' +'tton'#9'AddButton'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.Inn'
+'plitter'#5'Align'#7#8'alBottom'#6'Cursor'#7#8'crVSplit'#6'Height'#2#5#11'Pa' +'erBorder'#2#2#7'Caption'#6#9'AddButton'#7'OnClick'#7#14'AddButtonClick'#8'T'
+'rentColor'#9#5'Width'#3'F'#2#6'Cursor'#7#8'crVSplit'#6'Height'#2#5#3'Top'#3 +'abOrder'#2#2#4'Left'#3#201#1#6'Height'#2#30#5'Width'#2's'#0#0#7'TButton'#12
+#151#0#5'Width'#3'F'#2#0#0#7'TButton'#9'AddButton'#7'Anchors'#11#5'akTop'#7 +'DeleteButton'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacing.InnerBor'
+'akRight'#0#22'BorderSpacing.OnChange'#13#25'BorderSpacing.InnerBorder'#2#2#7 +'der'#2#2#7'Caption'#6#12'DeleteButton'#7'OnClick'#7#17'DeleteButtonClick'#8
+'Caption'#6#9'AddButton'#7'OnClick'#7#14'AddButtonClick'#8'TabOrder'#2#2#4'L' +'TabOrder'#2#3#4'Left'#3#201#1#6'Height'#2#30#3'Top'#2'$'#5'Width'#2's'#0#0#7
+'eft'#3#201#1#6'Height'#2#30#5'Width'#2's'#0#0#7'TButton'#12'DeleteButton'#7 +'TButton'#10'EditButton'#7'Anchors'#11#5'akTop'#7'akRight'#0#25'BorderSpacin'
+'Anchors'#11#5'akTop'#7'akRight'#0#22'BorderSpacing.OnChange'#13#25'BorderSp' +'g.InnerBorder'#2#2#7'Caption'#6#10'EditButton'#7'OnClick'#7#15'EditButtonCl'
+'acing.InnerBorder'#2#2#7'Caption'#6#12'DeleteButton'#7'OnClick'#7#17'Delete' +'ick'#8'TabOrder'#2#4#4'Left'#3#201#1#6'Height'#2#30#3'Top'#2'G'#5'Width'#2
+'ButtonClick'#8'TabOrder'#2#3#4'Left'#3#201#1#6'Height'#2#30#3'Top'#2'$'#5'W' +'s'#0#0#9'TCheckBox'#17'UseMakrosCheckBox'#7'Anchors'#11#5'akTop'#7'akRight'
+'idth'#2's'#0#0#7'TButton'#10'EditButton'#7'Anchors'#11#5'akTop'#7'akRight'#0 +#0#7'Caption'#6#17'UseMakrosCheckBox'#8'TabOrder'#2#5#4'Left'#3#170#1#6'Heig'
+#22'BorderSpacing.OnChange'#13#25'BorderSpacing.InnerBorder'#2#2#7'Caption'#6 +'ht'#2#24#3'Top'#2'j'#5'Width'#3#146#0#0#0#0#10'TSynPasSyn'#10'ASynPasSyn'#7
+#10'EditButton'#7'OnClick'#7#15'EditButtonClick'#8'TabOrder'#2#4#4'Left'#3 +'Enabled'#8#4'left'#3#21#1#3'top'#3#216#0#0#0#0
+#201#1#6'Height'#2#30#3'Top'#2'G'#5'Width'#2's'#0#0#9'TCheckBox'#17'UseMakro'
+'sCheckBox'#7'Anchors'#11#5'akTop'#7'akRight'#0#22'BorderSpacing.OnChange'#13
+#7'Caption'#6#17'UseMakrosCheckBox'#8'TabOrder'#2#5#4'Left'#3#183#1#6'Height'
+#2#23#3'Top'#2'j'#5'Width'#3#133#0#0#0#0#10'TSynPasSyn'#10'ASynPasSyn'#7'Ena'
+'bled'#8#4'left'#3#21#1#3'top'#3#216#0#0#0#0
]); ]);