diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/ContentTypes/OPCContentTypesDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/ContentTypes/OPCContentTypesDataFormat.cs index 5f49b3e9..deac9715 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/ContentTypes/OPCContentTypesDataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/ContentTypes/OPCContentTypesDataFormat.cs @@ -29,22 +29,55 @@ namespace UniversalEditor.DataFormats.Package.ContentTypes MarkupTagElement tagType = (elType as MarkupTagElement); if (elType == null) continue; - ContentType type = new ContentType(); + DefaultDefinition type = new DefaultDefinition(); MarkupAttribute attExtension = tagType.Attributes["Extension"]; if (attExtension != null) type.Extension = attExtension.Value; MarkupAttribute attContentType = tagType.Attributes["ContentType"]; - if (attContentType != null) type.Value = attContentType.Value; + if (attContentType != null) type.ContentType = attContentType.Value; switch (elType.FullName) { case "Default": { - types.ContentTypes.Add(type); + types.DefaultDefinitions.Add(type); break; } } } } + + protected override void BeforeSaveInternal (Stack objectModels) + { + MarkupObjectModel mom = new MarkupObjectModel (); + ContentTypesObjectModel types = (objectModels.Pop () as ContentTypesObjectModel); + + MarkupTagElement tagTypes = new MarkupTagElement (); + tagTypes.FullName = "Types"; + tagTypes.Attributes.Add ("xmlns", "http://schemas.openxmlformats.org/package/2006/content-types"); + + foreach (DefaultDefinition type in types.DefaultDefinitions) + { + MarkupTagElement tagDefault = new MarkupTagElement (); + tagDefault.FullName = "Default"; + tagDefault.Attributes.Add ("Extension", type.Extension); + tagDefault.Attributes.Add ("ContentType", type.ContentType); + tagTypes.Elements.Add (tagDefault); + } + foreach (OverrideDefinition def in types.OverrideDefinitions) + { + MarkupTagElement tagOverride = new MarkupTagElement (); + tagOverride.FullName = "Override"; + tagOverride.Attributes.Add ("PartName", def.PartName); + tagOverride.Attributes.Add ("ContentType", def.ContentType); + tagTypes.Elements.Add (tagOverride); + } + + mom.Elements.Add (tagTypes); + + objectModels.Push (mom); + + base.BeforeSaveInternal (objectModels); + } } } diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/OpenPackagingConvention/OPCDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/OpenPackagingConvention/OPCDataFormat.cs index 838c6f42..b0f5fbbd 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/OpenPackagingConvention/OPCDataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Package/OpenPackagingConvention/OPCDataFormat.cs @@ -1,9 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -using UniversalEditor.Accessors; +using System.Collections.Generic; using UniversalEditor.ObjectModels.FileSystem; using UniversalEditor.DataFormats.FileSystem.ZIP; @@ -63,9 +58,13 @@ namespace UniversalEditor.DataFormats.Package.OpenPackagingConvention else if (file.Name == "[Content_Types].xml" && file.Parent == null) { ContentTypesObjectModel contentTypes = file.GetObjectModel(new OPCContentTypesDataFormat()); - foreach (ContentType type in contentTypes.ContentTypes) + foreach (DefaultDefinition type in contentTypes.DefaultDefinitions) { - package.ContentTypes.Add(type); + package.DefaultContentTypes.Add(type); + } + foreach (OverrideDefinition type in contentTypes.OverrideDefinitions) + { + package.OverrideContentTypes.Add(type); } } else @@ -97,6 +96,29 @@ namespace UniversalEditor.DataFormats.Package.OpenPackagingConvention fsom.Folders.Add(fldr); } #endregion + + #region [Content_Types].xml + { + File file = new File (); + file.Name = "[Content_Types].xml"; + + ContentTypesObjectModel contentTypes = new ContentTypesObjectModel (); + foreach (DefaultDefinition type in package.DefaultContentTypes) + { + contentTypes.DefaultDefinitions.Add(type); + } + foreach (OverrideDefinition type in package.OverrideContentTypes) + { + contentTypes.OverrideDefinitions.Add(type); + } + file.SetObjectModel(new OPCContentTypesDataFormat(), contentTypes); + + fsom.Files.Add (file); + } + #endregion + + #region XPS-specific + /* #region Documents { Folder fldr = new Folder(); @@ -111,20 +133,15 @@ namespace UniversalEditor.DataFormats.Package.OpenPackagingConvention fsom.Folders.Add(fldr); } #endregion - #region [Content_Types].xml - { - File file = new File(); - file.Name = "[Content_Types].xml"; - fsom.Files.Add(file); - } - #endregion #region FixedDocumentSequence.fdseq { - File file = new File(); + File file = new File (); file.Name = "FixedDocumentSequence.fdseq"; - fsom.Files.Add(file); + fsom.Files.Add (file); } #endregion + */ + #endregion objectModels.Push(fsom); } diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/ContentType.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/ContentType.cs deleted file mode 100644 index fa7096ab..00000000 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/ContentType.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; - -namespace UniversalEditor.ObjectModels.Package.ContentTypes -{ - public class ContentType : ICloneable - { - public class ContentTypeCollection - : System.Collections.ObjectModel.Collection - { - - } - - private string mvarExtension = String.Empty; - public string Extension { get { return mvarExtension; } set { mvarExtension = value; } } - - private string mvarValue = String.Empty; - public string Value { get { return mvarValue; } set { mvarValue = value; } } - - public override string ToString() - { - StringBuilder sb = new StringBuilder(); - sb.Append("*."); - sb.Append(mvarExtension); - sb.Append("; "); - sb.Append(mvarValue); - return sb.ToString(); - } - - public object Clone() - { - ContentType clone = new ContentType(); - clone.Value = (mvarValue.Clone() as string); - clone.Extension = (mvarExtension.Clone() as string); - return clone; - } - } -} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/ContentTypesObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/ContentTypesObjectModel.cs index dd03e271..7e871b60 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/ContentTypesObjectModel.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/ContentTypesObjectModel.cs @@ -7,12 +7,19 @@ namespace UniversalEditor.ObjectModels.Package.ContentTypes { public class ContentTypesObjectModel : ObjectModel { - private ContentType.ContentTypeCollection mvarContentTypes = new ContentType.ContentTypeCollection(); - public ContentType.ContentTypeCollection ContentTypes { get { return mvarContentTypes; } } + public DefaultDefinition.DefaultDefinitionCollection DefaultDefinitions { get; } = new DefaultDefinition.DefaultDefinitionCollection (); + public OverrideDefinition.OverrideDefinitionCollection OverrideDefinitions { get; } = new OverrideDefinition.OverrideDefinitionCollection (); + + public ContentTypesObjectModel() + { + DefaultDefinitions.Add ("xml", "application/xml"); + DefaultDefinitions.Add ("rels", "application/vnd.openxmlformats-package.relationships+xml"); + } public override void Clear() { - mvarContentTypes.Clear(); + DefaultDefinitions.Clear(); + OverrideDefinitions.Clear(); } public override void CopyTo(ObjectModel where) @@ -20,9 +27,13 @@ namespace UniversalEditor.ObjectModels.Package.ContentTypes ContentTypesObjectModel clone = (where as ContentTypesObjectModel); if (clone == null) throw new ObjectModelNotSupportedException(); - foreach (ContentType item in mvarContentTypes) + foreach (DefaultDefinition item in DefaultDefinitions) { - clone.ContentTypes.Add(item.Clone() as ContentType); + clone.DefaultDefinitions.Add(item.Clone() as DefaultDefinition); + } + foreach (OverrideDefinition item in OverrideDefinitions) + { + clone.OverrideDefinitions.Add(item.Clone() as OverrideDefinition); } } } diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/DefaultDefinition.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/DefaultDefinition.cs new file mode 100644 index 00000000..1bfae2ee --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/DefaultDefinition.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.ObjectModels.Package.ContentTypes +{ + public class DefaultDefinition : ICloneable + { + public class DefaultDefinitionCollection + : System.Collections.ObjectModel.Collection + { + public DefaultDefinition Add (string extension, string contentType) + { + DefaultDefinition item = new DefaultDefinition (); + item.Extension = extension; + item.ContentType = contentType; + Add (item); + return item; + } + } + + public string Extension { get; set; } = String.Empty; + public string ContentType { get; set; } = String.Empty; + + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + sb.Append("*."); + sb.Append(Extension); + sb.Append("; "); + sb.Append(ContentType); + return sb.ToString(); + } + + public object Clone() + { + DefaultDefinition clone = new DefaultDefinition(); + clone.ContentType = (ContentType.Clone() as string); + clone.Extension = (Extension.Clone() as string); + return clone; + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/OverrideDefinition.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/OverrideDefinition.cs new file mode 100644 index 00000000..c9bbfe31 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/ContentTypes/OverrideDefinition.cs @@ -0,0 +1,22 @@ +using System; +namespace UniversalEditor.ObjectModels.Package.ContentTypes +{ + public class OverrideDefinition : ICloneable + { + public class OverrideDefinitionCollection + : System.Collections.ObjectModel.Collection + { + } + + public string PartName { get; set; } = String.Empty; + public string ContentType { get; set; } = String.Empty; + + public object Clone () + { + OverrideDefinition clone = new OverrideDefinition (); + clone.PartName = (PartName.Clone() as string); + clone.ContentType = (ContentType.Clone() as string); + return clone; + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/PackageObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/PackageObjectModel.cs index fce239c6..5dc699b2 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/PackageObjectModel.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Package/PackageObjectModel.cs @@ -11,15 +11,16 @@ namespace UniversalEditor.ObjectModels.Package public class PackageObjectModel : ObjectModel { - private ContentType.ContentTypeCollection mvarContentTypes = new ContentType.ContentTypeCollection(); - public ContentType.ContentTypeCollection ContentTypes { get { return mvarContentTypes; } } + public DefaultDefinition.DefaultDefinitionCollection DefaultContentTypes { get; } = new DefaultDefinition.DefaultDefinitionCollection (); + public OverrideDefinition.OverrideDefinitionCollection OverrideContentTypes { get; } = new OverrideDefinition.OverrideDefinitionCollection (); private Relationship.RelationshipCollection mvarRelationships = new Relationship.RelationshipCollection(); public Relationship.RelationshipCollection Relationships { get { return mvarRelationships; } } public override void Clear() { - mvarContentTypes.Clear(); + DefaultContentTypes.Clear(); + OverrideContentTypes.Clear (); mvarRelationships.Clear(); } @@ -28,9 +29,13 @@ namespace UniversalEditor.ObjectModels.Package PackageObjectModel clone = (where as PackageObjectModel); if (clone == null) throw new ObjectModelNotSupportedException(); - foreach (ContentType item in mvarContentTypes) + foreach (DefaultDefinition item in DefaultContentTypes) { - clone.ContentTypes.Add(item.Clone() as ContentType); + clone.DefaultContentTypes.Add(item.Clone() as DefaultDefinition); + } + foreach (OverrideDefinition item in OverrideContentTypes) + { + clone.OverrideContentTypes.Add(item.Clone() as OverrideDefinition); } foreach (Relationship item in mvarRelationships) { diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj index fa6eb9c5..991eb35f 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj @@ -89,7 +89,7 @@ - + @@ -114,6 +114,7 @@ +