编辑器

优化tsl代码解析
This commit is contained in:
JianjunLiu 2022-09-02 10:06:33 +08:00
parent 5edd6251c4
commit d78a8a0f7c
1 changed files with 70 additions and 65 deletions

View File

@ -1547,9 +1547,13 @@ type TBBState =class //
end
type TTsfFileParser = class //Îļþ½âÎö
private
fiofs;
public
function Create();
begin
FCacheDir :=TS_GetUserProfileHome()+"TslSynMemo"+ioFileseparator()+"cmpCaches";// d["value"];
fiofs := ioFileseparator();
FCacheDir :=TS_GetUserProfileHome()+"TslSynMemo"+fiofs+"cmpCaches";// d["value"];
//FCacheAbsFileName := FCacheDir+"\\cacheabstruct.stm";
//FFileWorker := new TThreadWorker("this.OnMessage :=findfunction('UTslSynMemo.FileSaveThreader') ;");
FFindDirs := array();
@ -1929,36 +1933,20 @@ type TTsfFileParser = class //
return ReadParseredFile(n+".tsf");
end
end
function ParserFiles(dir,FFileNames,mf);
begin
dirs := FileList("",dir+ioFileseparator()+"*");
for i,v in dirs do
begin
fn := v["FileName"] ;
if pos("D",v["Attr"]) and not( fn in array(".","..")) then
begin
ParserFiles(dir+ioFileseparator()+fn,FFileNames,mf);
end
end
dirs := FileList("",dir+ioFileseparator()+"*.tsf");
for i,v in dirs do
begin
if not(pos("D",v["Attr"])) then
function parserafile(dir,v);
begin
fn := lowercase( v["FileName"]);
if FFileNames[fn] then continue;
if fn=mf then continue;
pfn := dir+ioFileseparator()+fn;
sz := filesize("",pfn);
fl := FileList("",pfn);
if FFileNames[fn] then return ;
if fn=mf then return ;
pfn := dir+fiofs+fn;
sz := v["Size"];
flt := v["Time"];
d := ReadParseredFileTime(fn);
FFileNames[fn] := pfn;
//echo "\r\n",tostn(fn),"===",v["Attr"];
if ifstring(d) and d=fl[0,"Time"] then
if ifstring(d) and d=flt then
begin
//FCacheS[fn]
ReadParseredFile(fn);
continue;
return ;
end
if readFile(rwRaw(),"",pfn,0,sz,rdd) then
begin
@ -1990,21 +1978,38 @@ type TTsfFileParser = class //
if not ifarray(FCacheS) then FCacheS := array();
FCacheS[fn] := r;//new tparserdobject( r);
FFilePaths[fn] := pfn;
WriteParseredFile(fn,r,fl[0,"Time"]);
WriteParseredFile(fn,r,flt);
end
end
function ParserFiles(dir,FFileNames,mf);
begin
dirs := FileList("",dir+fiofs+"*");
for i,v in dirs do
begin
fn := v["FileName"] ;
if not(pos("D",v["Attr"])) and (1=ParseRegExpr("\\.tsf$",fn,"i",m,mp,ml)) then //tsfÎļþ´¦Àí
begin
parserafile(dir,v);
end
if pos("D",v["Attr"]) and not( fn in array(".","..")) then //×ÓĿ¼²éÕÒ
begin
ParserFiles(dir+fiofs+fn,FFileNames,mf);
end
end
end
function ModifyFname(n);
begin
nn := lowercase(n);
dg := getmsgd_Crc32(nn);//GetMsgdigest(nn,0);
return dg[1]+ioFileseparator()+n;
return dg[1]+fiofs+n;
end
function WriteParseredFile(n,d,t);
begin
f1 := FCacheDir+ioFileseparator()+ModifyFname(n)+".p";
f2 := FCacheDir+ioFileseparator()+"lasttime"+ioFileseparator()+ModifyFname(n)+".t";
iofs := fiofs;
f1 := FCacheDir+iofs+ModifyFname(n)+".p";
f2 := FCacheDir+iofs+"lasttime"+iofs+ModifyFname(n)+".t";
CreateDirWithFileName(f1);
CreateDirWithFileName(f2);
exportfile(ftstream(),"",f1,d);
@ -2014,7 +2019,7 @@ type TTsfFileParser = class //
begin
if FCacheDir then
begin
fn := FCacheDir+ioFileseparator()+"lasttime"+ioFileseparator()+ModifyFname(n)+".t";
fn := FCacheDir+fiofs+"lasttime"+fiofs+ModifyFname(n)+".t";
if importfile(ftstream(),"",fn,d)=1 then return d;
end
end
@ -2031,7 +2036,7 @@ type TTsfFileParser = class //
FFilePaths[lowercase(n)] := d["fullpath"];
return d;
end
fn := FCacheDir+ioFileseparator()+ModifyFname(n)+".p";
fn := FCacheDir+fiofs+ModifyFname(n)+".p";
if importfile(ftstream(),"",fn,d)=1 and ifarray(d) then
begin
FCacheS[lowercase(n)] := r;//new tparserdobject(d);