Beef up the Open Packaging Convention data format (still far from complete)
This commit is contained in:
parent
c99e264b3e
commit
45489ccd71
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -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)
|
||||
{
|
||||
|
||||
@ -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">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user