在Delphi 里用delforex格式化代码习惯了,到了lazarus jediformat 用得很不习惯,自行修改代码:
lazarus 的对象
开发思路:jedi format有个anyword设置变量名称为 SpecificWordCaps,在代码格式化前对把文件定义的变量添加进行,格式化后还原(临时保存在OldSpecificWordCaps,调用ResetSpecificWordCaps),经测试有效。
使用oldSpecificWordCap :tstringlist进行记录anyword,重
一、Unit Converter;位置在\components\jcf2\ReadWrite\Converter.pas
1.修改uses 增加Tokens,classes
2.修改过程
Procedure TConverter.Convert;
Var
lcTokenList: TSourceTokenList;
//增加以下局部变量
I: Integer;
Src: TSourceToken;
TmpSL: TStringList;
在 lcTokenList := fcTokeniser.BuildTokenList; 后增加
TmpSL := TStringList.Create;//临时字符串列表保存自定义变量
tmpsl.CaseSensitive:=false; //win下本句可省,linux未测试,有需要可以增加
FormattingSettings.ResetSpecificWordCaps;
For I := 0 To lcTokenList.Count - 1 Do
Begin
Src := lcTokenList.SourceTokens[I];
If (Src.TokenType = ttIdentifier) And (Src.WordType = wtIdentifier) Then
//若为标识符(即自定义变量含TObject之类变量类型)
Begin
If TmpSL.IndexOf(Src.SourceCode) = -1 Then//若未添加
Begin
TmpSL.Add(Src.SourceCode);//加入格式化列表
End;
End;
End;
FormattingSettings.SpecificWordCaps.Words.AddStrings(TmpSL);
FreeAndNil(TmpSL);
二修改unit JcfSettings;
位置:components\jcf2\Settings\JcfSettings.pas增加uses classes
1. TFormattingSettings类增加公用函数procedure ResetSpecificWordCaps;
函数实现:
procedure TFormattingSettings.ResetSpecificWordCaps;
begin
fcSpecificWordCaps.Words.Clear;
fcSpecificWordCaps.Words.AddStrings(OldSpecificWordCaps);
end;
2.增加私有变量定义oldSpecificWordCaps:TStringlist;
在构造函数constructor TFormattingSettings.Create(const pbReadRegFile: boolean); 里增加
oldSpecificWordCaps:=TStringlist.Create; //增加
在析构函数destructor TFormattingSettings.Destroy; 里增加
FreeAndNil(oldSpecificWordCaps); //释放
在procedure TFormattingSettings.FromStream(const pcStream: TSettingsInput);函数中
ReadFromStream(fcSpecificWordCaps);//后面增加
OldSpecificWordCaps.Clear;
OldSpecificWordCaps.AddStrings(fcSpecificWordCaps.Words);//保存临时定义