编辑器

优化tsl语法解析
This commit is contained in:
JianjunLiu 2022-09-21 15:00:27 +08:00
parent 3b9ac6f107
commit 8cd8af1f06
1 changed files with 24 additions and 29 deletions

View File

@ -4,7 +4,6 @@ interface
@explan(说明) tsl语法编辑器库 @explan(说明) tsl语法编辑器库
**} **}
uses utslvclauxiliary,UTslMemo; uses utslvclauxiliary,UTslMemo;
function FileSaveThreader(o,d);
type TTSLCompletion= class(TSynCompletion) type TTSLCompletion= class(TSynCompletion)
{** {**
@explan(说明) tsl提示自动完成类 @explan(说明) tsl提示自动完成类
@ -1266,7 +1265,7 @@ type TBBState =class(tpairstate) //
inherited; inherited;
end end
end end
type TTsfFileParser = class //文件解析 type TTsfFileParser = class() //文件解析
private private
fiofs; fiofs;
public public
@ -1276,7 +1275,6 @@ type TTsfFileParser = class //
fiofs := ioFileseparator(); fiofs := ioFileseparator();
FCacheDir :=TS_GetUserProfileHome()+"TslSynMemo"+fiofs+"cmpCaches";// d["value"]; FCacheDir :=TS_GetUserProfileHome()+"TslSynMemo"+fiofs+"cmpCaches";// d["value"];
//FCacheAbsFileName := FCacheDir+"\\cacheabstruct.stm"; //FCacheAbsFileName := FCacheDir+"\\cacheabstruct.stm";
//FFileWorker := new TThreadWorker("this.OnMessage :=findfunction('UTslSynMemo.FileSaveThreader') ;");
FFindDirs := array(); FFindDirs := array();
end end
function DispatchMethod(o,d);//分发消息 function DispatchMethod(o,d);//分发消息
@ -1623,7 +1621,6 @@ type TTsfFileParser = class //
end end
function ParserFindDir(f); //解析缓存 function ParserFindDir(f); //解析缓存
begin begin
//mtic;
if FCacheDir then if FCacheDir then
begin begin
FFileNames := array(); FFileNames := array();
@ -1651,7 +1648,7 @@ type TTsfFileParser = class //
begin begin
if FCacheDir then if FCacheDir then
begin begin
return ReadParseredFile(n+".tsf"); return ReadParseredFile((n+".tsf"),true);
end end
end end
function parserafile(dir,v); function parserafile(dir,v);
@ -1703,12 +1700,11 @@ type TTsfFileParser = class //
end end
end end
function ParserFiles(dir,FFileNames,mf); function ParserFiles(dir,FFileNames,mf);
begin begin
dirs := FileList("",dir+fiofs+"*"); dirs := FileList("",dir+fiofs+"*");
for i,v in dirs do for i,v in dirs do
begin begin
fn := v["FileName"] ; fn := v["FileName"] ;
if not(pos("D",v["Attr"])) and (1=ParseRegExpr("\\.tsf$",fn,"i",m,mp,ml)) then //tsf文件处理 if not(pos("D",v["Attr"])) and (1=ParseRegExpr("\\.tsf$",fn,"i",m,mp,ml)) then //tsf文件处理
begin begin
parserafile(dir,v); parserafile(dir,v);
@ -1749,7 +1745,7 @@ type TTsfFileParser = class //
if importfile(ftstream(),"",fn,d)=1 then return d; if importfile(ftstream(),"",fn,d)=1 then return d;
end end
end end
function ReadParseredFile(n); //读取解析的文件 function ReadParseredFile(n,g); //读取解析的文件
begin begin
if FCacheDir then if FCacheDir then
begin begin
@ -1760,14 +1756,16 @@ type TTsfFileParser = class //
if d then if d then
begin begin
FFilePaths[lowercase(n)] := d["fullpath"]; FFilePaths[lowercase(n)] := d["fullpath"];
return d; if g then return d;
return 1;
end end
fn := FCacheDir+fiofs+ModifyFname(n)+".p"; fn := FCacheDir+fiofs+ModifyFname(n)+".p";
if importfile(ftstream(),"",fn,d)=1 and ifarray(d) then if importfile(ftstream(),"",fn,d)=1 and ifarray(d) then
begin begin
FCacheS[lowercase(n)] := r;//new tparserdobject(d); FCacheS[lowercase(n)] := d;//new tparserdobject(d);
FFilePaths[lowercase(n)] := d["fullpath"]; FFilePaths[lowercase(n)] := d["fullpath"];
return d; if g then return d;
return 1;
end end
end end
end end
@ -1779,14 +1777,20 @@ type TTsfFileParser = class //
FFinddirsseted := true; FFinddirsseted := true;
if ifarray(d) and d then if ifarray(d) and d then
begin begin
cl := FFindDirs?true:falsse;
FFindDirs := d; FFindDirs := d;
ClearCache(); ClearCache(cl);
end end
return r; return r;
end end
function ClearCache(); //清空缓存 function ClearCache(cl); //清空缓存
begin begin
DeleteAllFiles(FCacheDir); if cl then
begin
DeleteAllFiles(FCacheDir);
end
FFileNames := array();
FFilePaths := array();
FCacheS := array(); FCacheS := array();
end end
function filechanged(d); function filechanged(d);
@ -1806,21 +1810,12 @@ type TTsfFileParser = class //
FFindDirs; //查找目录 FFindDirs; //查找目录
fmsgcaches; fmsgcaches;
end function errtslcode(s); //判断 function procedure结尾搞不定
function FileSaveThreader(o,d); begin
begin return 0;
if not ifarray(d) then return ; return 0;
m := d["method"];
f := d["file"];
c := d["content"];
if (m="exportfile") and ifstring(f) and f then
begin
exportfile(ftstream(),"",f,c);
end end
end end
function errtslcode(s); //判断 function procedure结尾搞不定
begin
return 0;
return 0;
end
end. end.