mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-04-26 21:43:58 +02:00
120 lines
3.3 KiB
ObjectPascal
120 lines
3.3 KiB
ObjectPascal
unit TAHtml;
|
|
|
|
{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
fpimage, Classes;
|
|
|
|
function ReplaceHTMLEntities(const AText: String): String;
|
|
function HTMLToFontSize(AText: String): Integer;
|
|
function HTMLToFPColor(const AText: String): TFPColor;
|
|
|
|
|
|
implementation
|
|
|
|
uses
|
|
SysUtils, htmldefs, LazUTF8,
|
|
TAChartUtils;
|
|
|
|
function ReplaceHTMLEntities(const AText: String): String;
|
|
var
|
|
i: Integer;
|
|
s: WideString;
|
|
wch: WideChar = #0;
|
|
begin
|
|
Result := '';
|
|
i := 1;
|
|
while (i <= Length(AText)) do
|
|
begin
|
|
case AText[i] of
|
|
'&': begin
|
|
s := '';
|
|
inc(i);
|
|
while (i <= Length(AText)) and (AText[i] <> ';') do begin
|
|
s := s + WideChar(AText[i]);
|
|
inc(i);
|
|
end;
|
|
if ResolveHTMLEntityReference(s, wch) then
|
|
Result := Result + UnicodeToUTF8(cardinal(wch));
|
|
end;
|
|
else Result := Result + AText[i];
|
|
end;
|
|
inc(i);
|
|
end;
|
|
end;
|
|
|
|
function HTMLToFPColor(const AText: String): TFPColor;
|
|
var
|
|
i: Integer;
|
|
len: Integer;
|
|
begin
|
|
Result := colBlack;
|
|
// AText is already upper-cased by the calling routine.
|
|
case AText of
|
|
'AQUA' : Result := colAqua;
|
|
'BLACK' : Result := colBlack;
|
|
'BLUE' : Result := colBlue;
|
|
'CYAN' : Result := colCyan;
|
|
'FUCHSIA': Result := colFuchsia;
|
|
'GRAY' : Result := colGray;
|
|
'GREY' : Result := colGray;
|
|
'GREEN' : Result := colGreen;
|
|
'LIME' : Result := colLime;
|
|
'MAGENTA': Result := colMagenta;
|
|
'MAROON' : Result := colMaroon;
|
|
'NAVY' : Result := colNavy;
|
|
'OLIVE' : Result := colOlive;
|
|
'PURPLE' : Result := colPurple;
|
|
'RED' : Result := colRed;
|
|
'SILVER' : Result := colSilver;
|
|
'TEAL' : Result := colTeal;
|
|
'WHITE' : Result := colWhite;
|
|
'YELLOW' : Result := colYellow;
|
|
else if (pos('#', AText) = 1) then begin
|
|
len := Length(AText);
|
|
if not (len in [7, 4]) then
|
|
exit;
|
|
for i:=2 to len do
|
|
if not (AText[i] in ['0'..'9', 'A'..'F']) then
|
|
exit;
|
|
if len = 7 then begin
|
|
Result.Red := StrToInt('$' + copy(AText, 2, 2)) shl 8;
|
|
Result.Green := StrToInt('$' + copy(AText, 4, 2)) shl 8;
|
|
Result.Blue := StrToInt('$' + copy(AText, 6, 2)) shl 8;
|
|
end else
|
|
if len = 4 then begin
|
|
Result.Red := StrToInt('$' + AText[2] + AText[2]) shl 8;
|
|
Result.Green := StrToInt('$' + AText[3] + AText[3]) shl 8;
|
|
Result.Blue := StrToInt('$' + AText[4] + AText[4]) shl 8;
|
|
end;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function HTMLToFontSize(AText: String): Integer;
|
|
begin
|
|
case AText of
|
|
'X-SMALL', '1' : Result := 7;
|
|
'SMALL', '2' : Result := 10;
|
|
'MEDIUM', '3' : Result := 12;
|
|
'LARGE', '4' : Result := 14;
|
|
'X-LARGE', '5' : Result := 18;
|
|
'XX-LARGE', '6' : Result := 24;
|
|
else
|
|
if Pos('PT', AText) = Length(AText)-1 then
|
|
Result := StrToInt(Copy(AText, 1, Length(AText) - 2))
|
|
else
|
|
if Pos('PX', AText) = Length(AText)-1 then
|
|
begin
|
|
Result := StrToInt(Copy(AText, 1, Length(AText) - 2));
|
|
Result := Result * 72 div 96; // Assuming a 96 ppi screen here!
|
|
end else
|
|
Result := 9;
|
|
end;
|
|
end;
|
|
|
|
end.
|
|
|