编辑器

优化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"];
begin
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,82 +1933,83 @@ type TTsfFileParser = class //
return ReadParseredFile(n+".tsf");
end
end
function parserafile(dir,v);
begin
fn := lowercase( v["FileName"]);
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;
if ifstring(d) and d=flt then
begin
ReadParseredFile(fn);
return ;
end
if readFile(rwRaw(),"",pfn,0,sz,rdd) then
begin
if rdd then
begin
if errtslcode(rdd) then
begin
r := array();
rdd := "";
end else
r := tsl_tokenizeex_2_(rdd,1);
end else
begin
r := array();
rdd :="";
end
r["fullpath"] := pfn;
r["name"] := fn;
if (aid := pos("@",fn)) then
begin
r["nspace"] := fn[aid:(length(fn)-4)];
r["name"] := fn[1:(aid-1)];
//echo "\r\nfn:",fn[aid:];
end else r["nspace"] := "";
r["msg"] := getmsgd_Crc32(rdd);//GetMsgdigest(rdd,0);
cls := array();
ScriptDelBlocks(r["blcks"],str2array(rdd,"\n"),cls);
r["blcks"] := cls;
if not ifarray(FCacheS) then FCacheS := array();
FCacheS[fn] := r;//new tparserdobject( r);
FFilePaths[fn] := pfn;
WriteParseredFile(fn,r,flt);
end
end
function ParserFiles(dir,FFileNames,mf);
begin
dirs := FileList("",dir+ioFileseparator()+"*");
dirs := FileList("",dir+fiofs+"*");
for i,v in dirs do
begin
fn := v["FileName"] ;
if pos("D",v["Attr"]) and not( fn in array(".","..")) then
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+ioFileseparator()+fn,FFileNames,mf);
ParserFiles(dir+fiofs+fn,FFileNames,mf);
end
end
dirs := FileList("",dir+ioFileseparator()+"*.tsf");
for i,v in dirs do
begin
if not(pos("D",v["Attr"])) then
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);
d := ReadParseredFileTime(fn);
FFileNames[fn] := pfn;
//echo "\r\n",tostn(fn),"===",v["Attr"];
if ifstring(d) and d=fl[0,"Time"] then
begin
//FCacheS[fn]
ReadParseredFile(fn);
continue;
end
if readFile(rwRaw(),"",pfn,0,sz,rdd) then
begin
if rdd then
begin
if errtslcode(rdd) then
begin
r := array();
rdd := "";
end else
r := tsl_tokenizeex_2_(rdd,1);
end else
begin
r := array();
rdd :="";
end
r["fullpath"] := pfn;
r["name"] := fn;
if (aid := pos("@",fn)) then
begin
r["nspace"] := fn[aid:(length(fn)-4)];
r["name"] := fn[1:(aid-1)];
//echo "\r\nfn:",fn[aid:];
end else r["nspace"] := "";
r["msg"] := getmsgd_Crc32(rdd);//GetMsgdigest(rdd,0);
cls := array();
ScriptDelBlocks(r["blcks"],str2array(rdd,"\n"),cls);
r["blcks"] := cls;
if not ifarray(FCacheS) then FCacheS := array();
FCacheS[fn] := r;//new tparserdobject( r);
FFilePaths[fn] := pfn;
WriteParseredFile(fn,r,fl[0,"Time"]);
end
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,10 +2019,10 @@ 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
end
function ReadParseredFile(n); //读取解析的文件
begin
if FCacheDir then
@ -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);