| 41 |
{ Public 宣言 } |
{ Public 宣言 } |
| 42 |
function AddAnchorTag(s: string): string; |
function AddAnchorTag(s: string): string; |
| 43 |
function LoadFromSkin(fileName: string; ThreadItem: TThreadItem; SizeByte: Integer): string; |
function LoadFromSkin(fileName: string; ThreadItem: TThreadItem; SizeByte: Integer): string; |
| 44 |
function SkinedRes(skin: string; Res: TResRec; No: string): string; |
function SkinedRes(const skin: string; Res: TResRec; const No: string): string; |
| 45 |
function ConvRes(const Body, Bbs, Key, ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue : string; DatToHTML: boolean = false): string; overload; |
function ConvRes(const Body, Bbs, Key, ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue : string; DatToHTML: boolean = false): string; overload; |
| 46 |
// function ConvRes(const Body, Bbs, Key, ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue, FullURL : string): string; overload; |
// function ConvRes(const Body, Bbs, Key, ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue, FullURL : string): string; overload; |
| 47 |
procedure CreateHTML2(doc: Variant; ThreadItem: TThreadItem; var sTitle: string); |
procedure CreateHTML2(doc: Variant; ThreadItem: TThreadItem; var sTitle: string); |
| 156 |
|
|
| 157 |
// レスの値を置換する |
// レスの値を置換する |
| 158 |
function THTMLCreate.SkinedRes( |
function THTMLCreate.SkinedRes( |
| 159 |
skin: string; |
const skin: string; |
| 160 |
Res: TResRec; |
Res: TResRec; |
| 161 |
No: string |
const No: string |
| 162 |
): string; |
): string; |
| 163 |
|
const |
| 164 |
|
FORMT_NAME = '<b>%s</b>'; |
| 165 |
|
FORMT_NUM = '<a href="menu:%s" name="%s">%s</a>'; |
| 166 |
|
FORMT_MAILNAME = '<a href="mailto:%s"><b>%s</b></a>'; |
| 167 |
var |
var |
| 168 |
spamminess : Extended; |
spamminess : Extended; |
| 169 |
|
{$IFDEF SPAM_FILTER_ENABLED} |
| 170 |
wordCount : TWordCount; |
wordCount : TWordCount; |
| 171 |
|
{$ENDIF} |
| 172 |
begin |
begin |
| 173 |
|
{$IFDEF SPAM_FILTER_ENABLED} |
| 174 |
wordCount := TWordCount.Create; |
wordCount := TWordCount.Create; |
| 175 |
try |
try |
| 176 |
spamminess := Floor( GikoSys.SpamParse( |
spamminess := Floor( GikoSys.SpamParse( |
| 177 |
Res.FName + '<>' + Res.FMailTo + '<>' + Res.FBody, wordCount ) * 100 ); |
Res.FName + '<>' + Res.FMailTo + '<>' + Res.FBody, wordCount ) * 100 ); |
| 178 |
|
{$ELSE} |
| 179 |
Skin := CustomStringReplace( Skin, '<NUMBER/>', |
spamminess := 0; |
| 180 |
Format('<a href="menu:%s" name="%s">%s</a>', [No, No, No])); |
{$ENDIF} |
| 181 |
Skin := CustomStringReplace( Skin, '<PLAINNUMBER/>', No); |
Result := CustomStringReplace( Skin, '<SPAMMINESS/>', FloatToStr( spamminess ) ); |
| 182 |
Skin := CustomStringReplace( Skin, '<NAME/>', '<b>' + Res.FName + '</b>'); |
Result := CustomStringReplace( Result, '<NONSPAMMINESS/>', FloatToStr( 100 - spamminess ) ); |
| 183 |
Skin := CustomStringReplace( Skin, '<MAILNAME/>', |
Result := CustomStringReplace( Result, '<MAIL/>', Res.FMailTo); |
| 184 |
Format('<a href="mailto:%s"><b>%s</b></a>',[Res.FMailTo, Res.FName])); |
Result := CustomStringReplace( Result, '<DATE/>', Res.FDateTime); |
| 185 |
Skin := CustomStringReplace( Skin, '<MAIL/>', Res.FMailTo); |
Result := CustomStringReplace( Result, '<PLAINNUMBER/>', No); |
| 186 |
Skin := CustomStringReplace( Skin, '<DATE/>', Res.FDateTime); |
Result := CustomStringReplace( Result, '<NAME/>', |
| 187 |
Skin := CustomStringReplace( Skin, '<MESSAGE/>', Res.FBody); |
Format(FORMT_NAME, [Res.FName])); |
| 188 |
Skin := CustomStringReplace( Skin, '<SPAMMINESS/>', FloatToStr( spamminess ) ); |
Result := CustomStringReplace( Result, '<NUMBER/>', |
| 189 |
Skin := CustomStringReplace( Skin, '<NONSPAMMINESS/>', FloatToStr( 100 - spamminess ) ); |
Format(FORMT_NUM, [No, No, No])); |
| 190 |
|
Result := CustomStringReplace( Result, '<MAILNAME/>', |
| 191 |
|
Format(FORMT_MAILNAME,[Res.FMailTo, Res.FName])); |
| 192 |
|
Result := CustomStringReplace( Result, '<MESSAGE/>', Res.FBody); |
| 193 |
//----- かちゅ〜しゃ互換用。コメントアウトしてもよし |
//----- かちゅ〜しゃ互換用。コメントアウトしてもよし |
| 194 |
if GikoSys.Setting.UseKatjushaType then begin |
if GikoSys.Setting.UseKatjushaType then begin |
| 195 |
Skin := CustomStringReplace( Skin, '&NUMBER', |
Result := CustomStringReplace( Result, '&NUMBER', |
| 196 |
'<a href="menu:' + No + '" name="' + No + '">' + No + '</a>'); |
'<a href="menu:' + No + '" name="' + No + '">' + No + '</a>'); |
| 197 |
Skin := CustomStringReplace( Skin, '&PLAINNUMBER', No); |
Result := CustomStringReplace( Result, '&PLAINNUMBER', No); |
| 198 |
Skin := CustomStringReplace( Skin, '&NAME', '<b>' + Res.FName + '</b>'); |
Result := CustomStringReplace( Result, '&NAME', '<b>' + Res.FName + '</b>'); |
| 199 |
Skin := CustomStringReplace( Skin, '&MAILNAME', |
Result := CustomStringReplace( Result, '&MAILNAME', |
| 200 |
'<a href="mailto:' + Res.FMailTo + '"><b>' + Res.FName + '</b></a>'); |
'<a href="mailto:' + Res.FMailTo + '"><b>' + Res.FName + '</b></a>'); |
| 201 |
Skin := CustomStringReplace( Skin, '&MAIL', Res.FMailTo); |
Result := CustomStringReplace( Result, '&MAIL', Res.FMailTo); |
| 202 |
Skin := CustomStringReplace( Skin, '&DATE', Res.FDateTime); |
Result := CustomStringReplace( Result, '&DATE', Res.FDateTime); |
| 203 |
Skin := CustomStringReplace( Skin, '&MESSAGE', Res.FBody); |
Result := CustomStringReplace( Result, '&MESSAGE', Res.FBody); |
| 204 |
Skin := CustomStringReplace( Skin, '&SPAMMINESS', FloatToStr( spamminess ) ); |
Result := CustomStringReplace( Result, '&SPAMMINESS', FloatToStr( spamminess ) ); |
| 205 |
Skin := CustomStringReplace( Skin, '&NONSPAMMINESS', FloatToStr( 100 - spamminess ) ); |
Result := CustomStringReplace( Result, '&NONSPAMMINESS', FloatToStr( 100 - spamminess ) ); |
| 206 |
end; |
end; |
| 207 |
//----- ここまで |
//----- ここまで |
| 208 |
|
{$IFDEF SPAM_FILTER_ENABLED} |
|
Result := Skin; |
|
| 209 |
finally |
finally |
| 210 |
wordCount.Free; |
wordCount.Free; |
| 211 |
end; |
end; |
| 212 |
|
{$ENDIF} |
| 213 |
|
|
| 214 |
end; |
end; |
| 215 |
(************************************************************************* |
(************************************************************************* |
| 574 |
doc.open; |
doc.open; |
| 575 |
// ヘッダ |
// ヘッダ |
| 576 |
doc.Write( boardPlugIn.GetHeader( DWORD( threadItem ), |
doc.Write( boardPlugIn.GetHeader( DWORD( threadItem ), |
| 577 |
'<style type="text/css">body {' + UserOptionalStyle + '}</style>' ) + #13#10 ); |
'<style type="text/css">body {' + UserOptionalStyle + '}</style>' )); |
| 578 |
doc.Write('<p id="idSearch"></p>'#13#10 ); |
doc.Write('<p id="idSearch"></p>'); |
| 579 |
|
|
| 580 |
for i := 0 to threadItem.Count - 1 do begin |
for i := 0 to threadItem.Count - 1 do begin |
| 581 |
// 1 は必ず表示 |
// 1 は必ず表示 |
| 599 |
try |
try |
| 600 |
if GikoSys.Setting.UseSkin then begin |
if GikoSys.Setting.UseSkin then begin |
| 601 |
if FileExists( GikoSys.GetSkinNewmarkFileName ) then |
if FileExists( GikoSys.GetSkinNewmarkFileName ) then |
| 602 |
doc.Write( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ) + #13#10 ) |
doc.Write( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size )) |
| 603 |
else |
else |
| 604 |
doc.Write( '<a name="new"></a>'#13#10 ); |
doc.Write( '<a name="new"></a>'); |
| 605 |
end else if GikoSys.Setting.UseCSS then begin |
end else if GikoSys.Setting.UseCSS then begin |
| 606 |
doc.Write('<a name="new"></a><div class="new">新着レス <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>'#13#10); |
doc.Write('<a name="new"></a><div class="new">新着レス <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>'); |
| 607 |
end else begin |
end else begin |
| 608 |
doc.Write('</dl>'); |
doc.Write('</dl>'); |
| 609 |
doc.Write('<a name="new"></a>'); |
doc.Write('<a name="new"></a>'); |
| 610 |
doc.Write('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>新着レス ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>'); |
doc.Write('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>新着レス ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>'); |
| 611 |
doc.Write('<dl>'#13#10); |
doc.Write('<dl>'); |
| 612 |
end; |
end; |
| 613 |
except |
except |
| 614 |
doc.Write( '<a name="new"></a>'#13#10); |
doc.Write( '<a name="new"></a>'); |
| 615 |
end; |
end; |
| 616 |
end; |
end; |
| 617 |
|
|
| 618 |
// レス |
// レス |
| 619 |
doc.Write( boardPlugIn.GetRes( DWORD( threadItem ), i + 1 ) + #13#10 ); |
doc.Write( boardPlugIn.GetRes( DWORD( threadItem ), i + 1 )); |
| 620 |
|
|
| 621 |
if ThreadItem.Kokomade = (i + 1) then begin |
if ThreadItem.Kokomade = (i + 1) then begin |
| 622 |
// ここまで読んだ |
// ここまで読んだ |
| 625 |
if FileExists( GikoSys.GetSkinBookmarkFileName ) then |
if FileExists( GikoSys.GetSkinBookmarkFileName ) then |
| 626 |
doc.Write( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ) + #13#10 ) |
doc.Write( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ) + #13#10 ) |
| 627 |
else |
else |
| 628 |
doc.Write( '<a name="koko"></a>'#13#10 ); |
doc.Write( '<a name="koko"></a>'); |
| 629 |
end else if GikoSys.Setting.UseCSS then begin |
end else if GikoSys.Setting.UseCSS then begin |
| 630 |
doc.Write('<a name="koko"></a><div class="koko">ココまで読んだ</div>'#13#10 ); |
doc.Write('<a name="koko"></a><div class="koko">ココまで読んだ</div>'); |
| 631 |
end else begin |
end else begin |
| 632 |
doc.Write('</dl>'); |
doc.Write('</dl>'); |
| 633 |
doc.Write('<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>ココまで読んだ</b></font></td></tr></table>'); |
doc.Write('<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>ココまで読んだ</b></font></td></tr></table>'); |
| 634 |
doc.Write('<dl>'#13#10 ); |
doc.Write('<dl>'); |
| 635 |
end; |
end; |
| 636 |
except |
except |
| 637 |
doc.Write( '<a name="koko"></a>'#13#10 ); |
doc.Write( '<a name="koko"></a>'); |
| 638 |
end; |
end; |
| 639 |
end; |
end; |
| 640 |
end; |
end; |
| 641 |
|
|
| 642 |
|
|
| 643 |
// スキン(フッタ) |
// スキン(フッタ) |
| 644 |
doc.Write( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' ) + #13#10 ); |
doc.Write( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' )); |
| 645 |
finally |
finally |
| 646 |
doc.Close; |
doc.Close; |
| 647 |
end; |
end; |
| 652 |
var |
var |
| 653 |
i: integer; |
i: integer; |
| 654 |
No: string; |
No: string; |
|
CSSFileName: string; |
|
| 655 |
NewReceiveNo: Integer; |
NewReceiveNo: Integer; |
| 656 |
Res: TResRec; |
Res: TResRec; |
| 657 |
UserOptionalStyle: string; |
UserOptionalStyle: string; |
| 660 |
SkinRes: string; |
SkinRes: string; |
| 661 |
strTmp : string; |
strTmp : string; |
| 662 |
ThreadName : string; |
ThreadName : string; |
|
function ReplaceRes( skin: string ): string; |
|
|
begin |
|
|
Result := SkinedRes( skin, Res, No ); |
|
|
end; |
|
| 663 |
begin |
begin |
| 664 |
NewReceiveNo := ThreadItem.NewReceive; |
NewReceiveNo := ThreadItem.NewReceive; |
| 665 |
// フォントやサイズの設定 |
// フォントやサイズの設定 |
| 666 |
UserOptionalStyle := GikoSys.SetUserOptionalStyle; |
UserOptionalStyle := GikoSys.SetUserOptionalStyle; |
|
CSSFileName := GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName; |
|
| 667 |
ThreadName := ChangeFileExt(ThreadItem.FileName, ''); |
ThreadName := ChangeFileExt(ThreadItem.FileName, ''); |
| 668 |
|
|
| 669 |
doc.open; |
doc.open; |
| 731 |
try |
try |
| 732 |
if NewReceiveNo <= (i + 1) then |
if NewReceiveNo <= (i + 1) then |
| 733 |
// 新着レス |
// 新着レス |
| 734 |
strTmp := ReplaceRes( SkinNewRes ) |
strTmp := SkinedRes(SkinNewRes, Res, No) //ReplaceRes( SkinNewRes ) |
| 735 |
else |
else |
| 736 |
// 通常のレス |
// 通常のレス |
| 737 |
strTmp := ReplaceRes( SkinRes ); |
strTmp := SkinedRes(SkinRes, Res, No); //ReplaceRes( SkinRes ); |
| 738 |
|
|
| 739 |
doc.Write( strTmp ); |
doc.Write( strTmp ); |
| 740 |
except |
except |
| 952 |
ReadList := TStringList.Create; |
ReadList := TStringList.Create; |
| 953 |
try |
try |
| 954 |
if ThreadItem.IsLogFile then begin |
if ThreadItem.IsLogFile then begin |
| 955 |
|
ReadList.BeginUpdate; |
| 956 |
FileName := ThreadItem.GetThreadFileName; |
FileName := ThreadItem.GetThreadFileName; |
| 957 |
ReadList.LoadFromFile(FileName); |
ReadList.LoadFromFile(FileName); |
| 958 |
|
ReadList.EndUpdate; |
| 959 |
GikoSys.FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG')); |
GikoSys.FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG')); |
| 960 |
GikoSys.FAbon.Execute(ReadList); // あぼ〜んして |
GikoSys.FAbon.Execute(ReadList); // あぼ〜んして |
| 961 |
GikoSys.FSelectResFilter.Execute(ReadList); //レスのフィルタリングをする |
GikoSys.FSelectResFilter.Execute(ReadList); //レスのフィルタリングをする |
| 976 |
end else begin |
end else begin |
| 977 |
CreateDefaultHTML(doc, ThreadItem, ReadList, sTitle); |
CreateDefaultHTML(doc, ThreadItem, ReadList, sTitle); |
| 978 |
end; |
end; |
| 979 |
|
|
| 980 |
finally |
finally |
| 981 |
ReadList.Free; |
ReadList.Free; |
| 982 |
end; |
end; |