33
44namespace DeterministicIoPackaging ;
55
6- public static class DeterministicPackage
6+ public static partial class DeterministicPackage
77{
88 public static DateTime StableDate { get ; } = new ( 2020 , 1 , 1 , 0 , 0 , 0 , DateTimeKind . Utc ) ;
99 public static DateTimeOffset StableDateOffset { get ; } = new ( StableDate ) ;
1010
11- public static MemoryStream Convert ( Stream source )
12- {
13- var target = new MemoryStream ( ) ;
14- Convert ( source , target ) ;
15- target . Position = 0 ;
16- return target ;
17- }
18-
19- public static async Task < MemoryStream > ConvertAsync ( Stream source )
20- {
21- var target = new MemoryStream ( ) ;
22- await ConvertAsync ( source , target ) ;
23- target . Position = 0 ;
24- return target ;
25- }
26-
27- public static void Convert ( Stream source , Stream target )
28- {
29- using var sourceArchive = ReadArchive ( source ) ;
30- using var targetArchive = CreateArchive ( target ) ;
31- foreach ( var sourceEntry in sourceArchive . Entries )
32- {
33- DuplicateEntry ( sourceEntry , targetArchive ) ;
34- }
35- }
36-
37- public static async Task ConvertAsync ( Stream source , Stream target , Cancel token = default )
38- {
39- using var sourceArchive = ReadArchive ( source ) ;
40- using var targetArchive = CreateArchive ( target ) ;
41- foreach ( var sourceEntry in sourceArchive . Entries )
42- {
43- await DuplicateEntryAsync ( sourceEntry , targetArchive , token ) ;
44- }
45- }
46-
4711 static Archive CreateArchive ( Stream target ) => new ( target , ZipArchiveMode . Create , leaveOpen : true ) ;
4812
4913 static Archive ReadArchive ( Stream source )
@@ -81,9 +45,9 @@ static void DuplicateEntry(Entry sourceEntry, Archive targetArchive)
8145 return ;
8246 }
8347
84- if ( IsWorkbookXml ( sourceEntry ) )
48+ if ( sourceEntry . IsWorkbookXml ( ) )
8549 {
86- var xml = PatchWorkbook ( sourceStream ) ;
50+ var xml = Workbook . Patch ( sourceStream ) ;
8751 SaveXml ( xml , targetStream ) ;
8852 return ;
8953 }
@@ -115,9 +79,9 @@ static async Task DuplicateEntryAsync(Entry sourceEntry, Archive targetArchive,
11579 return ;
11680 }
11781
118- if ( IsWorkbookXml ( sourceEntry ) )
82+ if ( sourceEntry . IsWorkbookXml ( ) )
11983 {
120- var xml = PatchWorkbook ( sourceStream ) ;
84+ var xml = Workbook . Patch ( sourceStream ) ;
12185 await SaveXml ( xml , targetStream , cancel ) ;
12286 return ;
12387 }
@@ -167,20 +131,16 @@ static bool IsPsmdcpElement(XElement rel)
167131 return target . Value . EndsWith ( ".psmdcp" ) ;
168132 }
169133 }
170-
171- static XNamespace mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" ;
172- static XNamespace x15ac = "http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac" ;
173-
174- static XDocument PatchWorkbook ( Stream sourceStream )
134+ static XDocument PatchSheet ( Stream sourceStream )
175135 {
176136 var xml = XDocument . Load ( sourceStream ) ;
137+ return PatchSheet ( xml ) ;
138+ }
177139
178- var absPath = xml
179- . Descendants ( mc + "AlternateContent" )
180- . FirstOrDefault ( _ => _ . Descendants ( x15ac + "absPath" ) . Any ( ) ) ;
181-
182- absPath ? . Remove ( ) ;
183-
140+ internal static XDocument PatchSheet ( XDocument xml )
141+ {
142+ XNamespace xr = "http://schemas.microsoft.com/office/spreadsheetml/2014/revision" ;
143+ xml . Root ! . Attribute ( xr + "uid" ) ? . Remove ( ) ;
184144 return xml ;
185145 }
186146
@@ -201,6 +161,4 @@ static bool IsRelationships(Entry _) =>
201161 static bool IsWorkbookRelationships ( Entry _ ) =>
202162 _ . FullName is "xl/_rels/workbook.xml.rels" ;
203163
204- static bool IsWorkbookXml ( Entry _ ) =>
205- _ . FullName == "xl/workbook.xml" ;
206164}
0 commit comments