uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
- ComCtrls, IniFiles, ShellAPI, ActnList, Math,
+ ComCtrls, {IniFiles,} ShellAPI, ActnList, Math,
{$IF Defined(DELPRO) }
SHDocVw,
MSHTML,
SHDocVw_TLB,
MSHTML_TLB,
{$IFEND}
- {HttpApp,} YofUtils, URLMon, IdGlobal, IdURI, {Masks,}
+ {HttpApp,} URLMon, IdGlobal, IdURI, {Masks,}
Setting, BoardGroup, gzip, Dolib, bmRegExp, AbonUnit,
- MojuUtils, ExternalBoardManager, ExternalBoardPlugInMain,
- Sort, GikoBayesian;
+ ExternalBoardManager, ExternalBoardPlugInMain,
+ GikoBayesian, GikoMessage;
type
TVerResourceKey = (
- vrComments, // \83R\83\81\83\93\83g
- vrCompanyName, // \89ï\8eÐ\96¼
- vrFileDescription, // \90à\96¾
- vrFileVersion, // \83t\83@\83C\83\8b\83o\81[\83W\83\87\83\93
- vrInternalName, // \93à\95\94\96¼
- vrLegalCopyright, // \92\98\8dì\8c
- vrLegalTrademarks, // \8f¤\95W
- vrOriginalFilename, // \90³\8e®\83t\83@\83C\83\8b\96¼
- vrPrivateBuild, // \83v\83\89\83C\83x\81[\83g\83r\83\8b\83h\8fî\95ñ
- vrProductName, // \90»\95i\96¼
- vrProductVersion, // \90»\95i\83o\81[\83W\83\87\83\93
- vrSpecialBuild); // \83X\83y\83V\83\83\83\8b\83r\83\8b\83h\8fî\95ñ
-
- //BBS\83^\83C\83v
+ vrComments, //!< \83R\83\81\83\93\83g
+ vrCompanyName, //!< \89ï\8eÐ\96¼
+ vrFileDescription, //!< \90à\96¾
+ vrFileVersion, //!< \83t\83@\83C\83\8b\83o\81[\83W\83\87\83\93
+ vrInternalName, //!< \93à\95\94\96¼
+ vrLegalCopyright, //!< \92\98\8dì\8c
+ vrLegalTrademarks, //!< \8f¤\95W
+ vrOriginalFilename, //!< \90³\8e®\83t\83@\83C\83\8b\96¼
+ vrPrivateBuild, //!< \83v\83\89\83C\83x\81[\83g\83r\83\8b\83h\8fî\95ñ
+ vrProductName, //!< \90»\95i\96¼
+ vrProductVersion, //!< \90»\95i\83o\81[\83W\83\87\83\93
+ vrSpecialBuild); //!< \83X\83y\83V\83\83\83\8b\83r\83\8b\83h\8fî\95ñ
+
+ //! BBS\83^\83C\83v
TGikoBBSType = (gbt2ch);
- //\83\8d\83O\83^\83C\83v
+ //! \83\8d\83O\83^\83C\83v
TGikoLogType = (glt2chNew, glt2chOld);
- //\83\81\83b\83Z\81[\83W\83A\83C\83R\83\93
+ //! \83\81\83b\83Z\81[\83W\83A\83C\83R\83\93
TGikoMessageIcon = (gmiOK, gmiSAD, gmiNG, gmiWhat, gmiNone);
- //URL\83I\81[\83v\83\93\83u\83\89\83E\83U\83^\83C\83v
+ //! URL\83I\81[\83v\83\93\83u\83\89\83E\83U\83^\83C\83v
TGikoBrowserType = (gbtIE, gbtUserApp, gbtAuto);
Pos: Integer;
end;
- //\83C\83\93\83f\83b\83N\83X\83t\83@\83C\83\8b\83\8c\83R\81[\83h
+ //! \83C\83\93\83f\83b\83N\83X\83t\83@\83C\83\8b\83\8c\83R\81[\83h
TIndexRec = record
FNo: Integer;
FFileName: string;
FLastModified: TDateTime;
FKokomade: Integer;
FNewReceive: Integer;
- FMishiyou: Boolean; //\96¢\8eg\97p
+ FMishiyou: Boolean; //!< \96¢\8eg\97p
FUnRead: Boolean;
FScrollTop: Integer;
//Index Ver 1.01
FAgeSage: TGikoAgeSage;
end;
- //\83T\83u\83W\83F\83N\83g\83\8c\83R\81[\83h
+ //! \83T\83u\83W\83F\83N\83g\83\8c\83R\81[\83h
TSubjectRec = record
FFileName: string;
FTitle: string;
FCount: Integer;
end;
- //\83\8c\83X\83\8c\83R\81[\83h
+ //! \83\8c\83X\83\8c\83R\81[\83h\82Ö\82Ì\83|\83C\83\93\83^
+ PResRec = ^TResRec;
+
+ //! \83\8c\83X\83\8c\83R\81[\83h
TResRec = record
FTitle: string;
FMailTo: string;
FType: TGikoLogType;
end;
- //URLPath\83\8c\83R\81[\83h
+ //! URLPath\83\8c\83R\81[\83h
TPathRec = record
- FBBS: string; //BBSID
- FKey: string; //ThreadID
- FSt: Int64; //\8aJ\8en\83\8c\83X\94Ô
- FTo: Int64; //\8fI\97¹\83\8c\83X\94Ô
- FFirst: Boolean; //>>1\82Ì\95\\8e¦
- FStBegin: Boolean; //1\81`\95\\8e¦
- FToEnd: Boolean; //\81`\8dÅ\8cã\82Ü\82Å\95\\8e¦
- FDone: Boolean; //\90¬\8c÷
- FNoParam: Boolean; //\83\8c\83X\94Ô\83p\83\89\83\81\81[\83^\82È\82µ
+ FBBS: string; //!< BBSID
+ FKey: string; //!< ThreadID
+ FSt: Int64; //!< \8aJ\8en\83\8c\83X\94Ô
+ FTo: Int64; //!< \8fI\97¹\83\8c\83X\94Ô
+ FFirst: Boolean; //!< >>1\82Ì\95\\8e¦
+ FStBegin: Boolean; //!< 1\81`\95\\8e¦
+ FToEnd: Boolean; //!< \81`\8dÅ\8cã\82Ü\82Å\95\\8e¦
+ FDone: Boolean; //!< \90¬\8c÷
+ FNoParam: Boolean; //!< \83\8c\83X\94Ô\83p\83\89\83\81\81[\83^\82È\82µ
end;
- //MessageList
- TGikoMessageListType = (gmLogout, gmLogin, gmForceLogin, gmSureItiran,
- gmUnKnown, gmSureSyutoku, gmSureDiff, gmNotMod, gmAbort, gmError,
- gmNewRes, gmNewSure, gmResError, gmSureError);
-
TGikoSys = class(TObject)
private
{ Private \90é\8c¾ }
FAWKStr: TAWKStr;
FResRange : Longint;
FBayesian : TGikoBayesian; //!< \83x\83C\83W\83A\83\93\83t\83B\83\8b\83^
- FVersion : String; //\83t\83@\83C\83\8b\83o\81[\83W\83\87\83\93
-// FExitWrite: TStringList;
-// function StrToFloatDef(s: string; Default: Double): Double;
- function SetUserOptionalStyle(): string;
+ FVersion : String; //!< \83t\83@\83C\83\8b\83o\81[\83W\83\87\83\93
+ FGikoMessage: TGikoMessage;
+ //! \82 \82é\83Z\83p\83\8c\81[\83^\82Å\8bæ\90Ø\82ç\82ê\82½\95¶\8e\9a\97ñ\82©\82ç\82\8e\94Ô\96Ú\82Ì\95¶\8e\9a\97ñ\82ð\8eæ\82è\8fo\82·
+ function ChooseString(const Text, Separator: string; Index: integer): string;
+ //! \88ê\8e\9e\83t\83@\83C\83\8b\82©\82ç\82Ì\95\9c\8b\8c
+ procedure RestoreThreadData(Board: TBoard);
public
{ Public \90é\8c¾ }
FAbon : TAbon;
destructor Destroy; override;
property ResRange : Longint read FResRange write FResRange;
- //\83o\81[\83W\83\87\83\93\8fî\95ñ
+ //! \83o\81[\83W\83\87\83\93\8fî\95ñ
property Version : String read FVersion;
// function MsgBox(Msg: string; Title: string; Flags: Longint): integer; overload;
// function MsgBox(Handle: THandle; Msg: string; Title: string; Flags: Longint): integer; overload;
function GetUserAgent: string;
function GetSambaFileName : string;
+ function GetMainKeyFileName : String;
+ function GetEditorKeyFileName: String;
+ function GetInputAssistFileName: String;
procedure ReadSubjectFile(Board: TBoard);
procedure CreateThreadDat(Board: TBoard);
procedure WriteThreadDat(Board: TBoard);
procedure GetFileList(Path: string; Mask: string; var List: TStringList; IsPathAdd: Boolean); overload;//\83T\83u\83t\83H\83\8b\83_\82Í\8c\9f\8dõ\82µ\82È\82¢
procedure GetDirectoryList(Path: string; Mask: string; List: TStringList; SubDir: Boolean);
- procedure CreateHTML2(doc: Variant; ThreadItem: TThreadItem; var sTitle: string);
- procedure CreateHTML3(var html: TStringList; ThreadItem: TThreadItem; var sTitle: string);
- function AddAnchorTag(s: string): string;
-
function DivideSubject(Line: string): TSubjectRec;
- function DivideStrLine(Line: string): TResRec;
-
property Setting: TSetting read FSetting write FSetting;
property Dolib: TDolib read FDolib write FDolib;
function GetFileSize(FileName : string) : longint;
function GetFileLineCount(FileName : string): longint;
- function Get2chDate(aDate: TDateTime): string;
function IntToDateTime(val: Int64): TDateTime;
function DateTimeToInt(ADate: TDateTime): Int64;
function RemoveToken(var s:string; const delimiter:string):string;
function GetTokenIndex(s: string; delimiter: string; index: Integer): string;
- function DeleteLink(const s: string): string;
function GetShortName(const LongName: string; ALength: integer): string;
- 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, FullURL : string): string; overload;
- function ConvertResAnchor(res: string): string;
function BoolToInt(b: Boolean): Integer;
function IntToBool(i: Integer): Boolean;
function GzipDecompress(ResStream: TStream; ContentEncoding: string): string;
- procedure LoadKeySetting(ActionList: TActionList);
- procedure SaveKeySetting(ActionList: TActionList);
- procedure LoadEditorKeySetting(ActionList: TActionList);
- procedure SaveEditorKeySetting(ActionList: TActionList);
-
+ procedure LoadKeySetting(ActionList: TActionList; FileName: String);
+ procedure SaveKeySetting(ActionList: TActionList; FileName: String);
procedure CreateProcess(const AppPath: string; const Param: string);
procedure OpenBrowser(URL: string; BrowserType: TGikoBrowserType);
function HTMLDecode(const AStr: String): String;
procedure GetPopupResNumber(URL : string; var stRes, endRes : Int64);
- // \83X\83L\83\93\82ð\93Ç\82Ý\8d\9e\82Ý\81A\92l\82ð\92u\8a·\82·\82é
- function LoadFromSkin( fileName: string; ThreadItem: TThreadItem; SizeByte: Integer ): string;
- // \83\8c\83X\82Ì\92l\82ð\92u\8a·\82·\82é
- function SkinedRes( skin: string; Res: TResRec; No: string ): string;
-
- //Samba24\82Ì\83t\83@\83C\83\8b\82ª\91¶\8dÝ\82·\82é\82©\81B\91¶\8dÝ\82µ\82È\82¢\8fê\8d\87\81Adefault\83t\83@\83C\83\8b\82ðrename\82·\82é
- procedure SambaFileExists();
-
property Bayesian : TGikoBayesian read FBayesian write FBayesian;
- function GetSameIDResAnchor(const AID : string; ThreadItem: TThreadItem; limited: boolean):string; overload;
- function GetSameIDResAnchor(AIDNum : Integer; ThreadItem: TThreadItem; limited: boolean):string; overload;
+ function GetSameIDResAnchor(const AID : string; ThreadItem: TThreadItem; limited: Integer):string; overload;
+ function GetSameIDResAnchor(AIDNum : Integer; ThreadItem: TThreadItem; limited: Integer):string; overload;
procedure GetSameIDRes(const AID : string; ThreadItem: TThreadItem;var body: TStringList); overload;
procedure GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList); overload;
function GetSameIDResCount(const AID : string; ThreadItem: TThreadItem):Integer; overload;
//\88ø\90\94\82ª\81A\93ú\95t\82Å\82à\8e\9e\8d\8f\82Å\82à\82È\82¢\82±\82Æ\82ð\92²\82×\82é
function NotDateorTimeString(const AStr : string): boolean;
- //\88ø\90\94\82É\91\97\82ç\82ê\82Ä\82«\82½\93ú\95t/ID\95\94\82ÉBE\82Ì\95¶\8e\9a\97ñ\82ª\82 \82Á\82½\82ç\81A\83v\83\8d\83t\83@\83C\83\8b\82Ö\82Ì\83\8a\83\93\83N\82ð\92Ç\89Á
+ //! \88ø\90\94\82É\91\97\82ç\82ê\82Ä\82«\82½\93ú\95t/ID\95\94\82ÉBE\82Ì\95¶\8e\9a\97ñ\82ª\82 \82Á\82½\82ç\81A\83v\83\8d\83t\83@\83C\83\8b\82Ö\82Ì\83\8a\83\93\83N\82ð\92Ç\89Á
function AddBeProfileLink(AID : string; ANum: Integer): string;
- //\83o\81[\83W\83\87\83\93\8fî\95ñ\82Ì\8eæ\93¾
+ //! \83o\81[\83W\83\87\83\93\8fî\95ñ\82Ì\8eæ\93¾
function GetVersionInfo(KeyWord: TVerResourceKey): string;
- //Plugin\82Ì\8fî\95ñ\82Ì\8eæ\93¾
+ //! Plugin\82Ì\8fî\95ñ\82Ì\8eæ\93¾
function GetPluginsInfo(): string;
- //IE\82Ì\83o\81[\83W\83\87\83\93\8fî\95ñ\82Ì\8eæ\93¾
+ //! IE\82Ì\83o\81[\83W\83\87\83\93\8fî\95ñ\82Ì\8eæ\93¾
function GetIEVersion: string;
+ function SetUserOptionalStyle(): string;
+ //! \83M\83R\83i\83r\82Ì\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é
+ procedure SetGikoMessage;
+ //! \83M\83R\83i\83r\82Ì\83\81\83b\83Z\81[\83W\82ð\8eæ\93¾\82·\82é
+ function GetGikoMessage(MesType: TGikoMessageListType): String;
+ //! GMT\82Ì\8e\9e\8d\8f\82ðTDateTime\82É\95Ï\8a·\82·\82é
+ function DateStrToDateTime(const DateStr: string): TDateTime;
+ //! User32.dll\82ª\97\98\97p\82Å\82«\82é\82©
+ function CanUser32DLL: Boolean;
+ //! OE\88ø\97p\95\84\8eæ\93¾
+ function GetOEIndentChar : string;
+ //! \92u\8a·\90Ý\92è\83t\83@\83C\83\8b\8eæ\93¾
+ function GetReplaceFileName: String;
end;
var
ZERO_DATE: Integer = 25569;
BETA_VERSION_NAME_E = 'beta';
BETA_VERSION_NAME_J = 'ÊÞÀ';
- BETA_VERSION = 50;
- BETA_VERSION_BUILD = ''; //debug\94Å\82È\82Ç
+ BETA_VERSION = 55;
+ BETA_VERSION_BUILD = ''; //!< debug\94Å\82È\82Ç
APP_NAME = 'gikoNavi';
BE_PHP_URL = 'http://be.2ch.net/test/p.php?i=';
implementation
uses
- Giko, RoundData, Favorite, Registry;
+ Giko, RoundData, Favorite, Registry, HTMLCreate, MojuUtils, Sort, YofUtils,
+ IniFiles, DateUtils;
const
FOLDER_INDEX_VERSION = '1.01';
'ProductVersion',
'SpecialBuild');
-(*************************************************************************
- *GikoSys\83R\83\93\83X\83g\83\89\83N\83^
- *************************************************************************)
+// *************************************************************************
+//! GikoSys\83R\83\93\83X\83g\83\89\83N\83^
+// *************************************************************************
constructor TGikoSys.Create;
begin
FSetting := TSetting.Create;
CreateDir(GetConfigDir);
end;
FAbon := TAbon.Create;
+ FAbon.IgnoreKana := FSetting.IgnoreKana;
FAbon.Setroot(GetConfigDir+NGWORDs_DIR_NAME);
FAbon.GoHome;
FAbon.ReturnNGwordLineNum := FSetting.ShowNGLinesNum;
FAbon.SetNGResAnchor := FSetting.AddResAnchor;
- FAbon.DeleteSyria := FSetting.DeleteSyria;
+ FAbon.DeleteSyria := FSetting.DeleteSyria;
FAbon.Deleterlo := FSetting.AbonDeleterlo;
FAbon.Replaceul := FSetting.AbonReplaceul;
FAbon.AbonPopupRes := FSetting.PopUpAbon;
FSelectResFilter := TAbon.Create;
+ FSelectResFilter.IgnoreKana := True;
// \8di\82è\8d\9e\82Þ\82Æ\82«\82Í\8bÉ\97Í\88ê\97\97\82ª\8c©\82ç\82ê\82é\82Ù\82¤\82ª\82¢\82¢\82Ì\82Å\91¼\82Í\8a®\91S\82É\8dí\8f\9c
FSelectResFilter.AbonString := '';
//
FVersion := Trim(GetVersionInfo(vrFileVersion));
FBayesian := TGikoBayesian.Create;
//FBoardURLList := TStringList.Create;
+ //\83\81\83b\83Z\81[\83W\82Ì\8dì\90¬
+ FGikoMessage := TGikoMessage.Create;
end;
-(*************************************************************************
- *GikoSys\83f\83X\83g\83\89\83N\83^
- *************************************************************************)
+// *************************************************************************
+//! GikoSys\83f\83X\83g\83\89\83N\83^
+// *************************************************************************
destructor TGikoSys.Destroy;
var
i: Integer;
FDolib.Free;
FAbon.Free;
FSelectResFilter.Free;
+ FGikoMessage.Free;
//FBoardURLList.Free;
//\83e\83\93\83|\83\89\83\8aHTML\82ð\8dí\8f\9c
FileList := TStringList.Create;
inherited;
end;
-(*************************************************************************
- *\95¶\8e\9a\97ñ\90\94\8e\9a\83`\83F\83b\83N
- *************************************************************************)
+{!
+\brief \95¶\8e\9a\97ñ\90\94\8e\9a\83`\83F\83b\83N
+\param s \83`\83F\83b\83N\82·\82é\95¶\8e\9a\97ñ
+\return s \82ª\95\84\8d\86\95t\82«\90®\90\94\82Æ\82µ\82Ä\94F\8e¯\89Â\94\\82È\82ç True
+}
{$HINTS OFF}
function TGikoSys.IsNumeric(s: string): boolean;
var
end;
{$HINTS ON}
-(*************************************************************************
- *\95¶\8e\9a\97ñ\95\82\93®\8f¬\90\94\93_\90\94\8e\9a\83`\83F\83b\83N
- *************************************************************************)
+{!
+\brief \95¶\8e\9a\97ñ\95\82\93®\8f¬\90\94\93_\90\94\8e\9a\83`\83F\83b\83N
+\param s \83`\83F\83b\83N\82·\82é\95¶\8e\9a\97ñ
+\return s \82ª\95\84\8d\86\95t\82«\95\82\93®\8f¬\90\94\82Æ\82µ\82Ä\94F\8e¯\89Â\94\\82È\82ç True
+}
function TGikoSys.IsFloat(s: string): boolean;
var
v: Extended;
Result := TextToFloat(PChar(s), v, fvExtended);
end;
-(*************************************************************************
- *\83{\81[\83h\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
- *************************************************************************)
+// *************************************************************************
+//! \83{\81[\83h\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
+// *************************************************************************
function TGikoSys.GetBoardFileName: string;
begin
Result := Setting.GetBoardFileName;
end;
-(*************************************************************************
- *\83{\81[\83h\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
- *************************************************************************)
+// *************************************************************************
+//! \83{\81[\83h\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
+// *************************************************************************
function TGikoSys.GetCustomBoardFileName: string;
begin
Result := Setting.GetCustomBoardFileName;
end;
-(*************************************************************************
- *\83e\83\93\83|\83\89\83\8a\83t\83H\83\8b\83_\81[\96¼\8eæ\93¾
- *************************************************************************)
+// *************************************************************************
+//! \83e\83\93\83|\83\89\83\8a\83t\83H\83\8b\83_\81[\96¼\8eæ\93¾
+// *************************************************************************
function TGikoSys.GetHtmlTempFileName: string;
begin
Result := Setting.GetHtmlTempFileName;
end;
-(*************************************************************************
- *\8eÀ\8ds\83t\83@\83C\83\8b\83t\83H\83\8b\83_\8eæ\93¾
- *************************************************************************)
+// *************************************************************************
+//! \8eÀ\8ds\83t\83@\83C\83\8b\83t\83H\83\8b\83_\8eæ\93¾
+// *************************************************************************
function TGikoSys.GetAppDir: string;
begin
Result := Setting.GetAppDir;
end;
-(*************************************************************************
- *TempHtml\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
- *************************************************************************)
+// *************************************************************************
+//! TempHtml\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
+// *************************************************************************
function TGikoSys.GetTempFolder: string;
begin
Result := Setting.GetTempFolder;
end;
-(*************************************************************************
- *sent.ini\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
- *************************************************************************)
+// *************************************************************************
+//! sent.ini\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
+// *************************************************************************)
function TGikoSys.GetSentFileName: string;
begin
Result := Setting.GetSentFileName;
end;
-(*************************************************************************
- *outbox.ini\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
- *************************************************************************)
+// *************************************************************************
+//! outbox.ini\83t\83@\83C\83\8b\96¼\8eæ\93¾\81i\83p\83X\81{\83t\83@\83C\83\8b\96¼\81j
+// *************************************************************************
function TGikoSys.GetOutBoxFileName: string;
begin
Result := Setting.GetOutBoxFileName;
end;
-(*************************************************************************
- *Config\83t\83H\83\8b\83_\8eæ\93¾
- *************************************************************************)
+// *************************************************************************
+//! Config\83t\83H\83\8b\83_\8eæ\93¾
+// *************************************************************************
function TGikoSys.GetConfigDir: string;
begin
Result := Setting.GetConfigDir;
end;
+//! \83X\83^\83C\83\8b\83V\81[\83g\83t\83H\83\8b\83_
function TGikoSys.GetStyleSheetDir: string;
begin
Result := Setting.GetStyleSheetDir;
end;
+//! \83X\83L\83\93\83t\83H\83\8b\83_
function TGikoSys.GetSkinDir: string;
begin
Result := Setting.GetSkinDir;
end;
+//! Skin:\83w\83b\83_\82Ì\83t\83@\83C\83\8b\96¼
function TGikoSys.GetSkinHeaderFileName: string;
begin
Result := Setting.GetSkinHeaderFileName;
end;
+//! Skin:\83t\83b\83^\82Ì\83t\83@\83C\83\8b\96¼
function TGikoSys.GetSkinFooterFileName: string;
begin
Result := Setting.GetSkinFooterFileName;
end;
+//! Skin:\90V\92\85\83\8c\83X\82Ì\83t\83@\83C\83\8b\96¼
function TGikoSys.GetSkinNewResFileName: string;
begin
Result := Setting.GetSkinNewResFileName;
end;
+//! Skin:\94ñ\90V\92\85\83\8c\83X\82Ì\83t\83@\83C\83\8b\96¼
function TGikoSys.GetSkinResFileName: string;
begin
Result := Setting.GetSkinResFileName;
end;
+//! Skin:\82µ\82¨\82è(\82±\82±\82Ü\82Å\93Ç\82ñ\82¾)\82Ì\83t\83@\83C\83\8b\96¼
function TGikoSys.GetSkinBookmarkFileName: string;
begin
Result := Setting.GetSkinBookmarkFileName;
end;
+//! Skin:\82µ\82¨\82è(\90V\92\85\83\8c\83X)\82Ì\83t\83@\83C\83\8b\96¼
function TGikoSys.GetSkinNewmarkFileName: string;
begin
Result := Setting.GetSkinNewmarkFileName;
end;
-// UserAgent\8eæ\93¾
+//! UserAgent\8eæ\93¾
function TGikoSys.GetUserAgent: string;
begin
if Dolib.Connected then begin
end;
end;
-(*************************************************************************
- *\82Q\82¿\82á\82ñ\82Ë\82é\95û\8e®\8e\9e\8d\8f\8eæ\93¾
- *************************************************************************)
-function TGikoSys.Get2chDate(aDate: TDateTime): string;
-var
- d2: TDateTime;
-begin
- d2 := aDate - EncodeTime(9, 0, 0, 0);
- Result := FloatToStr(Trunc((d2 - ZERO_DATE) * 86400));
-end;
-
-//val\82Í\81A1970/1/1/ 00:00:00 \82©\82ç\82Ì\8co\89ß\8e\9e\8aÔ
+{!
+\brief \8co\89ß\95b\82ð TDateTime \82É\95Ï\8a·
+\param val 1970/1/1/ 00:00:00 \82©\82ç\82Ì\8co\89ß\95b
+\return val \82ð\8e¦\82· TDateTime
+}
function TGikoSys.IntToDateTime(val: Int64): TDateTime;
begin
Result := ZERO_DATE + val / 86400.0;
end;
-//ADate\82ð1970/1/1/ 00:00:00 \82©\82ç\82Ì\8co\89ß\8e\9e\8aÔ\82É\95Ï\8a·\82·\82é
+
+{!
+\brief TDateTime \82ð\8co\89ß\95b\82É\95Ï\8a·
+\param ADate \95Ï\8a·\82·\82é\8e\9e\8d\8f
+\return 1970/1/1/ 00:00:00 \82©\82ç\82Ì\8co\89ß\95b
+}
function TGikoSys.DateTimeToInt(ADate: TDateTime): Int64;
begin
Result := Trunc((ADate - ZERO_DATE) * 86400);
end;
-(*************************************************************************
- *Subject\83t\83@\83C\83\8bRead
- *************************************************************************)
+{!
+\brief Subject\83t\83@\83C\83\8bRead
+\param Board \83X\83\8c\88ê\97\97\82ð\8eæ\93¾\82·\82é\94Â
+}
procedure TGikoSys.ReadSubjectFile(Board: TBoard);
var
ThreadItem: TThreadItem;
FileName: string;
FileList: TStringList;
- TmpFileList: TStringList;
Index: Integer;
sl: TStringList;
i: Integer;
Rec: TIndexRec;
UnRead: Integer;
- ini: TMemIniFile;
ResRec: TResRec;
-// RoundItem: TRoundItem;
-// idx: Integer;
usePlugIn : Boolean;
- tmpStr: string;
BoardPath : String;
server : String;
islog : Boolean;
- //protocol, host, path, document, port, bookmark : string;
- //is2ch : Boolean;
+ urlHead: String;
{*
FavoThreadItem : TFavoriteThreadItem;
Node: TTreeNode;
Exit;
Board.Clear;
UnRead := 0;
- //is2ch := false;
usePlugIn := Board.IsBoardPlugInAvailable;
server := UrlToServer( Board.URL );
- //is2ch := Is2chHost(server);
FileName := Board.GetFolderIndexFileName;
FileList := TStringList.Create;
FileList.Sorted := True;
FileList.BeginUpdate;
- TmpFileList := TStringList.Create;
- TmpFileList.Sorted := True;
- TmpFileList.BeginUpdate;
//IsLogFile\97pDAT\83t\83@\83C\83\8b\83\8a\83X\83g
GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.dat', FileList, False);
FileList.EndUpdate;
- //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\97pTmp\83t\83@\83C\83\8b\83\8a\83X\83g
- GetFileList(ExtractFileDir(Board.GetFolderIndexFileName), '*.tmp', TmpFileList, False);
- TmpFileList.EndUpdate;
// \8fd\95¡\82ð\96h\82®
Board.BeginUpdate;
try
if FileExists(FileName) then begin
sl.LoadFromFile(FileName);
-
+ // \83X\83\8c\83b\83h\82Å\8b¤\92Ê\82ÌURL\95\94
+ if Board.is2ch then begin
+ urlHead := server + 'test/read.cgi/' + Board.BBSID + '/';
+ end else begin
+ urlHead := server + 'test/read.cgi?bbs=' + Board.BBSID + '&key=';
+ end;
//\82Q\8ds\96Ú\82©\82ç\81i\82P\8ds\96Ú\82Í\83o\81[\83W\83\87\83\93\81j
for i := sl.Count - 1 downto 1 do begin
Rec := ParseIndexLine(sl[i]);
ThreadItem := TThreadItem.Create(
nil,
Board,
- server + 'test/read.cgi/' + Board.BBSID + '/' + ChangeFileExt( Rec.FFileName, '' ) + '/l50',
+ urlHead + ChangeFileExt( Rec.FFileName, '' ) + '/l50',
islog,
Rec.FFileName
);
ThreadItem := TThreadItem.Create(
nil,
Board,
- server + 'test/read.cgi?bbs=' + Board.BBSID + '&key=' + ChangeFileExt( Rec.FFileName, '' ) + '&ls=50',
+ urlHead + ChangeFileExt( Rec.FFileName, '' ) + '&ls=50',
islog,
Rec.FFileName
);
ThreadItem.No := Rec.FNo;
ThreadItem.FileName := Rec.FFileName;
- ThreadItem.Title := Rec.FTitle;
- //ThreadItem.ShortTitle := CustomStringReplace(ZenToHan(ThreadItem.Title), ' ', '');
+ ThreadItem.Title := MojuUtils.UnSanitize(Rec.FTitle);
ThreadItem.Count := Rec.FCount;
ThreadItem.Size := Rec.FSize;
-// ThreadItem.RoundNo := Rec.FRoundNo;
ThreadItem.RoundDate := Rec.FRoundDate;
ThreadItem.LastModified := Rec.FLastModified;
ThreadItem.Kokomade := Rec.FKokomade;
ThreadItem.NewReceive := Rec.FNewReceive;
-// ThreadItem.Round := Rec.FRound;
ThreadItem.UnRead := Rec.FUnRead;
ThreadItem.ScrollTop := Rec.FScrollTop;
ThreadItem.AllResCount := Rec.FAllResCount;
Node := FavoriteDM.TreeView.Items.AddChildObject( FavoriteDM.TreeView.Items.Item[0], ThreadItem.Title, FavoThreadItem);
*}
- {//\8f\84\89ñ\83\8a\83X\83g\82É\91¶\8dÝ\82µ\82½\82ç\8f\84\89ñ\83t\83\89\83O\83Z\83b\83g
- if ThreadItem.IsLogFile then begin
- idx := RoundList.Find(ThreadItem);
- if idx <> -1 then begin
- RoundItem := RoundList.Items[idx, grtItem];
- ThreadItem.RoundName := RoundItem.RoundName;
- ThreadItem.Round := True;
- end;
- end;
- }
-
ThreadItem.EndUpdate;
Board.Add(ThreadItem);
Board.BoardPlugIn,
Board,
Board.BoardPlugIn.FileName2ThreadURL( DWORD( Board ), FileList[i] ) );
- ResRec := DivideStrLine(Board.BoardPlugIn.GetDat( DWORD( ThreadItem ), 1 ));
+ THTMLCreate.DivideStrLine(Board.BoardPlugIn.GetDat( DWORD( ThreadItem ), 1 ), @ResRec);
end else begin
ThreadItem := TThreadItem.Create(
nil,
Board,
Get2chBoard2ThreadURL( Board, ChangeFileExt( FileList[i], '' ) ) );
- ResRec := DivideStrLine(ReadThreadFile(FileName, 1));
+ THTMLCreate.DivideStrLine(ReadThreadFile(FileName, 1), @ResRec);
end;
ThreadItem.BeginUpdate;
ThreadItem.AllResCount := ThreadItem.Count;
ThreadItem.NewResCount := ThreadItem.Count;
ThreadItem.Size := GetFileSize(FileName) - ThreadItem.Count;//1byte\82¸\82ê\82é\82Æ\82«\82ª\82 \82é\82¯\82Ç\82»\82ê\82Í\82 \82«\82ç\82ß\82é
- ThreadItem.RoundDate := ZERO_DATE;
- ThreadItem.LastModified := ZERO_DATE;
+ ThreadItem.RoundDate := FileDateToDateTime( FileAge( FileName ) );
+ ThreadItem.LastModified := ThreadItem.RoundDate;
ThreadItem.Kokomade := -1;
- ThreadItem.NewReceive := ThreadItem.Count;
+ ThreadItem.NewReceive := 0;
ThreadItem.ParentBoard := Board;
ThreadItem.IsLogFile := True;
ThreadItem.Round := False;
Board.Add(ThreadItem);
end;
Board.EndUpdate;
-
- //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\83`\83F\83b\83N
- for i := TmpFileList.Count - 1 downto 0 do begin
- //if TmpFileList.Count <> 0 then begin
- ThreadItem := Board.FindThreadFromFileName(ChangeFileExt(TmpFileList[i], '.dat'));
- if ThreadItem <> nil then begin
- //if TmpFileList.Find(ChangeFileExt(ThreadItem.FileName, '.tmp'), Index) then begin
- ini := TMemIniFile.Create(Boardpath + TmpFileList[i]);
- try
- tmpStr := ini.ReadString('Setting', 'RoundDate', DateTimeToStr(ZERO_DATE));
- ThreadItem.RoundDate := ConvertDateTimeString(tmpStr);
-
- tmpStr := ini.ReadString('Setting', 'LastModified', DateTimeToStr(ZERO_DATE));
- ThreadItem.LastModified := ConvertDateTimeString(tmpStr);
- ThreadItem.Count := ini.ReadInteger('Setting', 'Count', 0);
- ThreadItem.NewReceive := ini.ReadInteger('Setting', 'NewReceive', 0);
-
- ThreadItem.Size := ini.ReadInteger('Setting', 'Size', 0);
- if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
- try
- ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
- except
- end;
- end;
-
- //\8f\84\89ñ\82Ì\90Ý\92è\82ÍRoundData\82Ì\95û\82ª\82â\82é\82©\82ç\8f\9f\8eè\82É\90Ý\92è\82µ\82Ä\82Í\83_\83\81\81I\81@by \82à\82¶\82ã
- //ThreadItem.Round := ini.ReadBool('Setting', 'Round', False);
- //ThreadItem.RoundName := ini.ReadString('Setting', 'RoundName', ThreadItem.RoundName);
- ThreadItem.UnRead := False;//ini.ReadBool('Setting', 'UnRead', False);
- ThreadItem.ScrollTop := ini.ReadInteger('Setting', 'ScrollTop', 0);
- ThreadItem.AllResCount := ini.ReadInteger('Setting', 'AllResCount', ThreadItem.Count);
- ThreadItem.NewResCount := ini.ReadInteger('Setting', 'NewResCount', 0);
- ThreadItem.AgeSage := TGikoAgeSage(ini.ReadInteger('Setting', 'AgeSage', Ord(gasNone)));
- finally
- ini.Free;
- end;
- DeleteFile(Boardpath + TmpFileList[i]);
- end;
- end;
-
+
+ //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\83`\83F\83b\83N
+ RestoreThreadData( Board );
finally
sl.Free;
FileList.Free;
- TmpFileList.Free;
Board.Sorted := False;
end;
Board.IsThreadDatRead := True;
end;
-(*************************************************************************
- *\83X\83\8c\83b\83h\83C\83\93\83f\83b\83N\83X\83t\83@\83C\83\8b(Folder.idx)\8dì\90¬
- *************************************************************************)
+{!
+\brief \83X\83\8c\83b\83h\83C\83\93\83f\83b\83N\83X\83t\83@\83C\83\8b(Folder.idx)\8dì\90¬
+\param Board Folder.idx \82ð\8dì\90¬\82·\82é\94Â
+}
procedure TGikoSys.CreateThreadDat(Board: TBoard);
var
i: integer;
'%s'#1'%x'#1'%x'#1'%x'#1'%x'#1'%x',
[cnt, //\94Ô\8d\86
Rec.FFileName, //\83t\83@\83C\83\8b\96¼
- Rec.FTitle, //\83^\83C\83g\83\8b
+ MojuUtils.Sanitize(Rec.FTitle), //\83^\83C\83g\83\8b
Rec.FCount, //\83J\83E\83\93\83g
0, //size
0, //RoundDate
end;
end;
-(*************************************************************************
- *\83X\83\8c\83b\83h\83C\83\93\83f\83b\83N\83X(Thread.dat)\8f\91\82«\8d\9e\82Ý
- *Public
- *************************************************************************)
+{!
+\brief \83X\83\8c\83b\83h\83C\83\93\83f\83b\83N\83X(Thread.dat)\8f\91\82«\8d\9e\82Ý
+\param Thread.dat \82ð\8dì\90¬\82·\82é\94Â
+}
procedure TGikoSys.WriteThreadDat(Board: TBoard);
//const
// Values: array[Boolean] of string = ('0', '1');
sl.Add(FOLDER_INDEX_VERSION);
// \83X\83\8c\94Ô\8d\86\95Û\91¶\82Ì\82½\82ß\83\\81[\83g
- Sort.SortNoFlag := true;
- Sort.SortOrder := true;
- Sort.SortIndex := 0;
+ Sort.SetSortNoFlag(true);
+ Sort.SetSortOrder(true);
+ Sort.SetSortIndex(0);
//Sort.SortNonAcquiredCountFlag := GikoSys.Setting.NonAcquiredCount;
Board.CustomSort(ThreadItemSortProc);
'%s'#1'%x'#1'%x'#1'%x'#1'%x'#1'%x',
[Board.Items[i].No, //\94Ô\8d\86
Board.Items[i].FileName, //\83t\83@\83C\83\8b\96¼
- Board.Items[i].Title, //\83^\83C\83g\83\8b
+ MojuUtils.Sanitize(Board.Items[i].Title), //\83^\83C\83g\83\8b
Board.Items[i].Count, //\83J\83E\83\93\83g
Board.Items[i].Size, //size
DateTimeToInt(Board.Items[i].RoundDate), //RoundDate
end;
end;
+{!
+\brief Folder.idx \82ð 1 \8ds\89ð\8eß
+\param Line Folder.idx \82ð\8d\\90¬\82·\82é 1 \8ds
+\return \83X\83\8c\83b\83h\8fî\95ñ
+}
function TGikoSys.ParseIndexLine(Line: string): TIndexRec;
begin
Result.FNo := StrToIntDef('$' + RemoveToken(Line, #1), 0);
Result.FFileName := RemoveToken(Line, #1);
- Result.FTitle := RemoveToken(Line, #1);
+ Result.FTitle := MojuUtils.UnSanitize(RemoveToken(Line, #1));
Result.FCount := StrToIntDef('$' + RemoveToken(Line, #1), 0);
Result.FSize := StrToIntDef('$' + RemoveToken(Line, #1), 0);
Result.FRoundDate := IntToDateTime(StrToIntDef('$' + RemoveToken(Line, #1), ZERO_DATE));
end;
-//\8ew\92è\83t\83H\83\8b\83_\93à\82Ì\8ew\92è\83t\83@\83C\83\8b\88ê\97\97\82ð\8eæ\93¾\82·\82é
-// ListFiles('c:\', '*.txt', list, True);
+{!
+\brief \8ew\92è\83t\83H\83\8b\83_\93à\82Ì\8ew\92è\83t\83@\83C\83\8b\88ê\97\97\82ð\8eæ\93¾\82·\82é
+\param Path \8bN\93_\82Æ\82È\82é\83t\83H\83\8b\83_\83p\83X
+\param Mask \83t\83@\83C\83\8b\96¼\82Ì\83}\83X\83N
+\param List OUT:\8eæ\93¾\82³\82ê\82½\83t\83@\83C\83\8b\96¼\88ê\97\97\82ª\95Ô\82é
+\param SubDir \92\86\82Ì\83t\83H\83\8b\83_\82Ü\82Å\8dÄ\8bA\93I\82É\83\8a\83X\83g\82·\82é\8fê\8d\87\82Í True
+\param IsPathAdd \83p\83X\95t\82«\82Å\83\8a\83X\83g\83A\83b\83v\82·\82é\8fê\8d\87\82Í True
+
+Mask \82ð '*.txt' \82Ì\82æ\82¤\82É\8ew\92è\82·\82é\82±\82Æ\82Å\81A
+\93Á\92è\82Ì\83t\83@\83C\83\8b\96¼\82â\93Á\92è\82Ì\8ag\92£\8eq\82É\8di\82Á\82½\83\8a\83X\83g\83A\83b\83v\82ª\89Â\94\\82Å\82·\81B
+
+\par \97á:
+\code
+GetFileList('c:\', '*.txt', list, True, True);
+\endcode
+}
procedure TGikoSys.GetFileList(Path: string; Mask: string; var List: TStringList; SubDir: Boolean; IsPathAdd: Boolean);
var
rc: Integer;
SearchRec : TSearchRec;
s: string;
- maskExt: string;
begin
- //maskExt := Copy(Mask, 1, Length(Mask) - 1);
- maskExt := Mask;
Path := IncludeTrailingPathDelimiter(Path);
rc := FindFirst(Path + '*.*', faAnyfile, SearchRec);
try
while rc = 0 do begin
if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then begin
s := Path + SearchRec.Name;
- //if (SearchRec.Attr and faDirectory > 0) then
- // s := IncludeTrailingPathDelimiter(s)
if (SearchRec.Attr and faDirectory = 0) and (MatchesMask(s, Mask)) then
if IsPathAdd then
end;
List.Sort;
end;
-//\8ew\92è\83t\83H\83\8b\83_\93à\82Ì\8ew\92è\83t\83@\83C\83\8b\88ê\97\97\82ð\8eæ\93¾\82·\82é
-//\83T\83u\83t\83H\83\8b\83_\82Í\8c\9f\8dõ\82µ\82È\82¢
-// ListFiles('c:\', '*.txt', list, True);
+
+{!
+\breif \8ew\92è\83t\83H\83\8b\83_\93à\82Ì\8ew\92è\83t\83@\83C\83\8b\88ê\97\97\82ð\8eæ\93¾\82·\82é\81B
+ \83T\83u\83t\83H\83\8b\83_\82Í\8c\9f\8dõ\82µ\82È\82¢
+\param Path \8bN\93_\82Æ\82È\82é\83t\83H\83\8b\83_\83p\83X
+\param Mask \83t\83@\83C\83\8b\96¼\82Ì\83}\83X\83N
+\param List OUT:\8eæ\93¾\82³\82ê\82½\83t\83@\83C\83\8b\96¼\88ê\97\97\82ª\95Ô\82é
+\param IsPathAdd \83p\83X\95t\82«\82Å\83\8a\83X\83g\83A\83b\83v\82·\82é\8fê\8d\87\82Í True
+\note \8dÄ\8bN\8ew\92è\89Â\94\\82È GetFileList() \82ª\82 \82é\82Ì\82Å\82±\82Ì\8aÖ\90\94\82Í\95s\97v?
+\par \97á
+\code
+GetFileList('c:\', '*.txt', list, True);
+\endcode
+}
procedure TGikoSys.GetFileList(Path: string; Mask: string; var List: TStringList; IsPathAdd: Boolean);
var
rc: Integer;
SearchRec : TSearchRec;
- s: string;
begin
Path := IncludeTrailingPathDelimiter(Path);
rc := FindFirst(Path + Mask, faAnyfile, SearchRec);
try
while rc = 0 do begin
if (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then begin
- s := Path + SearchRec.Name;
-
- if (SearchRec.Attr and faDirectory = 0) then
- if IsPathAdd then
- List.Add(s)
- else
- List.Add(SearchRec.Name);
+ if (SearchRec.Attr and faDirectory = 0) then begin
+ if IsPathAdd then begin
+ List.Add(Path + SearchRec.Name)
+ end else begin
+ List.Add(SearchRec.Name);
+ end;
+ end;
end;
rc := FindNext(SearchRec);
end;
end;
List.Sort;
end;
-//\8ew\92è\83t\83H\83\8b\83_\93à\82Ì\83f\83B\83\8c\83N\83g\83\8a\88ê\97\97\82ð\8eæ\93¾\82·\82é
+
+{!
+\brief \8ew\92è\83t\83H\83\8b\83_\93à\82Ì\83f\83B\83\8c\83N\83g\83\8a\88ê\97\97\82ð\8eæ\93¾\82·\82é
+\param Path \8bN\93_\82Æ\82È\82é\83t\83H\83\8b\83_\83p\83X
+\param Mask \83t\83H\83\8b\83_\96¼\82Ì\83}\83X\83N
+\param List OUT:\8eæ\93¾\82³\82ê\82½\83t\83H\83\8b\83_\96¼\88ê\97\97\82ª\95Ô\82é
+\param SubDir \92\86\82Ì\83t\83H\83\8b\83_\82Ü\82Å\8dÄ\8bA\93I\82É\83\8a\83X\83g\82·\82é\8fê\8d\87\82Í True
+
+Mask \82ð '*.txt' \82Ì\82æ\82¤\82É\8ew\92è\82·\82é\82±\82Æ\82Å\81A
+\93Á\92è\82Ì\83t\83@\83C\83\8b\96¼\82â\93Á\92è\82Ì\8ag\92£\8eq\82É\8di\82Á\82½\83\8a\83X\83g\83A\83b\83v\82ª\89Â\94\\82Å\82·\81B
+
+\par \97á:
+\code
+GetDirectoryList('c:\', '*.txt', list, True);
+\endcode
+}
procedure TGikoSys.GetDirectoryList(Path: string; Mask: string; List: TStringList; SubDir: Boolean);
var
rc: Integer;
end;
end;
-// \83X\83L\83\93\82ð\93Ç\82Ý\8d\9e\82Ý\81A\92l\82ð\92u\8a·\82·\82é
-function TGikoSys.LoadFromSkin(
- fileName: string;
- ThreadItem: TThreadItem;
- SizeByte: Integer
-): string;
-var
- Skin: TStringList;
-begin
-
- Skin := TStringList.Create;
- try
- if FileExists( fileName ) then begin
- Skin.LoadFromFile( fileName );
-
- // \82â\82è\82©\82½\82ª\8bê\82µ\82¢\82¯\82Ç\81A\83I\83v\83V\83\87\83\93\83_\83C\83A\83\8d\83O\82Ì\83v\83\8c\83r\83\85\81[\97p try
- try
- if ThreadItem.ParentBoard <> nil then
- if ThreadItem.ParentBoard.ParentCategory <> nil then
- CustomStringReplace( Skin, '<BBSNAME/>', ThreadItem.ParentBoard.ParentCategory.ParenTBBS.Title);
- CustomStringReplace( Skin, '<THREADURL/>', ThreadItem.URL);
- except end;
- CustomStringReplace( Skin, '<BOARDNAME/>', ThreadItem.ParentBoard.Title);
- CustomStringReplace( Skin, '<BOARDURL/>', ThreadItem.ParentBoard.URL);
- CustomStringReplace( Skin, '<THREADNAME/>', ThreadItem.Title);
- CustomStringReplace( Skin, '<SKINPATH/>', Setting.CSSFileName);
- CustomStringReplace( Skin, '<GETRESCOUNT/>', IntToStr( ThreadItem.Count - ThreadItem.NewResCount ));
- CustomStringReplace( Skin, '<NEWRESCOUNT/>', IntToStr( ThreadItem.NewResCount ));
- CustomStringReplace( Skin, '<ALLRESCOUNT/>', IntToStr( ThreadItem.Count ));
-
- CustomStringReplace( Skin, '<NEWDATE/>',FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate));
- CustomStringReplace( Skin, '<SIZEKB/>', IntToStr( Floor( SizeByte / 1024 ) ));
- CustomStringReplace( Skin, '<SIZE/>', IntToStr( SizeByte ));
-
- //----- \82Æ\82è\82 \82¦\82¸\82©\82¿\82ã\81`\82µ\82á\8cÝ\8a·\97p\81B\83R\83\81\83\93\83g\83A\83E\83g\82µ\82Ä\82à\82æ\82µ
- // \82â\82è\82©\82½\82ª\8bê\82µ\82¢\82¯\82Ç\81A\83I\83v\83V\83\87\83\93\83_\83C\83A\83\8d\83O\82Ì\83v\83\8c\83r\83\85\81[\97p try
- try
- if ThreadItem.ParentBoard <> nil then
- if ThreadItem.ParentBoard.ParentCategory <> nil then
- CustomStringReplace( Skin, '&BBSNAME', ThreadItem.ParentBoard.ParentCategory.ParenTBBS.Title);
- CustomStringReplace( Skin, '&THREADURL', ThreadItem.URL);
- except end;
- CustomStringReplace( Skin, '&BOARDNAME', ThreadItem.ParentBoard.Title);
- CustomStringReplace( Skin, '&BOARDURL', ThreadItem.ParentBoard.URL);
- CustomStringReplace( Skin, '&THREADNAME', ThreadItem.Title);
- CustomStringReplace( Skin, '&SKINPATH', Setting.CSSFileName);
- CustomStringReplace( Skin, '&GETRESCOUNT', IntToStr( ThreadItem.NewReceive - 1 ));
- CustomStringReplace( Skin, '&NEWRESCOUNT', IntToStr( ThreadItem.NewResCount ));
- CustomStringReplace( Skin, '&ALLRESCOUNT', IntToStr( ThreadItem.AllResCount ));
-
- CustomStringReplace( Skin, '&NEWDATE', FormatDateTime('yyyy/mm/dd(ddd) hh:mm', ThreadItem.RoundDate));
- CustomStringReplace( Skin, '&SIZEKB', IntToStr( Floor( SizeByte / 1024 ) ));
- CustomStringReplace( Skin, '&SIZE', IntToStr( SizeByte ));
- //----- \82±\82±\82Ü\82Å
- end;
- Result := Skin.Text;
- finally
- Skin.Free;
- end;
-end;
-
-// \83\8c\83X\82Ì\92l\82ð\92u\8a·\82·\82é
-function TGikoSys.SkinedRes(
- skin: string;
- Res: TResRec;
- No: string
-): string;
-var
- spamminess : Extended;
- wordCount : TWordCount;
-begin
-
- wordCount := TWordCount.Create;
- try
- spamminess := Floor( SpamParse(
- Res.FName + '<>' + Res.FMailTo + '<>' + Res.FBody, wordCount ) * 100 );
-
- Skin := CustomStringReplace( Skin, '<NUMBER/>',
- '<a href="menu:' + No + '" name="' + No + '">' + No + '</a>');
- Skin := CustomStringReplace( Skin, '<PLAINNUMBER/>', No);
- Skin := CustomStringReplace( Skin, '<NAME/>', '<b>' + Res.FName + '</b>');
- Skin := CustomStringReplace( Skin, '<MAILNAME/>',
- '<a href="mailto:' + Res.FMailTo + '"><b>' + Res.FName + '</b></a>');
- Skin := CustomStringReplace( Skin, '<MAIL/>', Res.FMailTo);
- Skin := CustomStringReplace( Skin, '<DATE/>', Res.FDateTime);
- Skin := CustomStringReplace( Skin, '<MESSAGE/>', Res.FBody);
- Skin := CustomStringReplace( Skin, '<SPAMMINESS/>', FloatToStr( spamminess ) );
- Skin := CustomStringReplace( Skin, '<NONSPAMMINESS/>', FloatToStr( 100 - spamminess ) );
-
- //----- \82©\82¿\82ã\81`\82µ\82á\8cÝ\8a·\97p\81B\83R\83\81\83\93\83g\83A\83E\83g\82µ\82Ä\82à\82æ\82µ
- Skin := CustomStringReplace( Skin, '&NUMBER',
- '<a href="menu:' + No + '" name="' + No + '">' + No + '</a>');
- Skin := CustomStringReplace( Skin, '&PLAINNUMBER', No);
- Skin := CustomStringReplace( Skin, '&NAME', '<b>' + Res.FName + '</b>');
- Skin := CustomStringReplace( Skin, '&MAILNAME',
- '<a href="mailto:' + Res.FMailTo + '"><b>' + Res.FName + '</b></a>');
- Skin := CustomStringReplace( Skin, '&MAIL', Res.FMailTo);
- Skin := CustomStringReplace( Skin, '&DATE', Res.FDateTime);
- Skin := CustomStringReplace( Skin, '&MESSAGE', Res.FBody);
- Skin := CustomStringReplace( Skin, '&SPAMMINESS', FloatToStr( spamminess ) );
- Skin := CustomStringReplace( Skin, '&NONSPAMMINESS', FloatToStr( 100 - spamminess ) );
- //----- \82±\82±\82Ü\82Å
-
- Result := Skin;
- finally
- wordCount.Free;
- end;
-
-end;
-
-procedure TGikoSys.CreateHTML2(doc: Variant; ThreadItem: TThreadItem; var sTitle: string);
-var
- i: integer;
- No: string;
- //bufList : TStringList;
- ReadList: TStringList;
- SaveList: TStringList;
- CSSFileName: string;
- BBSID: string;
- FileName: string;
- NewReceiveNo: Integer;
- Res: TResRec;
- boardPlugIn : TBoardPlugIn;
-
- UserOptionalStyle: string;
- SkinHeader: string;
- SkinNewRes: string;
- SkinRes: string;
-
- strTmp : string;
-// threadURL : string;
- function LoadSkin( fileName: string ): string;
- begin
- Result := LoadFromSkin( fileName, ThreadItem, ThreadItem.Size );
- end;
- function ReplaceRes( skin: string ): string;
- begin
- Result := SkinedRes( skin, Res, No );
- end;
-begin
- if ThreadItem <> nil then begin
- //if ThreadItem.IsBoardPlugInAvailable then begin
- if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
- //===== \83v\83\89\83O\83C\83\93\82É\82æ\82é\95\\8e¦
- //boardPlugIn := ThreadItem.BoardPlugIn;
- boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
- NewReceiveNo := ThreadItem.NewReceive;
- // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
- UserOptionalStyle := SetUserOptionalStyle;
- SaveList := TStringList.Create;
- try
- doc.open;
- // \95¶\8e\9a\83R\81[\83h\82Í\83v\83\89\83O\83C\83\93\82É\94C\82¹\82é
- // doc.charset := 'Shift_JIS';
-
- // \83w\83b\83_
- SaveList.Add( boardPlugIn.GetHeader( DWORD( threadItem ),
- '<style type="text/css">body {' + UserOptionalStyle + '}</style>' ) );
-
- SaveList.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 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) > ResRange then
- 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( GetSkinNewmarkFileName ) then
- SaveList.Add( LoadSkin( GetSkinNewmarkFileName ) )
- else
- SaveList.Add( '<a name="new"></a>' );
- end else if GikoSys.Setting.UseCSS then begin
- SaveList.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
- SaveList.Add('</dl>');
- SaveList.Add('<a name="new"></a>');
- SaveList.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>');
- SaveList.Add('<dl>');
- end;
- except
- SaveList.Add( '<a name="new"></a>' );
- end;
- end;
-
- // \83\8c\83X
- SaveList.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( GetSkinBookmarkFileName ) then
- SaveList.Add( LoadSkin( GetSkinBookmarkFileName ) )
- else
- SaveList.Add( '<a name="koko"></a>' );
- end else if GikoSys.Setting.UseCSS then begin
- SaveList.Add('<a name="koko"></a><div class="koko">\83R\83R\82Ü\82Å\93Ç\82ñ\82¾</div>');
- end else begin
- SaveList.Add('</dl>');
- SaveList.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>');
- SaveList.Add('<dl>');
- end;
- except
- SaveList.Add( '<a name="koko"></a>' );
- end;
- end;
-
- doc.Write(SaveList.Text);
- SaveList.Clear;
- end;
-
-
- // \83X\83L\83\93(\83t\83b\83^)
- SaveList.Add( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' ) );
- doc.Write(SaveList.Text);
- finally
- SaveList.Free;
- doc.Close;
- end;
-
- // Exit;
- //end;
- end else begin
- ShortDayNames[1] := '\93ú'; ShortDayNames[2] := '\8c\8e';
- ShortDayNames[3] := '\89Î'; ShortDayNames[4] := '\90\85';
- ShortDayNames[5] := '\96Ø'; ShortDayNames[6] := '\8bà';
- ShortDayNames[7] := '\93y';
- BBSID := ThreadItem.ParentBoard.BBSID;
- NewReceiveNo := ThreadItem.NewReceive;
- ReadList := TStringList.Create;
-
- try
- if ThreadItem.IsLogFile then begin
- FileName := ThreadItem.GetThreadFileName;
- ReadList.LoadFromFile(FileName);
- FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG'));
- FAbon.Execute(ReadList); // \82 \82Ú\81`\82ñ\82µ\82Ä
- 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
- Res := DivideStrLine(ReadList[0]);
- sTitle := Res.FTitle;
- end else
- sTitle := ThreadItem.Title
- end else begin
- sTitle := CustomStringReplace(ThreadItem.Title, '\81\97\81M', ',');
- end;
- SaveList := TStringList.Create;
- //threadURL := CustomStringReplace(ThreadItem.URL, 'l50', '');
- try
- doc.open;
- doc.charset := 'Shift_JIS';
-
- // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
- UserOptionalStyle := SetUserOptionalStyle;
- CSSFileName := GetStyleSheetDir + Setting.CSSFileName;
- if GikoSys.Setting.UseSkin then begin
- // \83X\83L\83\93\8eg\97p
- // \83X\83L\83\93\82Ì\90Ý\92è
- try
- SkinHeader := LoadSkin( GetSkinHeaderFileName );
- if Length( UserOptionalStyle ) > 0 then
- SkinHeader := CustomStringReplace( SkinHeader, '</head>',
- '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>');
- SaveList.Add( SkinHeader );
- except
- end;
- try
- SkinNewRes := LoadSkin( GetSkinNewResFileName );
- except
- end;
- try
- SkinRes := LoadSkin( GetSkinResFileName );
- except
- end;
- SaveList.Add('<p id="idSearch"></p>');
- SaveList.Add('<a name="top"></a>');
-
- 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 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) > ResRange then
- Continue;
- end;
- end;
-
- // \90V\92\85\83}\81[\83N
- if (NewReceiveNo = i + 1) or ((NewReceiveNo = 0) and (i = 0)) then begin
- try
- if FileExists( GetSkinNewmarkFileName ) then
- SaveList.Add( LoadSkin( GetSkinNewmarkFileName ) )
- else
- SaveList.Add( '<a name="new"></a>' );
- except
- SaveList.Add( '<a name="new"></a>' );
- end;
- end;
- if (Trim(ReadList[i]) <> '') then begin
- No := IntToStr(i + 1);
-
- Res := DivideStrLine(ReadList[i]);
- Res.FBody := ConvRes(AddAnchorTag(Res.FBody), ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true');
- Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
- try
- if NewReceiveNo <= (i + 1) then
- // \90V\92\85\83\8c\83X
- strTmp := ReplaceRes( SkinNewRes )
- else
- // \92Ê\8fí\82Ì\83\8c\83X
- strTmp := ReplaceRes( SkinRes );
-
- SaveList.Add( strTmp );
- except
- end;
- end;
-
- if ThreadItem.Kokomade = (i + 1) then begin
- // \82±\82±\82Ü\82Å\93Ç\82ñ\82¾
- try
- if FileExists( GetSkinBookmarkFileName ) then
- SaveList.Add( LoadSkin( GetSkinBookmarkFileName ) )
- else
- SaveList.Add( '<a name="koko"></a>' );
- except
- SaveList.Add( '<a name="koko"></a>' );
- end;
- end;
- doc.Write(SaveList.Text);
- SaveList.Clear;
- end;
- SaveList.Add('<a name="bottom"></a>');
- // \83X\83L\83\93(\83t\83b\83^)
- try
- SaveList.Add( LoadSkin( GetSkinFooterFileName ) );
- except
- end;
- doc.Write(SaveList.Text);
- end else if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin
- //CSS\8eg\97p
- //CSSFileName := GetAppDir + CSS_FILE_NAME;
- // SaveList.Add('<html lang="ja"><head>');
- SaveList.Add('<html><head>');
- SaveList.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
- SaveList.Add('<title>' + sTitle + '</title>');
- SaveList.Add('<link rel="stylesheet" href="'+CSSFileName+'" type="text/css">');
- if Length( UserOptionalStyle ) > 0 then
- SaveList.Add('<style type="text/css">body {' + UserOptionalStyle + '}</style>');
- SaveList.Add('</head>');
- SaveList.Add('<body>');
- SaveList.Add('<a name="top"></a>');
- SaveList.Add('<p id="idSearch"></p>');
- SaveList.Add('<div class="title">' + sTitle + '</div>');
- doc.Write(SaveList.Text);
- SaveList.Clear;
- //Application.ProcessMessages;
- 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 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) > ResRange then
- Continue;
- end;
- end;
-
- if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
- SaveList.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);
- Res := DivideStrLine(ReadList[i]);
- Res.FBody := ConvRes(AddAnchorTag(Res.FBody), ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true');
- Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
- if Res.FMailTo = '' then
- SaveList.Add('<a name="' + No + '"></a>'
- + '<div class="header"><span class="no"><a href="menu:' + No + '">' + No + '</a></span> '
- + '<span class="name_label">\96¼\91O\81F</span> '
- + '<span class="name"><b>' + Res.FName + '</b></span> '
- + '<span class="date_label">\93\8a\8de\93ú\81F</span> '
- + '<span class="date">' + Res.FDateTime+ '</span></div>'
- + '<div class="mes">' + Res.FBody + ' </div>')
- else if GikoSys.Setting.ShowMail then
- SaveList.Add('<a name="' + No + '"></a>'
- + '<div class="header"><span class="no"><a href="menu:' + No + '">' + No + '</a></span>'
- + '<span class="name_label"> \96¼\91O\81F </span>'
- + '<a class="name_mail" href="mailto:' + Res.FMailTo + '">'
- + '<b>' + Res.FName + '</b></a><span class="mail"> [' + Res.FMailTo + ']</span>'
- + '<span class="date_label"> \93\8a\8de\93ú\81F</span>'
- + '<span class="date"> ' + Res.FDateTime+ '</span></div>'
- + '<div class="mes">' + Res.FBody + ' </div>')
- else
- SaveList.Add('<a name="' + No + '"></a>'
- + '<div class="header"><span class="no"><a href="menu:' + No + '">' + No + '</a></span>'
- + '<span class="name_label"> \96¼\91O\81F </span>'
- + '<a class="name_mail" href="mailto:' + Res.FMailTo + '">'
- + '<b>' + Res.FName + '</b></a>'
- + '<span class="date_label"> \93\8a\8de\93ú\81F</span>'
- + '<span class="date"> ' + Res.FDateTime+ '</span></div>'
- + '<div class="mes">' + Res.FBody + ' </div>');
- end;
- if ThreadItem.Kokomade = (i + 1) then begin
- SaveList.Add('<a name="koko"></a><div class="koko">\83R\83R\82Ü\82Å\93Ç\82ñ\82¾</div>');
- end;
-
- doc.Write(SaveList.Text);
- SaveList.Clear;
- end;
- SaveList.Add('<a name="bottom"></a>');
- //SaveList.Add('</body></html>');
- SaveList.Add('<a name="last"></a>');
- SaveList.Add('</body></html>');
- doc.Write(SaveList.Text);
- end else begin
- //CSS\94ñ\8eg\97p
- // SaveList.Add('<html lang="ja"><head>');
- SaveList.Add('<html><head>');
- SaveList.Add('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
- SaveList.Add('<title>' + sTitle + '</title></head>');
- SaveList.Add('<body TEXT="#000000" BGCOLOR="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">');
- SaveList.Add('<a name="top"></a>');
- SaveList.Add('<font size=+1 color="#FF0000">' + sTitle + '</font>');
- SaveList.Add('<dl>');
- SaveList.Add('<p id="idSearch"></p>');
- doc.Write(SaveList.Text);
- SaveList.Clear;
- //Application.ProcessMessages;
- 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 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) > ResRange then
- Continue;
- end;
- end;
-
- if (NewReceiveNo = (i + 1)) or ((NewReceiveNo = 0) and (i = 0)) then begin
- SaveList.Add('</dl>');
- SaveList.Add('<a name="new"></a>');
- SaveList.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>');
- SaveList.Add('<dl>');
- end;
- if (Trim(ReadList[i]) <> '') then begin
- No := IntToStr(i + 1);
- Res := DivideStrLine(ReadList[i]);
- Res.FBody := ConvRes(AddAnchorTag(Res.FBody), ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true');
- Res.FDateTime := AddBeProfileLink(Res.FDateTime, i + 1);
- if Res.FMailTo = '' then
- SaveList.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>')
- else if GikoSys.Setting.ShowMail then
- SaveList.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>')
- else
- SaveList.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>');
- end;
- if ThreadItem.Kokomade = (i + 1) then begin
- SaveList.Add('</dl>');
- SaveList.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>');
- SaveList.Add('<dl>');
- end;
- doc.Write(SaveList.Text);
- SaveList.Clear;
- end;
- SaveList.Add('</dl>');
- SaveList.Add('<a name="bottom"></a>');
- SaveList.Add('</body></html>');
- doc.Write(SaveList.Text);
- end;
- finally
- SaveList.Free;
- doc.Close;
- end;
- finally
- ReadList.Free;
- end;
- end;
- end;
-end;
-procedure TGikoSys.CreateHTML3(var html: TStringList; ThreadItem: TThreadItem; var sTitle: string);
-var
- i: integer;
- No: string;
- //bufList : TStringList;
- ReadList: TStringList;
-// SaveList: TStringList;
- CSSFileName: string;
- BBSID: string;
- FileName: string;
- Res: TResRec;
- boardPlugIn : TBoardPlugIn;
- UserOptionalStyle: string;
- SkinHeader: string;
- SkinRes: string;
- tmp, tmp1: string;
- function LoadSkin( fileName: string ): string;
- begin
- Result := LoadFromSkin( fileName, ThreadItem, ThreadItem.Size );
- end;
- function ReplaceRes( skin: string ): string;
- begin
- Result := SkinedRes( skin, Res, No );
- end;
-
-begin
- if ThreadItem <> nil then begin
- CSSFileName := GetStyleSheetDir + Setting.CSSFileName;
- html.Clear;
- html.BeginUpdate;
- //if ThreadItem.IsBoardPlugInAvailable then begin
- if ThreadItem.ParentBoard.IsBoardPlugInAvailable then begin
- //===== \83v\83\89\83O\83C\83\93\82É\82æ\82é\95\\8e¦
- //boardPlugIn := ThreadItem.BoardPlugIn;
- boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
- // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
- UserOptionalStyle := SetUserOptionalStyle;
- try
- // \95¶\8e\9a\83R\81[\83h\82Í\83v\83\89\83O\83C\83\93\82É\94C\82¹\82é
- // \83w\83b\83_
- tmp := boardPlugIn.GetHeader( DWORD( threadItem ),
- '<style type="text/css">body {' + UserOptionalStyle + '}</style>' );
- //\90â\91Î\8eQ\8fÆ\82©\82ç\91\8a\91Î\8eQ\8fÆ\82Ö
- if Setting.UseSkin then begin
- tmp1 := './' +Setting.CSSFileName;
- tmp1 := CustomStringReplace(tmp1, GetConfigDir, '');
- tmp1 := CustomStringReplace(tmp1, '\', '/');
- tmp := CustomStringReplace(tmp, ExtractFilePath(Setting.CSSFileName), tmp1);
- end else if Setting.UseCSS then begin
- tmp1 := './' + CSSFileName;
- tmp1 := CustomStringReplace(tmp1, GetConfigDir, '');
- tmp1 := CustomStringReplace(tmp1, '\', '/');
- tmp := CustomStringReplace(tmp, CSSFileName, tmp1);
- end;
- html.Append( tmp );
-
- for i := 0 to threadItem.Count - 1 do begin
-
- // \83\8c\83X
- html.Append( ConvertResAnchor(boardPlugIn.GetRes( DWORD( threadItem ), i + 1 )) );
-
- end;
- // \83X\83L\83\93(\83t\83b\83^)
- html.Append( boardPlugIn.GetFooter( DWORD( threadItem ), '<a name="bottom"></a>' ) );
- finally
- end;
- html.EndUpdate;
- //Exit;
- end else begin
- ShortDayNames[1] := '\93ú'; ShortDayNames[2] := '\8c\8e';
- ShortDayNames[3] := '\89Î'; ShortDayNames[4] := '\90\85';
- ShortDayNames[5] := '\96Ø'; ShortDayNames[6] := '\8bà';
- ShortDayNames[7] := '\93y';
- BBSID := ThreadItem.ParentBoard.BBSID;
- ReadList := TStringList.Create;
- try
- if ThreadItem.IsLogFile then begin
- FileName := ThreadItem.GetThreadFileName;
- ReadList.LoadFromFile(FileName);
- FAbon.IndividualAbon(ReadList, ChangeFileExt(FileName,'.NG'));
- FAbon.Execute(ReadList); // \82 \82Ú\81`\82ñ\82µ\82Ä
- FSelectResFilter.Execute(ReadList); //\83\8c\83X\82Ì\83t\83B\83\8b\83^\83\8a\83\93\83O\82ð\82·\82é
- Res := DivideStrLine(ReadList[0]);
- //Res.FTitle := CustomStringReplace(Res.FTitle, '\81\97\81M', ',');
- sTitle := Res.FTitle;
- end else begin
- sTitle := CustomStringReplace(ThreadItem.Title, '\81\97\81M', ',');
- end;
- try
- // \83t\83H\83\93\83g\82â\83T\83C\83Y\82Ì\90Ý\92è
- UserOptionalStyle := SetUserOptionalStyle;
-
- if GikoSys.Setting.UseSkin then begin
- // \83X\83L\83\93\8eg\97p
- // \83X\83L\83\93\82Ì\90Ý\92è
- try
- SkinHeader := LoadSkin( GetSkinHeaderFileName );
- if Length( UserOptionalStyle ) > 0 then
- SkinHeader := CustomStringReplace( SkinHeader, '</head>',
- '<style type="text/css">body {' + UserOptionalStyle + '}</style></head>');
- //\90â\91Î\8eQ\8fÆ\82©\82ç\91\8a\91Î\8eQ\8fÆ\82Ö
- tmp1 := './' +Setting.CSSFileName;
- tmp1 := CustomStringReplace(tmp1, GetConfigDir, '');
- tmp1 := CustomStringReplace(tmp1, '\', '/');
- SkinHeader := CustomStringReplace(SkinHeader, ExtractFilePath(Setting.CSSFileName), tmp1);
- html.Append( SkinHeader );
- except
- end;
- try
- SkinRes := LoadSkin( GetSkinResFileName );
- except
- end;
- html.Append('<a name="top"></a>');
- for i := 0 to ReadList.Count - 1 do begin
- if (Trim(ReadList[i]) <> '') then begin
- No := IntToStr(i + 1);
-
- Res := DivideStrLine(ReadList[i]);
- Res.FBody := AddAnchorTag(Res.FBody);
- Res.FBody := ConvertResAnchor(ConvRes(Res.FBody, ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true', true));
-
- try
- html.Append( ReplaceRes( SkinRes ) );
- except
- end;
- end;
-
- end;
- html.Append('<a name="bottom"></a>');
- // \83X\83L\83\93(\83t\83b\83^)
- try
- html.Append( LoadSkin( GetSkinFooterFileName ) );
- except
- end;
- end else if GikoSys.Setting.UseCSS and FileExists(CSSFileName) then begin
- //CSS\8eg\97p
- //CSSFileName := GetAppDir + CSS_FILE_NAME;
- html.Append('<html><head>');
- html.Append('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
- html.Append('<title>' + sTitle + '</title>');
- //\90â\91Î\8eQ\8fÆ\82©\82ç\91\8a\91Î\8eQ\8fÆ\82Ö
- tmp1 := './' + CSSFileName;
- tmp1 := CustomStringReplace(tmp1, GetConfigDir, '');
- tmp1 := CustomStringReplace(tmp1, '\', '/');
-
- html.Append('<link rel="stylesheet" href="'+tmp1+'" type="text/css">');
- if Length( UserOptionalStyle ) > 0 then
- html.Append('<style type="text/css">body {' + UserOptionalStyle + '}</style>');
- html.Append('</head>');
- html.Append('<body>');
- html.Append('<a name="top"></a>');
- html.Append('<div class="title">' + sTitle + '</div>');
- for i := 0 to ReadList.Count - 1 do begin
- if (Trim(ReadList[i]) <> '') then begin
- No := IntToStr(i + 1);
- Res := DivideStrLine(ReadList[i]);
- Res.FBody := AddAnchorTag(Res.FBody);
- Res.FBody := ConvertResAnchor(ConvRes(Res.FBody, ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true', true));
- if Res.FMailTo = '' then
- html.Append('<a name="' + No + '"></a>'
- + '<div class="header"><span class="no"><a href="menu:' + No + '">' + No + '</a></span> '
- + '<span class="name_label">\96¼\91O\81F</span> '
- + '<span class="name"><b>' + Res.FName + '</b></span> '
- + '<span class="date_label">\93\8a\8de\93ú\81F</span> '
- + '<span class="date">' + Res.FDateTime+ '</span></div>'
- + '<div class="mes">' + Res.FBody + ' </div>')
- else if GikoSys.Setting.ShowMail then
- html.Append('<a name="' + No + '"></a>'
- + '<div class="header"><span class="no"><a href="menu:' + No + '">' + No + '</a></span>'
- + '<span class="name_label"> \96¼\91O\81F </span>'
- + '<a class="name_mail" href="mailto:' + Res.FMailTo + '">'
- + '<b>' + Res.FName + '</b></a><span class="mail"> [' + Res.FMailTo + ']</span>'
- + '<span class="date_label"> \93\8a\8de\93ú\81F</span>'
- + '<span class="date"> ' + Res.FDateTime+ '</span></div>'
- + '<div class="mes">' + Res.FBody + ' </div>')
- else
- html.Append('<a name="' + No + '"></a>'
- + '<div class="header"><span class="no"><a href="menu:' + No + '">' + No + '</a></span>'
- + '<span class="name_label"> \96¼\91O\81F </span>'
- + '<a class="name_mail" href="mailto:' + Res.FMailTo + '">'
- + '<b>' + Res.FName + '</b></a>'
- + '<span class="date_label"> \93\8a\8de\93ú\81F</span>'
- + '<span class="date"> ' + Res.FDateTime+ '</span></div>'
- + '<div class="mes">' + Res.FBody + ' </div>');
- end;
- end;
- html.Append('<a name="bottom"></a>');
- html.Append('<a name="last"></a>');
- html.Append('</body></html>');
- end else begin
- //CSS\94ñ\8eg\97p
- html.Append('<html><head>');
- html.Append('<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">');
- html.Append('<title>' + sTitle + '</title></head>');
- html.Append('<body TEXT="#000000" BGCOLOR="#EFEFEF" link="#0000FF" alink="#FF0000" vlink="#660099">');
- html.Append('<a name="top"></a>');
- html.Append('<font size=+1 color="#FF0000">' + sTitle + '</font>');
- html.Append('<dl>');
- for i := 0 to ReadList.Count - 1 do begin
- if (Trim(ReadList[i]) <> '') then begin
- No := IntToStr(i + 1);
- Res := DivideStrLine(ReadList[i]);
- Res.FBody := AddAnchorTag(Res.FBody);
- Res.FBody := ConvertResAnchor(ConvRes(Res.FBody, ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true', true));
- if Res.FMailTo = '' then
- html.Append('<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 ' + Res.FDateTime+ '<br><dd>' + Res.Fbody + ' <br><br><br>')
- else if GikoSys.Setting.ShowMail then
- html.Append('<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 ' + Res.FDateTime+ '<br><dd>' + Res.Fbody + ' <br><br><br>')
- else
- html.Append('<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 ' + Res.FDateTime+ '<br><dd>' + Res.Fbody + ' <br><br><br>');
- end;
- end;
- html.Append('</dl>');
- html.Append('<a name="bottom"></a>');
- html.Append('</body></html>');
- end;
- finally
- html.EndUpdate;
- end;
- finally
- ReadList.Free;
- end;
- end;
- end;
-end;
-function TGikoSys.ConvertResAnchor(res: string): string;
-const
- _HEAD : string = '<a href="../';
- _TAIL : string = ' target="_blank">';
- _ST: string = '&st=';
- _TO: string = '&to=';
- _STA: string = '&START=';
- _END: string = '&END=';
-var
- i, j, k: Integer;
- tmp: string;
-begin
- Result := '';
- i := AnsiPos(_HEAD, res);
- while i <> 0 do begin
- Result := Result + Copy(res, 1, i -1);
- Delete(res, 1, i - 1);
- j := AnsiPos(_TAIL, res);
- if j = 0 then begin
- Result := Result + res;
- Exit;
- end;
- tmp := Copy(res, 1, j - 1);
- Delete(res, 1, j + 16);
- if (AnsiPos(_ST, tmp) <> 0) and (AnsiPos(_TO, tmp) <> 0) then begin
- Delete(tmp, 1, AnsiPos(_ST, tmp) + 3);
- Delete(tmp, AnsiPos(_TO, tmp), Length(tmp));
- Result := Result + '<a href="#' + tmp + '">';
- end else if (AnsiPos(_STA, tmp) <> 0) and (AnsiPos(_END, tmp) <> 0) then begin
- Delete(tmp, 1, AnsiPos(_STA, tmp) + 6);
- Delete(tmp, AnsiPos(_END, tmp), Length(tmp));
- Result := Result + '<a href="#' + tmp + '">';
- 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));
-
- Result := Result + '<a href="#' + tmp + '">';
- end;
- i := AnsiPos(_HEAD, res);
- end;
- Result := Result + res;
-
-end;
-
-(*************************************************************************
- *http://\82Ì\95¶\8e\9a\97ñ\82ðanchor\83^\83O\95t\82«\82É\82·\82é\81B
- *************************************************************************)
-function TGikoSys.AddAnchorTag(s: string): string;
-const
- URL_CHAR: string = '0123456789'
- + 'abcdefghijklmnopqrstuvwxyz'
- + 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
- + '#$%&()*+,-./:;=?@[]^_`{|}~!''\';
- ANCHOR_REF = 'href=';
- RES_REF = '>>';
- REF_MARK: array[0..9] of string = ('http://', 'ttp://', 'tp://',
- 'ms-help://','p://', 'https://',
- 'www.', 'ftp://','news://','rtsp://');
-
-var
-// wkIdx: array[0..9] of Integer;
- url: string;
- href: string;
- i, j, b: Integer;
- tmp: Integer;
- idx, idx2: Integer;
- anchorLen : Integer;
- pp, pe : PChar;
- pURLCHARs : PChar;
- pURLCHARe : PChar;
-begin
- Result := '';
- // + 3 \82Í 'href="' ('"'\82Â\82«)\82È\82Ç\82Ì\83o\83\8a\83G\81[\83V\83\87\83\93\82É\97]\97T\82ð\8e\9d\82½\82¹\82é\82½\82ß
- anchorLen := Length( ANCHOR_REF ) + 3;
- pURLCHARs := PChar(URL_CHAR);
- pURLCHARe := pURLCHARs + Length(URL_CHAR);
- while True do begin
- idx := MaxInt;
- idx2 := MaxInt;
- for j := 0 to 9 do begin
- tmp := AnsiPos(REF_MARK[j], s);
- if tmp <> 0 then idx := Min(tmp, idx);
- if idx = tmp then idx2 := j; //\82Ç\82Ì\83}\81[\83N\82Å\88ø\82Á\82©\82©\82Á\82½\82©\82ð\95Û\91¶
- end;
- if idx = MaxInt then begin
- //\83\8a\83\93\83N\82ª\96³\82¢\82æ\81B
- Result := Result + s;
- Break;
- end;
-
- if (idx > 1) and
- (Pos( ANCHOR_REF, Copy(s, idx - anchorLen, anchorLen ) ) > 0) then begin
- //\8aù\82É\83\8a\83\93\83N\83^\83O\82ª\82Â\82¢\82Ä\82¢\82é\82Á\82Û\82¢\82Æ\82«\82Í\83\80\83V
- href := Copy( s, idx, Length( s ) );
- Result := Result + Copy( s, 1, idx + Pos( '</a>', href ) + Length( '</a>' ) - 2 );
- s := href;
- s := Copy( s, Pos( '</a>', s ) + Length( '</a>' ), Length( s ) );
-
- Continue;
- end;
-
- Result := Result + Copy(s, 1, idx - 1);
-
- Delete(s, 1, idx - 1);
- b := Length( s ) + 1;
- pp := PChar(s);
- for i := 1 to b do begin
- pe := AnsiStrPosEx(pURLCHARs, pURLCHARe, pp, pp + 1);
-
- if pe = nil then begin
- //URL\82¶\82á\82È\82¢\95¶\8e\9a\94\8c©\81I\82Æ\82©\81A\95¶\8e\9a\82ª\82È\82\82È\82Á\82½\81B
- url := Copy(s, 1, i - 1);
- case idx2 of
- 1 : href := 'h' + url;
- 2 : href := 'ht' + url;
- 4 : href := 'htt' + url;
- 6 : href := 'http://' + url;
- else
- href := url;
- end;
-
- Result := Result + '<a href="' + href + '" target="_blank">' + url + '</a>';
- Delete(s, 1, i - 1);
- Break;
- end;
- //\88ê\95¶\8e\9a\90i\82ß\82é\81B
- Inc(pp);
- end;
- end;
-end;
-
-(*************************************************************************
- *\83T\83u\83W\83F\83N\83g\88ê\8ds\82ð\95ª\8a\84
- *************************************************************************)
+{!
+\brief Subject.txt \88ê\8ds\82ð\89ð\8eß
+\param Line Subject.txt \82ð\8d\\90¬\82·\82é 1 \8ds
+\return \83X\83\8c\83b\83h\8fî\95ñ
+}
function TGikoSys.DivideSubject(Line: string): TSubjectRec;
var
i: integer;
end;
end;
-(*************************************************************************
- * dat\83t\83@\83C\83\8b\82Ì\88ê\83\89\83C\83\93\82ð\95ª\89ð
- *************************************************************************)
-function TGikoSys.DivideStrLine(Line: string): TResRec;
-var
- Delim: string;
-begin
- if AnsiPos('<>', Line) = 0 then begin
- //Delim := ',';
- //Result.FType := glt2chOld;
- Line := CustomStringReplace(Line, '<>', '<>');
- Line := CustomStringReplace(Line, ',', '<>');
- Line := CustomStringReplace(Line, '\81\97\81M', ',');
- end;
- Delim := '<>';
- Result.FType := glt2chNew;
- //Trim\82µ\82Ä\82Í\82¢\82¯\82È\82¢\8bC\82ª\82·\82é\81@by\82à\82¶\82ã
- Result.FName := RemoveToken(Line, Delim);
- Result.FMailTo := RemoveToken(Line, Delim);
- Result.FDateTime := RemoveToken(Line, Delim);
- Result.FBody := RemoveToken(Line, Delim);
- //\8bó\82¾\82Æ\96â\91è\82ª\8bN\82«\82é\82©\82ç\81A\8bó\94\92\82ð\90Ý\92è\82·\82é
- if Result.FBody = '' then begin
- Result.FBody := ' ';
- end else if ( Result.FBody[1] = ' ' ) then begin
- //\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é
- Delete(Result.FBody, 1, 1);
- end;
- //Result.FTitle := Trim(RemoveToken(Line, Delim));
- Result.FTitle := RemoveToken(Line, Delim);
-
-end;
-
-(*************************************************************************
- * URL\82©\82çBBSID\82ð\8eæ\93¾
- *************************************************************************)
+{!
+\brief URL\82©\82çBBSID\82ð\8eæ\93¾
+\param url BBSID \82ð\8eæ\93¾\82·\82é URL
+\return BBSID
+}
function TGikoSys.UrlToID(url: string): string;
var
i: integer;
end;
end;
-(*************************************************************************
- *URL\82©\82çBBSID\88È\8aO\82Ì\95\94\95ª(http://teri.2ch.net/)\82ð\8eæ\93¾
- *************************************************************************)
+{!
+\brief URL\82©\82ç\8dÅ\8cã\82Ì\97v\91f\82ð\8dí\8f\9c
+\param url \89ð\8eß\82·\82é URL
+\return \90Ø\82è\8eæ\82ç\82ê\82½\8cã\82Ì URL
+
+URL \82©\82ç BBSID\88È\8aO\82Ì\95\94\95ª\82ð\8eæ\93¾\82·\82é\82Ì\82É\8eg\97p\82µ\82Ü\82·\81B
+}
function TGikoSys.UrlToServer(url: string): string;
var
i: integer;
end;
end;
-(*************************************************************************
- *\83f\83B\83\8c\83N\83g\83\8a\82ª\91¶\8dÝ\82·\82é\82©\83`\83F\83b\83N
- *************************************************************************)
+{!
+\brief \83f\83B\83\8c\83N\83g\83\8a\82ª\91¶\8dÝ\82·\82é\82©\83`\83F\83b\83N
+\param Name \91¶\8dÝ\82ð\8am\94F\82·\82é\83t\83H\83\8b\83_\83p\83X
+\return \83t\83H\83\8b\83_\82ª\91¶\8dÝ\82·\82é\82È\82ç True
+}
function TGikoSys.DirectoryExistsEx(const Name: string): Boolean;
var
Code: Integer;
Result := (Code <> -1) and (FILE_ATTRIBUTE_DIRECTORY and Code <> 0);
end;
-(*************************************************************************
- *\83f\83B\83\8c\83N\83g\83\8a\8dì\90¬\81i\95¡\90\94\8aK\91w\91Î\89\9e\81j
- *************************************************************************)
+{!
+\brief \83f\83B\83\8c\83N\83g\83\8a\8dì\90¬\81i\95¡\90\94\8aK\91w\91Î\89\9e\81j
+\param Dir \8dì\90¬\82·\82é\83p\83X
+\return \8dì\90¬\82É\90¬\8c÷\82µ\82½\8fê\8d\87\82Í True
+}
function TGikoSys.ForceDirectoriesEx(Dir: string): Boolean;
begin
Result := True;
Result := ForceDirectoriesEx(ExtractFilePath(Dir)) and CreateDir(Dir);
end;
-(*************************************************************************
- *\95¶\8e\9a\97ñ\82©\82ç\83g\81[\83N\83\93\82Ì\90Ø\82è\8fo\82µ\81i\8f\89\8aú\8f\88\97\9d\81j
- *FDelphi\82©\82ç\82Ì\83p\83N\83\8a
- *************************************************************************)
+{!
+\brief \95¶\8e\9a\97ñ\82©\82ç\83g\81[\83N\83\93\82Ì\90Ø\82è\8fo\82µ\81i\8f\89\8aú\8f\88\97\9d\81j
+ FDelphi\82©\82ç\82Ì\83p\83N\83\8a
+\param s \8c³\82É\82È\82é\83L\83\83\83\89\83N\83^
+\param sep \8bæ\90Ø\82è\82É\82È\82é\95¶\8e\9a\97ñ
+\param Rec OUT:\95¶\8e\9a\97ñ\91\96\8d¸\8fî\95ñ\82ª\95Ô\82é
+\return \90Ø\82è\8fo\82µ\82½\83g\81[\83N\83\93
+\todo Split, RemoveToken, GetTokenIndex, NthField \8ds\82«
+}
function TGikoSys.StrTokFirst(const s:string; const sep: TStrTokSeparator; var Rec: TStrTokRec): string;
begin
Rec.Str := s;
Result := StrTokNext(sep, Rec);
end;
-(*************************************************************************
- *\95¶\8e\9a\97ñ\82©\82ç\83g\81[\83N\83\93\82Ì\90Ø\82è\8fo\82µ
- *FDelphi\82©\82ç\82Ì\83p\83N\83\8a
- *************************************************************************)
+{!
+\brief \95¶\8e\9a\97ñ\82©\82ç\83g\81[\83N\83\93\82Ì\90Ø\82è\8fo\82µ
+ FDelphi\82©\82ç\82Ì\83p\83N\83\8a
+\param sep \8bæ\90Ø\82è\82É\82È\82é\83L\83\83\83\89\83N\83^
+\param Rec IN/OUT:StrTokFirst\82Å\8dì\90¬\82³\82ê\82½\95¶\8e\9a\97ñ\91\96\8d¸\8fî\95ñ
+\return \90Ø\82è\8fo\82µ\82½\83g\81[\83N\83\93
+\todo Split, RemoveToken, GetTokenIndex, NthField \8ds\82«
+}
function TGikoSys.StrTokNext(const sep: TStrTokSeparator; var Rec: TStrTokRec): string;
var
Len, I: Integer;
end;
end;
-(*************************************************************************
- *\83t\83@\83C\83\8b\83T\83C\83Y\8eæ\93¾
- *************************************************************************)
+{!
+\brief \83t\83@\83C\83\8b\83T\83C\83Y\8eæ\93¾
+\param FileName \83t\83@\83C\83\8b\83T\83C\83Y\82ð\8eæ\93¾\82·\82é\83t\83@\83C\83\8b\83p\83X
+\return \83t\83@\83C\83\8b\83T\83C\83Y(bytes)
+}
function TGikoSys.GetFileSize(FileName : string): longint;
var
F : File;
end;
end;
-(*************************************************************************
- *\83t\83@\83C\83\8b\8ds\90\94\8eæ\93¾
- *************************************************************************)
+{!
+\brief \83e\83L\83X\83g\83t\83@\83C\83\8b\82Ì\8ds\90\94\82ð\8eæ\93¾
+\param FileName \8ds\90\94\82ð\8eæ\93¾\82·\82é\83t\83@\83C\83\8b\83p\83X
+\return \8ds\90\94
+\todo \83\81\83\82\83\8a\83}\83b\83v\83h\83t\83@\83C\83\8b\8ds\82«
+}
function TGikoSys.GetFileLineCount(FileName : string): longint;
var
sl: TStringList;
end;
-(*************************************************************************
- *\83X\83\8c\83b\83h\83t\83@\83C\83\8b\82©\82ç\8ew\92è\8ds\82ð\8eæ\93¾
- *************************************************************************)
+{!
+\brief \83t\83@\83C\83\8b\82©\82ç\8ew\92è\8ds\82ð\8eæ\93¾
+\param FileName \83t\83@\83C\83\8b\82Ì\83p\83X
+\param Line \8ew\92è\8ds
+\return \8ew\92è\82³\82ê\82½ 1 \8ds
+\todo \83\81\83\82\83\8a\83}\83b\83v\83h\83t\83@\83C\83\8b\8ds\82«
+}
function TGikoSys.ReadThreadFile(FileName: string; Line: Integer): string;
var
fileTmp : TStringList;
end;
end;
-(*************************************************************************
- *\83V\83X\83e\83\80\83\81\83j\83\85\81[\83t\83H\83\93\83g\82Ì\91®\90«\82ð\8eæ\93¾
- *************************************************************************)
+{!
+\brief \83V\83X\83e\83\80\83\81\83j\83\85\81[\83t\83H\83\93\83g\82Ì\91®\90«\82ð\8eæ\93¾
+\param Font OUT:\8eæ\93¾\82µ\82½\83t\83H\83\93\83g\91®\90«\82ª\95Ô\82é
+}
procedure TGikoSys.MenuFont(Font: TFont);
var
lf: LOGFONT;
Font.Style := Font.Style + [fsItalic];
end;
-(*************************************************************************
- *
- *\82Ç\82±\82©\82Ì\83T\83C\83g\82©\82ç\82Ì\83p\83N\83\8a
- *************************************************************************)
+{!
+\brief \90æ\93ª\82Ì\83g\81[\83N\83\93\82ð\90Ø\82è\8fo\82µ
+\param s IN/OUT:\8c³\82É\82È\82é\95¶\8e\9a\97ñ\81A\90Ø\82è\8fo\82µ\82½\8cã\82Ì\8ec\82è\82Ì\95¶\8e\9a\97ñ
+\param delimiter \8bæ\90Ø\82è\82É\82È\82é\95¶\8e\9a\97ñ
+\return \90Ø\82è\8fo\82µ\82½\95¶\8e\9a\97ñ
+
+\82Ç\82±\82©\82Ì\83T\83C\83g\82©\82ç\82Ì\83p\83N\83\8a
+}
function TGikoSys.RemoveToken(var s: string;const delimiter: string): string;
var
p: Integer;
Delete(s, 1, Length(Result) + Length(delimiter));
end;
-(*************************************************************************
- *
- *\82Ç\82±\82©\82Ì\83T\83C\83g\82©\82ç\82Ì\83p\83N\83\8a
- *************************************************************************)
+
+{!
+\brief n \8cÂ\96Ú\82Ì\83g\81[\83N\83\93\82ð\90Ø\82è\8fo\82µ
+\param s \8c³\82É\82È\82é\95¶\8e\9a\97ñ
+\param index 0 \82©\82ç\8en\82Ü\82é\83C\83\93\83f\83b\83N\83X(n \8cÂ\96Ú\82Ì n)
+\return \90Ø\82è\8fo\82µ\82½\83g\81[\83N\83\93
+
+\82Ç\82±\82©\82Ì\83T\83C\83g\82©\82ç\82Ì\83p\83N\83\8a
+}
function TGikoSys.GetTokenIndex(s: string; delimiter: string; index: Integer): string;
var
i: Integer;
Result := RemoveToken(s, delimiter);
end;
-(*************************************************************************
- *
- *************************************************************************)
-function TGikoSys.DeleteLink(const s: string): string;
-var
- s1: string;
- s2: string;
- idx: Integer;
- i: Integer;
-begin
- i := 0;
- Result := '';
- while True do begin
- s1 := GetTokenIndex(s, '<a href="', i);
- s2 := 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;
-
- inc(i, 2);
- end;
-end;
//\83C\83\93\83f\83b\83N\83X\96¢\8dX\90V\83o\83b\83t\83@\82ð\83t\83\89\83b\83V\83\85\81I
{procedure TGikoSys.FlashExitWrite;
FExitWrite.Clear;
end;}
-(*************************************************************************
- *\83X\83\8c\96¼\82È\82Ç\82ð\92Z\82¢\96¼\91O\82É\95Ï\8a·\82·\82é
- *from HotZonu
- *************************************************************************)
+{!
+\brief \83X\83\8c\96¼\82È\82Ç\82ð\92Z\82¢\96¼\91O\82É\95Ï\8a·\82·\82é
+\param LongName \8c³\82É\82È\82é\95¶\8e\9a\97ñ
+\param ALength \8eû\82ß\82é\95¶\8e\9a\97ñ\92·(bytes)
+\return \95Ï\8a·\82³\82ê\82½\95¶\8e\9a\97ñ
+
+from HotZonu
+}
function TGikoSys.GetShortName(const LongName: string; ALength: integer): string;
const
ERASECHAR : array [1..39] of string =
var
Chr : array [0..255] of char;
S : string;
- i : integer;
-begin
- s := Trim(LongName);
- if (Length(s) <= ALength) then begin
- Result := s;
- end else begin
- S := s;
- for i := Low(ERASECHAR) to High(ERASECHAR) do begin
- S := CustomStringReplace(S, ERASECHAR[i], '');
- end;
- if (Length(S) <= ALength) then begin
- Result := S;
- end else begin
- Windows.LCMapString(
- GetUserDefaultLCID(),
- LCMAP_HALFWIDTH,
- PChar(S),
- Length(S) + 1,
- chr,
- Sizeof(chr)
- );
- S := Chr;
- S := Copy(S,1,ALength);
- while true do begin
- if (ByteType(S, Length(S)) = mbLeadByte ) then begin
- S := Copy(S, 1, Length(S) - 1);
- end else begin
- Break;
- end;
- end;
- Result := S;
- end;
- end;
-end;
-
-(*************************************************************************
- *
- * from HotZonu
- *************************************************************************)
-function TGikoSys.ConvRes(const Body, Bbs, Key,
- ParamBBS, ParamKey, ParamStart, ParamTo, ParamNoFirst, ParamTrue : string;
- DatToHTML: boolean = false): string;
-type
- PIndex = ^TIndex;
- TIndex = record
- FIndexFrom : integer;
- FIndexTo : integer;
- FNo : string;
- end;
-const
- GT = '>';
- SN = '0123456789-';
- ZN = '\82O\82P\82Q\82R\82S\82T\82U\82V\82W\82X\81|';
-var
- i : integer;
- s,r : string;
- b : TMbcsByteType;
- sw: boolean;
- sp: integer;
- No: string;
- sx: string;
- List: TList;
- oc : string;
- st, et: string;
- chk : boolean;
- al : boolean;
- procedure Add(IndexFrom, IndexTo: integer; const No: string);
- var
- FIndex : PIndex;
- begin
- New(FIndex);
- FIndex.FIndexFrom := IndexFrom;
- FIndex.FIndexTo := IndexTo;
- FIndex.FNo := No;
- List.Add(FIndex);
- end;
- function ChooseString(const Text, Separator: string; Index: integer): string;
- var
- S : string;
- i, p : integer;
- begin
- S := Text;
- for i := 0 to Index - 1 do begin
- if (AnsiPos(Separator, S) = 0) then S := ''
- else S := Copy(S, AnsiPos(Separator, S) + Length(Separator), Length(S));
- end;
- p := AnsiPos(Separator, S);
- if (p > 0) then Result := Copy(S, 1, p - 1) else Result := S;
- end;
-begin
- { v1.0 b2 - 03 }
- s := Body;
- r := Body;
- i := 1;
- sw := False;
- No := '';
- List:= TList.Create;
- oc := '';
- sp := 0;
- chk := False;
- al := False;
- while true do begin
- b := ByteType(s, i);
- case b of
- mbSingleByte : begin
- if (not sw) and (Copy(s,i,8) = GT + GT) then begin
- if (AnsiPos('<A HREF', AnsiUpperCase(oc)) = 0) then begin
- sw := True;
- sp := i;
- i := i + 7;
- oc:='';
- chk := True;
- end;
- end else
- if (not sw) and (Copy(s,i,8) = GT + GT) then begin
- if (AnsiPos('<A HREF', AnsiUpperCase(oc)) = 1) then begin
- i := i + 7;
- oc:='';
- chk := True;
- end;
- end else
- if (not sw) and (Copy(s,i,4) = GT) then begin
- if (AnsiPos('<A HREF', AnsiUpperCase(oc)) = 0) then begin
- sw := True;
- sp := i;
- i := i + 3;
- oc:='';
- chk := True;
- end;
- end else
- if ((not sw) and (Copy(s,i,1) = ',')) or
- ((not sw) and (Copy(s,i,1) = '=')) then begin
- if ((not Chk) and (AnsiLowerCase(oc) = '</a>')) or
- ((Chk) and (oc = '')) or
- ((not Chk) and (al)) then
- begin
- sw := True;
- sp := i;
- //i := i + 1;
- oc:='';
- end;
- end else
- if (sw) then begin
- sx := Copy(s,i,1);
- if (AnsiPos(sx, SN) > 0) then begin
- No := No + sx;
- end else begin
- if (No <> '') and (No <> '-') then begin
- Add(sp, i, No);
- al := True;
- end;
- sw := False;
- //
- i := i - 1;
- //
- No := '';
- oc:='';
- //chk := False;
- end;
- end else begin
- if Copy(s,i,1) = '<' then oc := '';
- oc := oc + Copy(s,i,1);
- chk := False;
- al := False;
- end;
- end;
- mbLeadByte : begin
- if (not sw) and (Copy(s,i,4) = '\81\84\81\84') then begin
- sw := True;
- sp := i;
- i := i + 3;
- chk := True;
- end else
- if (not sw) and (Copy(s,i,2) = '\81\84') then begin
- sw := True;
- sp := i;
- i := i + 1;
- chk := True;
- end else
- if (sw) then begin
- sx := Copy(s,i,2);
- if (AnsiPos(sx, ZN) > 0) then begin
- No := No + ZenToHan(sx);
- end else begin
- if (No <> '') and (No <> '-') and (No <> '\81|') then begin
- Add(sp, i, No);
- end;
- sw := False;
- i := i - 1;
- No := '';
- end;
- end else begin
- oc := '';
- chk := False;
- end;
- al := False;
- end;
- end;
- inc(i);
- if (i > Length(Body)) then begin
- if (sw) then begin
- if (No <> '') then Add(sp, i, No);
- end;
- Break;
- end;
- end;
- for i := List.Count - 1 downto 0 do begin
- if (AnsiPos('-', PIndex(List[i]).FNo) > 0) then begin
- st := ChooseString(PIndex(List[i]).FNo, '-', 0);
- et := ChooseString(PIndex(List[i]).FNo, '-', 1);
- end else begin
- st := PIndex(List[i]).FNo;
- et := PIndex(List[i]).FNo;
- end;
- if not DatToHTML then
- r := Copy(r,0, PIndex(List[i]).FIndexFrom - 1) +
- Format('<a href="../test/read.cgi?%s=%s&%s=%s&%s=%s&%s=%s&%s=%s" target="_blank">',
- [ParamBBS, Bbs, ParamKey, Key, ParamStart, st, ParamTo, et, ParamNoFirst, ParamTrue]) +
- Copy(r,PIndex(List[i]).FIndexFrom, PIndex(List[i]).FIndexTo - PIndex(List[i]).FIndexFrom) + '</A>' +
- Copy(r,PIndex(List[i]).FIndexTo,Length(r))
- else
- r := Copy(r,0, PIndex(List[i]).FIndexFrom - 1) +
- Format('<a href="#%s">', [st]) +
- Copy(r,PIndex(List[i]).FIndexFrom, PIndex(List[i]).FIndexTo - PIndex(List[i]).FIndexFrom) + '</A>' +
- Copy(r,PIndex(List[i]).FIndexTo,Length(r));
-
- Dispose(PIndex(List[i]));
- end;
- List.Free;
- Result := r;
-end;
-
-function TGikoSys.ConvRes(
- const Body, Bbs, Key, ParamBBS, ParamKey,
- ParamStart, ParamTo, ParamNoFirst,
- ParamTrue, FullURL : string
-): string;
-type
- PIndex = ^TIndex;
- TIndex = record
- FIndexFrom : integer;
- FIndexTo : integer;
- FNo : string;
- end;
-const
- GT = '>';
- SN = '0123456789-';
- ZN = '\82O\82P\82Q\82R\82S\82T\82U\82V\82W\82X\81|';
-var
- i : integer;
- s,r : string;
- b : TMbcsByteType;
- sw: boolean;
- sp: integer;
- No: string;
- sx: string;
- List: TList;
- oc : string;
- st, et: string;
- chk : boolean;
- al : boolean;
- procedure Add(IndexFrom, IndexTo: integer; const No: string);
- var
- FIndex : PIndex;
- begin
- New(FIndex);
- FIndex.FIndexFrom := IndexFrom;
- FIndex.FIndexTo := IndexTo;
- FIndex.FNo := No;
- List.Add(FIndex);
- end;
- function ChooseString(const Text, Separator: string; Index: integer): string;
- var
- S : string;
- i, p : integer;
- begin
- S := Text;
- for i := 0 to Index - 1 do begin
- if (AnsiPos(Separator, S) = 0) then S := ''
- else S := Copy(S, AnsiPos(Separator, S) + Length(Separator), Length(S));
- end;
- p := AnsiPos(Separator, S);
- if (p > 0) then Result := Copy(S, 1, p - 1) else Result := S;
- end;
+ i : integer;
begin
- { v1.0 b2 - 03 }
- s := Body;
- r := Body;
- i := 1;
- sw := False;
- No := '';
- List:= TList.Create;
- oc := '';
- sp := 0;
- chk := False;
- al := False;
- while true do begin
- b := ByteType(s, i);
- case b of
- mbSingleByte : begin
- if (not sw) and (Copy(s,i,8) = GT + GT) then begin
- if (AnsiPos('<A HREF', AnsiUpperCase(oc)) = 0) then begin
- sw := True;
- sp := i;
- i := i + 7;
- oc:='';
- chk := True;
- end;
- end else
- if (not sw) and (Copy(s,i,8) = GT + GT) then begin
- if (AnsiPos('<A HREF', AnsiUpperCase(oc)) = 1) then begin
- i := i + 7;
- oc:='';
- chk := True;
- end;
- end else
- if (not sw) and (Copy(s,i,4) = GT) then begin
- if (AnsiPos('<A HREF', AnsiUpperCase(oc)) = 0) then begin
- sw := True;
- sp := i;
- i := i + 3;
- oc:='';
- chk := True;
- end;
- end else
- if ((not sw) and (Copy(s,i,1) = ',')) or
- ((not sw) and (Copy(s,i,1) = '=')) then begin
- if ((not Chk) and (AnsiLowerCase(oc) = '</a>')) or
- ((Chk) and (oc = '')) or
- ((not Chk) and (al)) then
- begin
- sw := True;
- sp := i;
- //i := i + 1;
- oc:='';
- end;
- end else
- if (sw) then begin
- sx := Copy(s,i,1);
- if (AnsiPos(sx, SN) > 0) then begin
- No := No + sx;
- end else begin
- if (No <> '') and (No <> '-') then begin
- Add(sp, i, No);
- al := True;
- end;
- sw := False;
- //
- i := i - 1;
- //
- No := '';
- oc:='';
- //chk := False;
- end;
- end else begin
- if Copy(s,i,1) = '<' then oc := '';
- oc := oc + Copy(s,i,1);
- chk := False;
- al := False;
- end;
- end;
- mbLeadByte : begin
- if (not sw) and (Copy(s,i,4) = '\81\84\81\84') then begin
- sw := True;
- sp := i;
- i := i + 3;
- chk := True;
- end else
- if (not sw) and (Copy(s,i,2) = '\81\84') then begin
- sw := True;
- sp := i;
- i := i + 1;
- chk := True;
- end else
- if (sw) then begin
- sx := Copy(s,i,2);
- if (AnsiPos(sx, ZN) > 0) then begin
- No := No + ZenToHan(sx);
- end else begin
- if (No <> '') and (No <> '-') and (No <> '\81|') then begin
- Add(sp, i, No);
- end;
- sw := False;
- i := i - 1;
- No := '';
- end;
+ s := Trim(LongName);
+ if (Length(s) <= ALength) then begin
+ Result := s;
+ end else begin
+ S := s;
+ for i := Low(ERASECHAR) to High(ERASECHAR) do begin
+ S := CustomStringReplace(S, ERASECHAR[i], '');
+ end;
+ if (Length(S) <= ALength) then begin
+ Result := S;
+ end else begin
+ Windows.LCMapString(
+ GetUserDefaultLCID(),
+ LCMAP_HALFWIDTH,
+ PChar(S),
+ Length(S) + 1,
+ chr,
+ Sizeof(chr)
+ );
+ S := Chr;
+ S := Copy(S,1,ALength);
+ while true do begin
+ if (ByteType(S, Length(S)) = mbLeadByte ) then begin
+ S := Copy(S, 1, Length(S) - 1);
end else begin
- oc := '';
- chk := False;
+ Break;
end;
- al := False;
- end;
- end;
- inc(i);
- if (i > Length(Body)) then begin
- if (sw) then begin
- if (No <> '') then Add(sp, i, No);
end;
- Break;
- end;
- end;
- for i := List.Count - 1 downto 0 do begin
- //plName := Copy(PluginName, LastDelimiter('\',PluginName) + 1, Length(PluginName) - LastDelimiter('/',PluginName) -1 );
- if (AnsiPos('-', PIndex(List[i]).FNo) > 0) then begin
- st := ChooseString(PIndex(List[i]).FNo, '-', 0);
- et := ChooseString(PIndex(List[i]).FNo, '-', 1);
- end else begin
- st := PIndex(List[i]).FNo;
- et := PIndex(List[i]).FNo;
+ Result := S;
end;
- r := Copy(r,0, PIndex(List[i]).FIndexFrom - 1) +
- Format('<a href="%s&%s=%s&%s=%s&%s=%s" target="_blank">',
- [FullURL, ParamStart, st, ParamTo, et, ParamNoFirst, ParamTrue]) +
- Copy(r,PIndex(List[i]).FIndexFrom, PIndex(List[i]).FIndexTo - PIndex(List[i]).FIndexFrom) + '</A>' +
- Copy(r,PIndex(List[i]).FIndexTo,Length(r));
- Dispose(PIndex(List[i]));
end;
- List.Free;
- Result := r;
end;
-
+{!
+\brief Boolean \82ð Integer \82É\95Ï\8a·
+\return False..0, True..1
+}
function TGikoSys.BoolToInt(b: Boolean): Integer;
begin
Result := IfThen(b, 1, 0);
end;
+{!
+\brief Integer \82ð Boolean \82É\95Ï\8a·
+\return 1..True, other..False
+\todo 0..False, other..True \82Ì\95û\82ª\82¢\82¢\82Ì\82Å\82Í?
+ (\82±\82Ì\8ed\97l\82É\88Ë\91¶\82µ\82Ä\82¢\82é\82©\82à\82µ\82ê\82È\82¢\82Ì\82Å\96¢\8fC\90³)
+}
function TGikoSys.IntToBool(i: Integer): Boolean;
begin
Result := i = 1;
end;
-//gzip\82Å\88³\8fk\82³\82ê\82½\82Ì\82ð\96ß\82·
+{!
+\brief gzip\82Å\88³\8fk\82³\82ê\82½\82Ì\82ð\96ß\82·
+\param ResStream \93Ç\82Ý\8d\9e\82Þ\83X\83g\83\8a\81[\83\80
+\param ContentEncoding \83G\83\93\83R\81[\83f\83B\83\93\83O
+\return \93W\8aJ\82³\82ê\82½\95¶\8e\9a\97ñ
+}
function TGikoSys.GzipDecompress(ResStream: TStream; ContentEncoding: string): string;
const
BUF_SIZE = 4096;
buf: array[0..BUF_SIZE - 1] of Byte;
cnt: Integer;
s: string;
- i: Integer;
+ i, ln: Integer;
begin
Result := '';
TextStream := TStringStream.Create('');
//NULL\95¶\8e\9a\82ð"*"\82É\82·\82é
s := TextStream.DataString;
i := Length(s);
+ ln := i;
while (i > 0) and (s[i] = #0) do
Dec(i);
- s := Copy(s, 1, i);
+ Delete(s, i + 1, ln - i);
i := Pos(#0, s);
while i <> 0 do begin
s[i] := '*';
i := Pos(#0, s);
end;
+
Result := s;
finally
TextStream.Free;
end;
end;
-procedure TGikoSys.LoadKeySetting(ActionList: TActionList);
+{!
+\brief \83A\83N\83V\83\87\83\93\82É\83V\83\87\81[\83g\83J\83b\83g\83L\81[\82ð\90Ý\92è
+\param ActionList \90Ý\92è\82·\82é\83A\83N\83V\83\87\83\93\88ê\97\97
+\param FileName Ini\83t\83@\83C\83\8b\82Ì\96¼\91O
+}
+procedure TGikoSys.LoadKeySetting(ActionList: TActionList; FileName: String);
const
STD_SEC = 'KeySetting';
var
SecList: TStringList;
Component: TComponent;
begin
- if not FileExists(GetConfigDir + KEY_SETTING_FILE_NAME) then
+ if not FileExists(fileName) then
Exit;
SecList := TStringList.Create;
- ini := TMemIniFile.Create(GetConfigDir + KEY_SETTING_FILE_NAME);
+ ini := TMemIniFile.Create(fileName);
try
ini.ReadSection(STD_SEC, SecList);
for i := 0 to SecList.Count - 1 do begin
end;
end;
-procedure TGikoSys.SaveKeySetting(ActionList: TActionList);
-const
- STD_SEC = 'KeySetting';
-var
- i: Integer;
- ini: TMemIniFile;
-begin
- ini := TMemIniFile.Create(GetConfigDir + KEY_SETTING_FILE_NAME);
- try
- for i := 0 to ActionList.ActionCount - 1 do begin
- if ActionList.Actions[i].Tag = -1 then
- Continue;
- ini.WriteInteger(STD_SEC, ActionList.Actions[i].Name, TAction(ActionList.Actions[i]).ShortCut);
- end;
- ini.UpdateFile;
- finally
- ini.Free;
- end;
-end;
-
-procedure TGikoSys.LoadEditorKeySetting(ActionList: TActionList);
-const
- STD_SEC = 'KeySetting';
-var
- i: Integer;
- ini: TMemIniFile;
- ActionName: string;
- ActionKey: Integer;
- SecList: TStringList;
- Component: TComponent;
-begin
- if not FileExists(GetConfigDir + EKEY_SETTING_FILE_NAME) then
- Exit;
- SecList := TStringList.Create;
- ini := TMemIniFile.Create(GetConfigDir + EKEY_SETTING_FILE_NAME);
- try
- ini.ReadSection(STD_SEC, SecList);
- for i := 0 to SecList.Count - 1 do begin
- ActionName := SecList[i];
- ActionKey := ini.ReadInteger(STD_SEC, ActionName, -1);
- if ActionKey <> -1 then begin
- Component := ActionList.Owner.FindComponent(ActionName);
- if TObject(Component) is TAction then begin
- TAction(Component).ShortCut := ActionKey;
- end;
- end;
- end;
- finally
- ini.Free;
- SecList.Free;
- end;
-end;
+{!
+\brief \83A\83N\83V\83\87\83\93\82É\90Ý\92è\82³\82ê\82Ä\82¢\82é\83V\83\87\81[\83g\83J\83b\83g\83L\81[\82ð\83t\83@\83C\83\8b\82É\95Û\91¶
+\param ActionList \95Û\91¶\82·\82é\83A\83N\83V\83\87\83\93\88ê\97\97
+\param FileName Ini\83t\83@\83C\83\8b\96¼
-procedure TGikoSys.SaveEditorKeySetting(ActionList: TActionList);
+ActionList \82É\90Ý\92è\82³\82ê\82Ä\82¢\82é\83V\83\87\81[\83g\83J\83b\83g\83L\81[\82ð FileName \82É\95Û\91¶\82µ\82Ü\82·\81B
+}
+procedure TGikoSys.SaveKeySetting(ActionList: TActionList; FileName: String);
const
STD_SEC = 'KeySetting';
var
i: Integer;
ini: TMemIniFile;
begin
- ini := TMemIniFile.Create(GetConfigDir + EKEY_SETTING_FILE_NAME);
+ ini := TMemIniFile.Create(GetConfigDir + FileName);
try
for i := 0 to ActionList.ActionCount - 1 do begin
if ActionList.Actions[i].Tag = -1 then
end;
end;
-//
+
+{!
+\brief \83v\83\8d\83Z\83X\82Ì\90¶\90¬
+\param AppPath \8bN\93®\82·\82é\83v\83\8d\83Z\83X\82Ì\83t\83@\83C\83\8b\83p\83X
+\param Param AppPath \82É\93n\82·\88ø\90\94
+}
procedure TGikoSys.CreateProcess(const AppPath: string; const Param: string);
var
PI: TProcessInformation;
PI);
end;
+{!
+\brief Web \83u\83\89\83E\83U\82ð\8bN\93®
+\param URL Web \83u\83\89\83E\83U\82Å\95\\8e¦\82·\82é URL
+\param BrowserType \83u\83\89\83E\83U\82Ì\83^\83C\83v(IE \82©\82Ç\82¤\82©)
+}
procedure TGikoSys.OpenBrowser(URL: string; BrowserType: TGikoBrowserType);
begin
case BrowserType of
end;
end;
+{!
+\brief \95¶\8e\9a\8eÀ\91Ì\8eQ\8fÆ\82ð\83f\83R\81[\83h
+\param AStr \83f\83R\81[\83h\82·\82é\95¶\8e\9a\97ñ
+\return \83f\83R\81[\83h\82³\82ê\82½\95¶\8e\9a\97ñ
+}
function TGikoSys.HTMLDecode(const AStr: String): String;
var
Sp, Rp, Cp, Tp: PChar;
SetLength(Result, Rp - PChar(Result));
end;
+{!
+\brief HTML \82Ì\83A\83\93\83J\81[\83^\83O\82©\82ç URL \82ð\8eæ\93¾
+\param s URL \82ð\8eæ\93¾\82·\82é HTML
+\return \8eæ\93¾\82µ\82½ URL
+}
function TGikoSys.GetHRefText(s: string): string;
var
Index: Integer;
Result := Trim(s);
end;
-//\83z\83X\83g\96¼\82ª\82Q\82\83\82\88\82©\82Ç\82¤\82©\83`\83F\83b\83N\82·\82é
+{!
+\brief \83z\83X\83g\96¼\82ª\82Q\82\83\82\88\82©\82Ç\82¤\82©\83`\83F\83b\83N\82·\82é
+\param Host \83`\83F\83b\83N\82·\82é\83z\83X\83g\96¼
+\return 2\82¿\82á\82ñ\82Ë\82é\82Ì\83z\83X\83g\96¼\82È\82ç True
+}
function TGikoSys.Is2chHost(Host: string): Boolean;
const
HOST_NAME: array[0..1] of string = ('2ch.net', 'bbspink.com');
end;
end;
+{!
+\brief 2\82¿\82á\82ñ\82Ë\82é\8c`\8e®\82Ì URL \82ð\95ª\89ð
+\param url 2\82¿\82á\82ñ\82Ë\82é\8c`\8e®\82Ì URL
+\param path test/read.cgi \82È\82Ç\82Ì\92\86\8aÔ\83p\83X(ParseURI \82©\82ç\93¾\82é)
+\param document index.html \82È\82Ç\82Ì\83h\83L\83\85\83\81\83\93\83g\96¼(ParseURI \82©\82ç\93¾\82é)
+\param BBSID OUT:BBSID \82ª\95Ô\82é(ex. giko)
+\param BBSKey OUT:\83X\83\8c\83b\83h\83L\81[\82ª\95Ô\82é(ex. 10000000000)
+\return 2\82¿\82á\82ñ\82Ë\82é\82Ì URL \82Æ\82µ\82Ä\95ª\89ð\82Å\82«\82½\82È\82ç True
+}
function TGikoSys.Parse2chURL(const url: string; const path: string; const document: string; var BBSID: string; var BBSKey: string): Boolean;
var
Index: Integer;
end;
end;
end;
+
+{!
+\brief 2ch \8c`\8e®\82Ì URL \82©\82ç\83\8c\83X\94Ô\82ð\8eæ\93¾
+\param URL 2\82¿\82á\82ñ\82Ë\82é\8c`\8e®\82Ì URL
+\param stRes OUT:\8aJ\8en\83\8c\83X\94Ô\82ª\95Ô\82é
+\param endRes OUT:\8fI\97¹\83\8c\83X\94Ô\82ª\95Ô\82é
+
+http://2ch.net/\92\86\97ª/32-50 \n
+\82Ì\8fê\8d\87 stRef = 32, endRes = 50 \82É\82È\82é
+}
procedure TGikoSys.GetPopupResNumber(URL : string; var stRes, endRes : Int64);
var
buf : String;
end;
end;
+{!
+\brief 2\82¿\82á\82ñ\82Ë\82é\8c`\8e®\82Ì URL \82ð\95ª\89ð
+\param URL 2\82¿\82á\82ñ\82Ë\82é\8c`\8e®\82Ì URL
+\return \95ª\89ð\82³\82ê\82½\97v\91f
+}
function TGikoSys.Parse2chURL2(URL: string): TPathRec;
var
i: Integer;
end;
end;
+{!
+\brief URI \82ð\95ª\89ð
+\param URL \95ª\89ð\82·\82é URI
+\param Protocol OUT:\83v\83\8d\83g\83R\83\8b\82ª\95Ô\82é(ex. http)
+\param Host OUT:\83z\83X\83g\82ª\95Ô\82é(ex. hoge.com)
+\param Path OUT:\92\86\8aÔ\83p\83X\82ª\95Ô\82é(ex. test/read.cgi)
+\param Document OUT:\83h\83L\83\85\83\81\83\93\83g\96¼\82ª\95Ô\82é(ex. index.html)
+\param Port OUT:\83|\81[\83g\82ª\95Ô\82é(ex. 8080)
+\param Bookmark OUT:\83u\83b\83N\83}\81[\83N(?)\82ª\95Ô\82é
+}
procedure TGikoSys.ParseURI(const URL : string; var Protocol, Host, Path, Document, Port, Bookmark: string);
var
URI: TIdURI;
end;
end;
+{!
+\brief \83M\83R\83i\83r\82Ì\83o\81[\83W\83\87\83\93\82ð\8eæ\93¾
+\return \83o\81[\83W\83\87\83\93\82Ì\89º 2 \8c\85(dwFileVersionLS)
+}
function TGikoSys.GetVersionBuild: Integer;
var
FixedFileInfo: PVSFixedFileInfo;
end;
end;
+{!
+\brief \83X\83\8c\83b\83h URL \82Ì\90³\8bK\89»
+\param inURL \90³\8bK\89»\82·\82é\83X\83\8c\83b\83h URL
+\return \90³\8bK\89»\82³\82ê\82½\83X\83\8c\83b\83h URL
+
+\83X\83\8c\83b\83h URL \82ð\83M\83R\83i\83r\82Ì\92\86\82Å\88ê\88Ó\82È\82à\82Ì\82É\90³\8bK\89»\82µ\82Ü\82·\81B
+\88ê\88Ó\82È URL \82É\82·\82é\8e\96\82Å\81AURL \82©\82ç\83X\83\8c\83b\83h\82ð\93±\82«\8fo\82·\8dì\8bÆ\82ð\8dÅ\93K\89»\82µ\82Ü\82·\81B\n
+\90³\8bK\89»\82Ì\95û\90j\82Æ\82µ\82Ä\81A\83T\83C\83g\82ª\90\84\8f§\82·\82é\83f\83t\83H\83\8b\83g\82Ì URL \82É\82È\82é\82æ\82¤\82É\90S\82ª\82¯\82Ü\82·\81B
+(1-1000 \82Ì\82æ\82¤\82È\95\89\89×\82ð\82©\82¯\82é\82à\82Ì\82É\82Í\82µ\82È\82¢\82±\82Æ)
+
+\97á(\90³\8bK\89»\91O):\n
+http://\92\86\97ª/ \n
+http://\92\86\97ª/20-100
+
+(\90³\8bK\89»\8cã):\n
+http://\92\86\97ª/l50
+}
function TGikoSys.GetBrowsableThreadURL(
inURL : string
) : string;
end;
+{!
+\brief \83X\83\8c\83b\83h URL \82ð\94Â URL \82É\95Ï\8a·
+\param inURL \83X\83\8c\83b\83h URL
+\return \94Â URL
+}
function TGikoSys.GetThreadURL2BoardURL(
inURL : string
) : string;
end;
+{!
+\brief 2ch\97p:\83X\83\8c\83b\83h URL \82ð\94Â URL \82É\95Ï\8a·
+\param inURL \83X\83\8c\83b\83h URL
+\return \94Â URL
+\see TGikoSys.GetThreadURL2BoardURL
+}
function TGikoSys.Get2chThreadURL2BoardURL(
inURL : string
) : string;
end;
+{!
+\brief 2ch\97p:\83X\83\8c\83b\83h URL \82Ì\90³\8bK\89»
+\param inURL \90³\8bK\89»\82·\82é\83X\83\8c\83b\83h URL
+\return \90³\8bK\89»\82³\82ê\82½\83X\83\8c\83b\83h URL
+\see TGikoSys.GetBrowsableThreadURL
+}
function TGikoSys.Get2chBrowsableThreadURL(
inURL : string
) : string;
end;
+{!
+\brief 2ch\97p:\94Â URL \82©\82ç\83X\83\8c\83b\83h URL \82ð\8dì\90¬
+\param inBoard \94Â URL
+\param inKey \83X\83\8c\83b\83h\83L\81[(ex. 1000000000)
+\return \83X\83\8c\83b\83h URL
+}
function TGikoSys.Get2chBoard2ThreadURL(
inBoard : TBoard;
inKey : string
end;
-(*************************************************************************
- *\8b@\94\\96¼\81@\81@\81F\83{\81[\83h\83t\83@\83C\83\8b\97ñ\8b\93
- *\89Â\8e\8b\81@\81@\81@\81FPublic
- *************************************************************************)
+{!
+\brief \83{\81[\83h\83t\83@\83C\83\8b\97ñ\8b\93
+
+\97ñ\8b\93\82³\82ê\82½ BBS(\83{\81[\83h) \82Í BBSs \82É\93ü\82è\82Ü\82·\81B
+}
procedure TGikoSys.ListBoardFile;
var
boardFileList : TStringList;
- i, l, k : Integer;
+ i, l : Integer;
begin
// BBS \82Ì\8aJ\95ú
try
BoardFileList := TStringList.Create;
try
BoardFileList.BeginUpdate;
- GikoSys.GetFileList( GikoSys.Setting.GetBoardDir, '*', BoardFileList, True, True );
+ GikoSys.GetFileList( GikoSys.Setting.GetBoardDir, '*.txt', BoardFileList, True, True );
BoardFileList.EndUpdate;
- for k := BoardFileList.Count - 1 downto 0 do begin
- if AnsiCompareText(ExtractFileExt(BoardFileList[ k ]), '.bak') = 0 then
- BoardFileList.Delete(k);
- end;
- SetLength( BBSs, l + BoardFileList.Count );
+ SetLength( BBSs, l + BoardFileList.Count );
for i := BoardFileList.Count - 1 downto 0 do begin
BBSs[ l ] := TBBS.Create( BoardFileList[ i ] );
BBSs[ l ].Title := ChangeFileExt( ExtractFileName( BoardFileList[ i ] ), '' );
end;
end;
end;
-(*************************************************************************
- *\8b@\94\\96¼\81@\81@\81F\83{\81[\83h\83t\83@\83C\83\8b\93Ç\82Ý\8d\9e\82Ý
- *\89Â\8e\8b\81@\81@\81@\81FPublic
- *************************************************************************)
+
+{!
+\brief \83{\81[\83h\83t\83@\83C\83\8b\93Ç\82Ý\8d\9e\82Ý
+\param bbs \83{\81[\83h\83t\83@\83C\83\8b\82ð\93Ç\82Ý\8d\9e\82Þ BBS
+}
procedure TGikoSys.ReadBoardFile( bbs : TBBS );
var
// idx : Integer;
end;
end;
- if (Board.No = 0) then begin
+ if (Board.Multiplicity = 0) then begin
Board.BeginUpdate;
Board.No := j + 1;
+ Board.Multiplicity := 1;
Board.Title := BoardList[j];
Board.RoundDate := ZERO_DATE;
-
- Board.Multiplicity := 0;
Board.LoadSettings;
Board.EndUpdate;
end else begin
end;
+{!
+\brief \96¼\8fÌ\82ª\95s\96¾\82È\83J\83e\83S\83\8a\82Ì\90¶\90¬
+\return \90¶\90¬\82³\82ê\82½\83J\83e\83S\83\8a
+}
function TGikoSys.GetUnknownCategory : TCategory;
const
UNKNOWN_CATEGORY = '(\96¼\8fÌ\95s\96¾)';
end;
+{!
+\brief \96¼\8fÌ\82ª\95s\96¾\82È BBS \82Ì\90¶\90¬
+\return \90¶\90¬\82³\82ê\82½ BBS
+}
function TGikoSys.GetUnknownBoard( inPlugIn : TBoardPlugIn; inURL : string ) : TBoard;
var
category : TCategory;
end;
end;
+
+//! Samba.ini
function TGikoSys.GetSambaFileName : string;
begin
Result := Setting.GetSambaFileName;
end;
-procedure TGikoSys.SambaFileExists();
-var
- sambaTmp: string;
- sambaStrList: TStringList;
-begin
- if not FileExists(GikoSys.GetSambaFileName) then begin
- sambaTmp := ChangeFileExt(GikoSys.GetSambaFileName, '.default');
- sambaStrList := TStringList.Create;
- try
- if FileExists(sambaTmp) then begin
- sambaStrList.LoadFromFile(sambaTmp);
- sambaStrList.SaveToFile(GikoSys.GetSambaFileName);
- end;
- finally
- sambaStrList.Free;
- end;
- end;
-end;
-function TGikoSys.GetSameIDResAnchor(const AID : string; ThreadItem: TThreadItem; limited: boolean):string;
+
+{!
+\brief \93¯\82¶\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\83A\83\93\83J\81[\82É\82µ\82Ä\97ñ\8b\93
+\param AID \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
+\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
+\param limited \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç1\88È\8fã
+\return \97ñ\8b\93\82³\82ê\82½\83\8c\83X\83A\83\93\83J\81[
+}
+function TGikoSys.GetSameIDResAnchor(
+ const AID : string; ThreadItem: TThreadItem;
+ limited: Integer):string;
var
i: integer;
body: TStringList;
+ Res: TResRec;
+ ResLink : TResLinkRec;
begin
- Result := '';
- if (not IsNoValidID(AID)) and
- (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
- body := TStringList.Create;
- try
- GetSameIDRes(AID, ThreadItem, body);
- if (limited) and (body.Count > 20) then begin
- for i := body.Count - 20 to body.Count - 1 do begin
- Result := Result + '>' + body[i] + ' ';
- end;
- end else begin
- for i := 0 to body.Count - 1 do begin
- Result := Result + '>' + body[i] + ' ';
- end;
- end;
- finally
- body.Free;
- end;
- Result := ConvRes(Result, ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true', false);
- end;
+ // body\88È\8aO\82Í\8eg\97p\82µ\82È\82¢\82Ì\82Å\8f\89\8aú\89»\82µ\82È\82¢
+ Res.FBody := '';
+ Res.FType := glt2chNew;
+
+ Result := '';
+ if (not IsNoValidID(AID)) and
+ (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
+ body := TStringList.Create;
+ try
+ GetSameIDRes(AID, ThreadItem, body);
+ if (limited > 0) and (body.Count > limited) then begin
+ for i := body.Count - limited to body.Count - 1 do begin
+ Res.FBody := Res.FBody + '>' + body[i] + ' ';
+ end;
+ end else begin
+ for i := 0 to body.Count - 1 do begin
+ Res.FBody := Res.FBody + '>' + body[i] + ' ';
+ end;
+ end;
+ finally
+ body.Free;
+ end;
+ ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
+ ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
+ HTMLCreater.ConvRes(@Res, @ResLink, false);
+ Result := Res.FBody;
+ end;
end;
+
+{!
+\brief \93¯\82¶\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\97ñ\8b\93
+\param AID \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
+\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
+\param body OUT:\97ñ\8b\93\82³\82ê\82½\83\8c\83X\94Ô\8d\86\82ª\95Ô\82é
+}
procedure TGikoSys.GetSameIDRes(const AID : string; ThreadItem: TThreadItem;var body: TStringList);
var
i: integer;
for i := 0 to threadItem.Count - 1 do begin
// \83\8c\83X
- Res := DivideStrLine(boardPlugIn.GetDat(DWORD( threadItem ), i + 1));
+ THTMLCreate.DivideStrLine(boardPlugIn.GetDat(DWORD( threadItem ), i + 1), @Res);
if(AnsiPos(AID, Res.FDateTime) > 0) then begin
body.Add(IntToStr(i+1));
end;
try
ReadList.LoadFromFile(ThreadItem.GetThreadFileName);
for i := 0 to ReadList.Count - 1 do begin
- Res := DivideStrLine(ReadList[i]);
+ THTMLCreate.DivideStrLine(ReadList[i], @Res);
if AnsiPos(AID, Res.FDateTime) > 0 then begin
body.Add(IntToStr(i+1));
end;
end;
end;
end;
-function TGikoSys.GetSameIDResAnchor(AIDNum : Integer; ThreadItem: TThreadItem; limited: boolean):string;
+
+{!
+\brief \93¯\82¶\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\97ñ\8b\93
+\param AIDNum \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
+\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
+\param limited \97ñ\8b\93\82·\82é\90\94\82ð\90§\8cÀ\82·\82é\82È\82ç1\88È\8fã
+\return
+}
+function TGikoSys.GetSameIDResAnchor(AIDNum : Integer;
+ ThreadItem: TThreadItem;
+ limited: Integer):string;
var
i: integer;
body: TStringList;
+ Res: TResRec;
+ ResLink : TResLinkRec;
begin
+ // body\88È\8aO\82Í\8eg\97p\82µ\82È\82¢\82Ì\82Å\8f\89\8aú\89»\82µ\82È\82¢
+ Res.FBody := '';
+ Res.FType := glt2chNew;
+
Result := '';
if (ThreadItem <> nil) and (ThreadItem.IsLogFile) then begin
body := TStringList.Create;
try
GetSameIDRes(AIDNum, ThreadItem, body);
- if (limited) and (body.Count > 20) then begin
- for i := body.Count - 20 to body.Count - 1 do begin
- Result := Result + '>' + body[i] + ' ';
- end;
+ if (limited > 0) and ( body.Count > limited) then begin
+ for i := body.Count - 20 to body.Count - 1 do begin
+ Res.FBody := Res.FBody + '>' + body[i] + ' ';
+ end;
end else begin
for i := 0 to body.Count - 1 do begin
- Result := Result + '>' + body[i] + ' ';
+ Res.FBody := Res.FBody + '>' + body[i] + ' ';
end;
end;
finally
body.Free;
end;
- Result := ConvRes(Result, ThreadItem.ParentBoard.BBSID, ChangeFileExt(ThreadItem.FileName, ''), 'bbs', 'key', 'st', 'to', 'nofirst', 'true', false);
+ ResLink.FBbs := ThreadItem.ParentBoard.BBSID;
+ ResLink.FKey := ChangeFileExt(ThreadItem.FileName, '');
+ HTMLCreater.ConvRes(@Res, @ResLink, false);
+ Result := Res.FBody;
end;
end;
+{!
+\brief \93¯\82¶\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\97ñ\8b\93
+\param AIDNum \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
+\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
+\param body OUT:\97ñ\8b\93\82³\82ê\82½\83\8c\83X\94Ô\8d\86\82ª\95Ô\82é
+}
procedure TGikoSys.GetSameIDRes(AIDNum : Integer; ThreadItem: TThreadItem;var body: TStringList);
var
Res: TResRec;
//===== \83v\83\89\83O\83C\83\93\82É\82æ\82é\95\\8e¦
//boardPlugIn := ThreadItem.BoardPlugIn;
boardPlugIn := ThreadItem.ParentBoard.BoardPlugIn;
- Res := DivideStrLine(boardPlugIn.GetDat(DWORD( threadItem ), AIDNum));
+ THTMLCreate.DivideStrLine(boardPlugIn.GetDat(DWORD( threadItem ), AIDNum), @Res);
end else begin
- Res := DivideStrLine( ReadThreadFile(ThreadItem.GetThreadFileName, AIDNum));
+ THTMLCreate.DivideStrLine( ReadThreadFile(ThreadItem.GetThreadFileName, AIDNum), @Res);
end;
AID := Res.FDateTime;
if AnsiPos('id', AnsiLowerCase(AID)) > 0 then begin
GetSameIDRes(AID, ThreadItem, body);
end;
end;
+
+{!
+\brief \93¯\82¶\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\83J\83E\83\93\83g
+\param AID \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
+\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
+\return \93¯\82¶ ID \82ð\8e\9d\82Â\83\8c\83X\82Ì\90\94
+}
function TGikoSys.GetSameIDResCount(const AID : string; ThreadItem: TThreadItem):Integer;
var
body: TStringList;
end;
end;
+
+{!
+\brief \93¯\82¶\93\8a\8de ID \82ð\8e\9d\82Â\83\8c\83X\82ð\83J\83E\83\93\83g
+\param AIDNum \8cÂ\90l\82ð\93Á\92è\82·\82é\93\8a\8de ID
+\param ThreadItem \97ñ\8b\93\82·\82é\83X\83\8c\83b\83h
+\return \93¯\82¶ ID \82ð\8e\9d\82Â\83\8c\83X\82Ì\90\94
+}
function TGikoSys.GetSameIDResCount(AIDNum : Integer; ThreadItem: TThreadItem):Integer;
var
body: TStringList;
end;
end;
+{!
+\brief \8e\9e\8d\8f\82ð\8e¦\82·\95¶\8e\9a\97ñ\82Å\82Í\96³\82¢\82©\82Ç\82¤\82©
+\param AStr \92²\82×\82é\95¶\8e\9a\97ñ
+\return \8e\9e\8d\8f\82Å\82Í\96³\82¢\82È\82ç True
+\todo \94Û\92è\8c`(Not)\82æ\82è\8dm\92è\8cn(Is)
+}
function TGikoSys.NotDateorTimeString(const AStr : string): boolean;
begin
Result := false;
end;
+{!
+\brief \83X\83p\83\80:\8cê\90\94\82ð\83J\83E\83\93\83g
+\param text \8c³\82É\82È\82é\95¶\8fÍ
+\param wordCount OUT:\83J\83E\83\93\83g\82³\82ê\82½\92P\8cê\82Ì\88ê\97\97\82ª\95Ô\82é
+}
procedure TGikoSys.SpamCountWord( const text : string; wordCount : TWordCount );
begin
end;
+{!
+\brief \83X\83p\83\80:\8aw\8fK\8c\8b\89Ê\82ð\95ú\8aü
+\param wordCount \95ú\8aü\82·\82é\92P\8cê\82Ì\88ê\97\97
+\param isSpam wordCount \82ª\83X\83p\83\80\82Æ\82µ\82Ä\8aw\8fK\82³\82ê\82Ä\82¢\82½\82È\82ç True
+\warning \8aw\8fK\8dÏ\82Ý\82Ì\95¶\8fÍ\82©\82Ç\82¤\82©\82Í\8am\94F\8fo\97\88\82Ü\82¹\82ñ\81B\n
+ Learn \82µ\82Ä\82¢\82È\82¢\95¶\8fÍ\82â isSpam \82ð\8aÔ\88á\82¦\82Ä\8ew\92è\82·\82é\82Æ
+ \83f\81[\83^\83x\81[\83X\82ª\94j\91¹\82µ\82Ü\82·\81B\n
+ \8aw\8fK\8dÏ\82Ý\82©\82Ç\82¤\82©\82Í\93Æ\8e©\82É\8aÇ\97\9d\82µ\82Ä\82\82¾\82³\82¢\81B
+
+\91S\82Ä\82Ì\8aw\8fK\8c\8b\89Ê\82ð\83N\83\8a\83A\82·\82é\82í\82¯\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B\n
+wordCount \82ð\93¾\82½\95¶\8fÍ\82Ì\8aw\8fK\8c\8b\89Ê\82Ì\82Ý\83N\83\8a\83A\82µ\82Ü\82·\81B
+
+\8eå\82É\83X\83p\83\80\82Æ\83n\83\80\82ð\90Ø\82è\91Ö\82¦\82é\82½\82ß\82É Forget -> Learn \82Ì\8f\87\82Å\8eg\97p\82µ\82Ü\82·\81B
+}
procedure TGikoSys.SpamForget( wordCount : TWordCount; isSpam : Boolean );
begin
end;
+{!
+\brief \83X\83p\83\80:\8aw\8fK
+\param wordCount \8aw\8fK\82·\82é\92P\8cê\82Ì\88ê\97\97
+\param isSpam \83X\83p\83\80\82Æ\82µ\82Ä\8aw\8fK\82·\82é\82È\82ç True
+}
procedure TGikoSys.SpamLearn( wordCount : TWordCount; isSpam : Boolean );
begin
end;
+{!
+\brief \83X\83p\83\80:\95¶\8fÍ\82ð\89ð\90Í\82µ\81A\83X\83p\83\80\93x\90\94\82ð\93¾\82é
+\param text \8c³\82É\82È\82é\95¶\8fÍ
+\param wordCount OUT:\83J\83E\83\93\83g\82³\82ê\82½\92P\8cê\82Ì\88ê\97\97\82ª\95Ô\82é(SpamCountWord \82Æ\93¯\93\99)
+\return 0\81`1 \82Ì\83X\83p\83\80\93x\90\94
+}
function TGikoSys.SpamParse( const text : string; wordCount : TWordCount ) : Extended;
begin
end;
end;
+
+{!
+\brief \83\86\81[\83U\90Ý\92è\82Ì CSS \82ð\90¶\90¬
+\return \90¶\90¬\82³\82ê\82½ CSS
+
+[\83c\81[\83\8b]\83\81\83j\83\85\81[-[\83I\83v\83V\83\87\83\93]-[CSS \82Æ\83X\83L\83\93]\83^\83u\82Ì
+[\83t\83H\83\93\83g\82ð\8ew\92è], [\94w\8ci\90F\82ð\8ew\92è] \82É\89\88\82Á\82½ CSS \82ð\90¶\90¬\82µ\82Ü\82·\81B
+}
function TGikoSys.SetUserOptionalStyle(): string;
begin
- Result := '';
+ Result := '';
if Length( GikoSys.Setting.BrowserFontName ) > 0 then
Result := 'font-family:"' + GikoSys.Setting.BrowserFontName + '";';
if GikoSys.Setting.BrowserFontSize <> 0 then
1: Result := Result + 'font-style:italic;';
end;
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
+
+{!
+\brief Be \83v\83\8d\83t\83@\83C\83\8b\82Ö\82Ì\83A\83\93\83J\81[\83^\83O\82ð\90¶\90¬
+\param AID \91Î\8fÛ\82Æ\82È\82é\93ú\95tID\95¶\8e\9a\97ñ
+\param ANum \83\8c\83X\94Ô
+\param AURL \82»\82Ì\83X\83\8c\83b\83h\82ÌURL
+\return \90¶\90¬\82³\82ê\82½\83A\83\93\83J\81[\83^\83O
+}
function TGikoSys.AddBeProfileLink(AID : string; ANum: Integer):string ;
var
p : integer;
end else
Result := AID;
end;
-// \83o\81[\83W\83\87\83\93\8fî\95ñ\82ð\8eæ\93¾
+
+{!
+\brief \83o\81[\83W\83\87\83\93\8fî\95ñ\82ð\8eæ\93¾
+\param KeyWord \8eæ\93¾\82·\82é\8d\80\96Ú
+\return \83o\81[\83W\83\87\83\93\95¶\8e\9a\97ñ
+}
function TGikoSys.GetVersionInfo(KeyWord: TVerResourceKey): string;
const
Translation = '\VarFileInfo\Translation';
end;
end;
end;
-//Plugin\82Ì\8fî\95ñ\82Ì\8eæ\93¾
-//Load\82³\82ê\82½\91S\82Ä\82Ì\83v\83\89\83O\83C\83\93\82Ì\83o\81[\83W\83\87\83\93\8fî\95ñ\82ð\95Ô\82·
-//1\8ds1plugin
+
+{!
+\brief Load \82³\82ê\82Ä\82¢\82é\83v\83\89\83O\83C\83\93\82Ì\83o\81[\83W\83\87\83\93\82ð\97ñ\8b\93
+\return 1\8ds1plugin
+}
function TGikoSys.GetPluginsInfo(): String;
var
i : Integer;
if BoardGroups[i].BoardPlugIn <> nil then begin
BoardGroups[i].BoardPlugIn.VersionInfo(agent, major, minor, release, revision);
+
//"Plugin\82Ì\96¼\91O(major.minor.revision)"
Result := Result +
Format('%s(%d.%d.%d)', [agent, major, minor, revision]) + #13#10;
end;
end;
-//IE\82Ì\83o\81[\83W\83\87\83\93\82ð\8eæ\93¾\82·\82é
+
+//! IE\82Ì\83o\81[\83W\83\87\83\93\82ð\8eæ\93¾\82·\82é
function TGikoSys.GetIEVersion: string;
var
R: TRegistry;
begin
R := TRegistry.Create;
try
+ //\93Ç\82Ý\8eæ\82è\90ê\97p\82É\82µ\82È\82¢\82Æ\81A\90§\8cÀUSER\82Æ\82©\82Ì\8fê\8d\87\81A\8aJ\82¯\82È\82¢\82Ý\82½\82¢
+ R.Access := KEY_EXECUTE;
R.RootKey := HKEY_LOCAL_MACHINE;
R.OpenKey('Software\Microsoft\Internet Explorer', False);
try
R.Free;
end;
end;
+//! main\83t\83H\81[\83\80\82Ì\83V\83\87\81[\83g\83J\83b\83g\83L\81[\82ÌIni\83t\83@\83C\83\8b\96¼
+function TGikoSys.GetMainKeyFileName : String;
+begin
+ Result := Setting.GetMainKeyFileName;
+end;
+//! Editor\83t\83H\81[\83\80\82Ì\83V\83\87\81[\83g\83J\83b\83g\83L\81[\82ÌIni\83t\83@\83C\83\8b\96¼
+function TGikoSys.GetEditorKeyFileName: String;
+begin
+ Result := Setting.GetEditorKeyFileName;
+end;
+//! \93ü\97Í\83A\83V\83X\83g\82Ì\90Ý\92è\83t\83@\83C\83\8b\96¼
+function TGikoSys.GetInputAssistFileName: String;
+begin
+ Result := Setting.GetInputAssistFileName;
+end;
+//! \83M\83R\83i\83r\82Ì\83\81\83b\83Z\81[\83W\82ð\90Ý\92è\82·\82é
+procedure TGikoSys.SetGikoMessage;
+begin
+ if FGikoMessage = nil then begin
+ FGikoMessage := TGikoMessage.Create;
+ end else begin
+ FGikoMessage.Clear;
+ end;
+
+ if (Setting.GengoSupport) then begin
+ try
+ if (FileExists(Setting.GetLanguageFileName)) then begin
+ FGikoMessage.LoadFromFile(Setting.GetLanguageFileName);
+ end;
+ except
+ FGikoMessage.Clear;
+ end;
+ end;
+end;
+//! \83M\83R\83i\83r\82Ì\83\81\83b\83Z\81[\83W\82ð\8eæ\93¾\82·\82é
+function TGikoSys.GetGikoMessage(MesType: TGikoMessageListType): String;
+begin
+ Result := '';
+ if FGikoMessage <> nil then begin
+ Result := FGikoMessage.GetMessage(MesType);
+ end;
+end;
+
+//Tue, 17 Dec 2002 12:18:07 GMT \81¨ TDateTime\82Ö
+//MonaUtils\82©\82ç\88Ú\93®
+function TGikoSys.DateStrToDateTime(const DateStr: string): TDateTime;
+ function StrMonthToMonth(const s: string): integer;
+ const
+ m: array[1..12] of string = ('Jan','Feb','Mar','Apr','May','Jun', 'Jul','Aug','Sep','Oct','Nov','Dec');
+ var
+ i: integer;
+ begin
+ Result := -1;
+ for i := Low(m) to High(m) do begin
+ if (SameText(s, m[i])) then begin
+ Result := i;
+ Break;
+ end;
+ end;
+ end;
+var
+ wDay, wMonth, wYear: word;
+ wHour, wMinute, wSecond: word;
+ sTime: string;
+ d: TDateTime;
+begin
+ wDay := StrToIntDef(ChooseString(DateStr, ' ', 1), 0);
+ wMonth := StrMonthToMonth(ChooseString(DateStr, ' ', 2));
+ wYear := StrToIntDef(ChooseString(DateStr, ' ', 3), 0);
+ sTime := ChooseString(DateStr, ' ', 4);
+ wHour := StrToIntDef(ChooseString(sTime, ':', 0), 0);
+ wMinute := StrToIntDef(ChooseString(sTime, ':', 1), 0);
+ wSecond := StrToIntDef(ChooseString(sTime, ':', 2), 0);
+ d := EncodeDateTime(wYear, wMonth, wDay, wHour, wMinute, wSecond, 0);
+ Result := d;
+end;
+//MonaUtils\82©\82ç\88Ú\93®
+//! \82 \82é\83Z\83p\83\8c\81[\83^\82Å\8bæ\90Ø\82ç\82ê\82½\95¶\8e\9a\97ñ\82©\82ç\82\8e\94Ô\96Ú\82Ì\95¶\8e\9a\97ñ\82ð\8eæ\82è\8fo\82·
+function TGikoSys.ChooseString(const Text, Separator: string; Index: integer): string;
+var
+ S : string;
+ i, p : integer;
+begin
+ S := Text;
+ for i := 0 to Index - 1 do begin
+ if (AnsiPos(Separator, S) = 0) then S := ''
+ else S := Copy(S, AnsiPos(Separator, S) + Length(Separator), Length(S));
+ end;
+ p := AnsiPos(Separator, S);
+ if (p > 0) then Result := Copy(S, 1, p - 1) else Result := S;
+end;
+//! \88ê\8e\9e\83t\83@\83C\83\8b\82©\82ç\82Ì\95\9c\8b\8c
+procedure TGikoSys.RestoreThreadData(Board : TBoard);
+const
+ SECTION = 'Setting';
+var
+ TmpFileList : TStringList;
+ i : Integer;
+ ini : TMemIniFile;
+ ThreadItem : TThreadItem;
+ Boardpath, tmpStr : string;
+begin
+ Boardpath := ExtractFilePath(Board.GetFolderIndexFileName);
+
+ TmpFileList := TStringList.Create;
+ TmpFileList.Sorted := True;
+ TmpFileList.BeginUpdate;
+ try
+ //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\97pTmp\83t\83@\83C\83\8b\83\8a\83X\83g
+ GetFileList(Boardpath, '*.tmp', TmpFileList, False);
+ TmpFileList.EndUpdate;
+ //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\83`\83F\83b\83N
+ for i := TmpFileList.Count - 1 downto 0 do begin
+ ThreadItem := Board.FindThreadFromFileName(ChangeFileExt(TmpFileList[i], '.dat'));
+ if ThreadItem <> nil then begin
+ ini := TMemIniFile.Create(Boardpath + TmpFileList[i]);
+ try
+ tmpStr := ini.ReadString(SECTION, 'RoundDate', DateTimeToStr(ZERO_DATE));
+ ThreadItem.RoundDate := ConvertDateTimeString(tmpStr);
+
+ tmpStr := ini.ReadString(SECTION, 'LastModified', DateTimeToStr(ZERO_DATE));
+ ThreadItem.LastModified := ConvertDateTimeString(tmpStr);
+ ThreadItem.Count := ini.ReadInteger(SECTION, 'Count', 0);
+ ThreadItem.NewReceive := ini.ReadInteger(SECTION, 'NewReceive', 0);
+
+ ThreadItem.Size := ini.ReadInteger(SECTION, 'Size', 0);
+ if(ThreadItem.Size = 0) and (FileExists(ThreadItem.GetThreadFileName)) then begin
+ try
+ ThreadItem.Size := GetFileSize(ThreadItem.GetThreadFileName) - ThreadItem.Count;
+ except
+ end;
+ end;
+
+ //\8f\84\89ñ\82Ì\90Ý\92è\82ÍRoundData\82Ì\95û\82ª\82â\82é\82©\82ç\8f\9f\8eè\82É\90Ý\92è\82µ\82Ä\82Í\83_\83\81\81I\81@by \82à\82¶\82ã
+ //ThreadItem.Round := ini.ReadBool('Setting', 'Round', False);
+ //ThreadItem.RoundName := ini.ReadString('Setting', 'RoundName', ThreadItem.RoundName);
+ ThreadItem.UnRead := False;//ini.ReadBool('Setting', 'UnRead', False);
+ ThreadItem.ScrollTop := ini.ReadInteger(SECTION, 'ScrollTop', 0);
+ ThreadItem.AllResCount := ini.ReadInteger(SECTION, 'AllResCount', ThreadItem.Count);
+ ThreadItem.NewResCount := ini.ReadInteger(SECTION, 'NewResCount', 0);
+ ThreadItem.AgeSage := TGikoAgeSage(ini.ReadInteger(SECTION, 'AgeSage', Ord(gasNone)));
+ finally
+ ini.Free;
+ end;
+ DeleteFile(Boardpath + TmpFileList[i]);
+ end;
+ end;
+ finally
+ TmpFileList.Clear;
+ TmpFileList.Free;
+ end;
+end;
+{
+\brief User32.dll\82ª\97\98\97p\82Å\82«\82é\82©
+\return Boolean \97\98\97p\82Å\82«\82é\8fê\8d\87\82ÍTrue
+}
+function TGikoSys.CanUser32DLL: Boolean;
+var
+ hUser32 : HINST;
+begin
+ Result := False;
+ hUser32 := 0;
+ try
+ try
+ hUser32 := LoadLibrary('User32.dll');
+ if hUser32 <> 0 then begin
+ Result := True;
+ end;
+ except
+ Result := false;
+ end;
+ finally
+ FreeLibrary(hUser32);
+ end;
+end;
+{
+\brief OE\88ø\97p\95\84\8eæ\93¾
+\return OE\82Ì\88ø\97p\95\84\81i\90Ý\92è\82³\82ê\82Ä\82¢\82È\82¢\8fê\8d\87\82Í'>')
+}
+function TGikoSys.GetOEIndentChar : string;
+var
+ regKey : TRegistry;
+ Identities : string;
+ IndentChar : DWORD;
+const
+ DEFAULT_CHAR = '> ';
+ OE_MAIL_PATH = '\Software\Microsoft\Outlook Express\5.0\Mail';
+ INDENT_CHAR = 'Indent Char';
+begin
+
+ Result := DEFAULT_CHAR;
+ regKey := TRegistry.Create;
+ try
+ try
+ regKey.RootKey := HKEY_CURRENT_USER;
+ if not regKey.OpenKey( 'Identities', False ) then
+ Exit;
+ Identities := regKey.ReadString( 'Default User ID' );
+ if Identities = '' then
+ Exit;
+ if not regKey.OpenKey( Identities + OE_MAIL_PATH, False ) then
+ Exit;
+ IndentChar := regKey.ReadInteger( INDENT_CHAR );
+ Result := Char( IndentChar ) + ' ';
+ except
+ end;
+ finally
+ regKey.Free;
+ end;
+
+end;
+//! \92u\8a·\90Ý\92è\83t\83@\83C\83\8b\8eæ\93¾
+function TGikoSys.GetReplaceFileName: String;
+begin
+ Result := Setting.GetReplaceFileName;
+end;
initialization
GikoSys := TGikoSys.Create;