OSDN Git Service

・ExtractHttpFields を外のユニットに頼らなくていいように内包。
authoryoffy <yoffy>
Sun, 16 Nov 2003 19:30:05 +0000 (19:30 +0000)
committeryoffy <yoffy>
Sun, 16 Nov 2003 19:30:05 +0000 (19:30 +0000)
・EUCtoSJIS を自作のものに置き換え、大幅に高速化。

res/ExternalBoardPlugIn/ShitarabaPlugIn.dpr

index 8034475..b1018c3 100644 (file)
@@ -13,12 +13,11 @@ uses
        Classes,
        Math,
        IdURI,
-       YofUtils in '..\..\YofUtils.pas',
        PlugInMain in 'PlugInMain.pas',
        ThreadItem in 'ThreadItem.pas',
        BoardItem in 'BoardItem.pas',
        FilePath in 'FilePath.pas',
-       PzConv in 'PzConv.pas';
+       Y_TextConverter in 'Y_TextConverter.pas';
 
 {$R *.res}
 
@@ -73,7 +72,7 @@ const
        MAJOR_VERSION                   = 1;
        MINOR_VERSION                   = 0;
        RELEASE_VERSION         = 'alpha';
-       REVISION_VERSION        = 3;
+       REVISION_VERSION        = 4;
 
 // =========================================================================
 // \8eG\97p\8aÖ\90\94
@@ -135,6 +134,40 @@ begin
        Result := ForceDirectoriesEx(ExtractFilePath(Dir)) and CreateDir(Dir);
 end;
 
+// \82Æ\82è\82 \82¦\82¸\82Ì\91ã\97p\95i\82È\82Ì\82Å chrWhite \82ð\8dl\97\82µ\82Ä\82¢\82È\82¢\82±\82Æ\82É\92\8d\88Ó\81I\81I\81I
+procedure ExtractHttpFields(
+       const chrSep : TSysCharSet;
+       const chrWhite : TSysCharSet;
+       const strValue : string;
+       var strResult : TStringList;
+       unknownFlag : boolean = false
+);
+var
+       last, p, strLen : Integer;
+begin
+
+       strLen := Length( strValue );
+       p := 1;
+       last := 1;
+
+       while p <= strLen do
+       begin
+
+               if strValue[ p ] in chrSep then
+               begin
+                       strResult.Add( Copy( strValue, last, p - last ) );
+                       last := p + 1;
+               end;
+
+               p := p + 1;
+
+       end;
+
+       if last <> p then
+               strResult.Add( Copy( strValue, last, strLen - last + 1 ) );
+
+end;
+
 
 
 // =========================================================================
@@ -232,7 +265,7 @@ begin
                uri := TIdURI.Create( URL + '/' );
        uriList := TStringList.Create;
        try
-               YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+               ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                FileName        := uriList[ 5 ] + '.dat';
                FilePath        := MyLogFolder + uriList[ 3 ] + '\' + uriList[ 4 ] + '\' + uriList[ 5 ] + '.dat';
                IsLogFile       := FileExists( FilePath );
@@ -289,7 +322,7 @@ begin
                uri := TIdURI.Create( URL + '/' );
        uriList := TStringList.Create;
        try
-               YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+               ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                FileName := uriList[ 5 ] + '.dat';
                // http://jbbs.shitaraba.com/bbs/read.cgi/game/1578/1067968274/l100
                // protocol://host/1/2/3/4/5/uriList.Count - 1
@@ -482,7 +515,7 @@ begin
                uri := TIdURI.Create( URL + '/' );
        uriList := TStringList.Create;
        try
-               YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+               ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                FileName := uriList[ 5 ] + '.dat';
                // http://jbbs.shitaraba.com/bbs/read.cgi/game/1578/1067968274/l100
                // http://jbbs.shitaraba.com/game/1000/subject.txt
@@ -502,7 +535,6 @@ procedure   TShitarabaThreadItem.To2chDat(
        ioHTML                  : TStringList
 );
 var
-       conv                            : TPzConv;
        i, bound                : Integer;
        foundPos                : Integer;
        strTmp                  : string;
@@ -512,14 +544,10 @@ const
 begin
 
        // \82µ\82½\82ç\82Î\82Í EUC \82È\82Ì\82Å Shift_JIS \82É\95Ï\8a·
-       conv := TPzConv.Create( nil );
-       try
-               ioHTML.Text := conv.EucToSJis( ioHTML.Text );
-       finally
-               conv.Free;
-       end;
+       ioHTML.Text := EUCtoSJIS( ioHTML.Text );
 
-       //===== 2ch \82Ì dat \8c`\8e®\82É\95Ï\8a·
+       //===== 2ch \82Ì dat \8c`\8e®\82É\95Ï\8a·(\91¬\93x\82ð\89Ò\82®\82½\82ß\82É rgIgnoreCase \82ð\90Ø\82Á\82Ä\82¢\82é\82Ì\82Å\92\8d\88Ó\81I)
+       // \81¦\81«\82±\82Á\82©\82ç\81«\81¦
        // \83z\83X\83g\96¼\82Ì\8cã\82Å\89ü\8ds\82³\82ê\82Ä\82¢\82½\82è\82·\82é\82Ì\82Å\89ü\8ds\82ð\82·\82×\82Ä\8eæ\82è\8f\9c\82­
        ioHTML.Text     := StringReplace( ioHTML.Text, #13#10, '', [rfReplaceAll] );
        // \91ã\82í\82è\82É <dt> \82ð\8ds\82Ì\8bæ\90Ø\82è\82É\82·\82é
@@ -528,14 +556,16 @@ begin
        if Length( ioHTML[ 0 ] ) = 0 then
                ioHTML.Delete( 0 );
        // \83g\83\8a\83b\83v\82Ì\8cã\82Ì '<b> </b>' \82ð\8bó\82É
-       ioHTML.Text     := StringReplace( ioHTML.Text, '<b> </b>', '', [rfReplaceAll, rfIgnoreCase] );
+       ioHTML.Text     := StringReplace( ioHTML.Text, '<b> </b>', '', [rfReplaceAll{, rfIgnoreCase}] );
        // '<b>' \82Í\83\81\81[\83\8b\82Æ\96¼\91O\82Ì\8bæ\90Ø\82è
-       ioHTML.Text     := StringReplace( ioHTML.Text, '<b>', '<>', [rfReplaceAll, rfIgnoreCase] );
+       ioHTML.Text     := StringReplace( ioHTML.Text, '<b>', '<>', [rfReplaceAll{, rfIgnoreCase}] );
        // \83\81\81[\83\8b\82Æ\96¼\91O\82É\82Â\82¢\82Ä\82­\82é\95Â\82\83^\83O\82ð\93\8a\8de\93ú\82Æ\82Ì\8bæ\90Ø\82è\82É
-       ioHTML.Text     := StringReplace( ioHTML.Text, '</b></a>', '<>', [rfReplaceAll, rfIgnoreCase] );
-       ioHTML.Text     := StringReplace( ioHTML.Text, '</b>', '<>', [rfReplaceAll, rfIgnoreCase] );
+       // \91¬\93x\82ð\89Ò\82®\82½\82ß\92\86\8e~
+       //ioHTML.Text   := StringReplace( ioHTML.Text, '</b></a>', '<>', [rfReplaceAll{, rfIgnoreCase}] );
+       ioHTML.Text     := StringReplace( ioHTML.Text, '</b>', '<>', [rfReplaceAll{, rfIgnoreCase}] );
        // '<dd>' \82ð\96{\95\82Æ\82Ì\8bæ\90Ø\82è\82É
-       ioHTML.Text     := StringReplace( ioHTML.Text, '<dd>', '<>', [rfReplaceAll, rfIgnoreCase] );
+       ioHTML.Text     := StringReplace( ioHTML.Text, '<dd>', '<>', [rfReplaceAll{, rfIgnoreCase}] );
+       // \81¦\81ª\82±\82±\82Ü\82Å\82ª\83{\83g\83\8b\83l\83b\83N\81ª\81¦
 
        res := TStringList.Create;
        try
@@ -626,7 +656,7 @@ begin
        uri                     := TIdURI.Create( SubjectURL );
        uriList := TStringList.Create;
        try
-               YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+               ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                // http://jbbs.shitaraba.com/game/1000/subject.txt
                FilePath        := MyLogFolder + uriList[ 1 ] + '\' + uriList[ 2 ] + '\' + uri.Document;
                IsLogFile       := FileExists( FilePath );
@@ -665,7 +695,6 @@ end;
 function TShitarabaBoardItem.Download : TDownloadState;
 var
        modified                        : Double;
-       conv                                    : TPzConv;
        downResult              : PChar;
        responseCode    : Longint;
        uri                                             : TIdURI;
@@ -682,7 +711,6 @@ begin
                end;
        end;
        FDat            := TStringList.Create;
-       conv            := TPzConv.Create( nil );
        uri                     := TIdURI.Create( SubjectURL );
        uriList := TStringList.Create;
        // \93Æ\8e©\82É\83_\83E\83\93\83\8d\81[\83h\82â\83t\83B\83\8b\83^\83\8a\83\93\83O\82ð\8ds\82í\82È\82¢\8fê\8d\87\82Í
@@ -693,7 +721,7 @@ begin
                if responseCode = 200 then begin
                        try
                                // \83p\83X\82ð\8eZ\8fo
-                               YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+                               ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                                if MyLogFolder = '' then begin
                                        // \82Ç\82±\82É\95Û\91\82µ\82Ä\82¢\82¢\82Ì\82©\95ª\82©\82ç\82È\82¢\82Ì\82Å\88ê\8e\9e\83t\83@\83C\83\8b\82É\95Û\91
                                        FilePath                        := TemporaryFile;
@@ -707,7 +735,7 @@ begin
                                ForceDirectoriesEx( Copy( FilePath, 1, LastDelimiter( '\', FilePath ) ) );
 
                                // EUC \82ð Shift_JIS \82É
-                               FDat.Text := conv.EucToSjis( string( downResult ) );
+                               FDat.Text := EUCtoSJIS( string( downResult ) );
                                // \95Û\91
                                FDat.SaveToFile( FilePath );
 
@@ -715,7 +743,6 @@ begin
                                RoundDate                       := Now;
                                LastModified    := modified;
                        finally
-                               conv.Free;
                                uri.Free;
                                uriList.Free;
                        end;
@@ -748,7 +775,7 @@ begin
        uriList := TStringList.Create;
        try
                try
-                       YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+                       ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                        threadURL       := uri.Protocol + '://' + uri.Host + '/bbs/read.cgi/' +
                                uriList[ 1 ] + '/' + uriList[ 2 ] + '/' + inFileName + '/l100';
                        Result          := threadURL;
@@ -780,7 +807,7 @@ begin
                        uriList := TStringList.Create;
                        try
                                // \83p\83X\82ð\8eZ\8fo
-                               YofUtils.ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
+                               ExtractHttpFields( ['/', '?'], [], uri.Path, uriList );
                                // http://jbbs.shitaraba.com/game/1000/subject.txt
                                FilePath        := MyLogFolder + uriList[ 1 ] + '\' + uriList[ 2 ] + '\' + uri.Document;
                                if FileExists( FilePath ) then