| 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)); |
| 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); |