{HttpApp,} YofUtils, {URLMon,} BoardGroup, {gzip,} {Dolib,}
{bmRegExp,} AbonUnit, MojuUtils, Setting,
ExternalBoardManager, ExternalBoardPlugInMain{,}
- {Sort,} ,GikoBayesian, HintWindow, ActiveX;
+ {Sort,} ,GikoBayesian, {HintWindow,} ActiveX, ResPopupBrowser;
type
function getNumberString(const str: String;var index :Integer; var dbCharlen: Boolean;
sLen :Integer): String;
function isOutsideRange(item: TThreadItem; index: Integer ): Boolean;
+ function getKeywordLink(item: TThreadItem): String;
+ function GetResString(index: Integer; const Line: String; PResLink : PResLinkRec): String;
public
{ Public \90é\8c¾ }
procedure AddAnchorTag(PRes: PResRec);
procedure CreateHTML2(Browser: TWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
procedure CreateHTML3(var html: TStringList; ThreadItem: TThreadItem; var sTitle: string);
//\83\8c\83X\83|\83b\83v\83A\83b\83v\82Ì\8dì\90¬
- procedure SetResPopupText(Hint :TResPopup; threadItem: TThreadItem; StNum, ToNum: Integer; Title, First: Boolean);
+ procedure SetResPopupText(Hint :TResPopupBrowser; threadItem: TThreadItem; StNum, ToNum: Integer; Title, First: Boolean);
//\83\8a\83\93\83N\82Ì\95¶\8e\9a\97ñ\82©\82ç\83\8c\83X\83|\83b\83v\83A\83b\83v\97p\82ÌURL\82É\95Ï\8a·\82·\82é
class function GetRespopupURL(AText, AThreadURL : string): string;
//\8ew\92è\82µ\82½\83p\83X\82É\83X\83L\83\93\82à\82µ\82\82ÍCSS\82Ì\83t\83@\83C\83\8b\82Ì\83R\83s\81[\82ð\8dì\82é
implementation
uses
- Trip, NGWordUnit;
+ Trip;
const
URL_CHAR: string = '0123456789'
if (Trim(ReadList[i]) <> '') then begin
DivideStrLine(ReadList[i], @Res);
- if (NGWordList.IsNG(@Res) = -1) then begin
- AddAnchorTag(@Res);
- ConvRes(@Res, @ResLink);
- Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
-
- if NewReceiveNo <= (i + 1) then
- // \90V\92\85\83\8c\83X
- html.Add(SkinedRes(SkinNewRes, @Res, IntToStr(i + 1)))
- else
- // \92Ê\8fí\82Ì\83\8c\83X
- html.Add(SkinedRes(SkinRes, @Res, IntToStr(i + 1)));
- end else begin
-{$IFDEF DEBUG}
- html.Add('<h4>\82 \82Ú\81`\82ñ</h4>');
-{$ENDIF}
- end;
+ AddAnchorTag(@Res);
+ ConvRes(@Res, @ResLink);
+ Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
+
+ if NewReceiveNo <= (i + 1) then
+ // \90V\92\85\83\8c\83X
+ html.Add(SkinedRes(SkinNewRes, @Res, IntToStr(i + 1)))
+ else
+ // \92Ê\8fí\82Ì\83\8c\83X
+ html.Add(SkinedRes(SkinRes, @Res, IntToStr(i + 1)));
end;
if ThreadItem.Kokomade = (i + 1) then begin
html.Add( KOKO_TAG );
end;
end;
-
+ html.Add(getKeywordLink(ThreadItem));
html.Add('<a name="bottom"></a>');
// \83X\83L\83\93(\83t\83b\83^)
html.Add( LoadFromSkin( GikoSys.GetSkinFooterFileName, ThreadItem, ThreadItem.Size ) );
if (Trim(ReadList[i]) <> '') then begin
No := IntToStr(i + 1);
DivideStrLine(ReadList[i], @Res);
- if (NGWordList.IsNG(@Res) = -1) then begin
- AddAnchorTag(@Res);
- ConvRes(@Res, @ResLink);
- Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
- if Res.FMailTo = '' then
- html.Add(Format(FORMAT_NOMAIL, [No, No, No, Res.FName, Res.FDateTime, Res.FBody]))
- else if GikoSys.Setting.ShowMail then
- html.Add(Format(FORMAT_SHOWMAIL, [No, No, No, Res.FMailTo, Res.FName, Res.FMailTo, Res.FDateTime, Res.FBody]))
- else
- html.Add(Format(FORMAT_NOSHOW, [No, No, No, Res.FMailTo, Res.FName, Res.FDateTime, Res.FBody]));
- end;
- end else begin
-{$IFDEF DEBUG}
- html.Add('<h4>\82 \82Ú\81`\82ñ</h4>');
-{$ENDIF}
+ AddAnchorTag(@Res);
+ ConvRes(@Res, @ResLink);
+ Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
+ if Res.FMailTo = '' then
+ html.Add(Format(FORMAT_NOMAIL, [No, No, No, Res.FName, Res.FDateTime, Res.FBody]))
+ else if GikoSys.Setting.ShowMail then
+ html.Add(Format(FORMAT_SHOWMAIL, [No, No, No, Res.FMailTo, Res.FName, Res.FMailTo, Res.FDateTime, Res.FBody]))
+ else
+ html.Add(Format(FORMAT_NOSHOW, [No, No, No, Res.FMailTo, Res.FName, Res.FDateTime, Res.FBody]));
end;
-
if ThreadItem.Kokomade = (i + 1) then begin
html.Add('<a name="koko"></a><div class="koko">\83R\83R\82Ü\82Å\93Ç\82ñ\82¾</div>');
end;
end;
-
+ html.Add(getKeywordLink(ThreadItem));
html.Add('<a name="bottom"></a>');
html.Add('<a name="last"></a>');
html.Add('</body></html>');
procedure THTMLCreate.CreateDefaultHTML (html:TBufferedWebBrowser; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
var
i: integer;
- No: string;
NewReceiveNo: Integer;
- Res: TResRec;
ThreadName: String;
ResLink : TResLinkRec;
begin
end;
if (Trim(ReadList[i]) <> '') then begin
- No := IntToStr(i + 1);
- DivideStrLine(ReadList[i], @Res);
-
- AddAnchorTag(@Res);
- ConvRes(@Res, @ResLink);
- Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
- if Res.FMailTo = '' then
- html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> \96¼\91O\81F<font color="forestgreen"><b> ' + Res.FName + ' </b></font> \93\8a\8de\93ú\81F <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10)
- else if GikoSys.Setting.ShowMail then
- html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> \96¼\91O\81F<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> [' + Res.FMailTo + '] \93\8a\8de\93ú\81F <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10)
- else
- html.Add('<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> \96¼\91O\81F<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> \93\8a\8de\93ú\81F <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10);
- end else begin
-{$IFDEF DEBUG}
- html.Add('<h4>\82 \82Ú\81`\82ñ</h4>');
-{$ENDIF}
+ html.Add(GetResString(i, ReadList[i], @ResLink));
end;
-
if ThreadItem.Kokomade = (i + 1) then begin
html.Add('</dl>');
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>\83R\83R\82Ü\82Å\93Ç\82ñ\82¾</b></font></td></tr></table>');
html.Add('<dl>');
end;
end;
+ html.Add(getKeywordLink(ThreadItem));
html.Add('</dl>'#13#10'<a name="bottom"></a>'#13#10'</body></html>');
end;
-
+function THTMLCreate.GetResString(index: Integer; const Line: String; PResLink : PResLinkRec): String;
+var
+ No : String;
+ Res: TResRec;
+begin
+ No := IntToStr(index + 1);
+ DivideStrLine(Line, @Res);
+ AddAnchorTag(@Res);
+ ConvRes(@Res, PResLink);
+ Res.FDateTime := AddBeProfileLink(Res.FDateTime, index + 1);
+ if Res.FMailTo = '' then
+ Result := '<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> \96¼\91O\81F<font color="forestgreen"><b> ' + Res.FName + ' </b></font> \93\8a\8de\93ú\81F <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10
+ else if GikoSys.Setting.ShowMail then
+ Result := '<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> \96¼\91O\81F<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> [' + Res.FMailTo + '] \93\8a\8de\93ú\81F <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10
+ else
+ Result := '<a name="' + No + '"></a><dt><a href="menu:' + No + '">' + No + '</a> \96¼\91O\81F<a href="mailto:' + Res.FMailTo + '"><b> ' + Res.FName + ' </B></a> \93\8a\8de\93ú\81F <span class="date">' + Res.FDateTime+ '</span><br><dd>' + Res.Fbody + ' <br><br><br>'#13#10;
+end;
procedure THTMLCreate.CreateHTML2(Browser: TWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
var
ReadList: TStringList;
ReadList.LoadFromFile(FileName);
ReadList.EndUpdate;
GikoSys.FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG'));
- //GikoSys.FAbon.Execute(ReadList); // \82 \82Ú\81`\82ñ\82µ\82Ä
+ GikoSys.FAbon.Execute(ReadList); // \82 \82Ú\81`\82ñ\82µ\82Ä
GikoSys.FSelectResFilter.Execute(ReadList); //\83\8c\83X\82Ì\83t\83B\83\8b\83^\83\8a\83\93\83O\82ð\82·\82é
if ThreadItem.Title = '' then begin
DivideStrLine(ReadList[0], @Res);
end;
end;
-procedure THTMLCreate.SetResPopupText(Hint : TResPopup; threadItem: TThreadItem; StNum, ToNum: Integer; Title, First: Boolean);
+procedure THTMLCreate.SetResPopupText(Hint : TResPopupBrowser; threadItem: TThreadItem; StNum, ToNum: Integer; Title, First: Boolean);
var
i: Integer;
tmp: string;
wkInt: Integer;
- Res: TResRec;
- Header: string;
- Body: string;
boardPlugIn : TBoardPlugIn;
+ Html: TStringList;
+ ResLink : TResLinkRec;
begin
+
+ Html := TStringList.Create;
try
if StNum > ToNum then begin
wkInt := StNum;
if StNum + MAX_POPUP_RES < ToNum then
ToNum := StNum + MAX_POPUP_RES;
+ Hint.Title := '';
+ Hint.RawDocument := '';
+ Hint.Thread := nil;
+
//\83^\83C\83g\83\8b\95\\8e¦
if Title then
if ThreadItem <> nil then
Hint.Title := ThreadItem.Title;
if ThreadItem <> nil then begin
+ Hint.Thread := ThreadItem;
+ ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
+ ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
//if ThreadItem.IsBoardPlugInAvailable then begin
if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
//===== \83v\83\89\83O\83C\83\93\82É\82æ\82é\95\\8e¦
//\82±\82±\82Å\82Q\82¿\82á\82ñ\82Ë\82é\82Ìdat\82Ì\8c`\8e®\82Å\82P\8ds\93Ç\82Ý\8d\9e\82ß\82ê\82Î¥¥¥\81B\81«\93Ç\82ß\82é\82æ\82¤\82É\82È\82Á\82½
tmp := boardPlugIn.GetDat( DWORD( threadItem ), i );
if (tmp <> '') And ( not GikoSys.FAbon.CheckAbonPopupRes(tmp) And( not GikoSys.FAbon.CheckIndividualAbonList(line))) then begin
- DivideStrLine(tmp, @Res);
- if (GikoSys.Setting.ShowMail = false) or (Length(res.FMailTo) = 0) then
- Header := IntToStr(Line) + ' \96¼\91O\81F ' + Res.FName + ' \93\8a\8de\93ú\81F ' + Res.FDateTime
- else
- Header := IntToStr(Line) + ' \96¼\91O\81F ' + Res.FName + ' [' + res.FMailTo + '] \93\8a\8de\93ú\81F ' + Res.FDateTime;
- Header := DeleteFontTag(Header);
- Header := CustomStringReplace(Header, '<br>', '',true);
-
- Body := CustomStringReplace(Res.FBody, '<br> ', #10,true);
- Body := CustomStringReplace(Body, '<br>', #10,true);
- Body := CustomStringReplace(Body, '</a>', '',true);
- Body := THTMLCreate.DeleteLink(Body);
- Body := CustomStringReplace(Body, '<', '<');
- Body := CustomStringReplace(Body, '>', '>');
- Body := CustomStringReplace(Body, '"', '"');
- Body := CustomStringReplace(Body, '&', '&');
- Body := CustomStringReplace(Body, ' ', ' ');
-
- Hint.Add(Header, Body);
+ Html.Add(GetResString(Line-1, tmp, @ResLink));
end;
end;
end else begin
FileName := ThreadItem.FilePath;
tmp := GikoSys.ReadThreadFile(FileName, Line);
if (tmp <> '') And ( not GikoSys.FAbon.CheckAbonPopupRes(tmp) And( not GikoSys.FAbon.CheckIndividualAbonList(line))) then begin
- DivideStrLine(tmp, @Res);
- if (GikoSys.Setting.ShowMail = false) or (Length(res.FMailTo) = 0) then
- Header := IntToStr(Line) + ' \96¼\91O\81F ' + Res.FName + ' \93\8a\8de\93ú\81F ' + Res.FDateTime
- else
- Header := IntToStr(Line) + ' \96¼\91O\81F ' + Res.FName + ' [' + res.FMailTo + '] \93\8a\8de\93ú\81F ' + Res.FDateTime;
-
- Body := DeleteFontTag(Res.FBody);
- Body := CustomStringReplace(Body, '<br> ', #10,true);
- Body := CustomStringReplace(Body, '<br>', #10,true);
- Body := CustomStringReplace(Body, '</a>', '',true);
- Body := THTMLCreate.DeleteLink(Body);
- Body := CustomStringReplace(Body, '<', '<');
- Body := CustomStringReplace(Body, '>', '>');
- Body := CustomStringReplace(Body, '"', '"');
- Body := CustomStringReplace(Body, '&', '&');
- Body := CustomStringReplace(Body, ' ', ' ');
- Hint.Add(Header, Body);
+ Html.Add(GetResString(Line-1, tmp, @ResLink));
end;
end;
end;
+ if (Html.Count > 0) then begin
+ Hint.RawDocument := '<DL>' + Html.Text + '</DL>';
+ end;
end;
finally
+ Html.Free;
end;
end;
end;
inherited;
end;
-
+//! \8aÖ\98A\83L\81[\83\8f\81[\83h\83\8a\83\93\83N\8fo\97Í
+function THTMLCreate.getKeywordLink(item: TThreadItem): String;
+const
+ PARA_URL = 'http://p2.2ch.io/getf.cgi?';
+begin
+ Result := '';
+ if (GikoSys.Setting.AddKeywordLink) and (item.ParentBoard.Is2ch) then begin
+ Result := '<p><span id="keyword"><a href="' + PARA_URL
+ + item.URL + '" target="_blank">\8aÖ\98A\83L\81[\83\8f\81[\83h</a></span></p>';
+ end;
+end;
initialization
HTMLCreater := THTMLCreate.Create;
finalization
if HTMLCreater <> nil then begin
- HTMLCreater.Free;
- HTMLCreater := nil;
+ FreeAndNil(HTMLCreater);
end;
end.