Beef up the Open Packaging Convention data format (still far from complete)

This commit is contained in:
Michael Becker 2019-08-16 01:05:55 -04:00
parent c99e264b3e
commit 45489ccd71
8 changed files with 164 additions and 71 deletions

View File

@ -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<ObjectModel> 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);
}
}
}

View File

@ -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<ContentTypesObjectModel>(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<ContentTypesObjectModel>(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);
}

View File

@ -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<ContentType>
{
}
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;
}
}
}

View File

@ -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);
}
}
}

View File

@ -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<DefaultDefinition>
{
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;
}
}
}

View File

@ -0,0 +1,22 @@
using System;
namespace UniversalEditor.ObjectModels.Package.ContentTypes
{
public class OverrideDefinition : ICloneable
{
public class OverrideDefinitionCollection
: System.Collections.ObjectModel.Collection<OverrideDefinition>
{
}
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;
}
}
}

View File

@ -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)
{

View File

@ -89,7 +89,7 @@
<Compile Include="ObjectModels\Text\Formatted\XPS\FixedDocumentSequence\DocumentReference.cs" />
<Compile Include="ObjectModels\Text\Formatted\XPS\FixedDocumentSequence\FixedDocumentSequenceObjectModel.cs" />
<Compile Include="ObjectModels\Help\Compiled\CompiledHelpObjectModel.cs" />
<Compile Include="ObjectModels\Package\ContentTypes\ContentType.cs" />
<Compile Include="ObjectModels\Package\ContentTypes\DefaultDefinition.cs" />
<Compile Include="ObjectModels\Package\ContentTypes\ContentTypesObjectModel.cs" />
<Compile Include="ObjectModels\Package\PackageObjectModel.cs" />
<Compile Include="ObjectModels\Package\Relationships\Relationship.cs" />
@ -114,6 +114,7 @@
<Compile Include="DataFormats\PropertyList\Registry\MicrosoftRegistryKeyValue.cs" />
<Compile Include="DataFormats\PropertyList\Registry\MicrosoftRegistryKeyValueDataType.cs" />
<Compile Include="DataFormats\PropertyList\Registry\MicrosoftRegistryKeyValueFlags.cs" />
<Compile Include="ObjectModels\Package\ContentTypes\OverrideDefinition.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\..\Libraries\UniversalEditor.Compression\UniversalEditor.Compression.csproj">