diff --git a/components/jvcllaz/examples/JvMarkup/MarkupDemo.lpi b/components/jvcllaz/examples/JvMarkup/MarkupDemo.lpi
index b69cbe297..42f029fe5 100644
--- a/components/jvcllaz/examples/JvMarkup/MarkupDemo.lpi
+++ b/components/jvcllaz/examples/JvMarkup/MarkupDemo.lpi
@@ -24,7 +24,6 @@
-
@@ -62,6 +61,9 @@
+
+
+
diff --git a/components/jvcllaz/examples/JvMarkup/MarkupDemo.lpr b/components/jvcllaz/examples/JvMarkup/MarkupDemo.lpr
index 829343c07..884da8103 100644
--- a/components/jvcllaz/examples/JvMarkup/MarkupDemo.lpr
+++ b/components/jvcllaz/examples/JvMarkup/MarkupDemo.lpr
@@ -14,7 +14,7 @@ uses
begin
RequireDerivedFormResource := True;
- Application.Scaled := True;
+ Application.Scaled:=True;
Application.Initialize;
Application.CreateForm(TMainForm, MainForm);
Application.Run;
diff --git a/components/jvcllaz/examples/JvMarkup/main.lfm b/components/jvcllaz/examples/JvMarkup/main.lfm
index 8f428bbd9..48abdc294 100644
--- a/components/jvcllaz/examples/JvMarkup/main.lfm
+++ b/components/jvcllaz/examples/JvMarkup/main.lfm
@@ -7,7 +7,7 @@ object MainForm: TMainForm
ClientHeight = 519
ClientWidth = 740
OnCreate = FormCreate
- LCLVersion = '2.1.0.0'
+ LCLVersion = '2.3.0.0'
inline SynEdit1: TSynEdit
Left = 0
Height = 322
@@ -456,6 +456,7 @@ object MainForm: TMainForm
'blue'
'
small text and large text'
'
A different font face: Times'
+ '
HTML entities: & ™ √α β γ δ 90°'
'
Subscripts and superscripts are not supported:'
'10 cm3 H2O '
)
@@ -570,7 +571,7 @@ object MainForm: TMainForm
Left = 4
Height = 19
Top = 0
- Width = 99
+ Width = 97
BorderSpacing.Left = 4
BorderSpacing.Bottom = 4
Caption = 'Markup Viewer'
@@ -584,10 +585,10 @@ object MainForm: TMainForm
AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = RbMarkupViewer
AnchorSideTop.Side = asrCenter
- Left = 119
+ Left = 117
Height = 19
Top = 0
- Width = 92
+ Width = 90
BorderSpacing.Left = 16
Caption = 'Markup Label'
OnChange = RbMarkupLabelChange
@@ -598,7 +599,7 @@ object MainForm: TMainForm
object SynHTMLSyn1: TSynHTMLSyn
DefaultFilter = 'HTML Document (*.htm,*.html)|*.htm;*.html'
Enabled = False
- left = 456
- top = 192
+ Left = 456
+ Top = 192
end
end
diff --git a/components/jvcllaz/examples/JvMarkup/main.pas b/components/jvcllaz/examples/JvMarkup/main.pas
index 4acf84d60..6c7930148 100644
--- a/components/jvcllaz/examples/JvMarkup/main.pas
+++ b/components/jvcllaz/examples/JvMarkup/main.pas
@@ -42,7 +42,7 @@ implementation
{ TMainForm }
procedure TMainForm.FormCreate(Sender: TObject);
-begin
+begin
JvMarkupViewer1.Text := SynEdit1.Lines.Text;
JvMarkupLabel1.Text := SynEdit1.Lines.Text;
JvMarkupViewer1.Align := alClient;
@@ -54,11 +54,13 @@ end;
procedure TMainForm.RbMarkupViewerChange(Sender: TObject);
begin
JvMarkupViewer1.Visible := RbMarkupViewer.Checked;
+ JvMarkupLabel1.Visible := not RbMarkupViewer.Checked;
end;
procedure TMainForm.RbMarkupLabelChange(Sender: TObject);
begin
JvMarkupLabel1.Visible := RbMarkupLabel.Checked;
+ JvMarkupViewer1.Visible := not RbMarkupLabel.Checked;
end;
procedure TMainForm.SynEdit1Change(Sender: TObject);
diff --git a/components/jvcllaz/run/JvJans/jvmarkupcommon.pas b/components/jvcllaz/run/JvJans/jvmarkupcommon.pas
index eef611f44..1b844c577 100644
--- a/components/jvcllaz/run/JvJans/jvmarkupcommon.pas
+++ b/components/jvcllaz/run/JvJans/jvmarkupcommon.pas
@@ -38,6 +38,7 @@ type
TJvHTMLElement = class(TObject)
private
FFontSize: Integer;
+ FNoEntText: string;
FText: string;
FFontName: string;
FFontStyle: TFontStyles;
@@ -61,7 +62,9 @@ type
procedure SetBreakLine(const Value: Boolean);
public
procedure Breakup(ACanvas: TCanvas; Available: Integer);
+ class function FixHTMLEntities(const S: String): String;
property Text: string read FText write SetText;
+ property NoEntText: String read FNoEntText;
property SolText: string read FSolText write SetSolText;
property EolText: string read FEolText write SetEolText;
property FontName: string read FFontName write SetFontName;
@@ -89,6 +92,9 @@ type
implementation
+uses
+ StrUtils, htmldefs;
+
//=== { TJvHTMLElement } =====================================================
procedure TJvHTMLElement.Breakup(ACanvas: TCanvas; Available: Integer);
@@ -101,7 +107,7 @@ begin
ACanvas.Font.Style := FontStyle;
ACanvas.Font.Color := FontColor;
if SolText = '' then
- S := Text
+ S := FNoEntText
else
S := EolText;
if ACanvas.TextWidth(S) <= Available then
@@ -125,6 +131,29 @@ begin
end;
end;
+class function TJvHTMLElement.FixHTMLEntities(const S: String): String;
+var
+ ent: string;
+ wch: widechar = #0;
+ p1, p2: Integer;
+begin
+ Result := S;
+ p1 := pos('&', Result);
+ while p1 > 0 do begin
+ p2 := posex(';', Result, p1);
+ if p2 > 0 then
+ begin
+ ent := Copy(Result, p1+1, p2-p1-1);
+ if ResolveHTMLEntityReference(widestring(ent), wch) then
+ begin
+ ent := Copy(Result, p1, p2-p1+1);
+ Result := StringReplace(Result, ent, UTF8Encode(wch), [rfReplaceAll])
+ end;
+ end;
+ p1 := posex('&', Result, p1+1);
+ end;
+end;
+
procedure TJvHTMLElement.SetAscent(const Value: Integer);
begin
FAscent := Value;
@@ -173,6 +202,7 @@ end;
procedure TJvHTMLElement.SetText(const Value: string);
begin
FText := Value;
+ FNoEntText := FixHTMLEntities(FText);
end;
procedure TJvHTMLElement.SetWidth(const Value: Integer);
diff --git a/components/jvcllaz/run/JvJans/jvmarkuplabel.pas b/components/jvcllaz/run/JvJans/jvmarkuplabel.pas
index 6a266d3ca..008faae23 100644
--- a/components/jvcllaz/run/JvJans/jvmarkuplabel.pas
+++ b/components/jvcllaz/run/JvJans/jvmarkuplabel.pas
@@ -423,7 +423,7 @@ end;
procedure TJvMarkupLabel.RenderHTML;
var
R: TRect;
- I, C, X, Y: Integer;
+ I, C, X, Y, W: Integer;
ATotalWidth, AClientWidth, ATextWidth, BaseLine: Integer;
iSol, iEol, PendingCount, MaxHeight, MaxAscent: Integer;
El: TJvHTMLElement;
@@ -517,8 +517,9 @@ begin
end;
if El.SolText <> '' then
begin
- ATotalWidth := ATotalWidth - Canvas.TextWidth(El.SolText) - 5;
- ATextWidth := ATextWidth + Canvas.TextWidth(El.SolText);
+ W := Canvas.TextWidth(El.SolText);
+ ATotalWidth := ATotalWidth - W - 5;
+ ATextWidth := ATextWidth + W;
if El.EolText = '' then
begin
if I >= C - 1 then
diff --git a/components/jvcllaz/run/JvJans/jvmarkupviewer.pas b/components/jvcllaz/run/JvJans/jvmarkupviewer.pas
index fefe31855..52cea70c1 100644
--- a/components/jvcllaz/run/JvJans/jvmarkupviewer.pas
+++ b/components/jvcllaz/run/JvJans/jvmarkupviewer.pas
@@ -159,7 +159,7 @@ begin
for I := 0 to C - 1 do
begin
Element := TJvHTMLElement(FElementStack.Items[I]);
- s := Element.Text;
+ s := Element.NoEntText;
Canvas.Font.Name := Element.FontName;
Canvas.Font.Size := Element.FontSize;
Canvas.Font.Style := Element.FontStyle;