5 Windows,Messages, ShellAPI, SysUtils, Classes,StdCtrls,StrUtils;
13 Ftokens : array of array of string;
15 FRetStrings : TStringList;
16 FCutoffNum : Integer; //
\82±
\82Ì
\90\94\88È
\8fã
\98A
\91±
\82·
\82é
\93¯
\82¶
\89p
\8e\9a\82ðNG
\83\8f\81[
\83h
\82Æ
\82·
\82é
17 FDeleterlo : Boolean; //&rlo;
\82ð
\8dí
\82é
\82©
18 FReplaceul :Boolean ; //<ul>
\83^
\83O
\82ð<br>
\83^
\83O
\82É
\92u
\8a·
\82·
\82é
\82©
19 FReverse : Boolean ; //NG
\83\8f\81[
\83h
\82Å
\82Ì
\82 \82Ú
\81`
\82ñ
\82Ì
\8c\8b\89Ê
\82ð
\94½
\93]
\82³
\82¹
\82é
\82©
20 FAbonPopupRes : Boolean; //
\83\8c\83X
\83|
\83b
\83v
\83A
\83b
\83v
\82Ì
\8e\9e\82É
\82 \82Ú
\81[
\82ñ
\82·
\82é
\82©
21 FCreateNGwordFile : Boolean; //
\8ew
\92è
\82³
\82ê
\82½path
\82ÉNG
\83\8f\81[
\83htxt
\82ª
\96³
\82©
\82Á
\82½
\82Æ
\82«
\82É
\8e©
\93®
\93I
\82É
\90¶
\90¬
\82·
\82é
\82©
22 procedure SetTokens(index: integer ; argline:String);
26 constructor Create; //
\83R
\83\93\83X
\83g
\83\89\83N
\83^
27 destructor Destroy; override; //
\83f
\83X
\83g
\83\89\83N
\83^
28 property Deleterlo: Boolean read FDeleterlo write FDeleterlo default false;
29 property Replaceul: Boolean read FReplaceul write FReplaceul default false;
30 property Reverse: Boolean read FReverse write FReverse default false;
31 property CreateNGwordFile: Boolean read FCreateNGwordFile write FCreateNGwordFile;
32 property AbonString : String read FAbonString write FAbonString;
33 property AbonPopupRes : Boolean read FAbonPopupRes write FAbonPopupRes default false;
34 procedure Setroot(root :String);
35 function Getroot() : String;
36 procedure SetNGwordpath(path :String);
37 function GetNGwordpath() : String;
38 procedure SetCutoffNum(value : Integer);
39 function GetCutoffNum() : Integer;
40 function LoadFromNGwordFile(path :String) : Boolean;
41 function ReLoadFromNGwordFile() : Boolean;
42 function CheckAbonPopupRes(line : String) :Boolean;
43 function FindNGwords(line : String) : Boolean; //1
\83\89\83C
\83\93\82¸
\82Â
\97p
\81B
44 function Cutoff(line : String) : Boolean; //CutOff
\92l
\88È
\8fã
\8cÂ
\82Ì
\93¯
\82¶
\89p
\90\94\82ª
\95À
\82ñ
\82Å
\82¢
\82½
\82çtrue
45 //
\82 \82Ú
\81`
\82ñ
\8f\88\97\9d
46 function Execute(DestStrings : TStringList) : TStringList; overload;
47 function Execute(DestStrings : TStringList; NGwords : TStringList) : TStringList; overload;
48 function Execute(DestStrings : TStringList; NGwords : TStrings) : TStringList; overload;
50 function ExecuteFile(datfilepath : String; NGwordpath : String) : Boolean; overload;//DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
51 function ExecuteFile(datfilepath : String; resnum : Integer) : Boolean; overload; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
52 function ExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean; overload; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
53 function ReverseExecuteFile(datfilepath : String) : Boolean; overload; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
54 function ReverseExecuteFile(datfilepath : String; resnum : Integer) : Boolean; overload; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
55 function ReverseExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean; overload; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
57 procedure EditNGwords(); //NGword.txt
\82ð
\8aJ
\82
\81B
58 function ShowAllTokens() : String; //
\83f
\83o
\83b
\83O
\97p
65 constructor TAbon.Create;
68 FAbonString := ' <> <> <> <><>';
69 FRetStrings := TStringList.Create;
70 FCreateNGwordFile := true;
74 destructor TAbon.Destroy;
82 //root
\82ÍExe
\82Ì
\82¢
\82é
\83t
\83H
\83\8b\83_
83 procedure TAbon.Setroot(root :String);
87 function TAbon.Getroot() : String;
91 //NGwordpath
\82ÍNGword.txt
\82Ì
\83t
\83\8b\83p
\83X
92 procedure TAbon.SetNGwordpath(path :String);
95 LoadFromNGwordFile(FNGwordpath);
97 function TAbon.GetNGwordpath() : String;
99 Result := FNGwordpath;
101 //NGword
\83t
\83@
\83C
\83\8b\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
102 function TAbon.LoadFromNGwordFile(path :String) : boolean;
104 bufstl : TStringList;
107 if AnsiPos(':\',path) <> 2 then begin //
\83h
\83\89\83C
\83u
\82©
\82ç
\82Ì
\83t
\83\8b\83p
\83X
\82ª
\96³
\82¯
\82ê
\82Î
108 if Getroot() = '' then begin
109 Result := false; //root
\83p
\83X
\82ª
\90Ý
\92è
\82³
\82ê
\82Ä
\82È
\82¢
\82©
\82çfalse
112 if (Froot[Length(Froot)] = '\') and (path[1] = '\') then begin //
\90æ
\93ª
\82Ì\
\82ð
\8dí
\8f\9c
115 Insert( Getroot(), path , 1);//root
\83p
\83X
\82ð
\91}
\93ü
118 bufstl := TStringList.Create;
120 bufstl.LoadFromFile(path);
121 for i := bufstl.Count -1 downto 0 do begin
122 if bufstl.Strings[i] = '' then begin
126 SetLength(Ftokens,bufstl.Count);
127 for i := 0 to bufstl.Count -1 do begin
128 SetTokens(i , bufstl.Strings[i]);
132 if CreateNGwordFile = true then begin
133 bufstl.SaveToFile(path);
142 //NGwordpath
\82ª
\8aù
\82É
\90Ý
\92è
\82³
\82ê
\82Ä
\82¢
\82é
\82Æ
\82«
\82Ì
\83\8a\83\8d\81[
\83h
\97p
\8aÖ
\90\94
143 function TAbon.ReLoadFromNGwordFile() : boolean;
145 if GetNGwordpath() ='' then begin
148 Result := LoadFromNGwordFile( GetNGwordpath() );
152 //
\88ê
\8ds
\82Ì
\92\86\82Ì
\83g
\81[
\83N
\83\93\82ð
\90Ø
\82è
\95ª
\82¯
\82Ä
\83Z
\83b
\83g
153 procedure TAbon.SetTokens(index: integer ; argline : String);
156 bufstl : TStringList;
159 bufstl := TStringList.Create;
160 bufstl.Delimiter := #9; //
\8bæ
\90Ø
\82è
\8eq
\82ð
\81f
\83^
\83u
\81f
\82É
\90Ý
\92è
161 bufstl.DelimitedText := argline;
163 SetLength(Ftokens[index],ret);
164 for i := 0 to bufstl.Count - 1 do begin
165 Ftokens[index][i] := bufstl.Strings[i];
170 procedure TAbon.SetCutoffNum(value : Integer);
172 if value > 0 then begin
178 function TAbon.GetCutoffNum() : Integer;
180 Result := FCutoffNum;
182 function TAbon.ShowAllTokens() : String;
188 for i := 0 to High(Ftokens) do begin
189 for j := 0 to High(Ftokens[i]) do begin
190 ret := ret + Ftokens[i][j];
199 //****************************************************************************//
200 //NG
\83\8f\81[
\83h
\82ª
\8aÜ
\82Ü
\82ê
\82Ä
\82½
\82çtrue
\82ð
\95Ô
\82·
\81B
201 function TAbon.FindNGwords(line : String) : Boolean;
208 if AnsiPos(FAbonString,line) <> 1 then begin
209 for i := 0 to High(Ftokens) do begin
211 for j := 0 to High(Ftokens[i]) do begin
212 if AnsiPos(Ftokens[i][j],line) = 0 then begin
217 if hit = true then begin
225 //CutOff
\92l
\88È
\8fã
\8cÂ
\82Ì
\93¯
\82¶
\89p
\90\94\82ª
\95À
\82ñ
\82Å
\82¢
\82½
\82çtrue
226 function TAbon.Cutoff(line : String) : Boolean;
234 if FCutoffNum <> 0 then begin
235 for i := 65 to 90 do begin
237 buf := DupeString(sheed, FCutoffNum);
238 if AnsiContainsText(line, buf) = true then begin
246 //
\96\96\94ö
\82Ì
\83u
\81[
\83\8b\92l
\82Ítrue
\82¾
\82Æ
\81ANG
\83\8f\81[
\83h
\82ð
\8aÜ
\82Þ
\82à
\82Ì
\82¾
\82¯
\82ð
\95Ô
\82·
\81B
247 function TAbon.Execute(DestStrings : TStringList) : TStringList;
255 if Reverse = false then begin
256 for i:=0 to DestStrings.Count - 1 do begin
257 if FindNGwords(DestStrings.Strings[i]) = true then begin
258 FRetStrings.Append(FAbonString);
259 end else if FCutoffNum > 0 then begin
260 bufline := DestStrings.Strings[i];
261 for j := 0 to 2 do begin
262 Delete(bufline,1,Ansipos('<>',bufline)+1);
264 Delete(bufline,Ansipos('<>',bufline),Length(bufline)-Ansipos('<>',bufline)+1);
265 if Cutoff(bufline) = true then begin
266 FRetStrings.Append(FAbonString);
268 bufline := DestStrings.Strings[i];
269 if Deleterlo = true then begin
270 bufline := AnsiReplaceText( bufline,'&rlo;','' );
272 if Replaceul = true then begin
273 bufline := AnsiReplaceText( bufline,'<ul>','<br>' );
274 bufline := AnsiReplaceText( bufline,'</ul>','<br>' );
276 FRetStrings.Append(bufline);
279 bufline := DestStrings.Strings[i];
280 if Deleterlo = true then begin
281 bufline := AnsiReplaceText( bufline,'&rlo;','' );
283 if Replaceul = true then begin
284 bufline := AnsiReplaceText( bufline,'<ul>','<br>' );
285 bufline := AnsiReplaceText( bufline,'</ul>','<br>' );
287 FRetStrings.Append(bufline);
291 for i:=0 to DestStrings.Count - 1 do begin
292 if FindNGwords(DestStrings.Strings[i]) = false then begin
293 bufline := DestStrings.Strings[i];
294 for j := 0 to 2 do begin
295 Delete(bufline,1,Ansipos('<>',bufline)+1);
297 Delete(bufline,Ansipos('<>',bufline),Length(bufline)-Ansipos('<>',bufline)+1);
298 if Cutoff(bufline) = false then begin
299 FRetStrings.Append(FAbonString);
301 bufline := DestStrings.Strings[i];
302 if Deleterlo = true then begin
303 while AnsiPos('&rlo',bufline) <> 0 do begin
304 Delete(bufline,AnsiPos('&rlo',bufline),4);
307 if Replaceul = true then begin
308 bufline := AnsiReplaceText( bufline,'<ul>','<br>' );
309 bufline := AnsiReplaceText( bufline,'</ul>','<br>' );
311 FRetStrings.Append(bufline);
314 bufline := DestStrings.Strings[i];
315 if Deleterlo = true then begin
316 while AnsiPos('&rlo',bufline) <> 0 do begin
317 Delete(bufline,AnsiPos('&rlo',bufline),4);
320 if Replaceul = true then begin
321 bufline := AnsiReplaceText( bufline,'<ul>','<br>' );
322 bufline := AnsiReplaceText( bufline,'</ul>','<br>' );
324 FRetStrings.Append(bufline);
329 Result := FRetStrings;
332 function TAbon.Execute(DestStrings : TStringList; NGwords : TStringList) : TStringList;
336 SetLength(Ftokens,NGwords.Count);
337 for i := 0 to NGwords.Count -1 do begin
338 SetTokens(i , NGwords.Strings[i]);
340 Result := Execute(DestStrings);
343 function TAbon.Execute(DestStrings : TStringList; NGwords : TStrings) : TStringList;
348 buf := TStringList.Create;
349 buf.AddStrings(NGwords);
350 SetLength(Ftokens,buf.Count);
351 for i := 0 to buf.Count -1 do begin
352 SetTokens(i , buf.Strings[i]);
354 Result := Execute(DestStrings);
359 //****************************************************************************//
360 //DAT
\82ð
\92¼
\82É
\82¢
\82¶
\82é
\93z
\82ç===========================================================
361 //NG
\83\8f\81[
\83h
\82ð
\8aÜ
\82Þ
\83\8c\83X
\82Ì
\90æ
\93ª
\82É
\82 \82Ú
\81[
\82ñ
\82ð
\91}
\93ü
362 function TAbon.ExecuteFile(datfilepath : String; NGwordpath : String) : Boolean; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
364 datstl : TStringList;
368 datstl := TStringList.Create;
372 datstl.LoadFromFile(datfilepath);
373 for i := 0 to datstl.Count -1 do begin
374 if FindNGwords(datstl.Strings[i]) = true then begin
375 datstl.Strings[i] := FAbonString + datstl.Strings[i]
379 datstl.SaveToFile(datfilepath);
389 //
\8ew
\92è
\82³
\82ê
\82½
\83\8c\83X
\94Ô
\82Ì
\90æ
\93ª
\82É
\82 \82Ú
\81[
\82ñ
\91}
\93ü
390 function TAbon.ExecuteFile(datfilepath : String; resnum : Integer) : Boolean; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
392 datstl : TStringList;
396 datstl := TStringList.Create;
399 datstl.LoadFromFile(datfilepath);
400 if (resnum > 0) and (resnum <= datstl.Count) then begin
401 if AnsiPos(FAbonString, datstl.Strings[resnum-1]) <> 1 then begin
402 datstl.Strings[resnum-1] := FAbonString + datstl.Strings[resnum-1];
405 datstl.SaveToFile(datfilepath);
414 //firstres
\82©
\82çcount
\8cÂ
\82Ì
\83\8c\83X
\82Ì
\90æ
\93ª
\82É
\82 \82Ú
\81[
\82ñ
\91}
\93ü
415 function TAbon.ExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
417 datstl : TStringList;
419 endnum : Integer; //
\8fI
\82í
\82è
\82Ì
\83\8c\83X
\94Ô
423 datstl := TStringList.Create;
426 datstl.LoadFromFile(datfilepath);
427 if (firstres > 0) and (firstres <= datstl.Count) then begin
428 if firstres + count -1 > datstl.Count then begin
429 endnum := datstl.Count;
430 end else if count <= 0 then begin
431 endnum := firstres + 1;
433 endnum := firstres + count -1;
436 for i := firstres to endnum do begin
437 if AnsiPos(FAbonString, datstl.Strings[i-1]) <> 1 then begin
438 datstl.Strings[i-1] := FAbonString + datstl.Strings[i-1];
442 datstl.SaveToFile(datfilepath);
451 //DAT
\82ð
\92¼
\82É
\82¢
\82¶
\82é
\93z
\82ç==========
\82±
\82±
\82Ü
\82Å=========================================
453 //
\8c³
\82É
\96ß
\82·
\93z
\82ç==================================================================
454 function TAbon.ReverseExecuteFile(datfilepath : String) : Boolean; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
456 datstl : TStringList;
462 datstl := TStringList.Create;
465 datstl.LoadFromFile(datfilepath);
466 for i:=0 to datstl.Count -1 do begin
467 if AnsiPos(FAbonString, datstl.Strings[i]) = 1 then begin
468 buf := datstl.Strings[i];
469 Delete(buf,1,Length(FAbonString));
470 datstl.Strings[i] := buf;
473 datstl.SaveToFile(datfilepath);
483 function TAbon.ReverseExecuteFile(datfilepath : String; resnum : Integer) : Boolean; //DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
485 datstl : TStringList;
490 datstl := TStringList.Create;
493 datstl.LoadFromFile(datfilepath);
494 if (resnum > 0) and (resnum <= datstl.Count) then begin
495 if AnsiPos(FAbonString, datstl.Strings[resnum-1]) = 1 then begin
496 buf := datstl.Strings[resnum-1];
497 Delete(buf,1,Length(FAbonString));
498 datstl.Strings[resnum-1] := buf;
501 datstl.SaveToFile(datfilepath);
511 function TAbon.ReverseExecuteFile(datfilepath : String; firstres : Integer; count : Integer) : Boolean;//DAT
\83t
\83@
\83C
\83\8b\82ð
\92¼
\82É
\82¢
\82¶
\82é
513 datstl : TStringList;
515 endnum : Integer; //
\8fI
\82í
\82è
\82Ì
\83\8c\83X
\94Ô
520 datstl := TStringList.Create;
523 datstl.LoadFromFile(datfilepath);
524 if (firstres > 0) and (firstres <= datstl.Count) then begin
525 if firstres + count -1 > datstl.Count then begin
526 endnum := datstl.Count;
527 end else if count <= 0 then begin
528 endnum := firstres + 1;
530 endnum := firstres + count -1;
532 for i := firstres to endnum do begin
533 if AnsiPos(FAbonString, datstl.Strings[i-1]) = 1 then begin
534 buf := datstl.Strings[i-1];
535 Delete(buf,1,Length(FAbonString));
536 datstl.Strings[i-1] := buf;
540 datstl.SaveToFile(datfilepath);
549 //
\8c³
\82É
\96ß
\82·
\93z
\82ç=================
\82±
\82±
\82Ü
\82Å=========================================
550 //
\8c»
\8dÝ
\83Z
\83b
\83g
\82³
\82ê
\82Ä
\82¢
\82éNGword.txt
\82ð
\8aJ
\82
551 procedure TAbon.EditNGwords();
553 ShellExecute(0 ,nil,PChar(FNGwordpath),nil,nil,SW_SHOW);
555 function TAbon.CheckAbonPopupRes(line : String) :Boolean;
559 if FCutoffNum = 0 then begin
560 if AbonPopupRes = true then begin
561 Result := FindNGwords(line);
566 if AbonPopupRes = true then begin
567 Result := FindNGwords(line);
568 if Result = false then begin
569 for i := 0 to 2 do begin
570 Delete(line,1,Ansipos('<>',line)+1);
572 Delete(line,Ansipos('<>',line),Length(line)-Ansipos('<>',line)+1);
573 Result := Cutoff(line);