Skip to content

Commit 913fc9d

Browse files
committed
feat: support XML formatting in grid popup text editor
1 parent f987c81 commit 913fc9d

File tree

1 file changed

+23
-19
lines changed

1 file changed

+23
-19
lines changed

source/texteditor.pas

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ interface
99
ComCtrls, Dialogs, SysUtils, Menus, LCLType,
1010
apphelpers, ActnList, extra_controls,
1111
ExtCtrls, dbconnection, SynEdit, SynEditHighlighter, customize_highlighter,
12+
Laz2_DOM, Laz2_XMLRead, Laz2_XMLWrite,
1213
reformatter, jsonparser, extfiledialog,
1314

1415
SynHighlighterBat,
@@ -455,8 +456,8 @@ procedure TfrmTextEditor.menuAlwaysFormatCodeClick(Sender: TObject);
455456
procedure TfrmTextEditor.menuFormatCodeOnceClick(Sender: TObject);
456457
var
457458
JsonParser: TJSONParser;
458-
//Xml: TXmlVerySimple;
459-
//XmlTmp: IXMLDocument;
459+
Doc: TXMLDocument;
460+
InStream, OutStream: TStringStream;
460461
begin
461462
// Reformat code if possible
462463
try
@@ -475,23 +476,26 @@ procedure TfrmTextEditor.menuFormatCodeOnceClick(Sender: TObject);
475476
MemoText.SelEnd := 0;
476477
frmReformatter.Free;
477478
end
478-
{else if FHighlighter is TSynXMLSyn then begin
479-
XmlTmp := TXMLDocument.Create(nil);
480-
XmlTmp.LoadFromXML(MemoText.Text);
481-
MemoText.BeginUpdate;
482-
MemoText.Text := XMLDoc.FormatXMLData(MemoText.Text);
483-
MemoText.EndUpdate;
484-
Xml := TXmlVerySimple.Create;
485-
//Xml.Options := [doNodeAutoIndent, doParseProcessingInstr, doCaseInsensitive, doWriteBOM, doSimplifyTextNodes];
486-
Xml.Clear;
487-
Xml.Text := MemoText.Lines.Text.Trim;
488-
MemoText.BeginUpdate;
489-
MemoText.Lines.Text := Xml.Text;
490-
MemoText.EndUpdate;
491-
Xml.Free;
492-
MemoText.SelStart := 0;
493-
MemoText.SelLength := 0;
494-
end}
479+
else if FHighlighter is TSynXMLSyn then begin
480+
InStream := TStringStream.Create(MemoText.Text);
481+
OutStream := TStringStream.Create('');
482+
try
483+
ReadXMLFile(Doc, InStream); // parse XML
484+
try
485+
WriteXMLFile(Doc, OutStream); // pretty-print XML
486+
finally
487+
Doc.Free;
488+
end;
489+
MemoText.BeginUpdate;
490+
MemoText.Text := OutStream.DataString; // show formatted XML
491+
MemoText.EndUpdate;
492+
MemoText.SelStart := 0;
493+
MemoText.SelEnd := 0;
494+
finally
495+
InStream.Free;
496+
OutStream.Free;
497+
end;
498+
end
495499
else begin
496500
Beep;
497501
end;

0 commit comments

Comments
 (0)