From d78a8a0f7cde0d2ef40c3f361c64240a1cd2ba78 Mon Sep 17 00:00:00 2001 From: JianjunLiu Date: Fri, 2 Sep 2022 10:06:33 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 优化tsl代码解析 --- designer/utslsynmemo.tsf | 135 ++++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 65 deletions(-) diff --git a/designer/utslsynmemo.tsf b/designer/utslsynmemo.tsf index 9bdfc13..20c0e43 100644 --- a/designer/utslsynmemo.tsf +++ b/designer/utslsynmemo.tsf @@ -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);