Commit MetaInfo

修订版1aec69dbc1cb1d93d23dca4fff311f910f13e091 (tree)
时间2006-07-30 10:09:55
作者cvs2git <cvs2git>
Commitercvs2git

Log Message

This commit was manufactured by cvs2svn to create tag 'v1_53_0_669'.

更改概述

差异

--- a/Giko.dfm
+++ b/Giko.dfm
@@ -1,5 +1,5 @@
11 object GikoForm: TGikoForm
2- Left = 241
2+ Left = 422
33 Top = 68
44 HorzScrollBar.Visible = False
55 VertScrollBar.Visible = False
@@ -159,7 +159,7 @@ object GikoForm: TGikoForm
159159 object ToolBar1: TToolBar
160160 Left = 2
161161 Top = 4
162- Width = 15
162+ Width = 16
163163 Height = 18
164164 Align = alNone
165165 AutoSize = True
@@ -346,7 +346,7 @@ object GikoForm: TGikoForm
346346 end>
347347 EdgeBorders = [ebLeft, ebTop, ebRight]
348348 EdgeInner = esLowered
349- OnContextPopup = MainCoolBarContextPopup
349+ PopupMenu = MainCoolBarPopupMenu
350350 OnBandInfo = ListCoolBarBandInfo
351351 OnChevronClick = ListCoolBarChevronClick
352352 object ListToolBar: TToolBar
@@ -573,7 +573,7 @@ object GikoForm: TGikoForm
573573 end>
574574 EdgeBorders = [ebLeft, ebTop, ebRight]
575575 EdgeInner = esLowered
576- OnContextPopup = MainCoolBarContextPopup
576+ PopupMenu = MainCoolBarPopupMenu
577577 OnBandInfo = BrowserCoolBarBandInfo
578578 OnChevronClick = BrowserCoolBarChevronClick
579579 object BrowserToolBar: TToolBar
@@ -910,7 +910,7 @@ object GikoForm: TGikoForm
910910 Text = #12522#12531#12463
911911 Width = 735
912912 end>
913- OnContextPopup = MainCoolBarContextPopup
913+ PopupMenu = MainCoolBarPopupMenu
914914 OnResize = MainCoolBarResize
915915 OnBandInfo = MainCoolBarBandInfo
916916 OnChevronClick = MainCoolBarChevronClick
@@ -971,7 +971,7 @@ object GikoForm: TGikoForm
971971 OnResize = AddressToolBarResize
972972 object AddressComboBox: TComboBox
973973 Left = 0
974- Top = 0
974+ Top = 1
975975 Width = 177
976976 Height = 20
977977 DropDownCount = 20
@@ -5376,6 +5376,7 @@ object GikoForm: TGikoForm
53765376 end
53775377 end
53785378 object MainCoolBarPopupMenu: TPopupMenu
5379+ OnPopup = MainCoolBarPopupMenuPopup
53795380 Left = 100
53805381 Top = 404
53815382 object StdToolBarVisiblePMenu: TMenuItem
--- a/Giko.pas
+++ b/Giko.pas
@@ -543,8 +543,7 @@ type
543543 procedure TreeViewMouseDown(Sender: TObject; Button: TMouseButton;
544544 Shift: TShiftState; X, Y: Integer);
545545 procedure GetResURLMenuClick(Sender: TObject);
546- procedure MainCoolBarContextPopup(Sender: TObject; MousePos: TPoint;
547- var Handled: Boolean);
546+ procedure MainCoolBarPopupMenuPopup(Sender: TObject);
548547 private
549548 { Private 宣言 }
550549 FEnabledCloseButton: Boolean;
@@ -7671,28 +7670,25 @@ begin
76717670 ListView.Refresh;
76727671 end;
76737672 end;
7674-
7675-procedure TGikoForm.MainCoolBarContextPopup(Sender: TObject;
7676- MousePos: TPoint; var Handled: Boolean);
7673+//! CoolBarのポップアップ前処理
7674+procedure TGikoForm.MainCoolBarPopupMenuPopup(Sender: TObject);
76777675 var
7678- pos : TPoint;
7679- coolBar: TGikoCoolBar;
7676+ compPopup : TComponent;
76807677 begin
7681- Handled := False;
7682- if (Sender <> nil) and (Sender is TGikoCoolBar) then begin
7683- coolBar := TGikoCoolBar(Sender);
7684- if (coolBar = MainCoolBar) then begin
7685- FToolBarSettingSender := tssMain;
7686- end else if (coolBar = ListCoolBar) then begin
7687- FToolBarSettingSender := tssList;
7688- end else if (coolBar = BrowserCoolBar) then begin
7689- FToolBarSettingSender := tssBrowser;
7690- end else begin
7691- FToolBarSettingSender := tssNone;
7678+ FToolBarSettingSender := tssNone;
7679+ if (Sender <> nil) and (Sender is TPopupMenu) then begin
7680+ // 呼び出し元CoolBarによって,FToolBarSettingSender
7681+ // の値を変更する
7682+ compPopup := TPopupMenu(Sender).PopupComponent;
7683+ if (compPopup <> nil) then begin
7684+ if (compPopup = MainCoolBar) then begin
7685+ FToolBarSettingSender := tssMain;
7686+ end else if (compPopup = ListCoolBar) then begin
7687+ FToolBarSettingSender := tssList;
7688+ end else if (compPopup = BrowserCoolBar) then begin
7689+ FToolBarSettingSender := tssBrowser;
7690+ end;
76927691 end;
7693- pos := coolBar.ClientToScreen( MousePos );
7694- MainCoolBarPopupMenu.Popup( pos.X, pos.Y );
7695- Handled := True;
76967692 end;
76977693 end;
76987694
--- a/GikoSystem.pas
+++ b/GikoSystem.pas
@@ -2753,13 +2753,7 @@ function TGikoSys.GetSameIDResAnchor(const AID : string; ThreadItem: TThreadItem
27532753 var
27542754 i: integer;
27552755 body: TStringList;
2756- Res: TResRec;
2757- ResLink : TResLinkRec;
27582756 begin
2759- // body以外は使用しないので初期化しない
2760- Res.FBody := '';
2761- Res.FType := glt2chNew;
2762-
27632757 Result := '';
27642758 if (not IsNoValidID(AID)) and
27652759 (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
@@ -2768,20 +2762,21 @@ begin
27682762 GetSameIDRes(AID, ThreadItem, body);
27692763 if (limited) and (body.Count > 20) then begin
27702764 for i := body.Count - 20 to body.Count - 1 do begin
2771- Res.FBody := Res.FBody + '&gt;' + body[i] + ' ';
2765+ Result := Result + '&gt;' + body[i] + ' ';
27722766 end;
27732767 end else begin
27742768 for i := 0 to body.Count - 1 do begin
2775- Res.FBody := Res.FBody + '&gt;' + body[i] + ' ';
2769+ Result := Result + '&gt;' + body[i] + ' ';
27762770 end;
27772771 end;
27782772 finally
27792773 body.Free;
27802774 end;
2781- ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
2782- ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
2783- HTMLCreater.ConvRes(@Res, @ResLink, false);
2784- Result := Res.FBody;
2775+
2776+ Result := HTMLCreater.ConvRes(
2777+ Result,
2778+ ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''),
2779+ 'bbs', 'key', 'st', 'to', 'nofirst', 'true', false);
27852780 end;
27862781 end;
27872782
@@ -2842,13 +2837,7 @@ function TGikoSys.GetSameIDResAnchor(AIDNum : Integer; ThreadItem: TThreadItem;
28422837 var
28432838 i: integer;
28442839 body: TStringList;
2845- Res: TResRec;
2846- ResLink : TResLinkRec;
28472840 begin
2848- // body以外は使用しないので初期化しない
2849- Res.FBody := '';
2850- Res.FType := glt2chNew;
2851-
28522841 Result := '';
28532842 if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
28542843 body := TStringList.Create;
@@ -2856,20 +2845,21 @@ begin
28562845 GetSameIDRes(AIDNum, ThreadItem, body);
28572846 if (limited) and (body.Count > 20) then begin
28582847 for i := body.Count - 20 to body.Count - 1 do begin
2859- Res.FBody := Res.FBody + '&gt;' + body[i] + ' ';
2848+ Result := Result + '&gt;' + body[i] + ' ';
28602849 end;
28612850 end else begin
28622851 for i := 0 to body.Count - 1 do begin
2863- Res.FBody := Res.FBody + '&gt;' + body[i] + ' ';
2852+ Result := Result + '&gt;' + body[i] + ' ';
28642853 end;
28652854 end;
28662855 finally
28672856 body.Free;
28682857 end;
2869- ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
2870- ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
2871- HTMLCreater.ConvRes(@Res, @ResLink, false);
2872- Result := Res.FBody;
2858+ Result := HTMLCreater.ConvRes(
2859+ Result, ThreadItem.ParentBoard.BBSID,
2860+ ChangeFileExt(ThreadItem.FileName, ''),
2861+ 'bbs', 'key', 'st', 'to', 'nofirst', 'true',
2862+ false);
28732863 end;
28742864 end;
28752865
--- a/HTMLCreate.pas
+++ b/HTMLCreate.pas
@@ -60,20 +60,16 @@ type
6060 procedure CreateDefaultHTML (html:TBufferedWebBrowser; ThreadItem: TThreadItem; ReadList: TStringList; sTitle: string );
6161 procedure ConvertResAnchor(PRes: PResRec);
6262 procedure separateNumber(var st: String; var et: String; const Text, Separator: String);
63- function checkComma(const s : String; var j : Integer) : boolean;
63+ function checkComma(const s : String; var j : Integer; var No : String) : boolean;
6464 function addResAnchor(PAddRes: PResRec; PResLink : PResLinkRec; dat : boolean;
6565 var s : String; j : Integer; const No: String) : string;
66- function appendResAnchor(PAddRes: PResRec; PResLink : PResLinkRec;
67- dat : boolean; var s : String) : string;
68- function getNumberString(const str: String;var index :Integer; var dbCharlen: Boolean;
69- sLen :Integer): String;
70-
7166 public
7267 { Public 宣言 }
7368 procedure AddAnchorTag(PRes: PResRec);
7469 function LoadFromSkin(fileName: string; ThreadItem: TThreadItem; SizeByte: Integer): string;
7570 function SkinedRes(const skin: string; PRes: PResRec; const No: string): string;
7671 procedure ConvRes( PRes : PResRec; PResLink : PResLinkRec; DatToHTML: boolean = false); overload;
72+ function ConvRes(const Body, Bbs, Key, ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue : string; DatToHTML: boolean = false): string; overload;
7773 procedure CreateHTML2(Browser: TWebBrowser; ThreadItem: TThreadItem; var sTitle: string);
7874 procedure CreateHTML3(var html: TStringList; ThreadItem: TThreadItem; var sTitle: string);
7975 //レスポップアップの作成
@@ -356,9 +352,6 @@ begin
356352 end else
357353 Result := AID;
358354 end;
359-//! レスアンカーのレス番号を分割する
360-// Text = '1-9' -> st = '1'; et = '9'
361-// Text = '10' -> st = '10'; et = '10'
362355 procedure THTMLCreate.separateNumber(var st: String; var et: String; const Text:String; const Separator: String);
363356 var
364357 p : Integer;
@@ -372,58 +365,54 @@ begin
372365 et := Text;
373366 end;
374367 end;
375-//! レスアンカーが指しているレス番号の文字列を取得する
376-function THTMLCreate.getNumberString(
377- const str: String;
378- var index :Integer; var dbCharlen: Boolean; sLen :Integer)
379-: String;
380-const
381- SN = '0123456789';
382-var
383- ch : String;
384- sw : Boolean;
385-begin
386- Result := '';
387- sw := False;
388- while (index <= sLen) do begin
389- if (ByteType(str, index) = mbSingleByte) then begin
390- //1byte文字
391- ch := str[index];
392- Inc(index);
393- dbCharlen := false;
394- end else begin
395- //2byte文字
396- ch := ZenToHan(Copy(str, index, 2));
397- Inc(index, 2);
398- dbCharlen := true;
399- end;
400-
401- if System.Pos(ch, SN) > 0 then begin
402- Result := Result + ch;
403- end else if (ch = '-') then begin
404- if sw then break;
405- if Result = '' then break;
406- Result := Result + ch;
407- sw := true;
408- end else begin
409- break;
410- end;
411- end;
412-end;
413-
414368 procedure THTMLCreate.ConvRes( PRes : PResRec; PResLink : PResLinkRec; DatToHTML: boolean = false);
415369 const
416370 GT = '&gt;';
371+ SN = '0123456789';
417372 //検索対象の文字列郡
418373 TOKEN : array[0..5] of string = (GT+GT, GT, '>>', '>', '<a ', '<A ');
419374 var
420375 i : integer;
421376 s : string;
377+ sw: boolean;
378+ cm: boolean;
422379 No: string;
380+ oc : string;
423381 pos, pmin : integer;
424382 j : integer;
383+ ch : string;
425384 db : boolean;
385+ len : integer;
426386 rink : string;
387+
388+ procedure getNumberString;
389+ begin
390+ while (j <= len) do begin
391+ if (ByteType(s, j) = mbSingleByte) then begin
392+ //1byte文字
393+ ch := s[j];
394+ Inc(j);
395+ db := false;
396+ end else begin
397+ //2byte文字
398+ ch := ZenToHan(Copy(s, j, 2));
399+ Inc(j, 2);
400+ db := true;
401+ end;
402+
403+ if System.Pos(ch, SN) > 0 then begin
404+ No := No + ch;
405+ end else if (ch = '-') then begin
406+ if sw then break;
407+ if No = '' then break;
408+ No := No + ch;
409+ sw := true;
410+ end else begin
411+ break;
412+ end;
413+ end;
414+ end;
415+
427416 begin
428417 //s に本文を全部入れる
429418 s := PRes.FBody;
@@ -482,22 +471,43 @@ begin
482471 end;
483472 // レスアンカーが含まれていたら,が続く限りアンカーとして扱う
484473 if i <= 3 then begin
485- appendResAnchor(PRes, PResLink, DatToHTML, s );
474+ No := '';
475+ j := 1;
476+ len := Length(s);
477+ cm := checkComma(s, j, No);
478+ len := Length(s);
479+ while cm do begin
480+ oc := '';
481+ No := '';
482+ sw := false;
483+ db := false;
484+ getNumberString;
485+ //終端まで行っての終了かチェック
486+ if j <= len then begin
487+ if db then j := j - 2
488+ else j := j - 1;
489+ end;
490+ addResAnchor(PRes, PResLink, DatToHTML, s, j, No);
491+ j := 1;
492+ len := Length(s);
493+ cm := checkComma(s, j, No);
494+ end;
486495 end;
487496 end else begin
488497 //何かしら見つかったパターン
489498 j := Length(TOKEN[i]) + 1;
499+ oc := '';
500+ No := '';
501+ sw := false;
490502 db := false;
491- No := getNumberString(s, j, db, Length(s) );
503+ len := Length(s);
504+ getNumberString;
492505 //終端まで行っての終了かチェック
493- if j <= Length(s) then begin
506+ if j <= len then begin
494507 if db then j := j - 2
495508 else j := j - 1;
496509 end;
497510 addResAnchor(PRes, PResLink, DatToHTML, s, j, No);
498-
499- // , が続く限りレスアンカーとして処理する
500- appendResAnchor(PRes, PResLink, DatToHTML, s );
501511 end;
502512 end;
503513 if Length(s) > 0 then begin
@@ -506,7 +516,8 @@ begin
506516 end;
507517 function THTMLCreate.checkComma(
508518 const s : String;
509- var j : Integer
519+ var j : Integer;
520+ var No : String
510521 ) : boolean;
511522 var
512523 bType : TMbcsByteType;
@@ -521,38 +532,10 @@ begin
521532 Inc(j)
522533 else
523534 Inc(j, 2);
535+ No := '';
524536 end;
525537 end;
526538 end;
527-function THTMLCreate.appendResAnchor(
528- PAddRes: PResRec; PResLink : PResLinkRec; dat : boolean;
529- var s : String) : string;
530-var
531- No{, ch, oc}: String;
532- len, j : Integer;
533- cm, {sw,} db : Boolean;
534-
535-begin
536- No := '';
537- j := 1;
538- cm := checkComma(s, j);
539- len := Length(s);
540- while cm do begin
541- db := false;
542- No := getNumberString(s, j, db, len );
543-
544- //終端まで行っての終了かチェック
545- if j <= len then begin
546- if db then j := j - 2
547- else j := j - 1;
548- end;
549- addResAnchor(PAddRes, PResLink, dat, s, j, No);
550- j := 1;
551- len := Length(s);
552- cm := checkComma(s, j);
553- end;
554-end;
555-
556539 function THTMLCreate.addResAnchor(
557540 PAddRes: PResRec; PResLink : PResLinkRec; dat : boolean;
558541 var s : String; j : Integer; const No: String) : string;
@@ -579,6 +562,186 @@ begin
579562 Delete(s, 1, j - 1);
580563 end;
581564
565+(*************************************************************************
566+ *
567+ * from HotZonu
568+ *************************************************************************)
569+function THTMLCreate.ConvRes(const Body, Bbs, Key,
570+ ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue : string;
571+ DatToHTML: boolean = false): string;
572+const
573+ GT = '&gt;';
574+ SN = '0123456789';
575+ FORMAT_LINK = '<a href="../test/read.cgi?%s=%s&%s=%s&%s=%s&%s=%s&%s=%s" target="_blank">';
576+ //検索対象の文字列郡
577+ TOKEN : array[0..5] of string = (GT+GT, GT, '>>', '>', '<a ', '<A ');
578+var
579+ i : integer;
580+ s : string;
581+ sw: boolean;
582+ cm: boolean;
583+ No: string;
584+ oc : string;
585+ pos, pmin : integer;
586+ j : integer;
587+ ch : string;
588+ db : boolean;
589+ len : integer;
590+ rink : string;
591+ function addResAnchor(const Left :string) : string;
592+ var
593+ st,et : string;
594+ begin
595+ //終端まで行っての終了かチェック
596+ if j <= len then begin
597+ if db then j := j - 2
598+ else j := j - 1;
599+ end;
600+ //何も数字が見つからないとき
601+ if No = '' then begin
602+ Result := Left + Copy(s, 1, j - 1);
603+ end else begin
604+ separateNumber(st, et, No, '-');
605+
606+ if not DatToHTML then begin
607+ Result := Left + Format(FORMAT_LINK,
608+ [ParamBBS, Bbs, ParamKey, Key, ParamStart, st, ParamTo, et, ParamNoFirst, ParamTrue]);
609+ end else begin
610+ Result := Left + Format('<a href="#%s">', [st]);
611+ end;
612+ Result := Result + Copy(s, 1, j - 1) + '</a>';
613+ end;
614+ Delete(s, 1, j - 1);
615+ end;
616+
617+ procedure getNumberString;
618+ begin
619+ while (j <= len) do begin
620+ if (ByteType(s, j) = mbSingleByte) then begin
621+ //1byte文字
622+ ch := s[j];
623+ Inc(j);
624+ db := false;
625+ end else begin
626+ //2byte文字
627+ ch := ZenToHan(Copy(s, j, 2));
628+ Inc(j, 2);
629+ db := true;
630+ end;
631+
632+ if System.Pos(ch, SN) > 0 then begin
633+ No := No + ch;
634+ end else if (ch = '-') then begin
635+ if sw then break;
636+ if No = '' then break;
637+ No := No + ch;
638+ sw := true;
639+ end else begin
640+ break;
641+ end;
642+ end;
643+ end;
644+
645+ function checkComma : boolean;
646+ begin
647+ j := 1;
648+ len := Length(s);
649+ if ((len > 0) and (s[j] = ',')) or ((len > 1) and (ZenToHan(Copy(s, j ,2)) = ',')) then begin
650+ Result := true;
651+ if (ByteType(s, j) = mbSingleByte) then
652+ Inc(j)
653+ else
654+ Inc(j, 2);
655+ No := '';
656+ end else begin
657+ Result := false;
658+ end;
659+ end;
660+begin
661+ //s に本文を全部入れる
662+ s := Body;
663+ //結果をクリア
664+ Result := '';
665+
666+ //
667+ while Length(s) > 2 do begin
668+ pmin := Length(s) + 1;
669+ i := Length(token);
670+ for j := 0 to 5 do begin
671+ pos := AnsiPos(TOKEN[j], s);
672+ if pos <> 0 then begin
673+ if pos < pmin then begin
674+ //どれでヒットしたか保存
675+ i := j;
676+ //最小値を更新
677+ pmin := pos;
678+ end;
679+ end;
680+ end;
681+
682+ //ヒットした文字列の一つ手前まで結果にコピー
683+ Result := Result + Copy(s, 1, pmin - 1);
684+ Delete(s, 1, pmin - 1);
685+
686+ if i = 6 then begin
687+ //ヒットなし
688+ end else if (i = 4) or (i = 5) then begin
689+ //'<a ' or '<A' でヒット '</a>' or '</A>' までコピー
690+ pmin := AnsiPos('</a>' , s);
691+ pos := AnsiPos('</A>' , s);
692+ if (pmin <> 0) and (pos <> 0) then begin
693+ if (pmin > pos) then begin
694+ pmin := pos;
695+ end;
696+ end else if (pos <> 0) then begin
697+ pmin := pos;
698+ end;
699+ rink := Copy(s, 1, pmin + 3);
700+ Result := Result + rink;
701+ Delete(s, 1, pmin + 3);
702+
703+ pmin := Length(rink);
704+ i := Length(TOKEN);
705+ for j := 0 to 3 do begin
706+ pos := AnsiPos(TOKEN[j], rink);
707+ if pos <> 0 then begin
708+ if pos < pmin then begin
709+ //どれでヒットしたか保存
710+ i := j;
711+ //最小値を更新
712+ pmin := pos;
713+ end;
714+ end;
715+ end;
716+ // レスアンカーが含まれていたら,が続く限りアンカーとして扱う
717+ if i <= 3 then begin
718+ No := '';
719+ cm := checkComma;
720+ len := Length(s);
721+ while cm do begin
722+ oc := '';
723+ No := '';
724+ sw := false;
725+ db := false;
726+ getNumberString;
727+ Result := addResAnchor(Result);
728+ cm := checkComma;
729+ end;
730+ end;
731+ end else begin
732+ //何かしら見つかったパターン
733+ j := Length(TOKEN[i]) + 1;
734+ oc := '';
735+ No := '';
736+ sw := false;
737+ db := false;
738+ len := Length(s);
739+ getNumberString;
740+ Result := addResAnchor(Result);
741+ end;
742+ end;
743+ Result := Result + s;
744+end;
582745
583746 procedure THTMLCreate.ConvertResAnchor(PRes: PResRec);
584747 const
@@ -1468,8 +1631,7 @@ begin
14681631 finally
14691632 dirs.Free;
14701633 end;
1471-end;
1472-{!
1634+end;{!
14731635 \brief datファイルの一ラインを分解
14741636 \param Line datファイルを構成する 1 行
14751637 \return レス情報
Binary files a/gikoNavi.res and b/gikoNavi.res differ
--- a/readme/readme.txt
+++ b/readme/readme.txt
@@ -112,12 +112,8 @@ LICENSE
112112  IE7(beta)をインストールするとレスアンカーのポップアップで表示されない不具合の修正
113113  したらばJBBS板更新が、動作しない不具合の修正
114114  タブの自動保存で、タブがない状態も保存するように仕様を変更
115- 板一覧更新をすると、タブの保存ファイルが更新される不具合の修正
116115  巡回予約名の変更が反映されない不具合の修正
117116  履歴削除に伴う不具合の修正
118- カンマで連続するレスアンカーにリンクが設定されない不具合の修正
119- 
120-
121117
122118 2006/06/18
123119 Version バタ52
Show on old repository browser