Today's first commit

This commit is contained in:
2021-11-28 21:25:43 +01:00
parent afc268f546
commit 03ec2af7d6
11 changed files with 1672 additions and 80 deletions

View File

@@ -29,45 +29,26 @@
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(BMGEditForm));
this.panel1 = new System.Windows.Forms.Panel();
this.entriesListBox = new System.Windows.Forms.ListBox();
this.toolStrip1 = new System.Windows.Forms.ToolStrip();
this.toolStrip = new System.Windows.Forms.ToolStrip();
this.openEntryBtn = new System.Windows.Forms.ToolStripButton();
this.panel1.SuspendLayout();
this.toolStrip1.SuspendLayout();
this.deleteEntryBtn = new System.Windows.Forms.ToolStripButton();
this.addEntryBtn = new System.Windows.Forms.ToolStripButton();
this.entriesListBox = new System.Windows.Forms.ListBox();
this.toolStrip.SuspendLayout();
this.SuspendLayout();
//
// panel1
// toolStrip
//
this.panel1.Controls.Add(this.toolStrip1);
this.panel1.Controls.Add(this.entriesListBox);
this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
this.panel1.Location = new System.Drawing.Point(0, 0);
this.panel1.Name = "panel1";
this.panel1.Size = new System.Drawing.Size(800, 450);
this.panel1.TabIndex = 1;
//
// entriesListBox
//
this.entriesListBox.Dock = System.Windows.Forms.DockStyle.Bottom;
this.entriesListBox.FormattingEnabled = true;
this.entriesListBox.ItemHeight = 20;
this.entriesListBox.Location = new System.Drawing.Point(0, 46);
this.entriesListBox.Name = "entriesListBox";
this.entriesListBox.Size = new System.Drawing.Size(800, 404);
this.entriesListBox.TabIndex = 0;
//
// toolStrip1
//
this.toolStrip1.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
this.toolStrip1.ImageScalingSize = new System.Drawing.Size(20, 20);
this.toolStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.openEntryBtn});
this.toolStrip1.Location = new System.Drawing.Point(0, 0);
this.toolStrip1.Name = "toolStrip1";
this.toolStrip1.Size = new System.Drawing.Size(800, 27);
this.toolStrip1.TabIndex = 1;
this.toolStrip1.Text = "toolStrip1";
this.toolStrip.ImageScalingSize = new System.Drawing.Size(20, 20);
this.toolStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.openEntryBtn,
this.deleteEntryBtn,
this.addEntryBtn});
this.toolStrip.Location = new System.Drawing.Point(0, 0);
this.toolStrip.Name = "toolStrip";
this.toolStrip.Size = new System.Drawing.Size(800, 27);
this.toolStrip.TabIndex = 0;
this.toolStrip.Text = "toolStrip";
//
// openEntryBtn
//
@@ -75,31 +56,62 @@
this.openEntryBtn.Image = ((System.Drawing.Image)(resources.GetObject("openEntryBtn.Image")));
this.openEntryBtn.ImageTransparentColor = System.Drawing.Color.Magenta;
this.openEntryBtn.Name = "openEntryBtn";
this.openEntryBtn.Size = new System.Drawing.Size(80, 24);
this.openEntryBtn.Text = "openEntry";
this.openEntryBtn.Size = new System.Drawing.Size(86, 24);
this.openEntryBtn.Text = "Open entry";
this.openEntryBtn.Click += new System.EventHandler(this.openEntryBtn_Click);
//
// deleteEntryBtn
//
this.deleteEntryBtn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.deleteEntryBtn.Image = ((System.Drawing.Image)(resources.GetObject("deleteEntryBtn.Image")));
this.deleteEntryBtn.ImageTransparentColor = System.Drawing.Color.Magenta;
this.deleteEntryBtn.Name = "deleteEntryBtn";
this.deleteEntryBtn.Size = new System.Drawing.Size(94, 24);
this.deleteEntryBtn.Text = "Delete entry";
this.deleteEntryBtn.Click += new System.EventHandler(this.deleteEntryBtn_Click);
//
// addEntryBtn
//
this.addEntryBtn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.addEntryBtn.Image = ((System.Drawing.Image)(resources.GetObject("addEntryBtn.Image")));
this.addEntryBtn.ImageTransparentColor = System.Drawing.Color.Magenta;
this.addEntryBtn.Name = "addEntryBtn";
this.addEntryBtn.Size = new System.Drawing.Size(109, 24);
this.addEntryBtn.Text = "Add new entry";
this.addEntryBtn.Click += new System.EventHandler(this.addEntryBtn_Click);
//
// entriesListBox
//
this.entriesListBox.FormattingEnabled = true;
this.entriesListBox.ItemHeight = 20;
this.entriesListBox.Location = new System.Drawing.Point(67, 125);
this.entriesListBox.Name = "entriesListBox";
this.entriesListBox.Size = new System.Drawing.Size(554, 284);
this.entriesListBox.TabIndex = 1;
//
// BMGEditForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.panel1);
this.Controls.Add(this.entriesListBox);
this.Controls.Add(this.toolStrip);
this.Name = "BMGEditForm";
this.Text = "BMGEditForm";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.BMGEditForm_FormClosing);
this.panel1.ResumeLayout(false);
this.panel1.PerformLayout();
this.toolStrip1.ResumeLayout(false);
this.toolStrip1.PerformLayout();
this.toolStrip.ResumeLayout(false);
this.toolStrip.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Panel panel1;
private System.Windows.Forms.ListBox entriesListBox;
private System.Windows.Forms.ToolStrip toolStrip1;
private System.Windows.Forms.ToolStrip toolStrip;
private System.Windows.Forms.ToolStripButton openEntryBtn;
private System.Windows.Forms.ToolStripButton deleteEntryBtn;
private System.Windows.Forms.ToolStripButton addEntryBtn;
private System.Windows.Forms.ListBox entriesListBox;
}
}

View File

@@ -42,5 +42,16 @@ namespace BMGEditor
Form txtEditForm = new TextEntryEditorForm(m_File.Entries[entriesListBox.SelectedIndex]);
txtEditForm.Show();
}
private void addEntryBtn_Click(object sender, EventArgs e)
{
Form newEntryForm = new NewEntryForm();
newEntryForm.Show();
}
private void deleteEntryBtn_Click(object sender, EventArgs e)
{
m_File.NukeFile();
}
}
}

View File

@@ -57,19 +57,41 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="toolStrip1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<metadata name="toolStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="openEntryBtn.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEISURBVEhL3ZErDsJAGIR7DlA47oArV8CDR9RiSDAQPBcA
Qx1BgUMQBEk1ooJAKE0I4Wlqf5gmu1n6oqW7hiZfthkx33aqeZ5HKvEFpmmSYRhSQScXINB1XSroDAke
96cUpAmupyPZsx7Z8x4drAnPpQmsgU7LdoHDJNIEYjnAlyBXJ3jPhVyaYLca8nLMhX+CPJXAOT+ouTj5
p5in4asApdWpS8XRwT+zShIFG/fOyxlZJbGC9f5G5bHzUf6LJFJQqTViyxlxEmRiHhLUW10qDbeRpUGC
ErwjE/OQoG9dIsviYGWsXMwxc24BYLcO5pgZc+cWJIG5MbsyAUDnHwlUAkFHJZraR9NeMVq3zi+WF/0A
AAAASUVORK5CYII=
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw
6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV
vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC
U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T
luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM
qgAAAABJRU5ErkJggg==
</value>
</data>
<data name="deleteEntryBtn.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw
6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV
vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC
U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T
luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM
qgAAAABJRU5ErkJggg==
</value>
</data>
<data name="addEntryBtn.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEKSURBVEhL3ZG9DsFQHMXvczDZvIOtXsHObuhqkViI3Quw
6CYmNoMYJJ0NBiFFIoIytOuf0+TeXP3yde+iyS+3OcP53Z4y3/dJJ4HAsiwyTVMp6BQCBIZhKAWdEcHV
vSlBmeB82NFy1KLluEWOPRC5MoHdMWhazwi4RJlALgf4EuT6BI+5kCsTrGddUY658E+QvyXYHq9UnRyC
U87f4aUApcXhnrI9Jzg/laQKFntXlHM+lSQK5psL5fvbp/JvJLGCQqmSWM5JkiCT84igXGtSrruKLQ0T
luAdmZxHBG37FFuWBC/j5XKOmX8WAH7rcI6ZMffPgjQwN2bXJgDo/COBTpjneQ2dML0PY3cISreGe8HM
qgAAAABJRU5ErkJggg==
</value>
</data>
</root>

View File

@@ -32,6 +32,7 @@
this.tsToolbar = new System.Windows.Forms.ToolStrip();
this.btnSave = new System.Windows.Forms.ToolStripButton();
this.dgvBcsv = new System.Windows.Forms.DataGridView();
this.sortBtn = new System.Windows.Forms.ToolStripButton();
this.tsToolbar.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.dgvBcsv)).BeginInit();
this.SuspendLayout();
@@ -40,7 +41,8 @@
//
this.tsToolbar.ImageScalingSize = new System.Drawing.Size(20, 20);
this.tsToolbar.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.btnSave});
this.btnSave,
this.sortBtn});
this.tsToolbar.Location = new System.Drawing.Point(0, 0);
this.tsToolbar.Name = "tsToolbar";
this.tsToolbar.Size = new System.Drawing.Size(1039, 27);
@@ -72,6 +74,17 @@
this.dgvBcsv.Size = new System.Drawing.Size(1039, 731);
this.dgvBcsv.TabIndex = 1;
//
// sortBtn
//
this.sortBtn.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Text;
this.sortBtn.Image = ((System.Drawing.Image)(resources.GetObject("sortBtn.Image")));
this.sortBtn.ImageTransparentColor = System.Drawing.Color.Magenta;
this.sortBtn.Name = "sortBtn";
this.sortBtn.Size = new System.Drawing.Size(40, 24);
this.sortBtn.Text = "Sort";
this.sortBtn.ToolTipText = "Sort";
this.sortBtn.Click += new System.EventHandler(this.sortBtn_Click);
//
// BcsvEditorForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
@@ -96,5 +109,6 @@
private System.Windows.Forms.ToolStrip tsToolbar;
private System.Windows.Forms.DataGridView dgvBcsv;
private System.Windows.Forms.ToolStripButton btnSave;
private System.Windows.Forms.ToolStripButton sortBtn;
}
}

View File

@@ -96,5 +96,48 @@ namespace BMGEditor
{
m_File.Close();
}
private void sortBtn_Click(object sender, EventArgs e)
{
//foreach (DataGridViewCell cell in dgvBcsv.Columns[0]) { }
/*for (int i = 0; i < dgvBcsv.RowCount; i++)
{
DataGridViewCell curCell = dgvBcsv.Rows[i].Cells[0];
DataGridViewCell nextCell = dgvBcsv.Rows[i+1].Cells[0];
}*/
dgvBcsv.Sort(new RowCompare(SortOrder.Ascending));
}
private class RowCompare : System.Collections.IComparer
{
private static int sortOrderModifier = 1;
public RowCompare(SortOrder sortOrder)
{
switch (sortOrder)
{
case SortOrder.Ascending:
sortOrderModifier = 1;
break;
case SortOrder.Descending:
sortOrderModifier = -1;
break;
}
}
public int Compare(object x, object y)
{
DataGridViewRow curRow = (DataGridViewRow)x;
DataGridViewRow nextRow = (DataGridViewRow)y;
int CompareResult = System.String.CompareOrdinal(curRow.Cells[0].Value.ToString(),
nextRow.Cells[0].Value.ToString());
return CompareResult * sortOrderModifier;
}
}
}
}

View File

@@ -74,6 +74,17 @@
mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+
kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D
TgDQASA1MVpwzwAAAABJRU5ErkJggg==
</value>
</data>
<data name="sortBtn.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEISURBVEhL3ZErDsJAGIR7DlA47oArV8CDR9RiSDAQPBcA
Qx1BgUMQBEk1ooJAKE0I4Wlqf5gmu1n6oqW7hiZfthkx33aqeZ5HKvEFpmmSYRhSQScXINB1XSroDAke
96cUpAmupyPZsx7Z8x4drAnPpQmsgU7LdoHDJNIEYjnAlyBXJ3jPhVyaYLca8nLMhX+CPJXAOT+ouTj5
p5in4asApdWpS8XRwT+zShIFG/fOyxlZJbGC9f5G5bHzUf6LJFJQqTViyxlxEmRiHhLUW10qDbeRpUGC
ErwjE/OQoG9dIsviYGWsXMwxc24BYLcO5pgZc+cWJIG5MbsyAUDnHwlUAkFHJZraR9NeMVq3zi+WF/0A
AAAASUVORK5CYII=
</value>
</data>
</root>

97
BMGEditor/UI/NewEntryForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,97 @@
namespace BMGEditor.UI
{
partial class NewEntryForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.createEntryBtn = new System.Windows.Forms.Button();
this.textBox1 = new System.Windows.Forms.TextBox();
this.groupBox = new System.Windows.Forms.GroupBox();
this.cancelBtn = new System.Windows.Forms.Button();
this.groupBox.SuspendLayout();
this.SuspendLayout();
//
// createEntryBtn
//
this.createEntryBtn.Location = new System.Drawing.Point(694, 409);
this.createEntryBtn.Name = "createEntryBtn";
this.createEntryBtn.Size = new System.Drawing.Size(94, 29);
this.createEntryBtn.TabIndex = 0;
this.createEntryBtn.Text = "Create";
this.createEntryBtn.UseVisualStyleBackColor = true;
this.createEntryBtn.Click += new System.EventHandler(this.createEntryBtn_Click);
//
// textBox1
//
this.textBox1.Location = new System.Drawing.Point(34, 56);
this.textBox1.Name = "textBox1";
this.textBox1.Size = new System.Drawing.Size(125, 27);
this.textBox1.TabIndex = 1;
//
// groupBox
//
this.groupBox.Controls.Add(this.textBox1);
this.groupBox.Location = new System.Drawing.Point(46, 38);
this.groupBox.Name = "groupBox";
this.groupBox.Size = new System.Drawing.Size(250, 125);
this.groupBox.TabIndex = 2;
this.groupBox.TabStop = false;
this.groupBox.Text = "Entry name";
//
// cancelBtn
//
this.cancelBtn.Location = new System.Drawing.Point(594, 409);
this.cancelBtn.Name = "cancelBtn";
this.cancelBtn.Size = new System.Drawing.Size(94, 29);
this.cancelBtn.TabIndex = 3;
this.cancelBtn.Text = "Cancel";
this.cancelBtn.UseVisualStyleBackColor = true;
//
// NewEntryForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(800, 450);
this.Controls.Add(this.cancelBtn);
this.Controls.Add(this.groupBox);
this.Controls.Add(this.createEntryBtn);
this.Name = "NewEntryForm";
this.Text = "NewEntryForm";
this.groupBox.ResumeLayout(false);
this.groupBox.PerformLayout();
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.Button createEntryBtn;
private System.Windows.Forms.TextBox textBox1;
private System.Windows.Forms.GroupBox groupBox;
private System.Windows.Forms.Button cancelBtn;
}
}

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace BMGEditor.UI
{
public partial class NewEntryForm : Form
{
public NewEntryForm()
{
InitializeComponent();
}
private void createEntryBtn_Click(object sender, EventArgs e)
{
}
}
}

View File

@@ -0,0 +1,60 @@
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>