Develop and Download Open Source Software

Browse CVS Repository

Diff of /gikonavigoeson/gikonavi/GikoSystem.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.148 by h677, Thu Jul 1 13:58:34 2004 UTC revision 1.149 by q9_, Sat Jul 10 17:36:27 2004 UTC
# Line 3097  function TGikoSys.Parse2chURL2(URL: stri Line 3097  function TGikoSys.Parse2chURL2(URL: stri
3097  var  var
3098          i: Integer;          i: Integer;
3099          s: string;          s: string;
3100  //    buf : String;  //      buf : String;
3101  //    convBuf : String;  //      convBuf : String;
3102          wk: string;          wk: string;
3103          wkMin: Integer;          wkMin: Integer;
3104          wkMax: Integer;          wkMax: Integer;
3105          wkInt: Integer;          wkInt: Integer;
3106          RStart: Integer;          RStart: Integer;
3107          RLength: Integer;          RLength: Integer;
3108  //    ps : Integer;  //      ps : Integer;
3109  //    pch : PChar;  //      pch : PChar;
3110          SList: TStringList;          SList: TStringList;
3111  begin  begin
3112          URL := Trim(LowerCase(URL));          URL := Trim(LowerCase(URL));
# Line 3121  begin Line 3121  begin
3121    
3122          wkMin := 0;          wkMin := 0;
3123          wkMax := 1;          wkMax := 1;
3124      if URL[length(URL)] = '\' then          if URL[length(URL)] = '\' then
3125          URL := URL + 'n';                  URL := URL + 'n';
3126          FAWKStr.RegExp := 'http://.+\.(2ch\.net|bbspink\.com)/';          FAWKStr.RegExp := 'http://.+\.(2ch\.net|bbspink\.com)/';
3127          if FAWKStr.Match(FAWKStr.ProcessEscSeq(URL), RStart, RLength) <> 0 then begin          if FAWKStr.Match(FAWKStr.ProcessEscSeq(URL), RStart, RLength) <> 0 then begin
3128                  s := Copy(URL, RStart + RLength - 1, Length(URL));                  s := Copy(URL, RStart + RLength - 1, Length(URL));
3129    
3130          //標準書式                  //標準書式
3131          //最後はl50, 10, 10-20, 10n, 10-20n, -10, 10-, 10n- など                  //最後はl50, 10, 10-20, 10n, 10-20n, -10, 10-, 10n- など
3132          //http://xxx.2ch.net/test/read.cgi/bbsid/1000000000/                  //http://xxx.2ch.net/test/read.cgi/bbsid/1000000000/
3133          FAWKStr.RegExp := '/test/read.cgi/.+/[0-9]+/.*';                  FAWKStr.RegExp := '/test/read.cgi/.+/[0-9]+/?.*';
3134          if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin                  if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin
3135              s := Copy(s, 15, Length(s));                          s := Copy(s, 15, Length(s));
3136    
3137              SList := TStringList.Create;                          SList := TStringList.Create;
3138              try                          try
3139                  SList.Clear;                                  SList.Clear;
3140                  FAWKStr.RegExp := '/';                                  FAWKStr.RegExp := '/';
3141                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 2 then begin                                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 3 then begin
3142                      Result.FBBS := SList[1];                                          Result.FBBS := SList[1];
3143                      Result.FKey := SList[2];                                          Result.FKey := SList[2];
3144                      if SList.Count >= 3 then                                          if SList.Count >= 4 then
3145                          s := SList[3]                                                  s := SList[3]
3146                      else                                          else begin
3147                          s := '';                                                  s := '';
3148                  end else                                                  Result.FSt := 1;
3149                      Exit;                                                  Result.FTo := 1;
3150                                            end;
3151                  SList.Clear;                                  end else
3152                  FAWKStr.LineSeparator := mcls_CRLF;                                          Exit;
3153                  FAWKStr.RegExp := '-';  
3154                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) = 0 then begin                                  SList.Clear;
3155                      Result.FFirst := True;                                  FAWKStr.LineSeparator := mcls_CRLF;
3156                  end else begin                                  FAWKStr.RegExp := '-';
3157                      FAWKStr.RegExp := 'l[0-9]+';                                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) = 0 then begin
3158                      if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin                                          Result.FFirst := True;
3159                          Result.FFirst := True;                                  end else begin
3160                      end else begin                                          FAWKStr.RegExp := 'l[0-9]+';
3161                          for i := 0 to SList.Count - 1 do begin                                          if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin
3162                              if Trim(SList[i]) = '' then begin                                                  Result.FFirst := True;
3163                                  if i = 0 then                                          end else begin
3164                                      Result.FStBegin := True;                                                  for i := 0 to SList.Count - 1 do begin
3165                                  if i = (SList.Count - 1) then                                                          if Trim(SList[i]) = '' then begin
3166                                      Result.FToEnd := True;                                                                  if i = 0 then
3167                              end else if IsNumeric(SList[i]) then begin                                                                          Result.FStBegin := True;
3168                                  wkInt := StrToInt(SList[i]);                                                                  if i = (SList.Count - 1) then
3169                                  wkMax := Max(wkMax, wkInt);                                                                          Result.FToEnd := True;
3170                                  if wkMin = 0 then                                                          end else if IsNumeric(SList[i]) then begin
3171                                      wkMin := wkInt                                                                  wkInt := StrToInt(SList[i]);
3172                                  else                                                                  wkMax := Max(wkMax, wkInt);
3173                                      wkMin := Min(wkMin, wkInt);                                                                  if wkMin = 0 then
3174                              end else if Trim(SList[i]) = 'n' then begin                                                                          wkMin := wkInt
3175                                  Result.FFirst := True;                                                                  else
3176                              end else begin                                                                          wkMin := Min(wkMin, wkInt);
3177                                  FAWKStr.RegExp := '^n[0-9]+$|^[0-9]+n$';                                                          end else if Trim(SList[i]) = 'n' then begin
3178                                  if FAWKStr.Match(FAWKStr.ProcessEscSeq(SList[i]), RStart, RLength) > 0 then begin                                                                  Result.FFirst := True;
3179                                      if Copy(SList[i], 1, 1) = 'n' then                                                          end else begin
3180                                          wkInt := StrToInt(Copy(SList[i], 2, Length(SList[i])))                                                                  FAWKStr.RegExp := '^n[0-9]+$|^[0-9]+n$';
3181                                      else                                                                  if FAWKStr.Match(FAWKStr.ProcessEscSeq(SList[i]), RStart, RLength) > 0 then begin
3182                                          wkInt := StrToInt(Copy(SList[i], 1, Length(SList[i]) - 1));                                                                          if Copy(SList[i], 1, 1) = 'n' then
3183                                      Result.FFirst := True;                                                                                  wkInt := StrToInt(Copy(SList[i], 2, Length(SList[i])))
3184                                      wkMax := Max(wkMax, wkInt);                                                                          else
3185                                      if wkMin = 1 then                                                                                  wkInt := StrToInt(Copy(SList[i], 1, Length(SList[i]) - 1));
3186                                          wkMin := wkInt                                                                          Result.FFirst := True;
3187                                      else                                                                          wkMax := Max(wkMax, wkInt);
3188                                          wkMin := Min(wkMin, wkInt);                                                                          if wkMin = 1 then
3189                                  end;                                                                                  wkMin := wkInt
3190                              end;                                                                          else
3191                          end;                                                                                  wkMin := Min(wkMin, wkInt);
3192                          if Result.FStBegin and (not Result.FToEnd) then                                                                  end;
3193                              Result.FSt := wkMin                                                          end;
3194                          else if (not Result.FStBegin) and Result.FToEnd then                                                  end;
3195                              Result.FTo := wkMax                                                  if Result.FStBegin and (not Result.FToEnd) then
3196                          else if (not Result.FStBegin) and (not Result.FToEnd) then begin                                                          Result.FSt := wkMin
3197                              Result.FSt := wkMin;                                                  else if (not Result.FStBegin) and Result.FToEnd then
3198                              Result.FTo := wkMax;                                                          Result.FTo := wkMax
3199                          end;                                                  else if (not Result.FStBegin) and (not Result.FToEnd) then begin
3200                          //Result.FSt := wkMin;                                                          Result.FSt := wkMin;
3201                          //Result.FTo := wkMax;                                                          Result.FTo := wkMax;
3202                      end;                                                  end;
3203                  end;                                                  //Result.FSt := wkMin;
3204              finally                                                  //Result.FTo := wkMax;
3205                  SList.Free;                                          end;
3206              end;                                  end;
3207              Result.FDone := True;                          finally
3208              Exit;                                  SList.Free;
3209          end;                          end;
3210                            Result.FDone := True;
3211          //新kako書式                          Exit;
3212          //http://server.2ch.net/ITA_NAME/kako/1000/10000/1000000000.html                  end;
3213          FAWKStr.RegExp := '/.+/kako/[0-9]+/[0-9]+/[0-9]+\.html';  
3214          if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin                  //新kako書式
3215              SList := TStringList.Create;                  //http://server.2ch.net/ITA_NAME/kako/1000/10000/1000000000.html
3216              try                  FAWKStr.RegExp := '/.+/kako/[0-9]+/[0-9]+/[0-9]+\.html';
3217                  SList.Clear;                  if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin
3218                  FAWKStr.RegExp := '/';                          SList := TStringList.Create;
3219                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 6 then begin                          try
3220                      Result.FBBS := SList[1];                                  SList.Clear;
3221                      Result.FKey := ChangeFileExt(SList[5], '');                                  FAWKStr.RegExp := '/';
3222                      Result.FFirst := True;                                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 6 then begin
3223                  end else                                          Result.FBBS := SList[1];
3224                      Exit;                                          Result.FKey := ChangeFileExt(SList[5], '');
3225              finally                                          Result.FFirst := True;
3226                  SList.Free;                                  end else
3227              end;                                          Exit;
3228              Result.FDone := True;                          finally
3229              Exit;                                  SList.Free;
3230          end;                          end;
3231                            Result.FDone := True;
3232          //旧kako書式                          Exit;
3233          //http://server.2ch.net/ITA_NAME/kako/999/999999999.html                  end;
3234          FAWKStr.RegExp := '/.+/kako/[0-9]+/[0-9]+\.html';  
3235          if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin                  //旧kako書式
3236              SList := TStringList.Create;                  //http://server.2ch.net/ITA_NAME/kako/999/999999999.html
3237              try                  FAWKStr.RegExp := '/.+/kako/[0-9]+/[0-9]+\.html';
3238                  SList.Clear;                  if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin
3239                  FAWKStr.RegExp := '/';                          SList := TStringList.Create;
3240                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 5 then begin                          try
3241                      Result.FBBS := SList[1];                                  SList.Clear;
3242                      Result.FKey := ChangeFileExt(SList[4], '');                                  FAWKStr.RegExp := '/';
3243                      Result.FFirst := True;                                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 5 then begin
3244                  end else                                          Result.FBBS := SList[1];
3245                      Exit;                                          Result.FKey := ChangeFileExt(SList[4], '');
3246              finally                                          Result.FFirst := True;
3247                  SList.Free;                                  end else
3248              end;                                          Exit;
3249              Result.FDone := True;                          finally
3250              Exit;                                  SList.Free;
3251          end;                          end;
3252                            Result.FDone := True;
3253          //log及びlog2書式                          Exit;
3254          //http://server.2ch.net/log/ITA_NAME/kako/999/999999999.html                  end;
3255          //http://server.2ch.net/log2/ITA_NAME/kako/999/999999999.html  
3256          FAWKStr.RegExp := '/log2?/.+/kako/[0-9]+/[0-9]+\.html';                  //log及びlog2書式
3257          if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin                  //http://server.2ch.net/log/ITA_NAME/kako/999/999999999.html
3258              SList := TStringList.Create;                  //http://server.2ch.net/log2/ITA_NAME/kako/999/999999999.html
3259              try                  FAWKStr.RegExp := '/log2?/.+/kako/[0-9]+/[0-9]+\.html';
3260                  SList.Clear;                  if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin
3261                  FAWKStr.RegExp := '/';                          SList := TStringList.Create;
3262                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 6 then begin                          try
3263                      Result.FBBS := SList[2];                                  SList.Clear;
3264                      Result.FKey := ChangeFileExt(SList[5], '');                                  FAWKStr.RegExp := '/';
3265                      Result.FFirst := True;                                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 6 then begin
3266                  end else                                          Result.FBBS := SList[2];
3267                      Exit;                                          Result.FKey := ChangeFileExt(SList[5], '');
3268              finally                                          Result.FFirst := True;
3269                  SList.Free;                                  end else
3270              end;                                          Exit;
3271              Result.FDone := True;                          finally
3272              Exit;                                  SList.Free;
3273          end;                          end;
3274                            Result.FDone := True;
3275                            Exit;
3276          //旧URL書式                  end;
3277          //http://server.2ch.net/test/read.cgi?bbs=ITA_NAME&key=1000000000&st=1&to=5&nofirst=true  
3278          FAWKStr.RegExp := '/test/read\.cgi\?';  
3279          if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin                  //旧URL書式
3280              s := Copy(s, 16, Length(s));                  //http://server.2ch.net/test/read.cgi?bbs=ITA_NAME&key=1000000000&st=1&to=5&nofirst=true
3281              SList := TStringList.Create;                  FAWKStr.RegExp := '/test/read\.cgi\?';
3282              try                  if FAWKStr.Match(FAWKStr.ProcessEscSeq(s), RStart, RLength) > 0 then begin
3283                  SList.Clear;                          s := Copy(s, 16, Length(s));
3284                  FAWKStr.RegExp := '&';                          SList := TStringList.Create;
3285                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 2 then begin                          try
3286                      Result.FFirst := True;                                  SList.Clear;
3287                      for i := 0 to SList.Count - 1 do begin                                  FAWKStr.RegExp := '&';
3288                          if Pos('bbs=', SList[i]) = 1 then begin                                  if FAWKStr.Split(FAWKStr.ProcessEscSeq(s), SList) >= 2 then begin
3289                              Result.FBBS := Copy(SList[i], 5, Length(SList[i]));                                          Result.FFirst := True;
3290                          end else if Pos('key=', SList[i]) = 1 then begin                                          for i := 0 to SList.Count - 1 do begin
3291                              Result.FKey := Copy(SList[i], 5, Length(SList[i]));                                                  if Pos('bbs=', SList[i]) = 1 then begin
3292                          end else if Pos('st=', SList[i]) = 1 then begin                                                          Result.FBBS := Copy(SList[i], 5, Length(SList[i]));
3293                              wk := Copy(SList[i], 4, Length(SList[i]));                                                  end else if Pos('key=', SList[i]) = 1 then begin
3294                              if IsNumeric(wk) then                                                          Result.FKey := Copy(SList[i], 5, Length(SList[i]));
3295                                  Result.FSt := StrToInt(wk)                                                  end else if Pos('st=', SList[i]) = 1 then begin
3296                              else if wk = '' then                                                          wk := Copy(SList[i], 4, Length(SList[i]));
3297                                  Result.FStBegin := True;                                                          if IsNumeric(wk) then
3298                          end else if Pos('to=', SList[i]) = 1 then begin                                                                  Result.FSt := StrToInt(wk)
3299                              wk := Copy(SList[i], 4, Length(SList[i]));                                                          else if wk = '' then
3300                              if IsNumeric(wk) then                                                                  Result.FStBegin := True;
3301                                  Result.FTo := StrToInt(wk)                                                  end else if Pos('to=', SList[i]) = 1 then begin
3302                              else if wk = '' then                                                          wk := Copy(SList[i], 4, Length(SList[i]));
3303                                  Result.FToEnd := True;                                                          if IsNumeric(wk) then
3304                          end else if Pos('nofirst=', SList[i]) = 1 then begin                                                                  Result.FTo := StrToInt(wk)
3305                              Result.FFirst := False;                                                          else if wk = '' then
3306                          end;                                                                  Result.FToEnd := True;
3307                      end;                                                  end else if Pos('nofirst=', SList[i]) = 1 then begin
3308                  end else                                                          Result.FFirst := False;
3309                      Exit;                                                  end;
3310              finally                                          end;
3311                  SList.Free;                                  end else
3312              end;                                          Exit;
3313                            finally
3314              if (Result.FBBS <> '') and (Result.FKey <> '') then begin                                  SList.Free;
3315                  Result.FDone := True;                          end;
3316              end;  
3317              Exit;                          if (Result.FBBS <> '') and (Result.FKey <> '') then begin
3318          end;                                  Result.FDone := True;
3319      end;                          end;
3320                            Exit;
3321                    end;
3322            end;
3323  end;  end;
3324    
3325  procedure TGikoSys.ParseURI(var URL, Protocol, Host, Path, Document, Port, Bookmark: string);  procedure TGikoSys.ParseURI(var URL, Protocol, Host, Path, Document, Port, Bookmark: string);

Legend:
Removed from v.1.148  
changed lines
  Added in v.1.149

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26