diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Text/Formatted/XPS/FixedDocumentSequence/FDSEQDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Text/Formatted/XPS/FixedDocumentSequence/FDSEQDataFormat.cs new file mode 100644 index 00000000..d3ab7a35 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Text/Formatted/XPS/FixedDocumentSequence/FDSEQDataFormat.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using UniversalEditor.DataFormats.Markup.XML; +using UniversalEditor.ObjectModels.Markup; +using UniversalEditor.ObjectModels.Text.Formatted.XPS.FixedDocumentSequence; + +namespace UniversalEditor.DataFormats.Text.Formatted.XPS.FixedDocumentSequence +{ + public class FDSEQDataFormat : XMLDataFormat + { + protected override void BeforeLoadInternal(Stack objectModels) + { + base.BeforeLoadInternal(objectModels); + objectModels.Push(new MarkupObjectModel()); + } + protected override void AfterLoadInternal(Stack objectModels) + { + base.AfterLoadInternal(objectModels); + + MarkupObjectModel mom = (objectModels.Pop() as MarkupObjectModel); + FixedDocumentSequenceObjectModel fdseq = (objectModels.Pop() as FixedDocumentSequenceObjectModel); + + MarkupTagElement tagFixedDocumentSequence = (mom.Elements["FixedDocumentSequence"] as MarkupTagElement); + foreach (MarkupElement elDocumentReference in tagFixedDocumentSequence.Elements) + { + MarkupTagElement tagDocumentReference = (elDocumentReference as MarkupTagElement); + if (tagDocumentReference == null) continue; + if (tagDocumentReference.FullName != "DocumentReference") continue; + + MarkupAttribute attSource = tagDocumentReference.Attributes["Source"]; + if (attSource == null) continue; + + DocumentReference docref = new DocumentReference(); + docref.Source = attSource.Value; + + fdseq.DocumentReferences.Add(docref); + } + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Text/Formatted/XPS/XPSDataFormat.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Text/Formatted/XPS/XPSDataFormat.cs index 63f0c7ad..cf258c8f 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Text/Formatted/XPS/XPSDataFormat.cs +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/DataFormats/Text/Formatted/XPS/XPSDataFormat.cs @@ -20,11 +20,12 @@ // along with this program. If not, see . using System; - using UniversalEditor.DataFormats.Package.OpenPackagingConvention; - +using UniversalEditor.DataFormats.Text.Formatted.XPS.FixedDocumentSequence; +using UniversalEditor.ObjectModels.FileSystem; using UniversalEditor.ObjectModels.Package; using UniversalEditor.ObjectModels.Text.Formatted; +using UniversalEditor.ObjectModels.Text.Formatted.XPS.FixedDocumentSequence; namespace UniversalEditor.DataFormats.Text.Formatted.XPS { @@ -53,6 +54,14 @@ namespace UniversalEditor.DataFormats.Text.Formatted.XPS PackageObjectModel package = (objectModels.Pop() as PackageObjectModel); FormattedTextObjectModel text = (objectModels.Pop() as FormattedTextObjectModel); + // we need to get the FixedRepresentation for the XPS document + File[] files = package.GetFilesBySchema("http://schemas.microsoft.com/xps/2005/06/fixedrepresentation"); + + FixedDocumentSequenceObjectModel fdom = files[0].GetObjectModel(new FDSEQDataFormat()); + + File fdoc = package.FileSystem.FindFile(fdom.DocumentReferences[0].Source.Substring(1)); + + // FixedDocument fdoc = file.GetObjectModel(new FDOCDataFormat()); } protected override void BeforeSaveInternal(System.Collections.Generic.Stack objectModels) diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Text/Formatted/XPS/FixedDocumentSequence/DocumentReference.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Text/Formatted/XPS/FixedDocumentSequence/DocumentReference.cs new file mode 100644 index 00000000..bffe849f --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Text/Formatted/XPS/FixedDocumentSequence/DocumentReference.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.ObjectModels.Text.Formatted.XPS.FixedDocumentSequence +{ + public class DocumentReference : ICloneable + { + public class DocumentReferenceCollection + : System.Collections.ObjectModel.Collection + { + + } + + private string mvarSource = String.Empty; + public string Source { get { return mvarSource; } set { mvarSource = value; } } + + public object Clone() + { + DocumentReference clone = new DocumentReference(); + clone.Source = (mvarSource.Clone() as string); + return clone; + } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Text/Formatted/XPS/FixedDocumentSequence/FixedDocumentSequenceObjectModel.cs b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Text/Formatted/XPS/FixedDocumentSequence/FixedDocumentSequenceObjectModel.cs new file mode 100644 index 00000000..c24009e1 --- /dev/null +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/ObjectModels/Text/Formatted/XPS/FixedDocumentSequence/FixedDocumentSequenceObjectModel.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace UniversalEditor.ObjectModels.Text.Formatted.XPS.FixedDocumentSequence +{ + public class FixedDocumentSequenceObjectModel : ObjectModel + { + public override void Clear() + { + mvarDocumentReferences.Clear(); + } + + public override void CopyTo(ObjectModel where) + { + FixedDocumentSequenceObjectModel clone = (where as FixedDocumentSequenceObjectModel); + if (clone == null) throw new ObjectModelNotSupportedException(); + + foreach (DocumentReference item in mvarDocumentReferences) + { + clone.DocumentReferences.Add(item.Clone() as DocumentReference); + } + } + + private DocumentReference.DocumentReferenceCollection mvarDocumentReferences = new DocumentReference.DocumentReferenceCollection(); + public DocumentReference.DocumentReferenceCollection DocumentReferences { get { return mvarDocumentReferences; } } + } +} diff --git a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj index 185b1003..d8e93578 100644 --- a/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj +++ b/CSharp/Plugins/UniversalEditor.Plugins.Microsoft/UniversalEditor.Plugins.Microsoft.csproj @@ -86,6 +86,9 @@ + + + @@ -113,9 +116,7 @@ UniversalEditor.Plugins.FileSystem - - - +