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;
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
MacroName: String;
Macro: TIDECodeMacro;
NewValue: String;
//Parameter: String;
ErrMsg: string;
begin
Result:=false;
MacroName:=copy(Pattern,MacroStartPos+1,MacroParamStartPos-MacroStartPos-2);
Macro:=IDECodeMacros.FindByName(MacroName);
if Macro<>nil then begin
// macro found
//Parameter:=copy(Pattern,MacroParamStartPos,
// MacroParamEndPos-MacroParamStartPos);
// substitute macros in Parameter
// TODO
MacroValue:=MacroParameter;
if (Level<MaxLevel) and (not SubstituteMacros(MacroValue,Level+1)) then
exit;
if Macro.Interactive then begin
// collect interactive macro
// TODO
debugln('SubstituteCodeMacros TODO interactive macros');
end else begin
// normal macro -> substitute
// TODO
NewValue:='';
if not Macro.GetValue(MacroValue,nil,NewValue,ErrMsg) then exit;
MacroValue:=NewValue;
end;
end else begin
// macro unknown
NewValue:='UnknownMacro('+MacroName+')';
MacroValue:='UnknownMacro('+MacroName+')';
end;
Pattern:=copy(Pattern,1,MacroStartPos)+NewValue
+copy(Pattern,MacroEndPos,len);
Result:=true;
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);
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;
end;
begin
// replace as many macros as possible
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;
Result:=SubstituteMacros(Pattern,0);
end;
initialization

View File

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

View File

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