743 lines
22 KiB
C#
743 lines
22 KiB
C#
using System;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using System.Xml.Serialization;
|
|
using System.ComponentModel;
|
|
using System.Xml;
|
|
using System.Xml.Schema;
|
|
using System.IO;
|
|
|
|
namespace XMLConvert
|
|
{
|
|
/// <summary>
|
|
/// Root Node
|
|
/// </summary>
|
|
[XmlRoot("html")]
|
|
public class vlnhtml : VlnHtmlContainer
|
|
{
|
|
}
|
|
[TypeConverter(typeof(ExpandableObjectConverter))]
|
|
/// <summary>
|
|
/// Part
|
|
/// </summary>
|
|
public class VlnHtmlPart
|
|
{
|
|
#region ID
|
|
protected string _ID = string.Empty;
|
|
[System.ComponentModel.DefaultValueAttribute("")]
|
|
[XmlIgnore]
|
|
public string ID
|
|
{
|
|
get { return _ID; }
|
|
set { _ID = value; }
|
|
}
|
|
#endregion
|
|
//#region Parent and Containing Svg
|
|
//// ToDo: MyParent
|
|
//private SvgPartGrouping _MyParent;
|
|
//[XmlIgnore()]
|
|
//public SvgPartGrouping MyParent
|
|
//{
|
|
// get { return _MyParent; }
|
|
// set { _MyParent = value; }
|
|
//}
|
|
//// ToDo: MySvg
|
|
//private Svg _MySvg;
|
|
//public Svg MySvg
|
|
//{
|
|
// get { return _MySvg; }
|
|
// set { _MySvg = value; }
|
|
//}
|
|
//internal void SetParent(SvgPartGrouping myParent)
|
|
//{
|
|
// _MyParent = myParent;
|
|
// _MySvg = myParent.MySvg == null? MyParent : myParent.MySvg;
|
|
//}
|
|
//#endregion
|
|
#region Dictionary of Parts
|
|
internal virtual void AddLookup(Dictionary<string, VlnHtmlPart> lookUp)
|
|
{
|
|
if (_ID != string.Empty && !lookUp.ContainsKey(_ID))
|
|
lookUp.Add(_ID, this);
|
|
}
|
|
#endregion
|
|
}
|
|
[Serializable()]
|
|
[TypeConverter(typeof(VlnHtmlPartsConverter))]
|
|
/// <summary>
|
|
/// Parts
|
|
/// </summary>
|
|
public class VlnHtmlParts : CollectionBase, ICustomTypeDescriptor
|
|
{
|
|
/// <summary>Notifies when the collection has been modified.</summary>
|
|
public event EventHandler OnItemsChanged;
|
|
|
|
/// <summary>Notifies that an item has been added.</summary>
|
|
public event VlnHtmlPartHandler OnItemAdd;
|
|
|
|
/// <summary>Notifies that items have been added.</summary>
|
|
public event VlnHtmlPartHandler OnItemsAdd;
|
|
|
|
/// <summary>Notifies that an item has been removed.</summary>
|
|
public event VlnHtmlPartHandler OnItemRemove;
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// Initializes a new instance of <see cref='VlnHtmlPart'/>.
|
|
/// </para>
|
|
/// </summary>
|
|
public VlnHtmlParts()
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// Initializes a new instance of <see cref='VlnHtmlPart'/> based on another <see cref='VlnHtmlPart'/>.
|
|
/// </para>
|
|
/// </summary>
|
|
/// <param name='value'>
|
|
/// A <see cref='VlnHtmlPart'/> from which the contents are copied
|
|
/// </param>
|
|
public VlnHtmlParts(VlnHtmlParts value)
|
|
{
|
|
this.AddRange(value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// Initializes a new instance of <see cref='VlnHtmlPart'/> containing any array of <see cref='VlnHtmlPart'/> objects.
|
|
/// </para>
|
|
/// </summary>
|
|
/// <param name='value'>
|
|
/// A array of <see cref='VlnHtmlPart'/> objects with which to intialize the collection
|
|
/// </param>
|
|
public VlnHtmlParts(VlnHtmlPart[] value)
|
|
{
|
|
this.AddRange(value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>Represents the entry at the specified index of the <see cref='VlnHtmlPart'/>.</para>
|
|
/// </summary>
|
|
/// <param name='index'><para>The zero-based index of the entry to locate in the collection.</para></param>
|
|
/// <value>
|
|
/// <para> The entry at the specified index of the collection.</para>
|
|
/// </value>
|
|
/// <exception cref='System.ArgumentOutOfRangeException'><paramref name='index'/> is outside the valid range of indexes for the collection.</exception>
|
|
public VlnHtmlPart this[int index]
|
|
{
|
|
get { return ((VlnHtmlPart)(List[index])); }
|
|
set { List[index] = value; }
|
|
}
|
|
//#region SetupInheritance
|
|
//internal void SetupInheritance(SvgInheritedSettings myParentsSettings)
|
|
//{
|
|
// foreach (vlnhtmlpart vlnhtmlpart in List)
|
|
// vlnhtmlpart.SetupInheritance(myParentsSettings);
|
|
//}
|
|
//#endregion
|
|
#region Dictionary of Parts
|
|
internal void AddLookup(Dictionary<string, VlnHtmlPart> lookUp)
|
|
{
|
|
foreach (VlnHtmlPart vlnhtmlpart in List)
|
|
vlnhtmlpart.AddLookup(lookUp);
|
|
}
|
|
#endregion
|
|
internal static void ShowException(Exception ex)
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
string sep = "";
|
|
for (Exception ex1 = ex; ex1 != null; ex1 = ex1.InnerException)
|
|
{
|
|
sb.Append(sep + string.Format("ShowException {0} - {1}", ex1.GetType().Name, ex1.Message));
|
|
sep = "\r\n";
|
|
}
|
|
Console.WriteLine(sb);
|
|
}
|
|
/// <summary>
|
|
/// <para>Adds a <see cref='VlnHtmlPart'/> with the specified value to the
|
|
/// <see cref='VlnHtmlPart'/> .</para>
|
|
/// </summary>
|
|
/// <param name='value'>The <see cref='VlnHtmlPart'/> to add.</param>
|
|
/// <returns>
|
|
/// <para>The index at which the new element was inserted.</para>
|
|
/// </returns>
|
|
/// <seealso cref='VlnHtmlParts.AddRange'/>
|
|
public int Add(VlnHtmlPart value)
|
|
{
|
|
int ndx = List.Add(value);
|
|
if (OnItemAdd != null) { OnItemAdd(this, new vlnhtmlpartArgs(value)); }
|
|
if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); }
|
|
return ndx;
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>Copies the elements of an array to the end of the <see cref='VlnHtmlPart'/>.</para>
|
|
/// </summary>
|
|
/// <param name='value'>
|
|
/// An array of type <see cref='VlnHtmlPart'/> containing the objects to add to the collection.
|
|
/// </param>
|
|
/// <returns>
|
|
/// <para>None.</para>
|
|
/// </returns>
|
|
/// <seealso cref='VlnHtmlParts.Add'/>
|
|
public void AddRange(VlnHtmlPart[] value)
|
|
{
|
|
for (int i = 0; i < value.Length; i++)
|
|
{
|
|
this.Add(value[i]);
|
|
}
|
|
if (OnItemsAdd != null) { OnItemsAdd(this, new vlnhtmlpartArgs(value)); }
|
|
if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>
|
|
/// Adds the contents of another <see cref='VlnHtmlPart'/> to the end of the collection.
|
|
/// </para>
|
|
/// </summary>
|
|
/// <param name='value'>
|
|
/// A <see cref='VlnHtmlPart'/> containing the objects to add to the collection.
|
|
/// </param>
|
|
/// <returns>
|
|
/// <para>None.</para>
|
|
/// </returns>
|
|
/// <seealso cref='VlnHtmlParts.Add'/>
|
|
public void AddRange(VlnHtmlParts value)
|
|
{
|
|
for (int i = 0; i < value.Count; i++)
|
|
{
|
|
this.Add(value[i]);
|
|
}
|
|
if (OnItemsAdd != null) { OnItemsAdd(this, new vlnhtmlpartArgs(value)); }
|
|
if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>Gets a value indicating whether the
|
|
/// <see cref='VlnHtmlPart'/> contains the specified <see cref='VlnHtmlPart'/>.</para>
|
|
/// </summary>
|
|
/// <param name='value'>The <see cref='VlnHtmlPart'/> to locate.</param>
|
|
/// <returns>
|
|
/// <para><see langword='true'/> if the <see cref='VlnHtmlPart'/> is contained in the collection;
|
|
/// otherwise, <see langword='false'/>.</para>
|
|
/// </returns>
|
|
/// <seealso cref='VlnHtmlParts.IndexOf'/>
|
|
public bool Contains(VlnHtmlPart value)
|
|
{
|
|
return List.Contains(value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>Copies the <see cref='VlnHtmlPart'/> values to a one-dimensional <see cref='System.Array'/> instance at the
|
|
/// specified index.</para>
|
|
/// </summary>
|
|
/// <param name='array'><para>The one-dimensional <see cref='System.Array'/> that is the destination of the values copied from <see cref='VlnHtmlPart'/> .</para></param>
|
|
/// <param name='index'>The index in <paramref name='array'/> where copying begins.</param>
|
|
/// <returns>
|
|
/// <para>None.</para>
|
|
/// </returns>
|
|
/// <exception cref='System.ArgumentException'><para><paramref name='array'/> is multidimensional.</para> <para>-or-</para> <para>The number of elements in the <see cref='VlnHtmlPart'/> is greater than the available space between <paramref name='arrayIndex'/> and the end of <paramref name='array'/>.</para></exception>
|
|
/// <exception cref='System.ArgumentNullException'><paramref name='array'/> is <see langword='null'/>. </exception>
|
|
/// <exception cref='System.ArgumentOutOfRangeException'><paramref name='arrayIndex'/> is less than <paramref name='array'/>'s lowbound. </exception>
|
|
/// <seealso cref='System.Array'/>
|
|
public void CopyTo(VlnHtmlPart[] array, int index)
|
|
{
|
|
List.CopyTo(array, index);
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>Returns the index of a <see cref='VlnHtmlPart'/> in
|
|
/// the <see cref='VlnHtmlPart'/> .</para>
|
|
/// </summary>
|
|
/// <param name='value'>The <see cref='VlnHtmlPart'/> to locate.</param>
|
|
/// <returns>
|
|
/// <para>The index of the <see cref='VlnHtmlPart'/> of <paramref name='value'/> in the
|
|
/// <see cref='VlnHtmlPart'/>, if found; otherwise, -1.</para>
|
|
/// </returns>
|
|
/// <seealso cref='VlnHtmlParts.Contains'/>
|
|
public int IndexOf(VlnHtmlPart value)
|
|
{
|
|
return List.IndexOf(value);
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para>Inserts a <see cref='VlnHtmlPart'/> into the <see cref='VlnHtmlParts'/> at the specified index.</para>
|
|
/// </summary>
|
|
/// <param name='index'>The zero-based index where <paramref name='value'/> should be inserted.</param>
|
|
/// <param name=' value'>The <see cref='VlnHtmlPart'/> to insert.</param>
|
|
/// <returns><para>None.</para></returns>
|
|
/// <seealso cref='VlnHtmlParts.Add'/>
|
|
public void Insert(int index, VlnHtmlPart value)
|
|
{
|
|
List.Insert(index, value);
|
|
if (OnItemAdd != null) { OnItemAdd(this, new vlnhtmlpartArgs(value)); }
|
|
if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); }
|
|
}
|
|
|
|
/// <summary>
|
|
/// <para> Removes a specific <see cref='VlnHtmlPart'/> from the
|
|
/// <see cref='VlnHtmlParts'/> .</para>
|
|
/// </summary>
|
|
/// <param name='value'>The <see cref='VlnHtmlPart'/> to remove from the <see cref='VlnHtmlParts'/> .</param>
|
|
/// <returns><para>None.</para></returns>
|
|
/// <exception cref='System.ArgumentException'><paramref name='value'/> is not found in the Collection. </exception>
|
|
public void Remove(VlnHtmlPart value)
|
|
{
|
|
List.Remove(value);
|
|
if (OnItemRemove != null) { OnItemRemove(this, new vlnhtmlpartArgs(value)); }
|
|
if (OnItemsChanged != null) { OnItemsChanged(value, EventArgs.Empty); }
|
|
}
|
|
#region ICustomTypeDescriptor impl
|
|
public String GetClassName()
|
|
{ return TypeDescriptor.GetClassName(this, true); }
|
|
public AttributeCollection GetAttributes()
|
|
{ return TypeDescriptor.GetAttributes(this, true); }
|
|
public String GetComponentName()
|
|
{ return TypeDescriptor.GetComponentName(this, true); }
|
|
public TypeConverter GetConverter()
|
|
{ return TypeDescriptor.GetConverter(this, true); }
|
|
public EventDescriptor GetDefaultEvent()
|
|
{ return TypeDescriptor.GetDefaultEvent(this, true); }
|
|
public PropertyDescriptor GetDefaultProperty()
|
|
{ return TypeDescriptor.GetDefaultProperty(this, true); }
|
|
public object GetEditor(Type editorBaseType)
|
|
{ return TypeDescriptor.GetEditor(this, editorBaseType, true); }
|
|
public EventDescriptorCollection GetEvents(System.Attribute[] attributes)
|
|
{ return TypeDescriptor.GetEvents(this, attributes, true); }
|
|
public EventDescriptorCollection GetEvents()
|
|
{ return TypeDescriptor.GetEvents(this, true); }
|
|
public object GetPropertyOwner(PropertyDescriptor pd)
|
|
{ return this; }
|
|
/// <summary>
|
|
/// Called to get the properties of this type. Returns properties with certain
|
|
/// attributes. this restriction is not implemented here.
|
|
/// </summary>
|
|
/// <param name="attributes"></param>
|
|
/// <returns></returns>
|
|
public PropertyDescriptorCollection GetProperties(System.Attribute[] attributes)
|
|
{ return GetProperties(); }
|
|
/// <summary>
|
|
/// Called to get the properties of this type.
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public PropertyDescriptorCollection GetProperties()
|
|
{
|
|
// Create a collection object to hold property descriptors
|
|
PropertyDescriptorCollection pds = new PropertyDescriptorCollection(null);
|
|
// Iterate the list
|
|
for (int i = 0; i < this.Count; i++)
|
|
{
|
|
// Create a property descriptor for the item and add to the property descriptor collection
|
|
vlnhtmlpartsPropertyDescriptor pd = new vlnhtmlpartsPropertyDescriptor(this, i);
|
|
pds.Add(pd);
|
|
}
|
|
// return the property descriptor collection
|
|
return pds;
|
|
}
|
|
#endregion
|
|
|
|
/// Event arguments for the vlnhtmlparts collection class.
|
|
public class vlnhtmlpartArgs : EventArgs
|
|
{
|
|
private VlnHtmlParts t;
|
|
|
|
/// Default constructor.
|
|
public vlnhtmlpartArgs()
|
|
{
|
|
t = new VlnHtmlParts();
|
|
}
|
|
|
|
/// Initializes with a vlnhtmlpart.
|
|
/// Data object.
|
|
public vlnhtmlpartArgs(VlnHtmlPart t)
|
|
: this()
|
|
{
|
|
this.t.Add(t);
|
|
}
|
|
|
|
/// Initializes with a collection of vlnhtmlpart objects.
|
|
/// Collection of data.
|
|
public vlnhtmlpartArgs(VlnHtmlParts ts)
|
|
: this()
|
|
{
|
|
this.t.AddRange(ts);
|
|
}
|
|
|
|
/// Initializes with an array of vlnhtmlpart objects.
|
|
/// Array of data.
|
|
public vlnhtmlpartArgs(VlnHtmlPart[] ts)
|
|
: this()
|
|
{
|
|
this.t.AddRange(ts);
|
|
}
|
|
|
|
/// Gets or sets the data of this argument.
|
|
public VlnHtmlParts vlnhtmlparts
|
|
{
|
|
get { return t; }
|
|
set { t = value; }
|
|
}
|
|
}
|
|
|
|
/// vlnhtmlparts event handler.
|
|
public delegate void VlnHtmlPartHandler(object sender, vlnhtmlpartArgs e);
|
|
#region Property Descriptor
|
|
/// <summary>
|
|
/// Summary description for CollectionPropertyDescriptor.
|
|
/// </summary>
|
|
public partial class vlnhtmlpartsPropertyDescriptor : vlnListPropertyDescriptor
|
|
{
|
|
private VlnHtmlPart Item { get { return (VlnHtmlPart)_Item; } }
|
|
public vlnhtmlpartsPropertyDescriptor(VlnHtmlParts collection, int index) : base(collection, index) { ;}
|
|
public override string DisplayName
|
|
{ get { return Item.GetType().Name; } }
|
|
}
|
|
#endregion
|
|
[Serializable()]
|
|
public partial class vlnListPropertyDescriptor : PropertyDescriptor
|
|
{
|
|
protected object _Item = null;
|
|
public vlnListPropertyDescriptor(System.Collections.IList collection, int index)
|
|
: base("#" + index.ToString(), null)
|
|
{ _Item = collection[index]; }
|
|
public override bool CanResetValue(object component)
|
|
{ return true; }
|
|
public override Type ComponentType
|
|
{ get { return _Item.GetType(); } }
|
|
public override object GetValue(object component)
|
|
{ return _Item; }
|
|
public override bool IsReadOnly
|
|
{ get { return false; } }
|
|
public override Type PropertyType
|
|
{ get { return _Item.GetType(); } }
|
|
public override void ResetValue(object component)
|
|
{ ;}
|
|
public override bool ShouldSerializeValue(object component)
|
|
{ return true; }
|
|
public override void SetValue(object component, object value)
|
|
{ /*_Item = value*/;}
|
|
//public override AttributeCollection Attributes
|
|
//{ get { return new AttributeCollection(null); } }
|
|
public override string DisplayName
|
|
{ get { return _Item.ToString(); } }
|
|
public override string Description
|
|
{ get { return _Item.ToString(); } }
|
|
public override string Name
|
|
{ get { return _Item.ToString(); } }
|
|
|
|
} // Class
|
|
#region Converter
|
|
internal class VlnHtmlPartsConverter : ExpandableObjectConverter
|
|
{
|
|
public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
|
|
{
|
|
if (destType == typeof(string) && value is VlnHtmlParts)
|
|
{
|
|
// Return department and department role separated by comma.
|
|
return ((VlnHtmlParts)value).List.Count.ToString() + " SVG Drawing Parts";
|
|
}
|
|
return base.ConvertTo(context, culture, value, destType);
|
|
}
|
|
}
|
|
#endregion
|
|
/// SVGParts event handler.
|
|
//public delegate void VlnHtmlPartHandler(object sender, VlnHtmlPartArgs e);
|
|
//#region Property Descriptor
|
|
///// <summary>
|
|
///// Summary description for CollectionPropertyDescriptor.
|
|
///// </summary>
|
|
//public partial class VlnHtmlPartsPropertyDescriptor : vlnListPropertyDescriptor
|
|
//{
|
|
// private VlnHtmlPart Item { get { return (VlnHtmlPart)_Item; } }
|
|
// public VlnHtmlPartsPropertyDescriptor(VlnHtmlParts collection, int index) : base(collection, index) { ;}
|
|
// public override string DisplayName
|
|
// { get { return Item.GetType().Name; } }
|
|
//}
|
|
//#endregion
|
|
//[Serializable()]
|
|
//public partial class vlnListPropertyDescriptor : PropertyDescriptor
|
|
//{
|
|
// protected object _Item = null;
|
|
// public vlnListPropertyDescriptor(System.Collections.IList collection, int index)
|
|
// : base("#" + index.ToString(), null)
|
|
// { _Item = collection[index]; }
|
|
// public override bool CanResetValue(object component)
|
|
// { return true; }
|
|
// public override Type ComponentType
|
|
// { get { return _Item.GetType(); } }
|
|
// public override object GetValue(object component)
|
|
// { return _Item; }
|
|
// public override bool IsReadOnly
|
|
// { get { return false; } }
|
|
// public override Type PropertyType
|
|
// { get { return _Item.GetType(); } }
|
|
// public override void ResetValue(object component)
|
|
// { ;}
|
|
// public override bool ShouldSerializeValue(object component)
|
|
// { return true; }
|
|
// public override void SetValue(object component, object value)
|
|
// { /*_Item = value*/;}
|
|
// //public override AttributeCollection Attributes
|
|
// //{ get { return new AttributeCollection(null); } }
|
|
// public override string DisplayName
|
|
// { get { return _Item.ToString(); } }
|
|
// public override string Description
|
|
// { get { return _Item.ToString(); } }
|
|
// public override string Name
|
|
// { get { return _Item.ToString(); } }
|
|
|
|
//} // Class
|
|
//#region Converter
|
|
//internal class VlnHtmlPartsConverter : ExpandableObjectConverter
|
|
//{
|
|
// public override object ConvertTo(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value, Type destType)
|
|
// {
|
|
// if (destType == typeof(string) && value is VlnHtmlParts)
|
|
// {
|
|
// // Return department and department role separated by comma.
|
|
// return ((VlnHtmlParts)value).List.Count.ToString() + " Vln Html Parts";
|
|
// }
|
|
// return base.ConvertTo(context, culture, value, destType);
|
|
// }
|
|
//}
|
|
// }
|
|
//#endregion
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Hyperrlink
|
|
/// </summary>
|
|
public class vlnhtml_a
|
|
{
|
|
//url
|
|
}
|
|
public class vlnhtmlContent : VlnHtmlPart
|
|
{
|
|
string _text;
|
|
[XmlText]
|
|
public string Text
|
|
{
|
|
get { return _text; }
|
|
set { _text = value; }
|
|
}
|
|
string _style;// -qt-block-indent:1or2
|
|
[XmlAttribute("style")]
|
|
public string Style
|
|
{
|
|
get { return _style; }
|
|
set { _style = value; }
|
|
}
|
|
string _align;// Center Right Justify
|
|
[XmlAttribute("align")]
|
|
public string Align
|
|
{
|
|
get { return _align; }
|
|
set { _align = value; }
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Paragraph
|
|
/// </summary>
|
|
public class vlnhtml_p : vlnhtmlContent
|
|
{
|
|
}
|
|
/// <summary>
|
|
/// Break
|
|
/// </summary>
|
|
public class vlnhtml_br : VlnHtmlPart
|
|
{
|
|
}
|
|
/// <summary>
|
|
/// Image
|
|
/// </summary>
|
|
public class vlnhtml_img : VlnHtmlPart
|
|
{
|
|
string _src;//filename and Path
|
|
[XmlAttribute("src")]
|
|
public string Src
|
|
{
|
|
get { return _src; }
|
|
set { _src = value; }
|
|
}
|
|
int _width;
|
|
[XmlAttribute("width")]
|
|
public int Width
|
|
{
|
|
get { return _width; }
|
|
set { _width = value; }
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Container
|
|
/// </summary>
|
|
public class VlnHtmlContainer : VlnHtmlPart
|
|
{
|
|
VlnHtmlParts _Children = new VlnHtmlParts();
|
|
[XmlElement("ul", typeof(vlnhtml_ul))]
|
|
[XmlElement("ol", typeof(vlnhtml_ol))]
|
|
[XmlElement("li", typeof(vlnhtml_li))]
|
|
[XmlElement("p", typeof(vlnhtml_p))]
|
|
[XmlElement("a", typeof(vlnhtml_a))]
|
|
[XmlElement("br", typeof(vlnhtml_br))]
|
|
[XmlElement("img", typeof(vlnhtml_img))]
|
|
[XmlElement("table", typeof(vlnhtml_table))]
|
|
internal VlnHtmlParts Children
|
|
{
|
|
get
|
|
{
|
|
//if (_Children == null)
|
|
// _Children = new VlnHtmlParts();
|
|
return _Children;
|
|
}
|
|
set { _Children = value; }
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Ordered List
|
|
/// </summary>
|
|
public class vlnhtml_ol : VlnHtmlContainer
|
|
{
|
|
string _style;// -qt-block-indent:1or2
|
|
[XmlAttribute("style")]
|
|
public string Style
|
|
{
|
|
get { return _style; }
|
|
set { _style = value; }
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Unordered List
|
|
/// </summary>
|
|
public class vlnhtml_ul : VlnHtmlContainer
|
|
{
|
|
string _style;// -qt-block-indent:1or2
|
|
[XmlAttribute("style")]
|
|
public string Style
|
|
{
|
|
get { return _style; }
|
|
set { _style = value; }
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// List Item
|
|
/// </summary>
|
|
public class vlnhtml_li : vlnhtmlContent
|
|
{
|
|
}
|
|
/// <summary>
|
|
/// Table
|
|
/// </summary>
|
|
public class vlnhtml_table : VlnHtmlContainer
|
|
{
|
|
string _style;// -qt-block-indent:1or2
|
|
[XmlAttribute("style")]
|
|
public string Style
|
|
{
|
|
get { return _style; }
|
|
set { _style = value; }
|
|
}
|
|
int _border;//
|
|
int _cellspacing;
|
|
int _cellpadding;
|
|
}
|
|
public class vlnhtml_tr : VlnHtmlContainer
|
|
{
|
|
}
|
|
public class vlnhtml_td : VlnHtmlContainer
|
|
{
|
|
}
|
|
public static class HtmlSerializer<T> where T : class
|
|
{
|
|
public static string StringSerialize(T t)
|
|
{
|
|
string strOutput = string.Empty;
|
|
XmlSerializer xs = new XmlSerializer(typeof(T), "http://www.w3.org/2000/html");
|
|
using (MemoryStream ms = new MemoryStream())
|
|
{
|
|
xs.Serialize(new NonXsiTextWriter(ms, Encoding.UTF8), t);
|
|
//xs.Serialize(ms, t);
|
|
ms.Position = 0;
|
|
StreamReader sr = new StreamReader(ms);
|
|
strOutput = sr.ReadToEnd();
|
|
ms.Close();
|
|
}
|
|
return strOutput;
|
|
}
|
|
public static T StringDeserialize(string s)
|
|
{
|
|
T t;
|
|
XmlSerializer xs = new XmlSerializer(typeof(T), "http://www.w3.org/2000/html");
|
|
UTF8Encoding enc = new UTF8Encoding();
|
|
Byte[] arrBytData = enc.GetBytes(s);
|
|
using (MemoryStream ms = new MemoryStream(arrBytData))
|
|
{
|
|
t = (T)xs.Deserialize(ms);
|
|
}
|
|
return t;
|
|
}
|
|
public static void WriteFile(T t, string fileName)
|
|
{
|
|
string strOutput = string.Empty;
|
|
XmlSerializer xs = new XmlSerializer(typeof(T), "http://www.w3.org/2000/html");
|
|
using (FileStream fs = new FileStream(fileName, FileMode.Create))
|
|
{
|
|
xs.Serialize(new NonXsiTextWriter(fs, Encoding.UTF8), t);
|
|
fs.Close();
|
|
}
|
|
}
|
|
public static T ReadFile(string fileName)
|
|
{
|
|
T t;
|
|
XmlSerializer xs = new XmlSerializer(typeof(T), "http://www.w3.org/2000/html");
|
|
using (FileStream fs = new FileStream(fileName, FileMode.Open))
|
|
{
|
|
t = (T)xs.Deserialize(fs);
|
|
}
|
|
return t;
|
|
}
|
|
}
|
|
public class NonXsiTextWriter : XmlTextWriter
|
|
{
|
|
public NonXsiTextWriter(TextWriter w) : base(w) { }
|
|
public NonXsiTextWriter(Stream w, Encoding encoding)
|
|
: base(w, encoding)
|
|
{
|
|
this.Formatting = Formatting.Indented;
|
|
}
|
|
public NonXsiTextWriter(string filename, Encoding encoding) : base(filename, encoding) { }
|
|
bool _skip = false;
|
|
public override void WriteStartAttribute(string prefix, string localName, string ns)
|
|
{
|
|
if ((prefix == "xmlns" && (localName == "xsd" || localName == "xsi")) || // Omits XSD and XSI declarations.
|
|
ns == XmlSchema.InstanceNamespace) // Omits all XSI attributes.
|
|
{
|
|
_skip = true;
|
|
return;
|
|
}
|
|
if (localName == "xlink_href")
|
|
base.WriteStartAttribute(prefix, "xlink:href", ns);
|
|
else
|
|
base.WriteStartAttribute(prefix, localName, ns);
|
|
}
|
|
public override void WriteString(string text)
|
|
{
|
|
if (_skip) return;
|
|
base.WriteString(text);
|
|
}
|
|
public override void WriteEndAttribute()
|
|
{
|
|
if (_skip)
|
|
{ // Reset the flag, so we keep writing.
|
|
_skip = false;
|
|
return;
|
|
}
|
|
base.WriteEndAttribute();
|
|
}
|
|
}
|
|
}
|