| 32 |
//! 何行までためるかのサイズ |
//! 何行までためるかのサイズ |
| 33 |
FBuffSize: Integer; |
FBuffSize: Integer; |
| 34 |
//! ブラウザのIHTMLDocument2インタフェースを保持する openからcloseの間で |
//! ブラウザのIHTMLDocument2インタフェースを保持する openからcloseの間で |
| 35 |
FBrowserDoc: Variant; |
FBrowserDoc: OleVariant; |
| 36 |
public |
public |
| 37 |
constructor Create(Browser: TWebBrowser; BuffSize: Integer); |
constructor Create(Browser: TWebBrowser; BuffSize: Integer); |
| 38 |
destructor Destory; |
destructor Destory; |
| 600 |
_END: string = '&END='; |
_END: string = '&END='; |
| 601 |
var |
var |
| 602 |
i, j, k: Integer; |
i, j, k: Integer; |
| 603 |
|
hpos, qpos : Integer; |
| 604 |
tmp: string; |
tmp: string; |
| 605 |
res: string; |
res: string; |
| 606 |
begin |
begin |
| 628 |
end else begin |
end else begin |
| 629 |
k := LastDelimiter('/', tmp); |
k := LastDelimiter('/', tmp); |
| 630 |
Delete(tmp, 1, k); |
Delete(tmp, 1, k); |
| 631 |
if AnsiPos('-', tmp) < AnsiPos('"', tmp) then |
hpos := AnsiPos('-', tmp); |
| 632 |
Delete(tmp, AnsiPos('-', tmp), Length(tmp)) |
qpos := AnsiPos('"', tmp); |
| 633 |
else |
if ( (hpos > 0) and (qpos > 0) ) then begin |
| 634 |
Delete(tmp, AnsiPos('"', tmp), Length(tmp)); |
if ( qpos < hpos ) then begin |
| 635 |
|
Delete(tmp, qpos, Length(tmp)); |
| 636 |
|
end else begin |
| 637 |
|
Delete(tmp, hpos, Length(tmp)); |
| 638 |
|
end; |
| 639 |
|
end else begin |
| 640 |
|
if ( qpos > 0 ) then begin |
| 641 |
|
Delete(tmp, qpos, Length(tmp)); |
| 642 |
|
end else if ( qpos > 0 ) then begin |
| 643 |
|
Delete(tmp, hpos, Length(tmp)); |
| 644 |
|
end; |
| 645 |
|
end; |
| 646 |
|
|
| 647 |
PRes.FBody := PRes.FBody + '<a href="#' + tmp + '">'; |
PRes.FBody := PRes.FBody + '<a href="#' + tmp + '">'; |
| 648 |
end; |
end; |
| 949 |
begin |
begin |
| 950 |
No := IntToStr(index + 1); |
No := IntToStr(index + 1); |
| 951 |
DivideStrLine(Line, @Res); |
DivideStrLine(Line, @Res); |
| 952 |
|
Res.FBody := DeleteLink(Res.FBody); |
| 953 |
AddAnchorTag(@Res); |
AddAnchorTag(@Res); |
| 954 |
ConvRes(@Res, PResLink); |
ConvRes(@Res, PResLink); |
| 955 |
Res.FDateTime := AddBeProfileLink(Res.FDateTime, index + 1); |
Res.FDateTime := AddBeProfileLink(Res.FDateTime, index + 1); |
| 1471 |
Line := CustomStringReplace(Line, '@`', ','); |
Line := CustomStringReplace(Line, '@`', ','); |
| 1472 |
end; |
end; |
| 1473 |
//Trimしてはいけない気がする byもじゅ |
//Trimしてはいけない気がする byもじゅ |
| 1474 |
PRes.FName := RemoveToken(Line, delimiter); |
PRes.FName := MojuUtils.RemoveToken(Line, delimiter); |
| 1475 |
PRes.FMailTo := RemoveToken(Line, delimiter); |
PRes.FMailTo := MojuUtils.RemoveToken(Line, delimiter); |
| 1476 |
PRes.FDateTime := RemoveToken(Line, delimiter); |
PRes.FDateTime := MojuUtils.RemoveToken(Line, delimiter); |
| 1477 |
PRes.FBody := RemoveToken(Line, delimiter); |
PRes.FBody := MojuUtils.RemoveToken(Line, delimiter); |
| 1478 |
//2ちゃんねるとかだと、本文の先頭に1つ半角空白が入っているので削除する |
//2ちゃんねるとかだと、本文の先頭に1つ半角空白が入っているので削除する |
| 1479 |
//他の掲示板で、レス自体の空白かもしれないけどそれは諦める |
//他の掲示板で、レス自体の空白かもしれないけどそれは諦める |
| 1480 |
PRes.FBody := TrimLeft(PRes.FBody); |
PRes.FBody := TrimLeft(PRes.FBody); |
| 1482 |
if PRes.FBody = '' then |
if PRes.FBody = '' then |
| 1483 |
PRes.FBody := ' '; |
PRes.FBody := ' '; |
| 1484 |
|
|
| 1485 |
PRes.FTitle := RemoveToken(Line, delimiter); |
PRes.FTitle := MojuUtils.RemoveToken(Line, delimiter); |
| 1486 |
end; |
end; |
| 1487 |
|
|
| 1488 |
{! |
{! |
| 1493 |
class function THTMLCreate.DeleteLink(const s: string): string; |
class function THTMLCreate.DeleteLink(const s: string): string; |
| 1494 |
var |
var |
| 1495 |
s1: string; |
s1: string; |
| 1496 |
s2: string; |
mark: string; |
| 1497 |
idx: Integer; |
idx: Integer; |
|
i: Integer; |
|
| 1498 |
begin |
begin |
| 1499 |
i := 0; |
mark := '<a href="'; |
| 1500 |
Result := ''; |
Result := ''; |
| 1501 |
while True do begin |
s1 := s; |
| 1502 |
s1 := GikoSys.GetTokenIndex(s, '<a href="', i); |
idx := AnsiPos(mark, s1); |
| 1503 |
s2 := GikoSys.GetTokenIndex(s, '<a href="', i + 1); |
while idx <> 0 do begin |
| 1504 |
|
Result := Result + Copy(s1, 1, idx - 1); |
| 1505 |
idx := Pos('">', s1); |
Delete(s1, 1, idx); |
| 1506 |
if idx <> 0 then |
// タグのエンドを探す |
| 1507 |
Delete(s1, 1, idx + 1); |
idx := AnsiPos('">', s1); |
| 1508 |
idx := Pos('">', s2); |
if idx <> 0 then begin |
| 1509 |
if idx <> 0 then |
Delete(s1, 1, idx + 1); |
| 1510 |
Delete(s2, 1, idx + 1); |
end; |
| 1511 |
|
// </a> まで |
| 1512 |
Result := Result + s1 + s2; |
idx := AnsiPos('</a>', s1); |
| 1513 |
|
if idx <> 0 then begin |
| 1514 |
if s2 = '' then |
Result := Result + Copy(s1, 1, idx - 1); |
| 1515 |
Break; |
Delete(s1, 1, idx + 3); |
| 1516 |
|
end; |
| 1517 |
|
idx := AnsiPos(mark, s1); |
| 1518 |
|
end; |
| 1519 |
|
|
| 1520 |
inc(i, 2); |
Result := Result + s1; |
|
end; |
|
| 1521 |
end; |
end; |
| 1522 |
{ |
{ |
| 1523 |
\brief HTML化のための置換 |
\brief HTML化のための置換 |
| 1625 |
end; |
end; |
| 1626 |
procedure TBufferedWebBrowser.Open; |
procedure TBufferedWebBrowser.Open; |
| 1627 |
begin |
begin |
| 1628 |
FBrowserDoc := Idispatch( olevariant(FBrowser.ControlInterface).Document); |
FBrowserDoc := FBrowser.ControlInterface.Document; |
| 1629 |
FBrowserDoc.open; |
FBrowserDoc.open; |
| 1630 |
FBrowserDoc.charset := 'Shift_JIS'; |
FBrowserDoc.charset := 'Shift_JIS'; |
| 1631 |
end; |
end; |
| 1680 |
|
|
| 1681 |
finalization |
finalization |
| 1682 |
if HTMLCreater <> nil then begin |
if HTMLCreater <> nil then begin |
| 1683 |
HTMLCreater.Free; |
FreeAndNil(HTMLCreater); |
|
HTMLCreater := nil; |
|
| 1684 |
end; |
end; |
| 1685 |
|
|
| 1686 |
end. |
end. |