{HttpApp,} YofUtils, {URLMon,} BoardGroup, {gzip,} {Dolib,}
{bmRegExp,} AbonUnit, MojuUtils, Setting,
ExternalBoardManager, ExternalBoardPlugInMain{,}
- {Sort,} ,GikoBayesian, HintWindow, ActiveX;
+ {Sort,} ,GikoBayesian, {HintWindow,} ActiveX, ResPopupBrowser;
type
FKey : string;
end;
+ TBufferedWebBrowser = class(TStringList)
+ private
+ //! \8f\91\82«\8d\9e\82Þ\83u\83\89\83E\83U
+ FBrowser: TWebBrowser;
+ //! \89½\8ds\82Ü\82Å\82½\82ß\82é\82©\82Ì\83T\83C\83Y
+ FBuffSize: Integer;
+ //! \83u\83\89\83E\83U\82ÌIHTMLDocument2\83C\83\93\83^\83t\83F\81[\83X\82ð\95Û\8e\9d\82·\82é open\82©\82çclose\82Ì\8aÔ\82Å
+ FBrowserDoc: OleVariant;
+ public
+ constructor Create(Browser: TWebBrowser; BuffSize: Integer);
+ destructor Destory;
+ procedure Open;
+ procedure Close;
+ procedure Flush;
+ function Add(const S: string): Integer; override;
+ end;
THTMLCreate = class(TObject)
private
{ Private \90é\8c¾ }
pANCHORs, pANCHORe : PChar;
pCTAGLs, pCTAGLe : PChar;
pCTAGUs, pCTAGUe : PChar;
- pREF_MARKSs : array[0..9] of PChar;
- pREF_MARKSe : array[0..9] of PChar;
+ pREF_MARKSs : array[0..11] of PChar;
+ pREF_MARKSe : array[0..11] of PChar;
constructor Create;
function AddBeProfileLink(AID : string; ANum: Integer):string ;
- procedure CreateUsePluginHTML(html:TStringList; ThreadItem: TThreadItem; var sTitle: string);
- procedure CreateUseSKINHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList);
- procedure CreateUseCSSHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
- procedure CreateDefaultHTML (html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
+ procedure CreateUsePluginHTML(html:TBufferedWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
+ procedure CreateUseSKINHTML(html:TBufferedWebBrowser; ThreadItem: TThreadItem; ReadList: TStringList);
+ procedure CreateUseCSSHTML(html:TBufferedWebBrowser; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
+ procedure CreateDefaultHTML (html:TBufferedWebBrowser; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
procedure ConvertResAnchor(PRes: PResRec);
procedure separateNumber(var st: String; var et: String; const Text, Separator: String);
- function checkComma(const s : String; var j : Integer; var No : String) : boolean;
+ function checkComma(const s : String; var j : Integer) : boolean;
function addResAnchor(PAddRes: PResRec; PResLink : PResLinkRec; dat : boolean;
var s : String; j : Integer; const No: String) : string;
+ function appendResAnchor(PAddRes: PResRec; PResLink : PResLinkRec;
+ dat : boolean; var s : String) : string;
+ 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;
+ function IsImageExp(const Url: String): Boolean;
public
{ Public \90é\8c¾ }
procedure AddAnchorTag(PRes: PResRec);
function LoadFromSkin(fileName: string; ThreadItem: TThreadItem; SizeByte: Integer): string;
function SkinedRes(const skin: string; PRes: PResRec; const No: string): string;
procedure ConvRes( PRes : PResRec; PResLink : PResLinkRec; DatToHTML: boolean = false); overload;
- function ConvRes(const Body, Bbs, Key, ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue : string; DatToHTML: boolean = false): string; overload;
- procedure CreateHTML2(doc: IDispatch; ThreadItem: TThreadItem; var sTitle: string);
+ 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é
class procedure DivideStrLine(Line: string; PRes: PResRec);
//HTML\82©\82ç\83\8a\83\93\83N\83^\83O\82ð\8dí\8f\9c\82·\82é
class function DeleteLink(const s: string): string;
+ //HTML\82Ì\83{\83f\83B\82É\8b\96\82³\82ê\82é\95¶\8e\9a\97ñ\82É\92u\8a·\82·\82é
+ class function RepHtml(const s: string): string;
+ //\83\8c\83X\83G\83f\83B\83^\82Ì\83v\83\8c\83r\83\85\81[\97pHTML\82ð\8dì\90¬\82·\82é
+ class function CreatePreviewHTML(const Title: string; const No: string;
+ const Mail: string; const Namae: string; const Body: string ) : string;
end;
var
implementation
+uses
+ Trip;
+
const
URL_CHAR: string = '0123456789'
+ 'abcdefghijklmnopqrstuvwxyz'
CLOSE_TAGAL = '</a>';
CLOSE_TAGAU = '</A>';
RES_REF = '>>';
- REF_MARK: array[0..9] of string = ('http://', 'ttp://', 'tp://',
- 'ms-help://','p://', 'https://',
+ REF_MARK: array[0..11] of string = ('sssp://', 'http://', 'ttp://', 'tp://',
+ 'ms-help://','p://', 'https://', 'ttps://',
'www.', 'ftp://','news://','rtsp://');
constructor THTMLCreate.Create;
pCTAGLe := pCTAGLs + 4;
pCTAGUs := PChar(CLOSE_TAGAU);
pCTAGUe := pCTAGUs + 4;
- for j := 0 to 9 do begin
+ for j := 0 to 11 do begin
pREF_MARKSs[j] := PChar(REF_MARK[j]);
pREF_MARKSe[j] := pREF_MARKSs[j] + Length(REF_MARK[j]);
end;
*************************************************************************)
procedure THTMLCreate.AddAnchorTag(PRes: PResRec);
const
- _HEAD : array[0..9] of String =
- ('', 'h', 'ht', '', 'htt', '', 'http://', '', '', '');
+ _HEAD : array[0..11] of String =
+ ('', '', 'h', 'ht', '', 'htt', '', 'h', 'http://', '', '', '');
+ EMOTICONS: String = 'sssp://img.2ch.net/';
var
url: string;
href: string;
pp, pe : PChar;
s : String;
len : Integer;
+ urllen: Integer;
begin
s := PRes.FBody;
PRes.FBody := '';
pp := PChar(s);
pe := pp + Length(s);
- for j := 0 to 9 do begin
+ for j := 0 to 11 do begin
pos := AnsiStrPosEx(pp, pe, pREF_MARKSs[j], pREF_MARKSe[j]);
if pos <> nil then begin
tmp := pos - pp + 1;
if pos = nil then
b := Length(REF_MARK[idx2])
else
- b := pos - pp + 1;
+ b := pos - (pp + idx) + 1;
len := Length(PRes.FBody);
- SetLength(PRes.FBody, len + idx + b);
+ SetLength(PRes.FBody, len + idx + b );
Move(pp^, PRes.FBody[len + 1], idx + b);
Delete(s, 1, idx + b);
end else begin
if (AnsiStrPosEx(pURLCHARs, pURLCHARe, pp, pp + 1) = nil) then begin
url := Copy(s, 1, i - 1);
Delete(s, 1, i - 1);
- href := Format('%s%s', [_HEAD[idx2], url]);
- PRes.FBody
- := Format('%s<a href="%s" target="_blank">%s</a>', [PRes.FBody, href, url]);
+ urllen := Length(url);
+ if (AnsiPos(REF_MARK[0], url) = 1) then
+ href := 'http' + Copy(url, 5, urllen - 4)
+ else
+ href := Format('%s%s', [_HEAD[idx2], url]);
+
+ if (GikoSys.Setting.IconImageDisplay = True) and
+ (AnsiPos(EMOTICONS, url) = 1) and (IsImageExp(url) = True) then
+ PRes.FBody := Format('%s<img src="%s" title="%s">', [PRes.FBody, href, url])
+ else
+ PRes.FBody
+ := Format('%s<a href="%s" target="_blank">%s</a>', [PRes.FBody, href, url]);
Break;
end;
//\88ê\95¶\8e\9a\90i\82ß\82é\81B
until idx = MaxInt;
end;
+function THTMLCreate.IsImageExp(const Url: String): Boolean;
+var
+ urllen: Integer;
+begin
+ urllen := Length(Url);
+ if (AnsiPos('.gif', Url) = urllen - 3) then
+ Result := True
+ else if (AnsiPos('.png', Url) = urllen - 3) then
+ Result := True
+ else if (AnsiPos('.jpg', Url) = urllen - 3) then
+ Result := True
+ else if (AnsiPos('.jpeg', Url) = urllen - 4) then
+ Result := True
+ else
+ Result := False;
+end;
+
//\88ø\90\94\81AAID\81F\91Î\8fÛ\82Æ\82È\82é\93ú\95tID\95¶\8e\9a\97ñ\81AANum:\83\8c\83X\94Ô AURL\81F\82»\82Ì\83X\83\8c\83b\83h\82ÌURL
function THTMLCreate.AddBeProfileLink(AID : string; ANum: Integer):string ;
const
end else
Result := AID;
end;
+//! \83\8c\83X\83A\83\93\83J\81[\82Ì\83\8c\83X\94Ô\8d\86\82ð\95ª\8a\84\82·\82é
+// Text = '1-9' -> st = '1'; et = '9'
+// Text = '10' -> st = '10'; et = '10'
procedure THTMLCreate.separateNumber(var st: String; var et: String; const Text:String; const Separator: String);
var
p : Integer;
et := Text;
end;
end;
+//! \83\8c\83X\83A\83\93\83J\81[\82ª\8ew\82µ\82Ä\82¢\82é\83\8c\83X\94Ô\8d\86\82Ì\95¶\8e\9a\97ñ\82ð\8eæ\93¾\82·\82é
+function THTMLCreate.getNumberString(
+ const str: String;
+ var index :Integer; var dbCharlen: Boolean; sLen :Integer)
+: String;
+const
+ SN = '0123456789';
+var
+ ch : String;
+ sw : Boolean;
+begin
+ Result := '';
+ sw := False;
+ while (index <= sLen) do begin
+ if (ByteType(str, index) = mbSingleByte) then begin
+ //1byte\95¶\8e\9a
+ ch := str[index];
+ Inc(index);
+ dbCharlen := false;
+ end else begin
+ //2byte\95¶\8e\9a
+ ch := ZenToHan(Copy(str, index, 2));
+ Inc(index, 2);
+ dbCharlen := true;
+ end;
+
+ if System.Pos(ch, SN) > 0 then begin
+ Result := Result + ch;
+ end else if (ch = '-') then begin
+ if sw then break;
+ if Result = '' then break;
+ Result := Result + ch;
+ sw := true;
+ end else begin
+ break;
+ end;
+ end;
+end;
+
procedure THTMLCreate.ConvRes( PRes : PResRec; PResLink : PResLinkRec; DatToHTML: boolean = false);
const
GT = '>';
- SN = '0123456789';
//\8c\9f\8dõ\91Î\8fÛ\82Ì\95¶\8e\9a\97ñ\8cS
TOKEN : array[0..5] of string = (GT+GT, GT, '\81\84\81\84', '\81\84', '<a ', '<A ');
var
i : integer;
s : string;
- sw: boolean;
- cm: boolean;
No: string;
- oc : string;
pos, pmin : integer;
j : integer;
- ch : string;
db : boolean;
- len : integer;
rink : string;
-
- procedure getNumberString;
- begin
- while (j <= len) do begin
- if (ByteType(s, j) = mbSingleByte) then begin
- //1byte\95¶\8e\9a
- ch := s[j];
- Inc(j);
- db := false;
- end else begin
- //2byte\95¶\8e\9a
- ch := ZenToHan(Copy(s, j, 2));
- Inc(j, 2);
- db := true;
- end;
-
- if System.Pos(ch, SN) > 0 then begin
- No := No + ch;
- end else if (ch = '-') then begin
- if sw then break;
- if No = '' then break;
- No := No + ch;
- sw := true;
- end else begin
- break;
- end;
- end;
- end;
-
begin
//s \82É\96{\95¶\82ð\91S\95\94\93ü\82ê\82é
s := PRes.FBody;
end;
// \83\8c\83X\83A\83\93\83J\81[\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82½\82ç,\82ª\91±\82\8cÀ\82è\83A\83\93\83J\81[\82Æ\82µ\82Ä\88µ\82¤
if i <= 3 then begin
- No := '';
- j := 1;
- len := Length(s);
- cm := checkComma(s, j, No);
- len := Length(s);
- while cm do begin
- oc := '';
- No := '';
- sw := false;
- db := false;
- getNumberString;
- //\8fI\92[\82Ü\82Å\8ds\82Á\82Ä\82Ì\8fI\97¹\82©\83`\83F\83b\83N
- if j <= len then begin
- if db then j := j - 2
- else j := j - 1;
- end;
- addResAnchor(PRes, PResLink, DatToHTML, s, j, No);
- j := 1;
- len := Length(s);
- cm := checkComma(s, j, No);
- end;
+ appendResAnchor(PRes, PResLink, DatToHTML, s );
end;
end else begin
//\89½\82©\82µ\82ç\8c©\82Â\82©\82Á\82½\83p\83^\81[\83\93
j := Length(TOKEN[i]) + 1;
- oc := '';
- No := '';
- sw := false;
db := false;
- len := Length(s);
- getNumberString;
+ No := getNumberString(s, j, db, Length(s) );
//\8fI\92[\82Ü\82Å\8ds\82Á\82Ä\82Ì\8fI\97¹\82©\83`\83F\83b\83N
- if j <= len then begin
+ if j <= Length(s) then begin
if db then j := j - 2
else j := j - 1;
end;
addResAnchor(PRes, PResLink, DatToHTML, s, j, No);
+
+ // , \82ª\91±\82\8cÀ\82è\83\8c\83X\83A\83\93\83J\81[\82Æ\82µ\82Ä\8f\88\97\9d\82·\82é
+ appendResAnchor(PRes, PResLink, DatToHTML, s );
end;
end;
if Length(s) > 0 then begin
end;
function THTMLCreate.checkComma(
const s : String;
- var j : Integer;
- var No : String
+ var j : Integer
) : boolean;
var
bType : TMbcsByteType;
Inc(j)
else
Inc(j, 2);
- No := '';
end;
end;
end;
+function THTMLCreate.appendResAnchor(
+ PAddRes: PResRec; PResLink : PResLinkRec; dat : boolean;
+ var s : String) : string;
+var
+ No{, ch, oc}: String;
+ len, j : Integer;
+ cm, {sw,} db : Boolean;
+
+begin
+ No := '';
+ j := 1;
+ cm := checkComma(s, j);
+ len := Length(s);
+ while cm do begin
+ db := false;
+ No := getNumberString(s, j, db, len );
+
+ //\8fI\92[\82Ü\82Å\8ds\82Á\82Ä\82Ì\8fI\97¹\82©\83`\83F\83b\83N
+ if j <= len then begin
+ if db then j := j - 2
+ else j := j - 1;
+ end;
+ addResAnchor(PAddRes, PResLink, dat, s, j, No);
+ j := 1;
+ len := Length(s);
+ cm := checkComma(s, j);
+ end;
+end;
+
function THTMLCreate.addResAnchor(
PAddRes: PResRec; PResLink : PResLinkRec; dat : boolean;
var s : String; j : Integer; const No: String) : string;
Delete(s, 1, j - 1);
end;
-(*************************************************************************
- *
- * from HotZonu
- *************************************************************************)
-function THTMLCreate.ConvRes(const Body, Bbs, Key,
- ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue : string;
- DatToHTML: boolean = false): string;
-const
- GT = '>';
- SN = '0123456789';
- FORMAT_LINK = '<a href="../test/read.cgi?%s=%s&%s=%s&%s=%s&%s=%s&%s=%s" target="_blank">';
- //\8c\9f\8dõ\91Î\8fÛ\82Ì\95¶\8e\9a\97ñ\8cS
- TOKEN : array[0..5] of string = (GT+GT, GT, '\81\84\81\84', '\81\84', '<a ', '<A ');
-var
- i : integer;
- s : string;
- sw: boolean;
- cm: boolean;
- No: string;
- oc : string;
- pos, pmin : integer;
- j : integer;
- ch : string;
- db : boolean;
- len : integer;
- rink : string;
- function addResAnchor(const Left :string) : string;
- var
- st,et : string;
- begin
- //\8fI\92[\82Ü\82Å\8ds\82Á\82Ä\82Ì\8fI\97¹\82©\83`\83F\83b\83N
- if j <= len then begin
- if db then j := j - 2
- else j := j - 1;
- end;
- //\89½\82à\90\94\8e\9a\82ª\8c©\82Â\82©\82ç\82È\82¢\82Æ\82«
- if No = '' then begin
- Result := Left + Copy(s, 1, j - 1);
- end else begin
- separateNumber(st, et, No, '-');
-
- if not DatToHTML then begin
- Result := Left + Format(FORMAT_LINK,
- [ParamBBS, Bbs, ParamKey, Key, ParamStart, st, ParamTo, et, ParamNoFirst, ParamTrue]);
- end else begin
- Result := Left + Format('<a href="#%s">', [st]);
- end;
- Result := Result + Copy(s, 1, j - 1) + '</a>';
- end;
- Delete(s, 1, j - 1);
- end;
-
- procedure getNumberString;
- begin
- while (j <= len) do begin
- if (ByteType(s, j) = mbSingleByte) then begin
- //1byte\95¶\8e\9a
- ch := s[j];
- Inc(j);
- db := false;
- end else begin
- //2byte\95¶\8e\9a
- ch := ZenToHan(Copy(s, j, 2));
- Inc(j, 2);
- db := true;
- end;
-
- if System.Pos(ch, SN) > 0 then begin
- No := No + ch;
- end else if (ch = '-') then begin
- if sw then break;
- if No = '' then break;
- No := No + ch;
- sw := true;
- end else begin
- break;
- end;
- end;
- end;
-
- function checkComma : boolean;
- begin
- j := 1;
- len := Length(s);
- if ((len > 0) and (s[j] = ',')) or ((len > 1) and (ZenToHan(Copy(s, j ,2)) = ',')) then begin
- Result := true;
- if (ByteType(s, j) = mbSingleByte) then
- Inc(j)
- else
- Inc(j, 2);
- No := '';
- end else begin
- Result := false;
- end;
- end;
-begin
- //s \82É\96{\95¶\82ð\91S\95\94\93ü\82ê\82é
- s := Body;
- //\8c\8b\89Ê\82ð\83N\83\8a\83A
- Result := '';
-
- //
- while Length(s) > 2 do begin
- pmin := Length(s) + 1;
- i := Length(token);
- for j := 0 to 5 do begin
- pos := AnsiPos(TOKEN[j], s);
- if pos <> 0 then begin
- if pos < pmin then begin
- //\82Ç\82ê\82Å\83q\83b\83g\82µ\82½\82©\95Û\91¶
- i := j;
- //\8dÅ\8f¬\92l\82ð\8dX\90V
- pmin := pos;
- end;
- end;
- end;
-
- //\83q\83b\83g\82µ\82½\95¶\8e\9a\97ñ\82Ì\88ê\82Â\8eè\91O\82Ü\82Å\8c\8b\89Ê\82É\83R\83s\81[
- Result := Result + Copy(s, 1, pmin - 1);
- Delete(s, 1, pmin - 1);
-
- if i = 6 then begin
- //\83q\83b\83g\82È\82µ
- end else if (i = 4) or (i = 5) then begin
- //'<a ' or '<A' \82Å\83q\83b\83g '</a>' or '</A>' \82Ü\82Å\83R\83s\81[
- pmin := AnsiPos('</a>' , s);
- pos := AnsiPos('</A>' , s);
- if (pmin <> 0) and (pos <> 0) then begin
- if (pmin > pos) then begin
- pmin := pos;
- end;
- end else if (pos <> 0) then begin
- pmin := pos;
- end;
- rink := Copy(s, 1, pmin + 3);
- Result := Result + rink;
- Delete(s, 1, pmin + 3);
-
- pmin := Length(rink);
- i := Length(TOKEN);
- for j := 0 to 3 do begin
- pos := AnsiPos(TOKEN[j], rink);
- if pos <> 0 then begin
- if pos < pmin then begin
- //\82Ç\82ê\82Å\83q\83b\83g\82µ\82½\82©\95Û\91¶
- i := j;
- //\8dÅ\8f¬\92l\82ð\8dX\90V
- pmin := pos;
- end;
- end;
- end;
- // \83\8c\83X\83A\83\93\83J\81[\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82½\82ç,\82ª\91±\82\8cÀ\82è\83A\83\93\83J\81[\82Æ\82µ\82Ä\88µ\82¤
- if i <= 3 then begin
- No := '';
- cm := checkComma;
- len := Length(s);
- while cm do begin
- oc := '';
- No := '';
- sw := false;
- db := false;
- getNumberString;
- Result := addResAnchor(Result);
- cm := checkComma;
- end;
- end;
- end else begin
- //\89½\82©\82µ\82ç\8c©\82Â\82©\82Á\82½\83p\83^\81[\83\93
- j := Length(TOKEN[i]) + 1;
- oc := '';
- No := '';
- sw := false;
- db := false;
- len := Length(s);
- getNumberString;
- Result := addResAnchor(Result);
- end;
- end;
- Result := Result + s;
-end;
procedure THTMLCreate.ConvertResAnchor(PRes: PResRec);
const
_END: string = '&END=';
var
i, j, k: Integer;
+ hpos, qpos : Integer;
tmp: string;
res: string;
begin
end else begin
k := LastDelimiter('/', tmp);
Delete(tmp, 1, k);
- if AnsiPos('-', tmp) < AnsiPos('"', tmp) then
- Delete(tmp, AnsiPos('-', tmp), Length(tmp))
- else
- Delete(tmp, AnsiPos('"', tmp), Length(tmp));
+ hpos := AnsiPos('-', tmp);
+ qpos := AnsiPos('"', tmp);
+ if ( (hpos > 0) and (qpos > 0) ) then begin
+ if ( qpos < hpos ) then begin
+ Delete(tmp, qpos, Length(tmp));
+ end else begin
+ Delete(tmp, hpos, Length(tmp));
+ end;
+ end else begin
+ if ( qpos > 0 ) then begin
+ Delete(tmp, qpos, Length(tmp));
+ end else if ( qpos > 0 ) then begin
+ Delete(tmp, hpos, Length(tmp));
+ end;
+ end;
PRes.FBody := PRes.FBody + '<a href="#' + tmp + '">';
end;
PRes.FBody := PRes.FBody + res;
end;
-
//Plugin\82ð\97\98\97p\82·\82éBoard\82Ì\83X\83\8c\83b\83h\82ÌHTML\82ð\8dì\90¬\82µ\82Ädoc\82É\8f\91\82«\8d\9e\82Þ
-procedure THTMLCreate.CreateUsePluginHTML(html:TStringList; ThreadItem: TThreadItem; var sTitle: string);
+procedure THTMLCreate.CreateUsePluginHTML(html:TBufferedWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
var
i: integer;
NewReceiveNo: Integer;
NewReceiveNo := ThreadItem.NewReceive;
// \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
UserOptionalStyle := GikoSys.SetUserOptionalStyle;
- try
-// doc.open;
- // \83w\83b\83_
- html.add(boardPlugIn.GetHeader( DWORD( threadItem ),
- '<style type="text/css">body {' + UserOptionalStyle + '}</style>' ));
- html.Add('<p id="idSearch"></p>');
-
- for i := 0 to threadItem.Count - 1 do begin
- // 1 \82Í\95K\82¸\95\\8e¦
- if i <> 0 then begin
- // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
- case GikoSys.ResRange of
- Ord( grrKoko ):
- if ThreadItem.Kokomade > (i + 1) then
- Continue;
- Ord( grrNew ):
- if NewReceiveNo > (i + 1) then
- Continue;
- 10..65535:
- if (threadItem.Count - i) > GikoSys.ResRange then
- Continue;
- end;
- end;
+ html.add(boardPlugIn.GetHeader( DWORD( threadItem ),
+ '<style type="text/css">body {' + UserOptionalStyle + '}</style>' ));
+ html.Add('<p id="idSearch"></p>');
+ html.Flush;
+
+ for i := 0 to threadItem.Count - 1 do begin
+ // 1 \82Í\95K\82¸\95\\8e¦
+ if i <> 0 then begin
+ // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
+ if (isOutsideRange(ThreadItem, i)) then begin
+ Continue;
+ end;
+ end;
- // \90V\92\85\83}\81[\83N
- if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
- try
- if GikoSys.Setting.UseSkin then begin
- if FileExists( GikoSys.GetSkinNewmarkFileName ) then
- html.Add( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ))
- else
- html.Add( '<a name="new"></a>');
- end else if GikoSys.Setting.UseCSS then begin
- html.Add('<a name="new"></a><div class="new">\90V\92\85\83\8c\83X <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>');
- end else begin
- html.Add('</dl>');
- html.Add('<a name="new"></a>');
- html.Add('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>\90V\92\85\83\8c\83X ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>');
- html.Add('<dl>');
- end;
- except
- html.Add( '<a name="new"></a>');
+ // \90V\92\85\83}\81[\83N
+ if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
+ try
+ if GikoSys.Setting.UseSkin then begin
+ if FileExists( GikoSys.GetSkinNewmarkFileName ) then
+ html.Add( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ))
+ else
+ html.Add( '<a name="new"></a>');
+ end else if GikoSys.Setting.UseCSS then begin
+ html.Add('<a name="new"></a><div class="new">\90V\92\85\83\8c\83X <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>');
+ end else begin
+ html.Add('</dl>');
+ html.Add('<a name="new"></a>');
+ html.Add('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>\90V\92\85\83\8c\83X ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>');
+ html.Add('<dl>');
end;
+ except
+ html.Add( '<a name="new"></a>');
end;
+ end;
- // \83\8c\83X
- html.Add( boardPlugIn.GetRes( DWORD( threadItem ), i + 1 ));
+ // \83\8c\83X
+ html.Add( boardPlugIn.GetRes( DWORD( threadItem ), i + 1 ));
- if ThreadItem.Kokomade = (i + 1) then begin
- // \82±\82±\82Ü\82Å\93Ç\82ñ\82¾
- try
- if GikoSys.Setting.UseSkin then begin
- if FileExists( GikoSys.GetSkinBookmarkFileName ) then
- html.Add( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ))
- else
- html.Add( '<a name="koko"></a>');
- end else if GikoSys.Setting.UseCSS then begin
- html.Add('<a name="koko"></a><div class="koko">\83R\83R\82Ü\82Å\93Ç\82ñ\82¾</div>');
- end else 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;
- except
- html.Add('<a name="koko"></a>');
+ if ThreadItem.Kokomade = (i + 1) then begin
+ // \82±\82±\82Ü\82Å\93Ç\82ñ\82¾
+ try
+ if GikoSys.Setting.UseSkin then begin
+ if FileExists( GikoSys.GetSkinBookmarkFileName ) then
+ html.Add( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ))
+ else
+ html.Add( '<a name="koko"></a>');
+ end else if GikoSys.Setting.UseCSS then begin
+ html.Add('<a name="koko"></a><div class="koko">\83R\83R\82Ü\82Å\93Ç\82ñ\82¾</div>');
+ end else 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;
+ except
+ html.Add('<a name="koko"></a>');
end;
end;
+ end;
- // \83X\83L\83\93(\83t\83b\83^)
- html.Add( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' ));
- finally
- //doc.Close;
- end;
+ // \83X\83L\83\93(\83t\83b\83^)
+ html.Add( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' ));
end;
-procedure THTMLCreate.CreateUseSKINHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList);
+procedure THTMLCreate.CreateUseSKINHTML(html:TBufferedWebBrowser; ThreadItem: TThreadItem; ReadList: TStringList);
const
KOKO_TAG = '<a name="koko"></a>';
NEW_TAG = '<a name="new"></a>';
ThreadName := ChangeFileExt(ThreadItem.FileName, '');
ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
ResLink.FKey := ThreadName;
- //,
- //doc.open;
+ // \83X\83L\83\93\82Ì\90Ý\92è
try
- //doc.charset := 'Shift_JIS';
-
- // \83X\83L\83\93\82Ì\90Ý\92è
- try
- SkinHeader := LoadFromSkin( GikoSys.GetSkinHeaderFileName, ThreadItem, ThreadItem.Size);
- if Length( UserOptionalStyle ) > 0 then
- SkinHeader := CustomStringReplace( SkinHeader, '</head>',
- '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>');
- html.Add( SkinHeader );
- except
- end;
-
- SkinNewRes := LoadFromSkin( GikoSys.GetSkinNewResFileName, ThreadItem, ThreadItem.Size);
- SkinRes := LoadFromSkin( GikoSys.GetSkinResFileName, ThreadItem, ThreadItem.Size );
-
- html.Add('<p id="idSearch"></p>'#13#10'<a name="top"></a>');
+ SkinHeader := LoadFromSkin( GikoSys.GetSkinHeaderFileName, ThreadItem, ThreadItem.Size);
+ if Length( UserOptionalStyle ) > 0 then
+ SkinHeader := CustomStringReplace( SkinHeader, '</head>',
+ '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>');
+ html.Add( SkinHeader );
+ except
+ end;
- for i := 0 to ReadList.Count - 1 do begin
- // 1 \82Í\95K\82¸\95\\8e¦
- if i <> 0 then begin
- // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
- case GikoSys.ResRange of
- Ord( grrKoko ):
- if ThreadItem.Kokomade > (i + 1) then
- Continue;
- Ord( grrNew ):
- if NewReceiveNo > (i + 1) then
- Continue;
- 10..65535:
- if (threadItem.Count - i) > GikoSys.ResRange then
- Continue;
- end;
- end;
+ SkinNewRes := LoadFromSkin( GikoSys.GetSkinNewResFileName, ThreadItem, ThreadItem.Size);
+ SkinRes := LoadFromSkin( GikoSys.GetSkinResFileName, ThreadItem, ThreadItem.Size );
- // \90V\92\85\83}\81[\83N
- if (NewReceiveNo = i + 1) or ((NewReceiveNo = 0) and (i = 0)) then begin
- if FileExists( GikoSys.GetSkinNewmarkFileName ) then
- html.Add( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ))
- else
- html.Add( NEW_TAG );
- end;
+ html.Add('<p id="idSearch"></p>'#13#10'<a name="top"></a>');
+ html.Flush;
- if (Trim(ReadList[i]) <> '') then begin
- DivideStrLine(ReadList[i], @Res);
- AddAnchorTag(@Res);
- ConvRes(@Res, @ResLink);
- Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
+ for i := 0 to ReadList.Count - 1 do begin
+ // 1 \82Í\95K\82¸\95\\8e¦
+ if i <> 0 then begin
+ // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
+ if (isOutsideRange(ThreadItem, i)) then begin
+ Continue;
+ end;
+ end;
- 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;
+ // \90V\92\85\83}\81[\83N
+ if (NewReceiveNo = i + 1) or ((NewReceiveNo = 0) and (i = 0)) then begin
+ if FileExists( GikoSys.GetSkinNewmarkFileName ) then
+ html.Add( LoadFromSkin( GikoSys.GetSkinNewmarkFileName, ThreadItem, ThreadItem.Size ))
+ else
+ html.Add( NEW_TAG );
+ end;
- if ThreadItem.Kokomade = (i + 1) then begin
- // \82±\82±\82Ü\82Å\93Ç\82ñ\82¾
- if FileExists( GikoSys.GetSkinBookmarkFileName ) then
- html.Add( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ))
- else
- html.Add( KOKO_TAG );
- end;
+ if (Trim(ReadList[i]) <> '') then begin
+ DivideStrLine(ReadList[i], @Res);
+ 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;
- html.Add('<a name="bottom"></a>');
- // \83X\83L\83\93(\83t\83b\83^)
- html.Add( LoadFromSkin( GikoSys.GetSkinFooterFileName, ThreadItem, ThreadItem.Size ) );
- finally
- //doc.close;
+ if ThreadItem.Kokomade = (i + 1) then begin
+ // \82±\82±\82Ü\82Å\93Ç\82ñ\82¾
+ if FileExists( GikoSys.GetSkinBookmarkFileName ) then
+ html.Add( LoadFromSkin( GikoSys.GetSkinBookmarkFileName, ThreadItem, ThreadItem.Size ))
+ else
+ 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 ) );
end;
-procedure THTMLCreate.CreateUseCSSHTML(html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
+procedure THTMLCreate.CreateUseCSSHTML(html:TBufferedWebBrowser; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
const
FORMAT_NOMAIL = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>'
- + '<span class="name_label">\96¼\91O\81F</span> <span class="name"><b>%s</b></span>'
- + '<span class="date_label">\93\8a\8de\93ú\81F</span> <span class="date">%s</span></div>'
+ + '<span class="name_label"> \96¼\91O\81F </span> <span class="name"><b>%s</b></span>'
+ + '<span class="date_label"> \93\8a\8de\93ú\81F</span> <span class="date">%s</span></div>'
+ '<div class="mes">%s</div>';
FORMAT_SHOWMAIL = '<a name="%s"></a><div class="header"><span class="no"><a href="menu:%s">%s</a></span>'
ThreadName :String;
ResLink :TResLinkRec;
begin
- //doc.open;
- try
- //doc.charset := 'Shift_JIS';
- NewReceiveNo := ThreadItem.NewReceive;
- ThreadName := ChangeFileExt(ThreadItem.FileName, '');
- ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
- ResLink.FKey := ThreadName;
- // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
- UserOptionalStyle := GikoSys.SetUserOptionalStyle;
- CSSFileName := GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName;
- if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin
- //CSS\8eg\97p
- html.Add('<html><head>');
- html.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
- html.Add('<title>' + sTitle + '</title>');
- html.Add('<link rel="stylesheet" href="'+CSSFileName+'" type="text/css">');
- if Length( UserOptionalStyle ) > 0 then
- html.Add('<style type="text/css">body {' + UserOptionalStyle + '}</style>');
- html.Add('</head>'#13#10'<body>');
- html.Add('<a name="top"></a>'#13#10'<p id="idSearch"></p>');
- html.Add('<div class="title">' + sTitle + '</div>');
- for i := 0 to ReadList.Count - 1 do begin
- // 1 \82Í\95K\82¸\95\\8e¦
- if i <> 0 then begin
- // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
- case GikoSys.ResRange of
- Ord( grrKoko ):
- if ThreadItem.Kokomade > (i + 1) then
- Continue;
- Ord( grrNew ):
- if NewReceiveNo > (i + 1) then
- Continue;
- 10..65535:
- if (threadItem.Count - i) > GikoSys.ResRange then
- Continue;
- end;
- end;
-
- if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
- html.Add('<a name="new"></a><div class="new">\90V\92\85\83\8c\83X <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>');
- 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(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('<a name="bottom"></a>');
- html.Add('<a name="last"></a>');
- html.Add('</body></html>');
- end;
- finally
- //doc.Close;
- end;
-end;
-
-procedure THTMLCreate.CreateDefaultHTML (html:TStringList; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
-var
- i: integer;
- No: string;
- NewReceiveNo: Integer;
- Res: TResRec;
- ThreadName: String;
- ResLink : TResLinkRec;
-begin
-// doc.open;
- try
-// doc.charset := 'Shift_JIS';
- NewReceiveNo := ThreadItem.NewReceive;
- ThreadName := ChangeFileExt(ThreadItem.FileName, '');
- ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
- ResLink.FKey := ThreadName;
+ NewReceiveNo := ThreadItem.NewReceive;
+ ThreadName := ChangeFileExt(ThreadItem.FileName, '');
+ ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
+ ResLink.FKey := ThreadName;
+ // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
+ UserOptionalStyle := GikoSys.SetUserOptionalStyle;
+ CSSFileName := GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName;
+ if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin
+ //CSS\8eg\97p
html.Add('<html><head>');
html.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
- html.Add('<title>' + sTitle + '</title></head>');
- html.Add('<body TEXT="#000000" BGCOLOR="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">');
- html.Add('<a name="top"></a>');
- html.Add('<font size=+1 color="#FF0000">' + sTitle + '</font>');
- html.Add('<dl>');
- html.Add('<p id="idSearch"></p>');
+ html.Add('<title>' + sTitle + '</title>');
+ html.Add('<link rel="stylesheet" href="'+CSSFileName+'" type="text/css">');
+ if Length( UserOptionalStyle ) > 0 then
+ html.Add('<style type="text/css">body {' + UserOptionalStyle + '}</style>');
+ html.Add('</head>'#13#10'<body>');
+ html.Add('<a name="top"></a>'#13#10'<p id="idSearch"></p>');
+ html.Add('<div class="title">' + sTitle + '</div>');
+ html.Flush;
for i := 0 to ReadList.Count - 1 do begin
// 1 \82Í\95K\82¸\95\\8e¦
if i <> 0 then begin
- // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
- case GikoSys.ResRange of
- Ord( grrKoko ):
- if ThreadItem.Kokomade > (i + 1) then
- Continue;
- Ord( grrNew ):
- if NewReceiveNo > (i + 1) then
- Continue;
- 10..65535:
- if (threadItem.Count - i) > GikoSys.ResRange then
- Continue;
- end;
+ // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
+ if (isOutsideRange(ThreadItem, i)) then begin
+ Continue;
+ end;
end;
if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
- html.Add('</dl>');
- html.Add('<a name="new"></a>');
- html.Add('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>\90V\92\85\83\8c\83X ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>');
- html.Add('<dl>');
+ html.Add('<a name="new"></a><div class="new">\90V\92\85\83\8c\83X <span class="newdate">' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</span></div>');
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;
+ 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('</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>');
+ html.Add('<a name="koko"></a><div class="koko">\83R\83R\82Ü\82Å\93Ç\82ñ\82¾</div>');
end;
+
end;
- html.Add('</dl>'#13#10'<a name="bottom"></a>'#13#10'</body></html>');
- finally
- //doc.Close;
+ html.Add(getKeywordLink(ThreadItem));
+ html.Add('<a name="bottom"></a>');
+ html.Add('<a name="last"></a>');
+ html.Add('</body></html>');
end;
end;
-procedure THTMLCreate.CreateHTML2(doc: IDispatch; ThreadItem: TThreadItem; var sTitle: string);
+procedure THTMLCreate.CreateDefaultHTML (html:TBufferedWebBrowser; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
+var
+ i: integer;
+ NewReceiveNo: Integer;
+ ThreadName: String;
+ ResLink : TResLinkRec;
+begin
+ NewReceiveNo := ThreadItem.NewReceive;
+ ThreadName := ChangeFileExt(ThreadItem.FileName, '');
+ ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
+ ResLink.FKey := ThreadName;
+ html.Add('<html><head>');
+ html.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
+ html.Add('<title>' + sTitle + '</title></head>');
+ html.Add('<body TEXT="#000000" BGCOLOR="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">');
+ html.Add('<a name="top"></a>');
+ html.Add('<font size=+1 color="#FF0000">' + sTitle + '</font>');
+ html.Add('<dl>');
+ html.Add('<p id="idSearch"></p>');
+ html.Flush;
+ for i := 0 to ReadList.Count - 1 do begin
+ // 1 \82Í\95K\82¸\95\\8e¦
+ if i <> 0 then begin
+ // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
+ if (isOutsideRange(ThreadItem, i)) then begin
+ Continue;
+ end;
+ end;
+
+ if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
+ html.Add('</dl>');
+ html.Add('<a name="new"></a>');
+ html.Add('<table width="100%" bgcolor="#3333CC" cellpadding="0" cellspacing="1"><tr><td align="center" bgcolor="#6666FF" valign="middle"><font size="-1" color="#ffffff"><b>\90V\92\85\83\8c\83X ' + FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate) + '</b></font></td></tr></table>');
+ html.Add('<dl>');
+ end;
+
+ if (Trim(ReadList[i]) <> '') then begin
+ 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);
+ Res.FBody := DeleteLink(Res.FBody);
+ 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;
CSSFileName: string;
FileName: string;
Res: TResRec;
- body : TStringList;
- mStream : TMemoryStream;
+ body : TBufferedWebBrowser;
{$IFDEF DEBUG}
st, rt: Cardinal;
{$ENDIF}
st := GetTickCount;
{$ENDIF}
if ThreadItem <> nil then begin
- body := TStringList.Create;
+ body := TBufferedWebBrowser.Create(Browser, 100);
try
- body.BeginUpdate;
+ body.Open;
if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
CreateUsePluginHTML(body, ThreadItem, sTitle);
end else begin
end else begin
CreateDefaultHTML(body, ThreadItem, ReadList, sTitle);
end;
- body.EndUpdate;
- //WebBrowser\82É\8f\91\82«\8d\9e\82Ý
- mStream := TMemoryStream.Create;
- try
- body.SaveToStream(mStream);
- mStream.Seek(soFromBeginning, 0);
- (doc as IPersistStreamInit).Load(TStreamAdapter.Create(mStream));
- finally
- mStream.Free;
- end;
finally
ReadList.Free;
end;
end;
finally
+ body.Close;
body.Free;
end;
end;
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 else if GikoSys.Setting.UseCSS then begin
current := ExtractFilePath(GikoSys.GetStyleSheetDir);
tmp := ExtractFilePath(GikoSys.GetStyleSheetDir + GikoSys.Setting.CSSFileName);
- end;
+ end else begin
+ Exit;
+ end;
dirs := TStringList.Create;
try
dirs.Add(tmp);
finally
dirs.Free;
end;
-end;{!
+end;
+{!
\brief dat\83t\83@\83C\83\8b\82Ì\88ê\83\89\83C\83\93\82ð\95ª\89ð
\param Line dat\83t\83@\83C\83\8b\82ð\8d\\90¬\82·\82é 1 \8ds
\return \83\8c\83X\8fî\95ñ
Line := CustomStringReplace(Line, '\81\97\81M', ',');
end;
//Trim\82µ\82Ä\82Í\82¢\82¯\82È\82¢\8bC\82ª\82·\82é\81@by\82à\82¶\82ã
- PRes.FName := RemoveToken(Line, delimiter);
- PRes.FMailTo := RemoveToken(Line, delimiter);
- PRes.FDateTime := RemoveToken(Line, delimiter);
- PRes.FBody := RemoveToken(Line, delimiter);
+ PRes.FName := MojuUtils.RemoveToken(Line, delimiter);
+ PRes.FMailTo := MojuUtils.RemoveToken(Line, delimiter);
+ PRes.FDateTime := MojuUtils.RemoveToken(Line, delimiter);
+ PRes.FBody := MojuUtils.RemoveToken(Line, delimiter);
//\82Q\82¿\82á\82ñ\82Ë\82é\82Æ\82©\82¾\82Æ\81A\96{\95¶\82Ì\90æ\93ª\82É\82P\82Â\94¼\8ap\8bó\94\92\82ª\93ü\82Á\82Ä\82¢\82é\82Ì\82Å\8dí\8f\9c\82·\82é
//\91¼\82Ì\8cf\8e¦\94Â\82Å\81A\83\8c\83X\8e©\91Ì\82Ì\8bó\94\92\82©\82à\82µ\82ê\82È\82¢\82¯\82Ç\82»\82ê\82Í\92ú\82ß\82é
PRes.FBody := TrimLeft(PRes.FBody);
if PRes.FBody = '' then
PRes.FBody := ' ';
- PRes.FTitle := RemoveToken(Line, delimiter);
+ PRes.FTitle := MojuUtils.RemoveToken(Line, delimiter);
end;
{!
class function THTMLCreate.DeleteLink(const s: string): string;
var
s1: string;
- s2: string;
+ mark: string;
idx: Integer;
- i: Integer;
begin
- i := 0;
- Result := '';
- while True do begin
- s1 := GikoSys.GetTokenIndex(s, '<a href="', i);
- s2 := GikoSys.GetTokenIndex(s, '<a href="', i + 1);
-
- idx := Pos('">', s1);
- if idx <> 0 then
- Delete(s1, 1, idx + 1);
- idx := Pos('">', s2);
- if idx <> 0 then
- Delete(s2, 1, idx + 1);
-
- Result := Result + s1 + s2;
-
- if s2 = '' then
- Break;
+ mark := '<a href="';
+ Result := '';
+ s1 := s;
+ idx := AnsiPos(mark, s1);
+ while idx <> 0 do begin
+ Result := Result + Copy(s1, 1, idx - 1);
+ Delete(s1, 1, idx);
+ // \83^\83O\82Ì\83G\83\93\83h\82ð\92T\82·
+ idx := AnsiPos('">', s1);
+ if idx <> 0 then begin
+ Delete(s1, 1, idx + 1);
+ end;
+ // </a> \82Ü\82Å
+ idx := AnsiPos('</a>', s1);
+ if idx <> 0 then begin
+ Result := Result + Copy(s1, 1, idx - 1);
+ Delete(s1, 1, idx + 3);
+ end;
+ idx := AnsiPos(mark, s1);
+ end;
+
+ Result := Result + s1;
+end;
+{
+\brief HTML\89»\82Ì\82½\82ß\82Ì\92u\8a·
+\param s \8c³\82É\82È\82é\95¶\8e\9a\97ñ
+\return HTML\82ÌinnerText\82Æ\82µ\82Ä\82ä\82é\82³\82ê\82é\95¶\8e\9a\97ñ
+}
+class function THTMLCreate.RepHtml(const s: string): string;
+begin
+// s := StringReplace(s, '&', '&', [rfReplaceAll]);
+ Result := s;
+ Result := CustomStringReplace(Result, '<', '<');
+ Result := CustomStringReplace(Result, '>', '>');
+// s := StringReplace(s, ' ', ' ', [rfReplaceAll]); //\8ed\97l\95Ï\8dX\82É\82æ\82è \8eg\97p\95s\89Â
+ Result := CustomStringReplace(Result, '"', '"');
+end;
+{
+\brief \83\8c\83X\83G\83f\83B\83^\82Å\82Ì\83v\83\8c\83r\83\85\81[\97pHTML\8dì\90¬
+\param Title \83X\83\8c\83b\83h\83^\83C\83g\83\8b
+\param No \83\8c\83X\94Ô\8d\86
+\param Mail \83\81\81[\83\8b\97\93
+\param Name \96¼\91O\97\93
+\param Body \96{\95¶
+\return \83v\83\8c\83r\83\85\81[\97pHTML
+}
+class function THTMLCreate.CreatePreviewHTML(
+ const Title: string;
+ const No: string;
+ const Mail: string;
+ const Namae: string;
+ const Body: string
+) : string;
+var
+ posTrip : Integer;
+ tripOrigin : string;
+ NameWithTrip: string;
+ DateTime: string;
+begin
+ Result := '<HTML><HEAD>'#13#10
+ + '<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">'#13#10
+ + '<TITLE>' + title + '</TITLE>'#13#10
+ + '</HEAD>'#13#10
+ + '<BODY text="#000000" bgcolor="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">'#13#10
+ + '<FONT COLOR="#FF0000">' + title + '</FONT>'#13#10
+ + '<DL>'#13#10;
+
+ DateTime := FormatDateTime('yyyy/mm/dd(aaa) hh:nn', Now());
+
+ NameWithTrip := Namae;
+ posTrip := AnsiPos( '#', Namae );
+ if posTrip > 0 then begin
+ tripOrigin := Copy( Namae, posTrip + 1, Length( Namae ) );
+ NameWithTrip := Copy( Namae, 1, posTrip - 1 ) + '</B> \81\9f' +
+ get_2ch_trip( PChar( tripOrigin ) ) + '<B>';
+ end;
+ if Mail = '' then begin
+ Result := Result + '<DT>' + No + ' \81F <FONT color="forestgreen"><B>' + NameWithTrip
+ + '</B></FONT> \81F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10
+ end else begin
+ Result := Result + '<DT>' + No + ' \81F <A href="mailto:' + Mail + '"><B>' + NameWithTrip
+ + '</B></A> [' + Mail + ']\81F ' + DateTime+ '<BR><DD>' + Body + '<BR><BR><BR>' + #13#10;
+ end;
+ Result := Result + '</BODY></HTML>';
- inc(i, 2);
+end;
+{
+\brief \95\\8e¦\94Í\88Í\8aO\83\8c\83X\94Ô\8d\86\94»\92è\8f\88\97\9d
+\param item \95\\8e¦\83X\83\8c\83b\83h
+\param index \83\8c\83X\94Ô\8d\86
+\return ture:\95\\8e¦\94Í\88Í\8aO false:\95\\8e¦\94Í\88Í\93à
+}
+function THTMLCreate.isOutsideRange( item: TThreadItem; index: Integer ): Boolean;
+begin
+ Result := False;
+ // \95\\8e¦\94Í\88Í\82ð\8cÀ\92è
+ case GikoSys.ResRange of
+ Ord( grrKoko ):
+ if item.Kokomade > (index + 1) then
+ Result := True;
+ Ord( grrNew ):
+ if item.NewReceive > (index + 1) then
+ Result := True;
+ 10..65535:
+ if (GikoSys.Setting.HeadResCount) < (index + 1) then begin
+ if (item.Count - index) > GikoSys.ResRange then begin
+ Result := True;
+ end;
+ end;
+ end;
+end;
+constructor TBufferedWebBrowser.Create(Browser: TWebBrowser; BuffSize: Integer);
+begin
+ inherited Create;
+ Self.Sorted := False;
+ if (Browser = nil) then
+ Raise Exception.Create('Browser is NULL');
+ FBrowser := Browser;
+
+ // \83o\83b\83t\83@\82·\82é\8ds\90\94\82ð
+ if (BuffSize < 0) then begin
+ FBuffSize := 100;
+ end else begin
+ FBuffSize := BuffSize;
end;
+ Self.Capacity := FBuffSize + 10;
+end;
+procedure TBufferedWebBrowser.Open;
+begin
+ FBrowserDoc := FBrowser.ControlInterface.Document;
+ FBrowserDoc.open;
+ FBrowserDoc.charset := 'Shift_JIS';
+end;
+procedure TBufferedWebBrowser.Close;
+begin
+ Self.Flush;
+ try
+ FBrowserDoc.Close;
+ except
+ end;
+ FBrowser := nil;
+end;
+function TBufferedWebBrowser.Add(const S: string): Integer;
+begin
+ Result := inherited Add(TrimRight(s));
+ if (Self.Count > FBuffSize) then begin
+ FBrowserDoc.Write(Self.Text);
+ Self.Clear;
+ end;
+end;
+procedure TBufferedWebBrowser.Flush ;
+begin
+ if (Self.Count > 0) then begin
+ FBrowserDoc.Write(Self.Text);
+ Self.Clear;
+ end;
+end;
+destructor TBufferedWebBrowser.Destory;
+begin
+ try
+ if (FBrowserDoc <> 0) then begin
+ FBrowserDoc.close;
+ FBrowserDoc := 0;
+ end;
+ except
+ 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.