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;