lazarus/components/tachart/tahtml.pas
wp 130b9d9510 TAChart: Less hints.
git-svn-id: trunk@56496 -
2017-11-25 22:56:35 +00:00

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.