2ちゃんねるブラウザ「OpenJane」改造総合スレ 3

このエントリーをはてなブックマークに追加
882View ◆tCDoSWbtb.
祖父板で出てたリンク中の文字参照を解決しない仕様の対策。
理想はTStrDatOut.ProcEntityあたりとコードを
共用するべきだけど、なんかややこしいので書き下ろし。

UDat2HTML.pas 1305行〜

function TConvDatOut.GetURL: string;
var
buf:string;
code:Integer;
power:Integer;
refChar:Set of Char;
begin
while index < size do
begin
case (str + index)^ of
'&':begin
inc(index);
if StrLComp(str + index,'amp',3)=0 then begin
inc(index,3);
result := result + '&';
if (str + index)^=';' then inc(index);
end else if (str + index)^='#' then begin
code:=0;
inc(index);
if (str + index)^='x' then begin
buf:='&#x';
inc(index);
power:=16;
refChar:=['0'..'9','a'..'f','A'..'F'];
883View ◆tCDoSWbtb. :03/01/29 05:17 ID:PuOBS0xW
end else begin
buf:='&#';
power:=10;
refChar:=['0'..'9'];
end;
while (str + index)^ in refChar do begin
buf:=buf+(str + index)^;
if code<256 then
code := code * power + HexToInt((str + index)^);
inc(index);
end;
if code in [$21, $23..$2f, $3a, $3B, $3D, $3F..$7E] then begin
result := result + char(code);
if (str + index)^=';' then inc(index);
end else begin
result := result + buf;
end;
end else
result := result + '&';
end;
#$21, #$23..#$25,#$27..#$3B, #$3D, #$3F..#$7E:begin
result := result + (str + index)^;
Inc(index);
end;
else break;
end;
end;
end;