+++ /dev/null
-{********************************************************}
-{ DirectSstp - SSTP Client using DirectSSTP method }
-{ }
-{ Copyright (c) 2001-2003 naruto/CANO-Lab }
-{********************************************************}
-
-
-unit DirectSstp;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Classes, Dialogs, ExtCtrls, Forms;
-
-type
- //\83G\83\89\81[\83R\81[\83h
- TSstpResult = (
- srOk,
- srNoContent,
- srBreak,
- srBadRequest,
- srRequestTimeout,
- srConflict,
- srRefuse,
- srNotImplemented,
- srServiceUnavailable,
- srNotLocalIP,
- srInBlackList,
- srUnknownError
- );
-
- TGiveType = (gtDocument, gtSongname);
-
- TSstpSendOption = (soNoTranslate, soNoDescript);
- TSstpSendOptions = set of TSstpSendOption;
-
- //\8dÄ\91\97\83L\83\85\81[\97p
- TSendScript = class(TObject)
- private
- FScript: String;
- FOption: TSstpSendOptions;
- FID: integer;
- FGhost: String;
- procedure SetOption(const Value: TSstpSendOptions);
- procedure SetScript(const Value: String);
- procedure SetGhost(const Value: String);
- public
- constructor Create(const AScript: String; const AOption: TSstpSendOptions;
- const AGhost: String; const ID: integer);
- property Script: String read FScript write SetScript;
- property Option: TSstpSendOptions read FOption write SetOption;
- property Ghost: String read FGhost write SetGhost;
- property ID: integer read FID;
- end;
-
- TSstpResendEvent = procedure (Sender: TObject; ID: integer;
- const Script: String) of Object;
-
- TDirectSstp = class(TComponent)
- private
- FStatusCode: Integer;
- FSstpSender: String;
- FSentLog: TStringList;
- FRecvLog: TStringList;
- FRecvLogString: String;
- FNextCueID: integer;
- FSendCue: TList;
- FTimer: TTimer;
- FInterval: integer;
- FOnResendResend: TSstpResendEvent;
- FOnResendTrying: TSstpResendEvent;
- FOnResendEnd: TSstpResendEvent;
- FOnResendCountChange: TNotifyEvent;
- FSleep: boolean;
- FOnAfterConnection: TNotifyEvent;
- FWindowHandle: THandle;
- FDirectSstpResult: String;
- FTargetHWnd: THandle;//DirectSSTP
- FBusy: boolean;
- FTimeOut: integer; //\90Ú\91±\92\86\82Í\95Ê\82Ì\90Ú\91±\97v\8b\81\82ð\8eó\82¯\95t\82¯\82È\82¢
- procedure SetSStpSender(const Value: String);
- function GetRecvLog: String;
- function GetSentLog: String;
- procedure SetInterval(const Value: integer);
- procedure SetOnResendResend(const Value: TSstpResendEvent);
- procedure SetOnResendEnd(const Value: TSstpResendEvent);
- procedure SetOnResendTrying(const Value: TSstpResendEvent);
- function GetCueCount: integer;
- procedure SetOnResendCountChange(const Value: TNotifyEvent);
- procedure SetSleep(const Value: boolean);
- procedure SetOnAfterConnection(const Value: TNotifyEvent);
- procedure WndProc(var Msg: TMessage);
- procedure SetTargetHWnd(const Value: THandle);
- procedure SetTimeOut(const Value: integer); //DirectSSTP\97p
- protected
- function ExtractCode(const CodeStr: String): integer;
- function CodeToStatus(const Code: integer): TSstpResult;
- function GetLastStatus: TSstpResult;
- procedure FlushLog;
- procedure ResendTimerEvent(Sender: TObject);
- procedure Loaded; override;
- public
- function ConnectSstp(Source: TStrings): TSstpResult;
- property StatusCode: Integer read FStatusCode;
- property LastStatus: TSstpResult read GetLastStatus;
- property SentLog: String read GetSentLog;
- property RecvLog: String read GetRecvLog;
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- function SstpGIVE(const Document: String): TSstpResult;
- function SstpGIVE1_1(const Data: String;
- const DataType: TGiveType = gtDocument): TSstpResult;
- function SstpCOMMUNICATE(const Sentence: String;
- const Port: integer = 0): TSstpResult;
- function SstpSEND(const Script: String;
- const Option: TSstpSendOptions = [];
- const Ghost: String = ''): TSstpResult; overload;
- function SstpSEND(const Script: TStrings;
- const Option: TSstpSendOptions = [];
- const Handle: HWND = 0;
- const Ghost: String = ''): TSstpResult; overload;
- function SstpEXECUTE(const Command: String): String;
- function SstpExGetName: String;
- function SstpExSetCookie(const Key, Value: String): TSstpResult;
- function SstpExGetCookie(const Key: String): String;
- function SstpExGetVersion: String;
- function SstpExQuiet(const Quiet: boolean): TSstpResult;
- function SstpSENDCue(const Script: String;
- const HighPriority: boolean = false;
- const Option: TSstpSendOptions = [];
- const Ghost: String = ''): integer;
- property CueCount: integer read GetCueCount;
- property Handle: THandle read FWindowHandle;
- procedure ClearCue;
- published
- property TimeOut: integer read FTimeOut write SetTimeOut default 2000;
- property SstpSender: String read FSStpSender write SetSStpSender;
- property Interval: integer read FInterval write SetInterval default 5000;
- property Sleep: boolean read FSleep write SetSleep;
- property TargetHWnd: THandle read FTargetHWnd write SetTargetHWnd;
- property OnResendTrying: TSstpResendEvent read FOnResendTrying write SetOnResendTrying;
- property OnResendEnd: TSstpResendEvent read FOnResendEnd write SetOnResendEnd;
- property OnResendResend: TSstpResendEvent read FOnResendResend write SetOnResendResend;
- property OnResendCountChange: TNotifyEvent read FOnResendCountChange write SetOnResendCountChange;
- property OnAfterConnection: TNotifyEvent read FOnAfterConnection write SetOnAfterConnection;
- end;
-
-const
- //\82±\82Ì\83G\83\89\81[\82Í\81ASSTP\83T\81[\83o\82ª\83X\83e\81[\83^\83X\82ð\95Ô\82³\82¸\82É\90Ø\92f\82µ\82½\82Æ\82«\82È\82Ç\82É\95Ô\82é
- UnknownError = -1000;
-
- //\83\8a\83g\83\89\83C\82ð\8ds\82í\82È\82¢\83X\83e\81[\83^\83X\83R\81[\83h
- NotResendList: set of TSstpResult = [
- srOk,
- srNoContent,
- srBreak,
- srBadRequest,
- srRequestTimeout,
- srRefuse,
- srNotImplemented,
- srServiceUnavailable,
- srNotLocalIP,
- srInBlackList
- ];
-
-procedure Register;
-
-implementation
-
-{ TDirectSstp }
-
-function TDirectSstp.CodeToStatus(const Code: integer): TSstpResult;
-begin
- case Code of
- 200: Result := srOk;
- 204: Result := srNoContent;
- 210: Result := srBreak;
- 400: Result := srBadRequest;
- 408: Result := srRequestTimeout;
- 409: Result := srConflict;
- 420: Result := srRefuse;
- 501: Result := srNotImplemented;
- 503: Result := srServiceUnavailable;
- 504: Result := srNotLocalIP;
- 541: Result := srInBlackList;
- else
- Result := srUnknownError;
- end;
-end;
-
-function TDirectSstp.ConnectSstp(Source: TStrings): TSstpResult;
-var Mes: TCopyDataStruct;
- MesStr: String;
- Dummy: DWORD; //SendMessageTimeout\97p
-begin
- FlushLog;
- Result := srUnknownError;
- if FBusy then Exit;
- FBusy := true;
- FTimer.Enabled := false;
-
- if TargetHWnd <> 0 then begin
- MesStr := Source.Text;
- Mes.dwData := 9801;
- Mes.cbData := Length(MesStr);
- Mes.lpData := PChar(MesStr);
- FDirectSstpResult := '';
- FSentLog.Text := MesStr;
- //SendMessage(TargetHWnd, WM_COPYDATA, FWindowHandle, LPARAM(@Mes));
- SendMessageTimeout(TargetHWnd, WM_COPYDATA, FWindowHandle, LPARAM(@Mes),
- SMTO_ABORTIFHUNG or SMTO_NORMAL, TimeOut, Dummy);
- FRecvLog.Text := FDirectSstpResult;
- if FRecvLog.Count > 0 then
- FStatusCode := ExtractCode(FRecvLog[0])
- else
- FStatusCode := UnknownError;
- Result := CodeToStatus(FStatusCode);
- end;
-
- FTimer.Enabled := not FSleep;
- if Assigned(FOnAfterConnection) then FOnAfterConnection(Self);
- FBusy := false;
-end;
-
-constructor TDirectSstp.Create;
-begin
- inherited;
- TimeOut := 2000;
- FInterval := 5000;
- SstpSender := 'My Program';
- FSentLog := TStringList.Create;
- FRecvLog := TStringList.Create;
- FSendCue := TList.Create;
- FTimer := TTimer.Create(Self);
- FTimer.OnTimer := ResendTimerEvent;
- FWindowHandle := AllocateHWnd(WndProc);
-end;
-
-destructor TDirectSstp.Destroy;
-var i: integer;
-begin
- inherited;
- FSentLog.Free;
- FRecvLog.Free;
- for i := FSendCue.Count-1 downto 0 do
- TSendScript(FSendCue[i]).Free;
- FSendCue.Free;
- DeallocateHWnd(FWindowHandle);
-end;
-
-function TDirectSstp.ExtractCode(const CodeStr: String): integer;
-var i, l: integer;
- s, p: String;
-begin
- if CodeStr = '' then begin
- Result := UnknownError;
- Exit;
- end;
- i := 1;
- l := length(CodeStr);
- while (CodeStr[i] <> ' ') and (i<=l) do begin
- p := p + CodeStr[i];
- Inc(i);
- end;
- Inc(i);
- while (CodeStr[i] in ['0'..'9']) and (i<=l) do begin
- s := s + CodeStr[i];
- Inc(i);
- end;
- try
- Result := StrToInt(s);
- except
- on EConvertError do Result := UnknownError;
- end;
-end;
-
-procedure TDirectSstp.FlushLog;
-begin
- if FSentLog <> nil then FSentLog.Clear;
- if FRecvLog <> nil then FRecvLog.Clear;
- FRecvLogString := '';
-end;
-
-function TDirectSstp.GetLastStatus: TSstpResult;
-begin
- Result := CodeToStatus(FStatusCode);
-end;
-
-
-function TDirectSstp.GetRecvLog: String;
-begin
- Result := FRecvLog.Text;
-end;
-
-function TDirectSstp.GetSentLog: String;
-begin
- Result := FSentLog.Text;
-end;
-
-procedure TDirectSstp.Loaded;
-begin
- inherited;
- FTimer.Interval := FInterval;
- FTimer.Enabled := not FSleep;
- if Assigned(FOnResendCountChange) then FOnResendCountChange(Self);
-end;
-
-procedure TDirectSstp.ResendTimerEvent(Sender: TObject);
-var Scr: TSendScript;
- Res: TSstpResult;
-begin
- if FSendCue.Count = 0 then Exit;
- Scr := TSendScript(FSendCue[0]);
- if Assigned(FOnResendTrying) then FOnResendTrying(Self, Scr.ID, Scr.Script);
- Res := SstpSEND(Scr.Script, Scr.Option, Scr.Ghost);
- if Res in NotResendList then begin
- if Assigned(FOnResendEnd) then FOnResendEnd(Self, Scr.ID, Scr.Script);
- FSendCue.Delete(0);
- if Assigned(FOnResendCountChange) then FOnResendCountChange(Self);
- Scr.Free;
- end else begin
- if Assigned(FOnResendResend) then FOnResendResend(Self, Scr.ID, Scr.Script);
- end;
-end;
-
-procedure TDirectSstp.SetInterval(const Value: integer);
-begin
- FInterval := Value;
- FTimer.Interval := Value;
-end;
-
-procedure TDirectSstp.SetOnResendResend(const Value: TSstpResendEvent);
-begin
- FOnResendResend := Value;
-end;
-
-procedure TDirectSstp.SetOnResendEnd(const Value: TSstpResendEvent);
-begin
- FOnResendEnd := Value;
-end;
-
-procedure TDirectSstp.SetOnResendTrying(const Value: TSstpResendEvent);
-begin
- FOnResendTrying := Value;
-end;
-
-procedure TDirectSstp.SetSstpSender(const Value: String);
-begin
- FSStpSender := Value;
-end;
-
-function TDirectSstp.SstpCOMMUNICATE(const Sentence: String;
- const Port: integer): TSstpResult;
-var Source: TStringList;
-begin
- Source := nil;
- try
- Source := TStringList.Create;
- Source.Add('COMMUNICATE SSTP/1.2');
- Source.Add('Sender: ' + FSstpSender);
- if Port <> 0 then Source.Add('Port: ' + IntToStr(Port));
- Source.Add('Sentence: ' + Sentence);
- Source.Add('CharSet: Shift_JIS');
- Source.Add('HWnd: ' + IntToStr(FWindowHandle));
- ConnectSstp(Source);
- finally
- Source.Free;
- end;
- Result := LastStatus;
-end;
-
-function TDirectSstp.SstpEXECUTE(const Command: String): String;
-var S: String;
- Source: TStringList;
-begin
- Source := nil;
- try
- Source := TStringList.Create;
- Source.Add('EXECUTE SSTP/1.1');
- Source.Add('Sender: ' + FSstpSender);
- Source.Add('Command: ' + Command);
- Source.Add('CharSet: Shift_JIS');
- Source.Add('HWnd: ' + IntToStr(FWindowHandle));
- ConnectSstp(Source);
- finally
- Source.Free;
- end;
- if FRecvLog.Count > 1 then begin
- s := FRecvLog[0];
- FRecvLog.Delete(0);
- Result := FRecvLog.Text;
- FRecvLog.Insert(0, s);
- end else Result := '';
-end;
-
-function TDirectSstp.SstpExGetName: String;
-begin
- Result := SstpEXECUTE('getname');
- Result := StringReplace(Result, #13#10, '', [rfReplaceAll]);
-end;
-
-function TDirectSstp.SstpGIVE(const Document: String): TSstpResult;
-begin
- Result := SstpGIVE1_1(Document, gtDocument);
-end;
-
-function TDirectSstp.SstpGIVE1_1(const Data: String;
- const DataType: TGiveType): TSstpResult;
-var Source: TStringList;
-begin
- Source := nil;
- try
- Source := TStringList.Create;
- Source.Add('GIVE SSTP/1.1');
- Source.Add('Sender: ' + FSstpSender);
- Source.Add('CharSet: Shift_JIS');
- case DataType of
- gtSongname:
- Source.Add('Songname: ' + Data);
- else
- Source.Add('Document: ' + Data);
- end;
- Source.Add('HWnd: ' + IntToStr(FWindowHandle));
- ConnectSstp(Source);
- finally
- Source.Free;
- end;
- Result := LastStatus;
-end;
-
-function TDirectSstp.SstpSEND(const Script: String;
- const Option: TSstpSendOptions = [];
- const Ghost: String = ''): TSstpResult;
-var Source: TStringList;
-begin
- Source := nil;
- try
- Source := TStringList.Create;
- Source.Text := Script;
- Result := SstpSEND(Source, Option, 0, Ghost);
- finally
- Source.Free;
- end;
-end;
-
-function TDirectSstp.SstpSEND(const Script: TStrings;
- const Option: TSstpSendOptions;
- const Handle: HWND;
- const Ghost: String): TSstpResult;
-var Opt: String;
- i: integer;
- Source: TStringList;
-begin
- if soNoTranslate in Option then begin
- Opt := 'notranslate';
- end;
- if soNoDescript in Option then begin
- if Opt <> '' then Opt := Opt + ',';
- Opt := Opt + 'nodescript';
- end;
- Source := nil;
- try
- Source := TStringList.Create;
- Source.Add('SEND SSTP/1.4');
- Source.Add('Sender: ' + FSstpSender);
- Source.Add('Charset: Shift_JIS');
- if Ghost <> '' then Source.Add('IfGhost: '+Ghost);
- for i := 0 to Script.Count -1 do begin
- if i = 0 then begin
- Source.Add('Script: ' + Script[i]);
- end else begin
- Source.Add('Entry: ' + Script[i]);
- end;
- end;
- Source.Add('Option: ' + Opt);
- if Handle <> 0 then
- Source.Add('HWnd: ' + IntToStr(Handle))
- else
- Source.Add('HWnd: ' + IntToStr(FWindowHandle));
- Source.Add(''); //\8bó\8ds\82ª\8fI\97¹\82ð\8e¦\82·
- ConnectSstp(Source);
- finally
- Source.Free;
- end;
- Result := LastStatus;
-end;
-
-function TDirectSstp.SstpSENDCue(const Script: String;
- const HighPriority: boolean; const Option: TSstpSendOptions;
- const Ghost: String): integer;
-var NewScript: TSendScript;
-begin
- Inc(FNextCueID);
- NewScript := TSendScript.Create(Script, Option, Ghost, FNextCueID);
- if HighPriority then begin
- FSendCue.Insert(0, NewScript);
- ResendTimerEvent(Self);
- end else FSendCue.Add(NewScript);
- if Assigned(FOnResendCountChange) then FOnResendCountChange(Self);
- Result := FNextCueID;
-end;
-
-function TDirectSstp.GetCueCount: integer;
-begin
- Result := FSendCue.Count;
-end;
-
-procedure TDirectSstp.SetOnResendCountChange(const Value: TNotifyEvent);
-begin
- FOnResendCountChange := Value;
-end;
-
-procedure TDirectSstp.SetSleep(const Value: boolean);
-begin
- FSleep := Value;
- FTimer.Enabled := false; //\82¢\82Á\82½\82ñ\83^\83C\83}\81[\82ð\94j\8aü\82·\82é
- FTimer.Enabled := not Value;
-end;
-
-procedure TDirectSstp.SetOnAfterConnection(const Value: TNotifyEvent);
-begin
- FOnAfterConnection := Value;
-end;
-
-procedure TDirectSstp.ClearCue;
-var i: integer;
-begin
- for i := FSendCue.Count-1 downto 0 do
- TSendScript(FSendCue[i]).Free;
- FSendCue.Clear;
- if Assigned(FOnResendCountChange) then FOnResendCountChange(Self);
-end;
-
-function TDirectSstp.SstpExGetCookie(const Key: String): String;
-begin
- Result := SstpEXECUTE('GetCookie[' + Key + ']');
- Result := StringReplace(Result, #13#10, '', [rfReplaceAll]);
-end;
-
-function TDirectSstp.SstpExSetCookie(const Key, Value: String): TSstpResult;
-begin
- SstpEXECUTE('SetCookie[' +
- StringReplace(Key, #13#10, '', [rfReplaceAll]) +
- ',' +
- StringReplace(Value, #13#10, '', [rfReplaceAll])
- + ']');
- Result := GetLastStatus;
-end;
-
-function TDirectSstp.SstpExGetVersion: String;
-begin
- Result := SstpEXECUTE('getversion');
- Result := StringReplace(Result, #13#10, '', [rfReplaceAll]);
-end;
-
-function TDirectSstp.SstpExQuiet(const Quiet: boolean): TSstpResult;
-begin
- if Quiet then
- SstpEXECUTE('Quiet')
- else
- SstpEXECUTE('Restore');
- Result := GetLastStatus;
-end;
-
-procedure TDirectSstp.WndProc(var Msg: TMessage);
-var Dat: TWMCopyData;
-begin
- if Msg.Msg = WM_COPYDATA then begin
- Dat := TWMCopyData(Msg);
- FDirectSstpResult := PChar(Dat.CopyDataStruct^.lpData);
- end else begin
- Msg.Result := DefWindowProc(FWindowHandle, Msg.Msg, Msg.wParam, Msg.lParam);
- end;
-end;
-
-procedure TDirectSstp.SetTargetHWnd(const Value: THandle);
-begin
- FTargetHWnd := Value;
-end;
-
-procedure TDirectSstp.SetTimeOut(const Value: integer);
-begin
- FTimeOut := Value;
-end;
-
-{ TSendScript }
-
-constructor TSendScript.Create(const AScript: String;
- const AOption: TSstpSendOptions; const AGhost: String; const ID: integer);
-begin
- FScript := AScript;
- FOption := AOption;
- FGhost := AGhost;
- FID := ID;
-end;
-
-procedure TSendScript.SetGhost(const Value: String);
-begin
- FGhost := Value;
-end;
-
-procedure TSendScript.SetOption(const Value: TSstpSendOptions);
-begin
- FOption := Value;
-end;
-
-procedure TSendScript.SetScript(const Value: String);
-begin
- FScript := Value;
-end;
-
-//-------------------------------------
-
-procedure Register;
-begin
- RegisterComponents('Miscellaneous', [TDirectSstp]);
-end;
-
-end.
-
-
-
-
-
-
-
+++ /dev/null
-{*******************************************************}
-{ IdSLPP20 - Indy Client for SLPP Connection }
-{ }
-{ Copyright (c) 2002-2003 naruto/CANO-Lab }
-{*******************************************************}
-
-unit IdSLPP20;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- IdTCPClient, IdGlobal, IdException;
-
-const
- SLPP_PORT = 9871;
- SLPP_HOST = 'bottle.mikage.to';
-
-type
- TIdSLPPEventType = (etConnectOk, etScript, etMemberCount, etChannelCount,
- etChannelList, etUnicast, etForceBroadcast, etCloseChannel,
- etForceBroadcastInformation, etBroadcastInformation);
- TIdSLPPEvent = procedure (Sender: TObject;
- EventType: TIdSlppEventType; const Param: String) of Object;
-
- TIdSLPP20 = class;
-
- TIdSLPP20ReadThread = class(TThread)
- private
- protected
- FClient: TIdSLPP20;
- FRecvData: TStringList;
- FEvent: TIdSLPPEventType; // SLPP Command
- FParam: String; // SLPP Command Parameter
- FReceivedLog: TStringList;
- function Parse: boolean;
- procedure Execute; override;
- public
- constructor Create(AClient: TIdSLPP20); reintroduce;
- property Client: TIdSLPP20 read FClient;
- end;
-
- TIdSLPP20 = class(TIdTCPClient)
- private
- FSLPPThread: TIdSLPP20ReadThread;
- FDebugMode: boolean;
- FProxyMode: boolean;
- FLUID: String;
- FOnSlppEvent: TIdSlppEvent;
- FOnConnect: TNotifyEvent;
- FOnDisconnect: TNotifyEvent;
- FLastReadTime: Int64;
- FTimeout: Integer;
- FOnConnectFailed: TNotifyEvent;
- procedure SetDebugMode(const Value: boolean);
- procedure SetLUID(const Value: String);
- procedure SetOnSlppEvent(const Value: TIdSlppEvent);
- procedure SetProxyMode(const Value: boolean);
- procedure SetOnConnect(const Value: TNotifyEvent);
- procedure SetOnDisconnect(const Value: TNotifyEvent);
- function GetLastReadTimeInterval: integer;
- procedure SetLastReadTime(const Value: Int64);
- procedure SetOnConnectFailed(const Value: TNotifyEvent);
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- procedure Connect(const ATimeout: Integer = IdTimeoutDefault); override;
- procedure ConnectServer(const ATimeout: Integer = IdTimeoutDefault);
- procedure Disconnect; override;
- procedure DoOnSlppEvent;
- procedure DoOnConnect;
- procedure DoOnConnectFailed;
- property SLPP20ReadThread: TIdSLPP20ReadThread read FSLPPThread;
- property LastReadTime: Int64 read FLastReadTime write SetLastReadTime;
- property LastReadTimeInterval: integer read GetLastReadTimeInterval;
- published
- property LUID: String read FLUID write SetLUID;
- property Port default SLPP_PORT;
- property DebugMode: boolean read FDebugMode write SetDebugMode;
- property ProxyMode: boolean read FProxyMode write SetProxyMode;
- property OnConnect: TNotifyEvent read FOnConnect write SetOnConnect;
- property OnConnectFailed: TNotifyEvent read FOnConnectFailed write SetOnConnectFailed;
- property OnDisconnect: TNotifyEvent read FOnDisconnect write SetOnDisconnect;
- property OnSLPPEvent: TIdSlppEvent read FOnSlppEvent write SetOnSlppEvent;
- {ProxyMode = true\82Ì\82Æ\82«\82Í\81AHost, Port\82É\83v\83\8d\83L\83V\96¼\82ð}
- end;
-
- EIdSlppError = class(EIdException);
- EIdSlppClientConnectError = class(EIdSlppError);
-
-procedure Register;
-
-implementation
-
-procedure Register;
-begin
- RegisterComponents('Indy Clients', [TIdSLPP20]);
-end;
-
-{ TIdSLPP20 }
-
-procedure TIdSLPP20.Connect(const ATimeout: Integer);
-begin
- inherited Connect(ATimeout);
-end;
-
-procedure TIdSLPP20.ConnectServer;
-begin
- try
- FTimeout := ATimeout;
- FSLPPThread := TIdSLPP20ReadThread.Create(self);
- except on E: EIdSocketError do
- raise EIdSlppClientConnectError.Create('Connection Failed');
- end;
-end;
-
-constructor TIdSLPP20.Create(AOwner: TComponent);
-begin
- inherited Create(AOwner);
- Port := SLPP_PORT;
- Host := SLPP_HOST;
-end;
-
-destructor TIdSLPP20.Destroy;
-begin
- inherited;
-end;
-
-procedure TIdSLPP20.Disconnect;
-begin
- inherited Disconnect;
- if Assigned(FSLPPThread) then begin
- FSLPPThread.Terminate;
- // FSLPPThread.WaitFor;
- FSLPPThread := nil;
- end;
- if Assigned(FOnDisconnect) then begin
- OnDisconnect(self);
- end;
-end;
-
-procedure TIdSLPP20.DoOnConnect;
-begin
- if Assigned(FOnConnect) then
- FOnConnect(self);
-end;
-
-procedure TIdSLPP20.DoOnConnectFailed;
-begin
- if Assigned(FOnConnectFailed) then
- FOnConnectFailed(self);
-end;
-
-procedure TIdSLPP20.DoOnSlppEvent;
-begin
- try
- FOnSlppEvent(self, FSLPPThread.FEvent, FSLPPThread.FParam);
- except
- on E: Exception do
- ShowMessage('Exception occured in OnSlppEvent: '#13#10 + E.Message);
- end;
-end;
-
-function TIdSLPP20.GetLastReadTimeInterval: integer;
-begin
- Result := 0;
- if Connected then Result := GetTickCount - FLastReadTime;
-end;
-
-procedure TIdSLPP20.SetDebugMode(const Value: boolean);
-begin
- FDebugMode := Value;
-end;
-
-procedure TIdSLPP20.SetLastReadTime(const Value: Int64);
-begin
- FLastReadTime := Value;
-end;
-
-procedure TIdSLPP20.SetLUID(const Value: String);
-begin
- FLUID := Value;
-end;
-
-procedure TIdSLPP20.SetOnConnect(const Value: TNotifyEvent);
-begin
- FOnConnect := Value;
-end;
-
-procedure TIdSLPP20.SetOnConnectFailed(const Value: TNotifyEvent);
-begin
- FOnConnectFailed := Value;
-end;
-
-procedure TIdSLPP20.SetOnDisconnect(const Value: TNotifyEvent);
-begin
- FOnDisconnect := Value;
-end;
-
-procedure TIdSLPP20.SetOnSlppEvent(const Value: TIdSlppEvent);
-begin
- FOnSlppEvent := Value;
-end;
-
-procedure TIdSLPP20.SetProxyMode(const Value: boolean);
-begin
- FProxyMode := Value;
-end;
-
-{ TIdSLPP20ReadThread }
-
-constructor TIdSLPP20ReadThread.Create(AClient: TIdSLPP20);
-begin
- inherited Create(true);
- FClient := AClient;
- FreeOnTerminate := true;
- Resume;
-end;
-
-procedure TIdSLPP20ReadThread.Execute;
-var Line: String;
-begin
- try
- FClient.Connect(FClient.FTimeout);
- if Assigned(FClient.OnConnect) then begin
- Synchronize(FClient.DoOnConnect);
- end;
- except
- Synchronize(FClient.DoOnConnectFailed);
- Exit;
- end;
-
- FRecvData := TStringList.Create;
- FReceivedLog := TStringList.Create;
- if FClient.ProxyMode then begin
- FClient.Writeln('POST http://bottle.mikage.to:9871/ HTTP/1.0');
- FClient.Writeln('Content-Length: ' + IntToStr(Length(FClient.LUID)));
- FClient.Writeln('Connection: close');
- FClient.Writeln;
- FClient.Writeln(FClient.LUID);
- end else begin
- FClient.WriteLn('POST / HTTP/1.0');
- FClient.WriteLn;
- FClient.WriteLn(FClient.LUID);
- end;
- while not Terminated do begin
- try
- FClient.CheckForDisconnect;
- Line := FClient.ReadLn(EOL);
- if FClient.DebugMode then begin
- FReceivedLog.Add(Line);
- FReceivedLog.SaveToFile(ExtractFilePath(Application.ExeName)+'slpp20_debug.log');
- end;
- if not FClient.ReadLnTimedOut then FClient.LastReadTime := getTickCount;
- if Length(Line) = 0 then begin
- if FRecvData.Count > 0 then begin
- while Parse do begin
- Synchronize(FClient.DoOnSlppEvent);
- end;
- FRecvData.Clear;
- end;
- end else begin
- FRecvData.Add(Line);
- end;
- except
- on EIdException do begin
- Synchronize(self.Terminate);
- end;
- end;
- end;
- FreeAndNil(FReceivedLog);
- FreeAndNil(FRecvData);
-end;
-
-function TIdSLPP20ReadThread.Parse: boolean;
-var
- command: String;
-begin
- command := FRecvData[0];
- FRecvData.Delete(0);
- FParam := FRecvData.Text;
-
- Result := true;
- if command = 'broadcastMessage' then begin
- FEvent := etScript;
- end else if command = 'allUsers' then begin
- FEvent := etMemberCount;
- end else if command = 'channelUsers' then begin
- FEvent := etChannelCount;
- end else if command = 'channelList' then begin
- FEvent := etChannelList;
- end else if (command = 'HTTP/1.0 200 OK') or (command = 'HTTP/1.1 200 OK') then begin
- FEvent := etConnectOk;
- end else if command = 'forceBroadcastMessage' then begin
- FEvent := etForceBroadcast;
- end else if command = 'forceBroadcastInformation' then begin
- FEvent := etForceBroadcastInformation;
- end else if command = 'BroadcastInformation' then begin
- FEvent := etBroadcastInformation;
- end else if command = 'closeChannel' then begin
- FEvent := etCloseChannel;
- end else if command = 'unicastMessage' then begin
- FEvent := etUnicast;
- end else Result := false;
-end;
-
-end.
+++ /dev/null
-(********************************
-
-Sakura API Const Unit
-implemented by naruto/CANO-Lab
-
-********************************)
-
-unit Sakura;
-
-interface
-
-const
-
-(*
- \88È\89º\82Ì\83f\81[\83^\82Í
- phase "inverse" 46.60
- \83h\83L\83\85\83\81\83\93\83g\83f\81[\83^\82ð\8c³\82É\8dì\90¬\82µ\82Ä\82¢\82Ü\82·\81B
-*)
-
-{EXECUTE}
-SA_EXECUTEREMAKEMENU = 0;
-SA_EXECUTEREWRITEFMO = 1;
-
-{GET}
-SA_GETHEADCOLLISIONRECTSAKURA = 128;
-SA_GETFACECOLLISIONRECTSAKURA = 129;
-SA_GETBUSTCOLLISIONRECTSAKURA = 130;
-SA_GETCENTERPOINTSAKURA = 131;
-SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA = 132;
-SA_GETHEADCOLLISIONRECTKERO = 133;
-SA_GETFACECOLLISIONRECTKERO = 134;
-SA_GETBUSTCOLLISIONRECTKERO = 135;
-SA_GETCENTERPOINTKERO = 136;
-SA_GETABSOLUTEKINOKOFIELDCENTERPOINTKERO = 137;
-SA_GETPROCESSID = 138;
-SA_GETSHAREDMEMORY = 139;
-SA_GETGHOSTSTATE = 140;
-
-{NOTIFY}
-SA_NOTIFYEVENT = 256;
-
-{Talking State}
-GS_NONE = 0; //\91Ò\8b@\92\86
-GS_TALKING = 1; //\89½\82©\92\9d\82Á\82Ä\82¢\82é
-GS_TIMECRITICALSESSION = 2; //\83^\83C\83\80\83N\83\8a\83e\83B\83J\83\8b\83Z\83b\83V\83\87\83\93
-
-
-implementation
-
-end.
-
\ No newline at end of file
+++ /dev/null
-unit SakuraAPI;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- Sakura;
-
-type
- TSakuraAPI = class(TComponent)
- private
- { Private \90é\8c¾ }
- FMes: integer;
- FTargetHWnd: THandle;
- FOnRegisterAPI: TNotifyEvent;
- procedure SetTargetHWnd(const Value: THandle);
- procedure SetOnRegisterAPI(const Value: TNotifyEvent);
- protected
- { Protected \90é\8c¾ }
- public
- { Public \90é\8c¾ }
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- procedure Loaded; override;
- //
- function SendAPI(Mes: cardinal; wParam: integer; lParam: integer): integer;
- function ExecuteRemakeMenu: integer;
- function ExecuteRewriteFMO: integer;
- function GetHeadCollisionRectSakura: TRect;
- function GetFaceCollisionRectSakura: TRect;
- function GetBustCollisionRectSakura: TRect;
- function GetCenterPointSakura: TPoint;
- function GetHeadCollisionRectKero: TRect;
- function GetFaceCollisionRectKero: TRect;
- function GetBustCollisionRectKero: TRect;
- function GetCenterPointKero: TPoint;
- function GetGhostState: integer;
- function GetAbsoluteKinokoFieldCenterPointSakura: TPoint;
- function GetAbsoluteKinokoFieldCenterPointKero: TPoint;
- function GetProcessID: Cardinal;
- function GetSharedMemory(const Slot: integer = -1): pointer;
- function NotifyEvent: integer;
- published
- { Published \90é\8c¾ }
- property WM_SAKURAAPI: integer read FMes;
- property TargetHWnd: THandle read FTargetHWnd write SetTargetHWnd;
- property OnRegisterAPI: TNotifyEvent read FOnRegisterAPI write SetOnRegisterAPI;
- end;
-
-procedure Register;
-
-implementation
-
-procedure Register;
-begin
- RegisterComponents('Samples', [TSakuraAPI]);
-end;
-
-{ TSakuraAPI }
-
-constructor TSakuraAPI.Create;
-begin
- inherited;
-end;
-
-destructor TSakuraAPI.Destroy;
-begin
- inherited;
- //
-end;
-
-function TSakuraAPI.ExecuteRemakeMenu: integer;
-begin
- Result := SendAPI(SA_EXECUTEREMAKEMENU, 0, 0);
-end;
-
-function TSakuraAPI.ExecuteRewriteFMO: integer;
-begin
- Result := SendAPI(SA_EXECUTEREWRITEFMO, 1, 0);
-end;
-
-function TSakuraAPI.GetAbsoluteKinokoFieldCenterPointKero: TPoint;
-begin
- Result.X := SendAPI(SA_GETABSOLUTEKINOKOFIELDCENTERPOINTKERO, 137, 0);
- Result.Y := SendAPI(SA_GETABSOLUTEKINOKOFIELDCENTERPOINTKERO, 137, 1);
-end;
-
-function TSakuraAPI.GetAbsoluteKinokoFieldCenterPointSakura: TPoint;
-begin
- Result.X := SendAPI(SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA, 132, 0);
- Result.Y := SendAPI(SA_GETABSOLUTEKINOKOFIELDCENTERPOINTSAKURA, 132, 1);
-end;
-
-function TSakuraAPI.GetBustCollisionRectKero: TRect;
-begin
- Result.Left := SendAPI(SA_GETBUSTCOLLISIONRECTKERO, 135, 0);
- Result.Top := SendAPI(SA_GETBUSTCOLLISIONRECTKERO, 135, 1);
- Result.Right := SendAPI(SA_GETBUSTCOLLISIONRECTKERO, 135, 2);
- Result.Bottom := SendAPI(SA_GETBUSTCOLLISIONRECTKERO, 135, 3);
-end;
-
-function TSakuraAPI.GetBustCollisionRectSakura: TRect;
-begin
- Result.Left := SendAPI(SA_GETBUSTCOLLISIONRECTSAKURA, 130, 0);
- Result.Top := SendAPI(SA_GETBUSTCOLLISIONRECTSAKURA, 130, 1);
- Result.Right := SendAPI(SA_GETBUSTCOLLISIONRECTSAKURA, 130, 2);
- Result.Bottom := SendAPI(SA_GETBUSTCOLLISIONRECTSAKURA, 130, 3);
-end;
-
-function TSakuraAPI.GetCenterPointKero: TPoint;
-begin
- Result.X := SendAPI(SA_GETCENTERPOINTKERO, 136, 0);
- Result.Y := SendAPI(SA_GETCENTERPOINTKERO, 136, 1);
-end;
-
-function TSakuraAPI.GetCenterPointSakura: TPoint;
-begin
- Result.X := SendAPI(SA_GETCENTERPOINTSAKURA, 131, 0);
- Result.Y := SendAPI(SA_GETCENTERPOINTSAKURA, 131, 1);
-end;
-
-function TSakuraAPI.GetFaceCollisionRectKero: TRect;
-begin
- Result.Left := SendAPI(SA_GETFACECOLLISIONRECTKERO, 134, 0);
- Result.Top := SendAPI(SA_GETFACECOLLISIONRECTKERO, 134, 1);
- Result.Right := SendAPI(SA_GETFACECOLLISIONRECTKERO, 134, 2);
- Result.Bottom := SendAPI(SA_GETFACECOLLISIONRECTKERO, 134, 3);
-end;
-
-function TSakuraAPI.GetFaceCollisionRectSakura: TRect;
-begin
- Result.Left := SendAPI(SA_GETFACECOLLISIONRECTSAKURA, 129, 0);
- Result.Top := SendAPI(SA_GETFACECOLLISIONRECTSAKURA, 129, 1);
- Result.Right := SendAPI(SA_GETFACECOLLISIONRECTSAKURA, 129, 2);
- Result.Bottom := SendAPI(SA_GETFACECOLLISIONRECTSAKURA, 129, 3);
-end;
-
-function TSakuraAPI.GetHeadCollisionRectKero: TRect;
-begin
- Result.Left := SendAPI(SA_GETHEADCOLLISIONRECTKERO, 133, 0);
- Result.Top := SendAPI(SA_GETHEADCOLLISIONRECTKERO, 133, 1);
- Result.Right := SendAPI(SA_GETHEADCOLLISIONRECTKERO, 133, 2);
- Result.Bottom := SendAPI(SA_GETHEADCOLLISIONRECTKERO, 133, 3);
-end;
-
-function TSakuraAPI.GetHeadCollisionRectSakura: TRect;
-begin
- Result.Left := SendAPI(SA_GETHEADCOLLISIONRECTSAKURA, 128, 0);
- Result.Top := SendAPI(SA_GETHEADCOLLISIONRECTSAKURA, 128, 1);
- Result.Right := SendAPI(SA_GETHEADCOLLISIONRECTSAKURA, 128, 2);
- Result.Bottom := SendAPI(SA_GETHEADCOLLISIONRECTSAKURA, 128, 3);
-end;
-
-function TSakuraAPI.GetGhostState: integer;
-begin
- Result := SendAPI(SA_GETGHOSTSTATE, 140, 0);
-end;
-
-function TSakuraAPI.GetProcessID: Cardinal;
-begin
- Result := SendAPI(SA_GETPROCESSID, 138, 0);
-end;
-
-function TSakuraAPI.GetSharedMemory(const Slot: integer = -1): pointer;
-begin
- Result := pointer(SendAPI(SA_GETSHAREDMEMORY, 139, Slot));
-end;
-
-function TSakuraAPI.SendAPI(Mes: cardinal; wParam: integer;
- lParam: integer): integer;
-begin
- Result := SendMessage(TargetHWnd, Mes, wParam, lParam);
-end;
-
-procedure TSakuraAPI.SetTargetHWnd(const Value: THandle);
-begin
- FTargetHWnd := Value;
-end;
-
-function TSakuraAPI.NotifyEvent: integer;
-begin
- Result := SendAPI(SA_NOTIFYEVENT, 256, 0);
-end;
-
-procedure TSakuraAPI.SetOnRegisterAPI(const Value: TNotifyEvent);
-begin
- FOnRegisterAPI := Value;
-end;
-
-procedure TSakuraAPI.Loaded;
-begin
- inherited;
- if csDesigning in ComponentState then Exit;
- FMes := RegisterWindowMessage('Sakura');
- if FMes = 0 then
- raise Exception.Create('RegisterWindowMessage\82É\8e¸\94s\82µ\82Ü\82µ\82½')
- else
- if Assigned(FOnRegisterAPI) then
- FOnRegisterAPI(Self);
-end;
-
-end.
+++ /dev/null
-{*******************************************************}
-{ TSakuraScriptFountain - TEditor Fountain Parser }
-{ }
-{ Copyright (c) 2003 naruto/CANO-Lab }
-{*******************************************************}
-
-unit SakuraScriptFountain;
-
-interface
-
-uses
- SysUtils, Classes, heClasses, heFountain, heRaStrings, SsParser;
-
-type
- TSakuraScriptFountainParser = class(TFountainParser)
- protected
- function GetTalkToken: char;
- procedure InitMethodTable; override;
- procedure TagProc;
- procedure MetaProc;
- procedure SymbolProc; override;
- function SsParser: TSsParser;
- function IsScope0ChangeTag(const Tag: String): boolean; virtual;
- function IsScope1ChangeTag(const Tag: String): boolean; virtual;
- public
- function NextToken: Char; override;
- function TokenToFountainColor: TFountainColor; override;
- end;
-
- TSakuraScriptFountain = class(TFountain)
- private
- FScope0Color: TFountainColor;
- FScope1Color: TFountainColor;
- FTagColor: TFountainColor;
- FMetaWordColor: TFountainColor;
- FTagErrorColor: TFountainColor;
- FSynchronizedColor: TFountainColor;
- FSakuraScriptParser: TSsParser;
- FProcessSync: boolean;
- FChangeScopeByHU: boolean;
- FChangeScopeBy01: boolean;
- procedure SetMetaWordColor(const Value: TFountainColor);
- procedure SetScope0Color(const Value: TFountainColor);
- procedure SetScope1Color(const Value: TFountainColor);
- procedure SetTagColor(const Value: TFountainColor);
- procedure SetTagErrorColor(const Value: TFountainColor);
- procedure SetSynchronizedColor(const Value: TFountainColor);
- procedure SetSakuraScriptParser(const Value: TSsParser);
- procedure SetChangeScopeBy01(const Value: boolean);
- procedure SetChangeScopeByHU(const Value: boolean);
- procedure SetProcessSync(const Value: boolean);
- { Private \90é\8c¾ }
- protected
- { Protected \90é\8c¾ }
- procedure CreateFountainColors; override;
- function GetParserClass: TFountainParserClass; override;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- published
- property Scope0Color: TFountainColor read FScope0Color write SetScope0Color;
- property Scope1Color: TFountainColor read FScope1Color write SetScope1Color;
- property TagColor: TFountainColor read FTagColor write SetTagColor;
- property TagErrorColor: TFountainColor read FTagErrorColor write SetTagErrorColor;
- property MetaWordColor: TFountainColor read FMetaWordColor write SetMetaWordColor;
- property SynchronizedColor: TFountainColor read FSynchronizedColor write SetSynchronizedColor;
- property SakuraScriptParser: TSsParser read FSakuraScriptParser write SetSakuraScriptParser;
- property ChangeScopeBy01: boolean read FChangeScopeBy01 write SetChangeScopeBy01 default true;
- property ChangeScopeByHU: boolean read FChangeScopeByHU write SetChangeScopeByHU default true;
- property ProcessSync: boolean read FProcessSync write SetProcessSync default true;
- published
- { Published \90é\8c¾ }
- end;
-
-procedure Register;
-
-implementation
-
-const
- { \83g\81[\83N\83\93\82Ì\8eí\97Þ\82ð\95\\82·\92è\90\94(\97ñ\8b\93\8c^\82¾\82Æ\82±\82¤\82â\82Á\82Ä\91\9d\82â\82¹\82È\82¢\82©\82ç\82Ë) }
- toScope0 = char(50); //\83X\83R\81[\83v0\95¶\8e\9a\97ñ
- toScope1 = char(51); //\83X\83R\81[\83v1\95¶\8e\9a\97ñ
- toTag = char(52); //\83^\83O
- toTagError = char(53); //\83^\83O\95\\8bL\83G\83\89\81[
- toMetaWord = char(54); //\83\81\83^\95¶\8e\9a\97ñ
- toSynchronized = char(55); //\83V\83\93\83N\83\8d\83i\83C\83Y\83h\83Z\83b\83V\83\87\83\93
-
- InScope1 = $1;
- InSynchronized = $2;
-
-{ TSakuraScriptFountain }
-
-constructor TSakuraScriptFountain.Create(AOwner: TComponent);
-begin
- inherited;
- FChangeScopeByHU := true;
- FChangeScopeBy01 := true;
- FProcessSync := true;
-end;
-
-procedure TSakuraScriptFountain.CreateFountainColors;
-begin
- inherited;
- FScope0Color := CreateFountainColor;
- FScope1Color := CreateFountainColor;
- FTagColor := CreateFountainColor;
- FTagErrorColor := CreateFountainColor;
- FMetaWordColor := CreateFountainColor;
- FSynchronizedColor := CreateFountainColor;
-end;
-
-destructor TSakuraScriptFountain.Destroy;
-begin
- FScope0Color.Free;
- FScope1Color.Free;
- FTagColor.Free;
- FTagErrorColor.Free;
- FMetaWordColor.Free;
- FSynchronizedColor.Free;
- inherited;
-end;
-
-function TSakuraScriptFountain.GetParserClass: TFountainParserClass;
-begin
- Result := TSakuraScriptFountainParser;
-end;
-
-procedure TSakuraScriptFountain.SetChangeScopeBy01(const Value: boolean);
-begin
- FChangeScopeBy01 := Value;
-end;
-
-procedure TSakuraScriptFountain.SetChangeScopeByHU(const Value: boolean);
-begin
- FChangeScopeByHU := Value;
-end;
-
-procedure TSakuraScriptFountain.SetMetaWordColor(
- const Value: TFountainColor);
-begin
- FMetaWordColor.Assign(Value);
-end;
-
-procedure TSakuraScriptFountain.SetProcessSync(const Value: boolean);
-begin
- FProcessSync := Value;
-end;
-
-procedure TSakuraScriptFountain.SetSakuraScriptParser(
- const Value: TSsParser);
-begin
- FSakuraScriptParser := Value;
-end;
-
-procedure TSakuraScriptFountain.SetScope0Color(
- const Value: TFountainColor);
-begin
- FScope0Color.Assign(Value);
-end;
-
-procedure TSakuraScriptFountain.SetScope1Color(
- const Value: TFountainColor);
-begin
- FScope1Color.Assign(Value);
-end;
-
-procedure TSakuraScriptFountain.SetSynchronizedColor(
- const Value: TFountainColor);
-begin
- FSynchronizedColor.Assign(Value);
-end;
-
-procedure TSakuraScriptFountain.SetTagColor(const Value: TFountainColor);
-begin
- FTagColor.Assign(Value);
-end;
-
-procedure TSakuraScriptFountain.SetTagErrorColor(
- const Value: TFountainColor);
-begin
- FTagErrorColor.Assign(Value);
-end;
-
-{ TSakuraScriptFountainParser }
-
-function TSakuraScriptFountainParser.GetTalkToken: char;
-begin
- if (FElementIndex or InSynchronized) > 0 then
- Result := toSynchronized
- else if (FElementIndex or InScope1) > 0 then
- Result := toScope1
- else
- Result := toScope0;
-end;
-
-procedure TSakuraScriptFountainParser.InitMethodTable;
-begin
- inherited;
- FMethodTable['\'] := TagProc;
- FMethodTable['%'] := MetaProc;
-end;
-
-
-function TSakuraScriptFountainParser.IsScope0ChangeTag(
- const Tag: String): boolean;
-begin
- Result := false;
- if (Self.FFountain as TSakuraScriptFountain).ChangeScopeBy01 then
- if Tag = '\0' then
- Result := true;
- if (Self.FFountain as TSakuraScriptFountain).ChangeScopeByHU then
- if Tag = '\h' then
- Result := true;
-end;
-
-function TSakuraScriptFountainParser.IsScope1ChangeTag(
- const Tag: String): boolean;
-begin
- Result := false;
- if (Self.FFountain as TSakuraScriptFountain).ChangeScopeBy01 then
- if Tag = '\1' then
- Result := true;
- if (Self.FFountain as TSakuraScriptFountain).ChangeScopeByHU then
- if Tag = '\u' then
- Result := true;
-end;
-
-procedure TSakuraScriptFountainParser.MetaProc;
-var i, Le: integer;
-begin
- Inc(FP);
- for i := 0 to SsParser.MetaPattern.Count-1 do
- begin
- Le := SsParser.MatchP(FP, PChar(SsParser.MetaPattern[i]));
- if Le > 0 then
- begin
- FToken := toMetaWord;
- Inc(FP, Le);
- Exit; // \82ß\82Å\82½\82\83\81\83^\95¶\8e\9a\82Æ\82µ\82Ä\89ð\90Í\8a®\97¹
- end else
- end;
- SymbolProc; // \92P\8f\83\82É\95¶\8e\9a\82Æ\82µ\82Ä\88µ\82¤
-end;
-
-function TSakuraScriptFountainParser.NextToken: Char;
-begin
- // \82±\82Ì\83N\83\89\83X\82Ì\83L\83\82\81B
- // toInteger\82â\82çtoDBSymbol\82â\82ç\82Ì\83g\81[\83N\83\93\82Í\95s\97v\82Å\81A
- // \91ã\82í\82è\82É\82»\82Ì\83Z\83\8a\83t\82ª\82Ç\82¿\82ç\82Ì\83X\83R\81[\83v\82È\82Ì\82©\82ª\95K\97v\82È\82Ì\82Å\81A
- // \83g\81[\83N\83\93\82ð\8fã\8f\91\82«\82·\82é
- inherited NextToken;
- if FToken = toTag then
- begin
- if IsScope1ChangeTag(TokenString) then
- FElementIndex := FElementIndex or InScope1
- else if IsScope0ChangeTag(TokenString) then
- FElementIndex := FElementIndex and not InScope1
- else if (FFountain as TSakuraScriptFountain).ProcessSync and
- (TokenString = '\_s') then
- FElementIndex := FElementIndex xor InSynchronized;
- end else
- begin
- if FToken in [toSymbol..toFloat, toAnk, toDBSymbol..toKana, toHex] then
- begin
- if (FElementIndex and InSynchronized) > 0 then
- FToken := toSynchronized
- else if (FElementIndex and InScope1) > 0 then
- FToken := toScope1
- else
- FToken := toScope0;
- end;
- end;
- Result := FToken;
-end;
-
-procedure TSakuraScriptFountainParser.SymbolProc;
-// '\'\82Æ'%'\88È\8aO\82Í\8d\8b\89õ\82É\93Ç\82Ý\94ò\82Î\82·\81B\97v\82ç\82È\82¢\81B
-// \83_\83u\83\8b\83o\83C\83g\95¶\8e\9a\82à\83V\83\93\83O\83\8b\83o\83C\83g\95¶\8e\9a\82à\95¹\82¹\82Ä\92P\82È\82é\83V\83\93\83{\83\8b\82Æ\82µ\82Ä\88µ\82¤\81B
-begin
- FToken := toSymbol;
- if not (FP^ in [#0, #9, #10, #13, '\', '%']) then
- if FP^ in LeadBytes then
- Inc(FP, 2)
- else
- Inc(FP);
-end;
-
-function TSakuraScriptFountainParser.SsParser: TSsParser;
-begin
- Result := (FFountain as TSakuraScriptFountain).SakuraScriptParser;
- if Result = nil then raise Exception.Create('SakuraScriptParser property is nil');
-end;
-
-procedure TSakuraScriptFountainParser.TagProc;
-var i, Le: integer;
- IsErr: boolean;
- Pat: String;
-begin
- Inc(FP);
- if (FP^ in [#0, #13, #10]) then
- begin
- FToken := toTagError;
- Exit;
- end else if (FP^ = '\') or (FP^ = '%') then // '\\', '\%'\8c`\8e®\82Ì\83G\83X\83P\81[\83v
- begin
- Inc(FP);
- SymbolProc;
- end else
- begin
- for i := 0 to SsParser.TagPattern.Count-1 do
- begin
- Pat := SsParser.TagPattern[i];
- if Length(Pat) < 2 then Continue;
- IsErr := Pat[1] = '!';
- Le := SsParser.MatchP(FP, @Pat[2]);
- if Le > 0 then
- begin
- Inc(FP, Le);
- if IsErr then
- FToken := toTagError
- else
- FToken := toTag;
- Exit; // \82ß\82Å\82½\82\83p\83^\81[\83\93\83}\83b\83`\90¬\8c÷\82Ì\8fê\8d\87
- end;
- end;
- // \88È\89º\82Í\83p\83^\81[\83\93\8eæ\93¾\8e¸\94s\82Ì\8fê\8d\87
- FToken := toTagError;
- if FP^ in LeadBytes then
- Inc(FP, 2)
- else
- Inc(FP);
- end;
-end;
-
-function TSakuraScriptFountainParser.TokenToFountainColor: TFountainColor;
-begin
- with TSakuraScriptFountain(FFountain) do
- case FToken of
- toScope0:
- Result := FScope0Color;
- toScope1:
- Result := FScope1Color;
- toTag:
- Result := FTagColor;
- toTagError:
- Result := FTagErrorColor;
- toMetaWord:
- Result := FMetaWordColor;
- toSynchronized:
- Result := FSynchronizedColor;
- else
- Result := nil;
- end;
-end;
-
-procedure Register;
-begin
- RegisterComponents('TEditor', [TSakuraScriptFountain]);
-end;
-
-end.
+++ /dev/null
-{********************************************************}
-{ SakuraSeeker Component - Listups Existing SSTP Servers }
-{ }
-{ Copyright (c) 2001-2003 naruto/CANO-Lab }
-{********************************************************}
-
-unit SakuraSeeker;
-
-interface
-
-uses
- Windows, SysUtils, Classes, Contnrs;
-
-type
- ESakuraSeekerError = class(Exception);
-
- TSakuraSeeker = class;
-
- TSakuraSeekerGetMutexNameEvent = procedure (Sender: TObject;
- var Name: String) of object;
-
- TSakuraProcess = class(TObject)
- private
- FHash: TStringList;
- FProcessID: String;
- FFMOName: String;
- FOwner: TSakuraSeeker;
- procedure SetProcessID(const Value: String);
- function GetHWnd: THandle;
- function GetName: String;
- function GetData(Key: String): String;
- function GetKeroName: String;
- function GetSetName: String;
- procedure SetFMOName(const Value: String);
- function GetDataAt(Index: integer): String;
- function GetCount: integer;
- function GetKeyAt(Index: integer): String;
- protected
- procedure AppendData(const Key, Value: String);
- public
- constructor Create(AOwner: TSakuraSeeker);
- destructor Destroy; override;
- property ProcessID: String read FProcessID write SetProcessID;
- property FMOName: String read FFMOName write SetFMOName;
- property HWnd: THandle read GetHWnd;
- property Name: String read GetName;
- property KeroName: String read GetKeroName;
- property SetName: String read GetSetName;
- property Data[Key: String]: String read GetData;
- property Count: integer read GetCount;
- property DataAt[Index: integer]: String read GetDataAt;
- property KeyAt[Index: integer]: String read GetKeyAt;
- end;
-
- TSakuraSeeker = class(TComponent)
- private
- { Private \90é\8c¾ }
- FList: TObjectList;
- FAutoDetect: boolean;
- FOnAfterDetection: TNotifyEvent;
- FLastSeekResult: String; //\91O\89ñ\82Ì\8eæ\93¾\8c\8b\89Ê\81B\94ä\8ar\97p
- FSourceResult: String; //\8d¡\89ñ\82Ì\8eæ\93¾\8c\8b\89Ê\81B\94ä\8ar\97p
- FOnDetectResultChanged: TNotifyEvent;
- FFileMappingTarget: TStrings;
- FOnGetMutexName: TSakuraSeekerGetMutexNameEvent;
- FMutexPool: TStringList;
- function GetProcess(Index: integer): TSakuraProcess;
- procedure SetAutoDetect(const Value: boolean);
- function GetProcessByName(Name: String): TSakuraProcess;
- function GetProcessByID(ID: String): TSakuraProcess;
- function GetCount: integer;
- procedure SetOnAfterDetection(const Value: TNotifyEvent);
- procedure SetOnDetectResultChanged(const Value: TNotifyEvent);
- procedure SetFileMappingTarget(const Value: TStrings);
- function GetProcessBySetName(Name: String): TSakuraProcess;
- procedure SetOnGetMutexName(
- const Value: TSakuraSeekerGetMutexNameEvent);
- protected
- { Protected \90é\8c¾ }
- procedure Loaded; override;
- procedure ClearList;
- procedure BeginDetectOne(const Target: String);
- function GetMutexName(const Target: String): String;
- function GetMutex(const Name: String): THandle;
- public
- { Public \90é\8c¾ }
- procedure BeginDetect;
- property Count: integer read GetCount;
- property Process[Index: integer]: TSakuraProcess read GetProcess; default;
- property ProcessByName[Name: String]: TSakuraProcess read GetProcessByName;
- property ProcessBySetName[Name: String]: TSakuraProcess read GetProcessBySetName;
- property ProcessByID[ID: String]: TSakuraProcess read GetProcessByID;
- function KillFMO(const TargetFMOName, TargetID: String): boolean;
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- published
- { Published \90é\8c¾ }
- property AutoDetect: boolean read FAutoDetect write SetAutoDetect default true;
- property OnAfterDetection: TNotifyEvent read FOnAfterDetection write SetOnAfterDetection;
- property OnDetectResultChanged: TNotifyEvent read FOnDetectResultChanged write SetOnDetectResultChanged;
- property FileMappingTarget: TStrings read FFileMappingTarget write SetFileMappingTarget;
- property OnGetMutexName: TSakuraSeekerGetMutexNameEvent read FOnGetMutexName write SetOnGetMutexName;
- end;
-
-procedure Register;
-
-implementation
-
-procedure Register;
-begin
- RegisterComponents('Samples', [TSakuraSeeker]);
-end;
-
-{ TSakuraProcess }
-
-procedure TSakuraProcess.AppendData(const Key, Value: String);
-begin
- FHash.Values[Key] := Value;
-end;
-
-constructor TSakuraProcess.Create(AOwner: TSakuraSeeker);
-begin
- FHash := TStringList.Create;
- FOwner := AOwner;
-end;
-
-destructor TSakuraProcess.Destroy;
-begin
- inherited;
- FHash.Free;
-end;
-
-function TSakuraProcess.GetCount: integer;
-begin
- Result := FHash.Count;
-end;
-
-function TSakuraProcess.GetData(Key: String): String;
-begin
- Result := FHash.Values[Key];
-end;
-
-function TSakuraProcess.GetDataAt(Index: integer): String;
-begin
- if Index >= 0 then
- Result := Copy(FHash[Index], Length(FHash.Names[Index]) + 2, High(integer))
- else
- Result := '';
-end;
-
-function TSakuraProcess.GetHWnd: THandle;
-begin
- Result := StrToIntDef(GetData('hwnd'), 0);
-end;
-
-function TSakuraProcess.GetKeroName: String;
-begin
- Result := GetData('keroname');
-end;
-
-function TSakuraProcess.GetKeyAt(Index: integer): String;
-begin
- Result := FHash.Names[Index];
-end;
-
-function TSakuraProcess.GetName: String;
-begin
- Result := GetData('name');
-end;
-
-
-function TSakuraProcess.GetSetName: String;
-begin
- Result := GetName + ',' + GetKeroName;
-end;
-
-procedure TSakuraProcess.SetFMOName(const Value: String);
-begin
- FFMOName := Value;
-end;
-
-procedure TSakuraProcess.SetProcessID(const Value: String);
-begin
- FProcessID := Value;
-end;
-
-{ TSakuraSeeker }
-
-procedure TSakuraSeeker.BeginDetect;
-var i: integer;
-begin
- if [csDesigning, csLoading] * ComponentState <> [] then Exit;
- ClearList;
-
- FSourceResult := '';
- for i := 0 to FFileMappingTarget.Count-1 do begin
- BeginDetectOne(FFileMappingTarget[i]); //1\82Â\82ÌFile-mapping Object\82ð\8eæ\93¾
- end;
-
- if Assigned(OnDetectResultChanged) and (FLastSeekResult <> FSourceResult) then begin
- FLastSeekResult := FSourceResult;
- OnDetectResultChanged(Self);
- end else begin
- FLastSeekResult := FSourceResult;
- end;
-
- if Assigned(OnAfterDetection) then OnAfterDetection(Self);
-end;
-
-procedure TSakuraSeeker.BeginDetectOne(const Target: String);
-var MappingHandle, Mutex: THandle;
- P, PSaved: pointer;
- SourceStr, ID, Entry, Data: String;
- Size: integer;
- Strs: TStringList;
- Pro: TSakuraProcess;
- i, j: integer;
-begin
- //\83t\83@\83C\83\8b\83}\83b\83s\83\93\83O\83I\83u\83W\83F\83N\83g\82Ì\8eæ\93¾
- PSaved := nil;
- Strs := nil;
- MappingHandle := 0;
-
- Mutex := GetMutex(GetMutexName(Target));
- if Mutex = 0 then
- raise ESakuraSeekerError.Create('Mutex\83n\83\93\83h\83\8b\82ð\8eæ\93¾\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½');
- if WaitForSingleObject(Mutex, 3000) = WAIT_TIMEOUT then
- raise ESakuraSeekerError.Create('Mutex\93¯\8aú\83^\83C\83\80\83A\83E\83g');
- try
- MappingHandle := OpenFileMapping(FILE_MAP_READ, false, PChar(Target));
- try
- if MappingHandle = 0 then begin
- SourceStr := '';
- end else begin
- PSaved := MapViewOfFile(MappingHandle, FILE_MAP_READ, 0, 0, 0);
- P := PSaved;
- if P <> nil then begin
- CopyMemory(@Size, P, SizeOf(integer));
- Inc(PChar(P), SizeOf(integer));
- SourceStr := PChar(P);
- if Length(SourceStr) > Size then
- raise ESakuraSeekerError.Create('FMO\82ð\8eæ\93¾\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½');
- end;
- end;
- finally
- //\83I\83u\83W\83F\83N\83g\82Ì\94j\8aü
- if PSaved <> nil then UnmapViewOfFile(PSaved);
- end;
- finally
- if MappingHandle <> 0 then CloseHandle(MappingHandle);
- ReleaseMutex(Mutex);
- end;
-
- //\83f\81[\83^\82ð\89ð\90Í
- try
- try
- Strs := TStringList.Create;
- Strs.Text := SourceStr;
- for i := 0 to Strs.Count-1 do begin
- j := Pos('.', Strs[i]);
- ID := Copy(Strs[i], 1, j-1);
- Entry := Copy(Strs[i], j+1, Pos(#1, Strs[i])-j-1);
- Data := Copy(Strs[i], Pos(#1, Strs[i])+1, High(integer));
- Pro := GetProcessByID(ID);
- if Pro = nil then begin
- Pro := TSakuraProcess.Create(self);
- Pro.ProcessID := ID;
- Pro.FMOName := Target; // FMO\8e¯\95Ê\96¼
- FList.Add(Pro);
- end;
- Pro.AppendData(Entry, Data);
- end;
- except
- end;
- finally
- Strs.Free;
- end;
- FSourceResult := FSourceResult + SourceStr;
-end;
-
-procedure TSakuraSeeker.ClearList;
-begin
- FList.Clear;
-end;
-
-constructor TSakuraSeeker.Create(AOwner: TComponent);
-begin
- inherited;
- FAutoDetect := true;
- FList := TObjectList.Create;
- FFileMappingTarget := TStringList.Create;
- FFileMappingTarget.Add('Sakura');
- FMutexPool := TStringList.Create;
-end;
-
-destructor TSakuraSeeker.Destroy;
-var i: integer;
-begin
- ClearList;
- FList.Free;
- FFileMappingTarget.Free;
- for i := 0 to FMutexPool.Count-1 do
- begin
- CloseHandle(StrToInt(Copy(FMutexPool[i], Pos('=', FMutexPool[i])+1, High(integer))));
- end;
- FreeAndNil(FMutexPool);
-end;
-
-function TSakuraSeeker.GetCount: integer;
-begin
- Result := FList.Count;
-end;
-
-function TSakuraSeeker.GetMutex(const Name: String): THandle;
-begin
- if FMutexPool.Values[Name] <> '' then
- begin
- Result := THandle(StrToInt(FMutexPool.Values[Name]));
- end else
- begin
- Result := CreateMutex(nil, false, PChar(Name));
- if Result <> 0 then
- FMutexPool.Values[Name] := IntToStr(Result);
- end;
-end;
-
-function TSakuraSeeker.GetMutexName(const Target: String): String;
-begin
- if Assigned(FOnGetMutexName) then
- begin
- Result := Target;
- FOnGetMutexName(self, Result);
- end else
- Result := Target + 'FMO';
-end;
-
-function TSakuraSeeker.GetProcess(Index: integer): TSakuraProcess;
-begin
- Result := FList[Index] as TSakuraProcess;
-end;
-
-function TSakuraSeeker.GetProcessByID(ID: String): TSakuraProcess;
-var i: integer;
-begin
- Result := nil;
- for i := 0 to FList.Count-1 do begin
- if TSakuraProcess(FList[i]).ProcessID = ID then begin
- Result := FList[i] as TSakuraProcess;
- Exit;
- end;
- end;
-end;
-
-function TSakuraSeeker.GetProcessByName(Name: String): TSakuraProcess;
-var i: integer;
-begin
- Result := nil;
- for i := 0 to FList.Count-1 do begin
- if (FList[i] as TSakuraProcess).Name = Name then begin
- Result := FList[i] as TSakuraProcess;
- Exit;
- end;
- end;
-end;
-
-function TSakuraSeeker.GetProcessBySetName(Name: String): TSakuraProcess;
-var i: integer;
-begin
- Result := nil;
- for i := 0 to FList.Count-1 do begin
- if (FList[i] as TSakuraProcess).SetName = Name then begin
- Result := FList[i] as TSakuraProcess;
- Exit;
- end;
- end;
-end;
-
-function TSakuraSeeker.KillFMO(const TargetFMOName, TargetID: String): boolean;
-var MappingHandle, Mutex: THandle;
- P: pointer;
- SourceStr, ID: String;
- Size: integer;
- Strs: TStringList;
- i, j: integer;
-begin
- //\83t\83@\83C\83\8b\83}\83b\83s\83\93\83O\83I\83u\83W\83F\83N\83g\82Ì\8eæ\93¾
- Result := false;
- P := nil;
- Mutex := GetMutex(GetMutexName(TargetFMOName));
- if Mutex = 0 then
- raise ESakuraSeekerError.Create('Mutex\83n\83\93\83h\83\8b\82ð\8eæ\93¾\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½');
- if WaitForSingleObject(Mutex, 3000) = WAIT_TIMEOUT then
- raise ESakuraSeekerError.Create('Mutex\93¯\8aú\83^\83C\83\80\83A\83E\83g');
- try
- MappingHandle := OpenFileMapping(FILE_MAP_WRITE, false, PChar(TargetFMOName));
- if MappingHandle = 0 then Exit;
- try
- SourceStr := '';
- P := MapViewOfFile(MappingHandle, FILE_MAP_WRITE, 0, 0, 0);
- if P <> nil then begin
- CopyMemory(@Size, P, SizeOf(integer));
- Inc(PChar(P), SizeOf(integer));
- SourceStr := PChar(P);
- if Length(SourceStr) > Size then
- raise ESakuraSeekerError.Create('FMO\82ð\8eæ\93¾\82Å\82«\82Ü\82¹\82ñ\82Å\82µ\82½');
- end;
-
- //\83f\81[\83^\82ð\89ð\90Í
- Strs := TStringList.Create;
- try
- Strs.Text := SourceStr;
- for i := Strs.Count-1 downto 0 do begin
- j := Pos('.', Strs[i]);
- ID := Copy(Strs[i], 1, j-1);
- if ID = TargetID then begin
- Strs.Delete(i); // \97v\82ç\82È\82¢\83G\83\93\83g\83\8a\82ð\8dí\8f\9c
- Result := true;
- end;
- end;
- SourceStr := Strs.Text;
- finally
- Strs.Free;
- end;
-
- if Result then begin
- CopyMemory(P, PChar(SourceStr), Length(SourceStr)+1);
- Dec(PChar(P), SizeOf(integer));
- end;
- finally
- //\83I\83u\83W\83F\83N\83g\82Ì\94j\8aü
- if P <> nil then UnmapViewOfFile(P);
- CloseHandle(MappingHandle);
- end;
- finally
- ReleaseMutex(Mutex);
- end;
-end;
-
-procedure TSakuraSeeker.Loaded;
-begin
- inherited;
- if FAutoDetect and not (csDesigning in ComponentState) then BeginDetect;
-end;
-
-procedure TSakuraSeeker.SetAutoDetect(const Value: boolean);
-begin
- FAutoDetect := Value;
-end;
-
-procedure TSakuraSeeker.SetFileMappingTarget(const Value: TStrings);
-begin
- FFileMappingTarget.Assign(Value);
-end;
-
-procedure TSakuraSeeker.SetOnAfterDetection(const Value: TNotifyEvent);
-begin
- FOnAfterDetection := Value;
-end;
-
-procedure TSakuraSeeker.SetOnDetectResultChanged(
- const Value: TNotifyEvent);
-begin
- FOnDetectResultChanged := Value;
-end;
-
-procedure TSakuraSeeker.SetOnGetMutexName(
- const Value: TSakuraSeekerGetMutexNameEvent);
-begin
- FOnGetMutexName := Value;
-end;
-
-end.
-
\ No newline at end of file
+++ /dev/null
-package SakuraSuite;
-
-{$R *.res}
-{$R 'SakuraSeeker.dcr'}
-{$R 'SsParser.dcr'}
-{$R 'IdSLPP20.dcr'}
-{$R 'DirectSstp.dcr'}
-{$R 'SakuraScriptFountain.dcr'}
-{$R 'SsPlayTime.dcr'}
-{$ALIGN 8}
-{$ASSERTIONS ON}
-{$BOOLEVAL OFF}
-{$DEBUGINFO ON}
-{$EXTENDEDSYNTAX ON}
-{$IMPORTEDDATA ON}
-{$IOCHECKS ON}
-{$LOCALSYMBOLS ON}
-{$LONGSTRINGS ON}
-{$OPENSTRINGS ON}
-{$OPTIMIZATION ON}
-{$OVERFLOWCHECKS OFF}
-{$RANGECHECKS OFF}
-{$REFERENCEINFO ON}
-{$SAFEDIVIDE OFF}
-{$STACKFRAMES OFF}
-{$TYPEDADDRESS OFF}
-{$VARSTRINGCHECKS ON}
-{$WRITEABLECONST ON}
-{$MINENUMSIZE 1}
-{$IMAGEBASE $400000}
-{$DESCRIPTION 'Sakura Component Suite by naruto/CANO-Lab'}
-{$IMPLICITBUILD OFF}
-
-requires
- vcl,
- rtl;
-
-// require\90ß\82É\82Í\81ATEdit\82ÆIndy??\82Ì2\82Â\82Ì\83p\83b\83P\81[\83W\82ª\81A
-// Delphi\82É\82æ\82Á\82Ä\8e©\93®\93I\82É\92Ç\89Á\82³\82ê\82é\82Í\82¸\81B
-// \92Ç\89Á\82·\82é\82©\82Ç\82¤\82©\90q\82Ë\82é\83_\83C\83A\83\8d\83O\82ª\8fo\82½\8fê\8d\87\82É\82ÍOK\82·\82é\82±\82Æ\81B
-
-contains
- SakuraSeeker in 'SakuraSeeker.pas',
- SsParser in 'SsParser.pas',
- IdSLPP20 in 'IdSLPP20.pas',
- DirectSstp in 'DirectSstp.pas',
- SakuraScriptFountain in 'SakuraScriptFountain.pas',
- SsPlayTime in 'SsPlayTime.pas';
-
-end.
+++ /dev/null
-{********************************************************}
-{ TSsParser Component - Parser for Sakura Script }
-{ }
-{ Copyright (c) 2001-2003 naruto/CANO-Lab }
-{********************************************************}
-
-unit SsParser;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs;
-
-type
- // Kind of the Markup
- // mtTag: Tag. (begins with \)
- // mtMeta: Meta expression. (begins with %)
- // mtTagErr: Seems to be a markup error
- // mtStr: Other normal talk string
- TSsMarkUpType = (mtTag, mtMeta, mtTagErr, mtStr);
-
- // Intercepting the parsing
- TSsParseEvent = procedure (Sender: TObject; const Script: String;
- var Len: integer; var MarkType: TSsMarkUpType; var Extra: String) of object;
-
- // Exception class
- ESsParserError = class(Exception);
-
- TSsMarkUp = class(TObject)
- private
- FPos: integer;
- FExtra: String;
- FStr: String;
- FMarkUpType: TSsMarkUpType;
- procedure SetExtra(const Value: String);
- public
- constructor Create(Pos: integer; MarkUpType: TSsMarkUpType; Str: String; Extra: String = '');
- property Pos: integer read FPos; //This markup is Pos'th character in InputString
- property MarkUpType: TSsMarkUpType read FMarkUpType;
- property Str: String read FStr;
- property Extra: String read FExtra write SetExtra;
- end;
-
- TSsParser = class(TComponent)
- private
- FTagPattern: TStrings; //SakuraScript tag pattern string
- FMetaPattern: TStrings; //SakuraScript meta expression pattern string
- FInputString: String;
- FMarkUpList: TList;
- FLeaveEscape: boolean;
- FEscapeInvalidMeta: boolean;
- FOnParse: TSsParseEvent;
- procedure SetInputString(const Value: String);
- function GetCount: integer;
- function GetExtra(Index: integer): String;
- function GetMarkUpType(Index: integer): TSsMarkUpType;
- function GetStr(Index: integer): String;
- procedure SetExtra(Index: integer; const Value: String);
- procedure ClearList;
- procedure SetMetaPattern(const Value: TStrings);
- procedure SetTagPattern(const Value: TStrings);
- procedure SetOnParse(const Value: TSsParseEvent);
- function GetFirstChar(const Str: String): String;
- function ChopFirstChar(var Str: String): String;
- function GetPosition(Index: integer): integer;
- protected
- procedure BeginParse;
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- function MatchP(PStr, PPattern: PChar): integer;
- function Match(Str, Pattern: String): integer;
- function GetParam(Tag: String; const Index: integer): String;
- function EscapeParam(const Param: String): String;
- function MarkUpAt(const Pos: integer): integer;
-
- property Count: integer read GetCount;
- property MarkUpType[Index: integer]: TSsMarkUpType read GetMarkUpType;
- property Str[Index: integer]: String read GetStr; default;
- property Extra[Index: integer]: String read GetExtra write SetExtra;
- property Position[Index: integer]: integer read GetPosition;
- property InputString: String read FInputString write SetInputString;
- published
- // Script parsing patterns.
- property TagPattern: TStrings read FTagPattern write SetTagPattern;
- property MetaPattern: TStrings read FMetaPattern write SetMetaPattern;
- // Whether to leave escape sequence "\\" and "\%" in mtStr elements
- property LeaveEscape: boolean read FLeaveEscape write FLeaveEscape
- default true;
- // Replace '%' to '\%' if sequence follwing the '%' could not
- // be parsed as a meta expression
- property EscapeInvalidMeta: boolean read FEscapeInvalidMeta
- write FEscapeInvalidMeta default false;
- // Component users can intercept and handle part of the parsing using this event.
- property OnParse: TSsParseEvent read FOnParse write SetOnParse;
- end;
-
-procedure Register;
-
-implementation
-
-resourcestring
- CElementTypeError = '\90³\82µ\82¢\83G\83\8c\83\81\83\93\83g\83^\83C\83v\82ð\95Ô\82µ\82Ä\82\82¾\82³\82¢';
- CTagPatternSyntaxError = 'TagPattern\95\\8bL\83~\83X %d \8ds\96Ú';
- CMarkupIndexOutofRange = '\83C\83\93\83f\83b\83N\83X\82ª\94Í\88Í\82ð\82±\82¦\82Ä\82¢\82Ü\82·';
-
-{
- // English error message
- CElementTypeError = 'Returned element type is invalid in OnParse.';
- CTagPatternSyntaxError = 'TagPattern syntax error at line %d.';
- CMarkupIndexOutofRange = 'Markup index if out of range.';
-}
-
-
-procedure Register;
-begin
- RegisterComponents('Samples', [TSsParser]);
-end;
-
-{ TSsParser }
-
-procedure TSsParser.BeginParse;
-var Str, Talk, T, Ex: String;
- i, Le: integer;
- IsErr: boolean;
- Mt: TSsMarkUpType;
- PStr: PChar;
-begin
- ClearList;
- Str := FInputString; // The string to be parsed from now
- // This is to avoid access violation if `Str` is terminated
- // with DBCS leadbyte. (Such string is invalid from the beginning of course)
- Str := Str + #0#0;
- if Length(Str) = 0 then Exit;
- PStr := PChar(Str);
- Talk := '';
- while PStr^ <> #0 do begin
- if PStr^ = '\' then begin
- Inc(PStr);
- if PStr^ = '\' then
- begin
- // Escaped sequence "\\"
- if FLeaveEscape then
- Talk := Talk + '\\'
- else
- Talk := Talk + '\';
- Inc(PStr);
- Continue;
- end else if PStr^ = '%' then
- begin
- // Escaped sequence "\%"
- if FLeaveEscape then
- Talk := Talk + '\%'
- else
- Talk := Talk + '%';
- Inc(PStr);
- Continue;
- end else
- begin
- Dec(PStr);
- // might be a tag
- // Generate OnParser event
- Le := 0;
- Ex := '';
- IsErr := false;
- if Assigned(FOnParse) then begin
- FOnParse(Self, String(PStr), Le, Mt, Ex);
- if Le > 0 then begin
- if (Mt <> mtTag) and (Mt <> mtTagErr) then begin
- raise ESsParserError.Create(CElementTypeError);
- Exit;
- end;
- if Mt = mtTagErr then IsErr := true;
- end;
- end;
- if Le <= 0 then begin
- for i := 0 to FTagPattern.Count-1 do begin
- T := FTagPattern[i];
- if Length(T) = 0 then Continue;
- IsErr := false;
- if T[1] = '!' then begin
- IsErr := true;
- T[1] := '\';
- end else if T[1] <> '\' then
- raise ESsParserError.CreateFmt(CTagPatternSyntaxError, [i+1]);
- Le := MatchP(PStr, PChar(T));
- if Le > 0 then Break;
- end;
- end;
- if Length(Talk) > 0 then begin
- FMarkUpList.Add(TSsMarkUp.Create(PStr-PChar(Str)-Length(Talk), mtStr, Talk));
- Talk := '';
- end;
- if Le > 0 then begin
- // Parsed as a correct tag
- T := Copy(String(PStr), 1, Le);
- if IsErr then
- FMarkUpList.Add(TSsMarkUp.Create(PStr-PChar(Str), mtTagErr, T, Ex))
- else
- FMarkUpList.Add(TSsMarkUp.Create(PStr-PChar(Str), mtTag, T, Ex));
- Inc(PStr, Le);
- end else begin
- // Parsing failed; The character '\' and the next one character is
- // marked as a tag error.
- Inc(PStr); // Skip '\'
- if PStr^ in LeadBytes then
- begin
- T := '\' + Copy(String(PStr), 1, 2);
- FMarkUpList.Add(TSsMarkUp.Create(PStr-PChar(Str)-1, mtTagErr, T));
- Inc(PStr, 2);
- end else
- begin
- T := '\' + PStr^;
- FMarkUpList.Add(TSsMarkUp.Create(PStr-PChar(Str)-1, mtTagErr, T));
- Inc(PStr);
- end;
- end;
- end;
- end else if (PStr^ = '%') then begin
- Le := 0; Ex := '';
- if Assigned(FOnParse) then begin
- FOnParse(Self, String(PStr), Le, Mt, Ex);
- if Le > 0 then begin
- if Mt <> mtMeta then begin
- raise ESsParserError.Create(CElementTypeError);
- Exit;
- end;
- Dec(Le);
- end;
- end;
- Inc(PStr); // Skip '%'
- if Le <= 0 then
- begin
- for i := 0 to FMetaPattern.Count-1 do
- begin
- if Length(FMetaPattern[i]) = 0 then
- Continue;
- Le := MatchP(PStr, PChar(FMetaPattern[i]));
- if Le > 0 then
- Break;
- end;
- end;
- if Le > 0 then
- begin
- if Length(Talk) > 0 then
- begin
- FMarkUpList.Add(TSsMarkUp.Create(PStr-PChar(Str)-Length(Talk), mtStr, Talk));
- Talk := '';
- end;
- T := Copy(String(PStr), 1, Le);
- FMarkUpList.Add(TSsMarkUp.Create(PStr-PChar(Str)-1, mtMeta, '%' + T, Ex));
- Inc(PStr, Le);
- end else
- begin
- // in case this %??? sequence seems NOT be a meta expression
- if FEscapeInvalidMeta then
- Talk := Talk + '\%'
- else
- Talk := Talk + '%';
- Continue;
- end;
- end else begin
- if PStr^ in LeadBytes then
- begin
- Talk := Talk + Copy(String(PStr), 1, 2);
- Inc(PStr, 2);
- end else
- begin
- Talk := Talk + PStr^;
- Inc(PStr);
- end;
- end;
- end; // of while
- if Length(Talk) > 0 then FMarkUpList.Add(TSsMarkUp.Create(PStr-PChar(Str)-Length(Talk), mtStr, Talk));
-end;
-
-function TSsParser.ChopFirstChar(var Str: String): String;
-begin
- Result := GetFirstChar(Str);
- Delete(Str, 1, Length(Result));
-end;
-
-procedure TSsParser.ClearList;
-var i: integer;
-begin
- for i := FMarkUpList.Count-1 downto 0 do begin
- TSsMarkUp(FMarkUpList[i]).Free;
- end;
- FMarkUpList.Free;
- FMarkUpList := TList.Create;
-end;
-
-constructor TSsParser.Create(AOwner: TComponent);
-begin
- inherited;
- FTagPattern := TStringList.Create;
- FMetaPattern := TStringList.Create;
- FMarkUpList := TList.Create;
- FLeaveEscape := true;
-end;
-
-destructor TSsParser.Destroy;
-begin
- inherited;
- FTagPattern.Free;
- FMetaPattern.Free;
- ClearList;
- FMarkUpList.Free;
-end;
-
-function TSsParser.EscapeParam(const Param: String): String;
-begin
- //StringReplace supports DBCS
- Result := StringReplace(Param, '\', '\\', [rfReplaceAll]);
- Result := StringReplace(Param, ']', '\]', [rfReplaceAll]);
-end;
-
-function TSsParser.GetCount: integer;
-begin
- Result := FMarkUpList.Count;
-end;
-
-function TSsParser.GetExtra(Index: integer): String;
-begin
- if (Index >= 0) and (Index <= FMarkUpList.Count-1) then
- Result := TSsMarkUp(FMarkUpList[Index]).Extra
- else
- Result := '';
-end;
-
-function TSsParser.GetFirstChar(const Str: String): String;
-begin
- // Get the first character of the given string. Supports DBCS
- if Length(Str) <= 1 then begin
- Result := Str;
- end else begin
- if Str[1] in LeadBytes then begin
- Result := Str[1] + Str[2];
- end else begin
- Result := Str[1];
- end;
- end;
-end;
-
-function TSsParser.GetMarkUpType(Index: integer): TSsMarkUpType;
-begin
- if (Index >= 0) and (Index <= FMarkUpList.Count-1) then
- Result := TSsMarkUp(FMarkUpList[Index]).MarkUpType
- else
- raise ESsParserError.Create(CMarkupIndexOutOfRange);
-end;
-
-function TSsParser.GetParam(Tag: String;
- const Index: integer): String;
-var ParamCount: integer;
- First, Param: String;
- Escape, Inside: boolean;
-begin
- if Index <= 0 then Exit;
- Inside := false;
- ParamCount := 0;
- Escape := false;
- repeat
- First := ChopFirstChar(Tag);
- if Inside then begin
- if Escape then begin
- if First = '\' then Param := Param + '\'
- else if First = ']' then Param := Param + ']'
- else Param := Param + '\' + First;
- Escape := false;
- end else if First = '\' then
- Escape := true
- else if First = ']' then
- Inside := false
- else begin
- Escape := false;
- Param := Param + First;
- end;
- end else if First = '[' then begin
- Inside := true;
- Escape := false;
- Param := '';
- Inc(ParamCount);
- end;
- until (First = '') or ((ParamCount = Index) and not Inside);
- if ((ParamCount = Index) and not Inside) then
- Result := Param
- else
- Result := '';
-end;
-
-function TSsParser.GetPosition(Index: integer): integer;
-begin
- if (Index >= 0) and (Index <= FMarkUpList.Count-1) then
- Result := TSsMarkUp(FMarkUpList[Index]).Pos
- else
- Result := 0;
-end;
-
-function TSsParser.GetStr(Index: integer): String;
-begin
- if (Index >= 0) and (Index <= FMarkUpList.Count-1) then
- Result := TSsMarkUp(FMarkUpList[Index]).Str
- else
- Result := '';
-end;
-
-function TSsParser.MarkUpAt(const Pos: integer): integer;
-var i, lo, hi: integer;
-begin
- if FMarkUpList.Count = 0 then
- Result := -1
- else begin
- lo := 0;
- hi := FMarkUpList.Count-2;
- i := (hi-lo) div 2 + lo;
- while (hi > lo) do
- begin
- i := (hi-lo) div 2 + lo;
- if (TSsMarkUp(FMarkUpList[i]).Pos >= Pos) and
- (TSsMarkUp(FMarkUpList[i+1]).Pos < Pos) then
- begin
- Result := i;
- Exit;
- end else if TSsMarkUp(FMarkUpList[i]).Pos > Pos then
- hi := i
- else
- lo := i;
- end;
- Result := i;
- end;
-end;
-
-function TSsParser.Match(Str, Pattern: String): integer;
-begin
- if (Length(Str) = 0) or (Length(Pattern) = 0) then
- Result := 0
- else
- Result := MatchP(@Str[1], @Pattern[1]);
-end;
-
-function TSsParser.MatchP(PStr, PPattern: PChar): integer;
-var Matched, F, Escape: boolean;
-begin
- Matched := true;
- Result := 0;
- while Matched and (PPattern^ <> #0) do begin
- if PPattern^ = '%' then
- begin
- if PStr^ = #0 then
- begin
- Matched := false;
- Break;
- end;
- Inc(PPattern);
- case PPattern^ of
- '%':
- begin
- if PStr^ = '%' then
- begin
- Inc(Result);
- Inc(PStr);
- Inc(PPattern);
- end else
- begin
- Matched := false;
- Break;
- end;
- end;
- 'd':
- begin
- if PStr^ in ['0' .. '9'] then
- begin
- Inc(Result);
- Inc(PStr);
- Inc(PPattern);
- end else
- Matched := false;
- end;
- 'D':
- begin
- if PStr^ in ['0' .. '9'] then
- begin
- while PStr^ in ['0' .. '9'] do
- begin
- Inc(Result);
- Inc(PStr);
- end;
- Inc(PPattern);
- end else
- Matched := false;
- end;
- 'b': //String enclosed by '[' and ']'. The content may be an empty string.
- begin
- if PStr^ <> '[' then
- begin
- Matched := false;
- end else
- begin
- F := false;
- Escape := false; //After escape character
- Inc(PStr); // '['
- Inc(Result); // '['
- repeat
- if Escape then
- begin
- Escape := false;
- end else
- begin
- if PStr^ = '\' then Escape := true;
- if PStr^ = ']' then F := true;
- end;
- if PStr^ in LeadBytes then
- begin
- Inc(Result, 2);
- Inc(PStr, 2);
- end else
- begin
- Inc(Result);
- Inc(PStr);
- end;
- until (PStr^ = #0) or F;
- if not F then
- Matched := false;
- end;
- Inc(PPattern);
- end;
- 'c': // String which can be the argument content enclosed by '[' and ']'
- begin
- Inc(PPattern);
- if not (PStr^ = ']') then
- begin
- Escape := false;
- repeat
- if Escape then
- Escape := false
- else if PStr^ = ']' then
- Break
- else
- if PStr^ = '\' then Escape := true;
- if PStr^ in LeadBytes then
- begin
- Inc(Result, 2);
- Inc(PStr, 2);
- end else
- begin
- Inc(Result);
- Inc(PStr);
- end;
- until (PStr^ = #0);
- end else
- Matched := false;
- end;
- 'm':
- begin
- if not (PStr^ in LeadBytes) then
- begin
- Inc(PPattern);
- Inc(PStr);
- Inc(Result);
- end else Matched := false;
- end;
- 'M':
- begin
- if (PStr^ in LeadBytes) then
- begin
- Inc(PPattern);
- Inc(PStr, 2);
- Inc(Result, 2);
- end else Matched := false;
- end;
- '.':
- if (PStr^ in LeadBytes) then
- begin
- Inc(PPattern);
- Inc(PStr, 2);
- Inc(Result, 2);
- end else
- begin
- Inc(PPattern);
- Inc(PStr);
- Inc(Result);
- end;
- else
- if PStr^ = '%' then
- begin
- Inc(PStr);
- Inc(Result);
- end else
- begin
- Matched := false;
- end;
- end // of case
- end else
- begin
- if PStr^ <> PPattern^ then
- Matched := false
- else
- begin
- Inc(Result);
- Inc(PStr);
- Inc(PPattern);
- end;
- end;
- end; //of while
- if not Matched then Result := 0;
-end;
-
-procedure TSsParser.SetExtra(Index: integer; const Value: String);
-begin
- if (Index >= 0) and (Index <= FMarkUpList.Count-1) then
- TSsMarkUp(FMarkUpList[Index]).Extra := Value
- else
- raise ESsParserError.Create(CMarkupIndexOutOfRange);
-end;
-
-procedure TSsParser.SetInputString(const Value: String);
-begin
- FInputString := Value;
- BeginParse;
-end;
-
-procedure TSsParser.SetMetaPattern(const Value: TStrings);
-begin
- FMetaPattern.Assign(Value);
-end;
-
-procedure TSsParser.SetOnParse(const Value: TSsParseEvent);
-begin
- FOnParse := Value;
-end;
-
-procedure TSsParser.SetTagPattern(const Value: TStrings);
-begin
- FTagPattern.Assign(Value);
-end;
-
-{ TSsMarkUp }
-
-constructor TSsMarkUp.Create(Pos: integer; MarkUpType: TSsMarkUpType; Str: String; Extra: String = '');
-begin
- FPos := Pos;
- FMarkUpType := MarkUpType;
- FStr := Str;
- FExtra := Extra;
-end;
-
-procedure TSsMarkUp.SetExtra(const Value: String);
-begin
- FExtra := Value;
-end;
-
-end.
+++ /dev/null
-{*************************************************************}
-{ TSsPlayTime Component - Estimates SakuraScript playing time }
-{ }
-{ Copyright (c) 2001-2003 naruto/CANO-Lab }
-{*************************************************************}
-
-unit SsPlayTime;
-
-interface
-
-uses
- Windows, SysUtils, Classes, SsParser;
-
-type
- TSsPlayTimeException = class(Exception);
- TSsPlayTimeInitException = class(TSsPlayTimeException);
-
- TSsPlayTimeSpecialChar = class(TCollectionItem)
- private
- FWait: integer;
- FChar: String;
- procedure SetChar(const Value: String);
- procedure SetWait(const Value: integer);
- protected
- function GetDisplayName: String; override;
- public
- procedure Assign(Source: TPersistent); override;
- function DisplayChar: String;
- published
- property Char: String read FChar write SetChar;
- property Wait: integer read FWait write SetWait;
- end;
-
- TSsPlayTimeSpecialChars = class(TCollection)
- end;
-
- TSsPlayTimeParams = class(TComponent)
- private
- FCostWait: integer;
- FCostDBChar: integer;
- FCostChar: integer;
- FCostConst: integer;
- FCostHiResWait: integer;
- FCostSurface: integer;
- FCostQuickChar: integer;
- FProfileName: String;
- FSpecialChars: TSsPlayTimeSpecialChars;
- procedure SetCostChar(const Value: integer);
- procedure SetCostConst(const Value: integer);
- procedure SetCostDBChar(const Value: integer);
- procedure SetCostWait(const Value: integer);
- procedure SetCostHiResWait(const Value: integer);
- procedure SetCostSurface(const Value: integer);
- procedure SetCostQuickChar(const Value: integer);
- procedure SetProfileName(const Value: String);
- procedure SetSpecialChars(const Value: TSsPlayTimeSpecialChars);
- public
- constructor Create(AOwner: TComponent); override;
- destructor Destroy; override;
- procedure Assign(Source: TPersistent); override;
- published
- property ProfileName: String read FProfileName write SetProfileName;
- property CostConst: integer read FCostConst write SetCostConst default 0;
- property CostWait: integer read FCostWait write SetCostWait default 50;
- property CostHiResWait: integer read FCostHiResWait write SetCostHiResWait default 1;
- property CostSurface: integer read FCostSurface write SetCostSurface default 5;
- property CostChar: integer read FCostChar write SetCostChar default 50;
- property CostDBChar: integer read FCostDBChar write SetCostDBChar default 50;
- property CostQuickChar: integer read FCostQuickChar write SetCostQuickChar default 0;
- property SpecialChars: TSsPlayTimeSpecialChars read FSpecialChars write SetSpecialChars;
- end;
-
- TSsPlayTimeCount = record
- Wait: integer;
- HiResWait: integer;
- Surface: integer;
- Char: integer;
- DBChar: integer;
- QuickChar: integer;
- Specials: integer;
- end;
-
- TSsPlayTime = class(TComponent)
- private
- FPlayTimeParams: TSsPlayTimeParams;
- FSsParser: TSsParser;
- FCounts: TSsPlayTimeCount;
- procedure SetPlayTimeParams(const Value: TSsPlayTimeParams);
- procedure SetSsParser(const Value: TSsParser);
- protected
- procedure CountElements;
- procedure CountCharacterType(const Str: String; out SB, DB,
- SPNum, SPWait: integer);
- public
- function PlayTime(const Script: String): integer;
- property Counts: TSsPlayTimeCount read FCounts;
- published
- property PlayTimeParams: TSsPlayTimeParams read FPlayTimeParams write SetPlayTimeParams;
- property SsParser: TSsParser read FSsParser write SetSsParser;
- end;
-
-procedure Register;
-
-implementation
-
-const
- CDBWhiteSpace = #129 + #64; // Shift_JIS DB White Space;
-
-procedure Register;
-begin
- RegisterComponents('Samples', [TSsPlayTime, TSsPlayTimeParams]);
-end;
-
-{ TSsPlayTimeParams }
-
-procedure TSsPlayTimeParams.Assign(Source: TPersistent);
-var
- Src: TSsPlayTimeParams;
-begin
- if not (Source is TSsPlayTimeParams) then
- inherited
- else
- begin
- Src := Source as TSsPlayTimeParams;
- FCostConst := Src.FCostConst;
- FCostWait := Src.FCostWait;
- FCostHiResWait := Src.FCostHiResWait;
- FCostSurface := Src.FCostSurface;
- FCostChar := Src.FCostChar;
- FCostDBChar := Src.FCostDBChar;
- FCostQuickChar := Src.FCostQuickChar;
- FProfileName := Src.FProfileName;
- FSpecialChars.Assign(Src.SpecialChars);
- end;
-end;
-
-constructor TSsPlayTimeParams.Create(AOwner: TComponent);
-begin
- inherited;
- FCostConst := 0;
- FCostWait := 50;
- FCostHiResWait := 1;
- FCostSurface := 5;
- FCostChar := 50;
- FCostDBChar := 50;
- FCostQuickChar := 0;
- FSpecialChars := TSsPlayTimeSpecialChars.Create(TSsPlayTimeSpecialChar);
-end;
-
-destructor TSsPlayTimeParams.Destroy;
-begin
- FSpecialChars.Free;
- inherited;
-end;
-
-procedure TSsPlayTimeParams.SetCostChar(const Value: integer);
-begin
- FCostChar := Value;
-end;
-
-procedure TSsPlayTimeParams.SetCostConst(const Value: integer);
-begin
- FCostConst := Value;
-end;
-
-procedure TSsPlayTimeParams.SetCostDBChar(const Value: integer);
-begin
- FCostDBChar := Value;
-end;
-
-procedure TSsPlayTimeParams.SetCostHiResWait(const Value: integer);
-begin
- FCostHiResWait := Value;
-end;
-
-procedure TSsPlayTimeParams.SetCostQuickChar(const Value: integer);
-begin
- FCostQuickChar := Value;
-end;
-
-procedure TSsPlayTimeParams.SetCostSurface(const Value: integer);
-begin
- FCostSurface := Value;
-end;
-
-procedure TSsPlayTimeParams.SetCostWait(const Value: integer);
-begin
- FCostWait := Value;
-end;
-
-procedure TSsPlayTimeParams.SetProfileName(const Value: String);
-begin
- FProfileName := Value;
-end;
-
-procedure TSsPlayTimeParams.SetSpecialChars(
- const Value: TSsPlayTimeSpecialChars);
-begin
- FSpecialChars.Assign(Value);
-end;
-
-{ TSsPlayTime }
-
-procedure TSsPlayTime.CountCharacterType(const Str: String; out SB,
- DB, SPNum, SPWait: integer);
-var
- i, j: integer;
- InLeadByte, Flag: boolean;
- AChar: TSsPlayTimeSpecialChar;
-begin
- SB := 0;
- DB := 0;
- SPNum := 0;
- SPWait := 0;
- InLeadByte := false;
- for i := 1 to Length(Str) do
- begin
- if InLeadByte then
- begin
- Inc(DB);
- InLeadByte := false;
- end
- else
- begin
- Flag := false;
- for j := 0 to PlayTimeParams.SpecialChars.Count-1 do
- begin
- AChar := PlayTimeParams.SpecialChars.Items[j] as TSsPlayTimeSpecialChar;
- if Length(AChar.Char) = 2 then
- begin
- if Str[i] + Str[i+1] = AChar.Char then
- begin
- Inc(SPWait, AChar.Wait);
- Inc(SPNum);
- Dec(DB);
- Flag := true;
- InLeadByte := true;
- Break;
- end;
- end else
- begin
- if Str[i] = AChar.Char then
- begin
- Inc(SPWait, AChar.Wait);
- Inc(SPNum);
- Flag := true;
- Break;
- end;
- end;
- end;
- if not Flag then
- begin
- if Str[i] in LeadBytes then
- InLeadByte := true
- else
- Inc(SB);
- end;
- end;
- end;
-end;
-
-procedure TSsPlayTime.CountElements;
-var
- i, SB, DB, SPNum, SPWait: integer;
- Mark: String;
- InQuick: boolean;
-begin
- ZeroMemory(@FCounts, sizeof(FCounts));
- InQuick := false;
- with SsParser do
- begin
- for i := 0 to SsParser.Count-1 do
- begin
- Mark := Str[i];
- case MarkUpType[i] of
- mtTag:
- begin
- if Mark = '\_q' then
- InQuick := not InQuick
- else if Match(Mark, '\w%d') = 3 then
- FCounts.Wait := FCounts.Wait + Ord(Mark[3]) - Ord('0')
- else if Match(Mark, '\_w[%D]') > 0 then
- Inc(FCounts.HiResWait, StrToInt(GetParam(Mark, 0)))
- else if Match(Mark, '\s%d') = 3 then
- Inc(FCounts.Surface)
- else if Match(Mark, '\s%b') > 0 then
- Inc(FCounts.Surface)
- end;
- mtMeta, mtStr:
- begin
- if InQuick then
- begin
- CountCharacterType(Mark, SB, DB, SPNum, SPWait);
- Inc(FCounts.QuickChar, SB + DB + SPNum);
- end else
- begin
- CountCharacterType(Mark, SB, DB, SPNum, SPWait);
- Inc(FCounts.Char, SB);
- Inc(FCounts.DBChar, DB);
- Inc(FCounts.Specials, SPWait);
- end;
- end;
- // Ignore all tag errors
- end;
- end;
- end;
-end;
-
-function TSsPlayTime.PlayTime(const Script: String): integer;
-begin
- Result := 0;
- if FSsParser = nil then
- raise TSsPlayTimeInitException.Create('SsParser is not set');
- if FPlayTimeParams = nil then
- raise TSsPlayTimeInitException.Create('PlayTimeParams is not set');
- SsParser.InputString := Script;
- CountElements;
- with PlayTimeParams do
- Result := CostConst + CostWait * FCounts.Wait + CostSurface * FCounts.Surface +
- CostHiResWait * FCounts.HiResWait + CostChar * FCounts.Char +
- CostDBChar * FCounts.DBChar + FCounts.Specials +
- CostQuickChar * FCounts.QuickChar;
-end;
-
-procedure TSsPlayTime.SetPlayTimeParams(const Value: TSsPlayTimeParams);
-begin
- FPlayTimeParams := Value;
-end;
-
-procedure TSsPlayTime.SetSsParser(const Value: TSsParser);
-begin
- FSsParser := Value;
-end;
-
-{ TSsPlayTimeSpecialChar }
-
-procedure TSsPlayTimeSpecialChar.Assign(Source: TPersistent);
-begin
- if not(Source is TSsPlayTimeSpecialChar) then
- inherited
- else
- begin
- Self.FChar := (Source as TSsPlayTimeSpecialChar).FChar;
- Self.FWait := (Source as TSsPlayTimeSpecialChar).FWait;
- end;
-end;
-
-function TSsPlayTimeSpecialChar.DisplayChar: String;
-begin
- if FChar = ' ' then
- Result := '(SP)'
- else if FChar = CDBWhiteSpace then
- Result := '(DB SP)'
- else
- Result := FChar;
-end;
-
-function TSsPlayTimeSpecialChar.GetDisplayName: String;
-begin
- Result := Format('"%s" = %d', [DisplayChar, FWait]);
-end;
-
-procedure TSsPlayTimeSpecialChar.SetChar(const Value: String);
-begin
- if Value = '' then
- FChar := Value
- else
- begin
- if (Value[1] in LeadBytes) then
- begin
- if Length(Value) = 2 then
- FChar := Value;
- end else if Length(Value) = 1 then
- FChar := Value;
- end;
-end;
-
-procedure TSsPlayTimeSpecialChar.SetWait(const Value: integer);
-begin
- FWait := Value;
-end;
-
-end.
-
\ No newline at end of file
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>TDirectSSTP</title>
-<link rel="stylesheet" type="text/css" href="sakurasuite.css">
-</head>
-
-<body>
-
-<dl>
-</dl>
-<h1>TDirectSSTP</h1>
-<h2>\8aT\97v</h2>
-<p>\82³\82\82ç\83X\83N\83\8a\83v\83g\92Ê\90M\83v\83\8d\83g\83R\83\8b(SSTP)\82ð\8eg\82Á\82Ä\81A\83\8d\81[\83J\83\8b\83z\83X\83g\8fã\82ÌSSTP\83T\81[\83o\82Æ\92Ê\90M\82·\82é\83R\83\93\83|\81[\83l\83\93\83g\82Å\82·\81B</p>
-<p>DirectSSTP\82É\82Ì\82Ý\91Î\89\9e\82µ\82Ä\82¢\82Ü\82·\81B</p>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X - \83v\83\8d\83p\83e\83B</h2>
-<h3><code>SenderName: String [\93Ç/\8f\91][\90Ý/\8eÀ]</code></h3>
-<p>SSTP\82ÌSender\83w\83b\83_\95¶\8e\9a\97ñ\82ð\90Ý\92è\82µ\82Ü\82·\81B\82Â\82Ü\82è\91\97\82è\8eè\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93(Delphi\91¤)\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\96¼\82Å\82·\81B\8e©\95ª\82ª\8aJ\94\82µ\82Ä\82¢\82é\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\96¼\91O\82ð\93ü\82ê\82Ä\82\82¾\82³\82¢\81B\83f\83t\83H\83\8b\83g\82Í\81uMy
-Program\81v\82Å\82·\82ª\81A\95K\82¸\95Ï\8dX\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B</p>
-<h3><code>StatusCode: Integer [\93Ç\82Ì\82Ý][\8eÀ\82Ì\82Ý]</code></h3>
-<p>\8dÅ\8cã\82É\94\8ds\82µ\82½SSTP\83\8a\83N\83G\83X\83g\82É\82æ\82Á\82Ä\8bA\82Á\82Ä\82«\82½\81A\83X\83e\81[\83^\83X\83R\81[\83h\82Ì\90\94\92l\82ª\93ü\82è\82Ü\82·\81BOK\82È\82ç200\94Ô\91ä\81A\82»\82ê\88È\8aO\82È\82ç\83G\83\89\81[\82Å\82·\81B\8fÚ\82µ\82\82Í\81ASSTP\8ed\97l\8f\91\82ð\82²\97\97\82\82¾\82³\82¢\81B</p>
-<ul>
- <li>UnknownError(=-1000)\92è\90\94\82ªStatusCode\82É\93ü\82é\82±\82Æ\82ª\82 \82è\82Ü\82·\81B\82±\82ê\82Í\83T\81[\83o\82ª\97\8e\82¿\82Ä\82¢\82½\82È\82Ç\82Ì\97\9d\97R\82Å\89\9e\93\9a\82ª\82Ü\82Á\82½\82\93¾\82ç\82ê\82È\82©\82Á\82½\82Æ\82«\82Ì\90\94\92l\82Å\82·\81B</li>
-</ul>
-<h3><code>SentLog: String [\93Ç\82Ì\82Ý][\8eÀ\82Ì\82Ý]</code></h3>
-<p>\8dÅ\8cã\82É\94\8ds\82µ\82½SSTP\95¶\82ª\82»\82Ì\82Ü\82Ü\93ü\82Á\82Ä\82¢\82Ü\82·\81B\83`\83F\83b\83N\82É\82Ç\82¤\82¼\81B\8dÄ\91\97\82Ì\92¼\8cã\82É\82à\8dÄ\91\97\82Ì\82Æ\82«\82É\94\8ds\82µ\82½\95¶\82ª\93ü\82Á\82Ä\82¢\82Ü\82·\81B</p>
-<h3><code>RecvLog: String [\93Ç\82Ì\82Ý][\8eÀ\82Ì\82Ý]</code></h3>
-<p>\8dÅ\8cã\82É\8ds\82Á\82½\92Ê\90M\82É\82æ\82é\81ASSTP\83T\81[\83o\82©\82ç\82Ì\83\8c\83X\83|\83\93\83X\82ª\91S\95\94\8bL\98^\82³\82ê\82Ä\82¢\82Ü\82·\81B\8dÄ\91\97\82Ì\92¼\8cã\82É\82à\8dÄ\91\97\82Ì\82Æ\82«\82Ì\83\8c\83X\83|\83\93\83X\82ª\93ü\82Á\82Ä\82¢\82Ü\82·\81B</p>
-<h3><code>LastStatus: TSstpResult; [\93Ç\82Ì\82Ý][\8eÀ\82Ì\82Ý]</code></h3>
-<p>\8dÅ\8cã\82ÌSSTP\83T\81[\83o\82©\82ç\82Ì\83\8c\83X\83|\83\93\83X\82ª\81ATSstpResult\8c^(\83R\81[\83h\8eQ\8fÆ)\82Å\93ü\82Á\82Ä\82¢\82Ü\82·\81B</p>
-<ul>
- <li>srUnknownError\82Í\81A\89½\82ç\82©\82Ì\8e\96\8fî\82ÅSSTP\83T\81[\83o\82©\82ç\82Ì\89\9e\93\9a\82ª\82Ü\82Á\82½\82\93¾\82ç\82ê\82È\82©\82Á\82½\8fê\8d\87\82Ì\83G\83\89\81[\82Å\82·\81B\82±\82ê\82Í\81ATDirectSSTP\91¤\82Ì\83^\83C\83\80\83A\83E\83g\81A\82 \82é\82¢\82ÍSSTP\83T\81[\83o\82Ì\83r\83W\81[\8fó\91Ô(Conflict\82Æ\82Í\88á\82¤)\82È\82Ç\82ª\8c´\88ö\82Å\94\90¶\82µ\82Ü\82·\81B</li>
-</ul>
-<h3><code>CueCount: integer; [\93Ç\82Ì\82Ý][\8eÀ\82Ì\82Ý]</code></h3>
-<p>\8dÄ\91\97\83L\83\85\81[\82É\8c»\8dÝ\93ü\82Á\82Ä\82¢\82éSEND\83\81\83b\83Z\81[\83W\82Ì\90\94\82ð\95Ô\82µ\82Ü\82·\81B</p>
-<h3><code>Interval: integer; [\93Ç/\8f\91][\90Ý/\8eÀ]</code></h3>
-<p>\8dÄ\91\97\83L\83\85\81[\82©\82ç\8dÄ\91\97\82ð\8ds\82¤\8aÔ\8au\82ð\83~\83\8a\95b\82Å\8ew\92è\82µ\82Ü\82·\81B1000\82æ\82è\8f¬\82³\82¢\92l\82à\90Ý\92è\82Å\82«\82Ü\82·\82ª\81ASSTP\83T\81[\83o\82É\89ß\95\89\89×\82ð\97^\82¦\82é\89Â\94\\90«\82ª\82 \82è\82Ü\82·\82Ì\82Å\81A\82Å\82«\82é\82¾\82¯\90Ý\92è\82µ\82È\82¢\82æ\82¤\82É\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<h3><code>Sleep: boolean; [\93Ç/\8f\91][\90Ý/\8eÀ]</code></h3>
-<p>\8dÄ\91\97\83L\83\85\81[\82©\82ç\82Ì\8dÄ\91\97\82ð\88ê\8e\9e\92â\8e~\82µ\82Ü\82·\81BSleep = true\82Ì\8aÔ\82Í\81ASstpSENDCue\83\81\83\\83b\83h\82É\82æ\82Á\82Ä\83\81\83b\83Z\81[\83W\82ª\93ü\97Í\82³\82ê\82Ä\82à\81A\83R\83\93\83|\81[\83l\83\93\83g\93à\95\94\82Å\8bL\89¯\82³\82ê\82é\82¾\82¯\82Å\81A\8eÀ\8dÛ\82É\82ÍSSTP\83T\81[\83o\82É\82Í\91\97\90M\82³\82ê\82Ü\82¹\82ñ\81BSleep
-= false\82É\82È\82Á\82½\82Æ\82«\82É\81A\91\97\90M\82³\82ê\8en\82ß\82Ü\82·\81B</p>
-<h3><code>TargetHWnd: THandle; [\93Ç/\8f\91][\90Ý/\8eÀ]</code><span class="direct">[DirectSSTP]</span></h3>
-<p>\83^\81[\83Q\83b\83g\83E\83B\83\93\83h\83E\83n\83\93\83h\83\8b\82ð\90Ý\92è\82µ\82Ü\82·\81B</p>
-<h3><code>Handle: THandle; [\93Ç\82Ì\82Ý][\8eÀ\82Ì\82Ý]</code><span class="direct">[DirectSSTP]</span></h3>
-<p>FastSSTP\82Í\81A\93à\95\94\82Å\83E\83B\83\93\83h\83E\83n\83\93\83h\83\8b\82ð1\82Â\8dì\90¬\82µ\81A\82±\82ê\82ð\8eg\82Á\82ÄSSTP\83T\81[\83o\82ÆDirectSSTP\92Ê\90M\82ð\8ds\82¢\82Ü\82·\81B<br>
-\82±\82Ì\83v\83\8d\83p\83e\83B\82Í\81A\82»\82Ì\83E\83B\83\93\83h\83E\83n\83\93\83h\83\8b\82ð\95Ô\82µ\82Ü\82·\81BDirectSSTP\82ÅSSTP\95¶\82ÌHWnd\82É\90Ý\92è\82³\82¹\82ê\82é\83n\83\93\83h\83\8b\82Å\82·\81B<br>
-\93Æ\8e©\82ÌSSTP\95¶\82ð\8dì\82è\82½\82¢\82Ì\82Å\82È\82¢\8cÀ\82è\81A\92¼\90Ú\97\98\97p\82·\82é\82±\82Æ\82Í\82 \82Ü\82è\82È\82¢\82Æ\8ev\82¢\82Ü\82·\81B</p>
-<h2>\83\81\83\\83b\83h</h2>
-<h3><code>function TFastSstp.SstpSEND(const Script: String;<br>
-const Option: TSstpSendOptions = []): TSstpResult; overload;</code></h3>
-<h3><code>function SstpSEND(const Script: TStrings;<br>
-const Option: TSstpSendOptions = [];<br>
-const Handle: HWND = 0): TSstpResult; overload;</code></h3>
-<p>SEND\83\8a\83N\83G\83X\83g\82ð\82·\82®\82É\91\97\90M\82µ\82Ü\82·\81B\8e©\93®\93I\82ÉSSTP\83T\81[\83o\82Æ\90Ú\91±\82µ\81ASEND\83\8a\83N\83G\83X\83g\82ð\91\97\90M\82µ\81A\83X\83e\81[\83^\83X\83R\81[\83h\82ð\8eó\82¯\8eæ\82è\82Ü\82·\81BScript\82É\82Í\81A\94F\8e¯\89Â\94\\82È\82³\82\82ç\83X\83N\83\8a\83v\83g\96{\95¶\82ð\81AOption\82É\82Í\81Aset
-of (soNoDescript, soNoTranslate)\82ð\93n\82µ\82Ü\82·\81B</p>
-<p>\83I\81[\83o\81[\83\8d\81[\83h\8aÖ\90\94\82Å\82·\82Ì\82Å\81A\88ø\90\94\82É\82æ\82Á\82Ä\93K\90Ø\82È\95û\82ª\8cÄ\82Î\82ê\82Ü\82·\81B</p>
-<p>\91æ1\82Ì\8cÄ\82Ñ\8fo\82µ\82Í\81A\88ø\90\94\82ÉString\8c^\82ð\8eæ\82é\81ASSTP/1.1\91\8a\93\96\82Ì\92P\8f\83\82ÈSEND\83\8a\83N\83G\83X\83g\82ð\91\97\90M\82µ\82Ü\82·\81B</p>
-<p>\91æ2\82Ì\8cÄ\82Ñ\8fo\82µ\82Í\81ASSTP/1.2\82¨\82æ\82Ñ1.3\82É\91Î\89\9e\82µ\82Ü\82·\81B\88ø\90\94\82ÉTStrings\8c^\82ð\8eæ\82è\82Ü\82·\81BScript:
-TStrings\82Í\83\81\83\\83b\83h\93à\95\94\82Å\82Í\89ð\95ú\82³\82ê\82Ü\82¹\82ñ\82Ì\82Å\8e©\91O\82Å\89ð\95ú\8f\88\97\9d\82µ\82Ä\82\82¾\82³\82¢\81BScript\82Ì1\8ds\96Ú(Script[0])\82ªScript\83G\83\93\83g\83\8a\82É\81A2\8ds\96Ú\88È\8d~\82ÍEntry\83G\83\93\83g\83\8a\82É\95Ï\8a·\82³\82ê\82Ä\91\97\90M\82³\82ê\82Ü\82·\81B</p>
-<p><span class="tcpip">[TCP/IP]</span> TCP/IP\82Å\91\97\90M\82·\82é\8fê\8d\87\81AHandle\82É0\88È\8aO\82Ì\92l\82ð\90Ý\92è\82·\82é\82Æ\81AHWnd\83G\83\93\83g\83\8a\82ª\91\97\90M\82³\82ê\82Ü\82·\81B\95s\97v\82È\82çHandle=0\82Æ\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<p><span class="direct">[DirectSSTP]</span> DirectSSTP\83\82\81[\83h\82Å\82Í\81AHandle\82Ì\92l\82ª\97D\90æ\82³\82ê\82Ü\82·\82ª\81A\82±\82ê\82ª\8fÈ\97ª\82³\82ê\82½\8fê\8d\87\82Å\82à\81A\83f\83t\83H\83\8b\83g\82ÌHWnd\83G\83\93\83g\83\8a\82ª\91\97\90M\82³\82ê\82Ü\82·(\93\96\91R)\81B</p>
-<p>\96ß\82è\92l\82ÍTSstpResult\97ñ\8b\93\8c^\82Ì\92l\82Å\82·\81B\83X\83e\81[\83^\83X\83R\81[\83h\82Ì\90\94\92l\8e©\91Ì\82Å\8c\8b\89Ê\82ð\92m\82è\82½\82¢\8fê\8d\87\82ÍStatusCode\83v\83\8d\83p\83e\83B\82ð\8eg\97p\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<ul>
- <li>\91æ1\82Ì\8cÄ\82Ñ\8fo\82µ\82Ì\8fê\8d\87\81A\88ø\90\94\82ÌString\8c^\95Ï\90\94\82É\89ü\8ds\95¶\8e\9a(#13#10)\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
- <li>\91æ2\82Ì\8cÄ\82Ñ\8fo\82µ\82Ì\8fê\8d\87\81A\88ø\90\94\82ÌTString\8c^\82Ì\8ae\8ds\82Ì\95¶\8e\9a\97ñ\82É\89ü\8ds\95¶\8e\9a\82ð\8aÜ\82ß\82È\82¢\82Å\82\82¾\82³\82¢\81B
- <li><span class="tcpip">[TCP/IP]</span> SSTP/1.2\88È\8d~\82Ì\8cÄ\82Ñ\8fo\82µ\82ð\8ds\82¤\8fê\8d\87\82Í\81A<em>\83^\83C\83\80\83A\83E\83g\8e\9e\8aÔ\82É\92\8d\88Ó\82µ\82Ä\82\82¾\82³\82¢\81B</em>\83f\83t\83H\83\8b\83g\82Ì\83^\83C\83\80\83A\83E\83g\8e\9e\8aÔ\82Í1500ms\82Å\82·\82Ì\82Å\81A\82±\82Ì\8e\9e\8aÔ\82ð\89ß\82¬\82é\82ÆSSTP\83T\81[\83o\82©\82ç\82Ì\83\8c\83X\83|\83\93\83X\82ð\91Ò\82½\82¸\81A\8e©\95ª\82©\82ç\92Ê\90M\82ð\90Ø\92f\82µ\82Ä\82µ\82Ü\82¤\82±\82Æ\82É\82È\82è\82Ü\82·(\83X\83e\81[\83^\83X\83R\81[\83h\82ÍUnknownError\82Æ\82È\82è\82Ü\82·)\81B\91I\91ð\8e\88\82Ì\82 \82éSend\83\8a\83N\83G\83X\83g\82Ì\91O\82É\83^\83C\83\80\83A\83E\83g\8e\9e\8aÔ\82ð\8f\\95ª\92·\82¢\82à\82Ì(\8dÅ\92á10\95b\88È\8fã)\82É\90Ý\92è\82µ\82Ä\82\82¾\82³\82¢\81B
- <li>\91I\91ð\8e\88\82ð\8aÜ\82Þ\83X\83N\83\8a\83v\83g\82ð\81Amateria\82Æ\82Ì\91g\82Ý\8d\87\82í\82¹\82Å\8eg\97p\82·\82é\8fê\8d\87\81Amateria\82ª\94½\89\9e\82ð\95Ô\82³\82È\82¢\82±\82Æ\82ª\82 \82è\82Ü\82·\81B(CROW,
- SSP\82ð\8f\89\82ß\82Æ\82µ\82½\82»\82Ì\91¼\82ÌSSTP\83T\81[\83o\82Å\82Í\82»\82Ì\82æ\82¤\82È\82±\82Æ\82Í\82 \82è\82Ü\82¹\82ñ)<br>
- \82±\82Ì\96â\91è\82ð\94ð\82¯\82é\82½\82ß\82É\82Í\81A\91I\91ð\8e\88\82ð\8aÜ\82Þ\83X\83N\83\8a\83v\83g\82ðmateria\82Å\8dÄ\90¶\82µ\82È\82¢\82æ\82¤\82É\82µ\82Ä\82\82¾\82³\82¢\81B(\96â\91è\82Ì\8fC\90³\82É\82Í\91\97\90M\95\94\82Ì\83X\83\8c\83b\83h\89»\82ª\95K\97v\82Å\82·)</li>
-</ul>
-<h3><code>function TFastSstp.SstpSENDCue(const Script: String;<br>
-const HighPriority: boolean = false;<br>
-const Option: TSstpSendOptions = []): integer;</code></h3>
-<p>SEND\83\8a\83N\83G\83X\83g\82ð\81A\8dÄ\91\97\83\82\81[\83h\82Å\91\97\90M\82µ\82Ü\82·\81B\82±\82Ì\83\81\83\\83b\83h\82Å\8cÄ\82Ñ\8fo\82³\82ê\82½\8fê\8d\87\81A\82»\82Ì\83X\83N\83\8a\83v\83g\82Í\82·\82®\82É\82Í\91\97\90M\82³\82ê\82¸\81A\8dÄ\91\97\83L\83\85\81[(FSendCue)\82É\93ü\82è\82Ü\82·\81B\8dÄ\91\97\83L\83\85\81[\82É\91\97\82ç\82ê\82½\83X\83N\83\8a\83v\83g\82Í\81AInterval\83~\83\8a\95b\8aÔ\8au\82Å\81A\8e©\93®\93I\82ÉSSTP\83T\81[\83o\82É\91\97\90M\82³\82ê\82Ü\82·\81BInterval\83v\83\8d\83p\83e\83B\82à\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<p>HighPriority = true\82Ì\8fê\8d\87\81A\83L\83\85\81[\82Ì\90æ\93ª\82É\94z\92u\82³\82ê\82Ü\82·\82Ì\82Å\81A\82·\82®\82É\91\97\90M\82³\82ê\82Ü\82·\81Bfalse\82Ì\8fê\8d\87\82Í\81A\83L\83\85\81[\82Ì\8cã\82ë\91¤\82É\95t\82¯\91«\82³\82ê\82Ü\82·\81B</p>
-<p>\83L\83\85\81[\82ª\8bó\82¾\82Á\82½\8fê\8d\87\82ð\8f\9c\82«\81A\82·\82®\82É\91\97\90M\82³\82ê\82é\82í\82¯\82Å\82Í\82È\82¢\82Ì\82Å\81A\96ß\82è\92l\82ÍTSstpResult\8c^\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B\91ã\82í\82è\82É\81A\82»\82Ì\83\81\83b\83Z\81[\83W\82ð\8e¯\95Ê\82·\82éinteger\92l\82ªID\82Æ\82µ\82Ä\90¶\90¬\82³\82ê\81A\95Ô\82³\82ê\82Ü\82·\81B\8dÄ\91\97\82É\8aÖ\8cW\82·\82é\8ae\8eí\83C\83x\83\93\83g\82Í\81A\83\81\83b\83Z\81[\83W\82Ì\8dÄ\91\97\82Ì\82Æ\82«\82É\81A\82±\82ÌID\82ð\83p\83\89\83\81\81[\83^\82Æ\82µ\82Ä\93n\82µ\82Ü\82·\82Ì\82Å\81AID\82ð\8bL\89¯\82µ\82Ä\82¨\82\8e\96\82Å\81A\83\81\83b\83Z\81[\83W\82ð\93¯\92è\82·\82é\82±\82Æ\82ª\89Â\94\\82Å\82·\81B</p>
-<h3><code>function TFastSstp.SstpEXECUTE(const Command: String): String;</code></h3>
-<p>EXECUTE\83\8a\83N\83G\83X\83g\82ð\91\97\90M\82µ\82Ü\82·\81B\8e©\93®\93I\82ÉSSTP\83T\81[\83o\82Æ\90Ú\91±\82µ\81AEXECUTE\83\8a\83N\83G\83X\83g\82ð\91\97\90M\82µ\81A\83X\83e\81[\83^\83X\83R\81[\83h\82Æ\92Ç\89Á\83f\81[\83^\82ð\8eó\82¯\8eæ\82Á\82½\82 \82Æ\90Ø\92f\82µ\82Ü\82·\81B</p>
-<p>\92Ç\89Á\83f\81[\83^\82ÍString\95Ï\90\94\82É\93ü\82Á\82Ä\82¢\82Ü\82·\81B</p>
-<p>\8aÖ\90\94\8cÄ\82Ñ\8fo\82µ\82ª\90¬\8c÷\82µ\82½\82©\82Ç\82¤\82©\82É\82Â\82¢\82Ä\82Í\81ALastStatus\83v\83\8d\83p\83e\83B\82Å\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<h3><code>function TFastSstp.SstpCOMMUNICATE(const Sentence: String<br>
- const Port: integer = 0): TSstpResult;</code></h3>
-<p>COMMUNICATE/1.2\83\8a\83N\83G\83X\83g\82ð\91\97\90M\82µ\82Ü\82·\81BPort\82É0\82ð\8ew\92è\82·\82é(\88ø\90\94\82ð\8fÈ\97ª\82·\82ê\82Î\8e©\93®\93I\82É0\82É\82È\82è\82Ü\82·)\8fê\8d\87\81ACOMMUNICATE/1.1\91\8a\93\96\82Ì\83\8a\83N\83G\83X\83g\82Æ\82È\82è\82Ü\82·\81BPort\82É0\88È\8aO\82Ì\92l\82ð\8ew\92è\82·\82ê\82Î\81ACOMMUNICATE/1.2\91\8a\93\96\82Ì\83\8a\83N\83G\83X\83g\82Æ\82È\82è\82Ü\82·\81B</p>
-<ul>
- <li>FastSSTP\82ÍSSTP\83N\83\89\83C\83A\83\93\83g\83R\83\93\83|\81[\83l\83\93\83g\82Å\82 \82è\81A\83T\81[\83o\8b@\94\\82Í\92ñ\8b\9f\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B\82µ\82½\82ª\82Á\82Ä\81ACOMMUNIATE/1.2\82ð\8eÀ\8dÛ\82É\97L\8cø\82É\8eg\82¤\82É\82Í\81A\8c»\8fó\82Å\82Í\81A\91¼\82Ì\95û\96@\82ÅSSTP\83T\81[\83o\82ð\8dì\90¬\82·\82é\82µ\82©\82 \82è\82Ü\82¹\82ñ\81BSSTP\83T\81[\83o\8b@\94\\92ñ\8b\9f\82Í\96¢\92è\82Å\82·\81B</li>
-</ul>
-<h3><code>function TFastSstp.SstpGIVE(const Document: String): TSstpResult;</code></h3>
-<p>GIVE/1.0\83\8a\83N\83G\83X\83g\82ð\91\97\90M\82µ\82Ü\82·\81B\93à\95\94\82ÅSstpGIVE1_1\83\81\83\\83b\83h\82ð\8cÄ\82Ñ\8fo\82µ\82Ü\82·\81B\8cÝ\8a·\90«\82Ì\82½\82ß\82É\8ec\82Á\82Ä\82¢\82Ü\82·\82ª\81A\8eg\82Á\82Ä\82à\8d·\82µ\8ex\82¦\82 \82è\82Ü\82¹\82ñ\81B</p>
-<h3><code>function TFastSstp.SstpGIVE1_1(const Data: String;<br>
-const DataType: TGiveType = gtDocument): TSstpResult;</code></h3>
-<p>GIVE/1.1\83\8a\83N\83G\83X\83g\82ð\91\97\90M\82µ\82Ü\82·\81BDataType\82É\82Í\81AgtDocument\82Ü\82½\82ÍgtSongname\82ð\93n\82µ\82Ü\82·\81B<br>
-Data\83p\83\89\83\81\81[\83^\82É\81A\82»\82ê\82É\89\9e\82¶\82½\83f\81[\83^\82ð\93n\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<p>\96ß\82è\92l\82Í\83T\81[\83o\82©\82ç\82Ì\89\9e\93\9a\82Å\82·\81B</p>
-<h3><code>function TFastSstp.SstpExGetName: String;</code></h3>
-<p>EXECUTE\83\81\83\\83b\83h\82Ågetname\83R\83}\83\93\83h\82ð\94\8ds\82µ\81A\82»\82Ì\8c\8b\89Ê\82Ì\95¶\8e\9a\97ñ\82ð\95Ô\82µ\82Ü\82·\81B</p>
-<h3><code>function TFastSstp.SstpExSetCookie(const Key, Value: String):
-TSstpResult;</code></h3>
-<p>EXECUTE\83\81\83\\83b\83h\82ÅSetCookie\83R\83}\83\93\83h\82ð\94\8ds\82µ\82Ü\82·\81B<br>
-\95¡\90\94\8ds\82Ì\83f\81[\83^\82É\82Í\91Î\89\9e\82µ\82Ü\82¹\82ñ(\82Â\82Ü\82è\81A#13#10\82ª\8aÜ\82Ü\82ê\82é\83f\81[\83^\82Ì\89ü\8ds\82Í\8e©\93®\93I\82É\8fÁ\82µ\82Ü\82·)</p>
-<h3><code>function TFastSstp.SstpExGetCookie(const Key: String): String;</code></h3>
-<p>EXECUTE\83\81\83\\83b\83h\82ÅGetCookie\83R\83}\83\93\83h\82ð\94\8ds\82µ\81A\82»\82Ì\8c\8b\89Ê\82Ì\95¶\8e\9a\97ñ\82ð\95Ô\82µ\82Ü\82·\81B<br>
-\95¡\90\94\8ds\82Ì\83f\81[\83^\82É\82Í\91Î\89\9e\82µ\82Ü\82¹\82ñ(\82Â\82Ü\82è\81A#13#10\82ª\8aÜ\82Ü\82ê\82é\83f\81[\83^\82Ì\89ü\8ds\82Í\8e©\93®\93I\82É\8fÁ\82µ\82Ü\82·)</p>
-<h3><code>function TFastSstp.SstpExGetVersion: String;</code></h3>
-<p>EXECUTE\83\81\83\\83b\83h\82ÅGetVersion\82ð\94\8ds\82µ\81A\83X\83e\81[\83^\83X\83R\81[\83h\82ð\95Ô\82µ\82Ü\82·\81B</p>
-<h3><code>function TFastSstp.SstpExQuiet(const Quiet: boolean): TSstpResult;</code></h3>
-<p>EXECUTE\83\81\83\\83b\83h\82ÅQuiet\82Ü\82½\82ÍRestore\82ð\94\8ds\82µ\81A\83X\83e\81[\83^\83X\83R\81[\83h\82ð\95Ô\82µ\82Ü\82·\81B<br>
-Quiet = true\82ÅQuiet, Quiet = false\82ÅRestore\82ð\94\8ds\82Å\82·\81B</p>
-<h3><code>procedure ClearCue;</code></h3>
-<p>\8dÄ\91\97\83L\83\85\81[\82É\93ü\82Á\82Ä\82¢\82é\83\81\83b\83Z\81[\83W\82ð\91S\95\94\8dí\8f\9c\82µ\82Ü\82·\81B</p>
-<h2>\83C\83x\83\93\83g</h2>
-<h3><code>OnResendResend</code></h3>
-<p>\8dÄ\91\97\83L\83\85\81[\82Ì\83\81\83b\83Z\81[\83W\82Ì\91\97\90M\82É\8e¸\94s\82µ\81A\82»\82Ì\83\81\83b\83Z\81[\83W\82ð\82à\82¤\88ê\93x\8cã\82Å\91\97\82è\82È\82¨\82·\82Æ\8c\88\92è\82³\82ê\82½\82Æ\82«\82É\94\90¶\82µ\82Ü\82·\81B<br>
-\82±\82Ì\83C\83x\83\93\83g\83n\83\93\83h\83\89\82Ì\92\86\82Å\81ALastStatus, StatusCode\82É\83A\83N\83Z\83X\82Å\82«\82Ü\82·\81B</p>
-<h3><code>OnResendEnd</code></h3>
-<p>\8dÄ\91\97\83L\83\85\81[\82Ì\83\81\83b\83Z\81[\83W\82Ì\91\97\90M\82É\90¬\8c÷\82µ\81A\82»\82Ì\83\81\83b\83Z\81[\83W\82ð\8dÄ\91\97\83L\83\85\81[\82©\82ç\8dí\8f\9c\82·\82é\82Æ\82«\82É\94\90¶\82µ\82Ü\82·\81B<br>
-\82±\82Ì\83C\83x\83\93\83g\83n\83\93\83h\83\89\82Ì\92\86\82Å\81ALastStatus, StatusCode\82É\83A\83N\83Z\83X\82Å\82«\82Ü\82·\81B</p>
-<h3><code>OnResendTrying</code></h3>
-<p>\8dÄ\91\97\83L\83\85\81[\82Ì\83\81\83b\83Z\81[\83W\82Ì\91\97\90M\92¼\91O\82É\94\90¶\82µ\82Ü\82·\81B</p>
-<h3><code>OnResendCountChange</code></h3>
-<p>\8dÄ\91\97\83L\83\85\81[\82Ì\93o\98^\90\94\82ª\95Ï\82í\82Á\82½\92¼\8cã\82É\94\90¶\82µ\82Ü\82·\81B\93o\98^\90\94\82Í\81ACueCount\83v\83\8d\83p\83e\83B\82Å\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<h3><code>OnAfterConnection</code></h3>
-<p>\91S\82Ä\82ÌSSTP\83\8a\83N\83G\83X\83g\82ª\91\97\90M\82µ\8fI\82í\82Á\82½\92¼\8cã\82É\94\90¶\82µ\82Ü\82·\81BRecvLog,
-SentLog, LastStatus, StatusCode\82Ì\8ae\83v\83\8d\83p\83e\83B\82É\83A\83N\83Z\83X\82Å\82«\82Ü\82·\81BSSTP\95¶\82Ì\94\8ds\89ñ\90\94\82Ì\83J\83E\83\93\83g\82\82ç\82¢\82É\82Í\8eg\82¦\82é\82©\82à\82µ\82ê\82Ü\82¹\82ñ\81B<br>
-\93à\95\94\8f\88\97\9d\82ª\88á\82¤\82Ì\82Å\81ASstpExTimeOut\82Ì\8fê\8d\87\82É\82Í\94\90¶\82µ\82Ü\82¹\82ñ\81B</p>
-<h2>\97á</h2>
-<p>\90V\8bK\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð1\82Â\8dì\90¬\82µ\81A\83t\83H\81[\83\80\82ÉTFastSstp\82ð1\82Â\94z\92u\82µ\82Ü\82·\81BSenderName\83v\83\8d\83p\83e\83B\82É\81A\93K\93\96\82È\96¼\91O\82ð\95t\82¯\82Ä\82 \82°\82Ä\82\82¾\82³\82¢\81B\83t\83H\81[\83\80\82ÌOnCreate\83C\83x\83\93\83g\82É\8e\9f\82Ì\82æ\82¤\82É\8f\91\82«\82Ü\82·\81B</p>
-<pre><code>procedure TForm1.Form1OnCreate(Sender: TObject);
-begin
- FastSstp1.SstpSEND('\s0\h\83e\83X\83g\83v\83\8d\83O\83\89\83\80\82ª\8bN\93®\82µ\82½\82æ\81B\e', [soNoDescript]);
-end;</code></pre>
-<p>\82 \82Æ\82Í\82±\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8eÀ\8ds\82·\82é\82¾\82¯\82Å\82·\81B</p>
-<h2>\8dÄ\91\97\82É\82Â\82¢\82Ä\82Ì\91S\94Ê\93I\92\8d\88Ó</h2>
-<ul>
- <li>Interval\82ð\8f¬\82³\82È\92l\82É\82µ\82·\82¬\82È\82¢\82æ\82¤\82É\8bC\82ð\82Â\82¯\82Ä\82\82¾\82³\82¢\81B
- <li>\8dÄ\91\97\82ª\8ds\82í\82ê\82½\82Æ\82«\81ARecvLog, SentLog, LastStatus, StatusCode\82Ì\8ae\83v\83\8d\83p\83e\83B\82Í\95Ï\89»\82µ\82Ü\82·\81B\82µ\82½\82ª\82Á\82Ä\81ASstpSENDCue\83\81\83\\83b\83h\82Æ\81A\91¼\82ÌSSTP\83\81\83\\83b\83h\82ð\95¹\97p\82·\82é\8fê\8d\87\82Í\81A\82±\82ê\82ç\82Ì\83v\83\8d\83p\83e\83B\82É\83A\83N\83Z\83X\82·\82é\91O\82É\8dÄ\91\97\82ª\8en\82Ü\82ç\82È\82¢\82æ\82¤\82É\92\8d\88Ó\82µ\82Ä\82\82¾\82³\82¢\81B\97á\82¦\82Î\81A\83{\83^\83\93\82ÌOnClick\83C\83x\83\93\83g\82ÅSstpCOMMUNICATE\83\81\83\\83b\83h\82ð\97\98\97p\82µ\82½\8fê\8d\87\82Í\81ALastStatus\93\99\82Ì\83v\83\8d\83p\83e\83B\82É\82Í\81A\82»\82ÌOnClick\83C\83x\83\93\83g\93à\82Å\82Ì\82Ý\83A\83N\83Z\83X\82·\82é\82©\81A\82±\82ê\82ç\82Ì\83v\83\8d\83p\83e\83B\82Ì\92l\82ª\95K\97v\82È\82\82È\82é\82Ü\82Å\81ASleep
- := true\82É\82·\82é\82æ\82¤\82É\82µ\82Ü\82·\81B(\8dÄ\91\97\8b@\94\\82ð\88ê\90Ø\8ds\82í\82È\82¢\8fê\8d\87\82Í\8bC\82É\82·\82é\95K\97v\82Í\82 \82è\82Ü\82¹\82ñ)
- <li>\8dÄ\91\97\8b@\94\\82ð\8eg\82Á\82½\8fê\8d\87\81A\8f\87\94Ô\82Í\95Û\8e\9d\82³\82ê\82Ü\82·\81B\82Â\82Ü\82è\81A\82 \82Æ\82©\82ç\91\97\82Á\82½\83\81\83b\83Z\81[\83W\82Í\95K\82¸\90æ\82É\91\97\82Á\82½\83\81\83b\83Z\81[\83W\82æ\82è\8cã\82É\93Í\82«\82Ü\82·\81B\82ª\81ASstpSENDCue\82ð\8eg\82Á\82Ä\91\97\90M\82µ\82½\83\81\83b\83Z\81[\83W\82Æ\83\81\83b\83Z\81[\83W\82Ì\8aÔ\82É\81A\91¼\82ÌSSTP\91Î\89\9e\83\\83t\83g\82â\81A\82±\82Ì\83R\83\93\83|\81[\83l\83\93\83g\8e©\90g\82©\82ç\82Ì\81A\95Ê\82Ì\83\81\83b\83Z\81[\83W\82ª\8b²\82Ü\82Á\82Ä\93Í\82\89Â\94\\90«\82Í\8f\\95ª\82 \82è\82Ü\82·\82Ì\82Å\92\8d\88Ó\82µ\82Ä\82\82¾\82³\82¢\81BQuiet\82ð\95¹\97p\82·\82é\8eè\82à\82 \82è\82Ü\82·\82ª\81B</li>
-</ul>
-
-</body>
-
-</html>
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="ja">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<link rel="stylesheet" type="text/css" href="sakurasuite.css">
-</head>
-
-<body>
-
-<h1>Sakura Component Suite</h1>
-<p>
-\82±\82Ì\83R\83\93\83|\81[\83l\83\93\83g\8fW\82Í\81A\8ef\82©\81ACROW\81ASSP\93\99\82Ì\83L\83\83\83\89\83N\83^\83G\81[\83W\83F\83\93\83g\83\\83t\83g(\88È\89º\81A\82±\82ê\82ç\82Ì\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\81u\8ef\82©\8cÝ\8a·\83x\81[\83X\83E\83F\83A\81v\82Æ\8cÄ\82Ñ\82Ü\82·)\8aÖ\98A\82Ì\83\86\81[\83e\83B\83\8a\83e\83B\93I\82È\93®\8dì\82ð\8eÀ\8c»\82·\82é\83R\83\93\83|\81[\83l\83\93\83g\8fW\82Å\82·\81B\82Ü\82½\81ASSTP
-Bottle ( <a href="http://bottle.mikage.to">http://bottle.mikage.to</a>
-)\97p\82Ì\83R\83\93\83|\81[\83l\83\93\83g\82à\8aÜ\82Ü\82ê\82Ä\82¢\82Ü\82·\81B</p>
-<p>\82©\82È\82è\8eG\91½\82Å\82·\81B</p>
-<h2>\83R\83\93\83|\81[\83l\83\93\83g\88ê\97\97</h2>
-<h3><a href="sakuraseeker.html">TSakuraSeeker</a></h3>
-<p>TSakuraSeeker\82Í\81AFMO\82ð\8eæ\93¾\82µ\82Ä\81A\8aù\91¶\82Ì\8ef\82©\8cÝ\8a·\83V\83X\83e\83\80\82Ì\83v\83\8d\83Z\83X\82ð\94\8c©\82µ\82Ü\82·\81B</p>
-<h3><a href="ssparser.html">TSsParser</a></h3>
-<p>TSsParser\82Í\81A\82³\82\82ç\83X\83N\83\8a\83v\83g\89ð\90Í\97p\82Ì\83p\81[\83T\83R\83\93\83|\81[\83l\83\93\83g\82Å\82·\81B\82³\82\82ç\83X\83N\83\8a\83v\83g\82ð\8d\82\91¬\82É\89ð\90Í\82µ\82Ü\82·\81B</p>
-<h3><a href="ssplaytime.html">TSsPlayTime, TSsPlayTimeParams</a></h3>
-<p>\82±\82ê\82ç\82Ì\83R\83\93\83|\81[\83l\83\93\83g\82É\82æ\82Á\82Ä\81A\82³\82\82ç\83X\83N\83\8a\83v\83g\82Ì\8dÄ\90¶\82É\82©\82©\82é\8e\9e\8aÔ\82ð\97\\91ª\82·\82é\82±\82Æ\82ª\89Â\94\\82Å\82·\81B</p>
-<h3><a href="sakurascriptfountain.html">TSakuraScriptFountain</a></h3>
-<p>TSakuraScriptFountain\82Í\81A\96{\93c\8f\9f\95F\8e\81\8dì\82Ì\83R\83\93\83|\81[\83l\83\93\83g\81ATEditor\97p\82Ì\95¶\8e\9a\97ñ\89ð\90Í\83p\81[\83T(TFountain)\82Å\82·\81B</p>
-<p>TEditor\82¨\82æ\82ÑTSsParser\82Æ\91g\82Ý\8d\87\82í\82¹\82Ä\8eg\82¤\82±\82Æ\82Å\81A\82³\82\82ç\83X\83N\83\8a\83v\83g\82ð\8fu\8aÔ\82É\90F\95ª\82¯\81E\8d\\95¶\8b¦\92²\82µ\82Ä\95\\8e¦\82·\82é\83G\83f\83B\83^\82ð\81A\83R\81[\83h\83\8c\83X\82Å\8eÀ\8c»\82Å\82«\82Ü\82·\81B</p>
-<p>RichEdit\82ð\97\98\97p\82µ\82Ä\8e©\95ª\82Å\95`\89æ\82·\82é\82æ\82è\83_\83\93\83g\83c\82Å\8d\82\91¬\82Å\82·\81B</p>
-<h3><a href="directsstp.html">TDirectSSTP</a></h3>
-<p>TDirectSSTP\82Í\81ADirectSSTP\92Ê\90M\82ð\8ds\82¢\82Ü\82·\81B</p>
-<h3><a href="slpp20.html">TIdSLPP20</a></h3>
-<p>SSTP Bottle \83T\81[\83r\83X\82É\90Ú\91±\82·\82éSLPP\83R\83\93\83|\81[\83l\83\93\83g\82Å\82·\81B</p>
-<h2>\90§\8dì\8aÂ\8b«</h2>
-<p>Borland Delphi Studio 7 Professional</p>
-<p>\82±\82¿\82ç\82Å\83R\83\93\83p\83C\83\8b\82Å\82«\82é\82±\82Æ\82ð\8am\94F\82µ\82Ä\82¢\82é\82Ì\82ÍBorland Delphi 6 Personal\94Å\82Å\82·\81BDelphi 5\82Å\82à\91½\95ª\93®\82\82Æ\8ev\82¢\82Ü\82·\81B</p>
-<h2>\83\89\83C\83Z\83\93\83X</h2>
-<p>\82±\82Ì\83A\81[\83J\83C\83u\82É\8aÜ\82Ü\82ê\82é\82·\82×\82Ä\82Ì\83\\81[\83X\83R\81[\83h\81A\82¨\82æ\82Ñ\83h\83L\83\85\83\81\83\93\83g\82Í\83t\83\8a\81[\83\\83t\83g\83E\83F\83A\82Æ\82µ\82Ü\82·\81B</p>
-<p>
-\83\\81[\83X\83R\81[\83h\8c`\8e®\81E\83o\83C\83i\83\8a\8c`\8e®\82É\82æ\82é\82 \82ç\82ä\82é\97\98\97p\81E\8dÄ\94z\95z\81E\89ü\91¢\81E\8dÄ\83p\83b\83P\81[\83W\83\93\83O\81E\8dÄ\83\89\83C\83Z\83\93\83X\81E\94Ì\94\84\82Í\81A\89ü\95Ï\82Ì\97L\96³\82É\8aÖ\82í\82ç\82¸\81A\88È\89º\82Ì\8fð\8c\8f\82Ì\82à\82Æ\82Å\8ds\82Á\82Ä\82\82¾\82³\82¢\81B</p>
-<ul>
- <li>
- \82·\82×\82Ä\82Í\8c»\8fó\82Ì\82Ü\82Ü\94z\95z\82³\82ê\82é\82à\82Ì\82Å\82 \82è\81A\93®\8dì\82µ\82½\81A\82 \82é\82¢\82Í\93®\8dì\82µ\82È\82©\82Á\82½\8c\8b\89Ê\82É\82æ\82é\81A\95¨\8e¿\93I\81E\90l\93I\81E\93d\8eq\93I\81E\8co\8dÏ\93I\81E\82»\82Ì\91¼\88ê\90Ø\82Ì\94j\91¹\81E\91¹\8aQ\81E\91¹\8e¸\82É\82Â\82¢\82Ä\8c´\8dì\8eÒ(naruto/CANO-Lab)\82Í\89½\82ç\82Ì\90Ó\94C\82ð\95\89\82¢\82Ü\82¹\82ñ\81B</li>
-</ul>
-<p>\8dì\8eÒ\82Í\83T\83|\81[\83g\81E\83o\83O\82Ì\8fC\90³\82È\82Ç\82ð\81A\89Â\94\\82È\82ç\8ds\82¢\82Ü\82·\82ª\8b`\96±\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B</p>
-
-</body>
-
-</html>
\ No newline at end of file
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="ja">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
-<title>\90V\82µ\82¢\83y\81[\83W 0</title>
-<link rel="stylesheet" type="text/css" href="sakurasuite.css">
-</head>
-
-<body>
-
-<h1>TSakuraProcess</h1>
-<h2>\8aT\97v</h2>
-<p>TSakuraSeeker\82Ì\81A\83v\83\8d\83Z\83X\82ð\8eæ\93¾\82·\82é\83v\83\8d\83p\83e\83B\82ª\95Ô\82·\82à\82Ì\82Å\81A\92P\88ê\82Ì\8ef\82©\8cÝ\8a·\83V\83X\83e\83\80\82Ì\83v\83\8d\83Z\83X\82ð\95\\8c»\82µ\82Ü\82·\81B</p>
-<p>TSakuraSeeker\82É\82æ\82Á\82Ä\8e©\93®\93I\82É\8aÇ\97\9d\82³\82ê\82Ü\82·\82Ì\82Å\81ACreate, Free\82µ\82È\82¢\82Å\82\82¾\82³\82¢\81B</p>
-<h2>\8cp\8f³</h2>
-<p>TObject - TSakuraProcess</p>
-<h2>\8eQ\8fÆ</h2>
-<p><a href="sakuraseeker.html">TSakuraSeeker</a></p>
-<h2>\8aÈ\92P\82È\8eg\97p\97á</h2>
-<p><a href="sakuraseeker.html">TSakuraSeeker</a>\8eQ\8fÆ</p>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X - \83v\83\8d\83p\83e\83B</h2>
-<dl>
- <dt>property ProcessID: String</dt>
- <dd>\83v\83\8d\83Z\83XID\82Å\82·\81B\82½\82¾\82µ\81A\93\96\8f\89\82Ì\8ed\97l\82Å\82Í\83v\83\8d\83Z\83X\83n\83\93\83h\83\8b\82ÌMD5\92l\82Å\82·\82ª\81AMateria\88È\8aO\82Ì\91½\83S\81[\83X\83g\91Î\89\9e\8aÂ\8b«SSTP\83T\81[\83o\82Å\82Í\8ag\92£\82³\82ê\82Ä\82¢\82Ü\82·\81B\97v\82·\82é\82É\83S\81[\83X\83g(\83v\83\8d\83Z\83X\82Å\82Í\82È\82)\82²\82Æ\82É\83\86\83j\81[\83N\82Å\82 \82é\89½\82ç\82©\82Ì\95¶\8e\9a\97ñ\92l\82ª\93ü\82Á\82Ä\82¢\82é\81A\82Æ\8dl\82¦\82Ä\82\82¾\82³\82¢\81B<br>
- \83\86\81[\83U\82ª\91ã\93ü\82Í\82Å\82«\82Ü\82·\82ª\82»\82¤\82·\82é\82±\82Æ\82É\88Ó\96¡\82Í\82 \82è\82Ü\82¹\82ñ\81B</dd>
- <dt>property FMOName: String</dt>
- <dd>FMO\8e¯\95Ê\96¼\82Å\82·\81B\8aî\96{\93I\82É\81uSakura\81v\82ª\93ü\82è\82Ü\82·\82ª\81A\91¼\82ÌFMO\82©\82ç\83v\83\8d\83Z\83X\82ð\93Ç\82Ý\8eæ\82Á\82½\8fê\8d\87\82É\82Í\82»\82ê\82ª\93ü\82è\82Ü\82·\81B<code>TSakuraSeeker.FileMappingTarget</code>
- \83v\83\8d\83p\83e\83B\82ð\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B</dd>
- <dt>property HWnd: THandle</dt>
- <dd>\83v\83\8d\83Z\83X\82Ì\83E\83B\83\93\83h\83E\83n\83\93\83h\83\8b\82Å\82·\81B\8c»\8dÝ\82Ì\91½\82\82ÌSSTP\83T\81[\83o\82Ì\8aÂ\8b«\82Å\82Í1\82Â\82Ì\83E\83B\83\93\83h\83E\83n\83\93\83h\83\8b\82Å\91½\90\94\82Ì\83S\81[\83X\83g\82ÌSSTP\82ð\8eó\90M\82·\82é\82±\82Æ\82ª\89Â\94\\82É\82È\82Á\82Ä\82¢\82Ü\82·\82Ì\82Å\81A\82±\82ê\82ð\83L\81[\82É\92l\82ð\8c\9f\8dõ\82·\82é\82æ\82¤\82È\8eÀ\91\95\82Í\8ds\82í\82È\82¢\82Å\82\82¾\82³\82¢\81B</dd>
- <dt>property Name: String</dt>
- <dd>\83S\81[\83X\83g\82Ì\96{\91Ì\91¤(\83X\83R\81[\83v0\91¤)\82Ì\96¼\91O\82Å\82·\81B<code>Data['name']</code> \82Æ\93¯\93\99\82Å\82·\81B<br>
- \83\86\81[\83U\82ª\8f\91\82«\8d\9e\82Ý\82Í\82Å\82«\82Ü\82·\82ª\82»\82¤\82·\82é\88Ó\96¡\82Í\82Ü\82¸\82 \82è\82Ü\82¹\82ñ\81B</dd>
- <dt>property KeroName: String</dt>
- <dd>\83S\81[\83X\83g\82Ì\82¤\82É\82ã\82¤\91¤(\83X\83R\81[\83v1\91¤)\82Ì\96¼\91O\82Å\82·\81B<code>Data['keroname']</code> \82Æ\93¯\93\99\82Å\82·\81B<br>
- \83\86\81[\83U\82ª\8f\91\82«\8d\9e\82Ý\82Í\82Å\82«\82Ü\82·\82ª\82»\82¤\82·\82é\88Ó\96¡\82Í\82Ü\82¸\82 \82è\82Ü\82¹\82ñ\81B</dd>
- <dt>property SetName: String</dt>
- <dd>\96{\91Ì\91¤\82Æ\82¤\82É\82ã\82¤\91¤\82Ì\96¼\91O\82ð\83R\83\93\83}\82Å\8c\8b\8d\87\82µ\82½\82à\82Ì\82ð\95Ô\82µ\82Ü\82·\81B</dd>
- <dt>property Data[Key: String]: String</dt>
- <dd>\83v\83\8d\83Z\83X\82Ì\83G\83\93\83g\83\8a\96¼\82©\82ç\92¼\90Ú\92l\82ð\8eæ\93¾\82µ\82Ü\82·\81B</dd>
- <dt>property Count: integer read GetCount;<br>
- property DataAt[Index: integer]: String<br>
- property KeyAt[Index: integer]: String</dt>
- <dd>\82±\82ê\82ç\82Í\81A\82·\82×\82Ä\82Ì\83G\83\93\83g\83\8a\96¼\82ð\8f\87\94Ô\82É\91\96\8d¸\82µ\82½\82¢\8fê\8d\87\82É\8eg\97p\82Å\82«\82Ü\82·\81B\82»\82ê\82¼\82ê\93Ç\82ñ\82Å\8e\9a\82Ì\82²\82Æ\82\82Å\82·\81B\93Ç\82Ý\8eæ\82è\90ê\97p\83v\83\8d\83p\83e\83B\82Å\82·\81B</dd>
-</dl>
-
-</body>
-
-</html>
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="ja">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
-<title>TSakuraScriptFountain</title>
-<link rel="stylesheet" type="text/css" href="sakurasuite.css">
-</head>
-
-<body>
-
-<h1>TSakuraScriptFountain</h1>
-<h2>\8aT\97v</h2>
-<p><code>TSsParser</code>\82Æ\8b¦\92²\82µ\82Ä\93®\82\81A<code>TEditor</code>\97p\95¶\8e\9a\97ñ\89ð\90Í\83p\81[\83T\82Å\82·\81B</p>
-<p><code>TEditor</code>\82Í\96{\93c\8f\9f\95F\8e\81\8dì\90¬\82Ì\83G\83f\83B\83^\83R\83\93\83|\81[\83l\83\93\83g\82Å\81A\82½\82Æ\82¦\82ÎDelphi\82Ì\83\\81[\83X\83R\81[\83h\83G\83f\83B\83^\95\94\95ª\82Ì\82æ\82¤\82È\82à\82Ì\82ª\8aÈ\92P\82É\8eÀ\91\95\82Å\82«\82Ü\82·\81B\8fÚ\8d×\82Í
-<a href="http://member.nifty.ne.jp/~katsuhiko/">
-http://member.nifty.ne.jp/~katsuhiko/</a> \82ð\8eQ\8fÆ\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<p><code>TSakuraScriptFountain</code>
-\82ð\8eg\82¤\82Æ\81A\8e©\93®\82Å\8d\\95¶\82ª\8b\92²\95\\8e¦\82³\82ê\82é\82³\82\82ç\83X\83N\83\8a\83v\83g\83G\83f\83B\83^\82ª\81A\8aÈ\92P\82É\8eÀ\91\95\82Å\82«\82Ü\82·\81B</p>
-<p>
-\8ae\8eí\82Ì\9ex\82Ì\8eÀ\91\95\82É\82¨\82¢\82Ä\83\86\81[\83U\82ª\97\98\97p\82·\82é\81A\97l\81X\82È\82³\82\82ç\83X\83N\83\8a\83v\83g\8ed\97l\8aO\82Ì\83}\81[\83N\83A\83b\83v\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B(\93K\93\96\82É\82±\82Ì\83R\83\93\83|\81[\83l\83\93\83g\82ð\8cp\8f³\82µ\82Ä\8eg\82¤\95K\97v\82ª\82 \82è\82Ü\82·)</p>
-<h2>\8aî\96{\93I\82È\8eg\82¢\95û</h2>
-<p><code>TSsParser</code>\82ð\83t\83H\81[\83\80\82É\93\\82è\95t\82¯\82Ü\82·\81B\8dÅ\92á\8cÀ\81A<code>MetaPattern</code>,
-<code>TagPattern</code>\82Ì\97¼\95û\82ð\92è\8b`\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B<code>EscapeInvalidMeta,
-LeaveEscape</code>\82Ì\8ae\83v\83\8d\83p\83e\83B\82Ì\90Ý\92è\82Í\81A\82Ç\82Ì\82æ\82¤\82É\82µ\82Ä\82¢\82Ä\82à\96â\91è\82 \82è\82Ü\82¹\82ñ\81B</p>
-<p><code>TSakuraScriptFountain</code>\82ð\83t\83H\81[\83\80\82É\93\\82è\95t\82¯\82Ü\82·\81B\83I\83u\83W\83F\83N\83g\83C\83\93\83X\83y\83N\83^\82Å\81A<code>SsParser</code>\83v\83\8d\83p\83e\83B\82É\81A\90æ\82Ù\82Ç\93\\82è\95t\82¯\82½<code>SsParser</code>\82ð\91I\91ð\82µ\82Ü\82·\81B\82Ü\82½\81A\90F\82â\83t\83H\83\93\83g\82É\8aÖ\82·\82é\8ae\8eí\83v\83\8d\83p\83e\83B\82ð\95Ò\8fW\82µ\82Ü\82·\81B</p>
-<p><code>TEditor</code>\82ð\83t\83H\81[\83\80\82É\93\\82è\95t\82¯\82Ü\82·\81B\83I\83u\83W\83F\83N\83g\83C\83\93\83X\83y\83N\83^\82Å\81A<code>Fountain</code>\83v\83\8d\83p\83e\83B\82É\81A\90æ\82Ù\82Ç\93\\82è\95t\82¯\82½<code>SakuraScriptFountain</code>\82ð\91I\91ð\82µ\82Ü\82·\81B</p>
-<p>\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ð\8eÀ\8ds\82µ\82Ü\82·\81B</p>
-<h2>\92\8d\88Ó</h2>
-<p><code>TSsParser</code>\82ð\93à\95\94\82Å\97\98\97p\82µ\82Ü\82·\82ª\81A<code>InputString</code>\82È\82Ç\82Ì\92\86\90g\82Í\95Ï\8dX\82³\82ê\82Ü\82¹\82ñ\81B\91¼\82Ì\96Ú\93I\82Å\83t\83H\81[\83\80\82É
-<code>TSsParser</code> \82ð\93\\82è\95t\82¯\82Ä\97\98\97p\82µ\82Ä\82¢\82é\8fê\8d\87\82É\82Í\81A<code>TEditor.Fountain</code>
-\82Æ\82µ\82Ä\82»\82ê\82ð\8eQ\8fÆ\82µ\82Ä\82à\81A\8aù\91¶\82Ì\83R\81[\83h\82Ö\82Ì\89e\8b¿\82Í\82 \82è\82Ü\82¹\82ñ\81B</p>
-<p><code>SakuraScriptFountain</code>\82Ì\83^\83O\82Ì\89ð\8eß\82Í<code>TSsParser</code>\82É\88Ë\91¶\82µ\82Ü\82·\81B<code>TagPattern</code>\82ð\82ë\82\82É\90Ý\92è\82¹\82¸\81A\h\82â\u\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82È\82¢\81A\82Æ\82¢\82Á\82½\8fó\8bµ\82Ì\82Ü\82Ü\82Å\82Í\88ê\90Ø\82Ì\90F\95ª\82¯\82ª\82³\82ê\82Ü\82¹\82ñ\81B</p>
-<h3>\_s\83^\83O\8eü\82è\82É\82Â\82¢\82Ä</h3>
-<p><code>TSakuraScriptFountain</code>\82Å\82Í\81A<code>\_s</code>\83^\83O\82Í\81u\88Í\82Þ\83^\83O\81v\82Å\82 \82é\82Æ\89ð\8eß\82µ\82Ä\82¨\82è\81A<code>\_s</code>\82É\82æ\82é\83V\83\93\83N\83\8d\83i\83C\83Y\83Z\83b\83V\83\87\83\93\82Í\81A<code>\0</code>\82â<code>\1</code>\82É\82æ\82é\83X\83R\81[\83v\82æ\82è\97D\90æ\8f\87\88Ê\82ª\8d\82\82
-\81A\82©\82Â\93Æ\97§\82µ\82½\88ê\8eí\82Ì\8fó\91Ô\82Å\82 \82é\81A\82Æ\89ð\8eß\82µ\82Ü\82·\81B\82Â\82Ü\82è\81A\83V\83\93\83N\83\8d\83i\83C\83Y\83Z\83b\83V\83\87\83\93\8fó\91Ô\82Í\81A<code>\0</code>\82â<code>\1</code>\82Å\82Í\89ð\8f\9c\82³\82ê\82¸\81A\82Ü\82½\_s\93à\82É\82¨\82¢\82Ä<code>\0</code>\82â<code>\1</code>\83^\83O\82ª\91¶\8dÝ\82µ\82½\8fê\8d\87\81A\82»\82ê\82ç\82Í\92P\8f\83\82É\81u\83V\83\93\83N\83\8d\83i\83C\83Y\83Z\83b\83V\83\87\83\93\82ð\8fo\82½\8cã\82Ì\83X\83R\81[\83v\82ð\8c\88\92è\82·\82é\81v\82¾\82¯\82Å\82·\81B</p>
-<p>\82±\82Ì\89ð\8eß\82Í2003\94N6\8c\8e\8c»\8dÝ\82Ìmateria\81ASSP\81ACROW(\82Æ\81A\91¼\82Ì\91½\82\82ÌSakuraScript\8f\88\97\9d\8cn)\82Ì\8ae\8dÅ\90V\94Å\82É\8f\80\8b\92\82Æ\82È\82Á\82Ä\82¢\82Ü\82·\82ª\81A\88ê\95\94\82Ì\8cÃ\82¢\8f\88\97\9d\8cn\82Å\82Í\81A<code>\0</code>\82â<code>\1</code>\82É\82æ\82Á\82Ä\83V\83\93\83N\83\8d\83i\83C\83Y\83Z\83b\83V\83\87\83\93\82Ì\8fó\91Ô\82É\89e\8b¿\82ð\97^\82¦\82é\8b\93\93®\82ð\82µ\82Ä\82¢\82é\82à\82Ì\82ª\82 \82è\82Ü\82·\81B</p>
-<p>\82Ü\82½\81A2003\94N6\8c\8e\8c»\8dÝ\8dÅ\90V\94Å\82Å\82 \82émateria583\82Å\82Í\81A\83V\83\93\83N\83\8d\83i\83C\83Y\83Z\83b\83V\83\87\83\93\92\86\82É<code>\0</code>\82â<code>\1</code>\82ª\8c»\82ê\82½\8fê\8d\87\82É\8cë\93®\8dì\82·\82é\81A\83V\83\93\83N\83\8d\83i\83C\83Y\83Z\83b\83V\83\87\83\93\82Ì\96¾\8e¦\93I\82È\89ð\8f\9c\8cã\82É\83X\83R\81[\83v\82ª\95s\92è\82Æ\82È\82é\81A\82Æ\82¢\82Á\82½\83o\83O\82ª\91¶\8dÝ\82µ\82Ü\82·\81B(\82±\82ê\82ç\82Í\96¾\82ç\82©\82É\83o\83O\82Æ\8ev\82í\82ê\82é\8b\93\93®\82Å\82 \82é\82½\82ß<code>TSakuraScriptFountain</code>\82Å\82±\82ê\82ç\82Ì\93®\8dì\82ð\8dÄ\8c»\82·\82é\97\\92è\82Í\82 \82è\82Ü\82¹\82ñ)</p>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X - \83v\83\8d\83p\83e\83B</h2>
-<dl>
- <dt>property Scope0Color: TFountainColor read FScope0Color write
- SetScope0Color;<br>
- property Scope1Color: TFountainColor read FScope1Color write SetScope1Color;</dt>
- <dd>
-\82»\82ê\82¼\82ê\81A\83X\83R\81[\83v0(\96{\91Ì\91¤;\h\91¤;\0\91¤)\81A\83X\83R\81[\83v1(\82¤\82É\82ã\82¤\91¤;\u\91¤;\1\91¤)\82Å\82Ì\89ï\98b\95¶\8e\9a\97ñ\82Ì\90F\82ð\8ew\92è\82µ\82Ü\82·\81B
-
- </dd>
- <dt>property TagColor: TFountainColor read FTagColor write SetTagColor;</dt>
- <dd>\83^\83O\82Ì\90F\82ð\8ew\92è\82µ\82Ü\82·</dd>
- <dt>property TagErrorColor: TFountainColor read FTagErrorColor write
- SetTagErrorColor;</dt>
- <dd>\83^\83O\83G\83\89\81[\82Æ\94»\92f\82³\82ê\82½\8fê\8d\87\82Ì\90F\82ð\8ew\92è\82µ\82Ü\82·</dd>
- <dt>property MetaWordColor: TFountainColor read FMetaWordColor write
- SetMetaWordColor;</dt>
- <dd>\83\81\83^\95¶\8e\9a\97ñ\82Ì\90F\82ð\8ew\92è\82µ\82Ü\82·</dd>
- <dt>property SynchronizedColor: TFountainColor read FSynchronizedColor write
- SetSynchronizedColor;</dt>
- <dd>\83V\83\93\83N\83\8d\83i\83C\83Y\83h\83Z\83b\83V\83\87\83\93(\_s)\92\86\82Ì\90F\82ð\8ew\92è\82µ\82Ü\82·</dd>
- <dt>property SakuraScriptParser: TSsParser read FSakuraScriptParser write
- SetSakuraScriptParser;</dt>
- <dd>SsParser\82Ì\83C\83\93\83X\83^\83\93\83X\82ð\8ew\92è\82µ\82Ü\82·\81B\82±\82Ì\8ew\92è\82Í\81A\90³\82µ\82\83X\83N\83\8a\83v\83g\82ð\89ð\8eß\82³\82¹\82é\82½\82ß\82É\95K\90{\82Å\82·\81B</dd>
- <dt>property ChangeScopeBy01: boolean read FChangeScopeBy01 write
- SetChangeScopeBy01 default true;</dt>
- <dd>\0, \1\83^\83O\82ð\83X\83R\81[\83v\82Ì\95Ï\8dX\96½\97ß\82Æ\89ð\8eß\82µ\81A\90F\95ª\82¯\82ð\8ds\82¤\82©\82Ç\82¤\82©\82ð\8ew\92è\82µ\82Ü\82·\81B\83f\83t\83H\83\8b\83g\82Å\82Ítrue\82Å\82·\81B(\81u\89½\82©(\89¼)\81v\8e\9e\91ã
- \82Ì\8cÃ\82¢\83X\83N\83\8a\83v\83g\8ed\97l\82Å\82Í\81A\82±\82ê\82ç\82Ì\83^\83O\82ª\91S\82\95Ê\82Ì\88Ó\96¡\82ð\8e\9d\82Â\96½\97ß\82Å\82 \82Á\82½\82±\82Æ\82ð\94O\82Ì\82½\82ß\8dl\97¶\82µ\82Ä\82\82¾\82³\82¢)</dd>
- <dt>property ChangeScopeByHU: boolean read FChangeScopeByHU write
- SetChangeScopeByHU default true;</dt>
- <dd>\h, \u\83^\83O\82ð\83X\83R\81[\83v\82Ì\95Ï\8dX\96½\97ß\82Æ\89ð\8eß\82µ\81A\90F\95ª\82¯\82ð\8ds\82¤\82©\82Ç\82¤\82©\82ð\8ew\92è\82µ\82Ü\82·\81B\83f\83t\83H\83\8b\83g\82Å\82Ítrue\82Å\82·\81B(\8c»\8dÝ\82Í\8c´\91¥\82Æ\82µ\82Ä\0,
- \1\82ð\91ã\82í\82è\82É\8eg\97p\82·\82é\82±\82Æ\82É\82È\82Á\82Ä\82¢\82é\82Ì\82Å\81A\89\93\82¢\8f«\97\88\82É\82±\82ê\82ç\82Ì\83}\81[\83N\83A\83b\83v\82ð\8c»\8dÝ\82Ì\88Ó\96¡\82Å\97\9d\89ð\82µ\82È\82¢\83v\83\8d\83O\83\89\83\80\82ª\8fo\8c»\82·\82é\82©\82à\82µ\82ê\82È\82¢\82±\82Æ\82ð\94O\82Ì\82½\82ß\8dl\97¶\82µ\82Ä\82\82¾\82³\82¢)</dd>
- <dt>property ProcessSync: boolean read FProcessSync write SetProcessSync
- default true;</dt>
- <dd>\_s\83^\83O\82ð\83V\83\93\83N\83\8d\83i\83C\83Y\83Z\83b\83V\83\87\83\93\82É\93ü\82é/\8fo\82é\82½\82ß\82Ì\95¶\8e\9a\97ñ\82Æ\89ð\8eß\82µ\81A\90F\95ª\82¯\82ð\8ds\82¤\82©\82Ç\82¤\82©\82ð\8ew\92è\82µ\82Ü\82·\81B<br>
- false\82Ì\8fê\8d\87\82Í\83V\83\93\83N\83\8d\83i\83C\83Y\83Z\83b\83V\83\87\83\93\82ð\8dl\97¶\82µ\82Ü\82¹\82ñ\81B</dd>
-</dl>
-
-</body>
-
-</html>
\ No newline at end of file
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="ja">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
-<title>TSakuraSeeker</title>
-<link rel="stylesheet" type="text/css" href="sakurasuite.css">
-</head>
-
-<body>
-
-<h1>TSakuraSeeker</h1>
-<h2>\8aT\97v</h2>
-<p>\8ef\82©\8cÝ\8a·\83V\83X\83e\83\80\82ÌFile-mapping Object(\92Ê\8fÌFMO)\82ð\97\98\97p\82µ\82Ä\81A\8c»\8dÝ\82Ì\83\8d\81[\83J\83\8b\83}\83V\83\93\82Å\8bN\93®\82µ\82Ä\82¢\82é\8ef\82©\8cÝ\8a·\83V\83X\83e\83\80\82Ì\8fî\95ñ\82ð\8eæ\93¾\82µ\82Ü\82·\81B</p>
-<p>2003/04 \82æ\82è\81A'SakuraFMO'\82Ì\83~\83\85\81[\83e\83b\83N\83X\83I\83u\83W\83F\83N\83g\82É\82æ\82é\81AFMO\93¯\8e\9e\83A\83N\83Z\83X\82Ì\83u\83\8d\83b\83N\82É\91Î\89\9e\82µ\81A\88À\91S\90«\82ª\91\9d\82µ\82Ä\82¢\82Ü\82·\81B</p>
-<p>2003\94N04\8c\8e\8c»\8dÝ\82Å\82±\82Ì'SakuraFMO'\82É\82æ\82é\83V\83\93\83N\83\8d\83i\83C\83[\81[\83V\83\87\83\93\82É\91Î\89\9e\82µ\82Ä\82¢\82é\8ef\82©\8aÖ\98A\83\\83t\83g\83E\83F\83A\82Í\81A</p>
-<ul>
- <li>CROW</li>
- <li>SSP</li>
- <li>BBC</li>
- <li>SSSB</li>
- <li>SSTP-Viewer</li>
- <li>SSTP Bottle Client</li>
-</ul>
-<p>\82Å\82·\81B</p>
-<p>\82±\82Ì\83R\83\93\83|\81[\83l\83\93\83g\82Í\81A\8eæ\93¾\82µ\82½HWND\82É\91Î\82µ\82Ä\81A<code>TDirectSSTP</code>\82Æ\95¹\82¹\82Ä\8eg\82¤\82Æ\82æ\82è\8cø\89Ê\82ª\82 \82è\82Ü\82·\81B</p>
-<p>"Sakura"\88È\8aO\82ÌFMO\82ð\93Ç\82Ý\8eæ\82é\8b@\94\\82ª\82 \82è\82Ü\82·\81B</p>
-<p>SakuraSeeker\82ÍFMO\90æ\93ª4\83o\83C\83g\82É\92è\8b`\82³\82ê\82Ä\82¢\82éFMO\83T\83C\83Y\82ð\90³\82µ\82\89ð\8eß\82µ\82Ü\82·(\94C\88Ó\82Ì\83T\83C\83Y\82ÌFMO\82ª\88µ\82¦\82Ü\82·)\81B</p>
-<h2>\8cp\8f³</h2>
-<p><code>TObject</code> - <code>TPersistent</code> - <code>TComponent</code> -
-<code>TSakuraSeeker</code></p>
-<h2>\8eQ\8fÆ</h2>
-<p>
-<a href="file:///C:/Documents%20and%20Settings/naruto/My%20Documents/dpr/dpk%20SakuraSuite/manual/sakuraprocess.html">
-TSakuraProcess</a></p>
-<h2>\8eQ\8dlURL</h2>
-<p>TSakuraSeeker\82Í\82±\82ê\82ç\82Ì\8ed\97l\82ð\8eQ\8dl\82É\82µ\82Ä\90Ý\8cv\82³\82ê\82Ä\82¢\82Ü\82·\81B</p>
-<p>\8ef\82©\81c\83\81\83\82\83\8a\83I\83u\83W\83F\83N\83g<br>
-<a href="http://sakura.wondernet.tv/objects.html">
-http://sakura.wondernet.tv/objects.html</a></p>
-<p>SSP\8bZ\8fp\8e\91\97¿\81cFMO\8aÖ\98A\82Ì\8e\91\97¿<br>
-<a href="http://ssp.shillest.net/docs/fmo.html">
-http://ssp.shillest.net/docs/fmo.html</a></p>
-<h2>\8aî\96{\82Ì\8eg\82¢\95û</h2>
-<h3>\8bN\93®\92\86\82Ì\83S\81[\83X\83g\96¼\82ð\97ñ\8b\93\82·\82é</h3>
-<p><code>procedure Button1Click(Sender: TObject);<br>
-var i: integer;<br>
-begin<br>
- with SakuraSeeker1 do<br>
- begin<br>
- BeginDetect;<br>
- for i := 0 to Count-1 do<br>
- ShowMessage('Name:' + Process[i].SetName + #13#10
-+<br>
- 'HWND:'+ IntToStr(Process[i].HWnd));<br>
- end;<br>
-end;</code></p>
-<h3>\81u\82³\82\82ç\81v\82Æ\82¢\82¤\96¼\91O\82Ì\83S\81[\83X\83g\82ð\8c\9f\8dõ\82µ\82Ä\83E\83B\83\93\83h\83E\83n\83\93\83h\83\8b(DirectSSTP\97p)\82ð\93¾\82é</h3>
-<p><code>with SakuraSeeker1 do<br>
-begin<br>
- BeginDetect;<br>
- if ProcessByName['\82³\82\82ç'] <> nil then<br>
- Handle := ProcessByName['\82³\82\82ç'].HWnd;<br>
-end;</code></p>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83\81\83\\83b\83h</h2>
-<dl>
- <dt>procedure BeginDetect;</dt>
- <dd>\8dÅ\90V\82ÌFMO\82É\83A\83N\83Z\83X\82µ\82Ä\92\86\90g\82ð\89ð\90Í\82µ\81A\8fó\91Ô\82ð\95Û\8e\9d\82µ\82Ü\82·\81B<code>Count</code>\83v\83\8d\83p\83e\83B\82ª\8dX\90V\82³\82ê\82Ü\82·\81B<br>
- \8dÅ\90V\82ÌFMO\8fó\91Ô\82ª\95K\97v\82È\82Æ\82«\81A\92¼\91O\82É\8cÄ\82ñ\82Å\82\82¾\82³\82¢\81B\82½\82¾\82µFMO\82Í\8e\9e\82É100KB\92´\82É\92B\82·\82é\82±\82Æ\82à\82 \82è\82Ü\82·\82Ì\82Å\81A\82 \82Ü\82è\95p\94É\82É\8cÄ\82Ñ\82·\82¬\82é\82Ì\82à\8dl\82¦\95¨\82Å\82·\81B</dd>
- <dt>function KillFMO(const TargetFMOName, TargetID: String): boolean;</dt>
- <dd>FMO\82©\82ç\8ew\92è\82Ì\83v\83\8d\83Z\83XID\82ð\8e\9d\82Â\82·\82×\82Ä\82Ì\83G\83\93\83g\83\8a\82ð\8dí\8f\9c\82µ\82Ü\82·\81BMutex\83I\83u\83W\83F\83N\83g\82É\82æ\82é\94r\91¼\90§\8cä\82Ì\96â\91è\82É\91Î\89\9e\82µ\82Ä\82¢\82Ü\82·\81B<br>
- <code>TargetFMOName</code>\82É\82ÍFMO\8e¯\95Ê\96¼(\92Ê\8fí\82Í\81uSakura\81v)\82ð\81A<code>TargetID</code>\82É\82Í\83v\83\8d\83Z\83XID(MD5\92l\82È\82Ç)\82ð\93n\82µ\82Ü\82·\81B<br>
- \83G\83\93\83g\83\8a\82ð\8dí\8f\9c\82µ\82½\8fê\8d\87\82Étrue\82ª\95Ô\82è\82Ü\82·\81B\8ew\92è\82µ\82½\82à\82Ì\82ª\91¶\8dÝ\82µ\82È\82¢\8fê\8d\87\82â\81A\82»\82Ì\91¼\82Ì\83G\83\89\81[\82ª\94\90¶\82µ\82½\8fê\8d\87\82É\82Ífalse\82ª\95Ô\82è\82Ü\82·\81B</dd>
-</dl>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83v\83\8d\83p\83e\83B</h2>
-<dl>
- <dt>property Count: integer;</dt>
- <dd>\8eÀ\8ds\8e\9e\82Ì\82Ý\81A\93Ç\82Ý\8eæ\82è\90ê\97p\82Å\82·\81B<code>BeginDetect</code>\82Ì\8cã\82É\88Ó\96¡\82ð\8e\9d\82¿\82Ü\82·\81B\94\8c©\82³\82ê\82½\83v\83\8d\83Z\83X\82Ì\90\94\82ð\8eæ\93¾\82µ\82Ü\82·\81B<code>Process</code>\83v\83\8d\83p\83e\83B\82É\83A\83N\83Z\83X\82·\82é\8fê\8d\87\82Ì\93Y\82¦\8e\9a\82Ì\8fã\8cÀ\82Æ\82µ\82Ä\8eg\97p\82µ\82Ü\82·\81B</dd>
- <dt>property Process[Index: integer]: <a href="sakuraprocess.html">
- TSakuraProcess</a>; default;</dt>
- <dd>\8eÀ\8ds\8e\9e\82Ì\82Ý\81A\93Ç\82Ý\8eæ\82è\90ê\97p\82Å\82·\81B\8c©\82Â\82©\82Á\82½\8f\87\82É<code>TSakuraProcess</code>\82Ì\83C\83\93\83X\83^\83\93\83X\82ð\95Ô\82µ\82Ü\82·\81B</dd>
- <dt>property ProcessByName[Name: String]: <a href="sakuraprocess.html">
- TSakuraProcess</a>;<br>
- property ProcessBySetName[Name: String]: <a href="sakuraprocess.html">
- TSakuraProcess</a>;<br>
- property ProcessByID[ID: String]: <a href="sakuraprocess.html">TSakuraProcess</a>;</dt>
- <dd>\8eÀ\8ds\8e\9e\82Ì\82Ý\81A\93Ç\82Ý\8eæ\82è\90ê\97p\82Å\82·\81B\82»\82ê\82¼\82ê\81A<code>TSakuraProcess</code>\82Ì\83C\83\93\83X\83^\83\93\83X\82ð\8c\9f\8dõ\82µ\82Ä\95Ô\82µ\82Ü\82·\81B<br>
- <code>ProcessByName</code>\82Íname\82ð\83L\81[\82É\8c\9f\8dõ\82µ\82Ü\82·(\97á\81u\82³\82\82ç\81v)\81B\93¯\82¶\96¼\91O\82Ì\82à\82Ì\82ª2\82Â\88È\8fã\82 \82é\8fê\8d\87\82É\82Í\8dÅ\8f\89\82É\8c©\82Â\82©\82Á\82½\82à\82Ì\82ª\95Ô\82è\82Ü\82·\81B<br>
- <code>ProcessBySetName</code>\82Íname,keroname\82Ì\91g\82ð\83L\81[\82É\82µ\82Ü\82·\81B\83R\83\93\83}\82Å\8bæ\90Ø\82è\82Ü\82·(\97á\81u\82³\82\82ç,\82¤\82É\82ã\82¤\81v)\81B\93¯\82¶\96¼\91O\82Ì\82à\82Ì\82ª2\82Â\88È\8fã\82 \82é\8fê\8d\87\82É\82Í\8dÅ\8f\89\82É\8c©\82Â\82©\82Á\82½\82à\82Ì\82ª\95Ô\82è\82Ü\82·\81B<br>
- <code>ProcessByID</code>\82Í\83v\83\8d\83Z\83XID\82ð\83L\81[\82É\82µ\82Ü\82·\81B(\96{\97\88\82Ì\8ed\97l\82Å\82ÍMD5\92l\82Å\82·\82ª\81A\89½\82ç\82©\82Ì\83\86\83j\81[\83N\82È\95¶\8e\9a\97ñ\82ª\93ü\82è\82Ü\82·)</dd>
- <dt>property AutoDetect: boolean;</dt>
- <dd>\83R\83\93\83|\81[\83l\83\93\83g\82Ì\90¶\90¬\8e\9e\82É\8e©\93®\93I\82É<code>BeginDetect</code>\82·\82é\82©\82Ç\82¤\82©\82ð\90Ý\92è\82µ\82Ü\82·\81B</dd>
- <dt>property FileMappingTarget: TStrings;</dt>
- <dd>FMO\8e¯\95Ê\96¼\82ð\90Ý\92è\82µ\82Ü\82·\81B\83f\83t\83H\83\8b\83g\82Í\81uSakura\81v\82Å\82·\81B\95¡\90\94\82Ì\8e¯\95Ê\96¼\82ð\97ñ\8b\93\82·\82é\82±\82Æ\82ª\82Å\81A\82»\82Ì\8fê\8d\87\82É\82Í<code>BeginDetect</code>\82Å\82·\82×\82Ä\82ª\8f\87\82É\89ð\90Í\82³\82ê\82Ü\82·\81B</dd>
-</dl>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83C\83x\83\93\83g</h2>
-<dl>
- <dt>property OnGetMutexName: TSakuraSeekerGetMutexNameEvent;</dt>
- <dd><code>TSakuraSeekerGetMutexNameEvent = procedure (Sender: TObject; var
- Name: String) of object;</code><br>
- \94r\91¼\90§\8cä\97p\82Ì\83~\83\85\81[\83e\83b\83N\83X\83I\83u\83W\83F\83N\83g\82Ì\96¼\91O\82ð\83J\83X\83^\83}\83C\83Y\82·\82é\82½\82ß\82Ì\83C\83x\83\93\83g\82Å\82·\81B<code>Name</code>\83p\83\89\83\81\81[\83^\82É\81A\82±\82ê\82©\82ç\89ð\90Í\82µ\82æ\82¤\82Æ\82·\82éFMO\82Ì\8e¯\95Ê\96¼\82ª\93ü\82Á\82Ä\82¢\82é\82Ì\82Å(<code>FileMappingTarget</code>\82ð\83J\83X\83^\83}\83C\83Y\82µ\82È\82¢\8cÀ\82è\82Í\81uSakura\81v\82Å\82·)\81A\82»\82ÌFMO\82ð\95Û\8cì\82·\82é\82½\82ß\82ÌMutex\8e¯\95Ê\96¼\82ð\81AName\82É\91ã\93ü\82µ\82Ä\8fI\97¹\82µ\82Ä\82\82¾\82³\82¢(\8aî\96{\93I\82É\82Í\81uSakuraFMO\81v)\81B\82±\82Ì\83C\83x\83\93\83g\82ð\8ew\92è\82µ\82È\82¢\8fê\8d\87\82Í\81A\81uSakuraFMO\81v\82Æ\82¢\82¤\82æ\82¤\82É\81AFMO\8e¯\95Ê\96¼\82É\81uFMO\81v\82ª\95t\82¢\82½\82à\82Ì\82ðMutex\8e¯\95Ê\96¼\82Æ\82µ\82Ä\97\98\97p\82µ\82Ü\82·(\95W\8f\80\82Ì\93®\8dì\82Å\82·)\81B<br>
- \88ê\89\9e\83C\83x\83\93\83g\82Æ\82µ\82Ä\8eÀ\91\95\82µ\82Ä\82 \82è\82Ü\82·\82ª\81A\82±\82ê\82ð\83J\83X\83^\83}\83C\83Y\82·\82é\82Æ\81AMutex\82ð\97\98\97p\82·\82é\88Ó\96¡\8e©\91Ì\82ª\82È\82\82È\82è\82Ü\82·\82Ì\82Å\81A\96{\93\96\82É\88Ó\96¡\82ª\95ª\82©\82Á\82Ä\82¢\82Ä\81A\95K\97v\82ª\82 \82é\8fê\8d\87\82Ì\82Ý\92è\8b`\82µ\82Ä\82\82¾\82³\82¢\81B</dd>
- <dt>property OnAfterDetection: TNotifyEvent;</dt>
- <dd><code>BeginDetect</code>\8fI\97¹\8cã\82É\8cÄ\82Î\82ê\82Ü\82·\81B</dd>
- <dt>property OnDetectResultChanged: TNotifyEvent;</dt>
- <dd><code>BeginDetect</code>\82Ì\8cã\81A\82»\82Ì\89ð\90Í\8c\8b\89Ê\82ª\91O\89ñ\82Ì\8c\8b\89Ê\82Æ\88á\82Á\82Ä\82¢\82½\8fê\8d\87\82É\8cÄ\82Î\82ê\82Ü\82·\81B\82±\82Ì\83C\83x\83\93\83g\82É\89\9e\82¶\82Ä\81A\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\83R\83\93\83g\83\8d\81[\83\8b\82ð\8f\91\82«\8a·\82¦\82½\82è\81A\83\86\81[\83U\82É\83v\83\8d\83Z\83X\82Ì\8bN\93®\81E\8fI\97¹\82ð\92Ê\92m\82µ\82½\82è\82·\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B<br>
- <code>FileMappingTarget</code>\82Å\8ew\92è\82³\82ê\82é\82¢\82¸\82ê\82©\82ÌFMO\82Ì\92\86\90g\82ª1\83o\83C\83g\82Å\82à\95Ï\82í\82Á\82Ä\82¢\82½\8fê\8d\87\82É\8cÄ\82Î\82ê\82é\82±\82Æ\82É\92\8d\88Ó\82µ\82Ä\82\82¾\82³\82¢\81B\83T\81[\83t\83B\83X\94Ô\8d\86\82ð\96\88\95b\82Ì\82æ\82¤\82ÉFMO\82É\93o\98^\82·\82é\83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ª\82 \82è\82Ü\82·\82Ì\82Å\81A\83v\83\8d\83Z\83X\82Ì\90\94\82â\8bN\93®\82µ\82Ä\82¢\82é\83S\81[\83X\83g\82É\91S\82\95Ï\89»\82ª\82È\82\82Ä\82à\82±\82ê\82ª\8cÄ\82Î\82ê\82é\82±\82Æ\82ª\82 \82è\82Ü\82·\81B</dd>
-</dl>
-<h2>\89ü\94Å\97\9a\97ð</h2>
-<dl>
- <dt>2003/04/18</dt>
- <dd>Mutex\83I\83u\83W\83F\83N\83g\82É\82æ\82é\81AFMO\82Ì\93¯\8e\9e\83A\83N\83Z\83X\94r\91¼\90§\8cä\81B</dd>
-</dl>
-
-</body>
-
-</html>
+++ /dev/null
-body { background-color: white; margin-left: 2em; font-family: monospace; }
-p { font-size: 10.5pt; margin-top: 0.5em; margin-bottom: 0.5em; }
-li, dd, dt, td, th { font-size: 10.5pt; }
-dt { font-weight: bolder; margin-top: 1em; margin-bottom: 0.3em; }
-h1 { text-align: center; }
-h2 { color: navy; text-decoration: underline; margin-left: -1em; }
-h3 { color: navy; margin-left: -1em;}
-
-code { color: green; font-size: 100%; }
-
-strong { color: red; text-decoration: underline; font-weight: bolder; }
-em { color: red; font-style: normal;}
\ No newline at end of file
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="ja">
-<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>\90V\82µ\82¢\83y\81[\83W 1</title>
-<link rel="stylesheet" type="text/css" href="sakurasuite.css">
-</head>
-
-<body>
-
-<h1>TIdSlpp20</h1>
-<h2>\8aT\97v</h2>
-
-<p>SSTP Bottle\83T\81[\83r\83X(http://bottle.mikage.to/)\82É\90Ú\91±\82µ\82Ä\83\81\83b\83Z\81[\83W\82ð\8eó\90M\82·\82é\82½\82ß\82Ì\83R\83\93\83|\81[\83l\83\93\83g\82Å\82·\81B</p>
-
-<p>SLPP/2.0\83v\83\8d\83g\83R\83\8b\82É\91Î\89\9e\82µ\82Ä\82¢\82Ü\82·\81B</p>
-
-<p>\82½\82¾\82µSSTP Bottle\83T\81[\83r\83X\82Í\81A\83\81\83b\83Z\81[\83W\82ð\8eó\90M\82·\82é\82½\82ß\82Ì\90Ú\91±(\89i\91±\93I\82ÈSLPP/2.0)\82Æ\81A\83N\83\89\83C\83A\83\93\83g\91¤\82©\82ç\83R\83}\83\93\83h\82ð\91\97\90M\82·\82é\82½\82ß\82Ì\90Ú\91±(\92f\91±\93I\82È\81A\92P\82È\82éHTTP)\82Ì2\8eí\97Þ\82©\82ç\82È\82è\82Ü\82·\82Ì\82Å\81A\82±\82Ì\83R\83\93\83|\81[\83l\83\93\83g\92P\91Ì\82Å\82Ì\90Ú\91±\82Í\82Å\82«\82Ü\82¹\82ñ\81B</p>
-
-<p>SSTP Bottle\82Ì\8ed\97l\8fÚ\8d×\82É\82Â\82¢\82Ä\82Í\81A\8cö\8e®\83T\83C\83g\82Ì\8ed\97l\8f\91\83y\81[\83W\82ð\82²\97\97\82\82¾\82³\82¢\81B</p>
-
-</body>
-
-</html>
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="ja">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
-<title>\90V\82µ\82¢\83y\81[\83W 0</title>
-<link rel="stylesheet" type="text/css" href="sakurasuite.css">
-</head>
-
-<body>
-
-<h1>TSsParser</h1>
-<h2>\8aT\97v</h2>
-<p>
-\81u\82³\82\82ç\83X\83N\83\8a\83v\83g\81v\82Ì\91½\8b@\94\\83p\81[\83T\8b@\94\\82ð\8e\9d\82Â\94ñ\83r\83W\83\85\83A\83\8b\83R\83\93\83|\81[\83l\83\93\83g\82Å\82·\81B\92P\88ê\8ds\82Ì\82³\82\82ç\83X\83N\83\8a\83v\83g\82ð\8f\88\97\9d\82µ\82Ü\82·\81B\82Â\82Ü\82è\93T\8c^\93I\82É\82Í\t\82©\82ç\8en\82Ü\82è\e\82Å\8fI\82í\82é\81A1\8ds\82Ì\83X\83N\83\8a\83v\83g\82Å\82·\81BEntry\82È\82Ç\82ª\97\8d\82ñ\82¾\95¡\90\94\8ds\83X\83N\83\8a\83v\83g\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\82ª\81A\95â\8f\95\82Æ\82µ\82Ä\82Í\8eg\82¦\82Ü\82·\81B</p>
-<ul>
- <li>\93Æ\8e©\82ÌSSTP\83T\81[\83o\82ð\8d\\92z\82·\82é\8fê\8d\87\82Ì\95â\8f\95</li>
- <li>\82³\82\82ç\83X\83N\83\8a\83v\83g\82Ì\83G\83f\83B\83^\8dì\90¬\82Ì\82½\82ß\82Ì\95â\8f\95(\90F\95ª\82¯\81A\83^\83O\83`\83F\83b\83N\81Aetc...)</li>
-</ul>
-<p>\82Æ\82¢\82Á\82½\97p\93r\82Ì\97¼\95û\82É\8eg\82¦\82é\82æ\82¤\90Ý\8cv\82³\82ê\82Ä\82¢\82Ü\82·\81B\82Ü\82½\81A\83^\83O\82Ì\83p\83^\81[\83\93\82É\82Â\82¢\82Ä\82Í\8a®\91S\82É\83J\83X\83^\83}\83C\83Y\82ª\89Â\94\\82Å\82·\81B</p>
-<h2>\8aî\96{\93I\82È\8eg\82¢\95û</h2>
-<p><code>TagPattern</code>, <code>MetaPattern</code>\83v\83\8d\83p\83e\83B\82É\81A\82³\82\82ç\83X\83N\83\8a\83v\83g\82Ì\89ð\90Í\82Ì\8aî\8f\80\82Æ\82È\82é\83p\83^\81[\83\93\82ð\8ew\92è\82µ\82Ü\82·\81B\93Y\95t\82³\82ê\82Ä\82¢\82é\83e\83L\83X\83g\83t\83@\83C\83\8b\82ð\83R\83s\81[\82·\82ê\82Î\88ê\89\9eOK\82Å\82·\81B</p>
-<p><code>InputString</code>\83v\83\8d\83p\83e\83B\82É\81A\83X\83N\83\8a\83v\83g\82ð\8ew\92è\82·\82ê\82Î\81A\83X\83N\83\8a\83v\83g\82ª\89ð\90Í\82³\82ê\81A<code>Count</code>,
-<code>MarkUpType</code>, <code>Str</code>\82Ì\8ae\83v\83\8d\83p\83e\83B\82ð\92Ê\82µ\82Ä\83A\83N\83Z\83X\82Å\82«\82Ü\82·\81B</p>
-<p>\97á\82¦\82Î\81A\81u<code>\t\s[0]\82¢\82ç\82Á\82µ\82á\82¢%\82Ü\82¹\81A%username\82³\82ñ\81A\s[5]\\300\82Ì\82¨\\94\83\82¢\8fã\82°\82É\82È\82è\82Ü\82·\82Ë\e</code>\81v\82Æ\82¢\82¤\95¶\8e\9a\97ñ\82ð<code>InputString</code>\82É\93ü\82ê\82½\8fê\8d\87\82É\82ͤCount=10\82Æ\82È\82è\81A<code>MarkUpType</code>,
-<code>Str</code>\83v\83\8d\83p\83e\83B\82É\82Í\88È\89º\82Ì\82æ\82¤\82È\92l\82ª\93ü\82è\82Ü\82·\81B</p>
-<p><code>TSsParser</code>\82Å\82Í\81A<code>Index</code>\82Å\8bæ\95Ê\82³\82ê\82é\83X\83N\83\8a\83v\83g\91f\95Ð\81A\82Â\82Ü\82è\89º\82Ì\95\\82É\82¨\82¯\82é\8ae\8ds\82ð<strong>\81u\83}\81[\83N\83A\83b\83v\81v</strong>\82Æ\8cÄ\82Ô\82±\82Æ\82É\82µ\82Ü\82·\81B(\96{\97\88\81A\83^\83O\82â\83\81\83^\95¶\8e\9a\88È\8aO\82Ì\95¶\8e\9a\97ñ\82Ü\82Å\83}\81[\83N\83A\83b\83v\82Æ\8cÄ\82Ô\82Ì\82Í\95Ï\82Å\82·\82ª\81c)</p>
-<table border="1">
- <tr>
- <th>Index</th>
- <th>Str[Index]</th>
- <th>MarkUpType[Index]</th>
- </tr>
- <tr>
- <td>0</td>
- <td>\t</td>
- <td>mtTag</td>
- </tr>
- <tr>
- <td>1</td>
- <td>\s[0]</td>
- <td>mtTag</td>
- </tr>
- <tr>
- <td>2</td>
- <td>\82¢\82ç\82Á\82µ\82á\82¢%\82Ü\82¹\81A<em><sup>\81¦</sup></em></td>
- <td>mtStr</td>
- </tr>
- <tr>
- <td>3</td>
- <td>%username</td>
- <td>mtMeta</td>
- </tr>
- <tr>
- <td>4</td>
- <td>\82³\82ñ\81A</td>
- <td>mtStr</td>
- </tr>
- <tr>
- <td>5</td>
- <td>\s[5]</td>
- <td>mtTag</td>
- </tr>
- <tr>
- <td>6</td>
- <td>\\300\82Ì\82¨<em><sup>\81¦</sup></em></td>
- <td>mtStr</td>
- </tr>
- <tr>
- <td>7</td>
- <td>\\94\83</td>
- <td>mtTagErr</td>
- </tr>
- <tr>
- <td>8</td>
- <td>\82¢\8fã\82°\82É\82È\82è\82Ü\82·\82Ë</td>
- <td>mtStr</td>
- </tr>
- <tr>
- <td>9</td>
- <td>\e</td>
- <td>mtTag</td>
- </tr>
-</table>
-<ul>
- <li>
- \82±\82ê\82Í\83f\83t\83H\83\8b\83g\82Ì\83p\83^\81[\83\93\82ð\8eg\97p\82µ\82½\93T\8c^\93I\82È\89ð\90Í\82Ì\8c\8b\89Ê\82Å\82 \82è\81A\89ð\90Í\8c\8b\89Ê\82Í\83p\83^\81[\83\93\82É\82æ\82Á\82Ä\95Ï\89»\82µ\82Ü\82·\81B\8bÉ\92[\82É\8c¾\82¦\82Î\81A\w8\82ð\83^\83O\82Æ\82µ\82Ä\94F\8e¯\82µ\82È\82¢\81A\82Æ\82¢\82¤\82±\82Æ\82à\89Â\94\\82Å\82·\81B</li>
- <li><code>Str[2]</code>\82É\82Â\82¢\82Ä\82Í\81A<code>EscapeInvalidMeta</code> =
- false\82Ì\8fê\8d\87\82Ì\8c\8b\89Ê\82Å\82·\81Btrue\82Ì\8fê\8d\87\82Í\81A\81u\82¢\82ç\82Á\82µ\82á\82¢\%\82Ü\82¹\81v\82Æ\82È\82è\82Ü\82·\81B</li>
- <li><code>Str[6</code>]\82É\82Â\82¢\82Ä\82Í\81A<code>LeaveEscape</code> =
- true\82Ì\8fê\8d\87\82Ì\8c\8b\89Ê\82Å\82·\81Bfalse\82Ì\8fê\8d\87\82Í\81A\81u\300\82Ì\82¨\81v\82Æ\82È\82è\82Ü\82·\81B</li>
-</ul>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83v\83\8d\83p\83e\83B</h2>
-<dl>
- <dt>LeaveEscape: boolean [\8eÀ/\90Ý][\93Ç/\8f\91]</dt>
- <dd>\83f\83t\83H\83\8b\83g\82Ítrue\82Å\82·\81BmtStr\82Å\90Ø\82è\8fo\82³\82ê\82½\92Ê\8fí\95¶\8e\9a\97ñ\82É\8aÜ\82Ü\82ê\82é\81A<code>\\</code> \82â <code>\%</code>
- \82Ì\95¶\8e\9a\97ñ\82ð\95Ï\8a·\82¹\82¸\82É\8ec\82·\82©\82Ç\82¤\82©\90Ý\92è\82µ\82Ü\82·\81Bfalse\82É\82·\82é\82±\82Æ\82Å\81A<code>\\</code> \82â <code>\%</code> \82Í1\95¶\8e\9a\82É\95Ï\8a·\82³\82ê\82ÄmtStr\83}\81[\83N\83A\83b\83v\82É\91ã\93ü\82³\82ê\82Ü\82·\81B<br>
- TSsParser\82ð\83X\83N\83\8a\83v\83g\82Ì\90F\95ª\82¯\82â\81A\8aë\8c¯\83^\83O\83`\83F\83b\83N\82È\82Ç\82É\8eg\97p\82·\82é\8fê\8d\87\82Í\81A\95¶\8e\9a\97ñ\92·\82â\83X\83N\83\8a\83v\83g\82»\82Ì\82à\82Ì\82ª\95Ï\82í\82ç\82È\82¢\82æ\82¤\82Étrue\82É\82µ\82Ü\82·\81B\93Æ\8e©SSTP\83T\81[\83o\8aJ\94\82Ì\8fê\8d\87\82È\82Ç\82Í\81Afalse\82É\82·\82é\82±\82Æ\82Å\95Ï\8a·\82Ì\8eè\8aÔ\82ð\8fÈ\82¯\82Ü\82·\81B<br>
- \95Ï\8dX\82µ\82½\8fê\8d\87\81A\82»\82Ì\8c\8b\89Ê\82Í\8e\9f\89ñ\82Ì\89ð\90Í\82©\82ç\94½\89f\82³\82ê\82Ü\82·\81B</dd>
- <dt>EscapeInvalidMeta: boolean [\8eÀ/\90Ý][\93Ç/\8f\91]</dt>
- <dd>\83f\83t\83H\83\8b\83g\82Ífalse\82Å\82·\81B<code>MetaPattern</code>\82É\82æ\82Á\82Ä\81A%\95¶\8e\9a\88È\8d~\82ª\83\81\83^\95¶\8e\9a\97ñ\82Æ\94»\92f\82Å\82«\82È\82¢\8fê\8d\87\81A%\95¶\8e\9a\82ð\81u\%\81v\82É\83G\83X\83P\81[\83v\82·\82é\82©\82Ç\82¤\82©\90Ý\92è\82µ\82Ü\82·\81B<br>
- <code>TSsParser</code>\82ð\83X\83N\83\8a\83v\83g\82Ì\90F\95ª\82¯\82È\82Ç\82É\8eg\97p\82·\82é\8fê\8d\87\82Í\81A\95¶\8e\9a\97ñ\92·\82ª\95Ï\82í\82ç\82È\82¢\82æ\82¤\82Éfalse\82É\82µ\82Ü\82·\81B\8c\98\98S\82È\83X\83N\83\8a\83v\83g\8dì\90¬\82Ì\82½\82ß\82Ì\95¶\96@\83`\83F\83b\83N\82Ì\82½\82ß\82É\82Ítrue\82É\82µ\82Ü\82·\81B<br>
- \95Ï\8dX\82µ\82½\8fê\8d\87\81A\82»\82Ì\8c\8b\89Ê\82Í\8e\9f\89ñ\82Ì\89ð\90Í\82©\82ç\94½\89f\82³\82ê\82Ü\82·\81B</dd>
- <dt>TagPattern: TStrings [\8eÀ/\90Ý][\93Ç/\8f\91]<br>
- MetaPattern: TStrings [\8eÀ/\90Ý][\93Ç/\8f\91]</dt>
- <dd>
- \82»\82ê\82¼\82ê\81A\83^\83O\90Ø\82è\8fo\82µ\82Ì\82½\82ß\82Ì\83p\83^\81[\83\93\81A\83\81\83^\95¶\8e\9a\97ñ\90Ø\82è\8fo\82µ\82Ì\82½\82ß\82Ì\83p\83^\81[\83\93\82Å\82·\81B\95Ê\8d\80\81u\83p\83^\81[\83\93\82É\82Â\82¢\82Ä\81v\8eQ\8fÆ\81B\95Ï\8dX\82µ\82½\8fê\8d\87\81A\82»\82Ì\8c\8b\89Ê\82Í\8e\9f\89ñ\82Ì\89ð\90Í\82©\82ç\94½\89f\82³\82ê\82Ü\82·\81B</dd>
- <dt>InputString: String [\8eÀ\82Ì\82Ý][\93Ç/\8f\91]</dt>
- <dd>\82±\82Ì\83v\83\8d\83p\83e\83B\82É\8f\91\82«\8d\9e\82ñ\82Å\81A\89ð\90Í\82·\82×\82«\83X\83N\83\8a\83v\83g\82ð\90Ý\92è\82µ\82Ü\82·\81B\93Ç\82Ý\8fo\82µ\82Ì\8fê\8d\87\82Í\8dÅ\8cã\82É\89ð\90Í\82µ\82½\83X\83N\83\8a\83v\83g\82ª\93ü\82Á\82Ä\82¢\82Ü\82·\81B</dd>
- <dt>Count: integer [\8eÀ\82Ì\82Ý][\93Ç\82Ì\82Ý]</dt>
- <dd>\83X\83N\83\8a\83v\83g\89ð\90Í\8cã\82Ì\83}\81[\83N\83A\83b\83v\91\8d\90\94\82ð\95Ô\82µ\82Ü\82·\81B\83X\83N\83\8a\83v\83g\83}\81[\83N\83A\83b\83v\82ð\83\8b\81[\83v\8f\88\97\9d\82·\82é\8fê\8d\87\82Ì\8fã\8cÀ\92l\82Æ\82µ\82Ä\8eg\97p\82µ\82Ü\82·\81B</dd>
- <dt>Str[Index: integer]: String [\8eÀ\82Ì\82Ý][\93Ç\82Ì\82Ý]</dt>
- <dd>\89ð\90Í\8cã\82Ì\95¶\8e\9a\97ñ\82ð\95Ô\82µ\82Ü\82·\81B\8dÅ\8f\89\82Ì\83}\81[\83N\83A\83b\83v\82Í<code>Str[0]</code>\81A\8dÅ\8cã\82Ì\83}\81[\83N\83A\83b\83v\82Í<code>Str[Count-1]</code>\82Å\82·\81B<code>LeaveExcape</code>,
- <code>EscapeInavlidMeta</code>\82Ì\97¼\83v\83\8d\83p\83e\83B\82Ì\89e\8b¿\82ð\8eó\82¯\82Ü\82·\81B</dd>
- <dt>Extra[Index: integer]: String [\8eÀ\82Ì\82Ý][\93Ç/\8f\91]</dt>
- <dd>\82²\8e©\97R\82É\82¨\8eg\82¢\82\82¾\82³\82¢\81A\82Ì\95¶\8e\9a\97ñ\82Å\82·\81B\89ð\90Í\8c\8b\89Ê\82É\83\81\83\82\82ð\82Â\82¯\82½\82è\82·\82é\97p\93r\82É\82Ç\82¤\82¼\81B</dd>
- <dt>MarkUpType[Index: integer]: TSsMarkUpType [\8eÀ\82Ì\82Ý][\93Ç\82Ì\82Ý]</dt>
- <dd><code>type TSsMarkUpType = (mtTag, mtMeta, mtTagErr, mtStr);<br>
- </code>\83}\81[\83N\83A\83b\83v\82Ì\8eí\97Þ\82ð\95Ô\82µ\82Ü\82·\81B\8dÅ\8f\89\82Ì\83}\81[\83N\83A\83b\83v\82ÍMarkUpType[0]\81A\8dÅ\8cã\82Ì\83}\81[\83N\83A\83b\83v\82ÍMarkUpType[Count-1]\82Å\82·\81B</dd>
-</dl>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83C\83x\83\93\83g</h2>
-<dl>
- <dt>OnSsParse: TSsParseEvent</dt>
- <dd>
- <p><code>TSsParseEvent = procedure (Sender: TObject; const Script:
- String;<br>
- var Len: integer; var MarkType: TSsMarkUpType; var Extra: String) of object;<br>
- </code>\83^\83O\82Ü\82½\82Í\83\81\83^\95¶\8e\9a\97ñ\82Ì\83p\83^\81[\83\93\83}\83b\83`\8e\8e\8ds\82Ì\91O\82É\8cÄ\82Ñ\8fo\82³\82ê\82Ü\82·\81B\82±\82Ì\83C\83x\83\93\83g\82ð\8eg\97p\82·\82é\82Æ\81A<code>TagPattern</code>,
- <code>MetaPattern</code>\82Ì\8ed\97l\82Å\82Í\90Ø\82è\8fo\82¹\82È\82¢\83}\81[\83N\83A\83b\83v\82ª\8f«\97\88\82Å\82«\82½\8fê\8d\87\82É\81A\83X\83N\83\8a\83v\83g\82©\82ç\82Ì\83^\83O\82â\83\81\83^\95¶\8e\9a\97ñ\82Ì\90Ø\82è\8fo\82µ\82ð\8e©\97R\82É\83R\81[\83f\83B\83\93\83O\82Å\82«\82Ü\82·\81B<br>
- <code>Script</code>\82Í\89ð\90Í\93r\92\86\82Ì\83X\83N\83\8a\83v\83g\82Å\82·\81B1\95¶\8e\9a\96Ú\82Í\95K\82¸\81u\\81v\82Ü\82½\82Í\81u%\81v\82Æ\82È\82Á\82Ä\82¢\82Ü\82·\81B<code>Len</code>\82Í\8cÄ\82Ñ\8fo\82µ\8e\9e\82É\82Í0\82ª\91ã\93ü\82³\82ê\82Ä\82¢\82Ü\82·\81B<br>
- \82±\82Ì\83C\83x\83\93\83g\83n\83\93\83h\83\89\93à\82Å\81A<code>Script</code>\82Ì\90æ\93ª\82©\82ç\8en\82Ü\82é\95\94\95ª\82ð\89ð\90Í\82µ\82Ü\82·\81B\83}\81[\83N\83A\83b\83v\82ð\89ð\8eß\82Å\82«\82½\8fê\8d\87\82Í\82»\82Ì\83}\81[\83N\83A\83b\83v\82Ì\92·\82³(\83o\83C\83g\90\94)\82ð<code>Len</code>(>2)\82É\81A\83^\83C\83v\82ð<code>MarkType</code>\82É\81A\95K\97v\82È\82çExtra\82É\95¶\8e\9a\97ñ\82ð\93ü\82ê\82Ä\81A\83C\83x\83\93\83g\83n\83\93\83h\83\89\82ð\8fI\97¹\82µ\82Ä\82\82¾\82³\82¢\81B\89ð\8eß\82Å\82«\82È\82¢\8fê\8d\87\82ÍLen=0\82Ì\82Ü\82Ü\8fI\97¹\82·\82ê\82Î\81A\82»\82Ì\82Ü\82Ü\92Ê\8fí\82Ì\83p\83^\81[\83\93\83}\83b\83`\8e\8e\8ds\82É\93ü\82è\82Ü\82·\81B<br>
- \97v\82Í\81A\95¶\8e\9a\97ñ\90æ\93ª\82©\82ç\82±\82±\82Ü\82Å\82ª\83^\83O(\83\81\83^\95¶\8e\9a\97ñ)\82¾\82æ\81A\82Æ\82¢\82¤\82Ì\82ð\8c©\82Â\82¯\82Ä\95Ô\82µ\82Ä\82\82ê\81A\82Æ\82¢\82¤\82±\82Æ\82Å\82·\81B<br>
- <code>Len>1</code>\82Å\82 \82Á\82Ä\82à\81A<code>Script</code>\82Ì1\95¶\8e\9a\96Ú\82ª\\82È\82Ì\82É<code>MarkUpType</code>\82ª<code>mtTag</code>\82Å\82à<code>mtTagErr</code>\82Å\82à\82È\82¢\8fê\8d\87\81A\82 \82é\82¢\82ÍScript\82Ì1\95¶\8e\9a\96Ú\82ª%\82È\82Ì\82ÉMarkUpType\82ªmtMeta\82Å\82È\82¢\8fê\8d\87\82Í\97á\8aO\82ª\94\90¶\82µ\82Ü\82·\81B</dd>
-</dl>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83\81\83\\83b\83h</h2>
-<dl>
- <dt>function Match(Str, Pattern: String): integer;</dt>
- <dd>SSTP\89ð\90Í\97p\82Ì\83p\83^\81[\83\93\83}\83b\83`\83\93\83O\82ð\8ds\82¢\82Ü\82·\81B<code>Str</code>\82Ì\90æ\93ª\95\94\95ª\81A<code>Pattern</code>\82Å\8e¦\82³\82ê\82é\83p\83^\81[\83\93\82ª\91¶\8dÝ\82·\82ê\82Î\81A\83}\83b\83`\82µ\82½\95\94\95ª\82Ì\83o\83C\83g\90\94(\95¶\8e\9a\90\94\82Å\82Í\82È\82¢)\82ð\95Ô\82µ\82Ü\82·\81B\83}\83b\83`\83\93\83O\82ª\8e¸\94s\82µ\82½\8fê\8d\87\82Í0\82ð\95Ô\82µ\82Ü\82·\81B<br>
- \97á\82¦\82Î\81A<code><br>
- Match('ABC', 'AB') = 2<br>
- Match('ABC', 'A%.%.') = 3<br>
- Match('A20BC', 'A%D') = 3<br>
- Match('\s[20]', '\s%b') = 6<br>
- Match('\s2', '\s%b') = 0</code></dd>
- <dt>function MatchP(PStr, PPattern: PChar): integer;</dt>
- <dd>
- Match\82Æ\8aî\96{\93I\82É\93¯\8b@\94\\82Å\82·\82ª\81A\88ø\90\94\82É\95¶\8e\9a\83|\83C\83\93\83^\82ð\8eg\97p\82µ\82Ü\82·\81B\95s\95K\97v\82È\95¶\8e\9a\97ñ\82Ì\83R\83s\81[\82ª\94ð\82¯\82ç\82ê\82é\82½\82ß\81A\8cJ\82è\95Ô\82µ\8cÄ\82Ô\8fê\8d\87\82â\81A\82Æ\82 \82é\95¶\8e\9a\97ñ\82Ì\93r\92\86\82©\82ç\89ð\90Í\82µ\82½\82è\82·\82é\8fê\8d\87\82É\82Í\8d\82\91¬\82Å\82·\81B</dd>
- <dt>function MarkUpAt(const Pos: integer): integer;</dt>
- <dd>Pos\83o\83C\83g\96Ú(Pos\95¶\8e\9a\96Ú\82Å\82Í\82 \82è\82Ü\82¹\82ñ)\82É\82 \82é\83}\81[\83N\83A\83b\83v\82Ì\83C\83\93\83f\83b\83N\83X\82ð\95Ô\82µ\82Ü\82·\81B</dd>
- <dt>function GetParam(Tag: String; const Index: integer): String;</dt>
- <dd><code>\s[3]</code> \82â <code>\_c[\82±\82ñ\82É\82¿\82Í]</code> , <code>\q1[#cancel][\83L\83\83\83\93\83Z\83\8b]</code>
- \82Æ\82¢\82Á\82½\83}\81[\83N\83A\83b\83v\82©\82ç\81A\83X\83N\83E\83F\83A\83u\83\89\83P\83b\83g\82É\88Í\82Ü\82ê\82½\83p\83\89\83\81\81[\83^\82ð\8eæ\82è\8fo\82µ\82Ü\82·\81BTag\82Í\8eæ\82è\8fo\82µ\82½\82¢\83^\83O\91S\91Ì\81A<code>Index</code>\82Í\89½\94Ô\96Ú\82Ì\83p\83\89\83\81\81[\83^\82ð\8eæ\82è\8fo\82·\82©\81A\82Å\81A1\82©\82ç\8en\82Ü\82è\82Ü\82·\81B<code>\\</code>
- \82â <code>\]</code> \82É\82æ\82é\83G\83X\83P\81[\83v\82É\91Î\89\9e\82µ\81A\82±\82ê\82ç\82Ì\83G\83X\83P\81[\83v\82Í\8e©\93®\93I\82É\8c³\82Ì\8c`\82É\96ß\82³\82ê\82Ü\82·\81B<br>
- Index\82ª\83[\83\8d\88È\89º\82Ì\8fê\8d\87\81A\83p\83\89\83\81\81[\83^\82ª\8eæ\82è\8fo\82¹\82È\82©\82Á\82½\8fê\8d\87\82È\82Ç\82É\82Í\81A\8bó\95¶\8e\9a\97ñ\82ª\95Ô\82è\82Ü\82·\81B<code><br>
- GetParam('\s[3]', 1) = '3';<br>
- GetParam('\s[3]', 2) = '';<br>
- GetParam('\j[http://www.yahoo.co.jp/index[1\].html]', 1) = 'http://www.yahoo.co.jp/index[1].html'</code></dd>
- <dt>function EscapeParam(const Param: String): String;</dt>
- <dd>\j[] \82Ì\92\86\82É\88À\91S\82É\91ã\93ü\82Å\82«\82é\82æ\82¤\82É\81A<code>\</code> \82ð <code>\\</code> \82É\81A<code>]</code> \82ð
- <code>\]</code> \82É\95Ï\8a·\82µ\82½\95¶\8e\9a\97ñ\82ð\95Ô\82µ\82Ü\82·\81B\8c\98\98S\82È\83X\83N\83\8a\83v\83g\8dì\90¬\82Ì\82½\82ß\82É\82Í\90¥\94ñ\97\98\97p\82·\82é\82æ\82¤\82É\82µ\82Ä\82\82¾\82³\82¢\81B</dd>
-</dl>
-<h2>\83p\83^\81[\83\93\82É\82Â\82¢\82Ä</h2>
-<p><code>TagPattern</code>, <code>MetaPattern</code>\83v\83\8d\83p\83e\83B\82É\81A\82³\82\82ç\83X\83N\83\8a\83v\83g\82ð\89ð\90Í\82·\82é\82Æ\82«\82Ì\83p\83^\81[\83\93\82ð\8ew\92è\82µ\82Ü\82·\81B</p>
-<p>
-\83A\81[\83J\83C\83u\93¯\8d«\82Ì\83e\83L\83X\83g\83t\83@\83C\83\8b\82©\82ç\83R\83s\81[\82·\82é\82±\82Æ\82à\82Å\82«\82Ü\82·\82ª\81A\8f«\97\88\82Ì\83^\83O\8ag\92£\93\99\82Ì\82½\82ß\82É\82±\82Ì\8ed\97l\82ª\91¶\8dÝ\82µ\82Ü\82·\81B\82±\82Ì\83p\83^\81[\83\93\83\8a\83X\83g\8e©\90g\82ð\83e\83L\83X\83g\83t\83@\83C\83\8b\82È\82Ç\82©\82ç\93Ç\82Ý\8d\9e\82Þ\82æ\82¤\82É\82·\82é\82±\82Æ\82Å\81A\8eÀ\8ds\83t\83@\83C\83\8b\82ð\8dX\90V\82¹\82¸\82É\83^\83O\89ð\90Í\95\94\82Ì\82Ý\82ð\8dX\90V\82·\82é\82±\82Æ\82à\89Â\94\\82Å\82·\81B</p>
-<p>\81u\83^\83O\82ª\\82Å\8en\82Ü\82é\81v\81u\83\81\83^\95¶\8e\9a\97ñ\82ª%\82Å\8en\82Ü\82é\81v\81u\\\82â\%\82Í\83G\83X\83P\81[\83v\81v\82È\82Ç\82Æ\82¢\82Á\82½\8aî\96{\93I\82È\8ed\97l\82ª\95Ï\8dX\82É\82È\82ç\82È\82¢\8cÀ\82è\81A\83^\83O\82Ì\92Ê\8fí\82Ì\91\9d\8c¸\82É\8aÖ\82µ\82Ä\82Í\81A<code>Pattern</code>\83v\83\8d\83p\83e\83B\82ð\95Ï\8dX\82·\82é\82±\82Æ\82Å\81A\91å\92ï\91Î\89\9e\82Å\82«\82é\82Æ\8ev\82¢\82Ü\82·\81B\93Á\8eê\82È\8f\91\82«\95û\82Ì\8fê\8d\87\81A\83C\83x\83\93\83g\82ð\97\98\97p\82·\82é\95û\96@\82à\82 \82è\82Ü\82·\81B</p>
-<h3>\83p\83^\81[\83\93\82Ì\8f\91\82«\95û\8aT\97ª</h3>
-<p><code>TagPattern</code>\82Ì\8ae\8ds\82ª\81A1\82Â\82Ì\83^\83O\82É\89\9e\93\9a\82·\82é\83p\83^\81[\83\93\82Å\82·\81B\97á\82¦\82Î\81A\81u<code>\e</code>\81v\82Æ\82¢\82¤\8ds\82ð<code>TagPattern</code>\83v\83\8d\83p\83e\83B\82É\92Ç\89Á\82·\82é\82±\82Æ\82Å\81A\81u<code>\e</code>\81v\82Æ\82¢\82¤\83^\83O\82É\94½\89\9e\82Å\82«\82é\82æ\82¤\82É\82È\82è\81A\81u<code>!_c</code>\81v\82Æ\82¢\82¤\8ds\82ð\92Ç\89Á\82·\82ê\82Î\81A\81u<code>\_c</code>\81v\82Æ\82¢\82¤\83^\83O\82Í\83G\83\89\81[\82Å\82 \82é\81A\82Æ\89ð\90Í\82·\82é\82æ\82¤\82É\82È\82è\82Ü\82·\81B</p>
-<p>
-(\82±\82Ì\82æ\82¤\82É\83G\83\89\81[\82É\82È\82Á\82½\83^\83O\82ð\96³\8e\8b\82·\82é\82Ì\82©\81A\82 \82é\82¢\82Í\82Ç\82¤\8f\88\97\9d\82·\82é\82Ì\82©\82Ç\82¤\82©\82È\82Ç\82É\82Â\82¢\82Ä\82Í\81A\89ð\90Í\8eÒ\82Ì\8eÀ\91\95\82É\82©\82©\82Á\82Ä\82¢\82Ü\82·\81BTSsParser\82Å\82Í\81A\82»\82Ì\83^\83O\82ð\83G\83\89\81[\82Æ\82µ\82Ä\91®\90«\82Ã\82¯\82é\82¾\82¯\82Å\82·\81B)</p>
-<p>\83p\83^\81[\83\93\82Í\8fã\82©\82ç\8f\87\94Ô\82É\8e\8e\8ds\82³\82ê\81A\83}\83b\83`\82µ\82½\8e\9e\93_\82Å\8e\8e\8ds\82ð\92\86\8e~\82µ\82Ü\82·\81B</p>
-<p><code>TagPattern</code>\82Ì\8ae\8ds\82Í\81A<code>\</code>\8bL\8d\86\82Ü\82½\82Í<code>!</code>\8bL\8d\86\82Å\8en\82ß\82Ä\82\82¾\82³\82¢\81B<code>\</code>\8bL\8d\86\82Å\8en\82Ü\82é\83p\83^\81[\83\93\82Í\81A\83}\83b\83`\82µ\82½\8fê\8d\87\82»\82ê\82ð\90³\93\96\82È\83^\83O\82ð\82µ\82Ä\8f\88\97\9d\82µ\82Ü\82·\81B<code>!</code>\8bL\8d\86\82Å\8en\82Ü\82é\83p\83^\81[\83\93\82Í\81A\83}\83b\83`\82µ\82½\8fê\8d\87\82»\82ê\82ð\83^\83O\82Ì\83G\83\89\81[\82Æ\82µ\82Ä\8f\88\97\9d\82µ\82Ü\82·\81B</p>
-<p>\97á\82¦\82Î\81A\81u<code>\w</code>\81v\83^\83O\82Ì\8f\88\97\9d\82Ì\82½\82ß\82É\82Í\81A</p>
-<blockquote>
- <p><code>\w%d<br>
- !w%.</code></p>
-</blockquote>
-<p>\82Æ\82¢\82¤2\8ds\82ðTagPattern\82É\89Á\82¦\82é\82Æ\82æ\82¢\82Å\82µ\82å\82¤\81B\82±\82ê\82Å\81A<code>\w9</code> \93\99\82Í\90³\93\96\82È\83^\83O\82Å\81A\90\94\8e\9a\88È\8aO\82ªw\82Ì\8cã\82É\82«\82½\8fê\8d\87\82Í
-<code>\w\82 </code> \82Æ\82¢\82Á\82½\91S\91Ì\82ð\83^\83O\83G\83\89\81[\82Æ\82µ\82Ä\8f\88\97\9d\82·\82é\81A\82Æ\82¢\82¤\88Ó\96¡\82É\82È\82è\82Ü\82·\81B</p>
-<p><code>MetaPattern</code>\82Ì\8ae\8ds\82ª\81A1\82Â\82Ì\83\81\83^\95¶\8e\9a\97ñ\82É\89\9e\93\9a\82·\82é\83p\83^\81[\83\93\82Å\82·\81B\97á\82¦\82Î\81uselfname\81v\82Æ\82¢\82¤\8ds\82ðMetaPattern\83v\83\8d\83p\83e\83B\82É\92Ç\89Á\82·\82é\82±\82Æ\82Å\81A\81u<code>%selfname</code>\81v\82Æ\82¢\82¤\83\81\83^\95¶\8e\9a\97ñ\82É\94½\89\9e\82µ\82Ü\82·\81B<code>MetaPattern</code>\82Ì\8fê\8d\87\82Í\81A<code>%</code>\88È\8d~\82É\91±\82\95¶\8e\9a\97ñ\82ð\82»\82Ì\82Ü\82Ü\8bL\8fq\82·\82é\82æ\82¤\82È\8ai\8dD\82Å\91å\8fä\95v\82Å\82·\81B(\83p\83^\81[\83\93\82à\8eg\82¦\82Ü\82·)</p>
-<p>\83}\83b\83`\8e\8e\8ds\82Í\83p\83^\81[\83\93\83\8a\83X\83g\82Ì\8fã\82©\82ç\8f\87\94Ô\82É\8ds\82í\82ê\82é\82½\82ß\81A<code>MetaPattern</code>\83v\83\8d\83p\83e\83B\82Å\81A\97á\82¦\82Î <code>selfname2</code>
-\82Æ\82¢\82¤\8ds\82Í <code>selfname</code> \82æ\82è\8fã\82É\94z\92u\82³\82ê\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B</p>
-<h3>\83p\83^\81[\83\93\82Ì\8bL\8fq\95û\96@</h3>
-<p>\90³\8bK\95\\8c»\82Ý\82½\82¢\82È\82à\82Ì\82Å\82·\82ª\81A\82»\82±\82Ü\82Å\8d\82\8b@\94\\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B\8bt\82É\90³\8bK\95\\8c»\82Å\82Í\95\\8c»\82µ\82Ã\82ç\82¢\95\\8bL\82É\91Î\89\9e\82µ\82Ä\82½\82è\82à\82µ\82Ü\82·\82ª\81B</p>
-<ul>
- <li><code>%d</code> \82Í\94C\88Ó\82Ì\90®\90\941\95¶\8e\9a\82É\83}\83b\83`\82µ\82Ü\82·\81B<code>\s%d</code> \82Æ\82¢\82¤\83p\83^\81[\83\93\82Í\81A<code>\s0</code>
- \82â <code>\s3</code> \82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%D</code> \82Í\94C\88Ó\82Ì\90®\90\94\97ñ\82É\8dÅ\92·\83}\83b\83`\82µ\82Ü\82·\81B<code>\s[%D]</code> \82Æ\82¢\82¤\83p\83^\81[\83\93\82Í\81A<code>\s[0]</code>
- \82â <code>\s[10]</code> \82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%b</code> \82Í[]\82Å\88Í\82Ü\82ê\82½\95¶\8e\9a\97ñ\82É\83}\83b\83`\82µ\82Ü\82·\81B<code>\]</code> \82â <code>\\</code>
- \82É\82æ\82é\83G\83X\83P\81[\83v\82É\91Î\89\9e\82µ\82Ü\82·\81B<code>\j%b</code> \82Æ\82¢\82¤\83p\83^\81[\83\93\82Í\81A <code>\j[http://www.a.com/index[1\].html]</code>
- \82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%.</code> \82Í\94C\88Ó\82Ì1\95¶\8e\9a(\83V\83\93\83O\83\8b\83o\83C\83g\81E\83}\83\8b\83`\83o\83C\83g\96â\82í\82¸)\82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%m</code> \82Í\94C\88Ó\82Ì\83V\83\93\83O\83\8b\83o\83C\83g\95¶\8e\9a\82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%M</code> \82Í\94C\88Ó\82Ì\83}\83\8b\83`\83o\83C\83g\95¶\8e\9a\82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%%</code> \82Í\81u%\81v\8bL\8d\86\82»\82Ì\82à\82Ì\82É\83}\83b\83`\82µ\82Ü\82·\81B\8eg\97p\82µ\82È\82¢\82Æ\82¢\82¯\82È\82¢\8b@\89ï\82Í\82¨\82»\82ç\82\8f«\97\88\82à\82 \82è\82Ü\82¹\82ñ\81B</li>
- <li>%\82Ì\92¼\8cã\82ª\81A\8fã\8bL\82Ì\82¢\82¸\82ê\82Å\82à\82È\82¢\95¶\8e\9a\82Å\82 \82é\8fê\8d\87\81A\82Æ\82è\82 \82¦\82¸ <code>%%</code> \82Æ\82µ\82Ä\89ð\8eß\82µ\82Ü\82·\82ª\81A\82±\82Ì\82æ\82¤\82È\8eg\82¢\95û\82Í\82µ\82È\82¢\82Å\82\82¾\82³\82¢\81B</li>
- <li>\82»\82ê\88È\8aO\82Ì\95¶\8e\9a\82Í\82·\82×\82Ä\82»\82Ì\95¶\8e\9a\82»\82Ì\82à\82Ì\82É\83}\83b\83`\82µ\82Ü\82·\81B\\82à\8aÜ\82ß\81B</li>
-</ul>
-<h3>\83}\83b\83`\83\93\83O\8fÚ\8d×</h3>
-<p>\83}\83b\83`\83\93\83O\82Í\88È\89º\82Ì\82æ\82¤\82É\8ds\82í\82ê\82Ü\82·\81B</p>
-<ol>
- <li>
- \83}\81[\83N\83A\83b\83v\82Æ\8ev\82í\82ê\82é\81u\\81v\82Ü\82½\82Í\81u%\81v\82ð\90æ\93ª\82©\82ç\92T\82µ\82Ü\82·\81B\81u\\\81v\82â\81u\%\81v\82Í\83G\83X\83P\81[\83v\82Å\82·\82Ì\82Å\93Ç\82Ý\94ò\82Î\82³\82ê\82Ü\82·\81B\82»\82Ì\95\94\95ª\82Ü\82Å\82Í\81A\83}\81[\83N\83A\83b\83v\82Å\82Í\82È\82¢\92Ê\8fí\82Ì\95¶\8e\9a\97ñ\82Å\82·\81B</li>
- <li>
- <p>
- \81u%\81v\82ð\8c©\82Â\82¯\82½\8fê\8d\87\82Í\83\81\83^\95¶\8e\9a\97ñ\82Ì\89Â\94\\90«\82ª\82 \82é\82Ì\82Å\81A\83}\83b\83`\83\93\83O\82ð\8aJ\8en\82µ\82Ü\82·\81B%\88È\89º\82ª\97L\8cø\82È\83\81\83^\95¶\8e\9a\97ñ\82Æ\82µ\82Ä\89ð\8eß\82Å\82«\82È\82¢\8fê\8d\87\82Í\81A\81u%\81v\82Í\88Ó\96¡\82ð\82È\82³\82È\82¢\92Ê\8fí\82Ì%\95¶\8e\9a\97ñ\82Æ\82µ\82Ä\81A\%\82É\83G\83X\83P\81[\83v\82³\82ê\82Ä(<code>EscapeInvalidMeta</code>\82Å\90§\8cä\89Â\94\)\91O\82Ì<code>mtStr</code>\83}\81[\83N\83A\83b\83v\82É\82\82Á\82Â\82«\82Ü\82·\81B</li>
- <li>\81u\\81v\82ð\8c©\82Â\82¯\82½\8fê\8d\87\82Ì\83}\83b\83`\83\93\83O\82ð\8aJ\8en\82µ\82Ü\82·\81B\\88È\89º\82ª\90³\8bK\82Ì\83^\83O\82Æ\82µ\82Ä\89ð\8eß\82Å\82«\82½\8fê\8d\87\82Í<code>mtTag</code>\83^\83C\83v\82Æ\82µ\82Ä\81A\83G\83\89\81[\83^\83O\82Æ\82È\82Á\82½\8fê\8d\87\82ÍmtTagErr\82Æ\82µ\82Ä\90Ø\82è\8fo\82µ\82Ü\82·\81B<code>TagPattern</code>\82Ì\82Ç\82Ì\8ds\82É\82à\83}\83b\83`\82µ\82È\82©\82Á\82½\8fê\8d\87\82Í\81A\\82Ì\8e\9f\82Ì1\95¶\8e\9a\82ð\8aÜ\82ß\82Ä\81A\83G\83\89\81[\83^\83O\82Æ\82µ\82Ä\90Ø\82è\8fo\82µ\82Ü\82·\81B</li>
- <li>\8dÅ\8f\89\82É\96ß\82è\82Ü\82·\81B</li>
-</ol>
-<h2>\8eg\97p\97á</h2>
-<h3>SSTP\83T\81[\83o</h3>
-<p>\93Æ\8e©SSTP\83T\81[\83o\8d\\92z\95â\8f\95\82É\97\98\97p\82·\82é\8fê\8d\87\82Í\81A<code>LeaveEscape := false; EscapeInvalidMeta := false;</code>
-\82Æ\82·\82é\82Æ\8aÈ\92P\82Å\82·\81B</p>
-<p><code>SsParser1.InputString := Edit1.Text;<br>
-for i := 0 to SsParser1.Count-1 do begin<br>
- case SsParser.MarkUpType[i] of<br>
- mtStr: Memo1.Lines.Add(SsParser.Str[i]);<br>
- mtTag: {\83^\83O\8aÖ\98A\82Ì\8f\88\97\9d}<br>
- mtTagErr: Memo1.Lines.Add(SsParser.Str[i]); //\8f\88\97\9d\82¹\82¸\82É\82»\82Ì\82Ü\82Ü\95\\8e¦<br>
- mtMeta: {\83\81\83^\95¶\8e\9a\97ñ\95Ï\8a·\8cê\95\\8e¦}<br>
- end;<br>
-end;</code></p>
-<h3>\83X\83N\83\8a\83v\83g\90F\95ª\82¯HTML\8dì\90¬</h3>
-<p>\90F\95ª\82¯\82ª\96Ú\93I\82Ì\8fê\8d\87\81A\83X\83N\83\8a\83v\83g\82ª\95Ï\82í\82é\90S\94z\82Ì\82È\82¢\82æ\82¤\81A<code>LeaveEscape := true; EscapeInvalidMeta :=
-false;</code> \82Æ\82µ\82Ü\82·\81B</p>
-<p>\88È\89º\82Í\81A\83^\83O\95\94\95ª\82É\90F\82ð\90Ý\92è\82·\82éHTML\83}\81[\83N\83A\83b\83v\82Å\82·\81B</p>
-<p><code>var Html: String;<br>
-//<br>
-SsParser1.InputString := Edit1.Text;<br>
-for i := 0 to SsParser1.Count-1 do begin<br>
- case SsParser.MarkUpType[i] of<br>
- mtStr: Html := Html + SsParser.Str[i];<br>
- mtTag: Html := Html + '<font
-color="green">' + SsParser.Str[i] + '</font>';<br>
- mtTagErr: Html := Html + '<font color="red">' +
-SsParser.Str[i] + '</font>';<br>
- mtMeta: Html := Html + '<font color="blue">' +
-SsParser.Str[i] + '</font>';<br>
- end;<br>
-end;<br>
-Edit2.Text := Html;</code></p>
-<h3>OnSsParse\8eg\97p\97á</h3>
-<p>\88È\89º\82Í\81AOnSsParse\83C\83x\83\93\83g\82Ì\8eg\97p\97á\82Å\82·\81B\82à\82Á\82Æ\82à\92P\8f\83\82É\81A\u\83^\83O\82ð\94»\92è\82µ\82Ü\82·\81BTagPattern\82Ì1\8ds\96Ú\82É <code>\u</code>
-\82Æ\8f\91\82¢\82½\8fê\8d\87\82Æ\93¯\82¶\93®\8dì\82Æ\82È\82è\82Ü\82·\81B</p>
-<p><code>procedure TForm1.SsParser1SsParse(Sender: TObject; const Script:
-String;<br>
- var Len: integer; var MarkType: TSsMarkUpType; var Extra: String)<br>
-begin<br>
- if Pos('\u', Script) = 1 then begin<br>
- Len := Length('\u');<br>
- MarkType := mtTag;<br>
- end;<br>
-end;</code></p>
-<h2>\8eg\97p\97á - \83T\81[\83t\83B\83X\94»\92è</h2>
-<p>\88ê\94Ô\8dÅ\8cã\82Ì\83T\81[\83t\83B\83X\82ª\89½\82É\82È\82é\82©\82ð\94»\92è\82µ\82Ü\82·\81B\82½\82¾\82µ\96{\97\88\82Í\81A\0,
-\1\82É\82æ\82é\83X\83R\81[\83v\90Ø\82è\91Ö\82¦\8f\88\97\9d\82â\81A\_s\82É\82æ\82é\83V\83\93\83N\83\8d\83i\83C\83Y\83h\83Z\83b\83V\83\87\83\93\82Ì\8f\88\97\9d\82ª\95K\97v\82Å\82µ\82å\82¤\81B</p>
-<p><code>var Last: integer;<br>
-//<br>
-SsParser1.InputString := Edit1.Text;<br>
-for i := 0 to SsParser1.Count-1 do begin<br>
- if SsParser.Match(SsParser.Str[i], '\s%b') > 0 then begin<br>
- try<br>
- Last := StrToInt(SsParser.GetParam(SsParser.Str[i]));<br>
- except<br>
- on EConvertError do<br>
- ;<br>
- end;<br>
- end;<br>
-end;</code></p>
-<h2>\8f\94\92\8d\88Ó</h2>
-<h3>\8dÄ\89ð\90Í\82É\82Â\82¢\82Ä</h3>
-<p><code>with SsParser1 do InputString := InputString;</code></p>
-<p>\82Æ\82·\82é\82±\82Æ\82Å\81A<code>EscapeInvalidMeta</code>\93\99\82Ì\89ð\90Í\83I\83v\83V\83\87\83\93\82â\81A<code>MetaPattern</code>\93\99\82Ì\89ð\90Í\83p\83^\81[\83\93\82ª\95Ï\89»\82µ\82½\82Æ\82«\82É\8dÄ\89ð\90Í\82ð\8ds\82¦\82Ü\82·\81B\95Ï\82È\8f\91\82«\95û\82Å\82·\82ª\81B</p>
-<h3>\89ü\8ds\95¶\8e\9a\82É\82Â\82¢\82Ä</h3>
-<p><code>InputString</code>\82É\89ü\8ds\95¶\8e\9a\82â\82»\82Ì\91¼\82Ì\8bó\94\92\95¶\8e\9a\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82½\8fê\8d\87\81A\92Ê\8fí\82Ì\95¶\8e\9a\82Æ\93¯\82¶\82æ\82¤\82É\88µ\82¢\82Ü\82·\81B\82Â\82Ü\82è\81A\89ü\8ds\95¶\8e\9a\82¾\82©\82ç\82Æ\82¢\82Á\82Ä\93Á\82É\89½\82ç\82©\82Ì\8f\88\97\9d\82ª\8ds\82í\82ê\82½\82è\81A\8bt\82É\8f\88\97\9d\82Ì\8e×\96\82\82É\82È\82Á\82½\82è\82·\82é\82±\82Æ\82Í\82 \82è\82Ü\82¹\82ñ\81B\89ü\8ds\82ð
-<code>\n</code> \82É\95Ï\8dX\82µ\82½\82¢\81A\82È\82Ç\82Ì\8fê\8d\87\82Í\82 \82ç\82©\82¶\82ß StringReplace \82È\82Ç\82ð\97\98\97p\82µ\82Ä\8e©\95ª\82Å\95Ï\8a·\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<h3>\83^\83O\83G\83\89\81[\82Ì\97\98\97p\82É\82Â\82¢\82Ä</h3>
-<p><code>TagPattern</code>\82Å\8ds\93ª\82ª <code>!</code> \82Å\8en\82Ü\82é\83p\83^\81[\83\93\82ð\8ew\92è\82·\82é\82±\82Æ\82â\81AOnSsParse\83C\83x\83\93\83g\82Å<code>mtTagErr</code>\83}\81[\83N\83A\83b\83v\82ð\95Ô\82·\8e\96\82Å\81A\\82Å\8en\82Ü\82é\94C\88Ó\82Ì\95¶\8e\9a\97ñ\82ð\83^\83O\83G\83\89\81[\82Æ\8c©\82È\82·\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\82Ü\82½\81A<code>TagPattern</code>\82Å\83}\83b\83`\82µ\82È\82©\82Á\82½\8fê\8d\87\82Í\81A\\8bL\8d\86\82Ì\8e\9f\82Ì1\95¶\8e\9a\82Ü\82Å\82ð\8aÜ\82ß\82Ä\83^\83O\83G\83\89\81[\82Æ\82µ\82Ä2\95¶\8e\9a\95ª\90Ø\82è\8fo\82µ\82Ü\82·\81B\82±\82Ì\97\98\97p\95û\96@\82Å\82·\82ª\81A</p>
-<ul>
- <li>\83X\83N\83\8a\83v\83g\82Ì\83`\83F\83b\83N\82É\97\98\97p\82·\82é\8fê\8d\87\81A<code>TagPattern</code>\82ð\95Ï\8dX\82·\82é\8e\96\82Å\81ASSTP\8c \8cÀ\82Å\93®\82©\82È\82¢\83^\83O\82Ì\83`\83F\83b\83N\82ð\8ds\82¤\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B</li>
- <li>
- SSTP\83T\81[\83o\8d\\92z\82Ì\8fê\8d\87\81A\83G\83\89\81[\83^\83O\82Í\82»\82Ì\82Ü\82Ü\83Z\83\8a\83t\82Æ\93¯\82¶\8c`\82Å\8fo\97Í\82·\82é\82æ\82¤\82É\82·\82ê\82Î\81A\83^\83O\82Ì\83}\81[\83N\83A\83b\83v\83G\83\89\81[\82É\8aÖ\82µ\82Ä\8f_\93î\82È\95\9c\8bA\82ª\82Å\82«\82Ü\82·(\8fã\82Ì\97á\8eQ\8fÆ)\81B</li>
-</ul>
-<h2>\89ü\94Å\97\9a\97ð</h2>
-<dl>
- <dt>2003/04/01</dt>
- <dd>\93à\95\94\82ð\8f\91\82«\92¼\82µ\82Ä\81A10\94{\81`100\94{\82Ù\82Ç\8d\82\91¬\89»\81B\8aJ\94\83}\83V\83\93(PentiumIII
- 1GHz)\82Å\82Í\81A2KB\82Ì\92·\95¶\83X\83N\83\8a\83v\83g\82ð0.01\95b\88È\93à\82É\89ð\90Í\82·\82é\82æ\82¤\82É\82È\82è\82Ü\82µ\82½\81B</dd>
- <dt>2003/04/03</dt>
- <dd><code>Position</code>\81A<code>MarkUpAt</code>\82ð\92Ç\89Á\81B</dd>
-</dl>
-
-</body>
-
-</html>
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="ja">
-<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
-<title>\90V\82µ\82¢\83y\81[\83W 0</title>
-<link rel="stylesheet" type="text/css" href="sakurasuite.css">
-</head>
-
-<body>
-
-<h1>TSsPlayTime, TSsPlayTimeParams</h1>
-<h2>\8aT\97v</h2>
-<p>\82³\82\82ç\83X\83N\83\8a\83v\83g\82Ì\8dÄ\90¶\8e\9e\8aÔ\82ð\97\\91ª\82µ\82Ü\82·\81B\95¶\8e\9a\90\94\82ª\91½\82¢\8fê\8d\87\82â\81A\83E\83F\83C\83g\83^\83O\82ª\91½\82¢\8fê\8d\87\82É\82Í\8dÄ\90¶\8e\9e\8aÔ\82ª\92·\82\82È\82è\82Ü\82·\81B</p>
-<p>\83x\81[\83X\83E\83F\83A\82â\8dÄ\90¶\8aÂ\8b«\81A\82Ü\82½\82»\82Ì\90Ý\92è\82É\82æ\82Á\82Ä\82Í\8dÄ\90¶\8e\9e\8aÔ\82É\82Î\82ç\82Â\82«\82ª\90¶\82¶\82Ü\82·\81B\82»\82ê\82ç\82Ì\92è\90\94\82ÍTSsPlayTimeParams\83R\83\93\83|\81[\83l\83\93\83g\82ª\95Û\8e\9d\82µ\82Ü\82·\81BTSsPlayTimeParams\82ð\95¡\90\94\94z\92u\82µ\82Ä\93K\8bX\90Ø\82è\91Ö\82¦\82é\82±\82Æ\82Å\81A\82¢\82ë\82¢\82ë\82È\8dÄ\90¶\8aÂ\8b«\82Å\82Ì\8dÄ\90¶\8e\9e\8aÔ\82ð\97\\91ª\89Â\94\\82Å\82·\81B</p>
-<h2>\8aî\96{\82Ì\8eg\82¢\95û</h2>
-<p>TSsPlayTime\82ÆTSsPlayTimeParams\81A\82»\82µ\82ÄTSsParser\82Ì\8ae\83R\83\93\83|\81[\83l\83\93\83g\82ð1\8cÂ\82¸\82Â\83t\83H\81[\83\80\82É\94z\92u\82µ\82Ü\82·\81B</p>
-<p>TSsParser\82Ì\90à\96¾\82ð\8eQ\8dl\82É\81A\90³\82µ\82SsParser\82ÌMetaPattern, TagPattern\82ð\90Ý\92è\82µ\82Ü\82·\81B</p>
-<p>\83I\83u\83W\83F\83N\83g\83C\83\93\83X\83y\83N\83^\82æ\82è\81ATSsPlayTime\82ÌSsParser\83v\83\8d\83p\83e\83B\82ÆPlayTimeParams\83v\83\8d\83p\83e\83B\82É\81A\82»\82ê\82¼\82ê\8d¡\92u\82¢\82½\83R\83\93\83|\81[\83l\83\93\83g\82ð\90Ý\92è\82µ\82Ü\82·\81B</p>
-<p>SsPlayTime.PlayTime \8aÖ\90\94\82É\83X\83N\83\8a\83v\83g\82ð\93n\82·\82±\82Æ\82Å\81A\8dÄ\90¶\8e\9e\8aÔ\82ð\8cv\8eZ\82µ\82Ä\81A\83~\83\8a\95b\92P\88Ê\82Å\95Ô\82µ\82Ü\82·\81B</p>
-<h2>\8cp\8f³</h2>
-<p>TObject - TPersistent - TComponent - TSsPlayTime<br>
-TObject - TPersistent - TComponent - TSsPlayTimeParams</p>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X - TSsPlayTime\82Ì\83\81\83\\83b\83h\82Æ\83v\83\8d\83p\83e\83B</h2>
-<dl>
- <dt>property PlayTimeParams: TSsPlayTimeParams</dt>
- <dd>\8cv\8eZ\82É\8eg\97p\82·\82éTSsPlayTimeParams\83R\83\93\83|\81[\83l\83\93\83g\82ð\8aÖ\98A\82Ã\82¯\82Ü\82·\81B</dd>
- <dt>property SsParser: TSsParser</dt>
- <dd>
- \82³\82\82ç\83X\83N\83\8a\83v\83g\83p\81[\83T\82ð\8aÖ\98A\82Ã\82¯\82Ü\82·\81BPlayTime\83\81\83\\83b\83h\82É\93n\82é\89Â\94\\90«\82Ì\82 \82é\83X\83N\83\8a\83v\83g\82ð\90³\82µ\82\89ð\8eß\82Å\82«\82é\82æ\82¤\82É\81AMetaPattern\81ATagPattern\82ð\90Ý\92è\82µ\82Ä\82\82¾\82³\82¢\81B\82Ü\82½\81A\82±\82ÌSsParser<strong>\83R\83\93\83|\81[\83l\83\93\83g\82Ì\93à\97e\82ÍTSsPlayTime\82É\82æ\82Á\82Ä\8f\91\82«\8a·\82¦\82ç\82ê\82Ü\82·\81B</strong></dd>
- <dt>function PlayTime(const Script: String): integer;</dt>
- <dd>\8aÖ\98A\82Ã\82¯\82ç\82ê\82½SsParser\82ÆPlayTimeParams\82ð\8eg\82Á\82Ä\81A\93n\82³\82ê\82½\83X\83N\83\8a\83v\83g\82Ì\8dÄ\90¶\8e\9e\8aÔ(\83~\83\8a\95b)\82ð\97\\91ª\82µ\82Ä\95Ô\82µ\82Ü\82·\81B\83X\83N\83\8a\83v\83g\82ð\89ð\90Í\82µ\82Ä\83E\83F\83C\83g\82Ì\90\94\81A\83T\81[\83t\83B\83X\95Ï\8dX\82Ì\90\94\82È\82Ç\82ð\83J\83E\83\93\83g\82µ\81ASsPlayTimeParams\82Ì\8ae\90Ý\92è\8d\80\96Ú\82ð\8cW\90\94\82Æ\82µ\82½\92P\8f\83\82È1\8e\9f\8c\8b\8d\87(\90ü\8c`\8c\8b\8d\87)\82É\82æ\82Á\82Ä\8dÄ\90¶\8e\9e\8aÔ\82ð\97\\91ª\82µ\82Ü\82·\81B</dd>
- <h2>\83\8a\83t\83@\83\8c\83\93\83X - TSsPlayTimeParams\82Ì\83v\83\8d\83p\83e\83B</h2>
- <p>\8e\9e\8aÔ\82ð\8ew\92è\82·\82é\8fê\8d\87\82Í\81A\92P\88Ê\82Í\82·\82×\82Ä\83~\83\8a\95b(1/1000\95b)\82Å\82·\81B</p>
- <dl>
- <dt>property ProfileName: String;</dt>
- <dd>
- \82±\82Ì\83p\83\89\83\81\81[\83^\82Ì\83Z\83b\83g\82É\94C\88Ó\82Ì\96¼\91O\82ð\95t\82¯\82é\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\81umateria\95W\8f\80\91¬\93x\81v\82È\82Ç\81A\82í\82©\82è\82â\82·\82¢\96¼\91O\82ð\95t\82¯\82Ä\82\82¾\82³\82¢\81B\83R\83\93\83|\81[\83l\83\93\83g\8e©\91Ì\82Ì\93®\8dì\82É\89e\8b¿\82Í\82 \82è\82Ü\82¹\82ñ\81B</dd>
- <dt>property CostConst: integer;</dt>
- <dd>
- \92P\8f\83\82É\83X\83N\83\8a\83v\83g\8dÄ\90¶\97\\91ª\8e\9e\8aÔ\82É\91«\82³\82ê\82é\92è\90\94\92l\82Å\82·\81B\97á\82¦\82Î\8eÀ\8dÛ\82Ì1\95¶\8e\9a\96Ú\82Ì\8dÄ\90¶\8aJ\8en\82Ü\82Å\82É\82©\82È\82è\82Ì\92x\89\84\82ª\90¶\82¶\82é\82æ\82¤\82È\8fê\8d\87\82É\81A\90³\82Ì\92l\82ð\8ew\92è\82µ\82Ä\82¨\82\82Æ\81ATSsPlayTime.PlayTime\82Ì\96ß\82è\92l\82É\82»\82Ì\92l\82ª\89Á\82í\82è\82Ü\82·\81B\83f\83t\83H\83\8b\83g\82Å\82Í0\82Å\82·\81B</dd>
- <dt>property CostWait: integer read FCostWait;</dt>
- <dd>
- \83E\83F\83C\83g\83^\83O(\w1\81`\w9)\82É\82Â\82¢\82Ä\81A\w1\82Ì1\8cÂ\95ª\82Ì\83E\83F\83C\83g\97Ê\82ð\8ew\92è\82µ\82Ü\82·\81B\96{\97\88\82Ì\92è\8b`\82Å\82Í\w1\82Í50ms\82Ì\83E\83F\83C\83g\82Æ\92è\8b`\82³\82ê\82Ä\82¢\82Ü\82·\82ª\81A\8dÄ\90¶\8aÂ\8b«\82â\90Ý\92è\82É\82æ\82Á\82Ä\81A\83E\83F\83C\83g\97Ê\82Í\88Ù\82È\82è\82Ü\82·\81B\82È\82¨\81A\w2\81`\w9\82Í\81A\82»\82ê\82¼\82ê\w1\82Ì\90³\8am\82É2\81`9\94{\82Ì\83E\83F\83C\83g\97Ê\82Å\82 \82é\82Æ\89¼\92è\82³\82ê\82Ä\82¢\82Ü\82·\81B</dd>
- <dt>property CostHiResWait: integer;</dt>
- <dd>\8d\82\90¸\93x\83E\83F\83C\83g\_w[1]\82Ì\83E\83F\83C\83g\97Ê\82Å\82·\81B\_w[n]\82Í\_w[1]\82Ìn\94{\82Ì\83E\83F\83C\83g\97Ê\82Æ\82È\82è\82Ü\82·\81B\92è\8b`\82©\82ç\82µ\82Ä1ms\82É\82È\82é\82Æ\8ev\82¢\82Ü\82·\82ª\94O\82Ì\82½\82ß\97p\88Ó\82³\82ê\82Ä\82¢\82Ü\82·\81B</dd>
- <dt>property CostSurface: integer;</dt>
- <dd>
- \83T\81[\83t\83B\83X\82Ì1\8cÂ\82Ì\90Ø\82è\91Ö\82¦\82É\82©\82©\82é\8e\9e\8aÔ\82Å\82·\81B\82È\82¨\81A\83V\83\93\83N\83\8d\83i\83C\83Y\83h\83Z\83N\83V\83\87\83\93\82Ì\8fê\8d\87\81A2\82Â\82Ì\83T\81[\83t\83B\83X\82ª\93¯\8e\9e\82É\90Ø\82è\91Ö\82í\82é\82±\82Æ\82É\82È\82è\82Ü\82·\82ª\81A\82»\82ê\82Í\8dl\97¶\82³\82ê\82Ü\82¹\82ñ\81B\82Ü\82½\82±\82Ì\92l\82Í\81A\8dÄ\90¶\82·\82é\83}\83V\83\93\82Ì\8aÂ\8b«\82É\82æ\82Á\82Ä\8dÅ\82à\91å\82«\82\8d¶\89E\82³\82ê\82ª\82¿\82È\83p\83\89\83\81\81[\83^\82Å\82·\82Ì\82Å\81A\90T\8fd\82É\8c\88\92è\82µ\82Ä\82\82¾\82³\82¢(\83T\81[\83t\83B\83X\82Ì\95Ï\8dX\82ª\8c\83\82µ\82¢\92·\95¶\83X\83N\83\8a\83v\83g\82Å\82È\82¢\8cÀ\82è\8dÅ\8fI\8c\8b\89Ê\82É\91å\82«\82È\89e\8b¿\82Í\82È\82¢\82©\82à\82µ\82ê\82Ü\82¹\82ñ\82ª)</dd>
- <dt>property CostChar: integer;</dt>
- <dd>\94¼\8ap\95¶\8e\9a1\95¶\8e\9a\95ª\82Ì\8dÄ\90¶(SpecialChars\82É\8ew\92è\82³\82ê\82Ä\82¢\82é\82à\82Ì\82ð\8f\9c\82)\82É\82©\82©\82é\8e\9e\8aÔ\82Å\82·\81B</dd>
- <dt>property CostDBChar: integer;</dt>
- <dd>\91S\8ap\95¶\8e\9a1\95¶\8e\9a\95ª\82Ì\8dÄ\90¶(SpecialChars\82É\8ew\92è\82³\82ê\82Ä\82¢\82é\82à\82Ì\82ð\8f\9c\82)\82É\82©\82©\82é\8e\9e\8aÔ\82Å\82·\81B\8c»\8dÝ\82Ì\82Æ\82±\82ë\81A\82±\82Ì\92l\82ðCostChar\82Æ\93¯\82¶\82Æ\82·\82é\82×\82«\8dÄ\90¶\8aÂ\8b«\82Æ\81ACostDBChar\82Ì2\94{\82Ì\8dÄ\90¶\8e\9e\8aÔ\82ð\82©\82¯\82é\8dÄ\90¶\8aÂ\8b«\82ª\91¶\8dÝ\82µ\82Ä\82¢\82é\82æ\82¤\82Å\82·\81B\91O\8eÒ\82Ì\82æ\82¤\82È\8dÄ\90¶\8aÂ\8b«\82Å\82Í\81A\89p\95¶\93\99\82Ì\8dÄ\90¶\82ª\94ä\8ar\93I\92x\82\8c©\82¦\82é\82±\82Æ\82É\82È\82è\82Ü\82·\81B</dd>
- <dt>property CostQuickChar: integer;</dt>
- <dd>
- \83N\83C\83b\83N\83Z\83N\83V\83\87\83\93\82Ì\8fê\8d\87\82É1\95¶\8e\9a\82Ì\8dÄ\90¶\82É\82©\82¯\82é\8e\9e\8aÔ\82Å\82·\81B\82±\82ê\82Í\91S\8ap\81E\94¼\8ap\82ð\8bæ\95Ê\82µ\82Ü\82¹\82ñ\81B\97\9d\91z\93I\82É\82Í\83N\83C\83b\83N\83Z\83N\83V\83\87\83\93\93à\82Å\82Ì\95¶\8e\9a\8dÄ\90¶\8e\9e\8aÔ\82Í\83[\83\8d\82Å\82·\82ª\81A\8aÂ\8b«\82É\82æ\82Á\82Ä\82Í\8f¬\82³\82È\90³\82Ì\92l\82ð\8ew\92è\82·\82é\82±\82Æ\82Å\81A\97\\91ª\90¸\93x\82ª\8d\82\82Ü\82é\82±\82Æ\82ª\82 \82è\82Ü\82·\81B</dd>
- <dt>property SpecialChars: TSsPlayTimeSpecialChars;</dt>
- <dd>
- \8fã\8bL\82Ì\94¼\8ap\95¶\8e\9a\81E\91S\8ap\95¶\8e\9a\82Ì\97\\91ª\82Ì\97á\8aO\82ð\8ew\92è\82µ\82Ü\82·\81B\82¢\82\82Â\82©\82Ì\8dÄ\90¶\8aÂ\8b«\82Å\82Í\81A\8bå\93Ç\93_\82É\8e©\93®\93I\82É\92·\82ß\82Ì\83E\83F\83C\83g\82ð\82Æ\82é\82à\82Ì\82ª\91¶\8dÝ\82µ\82Ü\82·\82Ì\82Å\81A\82»\82Ì\82æ\82¤\82È\82à\82Ì\82ð\82±\82±\82Å\8ew\92è\82µ\82Ä\82\82¾\82³\82¢\81B\90Ý\92è\82·\82é\82Ì\82Í\81ATSsPlayTimeSpecialChar\8c^\82Ì\83R\83\8c\83N\83V\83\87\83\93\82Å\82 \82è\81AChar\82É\95¶\8e\9a\82ð\81AWait\82É\82»\82Ì\95¶\8e\9a\82ð\8dÄ\90¶\82·\82é\8fê\8d\87\82Ì\8e\9e\8aÔ\82ð\8ew\92è\82µ\82Ü\82·\81BChar\82Í1\95¶\8e\9a(\83_\83u\83\8b\83o\83C\83g\95¶\8e\9a\89Â)\82Å\8ew\92è\82µ\82Ä\82\82¾\82³\82¢\81B</dd>
- </dl>
-</dl>
-<h2>\92\8d\88Ó</h2>
-<h3>\83x\81[\83X\83E\83F\83A\82É\82æ\82é\8dÄ\90¶\8e\9e\8aÔ\92²\90®\82Ì\95û\90j</h3>
-<p>(\8bL\8fq\82Í\81A2003\94N8\8c\8e\8c»\8dÝ\82Ì\8fó\8bµ\82ð\8c³\82É\82µ\82Ä\82¢\82Ü\82·)</p>
-<p>
-\82Ù\82Æ\82ñ\82Ç\82Ì\8dÄ\90¶\8aÂ\8b«\82Å\82Í\81A\83X\83N\83\8a\83v\83g\82Í\8eÀ\8e\9e\8aÔ\82Æ\82Í\93¯\8aú\82¹\82¸\82É\8dÄ\90¶\82³\82ê\82Ü\82·\81B\97á\82¦\82ÎPC\82Ì\95\89\89×\82ª\8d\82\82Ü\82Á\82½\82½\82ß\81A1\95¶\8e\9a\95\\8e¦\82·\82é\8aÔ\82É\90\94\95b\82Ì\83\89\83O\82ª\90¶\82¶\82½\81A\82Æ\82¢\82¤\8fê\8d\87\82Å\82à\81A\82»\82Ì\92x\82ê\82ð\8eæ\82è\96ß\82·\82æ\82¤\82È\8f\88\97\9d\82Í\82È\82\81A\92W\81X\82Æ\81A1\95¶\8e\9a\95\\8e¦\82µ\82Ä\82Í\8bK\92è\82Ì\83E\83F\83C\83g\95ª\91Ò\82¿\81A1\89ñ\83T\81[\83t\83B\83X\82ð\90Ø\82è\91Ö\82¦\82Ä\81A1\95¶\8e\9a\95\\8e¦\82µ\82Ä\82Í\8bK\92è\82Ì\83E\83F\83C\83g\95ª\91Ò\82¿\81c\82Æ\82¢\82¤\82æ\82¤\82É\8dÄ\90¶\82³\82ê\82Ä\82¢\82Ü\82·\81B</p>
-<p>\82»\82ê\82É\91Î\82µ\82Ä\81Amateria\8cÝ\8a·\83x\81[\83X\83E\83F\83A\82Ì\88ê\82Â\82Å\82 \82éSSP\82Å\82Í\81A\97\9d\91z\82Ì\83^\83C\83\80\83\89\83C\83\93\82æ\82è\92x\82ê\82½\8fê\8d\87\82É\81A\82»\82Ì\92x\82ê\82ð\8eæ\82è\96ß\82·\82æ\82¤\82È\8f\88\97\9d\82ª\91g\82Ý\8d\9e\82Ü\82ê\82Ä\82¢\82Ü\82·\81B\97\9d\91z\82Ì\83^\83C\83\80\83\89\83C\83\93\82Í\81A\83N\83C\83b\83N\83Z\83N\83V\83\87\83\93\82â\83T\81[\83t\83B\83X\95Ï\8dX\82Ì\83R\83X\83g\82ð\83[\83\8d\82Æ\82µ\81A\83E\83F\83C\83g\83^\83O\82Æ\92Ê\8fí\82Ì\94\98b\82Å\82Ì\82Ý\8e\9e\8aÔ\82ª\90i\82Þ\82à\82Ì\82Æ\82µ\82Ä\8cv\8eZ\82³\82ê\82Ä\82¢\82Ü\82·\81BMIDI\83v\83\8c\81[\83\84\81[\82ª\91S\82Ä\82Ì\83m\81[\83g\82Ì\83^\83C\83~\83\93\83O\82ð\90§\8cä\82µ\82Ä\83e\83\93\83|\82ª\82¸\82ê\82È\82¢\82Ì\82Æ\93¯\97l\82É\81ASSP\82Å\82Í\82»\82ê\82¼\82ê\82Ì\94\98b\82Ì\95¶\8e\9a\8fo\8c»\8e\9e\8d\8f\82Í\8a®\91S\82É\90§\8cä\82³\82ê\82Ä\82¢\82Ü\82·\81B</p>
-<p>TSsPlayTime\82Ì\8dÄ\90¶\8e\9e\8d\8f\97\\91ª\82Í\81ASSP\82Ì\82æ\82¤\82È\95û\90j\82Å\8eÀ\91\95\82³\82ê\82Ä\82¢\82é\8dÄ\90¶\8aÂ\8b«\82É\82Â\82¢\82Ä\82Í\81A\97\9d\98_\8fã100%\90³\8am\82È\82à\82Ì\82É\82·\82é\82±\82Æ\82ª\89Â\94\\82Å\82·\81B\8bt\82É\81A\82»\82Ì\91¼\91½\82\82Ì\8dÄ\90¶\8aÂ\8b«\82É\82¨\82¢\82Ä\82Í\81A\83T\81[\83t\83B\83X\95Ï\8dX\82Ì\83^\83O\82ª\8eÀ\8ds\82³\82ê\82é\82±\82Æ\82Å\95½\8bÏ\82Ç\82Ì\92ö\93x\82Ì\8e\9e\8aÔ\82ð\8eg\82¤\82Ì\82©\81A\83N\83C\83b\83N\83Z\83N\83V\83\87\83\93\82Å\82Í1\95¶\8e\9a\95\\8e¦\82·\82é\82Ì\82É\95½\8bÏ\82Ç\82Ì\92ö\93x\82©\82©\82Á\82Ä\82¢\82é\82Ì\82©\81A\82È\82Ç\82ð\8eÀ\91ª\82É\8aî\82Ã\82¢\82Ä\8c\88\92è\82·\82é\82±\82Æ\82Å\81ATSsPlayTimeParams\82Ì\8ae\83v\83\8d\83p\83e\83B\82ð\8c\88\92è\82µ\82Ä\82¢\82\95K\97v\82ª\82 \82è\81APC\8aÂ\8b«\82Ì\8d·\82È\82Ç\82ð\8dl\97¶\82·\82é\95K\97v\82à\82 \82é\82½\82ß\81A\82 \82é\92ö\93x\82Ì\8cë\8d·\82ª\94\90¶\82µ\82Ü\82·\81B</p>
-
-</body>
-
-</html>
+++ /dev/null
-program Project1;
-
-uses
- Forms,
- Unit1 in 'Unit1.pas' {Form1};
-
-{$R *.res}
-
-begin
- Application.Initialize;
- Application.CreateForm(TForm1, Form1);
- Application.Run;
-end.
+++ /dev/null
-object Form1: TForm1
- Left = 281
- Top = 541
- Width = 531
- Height = 418
- Caption = 'SakuraScript Editor Test'
- Color = clBtnFace
- Font.Charset = SHIFTJIS_CHARSET
- Font.Color = clWindowText
- Font.Height = -12
- Font.Name = #65325#65331' '#65328#12468#12471#12483#12463
- Font.Style = []
- OldCreateOrder = False
- Position = poDesktopCenter
- OnResize = FormResize
- PixelsPerInch = 96
- TextHeight = 12
- object Editor1: TEditor
- Left = 0
- Top = 0
- Width = 338
- Height = 391
- Cursor = crIBeam
- Align = alClient
- Caret.AutoCursor = True
- Caret.AutoIndent = False
- Caret.BackSpaceUnIndent = True
- Caret.Cursors.DefaultCursor = crIBeam
- Caret.Cursors.DragSelCursor = crDrag
- Caret.Cursors.DragSelCopyCursor = 2
- Caret.Cursors.InSelCursor = crDefault
- Caret.Cursors.LeftMarginCursor = 1
- Caret.Cursors.TopMarginCursor = crDefault
- Caret.FreeCaret = False
- Caret.FreeRow = False
- Caret.InTab = False
- Caret.KeepCaret = True
- Caret.LockScroll = False
- Caret.NextLine = True
- Caret.PrevSpaceIndent = False
- Caret.RowSelect = True
- Caret.SelDragMode = dmAutomatic
- Caret.SelMove = True
- Caret.SoftTab = True
- Caret.Style = csDefault
- Caret.TabIndent = False
- Caret.TabSpaceCount = 8
- Color = clWindow
- Fountain = SakuraScriptFountain1
- Font.Charset = SHIFTJIS_CHARSET
- Font.Color = clBlack
- Font.Height = -12
- Font.Name = #65325#65331' '#12468#12471#12483#12463
- Font.Style = []
- HitStyle = hsSelect
- Imagebar.DigitWidth = 8
- Imagebar.LeftMargin = 2
- Imagebar.MarkWidth = 0
- Imagebar.RightMargin = 2
- Imagebar.Visible = False
- Lines.Strings = (
- '\t\h\s[5]\_s'#12362#12399#12424#12358#12394#65374#12290'<br>\e')
- Marks.EofMark.Color = clGray
- Marks.EofMark.Visible = False
- Marks.RetMark.Color = clGray
- Marks.RetMark.Visible = False
- Marks.WrapMark.Color = clGray
- Marks.WrapMark.Visible = False
- Marks.HideMark.Color = clGray
- Marks.HideMark.Visible = False
- Marks.Underline.Color = clGray
- Marks.Underline.Visible = False
- Margin.Character = 0
- Margin.Left = 2
- Margin.Line = 0
- Margin.Top = 2
- Leftbar.BkColor = clSilver
- Leftbar.Color = clBlack
- Leftbar.Column = 1
- Leftbar.Edge = True
- Leftbar.LeftMargin = 2
- Leftbar.RightMargin = 2
- Leftbar.ShowNumber = True
- Leftbar.ShowNumberMode = nmRow
- Leftbar.Visible = False
- Leftbar.ZeroBase = False
- Leftbar.ZeroLead = True
- ReadOnly = False
- Ruler.BkColor = clSilver
- Ruler.Color = clBlack
- Ruler.Edge = True
- Ruler.GaugeRange = 10
- Ruler.MarkColor = clBlack
- Ruler.Visible = True
- ScrollBars = ssBoth
- Speed.CaretVerticalAc = 2
- Speed.InitBracketsFull = False
- Speed.PageVerticalRange = 2
- Speed.PageVerticalRangeAc = 2
- TabOrder = 0
- UndoListMax = 64
- View.Brackets = <>
- View.Colors.Ank.BkColor = clNone
- View.Colors.Ank.Color = clNone
- View.Colors.Ank.Style = []
- View.Colors.Comment.BkColor = clNone
- View.Colors.Comment.Color = clNone
- View.Colors.Comment.Style = []
- View.Colors.DBCS.BkColor = clNone
- View.Colors.DBCS.Color = clNone
- View.Colors.DBCS.Style = []
- View.Colors.Hit.BkColor = clNone
- View.Colors.Hit.Color = clNone
- View.Colors.Hit.Style = []
- View.Colors.Int.BkColor = clNone
- View.Colors.Int.Color = clNone
- View.Colors.Int.Style = []
- View.Colors.Mail.BkColor = clNone
- View.Colors.Mail.Color = clNone
- View.Colors.Mail.Style = []
- View.Colors.Reserve.BkColor = clNone
- View.Colors.Reserve.Color = clNone
- View.Colors.Reserve.Style = []
- View.Colors.Select.BkColor = clNavy
- View.Colors.Select.Color = clWhite
- View.Colors.Select.Style = []
- View.Colors.Str.BkColor = clNone
- View.Colors.Str.Color = clNone
- View.Colors.Str.Style = []
- View.Colors.Symbol.BkColor = clNone
- View.Colors.Symbol.Color = clNone
- View.Colors.Symbol.Style = []
- View.Colors.Url.BkColor = clNone
- View.Colors.Url.Color = clNone
- View.Colors.Url.Style = []
- View.ControlCode = False
- View.Mail = False
- View.Url = False
- WantReturns = True
- WantTabs = True
- WordWrap = True
- WrapOption.FollowRetMark = False
- WrapOption.FollowPunctuation = False
- WrapOption.FollowStr = #12289#12290#65292#65294#12539#65311#65281#12443#12444#12541#12542#12445#12446#12293#12540#65289#65341#65373#12301#12303'!),.:;?]}'#65377#65379#65380#65381#65392#65438#65439
- WrapOption.Leading = False
- WrapOption.LeadStr = #65288#65339#65371#12300#12302'([{'#65378
- WrapOption.PunctuationStr = #12289#12290#65292#65294',.'#65377#65380
- WrapOption.WordBreak = False
- WrapOption.WrapByte = 40
- end
- object Memo1: TMemo
- Left = 338
- Top = 0
- Width = 185
- Height = 391
- Align = alRight
- Lines.Strings = (
- 'Memo1')
- TabOrder = 1
- OnClick = Memo1Click
- end
- object SakuraScriptFountain1: TSakuraScriptFountain
- Brackets = <>
- Reserve.BkColor = clNone
- Reserve.Color = clNone
- Reserve.Style = []
- Scope0Color.BkColor = clNone
- Scope0Color.Color = clNavy
- Scope0Color.Style = []
- Scope1Color.BkColor = clNone
- Scope1Color.Color = clOlive
- Scope1Color.Style = []
- TagColor.BkColor = clNone
- TagColor.Color = clLime
- TagColor.Style = []
- TagErrorColor.BkColor = clNone
- TagErrorColor.Color = clRed
- TagErrorColor.Style = [fsBold]
- MetaWordColor.BkColor = clNone
- MetaWordColor.Color = clBlue
- MetaWordColor.Style = [fsBold]
- SynchronizedColor.BkColor = clNone
- SynchronizedColor.Color = clFuchsia
- SynchronizedColor.Style = []
- SakuraScriptParser = SsParser1
- Left = 16
- Top = 320
- end
- object SsParser1: TSsParser
- TagPattern.Strings = (
- '\h'
- '\u'
- '\s[%D]'
- '\s[-%D]'
- '\s%d'
- '!s%b'
- '!s%.'
- '!b%b'
- '!b%.'
- '!f%b'
- '\n[half]'
- '!n%b'
- '\n'
- '\w%d'
- '!w%.'
- '\e'
- '\t'
- '\_s'
- '\_q'
- '!j%b'
- '!j'
- '\c'
- '\URL%b%b%b%b%b%b%b%b%b%b%b%b%b%b%b'
- '\URL%b%b%b%b%b%b%b%b%b%b%b%b%b'
- '\URL%b%b%b%b%b%b%b%b%b%b%b'
- '\URL%b%b%b%b%b%b%b%b%b'
- '\URL%b%b%b%b%b%b%b'
- '\URL%b%b%b%b%b'
- '\URL%b%b%b'
- '\URL%b'
- '!x'
- '!l%b'
- '!q%d%b%b'
- '!q%d%b'
- '!q%d'
- '!z'
- '!y'
- '!*'
- '!v'
- '!_v%b'
- '!_V'
- '!8%b'
- '!8'
- '!m%b'
- '!m'
- '!i[%D]'
- '!i%.'
- '!_i'
- '!a'
- '!_c%b'
- '!_c'
- '!__c'
- '!__t'
- '!-'
- '!+'
- '!_b%b'
- '!1'
- '!2'
- '!3'
- '!4'
- '!5'
- '!6'
- '!7'
- '!|'
- '!_w%b'
- '!_+')
- MetaPattern.Strings = (
- 'selfname2'
- 'selfname'
- 'keroname'
- 'username'
- 'screenwidth'
- 'screenheight'
- 'month'
- 'day'
- 'hour'
- 'minute'
- 'second'
- 'wronghour'
- 'songname'
- 'j%b'
- 'exh'
- 'by'
- 'bm'
- 'bd'
- 'et'
- 'ms'
- 'mz'
- 'ml'
- 'mc'
- 'mh'
- 'mt'
- 'me'
- 'mp'
- 'm?'
- 'dms'
- 'c'
- '0'
- '1')
- Left = 16
- Top = 288
- end
- object HTMLFountain1: THTMLFountain
- FileExtList.Strings = (
- '.htm'
- '.html')
- Brackets = <
- item
- ItemColor.BkColor = clNone
- ItemColor.Color = clPurple
- ItemColor.Style = []
- LeftBracket = '<!--'
- RightBracket = '-->'
- end>
- Reserve.BkColor = clNone
- Reserve.Color = clNone
- Reserve.Style = []
- Ampersand.BkColor = clNone
- Ampersand.Color = clNone
- Ampersand.Style = []
- Mail.BkColor = clNone
- Mail.Color = clGray
- Mail.Style = []
- Str.BkColor = clNone
- Str.Color = clNone
- Str.Style = []
- TagAttribute.BkColor = clNone
- TagAttribute.Color = clFuchsia
- TagAttribute.Style = []
- TagAttributeValue.BkColor = clNone
- TagAttributeValue.Color = clYellow
- TagAttributeValue.Style = []
- TagColor.BkColor = clNone
- TagColor.Color = clOlive
- TagColor.Style = []
- TagElement.BkColor = clNone
- TagElement.Color = clGreen
- TagElement.Style = [fsBold]
- Url.BkColor = clNone
- Url.Color = clNone
- Url.Style = []
- Left = 16
- Top = 216
- end
- object DelphiFountain1: TDelphiFountain
- FileExtList.Strings = (
- '.dpr'
- '.inc'
- '.pas')
- Brackets = <
- item
- ItemColor.BkColor = clNone
- ItemColor.Color = clOlive
- ItemColor.Style = []
- LeftBracket = '{'
- RightBracket = '}'
- end
- item
- ItemColor.BkColor = clNone
- ItemColor.Color = clOlive
- ItemColor.Style = []
- LeftBracket = '(*'
- RightBracket = '*)'
- end>
- Reserve.BkColor = clNone
- Reserve.Color = clBlue
- Reserve.Style = [fsBold]
- ReserveWordList.Strings = (
- 'absolute'
- 'abstract'
- 'and'
- 'array'
- 'as'
- 'asm'
- 'assembler'
- 'automated'
- 'begin'
- 'case'
- 'cdecl'
- 'class'
- 'const'
- 'constructor'
- 'default'
- 'destructor'
- 'dispid'
- 'dispinterface'
- 'div'
- 'do'
- 'downto'
- 'dynamic'
- 'else'
- 'end'
- 'except'
- 'export'
- 'exports'
- 'external'
- 'far'
- 'file'
- 'finalization'
- 'finally'
- 'for'
- 'forward'
- 'function'
- 'goto'
- 'if'
- 'implementation'
- 'in'
- 'inherited'
- 'initialization'
- 'inline'
- 'interface'
- 'is'
- 'label'
- 'library'
- 'message'
- 'mod'
- 'near'
- 'nil'
- 'nodefault'
- 'not'
- 'object'
- 'of'
- 'or'
- 'out'
- 'overload'
- 'override'
- 'packed'
- 'pascal'
- 'private'
- 'procedure'
- 'program'
- 'property'
- 'protected'
- 'public'
- 'published'
- 'raise'
- 'readonly'
- 'record'
- 'register'
- 'repeat'
- 'resident'
- 'resourcestring'
- 'safecall'
- 'set'
- 'shl'
- 'shr'
- 'stdcall'
- 'stored'
- 'string'
- 'then'
- 'threadvar'
- 'to'
- 'try'
- 'type'
- 'unit'
- 'until'
- 'uses'
- 'var'
- 'virtual'
- 'while'
- 'with'
- 'writeonly'
- 'xor')
- Ank.BkColor = clNone
- Ank.Color = clBlack
- Ank.Style = []
- AsmBlock.BkColor = clNone
- AsmBlock.Color = clNone
- AsmBlock.Style = []
- Comment.BkColor = clNone
- Comment.Color = clOlive
- Comment.Style = []
- DBCS.BkColor = clNone
- DBCS.Color = clNone
- DBCS.Style = []
- Int.BkColor = clNone
- Int.Color = clNone
- Int.Style = []
- Str.BkColor = clNone
- Str.Color = clNone
- Str.Style = []
- Symbol.BkColor = clNone
- Symbol.Color = clNone
- Symbol.Style = []
- Left = 16
- Top = 248
- end
-end
+++ /dev/null
-unit Unit1;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, heClasses, heFountain, SakuraScriptFountain, HEditor, SsParser,
- HTMLFountain, StdCtrls, DelphiFountain;
-
-type
- TForm1 = class(TForm)
- Editor1: TEditor;
- SakuraScriptFountain1: TSakuraScriptFountain;
- SsParser1: TSsParser;
- HTMLFountain1: THTMLFountain;
- Memo1: TMemo;
- DelphiFountain1: TDelphiFountain;
- procedure Memo1Click(Sender: TObject);
- procedure FormResize(Sender: TObject);
- private
- { Private \90é\8c¾ }
- public
- { Public \90é\8c¾ }
- end;
-
-var
- Form1: TForm1;
-
-implementation
-
-{$R *.dfm}
-
-procedure TForm1.Memo1Click(Sender: TObject);
-begin
- Memo1.Lines.Clear;
-end;
-
-procedure TForm1.FormResize(Sender: TObject);
-begin
- Editor1.WrapOption.WrapByte := (Editor1.Width - 30) div 6;
-end;
-
-end.
+++ /dev/null
-program Project1;
-
-uses
- Forms,
- Unit1 in 'Unit1.pas' {Form1};
-
-{$R *.RES}
-
-begin
- Application.Initialize;
- Application.CreateForm(TForm1, Form1);
- Application.Run;
-end.
+++ /dev/null
-object Form1: TForm1
- Left = 228
- Top = 248
- Width = 467
- Height = 360
- Caption = 'Test'
- Color = clBtnFace
- Font.Charset = SHIFTJIS_CHARSET
- Font.Color = clWindowText
- Font.Height = -12
- Font.Name = #65325#65331' '#65328#12468#12471#12483#12463
- Font.Style = []
- OldCreateOrder = False
- DesignSize = (
- 459
- 333)
- PixelsPerInch = 96
- TextHeight = 12
- object Edit1: TEdit
- Left = 8
- Top = 16
- Width = 448
- Height = 20
- Anchors = [akLeft, akTop, akRight]
- TabOrder = 0
- Text = '\t'#12362#12399#12424#12358'\e'
- end
- object Button1: TButton
- Left = 8
- Top = 80
- Width = 75
- Height = 25
- Caption = 'Parse'
- TabOrder = 1
- OnClick = Button1Click
- end
- object ListView1: TListView
- Left = 0
- Top = 139
- Width = 459
- Height = 194
- Align = alBottom
- Anchors = [akLeft, akTop, akRight, akBottom]
- Columns = <
- item
- Caption = #12479#12452#12503
- Width = 100
- end
- item
- Caption = 'Index'
- end
- item
- Caption = #25991#23383#21015
- Width = 150
- end
- item
- Alignment = taRightJustify
- Caption = #12458#12501#12475#12483#12488
- Width = 100
- end>
- TabOrder = 2
- ViewStyle = vsReport
- end
- object Edit2: TEdit
- Left = 8
- Top = 48
- Width = 448
- Height = 20
- Anchors = [akLeft, akTop, akRight]
- TabOrder = 3
- Text = '\t'
- end
- object Button2: TButton
- Left = 88
- Top = 80
- Width = 75
- Height = 25
- Caption = 'Match'
- TabOrder = 4
- OnClick = Button2Click
- end
- object CheckBox1: TCheckBox
- Left = 16
- Top = 112
- Width = 137
- Height = 17
- Caption = 'EscapeInvalidMeta'
- TabOrder = 5
- OnClick = CheckBox1Click
- end
- object CheckBox2: TCheckBox
- Left = 184
- Top = 113
- Width = 97
- Height = 15
- Caption = 'LeaveEscape'
- Checked = True
- State = cbChecked
- TabOrder = 6
- OnClick = CheckBox2Click
- end
- object Button3: TButton
- Left = 168
- Top = 80
- Width = 75
- Height = 25
- Caption = 'GetParam'
- TabOrder = 7
- OnClick = Button3Click
- end
- object Button4: TButton
- Left = 248
- Top = 80
- Width = 75
- Height = 25
- Caption = 'Benchmark'
- TabOrder = 8
- OnClick = Button4Click
- end
- object SsParser: TSsParser
- TagPattern.Strings = (
- '\h '
- '\u'
- '\s[%D]'
- '\s%d'
- '!s%b'
- '!s%.'
- '\b[%D]'
- '\b%d'
- '!b%b'
- '!b%.'
- '\n'
- '\w%d'
- '!w%.'
- '\e'
- '\t'
- '\j%b'
- '!j'
- '\c'
- '\x'
- '\q%d%b%b'
- '\z'
- '\y'
- '\*'
- '\v'
- '\8%b'
- '\m%b'
- '\i[%D]'
- '\i%d'
- '!i%b'
- '!i%.'
- '\_i '
- '\a'
- '\_c%b'
- '\__c'
- '\-'
- '\1'
- '\2'
- '\3'
- '\4'
- '\|')
- MetaPattern.Strings = (
- 'selfname2'
- 'selfname'
- 'keroname'
- 'username'
- 'screenwidth'
- 'screenheight'
- 'month'
- 'day'
- 'hour'
- 'minute'
- 'second'
- 'j%b'
- 'exh'
- 'by'
- 'bm'
- 'bd'
- 'o'
- 'd'
- 'h'
- 'm'
- 's'
- 'c'
- '0'
- '1'
- 'et'
- 'ms'
- 'mz'
- 'mc'
- 'mh'
- 'mt'
- 'me'
- 'mp'
- 'm?'
- 'dms')
- Left = 376
- Top = 80
- end
-end
+++ /dev/null
-unit Unit1;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- SsParser, ComCtrls, StdCtrls;
-
-type
- TForm1 = class(TForm)
- Edit1: TEdit;
- Button1: TButton;
- ListView1: TListView;
- SsParser: TSsParser;
- Edit2: TEdit;
- Button2: TButton;
- CheckBox1: TCheckBox;
- CheckBox2: TCheckBox;
- Button3: TButton;
- Button4: TButton;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure CheckBox2Click(Sender: TObject);
- procedure CheckBox1Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure Button4Click(Sender: TObject);
- private
- { Private \90é\8c¾ }
- public
- { Public \90é\8c¾ }
- end;
-
-var
- Form1: TForm1;
-
-implementation
-
-{$R *.DFM}
-
-procedure TForm1.Button1Click(Sender: TObject);
-var i: integer;
- Li: TListItem;
-begin
- ListView1.Items.Clear;
- SsParser.InputString := Edit1.Text;
- for i := 0 to SsParser.Count-1 do begin
- Li := ListView1.Items.Add;
- case SsParser.MarkUpType[i] of
- mtTag: Li.Caption := 'Tag';
- mtTagErr: Li.Caption := 'TagErr';
- mtMeta: Li.Caption := 'Meta';
- mtStr: Li.Caption := 'Str';
- end;
- Li.SubItems.Add(IntToStr(i));
- Li.SubItems.Add(SsParser[i]);
- Li.SubItems.Add(IntToStr(SsParser.Position[i]));
- end;
-end;
-
-procedure TForm1.Button2Click(Sender: TObject);
-var i: integer;
- Str: String;
-begin
- i := SsParser.Match(Edit1.Text, Edit2.Text);
- Str := Copy(Edit1.Text, 1, i);
- ShowMessage(IntToStr(i) + #13#10 + Str);
-end;
-
-procedure TForm1.CheckBox2Click(Sender: TObject);
-begin
- SsParser.LeaveEscape := CheckBox2.Checked;
-end;
-
-procedure TForm1.CheckBox1Click(Sender: TObject);
-begin
- SsParser.EscapeInvalidMeta := CheckBox1.Checked;
-end;
-
-procedure TForm1.Button3Click(Sender: TObject);
-begin
- try
- ShowMessage(SsParser.GetParam(Edit1.Text, StrToInt(Edit2.Text)));
- except
- on EConvertError do ShowMessage('Edit2 is not Integer');
- end;
-end;
-
-procedure TForm1.Button4Click(Sender: TObject);
-var i: integer;
- from: Int64;
-const
- loop = 100;
-begin
- from := GetTickCount;
- for i := 1 to loop do
- SsParser.InputString := Edit1.Text;
- ShowMessage(Format('%d loops, %d ms.', [loop, GetTickCount - from]));
-end;
-
-end.
+++ /dev/null
-\88È\89º\82Í\81ASsParser\82ÌTagPattern\82É\8eg\82¦\82é\83p\83^\81[\83\93\95¶\8e\9a\97ñ\97á\82Å\82·\81B
-2001\94N3\8c\8e31\93ú\8c»\8dÝ\82Ì\8dÅ\90V\94Å\82É\91Î\89\9e\82µ\82Ä\82¢\82é\82Æ\8ev\82¢\82Ü\82·\81B
-\8cÃ\82¢\83}\81[\83N\83A\83b\83v\82à\8ec\82Á\82Ä\82¢\82Ü\82·\82Ì\82Å\8e©\95ª\82Å\82æ\82\8am\82©\82ß\82Ä\82\82¾\82³\82¢\81A\8aJ\94\8eÒ\82È\82ç\81c
-
-\83X\83N\83\8a\83v\83g\82Ì\96Ú\93I\82É\82æ\82Á\82Ä\82à\88È\89º\82Ì\83p\83^\81[\83\93\82Í\95Ï\82í\82Á\82Ä\82\82é\82Å\82µ\82å\82¤\82µ\81A
-\82Ü\82½\8f«\97\88\83^\83O\82ª\91\9d\82¦\82½\82è\8c¸\82Á\82½\82è\82·\82é\82±\82Æ\82ð\8dl\82¦\82é\82Æ\81A
-\8aO\95\94\83t\83@\83C\83\8b\82©\82ç\93Ç\82Ý\8d\9e\82Þ\82æ\82¤\82È\8c`\8e®\82É\82µ\82Ä\82¨\82\82Æ\82¢\82¢\82©\82à\82µ\82ê\82Ü\82¹\82ñ\81B
-
-===============\88È\89ºTagPattern===========
-\h
-\u
-\s[%D]
-\s%d
-!s%b
-!s%.
-\b[%D]
-\b%d
-!b%b
-!b%.
-\n
-\w%d
-!w%.
-\e
-\t
-\j%b
-!j
-\c
-\x
-\q%d%b%b
-\z
-\y
-\*
-\v
-\8%b
-\m%b
-\i[%D]
-\i%d
-!i%b
-!i%.
-\_i
-\a
-\_c%b
-\__c
-\-
-\1
-\2
-\3
-\4
-\|
-
-================\88È\89ºMetaPattern==================
-selfname2
-selfname
-keroname
-username
-screenwidth
-screenheight
-month
-day
-hour
-minute
-second
-j%b
-exh
-by
-bm
-bd
-o
-d
-h
-m
-s
-c
-0
-1
-et
-ms
-mz
-mc
-mh
-mt
-me
-mp
-m?
-dms
\ No newline at end of file
+++ /dev/null
-program Project1;
-
-uses
- Forms,
- Unit1 in 'Unit1.pas' {Form1};
-
-{$R *.RES}
-
-begin
- Application.Initialize;
- Application.CreateForm(TForm1, Form1);
- Application.Run;
-end.
+++ /dev/null
-object Form1: TForm1
- Left = 286
- Top = 205
- Width = 393
- Height = 241
- Caption = 'SakuraSeeker Test Program'
- Color = clBtnFace
- Font.Charset = SHIFTJIS_CHARSET
- Font.Color = clWindowText
- Font.Height = -12
- Font.Name = '\82l\82r \82o\83S\83V\83b\83N'
- Font.Style = []
- Menu = MainMenu1
- OldCreateOrder = False
- OnCreate = FormCreate
- PixelsPerInch = 96
- TextHeight = 12
- object ListView1: TListView
- Left = 0
- Top = 0
- Width = 385
- Height = 152
- Align = alClient
- Columns = <
- item
- Caption = 'ID'
- Width = 150
- end
- item
- Caption = 'HWND'
- Width = 80
- end
- item
- Caption = 'Name'
- Width = 150
- end>
- HideSelection = False
- ReadOnly = True
- TabOrder = 0
- ViewStyle = vsReport
- end
- object StatusBar1: TStatusBar
- Left = 0
- Top = 176
- Width = 385
- Height = 19
- Panels = <>
- SimplePanel = True
- end
- object Panel1: TPanel
- Left = 0
- Top = 152
- Width = 385
- Height = 24
- Align = alBottom
- BevelOuter = bvNone
- TabOrder = 2
- object Button1: TButton
- Left = 8
- Top = 0
- Width = 105
- Height = 25
- Caption = '&Send DirectSSTP'
- TabOrder = 0
- OnClick = Button1Click
- end
- object Button2: TButton
- Left = 152
- Top = 0
- Width = 75
- Height = 25
- Caption = 'Test2'
- TabOrder = 1
- OnClick = Button2Click
- end
- end
- object SakuraSeeker1: TSakuraSeeker
- OnAfterDetection = SakuraSeeker1AfterDetection
- OnDetectResultChanged = SakuraSeeker1DetectResultChanged
- FileMappingTarget.Strings = (
- 'Sakura'
- 'Usagi'
- 'UmiUmi')
- Left = 16
- Top = 32
- end
- object MainMenu1: TMainMenu
- Left = 176
- Top = 96
- object File1: TMenuItem
- Caption = '&File'
- object Update1: TMenuItem
- Caption = '&Update'
- OnClick = Update1Click
- end
- object Exit1: TMenuItem
- Caption = '&Exit'
- OnClick = Exit1Click
- end
- end
- end
- object Timer1: TTimer
- Enabled = False
- OnTimer = Timer1Timer
- Left = 48
- Top = 32
- end
- object TestDSstp1: TTestDSstp
- Left = 176
- Top = 32
- end
-end
+++ /dev/null
-unit Unit1;
-
-interface
-
-uses
- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- SakuraSeeker, ComCtrls, Menus, ExtCtrls, StdCtrls, TestDSstp;
-
-type
- TForm1 = class(TForm)
- ListView1: TListView;
- StatusBar1: TStatusBar;
- SakuraSeeker1: TSakuraSeeker;
- MainMenu1: TMainMenu;
- File1: TMenuItem;
- Update1: TMenuItem;
- Exit1: TMenuItem;
- Timer1: TTimer;
- Panel1: TPanel;
- Button1: TButton;
- TestDSstp1: TTestDSstp;
- Button2: TButton;
- procedure FormCreate(Sender: TObject);
- procedure Exit1Click(Sender: TObject);
- procedure Update1Click(Sender: TObject);
- procedure SakuraSeeker1AfterDetection(Sender: TObject);
- procedure SakuraSeeker1DetectResultChanged(Sender: TObject);
- procedure Timer1Timer(Sender: TObject);
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- private
- { Private \90é\8c¾ }
- protected
- procedure GetMessage(var Message: TWMCopyData); message WM_COPYDATA;
- public
- { Public \90é\8c¾ }
- procedure Update;
- end;
-
-var
- Form1: TForm1;
-
-implementation
-
-{$R *.DFM}
-
-procedure TForm1.FormCreate(Sender: TObject);
-var SakuraSeeker: TSakuraSeeker;
-begin
- SakuraSeeker := TSakuraSeeker.Create(Self);
- SakuraSeeker.BeginDetect;
-end;
-
-procedure TForm1.Exit1Click(Sender: TObject);
-begin
- Close;
-end;
-
-procedure TForm1.Update1Click(Sender: TObject);
-begin
- SakuraSeeker1.BeginDetect;
- Update;
-end;
-
-procedure TForm1.Update;
-var i: integer;
- Item: TListItem;
-begin
- ListView1.Items.Clear;
- for i := 0 to SakuraSeeker1.Count-1 do begin
- Item := ListView1.Items.Add;
- Item.Caption := SakuraSeeker1[i].ProcessID;
- Item.SubItems.Add(IntToStr(SakuraSeeker1[i].HWnd));
- Item.SubItems.Add(SakuraSeeker1[i].Name);
- end;
-end;
-
-procedure TForm1.SakuraSeeker1AfterDetection(Sender: TObject);
-begin
- StatusBar1.SimpleText := IntToStr(SakuraSeeker1.Count) + '\8c\8f ' +
- DateTimeToStr(Now);
- Update;
-end;
-
-procedure TForm1.SakuraSeeker1DetectResultChanged(Sender: TObject);
-begin
- ShowMessage('Status Changed!');
-end;
-
-procedure TForm1.Timer1Timer(Sender: TObject);
-begin
- SakuraSeeker1.BeginDetect;
-end;
-
-procedure TForm1.Button1Click(Sender: TObject);
-var Target: THandle;
- Dat: TCopyDataStruct;
- Str: String;
-begin
- if ListView1.Selected = nil then Exit;
- Target := SakuraSeeker1[ListView1.Selected.Index].HWnd;
-
- Str := 'SEND SSTP/1.4'#13#10'HWnd: '+IntToStr(Form1.Handle)+#13#10'Charset: Shift_JIS'#13#10 +
- 'Sender: Tester'#13#10'Script: \t\82Ä\82·\82Ä\82·\81B\e'#13#10#13#10;
-
- Dat.dwData := 9801;
- Dat.cbData := Length(Str);
- Dat.lpData := PChar(Str);
-
- SendMessage(Target, WM_COPYDATA, Form1.Handle, LPARAM(@Dat));
-
-end;
-
-procedure TForm1.GetMessage(var Message: TWMCopyData);
-begin
- inherited;
- ShowMessage(PChar(Message.CopyDataStruct^.lpData));
-end;
-
-procedure TForm1.Button2Click(Sender: TObject);
-begin
- if SakuraSeeker1.Count > 0 then
- TestDSstp1.Go(SakuraSeeker1[0].HWnd);
-end;
-
-end.
+++ /dev/null
-<html>
-
-<head>
-<meta http-equiv="Content-Language" content="ja">
-<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
-<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
-<meta name="ProgId" content="FrontPage.Editor.Document">
-<title>TSsParser</title>
-<style>
-<!--
-body { background-color: #FFFFFF; font-family: \82l\82r \83S\83V\83b\83N; color: #000000;
- font-size: 9pt; margin-left: 20px }
-td, th { font-size: 9pt }
-h1, h2, h3, h4, h5, h6 { margin-left: -10px }
-p { margin-top: 4px; margin-bottom: 4px }
-h1 { border: 2pt solid black }
-h2 { background-color: silver; border: 1pt solid gray }
-strong { text-decoration: underline; font-weight: bolder; color: brown }
-em { color: brown; font-style: normal }
-code { font-size: 100%; font-family: \82l\82r \83S\83V\83b\83N; color: green }
--->
-</style>
-</head>
-
-<body>
-
-<h1>TSsParser</h1>
-<p>\81u\82³\82\82ç\83X\83N\83\8a\83v\83g\81v\82Ì\91½\8b@\94\\83p\81[\83T\8b@\94\\82ð\8e\9d\82Â\94ñ\83r\83W\83\85\83A\83\8b\83R\83\93\83|\81[\83l\83\93\83g\82Å\82·\81B\92P\88ê\8ds\82Ì\82³\82\82ç\83X\83N\83\8a\83v\83g\82ð\8f\88\97\9d\82µ\82Ü\82·\81B\82Â\82Ü\82è\93T\8c^\93I\82É\82Í\t\82©\82ç\8en\82Ü\82è\e\82Å\8fI\82í\82é\81A1\8ds\82Ì\83X\83N\83\8a\83v\83g\82Å\82·\81BEntry\82È\82Ç\82ª\97\8d\82ñ\82¾\95¡\90\94\8ds\83X\83N\83\8a\83v\83g\82É\82Í\91Î\89\9e\82µ\82Ä\82¢\82Ü\82¹\82ñ\82ª\81A\95â\8f\95\82Æ\82µ\82Ä\82Í\8eg\82¦\82Ü\82·\81B</p>
-<h2>\8eå\82È\97p\93r</h2>
-<ul>
- <li>\93Æ\8e©\82ÌSSTP\83T\81[\83o\82ð\8d\\92z\82·\82é\8fê\8d\87\82Ì\95â\8f\95</li>
- <li>\82³\82\82ç\83X\83N\83\8a\83v\83g\82Ì\83G\83f\83B\83^\8dì\90¬\82Ì\82½\82ß\82Ì\95â\8f\95(\90F\95ª\82¯\81A\83^\83O\83`\83F\83b\83N\81Aetc...)</li>
- <li>SSTP\83N\83\89\83C\83A\83\93\83g\82ð\8d\\92z\82·\82é\8fê\8d\87\82Ì\81A\8e\96\91O\82Ì\83^\83O\83`\83F\83b\83N</li>
-</ul>
-<h2>\8eg\97p\8fð\8c\8f</h2>
-<ul>
- <li>\82¢\82í\82ä\82é\83t\83\8a\81[\82Ì\94Íáe\82É\8aÜ\82Ü\82ê\82é\83\\83t\83g\82Å\82·\81B\92\98\8dì\8c \82Í\95ú\8aü\82µ\82Ä\82¢\82Ü\82¹\82ñ\81B\88È\89º\82Ì\8fð\8c\8f\82É\82µ\82½\82ª\82Á\82Ä\82¨\8eg\82¢\82\82¾\82³\82¢\81B</li>
- <li>\8e\8e\97p\82Í\82à\82¿\82ë\82ñ\8e©\97R\82Å\82·\82ª\81A<strong>\82±\82Ì\83R\83\93\83|\81[\83l\83\93\83g\82ð\8eg\97p\82µ\82½\83v\83\8d\83O\83\89\83\80\82ð\8cö\8aJ\82·\82é\8fê\8d\87\82Í\81A\8dì\8eÒ\82É\88ê\95ñ\82·\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B</strong>\82±\82ê\82Í\81A\83o\83O\82ª\94\8c©\82³\82ê\82½\8fê\8d\87\82È\82Ç\82É\98A\97\8d\82·\82é\82½\82ß\82Æ\81A\92P\82É\8dì\8eÒ\82ª\94c\88¬\82µ\82Ä\82¨\82«\82½\82¢\82©\82ç\81A\82Å\82·\81B</li>
- <li>\8e©\8dì\83v\83\8d\83O\83\89\83\80\82Å\8eg\97p\82·\82é\8fê\8d\87\82É\82¨\82¢\82Ä\82Ì\89ü\95Ï\81E\89ü\91¢\82Í\82²\8e©\97R\82É\82Ç\82¤\82¼\81B</li>
- <li>\83R\83\93\83|\81[\83l\83\93\83g\8e©\91Ì\82Æ\82µ\82Ä\82Ì\8dÄ\94z\95z\82Í\81A\89ü\95Ï/\96¢\89ü\95Ï\82Ì\95Ê\82â\8c`\91Ô(\83\\81[\83X/\83o\83C\83i\83\8a)\82É\8aÖ\82í\82ç\82¸\81A\8c´\91¥\8bÖ\8e~\82µ\82Ü\82·\81B</li>
- <li>\83h\83L\83\85\83\81\83\93\83g\82È\82Ç\82É\82±\82Ì\83R\83\93\83|\81[\83l\83\93\83g\82Ì\92\98\8dì\8c \95\\8e¦\82µ\82ë\81A\82Æ\82¢\82Á\82½\96Ê\93|\82È\82±\82Æ\82ð\8b\90§\82Í\82µ\82Ü\82¹\82ñ\81B\8f\91\82¢\82Ä\82\82ê\82ê\82Î\8aì\82Ñ\82Ü\82·\82ª\81B</li>
- <li>\82¨\96ñ\91©\82Å\82·\82ª\81A\83R\83\93\83|\81[\83l\83\93\83g\82ð\8eg\97p\82µ\82½/\82µ\82È\82©\82Á\82½\82±\82Æ\82É\82æ\82Á\82Ä\94\90¶\82·\82é\82 \82ç\82ä\82é\90Ó\94C\82Í\82Æ\82ê\82Ü\82¹\82ñ\81B\8e©\8cÈ\90Ó\94C\82Å\82¨\8eg\82¢\82\82¾\82³\82¢\81B</li>
-</ul>
-<h2>SYNOPSIS - \8aî\96{\93I\82È\8eg\82¢\95û</h2>
-<p>TagPattern, MetaPattern\83v\83\8d\83p\83e\83B\82É\81A\82³\82\82ç\83X\83N\83\8a\83v\83g\82Ì\89ð\90Í\82Ì\8aî\8f\80\82Æ\82È\82é\83p\83^\81[\83\93\82ð\8ew\92è\82µ\82Ü\82·\81B\93Y\95t\82³\82ê\82Ä\82¢\82é\83e\83L\83X\83g\83t\83@\83C\83\8b\82ð\83R\83s\81[\82·\82ê\82Î\88ê\89\9eOK\82Å\82·\81B</p>
-<p>InputString\83v\83\8d\83p\83e\83B\82É\81A\83X\83N\83\8a\83v\83g\82ð\8ew\92è\82·\82ê\82Î\81A\83X\83N\83\8a\83v\83g\82ª\89ð\90Í\82³\82ê\81ACount,
-MarkUpType, Str\82Ì\8ae\83v\83\8d\83p\83e\83B\82ð\92Ê\82µ\82Ä\83A\83N\83Z\83X\82Å\82«\82Ü\82·\81B</p>
-<p>\97á\82¦\82Î\81A\81u<code>\t\s[0]\82¢\82ç\82Á\82µ\82á\82¢%\82Ü\82¹\81A%username\82³\82ñ\81A\s[5]\\300\82Ì\82¨\\94\83\82¢\8fã\82°\82É\82È\82è\82Ü\82·\82Ë\e</code>\81v\82Æ\82¢\82¤\95¶\8e\9a\97ñ\82ðInputString\82É\93ü\82ê\82½\8fê\8d\87\82É\82ͤCount=10\82Æ\82È\82è\81AMarkUpType,
-Str\83v\83\8d\83p\83e\83B\82É\82Í\88È\89º\82Ì\82æ\82¤\82È\92l\82ª\93ü\82è\82Ü\82·\81B</p>
-<p>TSsParser\82Å\82Í\81AIndex\82Å\8bæ\95Ê\82³\82ê\82é\83X\83N\83\8a\83v\83g\91f\95Ð\81A\82Â\82Ü\82è\89º\82Ì\95\\82É\82¨\82¯\82é\8ae\8ds\82ð<strong>\81u\83G\83\8c\83\81\83\93\83g\81v</strong>\82Æ\8cÄ\82Ô\82±\82Æ\82É\82µ\82Ü\82·\81B</p>
-<table border="1">
- <tr>
- <th>Index</th>
- <th>Str[Index]</th>
- <th>MarkUpType[Index]</th>
- </tr>
- <tr>
- <td>0</td>
- <td>\t</td>
- <td>mtTag</td>
- </tr>
- <tr>
- <td>1</td>
- <td>\s[0]</td>
- <td>mtTag</td>
- </tr>
- <tr>
- <td>2</td>
- <td>\82¢\82ç\82Á\82µ\82á\82¢%\82Ü\82¹\81A<em><sup>\81¦</sup></em></td>
- <td>mtStr</td>
- </tr>
- <tr>
- <td>3</td>
- <td>%username</td>
- <td>mtMeta</td>
- </tr>
- <tr>
- <td>4</td>
- <td>\82³\82ñ\81A</td>
- <td>mtStr</td>
- </tr>
- <tr>
- <td>5</td>
- <td>\s[5]</td>
- <td>mtTag</td>
- </tr>
- <tr>
- <td>6</td>
- <td>\\300\82Ì\82¨<em><sup>\81¦</sup></em></td>
- <td>mtStr</td>
- </tr>
- <tr>
- <td>7</td>
- <td>\\94\83</td>
- <td>mtTagErr</td>
- </tr>
- <tr>
- <td>8</td>
- <td>\82¢\8fã\82°\82É\82È\82è\82Ü\82·\82Ë</td>
- <td>mtStr</td>
- </tr>
- <tr>
- <td>9</td>
- <td>\e</td>
- <td>mtTag</td>
- </tr>
-</table>
-<ul>
- <li>\82±\82ê\82Í\83f\83t\83H\83\8b\83g\82Ì\83p\83^\81[\83\93\82ð\8eg\97p\82µ\82½\93T\8c^\93I\82È\89ð\90Í\82Ì\8c\8b\89Ê\82Å\82 \82è\81A\89ð\90Í\8c\8b\89Ê\82Í\83p\83^\81[\83\93\82É\82æ\82Á\82Ä\95Ï\89»\82µ\82Ü\82·\81B\8bÉ\92[\82É\8c¾\82¦\82Î\81A\w8\82ð\83^\83O\82Æ\82µ\82Ä\94F\8e¯\82µ\82È\82¢\81A\82Æ\82¢\82¤\82±\82Æ\82à\89Â\94\\82Å\82·\81B</li>
- <li>Str[2]\82É\82Â\82¢\82Ä\82Í\81AEscapeInvalidMeta = false\82Ì\8fê\8d\87\82Ì\8c\8b\89Ê\82Å\82·\81Btrue\82Ì\8fê\8d\87\82Í\81A\81u\82¢\82ç\82Á\82µ\82á\82¢\%\82Ü\82¹\81v\82Æ\82È\82è\82Ü\82·\81B</li>
- <li>Str[6]\82É\82Â\82¢\82Ä\82Í\81ALeaveEscape = true\82Ì\8fê\8d\87\82Ì\8c\8b\89Ê\82Å\82·\81Bfalse\82Ì\8fê\8d\87\82Í\81A\81u\300\82Ì\82¨\81v\82Æ\82È\82è\82Ü\82·\81B</li>
-</ul>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83v\83\8d\83p\83e\83B</h2>
-<h3>LeaveEscape: boolean [\8eÀ/\90Ý][\93Ç/\8f\91]</h3>
-<p>\83f\83t\83H\83\8b\83g\82Ítrue\82Å\82·\81BmtStr\82Å\90Ø\82è\8fo\82³\82ê\82½\92Ê\8fí\95¶\8e\9a\97ñ\82É\8aÜ\82Ü\82ê\82é\81A<code>\\</code>
-\82â <code>\%</code>
-\82Ì\95¶\8e\9a\97ñ\82ð\95Ï\8a·\82¹\82¸\82É\8ec\82·\82©\82Ç\82¤\82©\90Ý\92è\82µ\82Ü\82·\81Bfalse\82É\82·\82é\82±\82Æ\82Å\81A<code>\\</code>
-\82â <code>\%</code> \82Í1\95¶\8e\9a\82É\95Ï\8a·\82³\82ê\82ÄmtStr\83G\83\8c\83\81\83\93\83g\82É\91ã\93ü\82³\82ê\82Ü\82·\81B</p>
-<p>TSsParser\82ð\83X\83N\83\8a\83v\83g\82Ì\90F\95ª\82¯\82â\81A\8aë\8c¯\83^\83O\83`\83F\83b\83N\82È\82Ç\82É\8eg\97p\82·\82é\8fê\8d\87\82Í\81A\95¶\8e\9a\97ñ\92·\82â\83X\83N\83\8a\83v\83g\82»\82Ì\82à\82Ì\82ª\95Ï\82í\82ç\82È\82¢\82æ\82¤\82Étrue\82É\82µ\82Ü\82·\81B\93Æ\8e©SSTP\83T\81[\83o\8aJ\94\82Ì\8fê\8d\87\82È\82Ç\82Í\81Afalse\82É\82·\82é\82±\82Æ\82Å\95Ï\8a·\82Ì\8eè\8aÔ\82ð\8fÈ\82¯\82Ü\82·\81B</p>
-<p>\95Ï\8dX\82µ\82½\8fê\8d\87\81A\82»\82Ì\8c\8b\89Ê\82Í\8e\9f\89ñ\82Ì\89ð\90Í\82©\82ç\94½\89f\82³\82ê\82Ü\82·\81B</p>
-<h3>EscapeInvalidMeta: boolean [\8eÀ/\90Ý][\93Ç/\8f\91]</h3>
-<p>\83f\83t\83H\83\8b\83g\82Ífalse\82Å\82·\81BMetaPattern\82É\82æ\82Á\82Ä\81A%\95¶\8e\9a\88È\8d~\82ª\83\81\83^\95¶\8e\9a\97ñ\82Æ\94»\92f\82Å\82«\82È\82¢\8fê\8d\87\81A%\95¶\8e\9a\82ð\81u\%\81v\82É\83G\83X\83P\81[\83v\82·\82é\82©\82Ç\82¤\82©\90Ý\92è\82µ\82Ü\82·\81B</p>
-<p>TSsParser\82ð\83X\83N\83\8a\83v\83g\82Ì\90F\95ª\82¯\82È\82Ç\82É\8eg\97p\82·\82é\8fê\8d\87\82Í\81A\95¶\8e\9a\97ñ\92·\82ª\95Ï\82í\82ç\82È\82¢\82æ\82¤\82Éfalse\82É\82µ\82Ü\82·\81B\8c\98\98S\82È\83X\83N\83\8a\83v\83g\8dì\90¬\82Ì\82½\82ß\82Ì\95¶\96@\83`\83F\83b\83N\82Ì\82½\82ß\82É\82Ítrue\82É\82µ\82Ü\82·\81B</p>
-<p>\95Ï\8dX\82µ\82½\8fê\8d\87\81A\82»\82Ì\8c\8b\89Ê\82Í\8e\9f\89ñ\82Ì\89ð\90Í\82©\82ç\94½\89f\82³\82ê\82Ü\82·\81B</p>
-<h3>TagPattern: TStrings [\8eÀ/\90Ý][\93Ç/\8f\91]<br>
-MetaPattern: TStrings [\8eÀ/\90Ý][\93Ç/\8f\91]</h3>
-<p>\82»\82ê\82¼\82ê\81A\83^\83O\90Ø\82è\8fo\82µ\82Ì\82½\82ß\82Ì\83p\83^\81[\83\93\81A\83\81\83^\95¶\8e\9a\97ñ\90Ø\82è\8fo\82µ\82Ì\82½\82ß\82Ì\83p\83^\81[\83\93\82Å\82·\81B\95Ê\8d\80\81u\83p\83^\81[\83\93\82É\82Â\82¢\82Ä\81v\8eQ\8fÆ\81B\95Ï\8dX\82µ\82½\8fê\8d\87\81A\82»\82Ì\8c\8b\89Ê\82Í\8e\9f\89ñ\82Ì\89ð\90Í\82©\82ç\94½\89f\82³\82ê\82Ü\82·\81B</p>
-<h3>InputString: String [\8eÀ\82Ì\82Ý][\93Ç/\8f\91]</h3>
-<p>\82±\82Ì\83v\83\8d\83p\83e\83B\82É\8f\91\82«\8d\9e\82ñ\82Å\81A\89ð\90Í\82·\82×\82«\83X\83N\83\8a\83v\83g\82ð\90Ý\92è\82µ\82Ü\82·\81B\93Ç\82Ý\8fo\82µ\82Ì\8fê\8d\87\82Í\8dÅ\8cã\82É\89ð\90Í\82µ\82½\83X\83N\83\8a\83v\83g\82ª\93ü\82Á\82Ä\82¢\82Ü\82·\81B</p>
-<h3>Count: integer [\8eÀ\82Ì\82Ý][\93Ç\82Ì\82Ý]</h3>
-<p>\83X\83N\83\8a\83v\83g\89ð\90Í\8cã\82Ì\83G\83\8c\83\81\83\93\83g\91\8d\90\94\82ð\95Ô\82µ\82Ü\82·\81B\83X\83N\83\8a\83v\83g\83G\83\8c\83\81\83\93\83g\82ð\83\8b\81[\83v\8f\88\97\9d\82·\82é\8fê\8d\87\82Ì\8fã\8cÀ\92l\82Æ\82µ\82Ä\8eg\97p\82µ\82Ü\82·\81B</p>
-<h3>Str[Index: integer]: String [\8eÀ\82Ì\82Ý][\93Ç\82Ì\82Ý]</h3>
-<p>\89ð\90Í\8cã\82Ì\95¶\8e\9a\97ñ\82ð\95Ô\82µ\82Ü\82·\81B\8dÅ\8f\89\82Ì\83G\83\8c\83\81\83\93\83g\82ÍStr[0]\81A\8dÅ\8cã\82Ì\83G\83\8c\83\81\83\93\83g\82ÍStr[Count-1]\82Å\82·\81BLeaveExcape,
-EscapeInavlidMeta\82Ì\97¼\83v\83\8d\83p\83e\83B\82Ì\89e\8b¿\82ð\8eó\82¯\82Ü\82·\81B</p>
-<h3>Extra[Index: integer]: String [\8eÀ\82Ì\82Ý][\93Ç/\8f\91]</h3>
-<p>\82²\8e©\97R\82É\82¨\8eg\82¢\82\82¾\82³\82¢\81A\82Ì\95¶\8e\9a\97ñ\82Å\82·\81B\89ð\90Í\8c\8b\89Ê\82É\83\81\83\82\82ð\82Â\82¯\82½\82è\82·\82é\97p\93r\82É\82Ç\82¤\82¼\81B</p>
-<h3>MarkUpType[Index: integer]: TSsMarkUpType [\8eÀ\82Ì\82Ý][\93Ç\82Ì\82Ý]</h3>
-<p><code>type TSsMarkUpType = (mtTag, mtMeta, mtTagErr, mtStr);</code></p>
-<p>\83G\83\8c\83\81\83\93\83g\82Ì\8eí\97Þ\82ð\95Ô\82µ\82Ü\82·\81B\8dÅ\8f\89\82Ì\83G\83\8c\83\81\83\93\83g\82ÍMarkUpType[0]\81A\8dÅ\8cã\82Ì\83G\83\8c\83\81\83\93\83g\82ÍMarkUpType[Count-1]\82Å\82·\81B</p>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83C\83x\83\93\83g</h2>
-<h3>OnSsParse: TSsParseEvent</h3>
-<p><code>TSsParseEvent = procedure (Sender: TObject; const Script: String;<br>
-var Len: integer; var MarkType: TSsMarkUpType; var Extra: String) of object;</code></p>
-<p>\83^\83O\82Ü\82½\82Í\83\81\83^\95¶\8e\9a\97ñ\82Ì\83p\83^\81[\83\93\83}\83b\83`\8e\8e\8ds\82Ì\91O\82É\8cÄ\82Ñ\8fo\82³\82ê\82Ü\82·\81B\82±\82Ì\83C\83x\83\93\83g\82ð\8eg\97p\82·\82é\82Æ\81ATagPattern,
-MetaPattern\82Ì\8ed\97l\82Å\82Í\90Ø\82è\8fo\82¹\82È\82¢\83}\81[\83N\83A\83b\83v\82ª\8f«\97\88\82Å\82«\82½\8fê\8d\87\82É\81A\83X\83N\83\8a\83v\83g\82©\82ç\82Ì\83^\83O\82â\83\81\83^\95¶\8e\9a\97ñ\82Ì\90Ø\82è\8fo\82µ\82ð\8e©\97R\82É\83R\81[\83f\83B\83\93\83O\82Å\82«\82Ü\82·\81B</p>
-<p>Script\82Í\89ð\90Í\93r\92\86\82Ì\83X\83N\83\8a\83v\83g\82Å\82·\81B1\95¶\8e\9a\96Ú\82Í\95K\82¸\81u\\81v\82Ü\82½\82Í\81u%\81v\82Æ\82È\82Á\82Ä\82¢\82Ü\82·\81BLen\82Í\8cÄ\82Ñ\8fo\82µ\8e\9e\82É\82Í0\82ª\91ã\93ü\82³\82ê\82Ä\82¢\82Ü\82·\81B</p>
-<p>\82±\82Ì\83C\83x\83\93\83g\83n\83\93\83h\83\89\93à\82Å\81AScript\82Ì\90æ\93ª\82©\82ç\8en\82Ü\82é\95\94\95ª\82ð\89ð\90Í\82µ\82Ü\82·\81B\83G\83\8c\83\81\83\93\83g\82ð\89ð\8eß\82Å\82«\82½\8fê\8d\87\82Í\82»\83G\83\8c\83\81\83\93\83g\82Ì\92·\82³(\83o\83C\83g\90\94)\82ðLen(>2)\82É\81A\83^\83C\83v\82ðMarkType\82É\81A\95K\97v\82È\82çExtra\82É\95¶\8e\9a\97ñ\82ð\93ü\82ê\82Ä\81A\83C\83x\83\93\83g\83n\83\93\83h\83\89\82ð\8fI\97¹\82µ\82Ä\82\82¾\82³\82¢\81B\89ð\8eß\82Å\82«\82È\82¢\8fê\8d\87\82ÍLen=0\82Ì\82Ü\82Ü\8fI\97¹\82·\82ê\82Î\81A\82»\82Ì\82Ü\82Ü\92Ê\8fí\82Ì\83p\83^\81[\83\93\83}\83b\83`\8e\8e\8ds\82É\93ü\82è\82Ü\82·\81B</p>
-<p>\97v\82Í\81A\95¶\8e\9a\97ñ\90æ\93ª\82©\82ç\82±\82±\82Ü\82Å\82ª\83^\83O(\83\81\83^\95¶\8e\9a\97ñ)\82¾\82æ\81A\82Æ\82¢\82¤\82Ì\82ð\8c©\82Â\82¯\82Ä\95Ô\82µ\82Ä\82\82ê\81A\82Æ\82¢\82¤\82±\82Æ\82Å\82·\81B</p>
-<p>Len>1\82Å\82 \82Á\82Ä\82à\81AScript\82Ì1\95¶\8e\9a\96Ú\82ª\\82È\82Ì\82ÉMarkUpType\82ªmtTag\82Å\82àmtTagErr\82Å\82à\82È\82¢\8fê\8d\87\81A\82 \82é\82¢\82ÍScript\82Ì1\95¶\8e\9a\96Ú\82ª%\82È\82Ì\82ÉMarkUpType\82ªmtMeta\82Å\82È\82¢\8fê\8d\87\82Í\97á\8aO\82ª\94\90¶\82µ\82Ü\82·\81B</p>
-<h2>\83\8a\83t\83@\83\8c\83\93\83X-\83\81\83\\83b\83h</h2>
-<h3>function Match(Str, Pattern: String): integer;</h3>
-<p>SSTP\89ð\90Í\97p\82Ì\83p\83^\81[\83\93\83}\83b\83`\83\93\83O\82ð\8ds\82¢\82Ü\82·\81BStr\82Ì\90æ\93ª\95\94\95ª\81APattern\82Å\8e¦\82³\82ê\82é\83p\83^\81[\83\93\82ª\91¶\8dÝ\82·\82ê\82Î\81A\83}\83b\83`\82µ\82½\95\94\95ª\82Ì\83o\83C\83g\90\94(\95¶\8e\9a\90\94\82Å\82Í\82È\82¢)\82ð\95Ô\82µ\82Ü\82·\81B\83}\83b\83`\83\93\83O\82ª\8e¸\94s\82µ\82½\8fê\8d\87\82Í0\82ð\95Ô\82µ\82Ü\82·\81B</p>
-<p>\97á\82¦\82Î\81A</p>
-<p><code>Match('ABC', 'AB') = 2<br>
-Match('ABC', 'A%.%.') = 3<br>
-Match('A20BC', 'A%D') = 3<br>
-Match('\s[20]', '\s%b') = 6<br>
-Match('\s2', '\s%b') = 0</code></p>
-<h3>function GetParam(Tag: String; const Index: integer): String;</h3>
-<p><code>\s[3]</code> \82â <code>\_c[\82±\82ñ\82É\82¿\82Í]</code> , <code>\q1[#cancel][\83L\83\83\83\93\83Z\83\8b]</code>
-\82Æ\82¢\82Á\82½\83}\81[\83N\83A\83b\83v\82©\82ç\81A\83X\83N\83E\83F\83A\83u\83\89\83P\83b\83g\82É\88Í\82Ü\82ê\82½\83p\83\89\83\81\81[\83^\82ð\8eæ\82è\8fo\82µ\82Ü\82·\81BTag\82Í\8eæ\82è\8fo\82µ\82½\82¢\83^\83O\91S\91Ì\81AIndex\82Í\89½\94Ô\96Ú\82Ì\83p\83\89\83\81\81[\83^\82ð\8eæ\82è\8fo\82·\82©\81A\82Å\81A1\82©\82ç\8en\82Ü\82è\82Ü\82·\81B<code>\\</code>
-\82â <code>\]</code>
-\82É\82æ\82é\83G\83X\83P\81[\83v\82É\91Î\89\9e\82µ\81A\82±\82ê\82ç\82Ì\83G\83X\83P\81[\83v\82Í\8e©\93®\93I\82É\8c³\82Ì\8c`\82É\96ß\82³\82ê\82Ü\82·\81B</p>
-<p>Index\82ª\83[\83\8d\88È\89º\82Ì\8fê\8d\87\81A\83p\83\89\83\81\81[\83^\82ª\8eæ\82è\8fo\82¹\82È\82©\82Á\82½\8fê\8d\87\82È\82Ç\82É\82Í\81A\8bó\95¶\8e\9a\97ñ\82ª\95Ô\82è\82Ü\82·\81B</p>
-<p><code>GetParam('\s[3]', 1) = '3';<br>
-GetParam('\s[3]', 2) = '';<br>
-GetParam('\j[http://www.yahoo.co.jp/index[1\].html]', 1) =
-'http://www.yahoo.co.jp/index[1].html'</code></p>
-<h3>function EscapeParam(const Param: String): String;</h3>
-<p>\j[] \82Ì\92\86\82É\88À\91S\82É\91ã\93ü\82Å\82«\82é\82æ\82¤\82É\81A<code>\</code> \82ð <code>\\</code>
-\82É\81A<code>]</code> \82ð <code>\]</code>
-\82É\95Ï\8a·\82µ\82½\95¶\8e\9a\97ñ\82ð\95Ô\82µ\82Ü\82·\81B\8c\98\98S\82È\83X\83N\83\8a\83v\83g\8dì\90¬\82Ì\82½\82ß\82É\82Í\90¥\94ñ\97\98\97p\82·\82é\82æ\82¤\82É\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<h2>\83p\83^\81[\83\93\82É\82Â\82¢\82Ä</h2>
-<p>TagPattern, MetaPattern\83v\83\8d\83p\83e\83B\82É\81A\82³\82\82ç\83X\83N\83\8a\83v\83g\82ð\89ð\90Í\82·\82é\82Æ\82«\82Ì\83p\83^\81[\83\93\82ð\8ew\92è\82µ\82Ü\82·\81B</p>
-<p>\92Ê\8fí\82Í\83A\81[\83J\83C\83u\93¯\8d«\82Ì\83e\83L\83X\83g\83t\83@\83C\83\8b\82©\82ç\83R\83s\81[\82·\82ê\82Î\96â\91è\82Í\82 \82è\82Ü\82¹\82ñ\82ª\81A\8f«\97\88\82Ì\83^\83O\8ag\92£\93\99\82Ì\82½\82ß\82É\82±\82Ì\8ed\97l\82ª\91¶\8dÝ\82µ\82Ü\82·\81B\82±\82Ì\83p\83^\81[\83\93\83\8a\83X\83g\8e©\90g\82ð\83e\83L\83X\83g\83t\83@\83C\83\8b\82È\82Ç\82©\82ç\93Ç\82Ý\8d\9e\82Þ\82æ\82¤\82É\82·\82é\82±\82Æ\82Å\81A\8eÀ\8ds\83t\83@\83C\83\8b\82ð\8dX\90V\82¹\82¸\82É\83^\83O\89ð\90Í\95\94\82ð\8dX\90V\82·\82é\82±\82Æ\82à\89Â\94\\82Å\82·\81B</p>
-<p>\81u\83^\83O\82ª\\82Å\8en\82Ü\82é\81v\81u\83\81\83^\95¶\8e\9a\97ñ\82ª%\82Å\8en\82Ü\82é\81v\81u\\\82â\%\82Í\83G\83X\83P\81[\83v\81v\82È\82Ç\82Æ\82¢\82Á\82½\8aî\96{\93I\82È\8ed\97l\82ª\95Ï\8dX\82É\82È\82ç\82È\82¢\8cÀ\82è\81A\83^\83O\82Ì\92Ê\8fí\82Ì\91\9d\8c¸\82É\8aÖ\82µ\82Ä\82Í\81APattern\83v\83\8d\83p\83e\83B\82ð\95Ï\8dX\82·\82é\82±\82Æ\82Å\81A\91å\92ï\91Î\89\9e\82Å\82«\82é\82Æ\8ev\82¢\82Ü\82·\81B\93Á\8eê\82È\8f\91\82«\95û\82Ì\8fê\8d\87\81A\83C\83x\83\93\83g\82ð\97\98\97p\82·\82é\95û\96@\82à\82 \82è\82Ü\82·\81B</p>
-<h3>\83p\83^\81[\83\93\82Ì\8f\91\82«\95û\8aT\97ª</h3>
-<p>TagPattern\82Ì\8ae\8ds\82ª\81A1\82Â\82Ì\83^\83O\82É\89\9e\93\9a\82·\82é\83p\83^\81[\83\93\82Å\82·\81B\97á\82¦\82Î\81A\81u\e\81v\82Æ\82¢\82¤\8ds\82ðTagPattern\83v\83\8d\83p\83e\83B\82É\92Ç\89Á\82·\82é\82±\82Æ\82Å\81A\81u\e\81v\82Æ\82¢\82¤\83^\83O\82É\94½\89\9e\82Å\82«\82é\82æ\82¤\82É\82È\82è\81A\81u!_c\81v\82Æ\82¢\82¤\8ds\82ð\92Ç\89Á\82·\82ê\82Î\81A\81u\_c\81v\82Æ\82¢\82¤\83^\83O\82Í\83G\83\89\81[\82Å\82 \82é\81A\82Æ\89ð\90Í\82·\82é\82æ\82¤\82É\82È\82è\82Ü\82·\81B</p>
-<p>\83p\83^\81[\83\93\82Í\8fã\82©\82ç\8f\87\94Ô\82É\8e\8e\8ds\82³\82ê\81A\83}\83b\83`\82µ\82½\8e\9e\93_\82Å\8e\8e\8ds\82ð\92\86\8e~\82µ\82Ü\82·\81B</p>
-<p>TagPattern\82Ì\8ae\8ds\82Í\81A\\8bL\8d\86\82Ü\82½\82Í!\8bL\8d\86\82Å\8en\82ß\82Ä\82\82¾\82³\82¢\81B\\8bL\8d\86\82Å\8en\82Ü\82é\83p\83^\81[\83\93\82Í\81A\83}\83b\83`\82µ\82½\8fê\8d\87\82»\82ê\82ð\90³\93\96\82È\83^\83O\82ð\82µ\82Ä\8f\88\97\9d\82µ\82Ü\82·\81B!\8bL\8d\86\82Å\8en\82Ü\82é\83p\83^\81[\83\93\82Í\81A\83}\83b\83`\82µ\82½\8fê\8d\87\82»\82ê\82ð\83^\83O\82Ì\83G\83\89\81[\82Æ\82µ\82Ä\8f\88\97\9d\82µ\82Ü\82·\81B</p>
-<p>\97á\82¦\82Î\81A\81u\w\81v\83^\83O\82Ì\8f\88\97\9d\82Ì\82½\82ß\82É\82Í\81A</p>
-<blockquote>
- <p><code>\w%d<br>
- !w%.</code></p>
-</blockquote>
-<p>\82Æ\82¢\82¤2\8ds\82ðTagPattern\82É\89Á\82¦\82é\82Æ\82æ\82¢\82Å\82µ\82å\82¤\81B\82±\82ê\82Å\81A<code>\w9</code>
-\93\99\82Í\90³\93\96\82È\83^\83O\82Å\81A\90\94\8e\9a\88È\8aO\82ªw\82Ì\8cã\82É\82«\82½\8fê\8d\87\82Í <code>\w\82 </code>
-\82Æ\82¢\82Á\82½\91S\91Ì\82ð\83^\83O\83G\83\89\81[\82Æ\82µ\82Ä\8f\88\97\9d\82·\82é\81A\82Æ\82¢\82¤\88Ó\96¡\82É\82È\82è\82Ü\82·\81B</p>
-<p>MetaPattern\82Ì\8ae\8ds\82ª\81A1\82Â\82Ì\83\81\83^\95¶\8e\9a\97ñ\82É\89\9e\93\9a\82·\82é\83p\83^\81[\83\93\82Å\82·\81B\97á\82¦\82Î\81uselfname\81v\82Æ\82¢\82¤\8ds\82ðMetaPattern\83v\83\8d\83p\83e\83B\82É\92Ç\89Á\82·\82é\82±\82Æ\82Å\81A\81u%selfname\81v\82Æ\82¢\82¤\83\81\83^\95¶\8e\9a\97ñ\82É\94½\89\9e\82µ\82Ü\82·\81BMetaPattern\82Ì\8fê\8d\87\82Í\81A%\88È\8d~\82É\91±\82\95¶\8e\9a\97ñ\82ð\82»\82Ì\82Ü\82Ü\8bL\8fq\82·\82é\82æ\82¤\82È\8ai\8dD\82Å\91å\8fä\95v\82Å\82·\81B</p>
-<p>\83}\83b\83`\8e\8e\8ds\82Í\83p\83^\81[\83\93\83\8a\83X\83g\82Ì\8fã\82©\82ç\8f\87\94Ô\82É\8ds\82í\82ê\82é\82½\82ß\81AMetaPattern\83v\83\8d\83p\83e\83B\82Å\81A\97á\82¦\82Î
-<code>selfname2</code> \82Æ\82¢\82¤\8ds\82Í <code>selfname</code>
-\82æ\82è\8fã\82É\94z\92u\82³\82ê\82é\95K\97v\82ª\82 \82è\82Ü\82·\81B</p>
-<h3>\83p\83^\81[\83\93\82Ì\8bL\8fq\95û\96@</h3>
-<p>\90³\8bK\95\\8c»\82Ý\82½\82¢\82È\82à\82Ì\82Å\82·\82ª\81A\82»\82±\82Ü\82Å\8d\82\8b@\94\\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81B\8bt\82É\90³\8bK\95\\8c»\82Å\82Í\95\\8c»\82Å\82«\82È\82¢\95\\8bL\82É\91Î\89\9e\82µ\82Ä\82½\82è\82à\82µ\82Ü\82·\82ª\81B</p>
-<ul>
- <li><code>%d</code> \82Í\94C\88Ó\82Ì\90®\90\941\95¶\8e\9a\82É\83}\83b\83`\82µ\82Ü\82·\81B<code>\s%d</code>
- \82Æ\82¢\82¤\83p\83^\81[\83\93\82Í\81A<code>\s0</code> \82â <code>\s3</code>
- \82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%D</code> \82Í\94C\88Ó\82Ì\90®\90\94\97ñ\82É\83}\83b\83`\82µ\82Ü\82·\81B<code>\s[%D]</code>
- \82Æ\82¢\82¤\83p\83^\81[\83\93\82Í\81A<code>\s[0]</code> \82â <code>\s[10]</code>
- \82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%b</code> \82Í[]\82Å\88Í\82Ü\82ê\82½\95¶\8e\9a\97ñ\82É\83}\83b\83`\82µ\82Ü\82·\81B<code>\]</code>
- \82â <code>\\</code> \82É\82æ\82é\83G\83X\83P\81[\83v\82É\91Î\89\9e\82µ\82Ü\82·\81B<code>\j%b</code>
- \82Æ\82¢\82¤\83p\83^\81[\83\93\82Í\81A <code>\j[http://www.a.com/index[1\].html]</code>
- \82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%.</code> \82Í\94C\88Ó\82Ì1\95¶\8e\9a\82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%m</code>
- \82Í\94C\88Ó\82Ì\83V\83\93\83O\83\8b\83o\83C\83g\95¶\8e\9a\82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%M</code>
- \82Í\94C\88Ó\82Ì\83}\83\8b\83`\83o\83C\83g\95¶\8e\9a\82É\83}\83b\83`\82µ\82Ü\82·\81B</li>
- <li><code>%%</code> \82Í\81u%\81v\8bL\8d\86\82»\82Ì\82à\82Ì\82É\83}\83b\83`\82µ\82Ü\82·\81B\8eg\97p\82µ\82È\82¢\82Æ\82¢\82¯\82È\82¢\8b@\89ï\82Í\82¨\82»\82ç\82\8f«\97\88\82à\82 \82è\82Ü\82¹\82ñ\81B</li>
- <li>%\82Ì\92¼\8cã\82ª\81A\8fã\8bL\82Ì\82¢\82¸\82ê\82Å\82à\82È\82¢\95¶\8e\9a\82Å\82 \82é\8fê\8d\87\81A\82Æ\82è\82 \82¦\82¸
- <code>%%</code>
- \82Æ\82µ\82Ä\89ð\8eß\82µ\82Ü\82·\82ª\81A\82±\82Ì\82æ\82¤\82È\8eg\82¢\95û\82Í\82µ\82È\82¢\82Å\82\82¾\82³\82¢\81B</li>
- <li>\82»\82ê\88È\8aO\82Ì\95¶\8e\9a\82Í\82·\82×\82Ä\82»\82Ì\95¶\8e\9a\82»\82Ì\82à\82Ì\82É\83}\83b\83`\82µ\82Ü\82·\81B\\82à\8aÜ\82ß\81B</li>
-</ul>
-<h3>\83}\83b\83`\83\93\83O\8fÚ\8d×</h3>
-<p>\83}\83b\83`\83\93\83O\82Í\88È\89º\82Ì\82æ\82¤\82É\8ds\82í\82ê\82Ü\82·\81B</p>
-<ol>
- <li>\83}\81[\83N\83A\83b\83v\82Æ\8ev\82í\82ê\82é\81u\\81v\82Ü\82½\82Í\81u%\81v\82ð\90æ\93ª\82©\82ç\92T\82µ\82Ü\82·\81B\81u\\\81v\82â\81u\%\81v\82Í\83G\83X\83P\81[\83v\82Å\82·\82Ì\82Å\93Ç\82Ý\94ò\82Î\82³\82ê\82Ü\82·\81B\82»\82Ì\95\94\95ª\82Ü\82Å\82Í\81A\83}\81[\83N\83A\83b\83v\82Å\82Í\82È\82¢\92Ê\8fí\82Ì\95¶\8e\9a\97ñ\82Å\82·\81B</li>
- <li>\81u%\81v\82Å\8en\82Ü\82é\8fê\8d\87\82Í\83\81\83^\95¶\8e\9a\97ñ\82Ì\89Â\94\\90«\82ª\82 \82é\82Ì\82Å\81A\83}\83b\83`\83\93\83O\82ð\8aJ\8en\82µ\82Ü\82·\81B%\88È\89º\82ª\97L\8cø\82È\83\81\83^\95¶\8e\9a\97ñ\82Æ\82µ\82Ä\89ð\8eß\82Å\82«\82È\82¢\8fê\8d\87\82Í\81A\81u%\81v\82Í\88Ó\96¡\82ð\82È\82³\82È\82¢\92Ê\8fí\82Ì%\95¶\8e\9a\97ñ\82Æ\82µ\82Ä\81A\%\82É\83G\83X\83P\81[\83v\82³\82ê\82Ä(EscapeInvalidMeta\82Å\90§\8cä\89Â\94\)\91O\82ÌmtStr\83G\83\8c\83\81\83\93\83g\82É\82\82Á\82Â\82«\82Ü\82·\81B</li>
- <li>\81u\\81v\82Å\8en\82Ü\82é\8fê\8d\87\82Ì\83}\83b\83`\83\93\83O\82ð\8aJ\8en\82µ\82Ü\82·\81B\\88È\89º\82ª\90³\8bK\82Ì\83^\83O\82Æ\82µ\82Ä\89ð\8eß\82Å\82«\82½\8fê\8d\87\82ÍmtTag\83^\83C\83v\82Æ\82µ\82Ä\81A\83G\83\89\81[\83^\83O\82Æ\82È\82Á\82½\8fê\8d\87\82ÍmtTagErr\82Æ\82µ\82Ä\90Ø\82è\8fo\82µ\82Ü\82·\81BTagPattern\82Ì\82Ç\82Ì\8ds\82É\82à\83}\83b\83`\82µ\82È\82©\82Á\82½\8fê\8d\87\82Í\81A\\82Ì\8e\9f\82Ì1\95¶\8e\9a\8aÜ\82ß\82Ä\81A\83G\83\89\81[\83^\83O\82Æ\82µ\82Ä\90Ø\82è\8fo\82µ\82Ü\82·\81B</li>
- <li>\8dÅ\8f\89\82É\96ß\82è\82Ü\82·\81B</li>
-</ol>
-<h2>\8eg\97p\97á - SSTP\83T\81[\83o</h2>
-<p>\93Æ\8e©SSTP\83T\81[\83o\8d\\92z\95â\8f\95\82É\97\98\97p\82·\82é\8fê\8d\87\82Í\81ALeaveEscape :=
-false; EscapeInvalidMeta := false; \82Æ\82·\82é\82Æ\8aÈ\92P\82Å\82·\81B</p>
-<p><code>SsParser1.InputString := Edit1.Text;<br>
-for i := 0 to SsParser1.Count-1 do begin<br>
- case SsParser.MarkUpType[i] of<br>
- mtStr: Memo1.Lines.Add(SsParser.Str[i]);<br>
- mtTag: {\83^\83O\8aÖ\98A\82Ì\8f\88\97\9d}<br>
- mtTagErr: Memo1.Lines.Add(SsParser.Str[i]); //\8f\88\97\9d\82¹\82¸\82É\82»\82Ì\82Ü\82Ü\95\\8e¦<br>
- mtMeta: {\83\81\83^\95¶\8e\9a\97ñ\95Ï\8a·\8cê\95\\8e¦}<br>
- end;<br>
-end;</code></p>
-<h2>\8eg\97p\97á - \83X\83N\83\8a\83v\83g\90F\95ª\82¯HTML\8dì\90¬</h2>
-<p>\90F\95ª\82¯\82ª\96Ú\93I\82Ì\8fê\8d\87\81A\83X\83N\83\8a\83v\83g\82ª\95Ï\82í\82é\90S\94z\82Ì\82È\82¢\82æ\82¤\81ALeaveEscape
-:= true; EscapeInvalidMeta := false;\82Æ\82µ\82Ü\82·\81B</p>
-<p>\88È\89º\82Í\81A\83^\83O\95\94\95ª\82É\90F\82ð\90Ý\92è\82·\82éHTML\83}\81[\83N\83A\83b\83v\82Å\82·\81B</p>
-<p><code>var Html: String;<br>
-//<br>
-SsParser1.InputString := Edit1.Text;<br>
-for i := 0 to SsParser1.Count-1 do begin<br>
- case SsParser.MarkUpType[i] of<br>
- mtStr: Html := Html + SsParser.Str[i];<br>
- mtTag: Html := Html + '<font color="green">'
-+ SsParser.Str[i] + '</font>';<br>
- mtTagErr: Html := Html + '<font color="red">'
-+ SsParser.Str[i] + '</font>';<br>
- mtMeta: Html + '<font color="blue">' +
-SsParser.Str[i] + '</font>';<br>
- end;<br>
-end;<br>
-Edit2.Text := Html;</code></p>
-<h2>\8eg\97p\97á - OnSsParse\8eg\97p\97á</h2>
-<p>\88È\89º\82Í\81AOnSsParse\83C\83x\83\93\83g\82Ì\8eg\97p\97á\82Å\82·\81B\82à\82Á\82Æ\82à\92P\8f\83\82É\81A\u\83^\83O\82ð\94»\92è\82µ\82Ü\82·\81BTagPattern\82Ì1\8ds\96Ú\82É
-<code>\u</code> \82Æ\8f\91\82¢\82½\8fê\8d\87\82Æ\93¯\82¶\93®\8dì\82Æ\82È\82è\82Ü\82·\81B</p>
-<p><code>procedure TForm1.SsParser1SsParse(Sender: TObject; const Script:
-String;<br>
- var Len: integer; var MarkType: TSsMarkUpType; var Extra: String)<br>
-begin<br>
- if Pos('\u', Script) = 1 then begin<br>
- Len := Length('\u');<br>
- MarkType := mtTag;<br>
- end;<br>
-end;</code></p>
-<h2>\8eg\97p\97á - \83T\81[\83t\83B\83X\94»\92è</h2>
-<p>\88ê\94Ô\8dÅ\8cã\82Ì\83T\81[\83t\83B\83X\82ª\89½\82É\82È\82é\82©\82ð\94»\92è\82µ\82Ü\82·\81B\82½\82¾\82µ\96{\97\88\82Í\81A\h,
-\u\82É\82æ\82é\90Ø\82è\91Ö\82¦\82È\82Ç\82ª\95K\97v\82Å\82µ\82å\82¤\81B</p>
-<p><code>var Last: integer;<br>
-//<br>
-SsParser1.InputString := Edit1.Text;<br>
-for i := 0 to SsParser1.Count-1 do begin<br>
- if SsParser.Match(SsParser.Str[i], '\s%b') > 0 then begin<br>
- try<br>
- Last :=
-StrToInt(SsParser.GetParam(SsParser.Str[i]));<br>
- except<br>
- on EConvertError do begin end;<br>
- end;<br>
- end;<br>
-end;</code></p>
-<h2>\8f\94\92\8d\88Ó</h2>
-<h3>\8dÄ\89ð\90Í\82É\82Â\82¢\82Ä</h3>
-<p><code>with SsParser1 do InputString := InputString;</code></p>
-<p>\82Æ\82·\82é\82±\82Æ\82Å\81AEscapeInvalidMeta\93\99\82Ì\89ð\90Í\83I\83v\83V\83\87\83\93\82â\81AMetaPattern\93\99\82Ì\89ð\90Í\83p\83^\81[\83\93\82ª\95Ï\89»\82µ\82½\82Æ\82«\82É\8dÄ\89ð\90Í\82ð\8ds\82¦\82Ü\82·\81B\95Ï\82È\8f\91\82«\95û\82Å\82·\82ª\81B</p>
-<h3>\89ü\8ds\95¶\8e\9a\82É\82Â\82¢\82Ä</h3>
-<p>InputString\82É\89ü\8ds\95¶\8e\9a\82â\82»\82Ì\91¼\82Ì\8bó\94\92\95¶\8e\9a\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82½\8fê\8d\87\81A\92Ê\8fí\82Ì\95¶\8e\9a\82Æ\93¯\82¶\82æ\82¤\82É\88µ\82¢\82Ü\82·\81B\82Â\82Ü\82è\81A\89ü\8ds\95¶\8e\9a\82¾\82©\82ç\82Æ\82¢\82Á\82Ä\93Á\82É\89½\82ç\82©\82Ì\8f\88\97\9d\82ª\8ds\82í\82ê\82½\82è\81A\8bt\82É\8f\88\97\9d\82Ì\8e×\96\82\82É\82È\82Á\82½\82è\82·\82é\82±\82Æ\82Í\82 \82è\82Ü\82¹\82ñ\81B\89ü\8ds\82ð
-<code>\n</code> \82É\95Ï\8dX\82µ\82½\82¢\81A\82È\82Ç\82Ì\8fê\8d\87\82Í\82 \82ç\82©\82¶\82ß
-StringReplace \82È\82Ç\82ð\97\98\97p\82µ\82Ä\8e©\95ª\82Å\95Ï\8a·\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<h3>\83^\83O\83G\83\89\81[\82Ì\97\98\97p\82É\82Â\82¢\82Ä</h3>
-<p>TagPattern\82Å\8ds\93ª\82ª <code>!</code>
-\82Å\8en\82Ü\82é\83p\83^\81[\83\93\82ð\8ew\92è\82·\82é\82±\82Æ\82â\81AOnSsParse\83C\83x\83\93\83g\82ÅmtTagErr\83G\83\8c\83\81\83\93\83g\82ð\95Ô\82·\8e\96\82Å\81A\\82Å\8en\82Ü\82é\94C\88Ó\82Ì\95¶\8e\9a\97ñ\82ð\83^\83O\83G\83\89\81[\82Æ\8c©\82È\82·\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B\82Ü\82½\81ATagPattern\82Å\83}\83b\83`\82µ\82È\82©\82Á\82½\8fê\8d\87\82Í\81A\\8bL\8d\86\82Ì\8e\9f\82Ì1\95¶\8e\9a\82Ü\82Å\82ð\8aÜ\82ß\82Ä\83^\83O\83G\83\89\81[\82Æ\82µ\82Ä2\95¶\8e\9a\95ª\90Ø\82è\8fo\82µ\82Ü\82·\81B\82±\82Ì\97\98\97p\95û\96@\82Å\82·\82ª\81A</p>
-<ul>
- <li>\83X\83N\83\8a\83v\83g\82Ì\83`\83F\83b\83N\82É\97\98\97p\82·\82é\8fê\8d\87\81ATagPattern\82ð\95Ï\8dX\82·\82é\8e\96\82Å\81ASSTP\8c \8cÀ\82Å\93®\82©\82È\82¢\83^\83O\82Ì\83`\83F\83b\83N\82ð\8ds\82¤\82±\82Æ\82ª\82Å\82«\82Ü\82·\81B</li>
- <li>SSTP\83T\81[\83o\8d\\92z\82Ì\8fê\8d\87\81A\83G\83\89\81[\83^\83O\82Í\82»\82Ì\82Ü\82Ü\83Z\83\8a\83t\82Æ\93¯\82¶\8c`\82Å\8fo\97Í\82·\82é\82æ\82¤\82É\82·\82ê\82Î\81A\83^\83O\82Ì\83}\81[\83N\83A\83b\83v\83G\83\89\81[\82É\8aÖ\82µ\82Ä\8f_\93î\82È\95\9c\8bA\82ª\82Å\82«\82Ü\82·(\8fã\82Ì\97á\8eQ\8fÆ)\81B</li>
-</ul>
-<h2>\89ð\90Í\82É\82Â\82¢\82Ä\82Ì\92\8d\88Ó</h2>
-<h3>\81u\94C\88Ó\81vphase 40.01\88È\91O\82Ì\89ð\90Í\96â\91è</h3>
-<p>\81u\82 \82ê\88È\8aO\82Ì\89½\82© with \94C\88Ó phase 40\81v\82É\82Í\81A\83X\83N\83\8a\83v\83g\89ð\90Í\82É\8aÖ\82µ\82Ä\81A\88È\89º\82É\8b\93\82°\82é\96â\91è\82ª\82 \82è\82Ü\82·\81B\8c´\88ö\82Í\96Ê\93|\82È\82Ì\82Å\8b\93\82°\82Ü\82¹\82ñ\82ª\81B</p>
-<ul>
- <li>[SSTP\82Ì\8fê\8d\87] <code>\\30</code><code> </code>\82Æ\82¢\82Á\82½\95¶\8e\9a\97ñ\82Í\96{\97\88
- <code>\\ </code>\82ð\83G\83X\83P\81[\83v\82Æ\89ð\8eß\82·\82é\82×\82«\82Å\82·\82ª\81A<code>\3</code><code>
- </code>\82ª\8aë\8c¯\83^\83O\82Ì\82½\82ß\81A<code>\\30 </code>\82ª <code>\0 </code>\82É\95Ï\8a·\82³\82ê\82Ä\8eÀ\8ds\82³\82ê\82Ä\82µ\82Ü\82¢\82Ü\82·\81B</li>
- <li>[SSTP\82Ì\8fê\8d\87] <code>\82ð\- </code>\82È\82Ç\81A\89~\8bL\8d\86\82Ì\91O\82É\93Á\92è\82Ì\95¶\8e\9a\82ª\97\88\82é\8fê\8d\87\81A\8aë\8c¯\83^\83O\83`\83F\83b\83N\82ð\82·\82è\94²\82¯\82Ü\82·\81B</li>
- <li><code>\\8a¿ </code>\82â <code>\w\8a¿ </code>\82Æ\82¢\82Á\82½\8bL\8fq\82Å\95¶\8e\9a\89»\82¯\82ª\90¶\82¶\82Ü\82·\81B</li>
- <li><code>\\94\- </code>\82â <code>\w\94\- </code>\82Æ\82¢\82Á\82½\8bL\8fq\82Å\8aë\8c¯\83^\83O\82ª\8eÀ\8ds\82³\82ê\82é\8fê\8d\87\82ª\82 \82è\82Ü\82·\81B</li>
- <li><code>\94\%selfname </code>\82Æ\82¢\82Á\82½\8bL\8fq\82Å\81A<code>%selfname</code>
- \82ª\90³\82µ\82\95Ï\8a·\82³\82ê\82Ü\82¹\82ñ\81B</li>
- <li><code>\\%selfname </code>\82Æ\82¢\82Á\82½\8bL\8fq\82Å\81A<code>%selfname</code>
- \82ª\90³\82µ\82\95Ï\8a·\82³\82ê\82Ü\82¹\82ñ\81B</li>
- <li><code>\j[http://www.\8c].com/]</code> \82Æ\82¢\82Á\82½\8bL\8fq\82Å\81A\81u\8c]\81v\82Ì2\83o\83C\83g\96Ú\82ª
- <code>]</code>
- \8bL\8d\86\82Æ\83R\81[\83h\82ª\93¯\82¶\82Å\82 \82é\82½\82ß\89ð\90Í\83G\83\89\81[\82ð\8bN\82±\82·\8fê\8d\87\82ª\82 \82è\82Ü\82·\81B<code>\q</code>
- \82à\93¯\97l\82Å\82·\81B</li>
- <li>\83X\83N\83\8a\83v\83g\92\86\82Ì\89ü\8ds\82ª\81A\\8bL\8d\86\82Æ\93¯\82¶\88Ó\96¡\82ð\8e\9d\82Á\82Ä\82µ\82Ü\82¤\82±\82Æ\82ª\82 \82è\82Ü\82·\81B</li>
- <li><code>\w\\-</code>
- \82Æ\82¢\82Á\82½\8bL\8fq\82Å\81A\8aë\8c¯\83^\83O\82ª\83u\83\8d\83b\83N\82³\82ê\82¸\82É\8eÀ\8ds\82³\82ê\82Ä\82µ\82Ü\82¢\82Ü\82·\81B(\82±\82ê\82Í\8f\89\8aúdeveloper's
- test\82É\82à\8ec\82Á\82Ä\82¢\82½\96â\91è)</li>
-</ul>
-<p>TSsParser\82Æ\82Í\8aÖ\98A\82µ\82Ü\82¹\82ñ\82ª\81A<code>%songname %enamyname</code>
-\93\99\82ª\8aë\8c¯\83^\83O\82ð\8aÜ\82Þ\95¶\8e\9a\97ñ\82É\95Ï\8a·\82³\82ê\82½\8fê\8d\87\82É\82»\82Ì\82Ü\82Ü\8eÀ\8ds\82³\82ê\82é\81A\82Æ\82¢\82Á\82½\96â\91è\93_\82à\82 \82è\82Ü\82·\81B\8dÅ\90V\94Å\82Å\82Í\88È\8fã\82Ì\96â\91è\82Í\82·\82×\82Ä\89ð\8c\88\82³\82ê\82Ä\82¢\82Ü\82·\81B</p>
-<p>TSsParser\82Í\88È\8fã\82Ì\96â\91è\93_\82ð\8aÜ\82Ü\82È\82¢\82Í\82¸\82Å\82·(\83p\83^\81[\83\93\82Ì\8f\91\82«\95û\82É\82æ\82Á\82Ä\82Í\95Ê\82Å\82·\82ª)\82Ì\82Å\81A<strong>TSsParser\82Ì\89ð\90Í\82Í\81A\81u\89½\82©
-phase inverse 22.00\81v\88È\8d~\8cÝ\8a·\81A\82Æ\82¢\82¤\82±\82Æ\82É\82È\82è\82Ü\82·\81B</strong>Phase40.01\88È\91O\91Î\89\9e\82ð\8e\8b\96ì\82É\93ü\82ê\82½\83v\83\8d\83O\83\89\83\80\8dì\90¬\82Å\83Z\83L\83\85\83\8a\83e\83B\82É\8dl\97¶\82µ\82½\82¢\8fê\8d\87\81A\8fã\82É\8b\93\82°\82½\96â\91è\93_\82É\91Î\82µ\82Ä\8e©\97Í\82Å\91Î\89\9e\82µ\82Ä\82\82¾\82³\82¢\81B</p>
-<p>TSsParser\82Í\93Æ\8e©SSTP\83T\81[\83o\8dì\90¬\95â\8f\95\82à\8e\8b\96ì\82É\82¢\82ê\82½\83R\83\93\83|\81[\83l\83\93\83g\82Å\82·\82Ì\82Å\81A\8fã\8bL\82Ì\96â\91è\82É\91Î\82µ\82Ä\91Î\89\9e\82·\82é\97\\92è\82Í\82 \82è\82Ü\82¹\82ñ\81B</p>
-
-</body>
-
-</html>