ギコナビ
Revision | e1e1871c0000b5cae6fb86519f383614af43cca6 (tree) |
---|---|
Zeit | 2007-02-13 01:06:36 |
Autor | h677 <h677> |
Commiter | h677 |
NGの処理を正規表現利用化にして、
ためしに組み込んでみた。
@@ -99,7 +99,7 @@ var | ||
99 | 99 | implementation |
100 | 100 | |
101 | 101 | uses |
102 | - Trip; | |
102 | + Trip, NGWordUnit; | |
103 | 103 | |
104 | 104 | const |
105 | 105 | URL_CHAR: string = '0123456789' |
@@ -771,16 +771,22 @@ begin | ||
771 | 771 | |
772 | 772 | if (Trim(ReadList[i]) <> '') then begin |
773 | 773 | DivideStrLine(ReadList[i], @Res); |
774 | - AddAnchorTag(@Res); | |
775 | - ConvRes(@Res, @ResLink); | |
776 | - Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1); | |
777 | - | |
778 | - if NewReceiveNo <= (i + 1) then | |
779 | - // V X | |
780 | - html.Add(SkinedRes(SkinNewRes, @Res, IntToStr(i + 1))) | |
781 | - else | |
782 | - // ÊíÌX | |
783 | - html.Add(SkinedRes(SkinRes, @Res, IntToStr(i + 1))); | |
774 | + if (NGWordList.IsNG(@Res) = -1) then begin | |
775 | + AddAnchorTag(@Res); | |
776 | + ConvRes(@Res, @ResLink); | |
777 | + Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1); | |
778 | + | |
779 | + if NewReceiveNo <= (i + 1) then | |
780 | + // V X | |
781 | + html.Add(SkinedRes(SkinNewRes, @Res, IntToStr(i + 1))) | |
782 | + else | |
783 | + // ÊíÌX | |
784 | + html.Add(SkinedRes(SkinRes, @Res, IntToStr(i + 1))); | |
785 | + end else begin | |
786 | +{$IFDEF DEBUG} | |
787 | + html.Add('<h4> Ú`ñ</h4>'); | |
788 | +{$ENDIF} | |
789 | + end; | |
784 | 790 | end; |
785 | 791 | |
786 | 792 | if ThreadItem.Kokomade = (i + 1) then begin |
@@ -858,16 +864,22 @@ begin | ||
858 | 864 | if (Trim(ReadList[i]) <> '') then begin |
859 | 865 | No := IntToStr(i + 1); |
860 | 866 | DivideStrLine(ReadList[i], @Res); |
861 | - AddAnchorTag(@Res); | |
862 | - ConvRes(@Res, @ResLink); | |
863 | - Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1); | |
864 | - if Res.FMailTo = '' then | |
865 | - html.Add(Format(FORMAT_NOMAIL, [No, No, No, Res.FName, Res.FDateTime, Res.FBody])) | |
866 | - else if GikoSys.Setting.ShowMail then | |
867 | - html.Add(Format(FORMAT_SHOWMAIL, [No, No, No, Res.FMailTo, Res.FName, Res.FMailTo, Res.FDateTime, Res.FBody])) | |
868 | - else | |
869 | - html.Add(Format(FORMAT_NOSHOW, [No, No, No, Res.FMailTo, Res.FName, Res.FDateTime, Res.FBody])); | |
870 | - end; | |
867 | + if (NGWordList.IsNG(@Res) = -1) then begin | |
868 | + AddAnchorTag(@Res); | |
869 | + ConvRes(@Res, @ResLink); | |
870 | + Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1); | |
871 | + if Res.FMailTo = '' then | |
872 | + html.Add(Format(FORMAT_NOMAIL, [No, No, No, Res.FName, Res.FDateTime, Res.FBody])) | |
873 | + else if GikoSys.Setting.ShowMail then | |
874 | + html.Add(Format(FORMAT_SHOWMAIL, [No, No, No, Res.FMailTo, Res.FName, Res.FMailTo, Res.FDateTime, Res.FBody])) | |
875 | + else | |
876 | + html.Add(Format(FORMAT_NOSHOW, [No, No, No, Res.FMailTo, Res.FName, Res.FDateTime, Res.FBody])); | |
877 | + end; | |
878 | + end else begin | |
879 | +{$IFDEF DEBUG} | |
880 | + html.Add('<h4> Ú`ñ</h4>'); | |
881 | +{$ENDIF} | |
882 | + end; | |
871 | 883 | |
872 | 884 | if ThreadItem.Kokomade = (i + 1) then begin |
873 | 885 | html.Add('<a name="koko"></a><div class="koko">RRÜÅÇñ¾</div>'); |
@@ -922,6 +934,7 @@ begin | ||
922 | 934 | if (Trim(ReadList[i]) <> '') then begin |
923 | 935 | No := IntToStr(i + 1); |
924 | 936 | DivideStrLine(ReadList[i], @Res); |
937 | + | |
925 | 938 | AddAnchorTag(@Res); |
926 | 939 | ConvRes(@Res, @ResLink); |
927 | 940 | Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1); |
@@ -931,7 +944,12 @@ begin | ||
931 | 944 | html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> ¼OF<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> [' + Res.FMailTo + '] eúF <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10) |
932 | 945 | else |
933 | 946 | html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> ¼OF<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> eúF <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10); |
934 | - end; | |
947 | + end else begin | |
948 | +{$IFDEF DEBUG} | |
949 | + html.Add('<h4> Ú`ñ</h4>'); | |
950 | +{$ENDIF} | |
951 | + end; | |
952 | + | |
935 | 953 | if ThreadItem.Kokomade = (i + 1) then begin |
936 | 954 | html.Add('</dl>'); |
937 | 955 | html.Add('<a name="koko"></a><table width="100%" bgcolor="#55AA55" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#77CC77" valign="middle"><font size="-1" color="#ffffff"><b>RRÜÅÇñ¾</b></font></td></tr></table>'); |
@@ -976,7 +994,7 @@ begin | ||
976 | 994 | ReadList.LoadFromFile(FileName); |
977 | 995 | ReadList.EndUpdate; |
978 | 996 | GikoSys.FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG')); |
979 | - GikoSys.FAbon.Execute(ReadList); // Ú`ñµÄ | |
997 | + //GikoSys.FAbon.Execute(ReadList); // Ú`ñµÄ | |
980 | 998 | GikoSys.FSelectResFilter.Execute(ReadList); //XÌtB^Oð·é |
981 | 999 | if ThreadItem.Title = '' then begin |
982 | 1000 | DivideStrLine(ReadList[0], @Res); |
@@ -13,7 +13,6 @@ object NGWordEditForm: TNGWordEditForm | ||
13 | 13 | Menu = MainMenu1 |
14 | 14 | OldCreateOrder = False |
15 | 15 | OnCreate = FormCreate |
16 | - OnDestroy = FormDestroy | |
17 | 16 | PixelsPerInch = 96 |
18 | 17 | TextHeight = 12 |
19 | 18 | object Panel1: TPanel |
@@ -158,6 +157,7 @@ object NGWordEditForm: TNGWordEditForm | ||
158 | 157 | Height = 25 |
159 | 158 | Caption = #22793#26356 |
160 | 159 | TabOrder = 0 |
160 | + OnClick = ModifiedNGButtonClick | |
161 | 161 | end |
162 | 162 | object AddNGButton: TButton |
163 | 163 | Left = 24 |
@@ -190,6 +190,7 @@ object NGWordEditForm: TNGWordEditForm | ||
190 | 190 | RowSelect = True |
191 | 191 | TabOrder = 2 |
192 | 192 | ViewStyle = vsReport |
193 | + OnSelectItem = GikoListView2SelectItem | |
193 | 194 | end |
194 | 195 | end |
195 | 196 | object MainMenu1: TMainMenu |
@@ -33,7 +33,6 @@ type | ||
33 | 33 | Save1: TMenuItem; |
34 | 34 | procedure Load1Click(Sender: TObject); |
35 | 35 | procedure Save1Click(Sender: TObject); |
36 | - procedure FormDestroy(Sender: TObject); | |
37 | 36 | procedure FormCreate(Sender: TObject); |
38 | 37 | procedure GikoListView1SelectItem(Sender: TObject; Item: TListItem; |
39 | 38 | Selected: Boolean); |
@@ -42,9 +41,11 @@ type | ||
42 | 41 | procedure AddButtonClick(Sender: TObject); |
43 | 42 | procedure DeleteButtonClick(Sender: TObject); |
44 | 43 | procedure ApplyButtonClick(Sender: TObject); |
44 | + procedure ModifiedNGButtonClick(Sender: TObject); | |
45 | + procedure GikoListView2SelectItem(Sender: TObject; Item: TListItem; | |
46 | + Selected: Boolean); | |
45 | 47 | private |
46 | 48 | { Private é¾ } |
47 | - FNGWordList : TNGWordList; | |
48 | 49 | function AddNGWord(ngWord: TNGWords): TListItem; |
49 | 50 | procedure AddWord(word: TNGWord); |
50 | 51 | public |
@@ -65,16 +66,20 @@ var | ||
65 | 66 | fname : String; |
66 | 67 | i: Integer; |
67 | 68 | begin |
68 | - fname := GikoSys.GetAppDir + 'ngwords.xml'; | |
69 | - if (FNGWordList <> nil) then begin | |
70 | - FNGWordList.Free; | |
71 | - end else begin | |
72 | - FNGWordList := TNGWordList.Create; | |
73 | - end; | |
74 | - FNGWordList.LoadFromFile(fname); | |
75 | - GikoListView1.Items.Clear; | |
76 | - for i :=0 to FNGWordList.Count - 1 do begin | |
77 | - AddNGWord(TNGWords(FNGWordList.Items[i])); | |
69 | + GikoListView2.Items.BeginUpdate; | |
70 | + GikoListView1.Items.BeginUpdate; | |
71 | + try | |
72 | + GikoListView2.Items.Clear; | |
73 | + GikoListView1.Items.Clear; | |
74 | + fname := GikoSys.GetAppDir + 'ngwords.xml'; | |
75 | + NGWordList.LoadFromFile(fname); | |
76 | + | |
77 | + for i :=0 to NGWordList.Count - 1 do begin | |
78 | + AddNGWord(TNGWords(NGWordList.Items[i])); | |
79 | + end; | |
80 | + finally | |
81 | + GikoListView1.Items.EndUpdate; | |
82 | + GikoListView2.Items.EndUpdate; | |
78 | 83 | end; |
79 | 84 | end; |
80 | 85 | function TNGWordEditForm.AddNGWord(ngWord: TNGWords): TListItem; |
@@ -90,23 +95,17 @@ end; | ||
90 | 95 | |
91 | 96 | procedure TNGWordEditForm.Save1Click(Sender: TObject); |
92 | 97 | begin |
93 | - if (FNGWordList <> nil) then begin | |
94 | - FNGWordList.SaveToFrile(GikoSys.GetAppDir + 'ngwords2.xml'); | |
95 | - end; | |
96 | -end; | |
97 | - | |
98 | -procedure TNGWordEditForm.FormDestroy(Sender: TObject); | |
99 | -begin | |
100 | - if (FNGWordList <> nil) then begin | |
101 | - FreeAndNil(FNGWordList); | |
98 | + if (NGWordList <> nil) then begin | |
99 | + NGWordList.SaveToFrile(GikoSys.GetAppDir + 'ngwords2.xml'); | |
102 | 100 | end; |
103 | 101 | end; |
104 | 102 | |
105 | 103 | procedure TNGWordEditForm.FormCreate(Sender: TObject); |
106 | 104 | var |
107 | 105 | column1,column2: TListColumn; |
106 | + i: Integer; | |
108 | 107 | begin |
109 | - GikoListView1.Columns.BeginUpdate; | |
108 | + GikoListView1.Columns.BeginUpdate; | |
110 | 109 | column1 := GikoListView1.Columns.Add; |
111 | 110 | column1.ImageIndex := -1; |
112 | 111 | column1.Caption := '§¾'; |
@@ -133,6 +132,11 @@ begin | ||
133 | 132 | column2.Width := 190; |
134 | 133 | GikoListView2.Columns.EndUpdate; |
135 | 134 | |
135 | + GikoListView1.Items.BeginUpdate; | |
136 | + for i :=0 to NGWordList.Count - 1 do begin | |
137 | + AddNGWord(TNGWords(NGWordList.Items[i])); | |
138 | + end; | |
139 | + GikoListView1.Items.EndUpdate; | |
136 | 140 | end; |
137 | 141 | // ãXgIðCxg |
138 | 142 | procedure TNGWordEditForm.GikoListView1SelectItem(Sender: TObject; |
@@ -227,9 +231,9 @@ procedure TNGWordEditForm.AddButtonClick(Sender: TObject); | ||
227 | 231 | var |
228 | 232 | ngWords: TNGWords; |
229 | 233 | begin |
230 | - if (FNGWordList <> nil) then begin | |
234 | + if (NGWordList <> nil) then begin | |
231 | 235 | ngWords := TNGWords.Create; |
232 | - FNGWordList.Add(ngWords); | |
236 | + NGWordList.Add(ngWords); | |
233 | 237 | GikoListView1.Selected := AddNGWord(ngWords); |
234 | 238 | GikoListView1.SetFocus; |
235 | 239 | end; |
@@ -241,8 +245,8 @@ var | ||
241 | 245 | begin |
242 | 246 | // »ÝIð³êÄ¢ésðæ¾·é |
243 | 247 | litem := GikoListView1.Selected; |
244 | - if (litem <> nil) and (FNGWordList <> nil) then begin | |
245 | - FNGWordList.Delte( TNGWords(litem.Data)); | |
248 | + if (litem <> nil) and (NGWordList <> nil) then begin | |
249 | + NGWordList.Delte( TNGWords(litem.Data)); | |
246 | 250 | GikoListView1.DeleteSelected; |
247 | 251 | end; |
248 | 252 | end; |
@@ -258,4 +262,43 @@ begin | ||
258 | 262 | end; |
259 | 263 | end; |
260 | 264 | |
265 | +procedure TNGWordEditForm.ModifiedNGButtonClick(Sender: TObject); | |
266 | +var | |
267 | + litem, litem2: TListItem; | |
268 | +begin | |
269 | + // »ÝIð³êÄ¢ésðæ¾·é | |
270 | + litem := GikoListView1.Selected; | |
271 | + if (litem <> nil) then begin | |
272 | + litem2 := GikoListView2.Selected; | |
273 | + if litem2 <> nil then begin | |
274 | + TNGWord(litem2.Data).NGType := TGikoNGType(ComboBox1.ItemIndex); | |
275 | + TNGWord(litem2.Data).Word := NGWordEdit.Text; | |
276 | + litem.SubItems.Clear; | |
277 | + litem.SubItems.Add(TNGWords(litem.Data).ToString); | |
278 | + | |
279 | + case Integer(TNGWord(litem2.Data).NGType) of | |
280 | + Integer(gntAll): litem2.Caption := 'S'; | |
281 | + Integer(gntName): litem2.Caption := '¼O'; | |
282 | + Integer(gntMail): litem2.Caption := '['; | |
283 | + Integer(gntDateId):litem2.Caption := 'útID'; | |
284 | + Integer(gntBody): litem2.Caption := '{¶'; | |
285 | + end; | |
286 | + litem2.SubItems.Clear; | |
287 | + litem2.SubItems.Add(TNGWord(litem2.Data).Word); | |
288 | + end; | |
289 | + end; | |
290 | +end; | |
291 | + | |
292 | +procedure TNGWordEditForm.GikoListView2SelectItem(Sender: TObject; | |
293 | + Item: TListItem; Selected: Boolean); | |
294 | +var | |
295 | + word : TNGWord; | |
296 | + i: Integer; | |
297 | +begin | |
298 | + if (Item <> nil) and (Item.Data <> nil) then begin | |
299 | + word := TNGWord(item.Data); | |
300 | + ComboBox1.ItemIndex := Ord(word.NGType); | |
301 | + NGWordEdit.Text := word.Word; | |
302 | + end; | |
303 | +end; | |
261 | 304 | end. |
@@ -3,7 +3,7 @@ unit NGWordUnit; | ||
3 | 3 | interface |
4 | 4 | uses |
5 | 5 | Windows,Messages, ShellAPI, SysUtils, Classes,StdCtrls,StrUtils, |
6 | - GikoXMLDoc, GikoSystem; | |
6 | + GikoXMLDoc, GikoSystem, bmRegExp; | |
7 | 7 | |
8 | 8 | type |
9 | 9 | //XgÌ\¦ACeIð |
@@ -32,6 +32,7 @@ type | ||
32 | 32 | private |
33 | 33 | FRank : Integer; |
34 | 34 | FInvisible: Boolean; |
35 | + FAWKStr: TAWKStr; | |
35 | 36 | public |
36 | 37 | constructor Create; |
37 | 38 | procedure Free; |
@@ -41,6 +42,7 @@ type | ||
41 | 42 | function ToXMLString(): String; |
42 | 43 | function ToString(): String; |
43 | 44 | procedure Delete(word: TNGWord); overload; |
45 | + function IsNG(PRes : PResRec): Boolean; | |
44 | 46 | end; |
45 | 47 | |
46 | 48 | {\ |
@@ -53,10 +55,12 @@ type | ||
53 | 55 | procedure LoadFromFile(fileName: String); |
54 | 56 | procedure SaveToFrile(fileName: String); |
55 | 57 | procedure Delte(NGWords: TNGWords); overload; |
56 | - function IsNG(PRes : PResRec): Boolean; | |
58 | + function IsNG(PRes : PResRec): Integer; | |
57 | 59 | end; |
58 | 60 | |
59 | 61 | function CompareRank(Item1, Item2: Pointer): Integer; |
62 | +var | |
63 | + NGWordList: TNGWordList; | |
60 | 64 | |
61 | 65 | implementation |
62 | 66 |
@@ -76,6 +80,7 @@ end; | ||
76 | 80 | constructor TNGWords.Create; |
77 | 81 | begin |
78 | 82 | FRank := 0; |
83 | + FAWKStr := TAWKStr.Create(nil); | |
79 | 84 | end; |
80 | 85 | procedure TNGWords.Free; |
81 | 86 | var |
@@ -84,6 +89,7 @@ begin | ||
84 | 89 | for i := 0 to Count - 1 do begin |
85 | 90 | TObject(Items[i]).Free; |
86 | 91 | end; |
92 | + FAWKStr.Free; | |
87 | 93 | inherited Free; |
88 | 94 | end; |
89 | 95 | function TNGWords.ReadXMLElement(element :IXMLNode): Boolean; |
@@ -144,19 +150,66 @@ begin | ||
144 | 150 | end; |
145 | 151 | end; |
146 | 152 | end; |
153 | +function TNGWords.IsNG(PRes : PResRec): Boolean; | |
154 | +var | |
155 | + i, oLength: Integer; | |
156 | + RStart, RLength: Integer; | |
157 | + word: TNGWord; | |
158 | +begin | |
159 | + Result := True; | |
160 | + for i := 0 to Count - 1 do begin | |
161 | + word := TNGWord(Items[i]); | |
162 | + FAWKStr.RegExp := word.Word; | |
163 | + case Ord(word.FNGType) of | |
164 | + Ord(gntAll): | |
165 | + begin | |
166 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FTitle), | |
167 | + RStart, RLength) <> 0; | |
168 | + if Result then break; | |
169 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FMailTo), | |
170 | + RStart, RLength) <> 0; | |
171 | + if Result then break; | |
172 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FName), | |
173 | + RStart, RLength) <> 0; | |
174 | + if Result then break; | |
175 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FDateTime), | |
176 | + RStart, RLength) <> 0; | |
177 | + if Result then break; | |
178 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FBody), | |
179 | + RStart, RLength) <> 0; | |
180 | + end; | |
181 | + Ord(gntName): | |
182 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FName), | |
183 | + RStart, RLength) <> 0; | |
184 | + Ord(gntMail): | |
185 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FMailTo), | |
186 | + RStart, RLength) <> 0; | |
187 | + Ord(gntDateId): | |
188 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FDateTime), | |
189 | + RStart, RLength) <> 0; | |
190 | + Ord(gntBody): | |
191 | + Result := FAWKStr.Match(FAWKStr.ProcessEscSeq(PRes.FBody), | |
192 | + RStart, RLength) <> 0; | |
193 | + end; | |
194 | + if not Result then Exit; | |
195 | + end; | |
196 | +end; | |
197 | + | |
198 | + | |
147 | 199 | procedure TNGWord.ReadXMLElement(element :IXMLNode); |
148 | 200 | begin |
149 | - FRank := StrToIntDef(element.Attributes['rank'], | |
150 | - MaxInt); | |
151 | - FNGType := TGikoNGType(StrToIntDef( | |
152 | - Trim(element.Attributes['ngtype']), | |
153 | - Integer(gntAll))); | |
201 | + FRank := StrToIntDef(element.Attributes['rank'], | |
202 | + MaxInt); | |
203 | + FNGType := TGikoNGType(StrToIntDef( | |
204 | + Trim(element.Attributes['ngtype']), | |
205 | + Integer(gntAll))); | |
154 | 206 | |
155 | - FWord := Trim(element.Attributes['word']); | |
156 | - if FWord <> '' then begin | |
157 | - FWord := MojuUtils.UnSanitize( FWord ); | |
158 | - end; | |
207 | + FWord := Trim(element.Attributes['word']); | |
208 | + if FWord <> '' then begin | |
209 | + FWord := MojuUtils.UnSanitize( FWord ); | |
210 | + end; | |
159 | 211 | end; |
212 | + | |
160 | 213 | function TNGWord.ToXMLString(): String; |
161 | 214 | begin |
162 | 215 | Result := '<NGWord ' + |
@@ -255,13 +308,30 @@ begin | ||
255 | 308 | end; |
256 | 309 | end; |
257 | 310 | //! NGȏ |
258 | -function TNGWordList.IsNG(PRes : PResRec): Boolean; | |
311 | +function TNGWordList.IsNG(PRes : PResRec): Integer; | |
259 | 312 | var |
260 | 313 | i: Integer; |
314 | + tRes : TResRec; | |
261 | 315 | begin |
262 | - for i := 0 to Count - 1 do begin | |
263 | - // | |
316 | + Result := -1; | |
317 | + if Count > 0 then begin | |
318 | + for i := 0 to Count - 1 do begin | |
319 | + if (TNGWords(Items[i]).IsNG(PRes)) then begin | |
320 | + Result := i; | |
321 | + break; | |
322 | + end; | |
323 | + end; | |
264 | 324 | end; |
265 | 325 | end; |
266 | 326 | |
327 | +// VOgÌCX^X | |
328 | +initialization | |
329 | + NGWordList := TNGWordList.Create; | |
330 | + | |
331 | +finalization | |
332 | + if NGWordList <> nil then begin | |
333 | + NGWordList.Free; | |
334 | + NGWordList := nil; | |
335 | + end; | |
336 | + | |
267 | 337 | end. |