From 14371eb491bb450b85f81a874af7e8235e144348 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Sat, 19 Sep 2020 14:21:03 +0900 Subject: [PATCH 01/19] delete korean value name --- Sources/HwpKit/Streams/FileHeader.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Sources/HwpKit/Streams/FileHeader.swift b/Sources/HwpKit/Streams/FileHeader.swift index 03a2e98..86f425b 100644 --- a/Sources/HwpKit/Streams/FileHeader.swift +++ b/Sources/HwpKit/Streams/FileHeader.swift @@ -5,7 +5,7 @@ struct HwpFileHeader: Stream { let version: HwpVersion let encryptVersion: UInt32 - let 공공누리: UInt8 + let koreaOpenLicense: UInt8 //공공누리 Korea Open Government License init(dataReader: DataReader) { signature = String(data: dataReader.readData(ofLength: 32), encoding: .ascii) ?? "Error" @@ -18,6 +18,6 @@ struct HwpFileHeader: Stream { let _:UInt32 = dataReader.read() let _:UInt32 = dataReader.read() encryptVersion = dataReader.read() - 공공누리 = dataReader.read() + koreaOpenLicense = dataReader.read() } } From d4ae16fefd9476e401c29c4a893b6ba76598b557 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Sat, 19 Sep 2020 15:23:27 +0900 Subject: [PATCH 02/19] add 2007 hwp file --- Tests/HwpKitTests/HwpKitTests.swift | 12 ++++++------ Tests/HwpKitTests/Versions/2007.hwp | Bin 0 -> 8704 bytes .../{SampleHwp => Versions}/blank.hwp | Bin 3 files changed, 6 insertions(+), 6 deletions(-) create mode 100644 Tests/HwpKitTests/Versions/2007.hwp rename Tests/HwpKitTests/{SampleHwp => Versions}/blank.hwp (100%) diff --git a/Tests/HwpKitTests/HwpKitTests.swift b/Tests/HwpKitTests/HwpKitTests.swift index 096137c..188d948 100644 --- a/Tests/HwpKitTests/HwpKitTests.swift +++ b/Tests/HwpKitTests/HwpKitTests.swift @@ -5,21 +5,21 @@ final class HwpKitTests: XCTestCase { func openHwp() throws -> HwpFile { let url = URL(fileURLWithPath: #file) .deletingLastPathComponent() - .appendingPathComponent("SampleHwp") + .appendingPathComponent("Versions") .appendingPathComponent("blank.hwp") return try HwpFile(filePath: url.path) } - + func testOpen() throws { let hwp = try openHwp() XCTAssertNotNil(hwp.fileHeader) } - + func testSignature() throws { let hwp = try openHwp() XCTAssertEqual(hwp.fileHeader.signature, "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") } - + func testHwpVersion() throws { let hwp = try openHwp() XCTAssertEqual(hwp.fileHeader.version.major, 5) @@ -27,12 +27,12 @@ final class HwpKitTests: XCTestCase { XCTAssertEqual(hwp.fileHeader.version.build, 3) XCTAssertEqual(hwp.fileHeader.version.revision, 4) } - + func testEncryptVersion() throws { let hwp = try openHwp() XCTAssertEqual(hwp.fileHeader.encryptVersion, 4) } - + static var allTests = [ ("testOpen", testOpen), ("testSignature", testSignature), diff --git a/Tests/HwpKitTests/Versions/2007.hwp b/Tests/HwpKitTests/Versions/2007.hwp new file mode 100644 index 0000000000000000000000000000000000000000..8e06a8e4451122eeaa5aaec37d6b3b985e62111b GIT binary patch literal 8704 zcmeHLdt6k-7e74Y;UiZ;S`=|rQhZ-Q6s?qeUUf~%e!Biby~JiHK30X;%<|%s!~mo0 zhMJh5C}kH>1VKejSzuKRMg57o;HvmaiHtF?@;kHaD*5^VpZcTU&$IizXC7zf+&MF6 z&de=5*21tMwRI^xMgzeH9#lJmU9EB}Oj}#>GBDNAvIo`G)wI|Kfyo#253<00d{;Vu zFX;c%0&l}?{Dp!7hQTc4bKxWE%5^3eX!IwauS-MAeo+_My2#X?xw^>z)iVEN{eR{B z)BXQ>Bs=37IxM=_${vOMUaFBC4%1);ybmlQ5Y+gb`@AlmsB^)H)Cfy$5p*7&5O_+# zE3}LTE~KHj`h#F3uKlT)sz1q4e|_h_4XT-I4y1!os~Uao9UQq9{ja{%60EFfjHbhB z`i#aot!nIU;kCsq?@sMUV*#~g69n~92jq^3#t7OsEo+9HPF-_z-qQXB|7TjD5qe%Y zXkZ+K!A$%Gnj(P3ALg1$LeWQOqlY|=dV;l8?U6rC=J7HoEZA@MKY!HsA^IQH`~mtv zeW|5cKiyO4d(@>pRXv|Bc%&Nr4fQ?%^nWYr%G6its-NmLt2ggIV{ry7R-Q+z>r5`_ z`4;xzqvTSRDb<6*YqN*rJwEHbgS3H7Ji`#)V#{Wtq?AVml1M=E21@m*1I8Zi*QG@LnsjK5gia65grIC*9m!Ngr_;* z6?r#vn%4KkbT0&h=#B6~cq95Cd=ONoA97!F8nZ9x85U?}itcEr2GWR;!+rY)rotak zW$J;)Cl9=dA;(lsPR@e|4=O4uj7DQ|adBQ=URGAtwr$%sY}gPN7q@KLGObn{5)v|L z(j{~<$$`1tsEdV02Q-MU$`W>!{KM6V;FNCbiKJW+E*$r6SkaybDo0O$Zj00AHZ zfCG$WK#V$aS|oabWb@>EjwG@~V8}{2SpWtN=+q#pKu`kj2OI;e0*Is|l1LuCPgD8R^Ktu#^YG9RMkaVXdQ6~u*5-&{6kxO!r0E__oS_4o6ZU#EZAWEkNNykeWoFuYR z0wW1>DH0?t7&V~hOaox)0Mra96*`HC5)mZAON5gMD-lK_a)|)`jRw%`9t}Xvfs)l3 ziFld_dctQDP9$t1VFV&yNnim1jRDj;Isj$O066eqb^1r<=hTE%J~aQ+XTYGR=GO@% zgD0YzBq*u*BjrR3L<0s6bSe;85d45=fKvcV^n{3n2!!y2s0m>SVF-~E0>l6Y9q7^^ zO#mSRA~@h!DsM0iKu7otq85oV!8CwK0$KxTbij$A5`g8wj{}AU1u4;y6B$G=lAjW8 z?}#-d@}~ujE>e}DWkro&La?8p_KoFyBUOy{9Y(_{1hrOBM+#~|s}?x?YXokAzzO)* za)O2vIIY0(JWmfA)wuIhhP);Qw7+YMc?X~Y2B=Sf!vm;xbYsPY{fix(x(4XP4F{LY zI*wY)rha!QO71au9f7a zZ9cZ%Z*k+cqjn@8-^j*wos_?0OVMWkjic6$+PU>)iYjgTx%{0er+(xPu4p?t{rfX% z!9`mq6{P=gc9-U2{<_h-ww=q;R$e<-uX9Y=qw z%-nvdK=2MZug^@oax7s;l>3<7JFXTbk4u?+WcSYNr^KLwZ^vY%-#nW!@A~;8S-Wms z$XVQ^-J97N6&H1J-KHGP&aAvrxN-FQH}~wmbNzH$$c3YOvZ`(w4yvNsjoq7lx3at_ zWy-O=d+t@;zF4q+?7qGC?~%&u7mn@QhsLw>H1M`A!G;KjPRWKvP5YJ`7R!cvmM(D~ zA6&XrJ~g>?ncIiurOOq|Jj)_IRtJ}T<{2-S!K>89bg##FWo->y`giLCWhYwfI1Jp^ zIqOzhVcp|pG+wO23VMIBMraW>h$RR*aj^&*!x9lR4jK_O7T!kCSco2Lx(~^)4;l;o zk<)k>fSkt1U~}K0$Y~s0fSl42PW4%k~w)4qcLMhDUesn6XjU<>!f!iw414S&588 z=7H!{p0X9mC4TF^_`=TdGnPpUkNza{pr+7Y{e9-Sb@!*v+LM-&*>u3_rB~YpQ>KUvl1`kY;ZMs!TsS~$P=jg&8stYn=}r7pG4h#7FXJPIlg#&m4u zYSVXH!U~rVn>H)m4v}_MLEnyl<>o%wl|H&k`>3;QleOPvUFOClUXBd89X&9s*T_z} z*|sZWW$PNQ}coXyN~p!U(`*;0RB z%|BUx{Ke_U7Adw(wD#{#*__?&i{mT9yQlYFvGh0pbx!SHFE1U;Hoy04W~_UK{%)*$ z-kzjb_p1{wG47uhr@j{SmD4XrxYY?AHkBKaK5x}0HE(BfzK>&}v2fxwRpSfGzG_=G z_r%aWtI`=&SMRx9_`-J9oM9o~#24ob_{lEmvjsB-@<-;~KjC~Qbt$Ch z44W8tGbqYx#;TCCO+rkMM&c_u#m-f!mteJ%Q_+{VQwyxRUntAilvuF$((4~rwqM@) zVE$(3@gL>()6e?h_Ae*r#N1osH`q&2rrzRJ{`-he+Vs<==TBsmZ;#72`i$ar#`B)|WG1O6=36a$1K~zF)t3FRORJrMv%GGIFduuj=OhN~_XNAD`;qIC|Q4 z{e;5!xKS~ZZSm~n$U#qBaoGv}ilMWE!e+idD^xLj+Kk7)U|?u!WZCCvjQL-qu;{Fp z7WvDDj*W7x){LH+uv`_ZQjH85;SjTA@V2*>93VHn0>rn@s5`AWr#~|$;@h=tmf5Uc zWdCy4e-HR2{$`T*2)k_yfA2kT%}HtPgCskT-9^VeC$9S8*AM0=HxK#bWKY+Wqp|t> z@?1Mt*rneH`1NXuQ~MJ>qr13vm=?cp?bts~yz65PFP%P5BXYwiNX-LOU5MO51AK#M z76iZ>`29qKH~2u@Ndqyj#5fs*sTr82-tf75Z;YnCDCLDQI}mwK{Qfl! zzeNDVuW7%&`d~>?w%!%i^-zVoeZJyk6FhKyrKmZFlwlYG*4Ai?oup-Q9bnCH9fuwyEZl6l&9%wR^NnuhUjzD70Qph0&QEH z5?-z8hn7WFa`wYN46vnrDei{bi*v`A+?2kr-NQFtXKguWx($2JRG*IL%-Vf6G(GP< zmUC8f!CWB6acYjUdr#KP_GtIUN@de7d0P%~J!Onl;HWo0^;&eSz;NJaxV-4MjP1V6 ze&b}uo8dJw*$BU3udI$xpOKeLY$# zP^;c{%lcb8G%YGUGzZEwibC7nR|d&!d#~{x>Fu@X(D6$P%Ll>kqi*GWBeVPE+K9ad mOl%+P+alb>Zn(c7!X#T85WgAL`JD!PTSKk%qTSzRf&T(~|HIz^ literal 0 HcmV?d00001 diff --git a/Tests/HwpKitTests/SampleHwp/blank.hwp b/Tests/HwpKitTests/Versions/blank.hwp similarity index 100% rename from Tests/HwpKitTests/SampleHwp/blank.hwp rename to Tests/HwpKitTests/Versions/blank.hwp From 97c19f66bb3bc9ddf42c54adbbab331b28a89d7e Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Sat, 19 Sep 2020 16:06:29 +0900 Subject: [PATCH 03/19] working with file header --- Sources/HwpKit/Models/HwpVersion.swift | 22 ++++++++++---- Sources/HwpKit/Streams/FileHeader.swift | 31 ++++++++++++++++---- Sources/HwpKit/Utils/Byte.swift | 38 ++++++++++++++----------- Tests/HwpKitTests/HwpUtilTests.swift | 14 +++++++++ 4 files changed, 79 insertions(+), 26 deletions(-) create mode 100644 Tests/HwpKitTests/HwpUtilTests.swift diff --git a/Sources/HwpKit/Models/HwpVersion.swift b/Sources/HwpKit/Models/HwpVersion.swift index 954614e..bb034fe 100644 --- a/Sources/HwpKit/Models/HwpVersion.swift +++ b/Sources/HwpKit/Models/HwpVersion.swift @@ -1,8 +1,20 @@ import Foundation -struct HwpVersion { - let major: UInt8 - let minor: UInt8 - let build: UInt8 - let revision: UInt8 +/** + 파일 버전. 0xMMnnPPrr의 형태(예 5.0.3.0) + - MM: 문서 형식의 구조가 완전히 바뀌는 것을 나타냄. 숫 + 자가 다르면 구 버전과 호환 불가능. + - nn: 큰 구조는 동일하나, 큰 변화가 있는 것을 나타냄. 숫 + 자가 다르면 구 버전과 호환 불가능. + - PP: 구조는 동일, Record가 추가되었거나, 하위 버전에서 + 호환되지 않는 정보가 추가된 것을 나타냄. 숫자가 달라도 + 구 버전과 호환 가능. + - rr: Record에 정보들이 추가된 것을 나타냄. 숫자가 달라 + 도 구 버전과 호환 가능. + */ +public struct HwpVersion { + public let major: UInt8 + public let minor: UInt8 + public let build: UInt8 + public let revision: UInt8 } diff --git a/Sources/HwpKit/Streams/FileHeader.swift b/Sources/HwpKit/Streams/FileHeader.swift index 86f425b..544bf97 100644 --- a/Sources/HwpKit/Streams/FileHeader.swift +++ b/Sources/HwpKit/Streams/FileHeader.swift @@ -1,8 +1,20 @@ import OLEKit -struct HwpFileHeader: Stream { - let signature: String - let version: HwpVersion +/** + 파일 인식 정보 + 한글의 문서 파일이라는 것을 나타내기 위해 ‘파일 인식 정보’가 저장된다. + */ +public struct HwpFileHeader: Stream { + public let signature: String + public let version: HwpVersion + + /**압축 여부*/ + public let isCompressed: Bool + /**암호 설정 여부*/ + public let isEncrypted: Bool + + /**CCL, 공공누리 라이선스 정보*/ + public let isHavekoreaOpenLicense: Bool let encryptVersion: UInt32 let koreaOpenLicense: UInt8 //공공누리 Korea Open Government License @@ -15,8 +27,17 @@ struct HwpFileHeader: Stream { let minor: UInt8 = dataReader.read() let major: UInt8 = dataReader.read() version = HwpVersion(major: major, minor: minor, build: build, revision: revision) - let _:UInt32 = dataReader.read() - let _:UInt32 = dataReader.read() + + let dword1:UInt32 = dataReader.read() + let bits1 = bitsFromUInt32(dword1) + isCompressed = bits1[0] + isEncrypted = bits1[1] + + let dword2:UInt32 = dataReader.read() + let bits2 = bitsFromUInt32(dword2) + isHavekoreaOpenLicense = bits2[0] + + encryptVersion = dataReader.read() koreaOpenLicense = dataReader.read() } diff --git a/Sources/HwpKit/Utils/Byte.swift b/Sources/HwpKit/Utils/Byte.swift index 15b26b0..f8464a4 100644 --- a/Sources/HwpKit/Utils/Byte.swift +++ b/Sources/HwpKit/Utils/Byte.swift @@ -14,14 +14,17 @@ extension Array where Element == UInt8 { } } -// get a Bit array from a byte -func bits(fromByte byte: UInt8) -> [Bit] { +func bitsFromData(data: Data) -> [Bool] { + return data.reduce([Bool]()) {$0 + bitsFromUInt8($1)} +} + +func bitsFromUInt8(_ byte: UInt8) -> [Bool] { var byte = byte - var bits = [Bit](repeating: .zero, count: 8) + var bits = [Bool](repeating: false, count: 8) for i in 0..<8 { let currentBit = byte & 0x01 if currentBit != 0 { - bits[i] = .one + bits[i] = true } byte >>= 1 @@ -30,18 +33,21 @@ func bits(fromByte byte: UInt8) -> [Bit] { return bits } -//let byte: UInt8 = 0x1f -//print(bits(fromByte: byte)) - -enum Bit: UInt8, CustomStringConvertible { - case zero, one - - var description: String { - switch self { - case .one: - return "1" - case .zero: - return "0" +// get a Bit array from a byte +func bitsFromUInt32(_ byte: UInt32) -> [Bool] { + var byte = byte + var bits = [Bool](repeating: false, count: 32) + for i in 0..<32 { + let currentBit = byte & 0x01 + if currentBit != 0 { + bits[i] = true } + + byte >>= 1 } + + return bits } + +//let byte: UInt8 = 0x1f +//print(bits(fromByte: byte)) diff --git a/Tests/HwpKitTests/HwpUtilTests.swift b/Tests/HwpKitTests/HwpUtilTests.swift new file mode 100644 index 0000000..9ed63a0 --- /dev/null +++ b/Tests/HwpKitTests/HwpUtilTests.swift @@ -0,0 +1,14 @@ +import XCTest +@testable import HwpKit + +final class HwpUtilTests: XCTestCase { + func testBitsFromInt8() { + let byte = UInt8(0x4A) + let bits = [false, true, false, false, true, false, true, false].reversed() as [Bool] + XCTAssertEqual(bits, bitsFromUInt8(byte)) + } + + static var allTests = [ + ("testBitsFromInt8", testBitsFromInt8), + ] +} From f0695e02ec0ebc3903664fa7b88abd4b9f0e7b31 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 21 Sep 2020 01:54:47 +0900 Subject: [PATCH 04/19] make api structure --- Sources/HwpKit/Report/HwpReportable.swift | 4 +- Sources/HwpKit/Streams/FileHeader.swift | 44 --------------- Sources/HwpKit/Streams/HwpFileHeader.swift | 51 ++++++++++++++++++ ...eviewImage.swift => HwpPreviewImage.swift} | 0 Sources/HwpKit/Tags/HwpDocInfoTag.swift | 25 +++++++++ Sources/HwpKit/Tags/HwpSectionTag.swift | 8 +++ Sources/HwpKit/Utils/Byte.swift | 53 ------------------- Sources/HwpKit/Utils/HwpRecord.swift | 7 +++ Sources/HwpKit/Utils/HwpStream.swift | 5 ++ Sources/HwpKit/Utils/Stream.swift | 6 --- Sources/HwpKit/Utils/Type.swift | 8 +++ 11 files changed, 106 insertions(+), 105 deletions(-) delete mode 100644 Sources/HwpKit/Streams/FileHeader.swift create mode 100644 Sources/HwpKit/Streams/HwpFileHeader.swift rename Sources/HwpKit/Streams/{PreviewImage.swift => HwpPreviewImage.swift} (100%) create mode 100644 Sources/HwpKit/Tags/HwpDocInfoTag.swift create mode 100644 Sources/HwpKit/Tags/HwpSectionTag.swift delete mode 100644 Sources/HwpKit/Utils/Byte.swift create mode 100644 Sources/HwpKit/Utils/HwpRecord.swift create mode 100644 Sources/HwpKit/Utils/HwpStream.swift delete mode 100644 Sources/HwpKit/Utils/Stream.swift create mode 100644 Sources/HwpKit/Utils/Type.swift diff --git a/Sources/HwpKit/Report/HwpReportable.swift b/Sources/HwpKit/Report/HwpReportable.swift index 697ed5a..bad8053 100644 --- a/Sources/HwpKit/Report/HwpReportable.swift +++ b/Sources/HwpKit/Report/HwpReportable.swift @@ -1,5 +1,5 @@ import Foundation -public protocol HwpReportable { - +struct HwpReport { + let type:HwpReportType } diff --git a/Sources/HwpKit/Streams/FileHeader.swift b/Sources/HwpKit/Streams/FileHeader.swift deleted file mode 100644 index 544bf97..0000000 --- a/Sources/HwpKit/Streams/FileHeader.swift +++ /dev/null @@ -1,44 +0,0 @@ -import OLEKit - -/** - 파일 인식 정보 - 한글의 문서 파일이라는 것을 나타내기 위해 ‘파일 인식 정보’가 저장된다. - */ -public struct HwpFileHeader: Stream { - public let signature: String - public let version: HwpVersion - - /**압축 여부*/ - public let isCompressed: Bool - /**암호 설정 여부*/ - public let isEncrypted: Bool - - /**CCL, 공공누리 라이선스 정보*/ - public let isHavekoreaOpenLicense: Bool - - let encryptVersion: UInt32 - let koreaOpenLicense: UInt8 //공공누리 Korea Open Government License - - init(dataReader: DataReader) { - signature = String(data: dataReader.readData(ofLength: 32), encoding: .ascii) ?? "Error" - - let revision: UInt8 = dataReader.read() - let build: UInt8 = dataReader.read() - let minor: UInt8 = dataReader.read() - let major: UInt8 = dataReader.read() - version = HwpVersion(major: major, minor: minor, build: build, revision: revision) - - let dword1:UInt32 = dataReader.read() - let bits1 = bitsFromUInt32(dword1) - isCompressed = bits1[0] - isEncrypted = bits1[1] - - let dword2:UInt32 = dataReader.read() - let bits2 = bitsFromUInt32(dword2) - isHavekoreaOpenLicense = bits2[0] - - - encryptVersion = dataReader.read() - koreaOpenLicense = dataReader.read() - } -} diff --git a/Sources/HwpKit/Streams/HwpFileHeader.swift b/Sources/HwpKit/Streams/HwpFileHeader.swift new file mode 100644 index 0000000..b5066f5 --- /dev/null +++ b/Sources/HwpKit/Streams/HwpFileHeader.swift @@ -0,0 +1,51 @@ +import Foundation + +/** + 파일 인식 정보 + 한글의 문서 파일이라는 것을 나타내기 위해 ‘파일 인식 정보’가 저장된다. + */ +public struct HwpFileHeader: HwpStream { + /**signature. 문서 파일은 "HWP Document File"*/ + public let signature: String + public let version: HwpVersion + + /**압축 여부*/ + public let isCompressed: Bool + /**암호 설정 여부*/ + public let isEncrypted: Bool + + /**CCL, 공공누리 라이선스 정보*/ + public let isHavekoreaOpenLicense: Bool + + /** + EncryptVersion + § 0 : None + § 1 : (한글 2.5 버전 이하) + § 2 : (한글 3.0 버전 Enhanced) + § 3 : (한글 3.0 버전 Old) + § 4 : (한글 7.0 버전 이후) + */ + // let encryptVersion: UInt32 + let koreaOpenLicense: UInt8 //공공누리 Korea Open Government License + + init(_ data: Data) { + signature = String(data: data[0...32], encoding: .ascii) ?? "Error" + + let revision: UInt8 = data[32] + let build: UInt8 = data[33] + let minor: UInt8 = data[34] + let major: UInt8 = data[35] + version = HwpVersion(major: major, minor: minor, build: build, revision: revision) + + let bits1 = data[36...40].toBits() + isCompressed = bits1[0] + isEncrypted = bits1[1] + + let bits2 = data[40...44].toBits() + isHavekoreaOpenLicense = bits2[0] + + + //encryptVersion = UInt32(data[44...48]) + koreaOpenLicense = UInt8(data[48]) + } +} diff --git a/Sources/HwpKit/Streams/PreviewImage.swift b/Sources/HwpKit/Streams/HwpPreviewImage.swift similarity index 100% rename from Sources/HwpKit/Streams/PreviewImage.swift rename to Sources/HwpKit/Streams/HwpPreviewImage.swift diff --git a/Sources/HwpKit/Tags/HwpDocInfoTag.swift b/Sources/HwpKit/Tags/HwpDocInfoTag.swift new file mode 100644 index 0000000..7e83125 --- /dev/null +++ b/Sources/HwpKit/Tags/HwpDocInfoTag.swift @@ -0,0 +1,25 @@ +final class HwpDocInfoTag { + static let BEGIN: Int = 0x10 + + static let DOCUMENT_PROPERTIES = BEGIN + static let ID_MAPPINGS = BEGIN + 1 + static let BIN_DATA = BEGIN + 2 + static let FACE_NAME = BEGIN + 3 + static let BORDER_FILL = BEGIN + 4 + static let CHAR_SHAPE = BEGIN + 5 + static let TAB_DEF = BEGIN + 6 + static let NUMBERING = BEGIN + 7 + static let BULLET = BEGIN + 8 + static let PARA_SHAPE = BEGIN + 9 + static let STYLE = BEGIN + 10 + static let DOC_DATA = BEGIN + 11 + static let DISTRIBUTE_DOC_DATA = BEGIN + 12 + static let RESERVED = BEGIN + 13 + static let COMPATIBLE_DOCUMENT = BEGIN + 14 + static let LAYOUT_COMPATIBILITY = BEGIN + 15 + static let TRACKCHANGE = BEGIN + 16 + static let MEMO_SHAPE = BEGIN + 76 + static let FORBIDDEN_CHAR = BEGIN + 78 + static let TRACK_CHANGE = BEGIN + 80 + static let TRACK_CHANGE_AUTHOR = BEGIN + 81 +} diff --git a/Sources/HwpKit/Tags/HwpSectionTag.swift b/Sources/HwpKit/Tags/HwpSectionTag.swift new file mode 100644 index 0000000..f1ad65d --- /dev/null +++ b/Sources/HwpKit/Tags/HwpSectionTag.swift @@ -0,0 +1,8 @@ +// +// File.swift +// +// +// Created by Seungbin Oh on 2020/09/20. +// + +import Foundation diff --git a/Sources/HwpKit/Utils/Byte.swift b/Sources/HwpKit/Utils/Byte.swift deleted file mode 100644 index f8464a4..0000000 --- a/Sources/HwpKit/Utils/Byte.swift +++ /dev/null @@ -1,53 +0,0 @@ -import Foundation - -// Data to [bytes] -extension Data { - var bytes: [UInt8] { - return [UInt8](self) - } -} - -// [bytes] to Data -extension Array where Element == UInt8 { - var data: Data { - return Data(self) - } -} - -func bitsFromData(data: Data) -> [Bool] { - return data.reduce([Bool]()) {$0 + bitsFromUInt8($1)} -} - -func bitsFromUInt8(_ byte: UInt8) -> [Bool] { - var byte = byte - var bits = [Bool](repeating: false, count: 8) - for i in 0..<8 { - let currentBit = byte & 0x01 - if currentBit != 0 { - bits[i] = true - } - - byte >>= 1 - } - - return bits -} - -// get a Bit array from a byte -func bitsFromUInt32(_ byte: UInt32) -> [Bool] { - var byte = byte - var bits = [Bool](repeating: false, count: 32) - for i in 0..<32 { - let currentBit = byte & 0x01 - if currentBit != 0 { - bits[i] = true - } - - byte >>= 1 - } - - return bits -} - -//let byte: UInt8 = 0x1f -//print(bits(fromByte: byte)) diff --git a/Sources/HwpKit/Utils/HwpRecord.swift b/Sources/HwpKit/Utils/HwpRecord.swift new file mode 100644 index 0000000..9c55972 --- /dev/null +++ b/Sources/HwpKit/Utils/HwpRecord.swift @@ -0,0 +1,7 @@ +struct Record { + children: HWPRecord[] = [] + payload: ArrayBuffer + tagID: Int + size: Int + parentTagID: Int +} diff --git a/Sources/HwpKit/Utils/HwpStream.swift b/Sources/HwpKit/Utils/HwpStream.swift new file mode 100644 index 0000000..4da556c --- /dev/null +++ b/Sources/HwpKit/Utils/HwpStream.swift @@ -0,0 +1,5 @@ +import Foundation + +protocol HwpStream { + init(_ data: Data) +} diff --git a/Sources/HwpKit/Utils/Stream.swift b/Sources/HwpKit/Utils/Stream.swift deleted file mode 100644 index 507691f..0000000 --- a/Sources/HwpKit/Utils/Stream.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation -import OLEKit - -protocol Stream { - init(dataReader: DataReader) -} diff --git a/Sources/HwpKit/Utils/Type.swift b/Sources/HwpKit/Utils/Type.swift new file mode 100644 index 0000000..4fc4b77 --- /dev/null +++ b/Sources/HwpKit/Utils/Type.swift @@ -0,0 +1,8 @@ +// +// File.swift +// +// +// Created by Seungbin Oh on 2020/09/19. +// + +import Foundation From f93846d8fc523ba745589994e1d55ae860d8796c Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 21 Sep 2020 01:55:00 +0900 Subject: [PATCH 05/19] add files --- Sources/HwpKit/HwpFile.swift | 11 +-- Sources/HwpKit/Report/HwpError.swift | 8 ++ Sources/HwpKit/Report/HwpReportable.swift | 4 +- Sources/HwpKit/Report/HwpWarning.swift | 2 +- Sources/HwpKit/Streams/HwpFileHeader.swift | 28 +++--- Sources/HwpKit/Streams/HwpPreviewImage.swift | 10 +- Sources/HwpKit/Streams/PreviewText.swift | 12 ++- Sources/HwpKit/Tags/HwpDocInfoTag.swift | 25 ----- Sources/HwpKit/Tags/HwpSectionTag.swift | 8 -- Sources/HwpKit/Tags/HwpTag.swift | 59 ++++++++++++ Sources/HwpKit/Utils/HwpRecord.swift | 14 +-- Sources/HwpKit/Utils/HwpStream.swift | 2 +- Sources/HwpKit/Utils/Type.swift | 98 ++++++++++++++++++-- Tests/HwpKitTests/HwpKitTests.swift | 1 + Tests/HwpKitTests/HwpUtilTests.swift | 2 +- 15 files changed, 207 insertions(+), 77 deletions(-) delete mode 100644 Sources/HwpKit/Tags/HwpDocInfoTag.swift delete mode 100644 Sources/HwpKit/Tags/HwpSectionTag.swift create mode 100644 Sources/HwpKit/Tags/HwpTag.swift diff --git a/Sources/HwpKit/HwpFile.swift b/Sources/HwpKit/HwpFile.swift index 0bb18b0..88feca9 100644 --- a/Sources/HwpKit/HwpFile.swift +++ b/Sources/HwpKit/HwpFile.swift @@ -5,9 +5,7 @@ public struct HwpFile { //let previewText : HKPreviewText var directories: [DirectoryEntry] = [] - var warnings: [HwpWarning] = [] - - init(filePath: String) throws { + init(filePath: String, report: (HwpReportable) throws -> Void = { _ in }) throws { let ole: OLEFile do { ole = try OLEFile(filePath) @@ -19,7 +17,8 @@ public struct HwpFile { guard let fileHeaderStream = ole.root.children.first(where: { $0.name == HwpStreamName.fileHeader.rawValue }) else { throw HwpError.streamDoesNotExist(name: HwpStreamName.fileHeader) } - fileHeader = HwpFileHeader(dataReader: try ole.stream(fileHeaderStream)) + let fileHeaderReader = try ole.stream(fileHeaderStream) + fileHeader = try HwpFileHeader(fileHeaderReader.readDataToEnd(), report) } catch { throw HwpError.invalidFilePath(path: filePath) @@ -32,10 +31,6 @@ public struct HwpFile { // previewText = HKPreviewText(dataReader: try ole.stream(previewTextStream)) // } } - - func report(report: inout HwpReportable) throws -> Void { - - } } public enum HwpStreamName: String { diff --git a/Sources/HwpKit/Report/HwpError.swift b/Sources/HwpKit/Report/HwpError.swift index ec31f69..e9ef8ae 100644 --- a/Sources/HwpKit/Report/HwpError.swift +++ b/Sources/HwpKit/Report/HwpError.swift @@ -4,6 +4,7 @@ public enum HwpError: Error { case invalidReport(report: HwpReportable) case invalidFilePath(path: String) case streamDoesNotExist(name: HwpStreamName) + case invalidDataForString(data: Data, name: String) } extension HwpError: CustomStringConvertible { @@ -15,6 +16,13 @@ extension HwpError: CustomStringConvertible { return "Invalid File Path '\(path)'" case let .streamDoesNotExist(name): return "Stream '\(name)' does not exist" + case let .invalidDataForString(data, name): + return + """ + Cannot covert data to utf16le string + data: '\(data)' + name: '\(name)' + """ } } } diff --git a/Sources/HwpKit/Report/HwpReportable.swift b/Sources/HwpKit/Report/HwpReportable.swift index bad8053..697ed5a 100644 --- a/Sources/HwpKit/Report/HwpReportable.swift +++ b/Sources/HwpKit/Report/HwpReportable.swift @@ -1,5 +1,5 @@ import Foundation -struct HwpReport { - let type:HwpReportType +public protocol HwpReportable { + } diff --git a/Sources/HwpKit/Report/HwpWarning.swift b/Sources/HwpKit/Report/HwpWarning.swift index 6a59528..0daa1b8 100644 --- a/Sources/HwpKit/Report/HwpWarning.swift +++ b/Sources/HwpKit/Report/HwpWarning.swift @@ -8,7 +8,7 @@ extension HwpWarning: CustomStringConvertible { public var description: String { switch self { case let .invalidFileHeaderSignature(signature): - return #"Invalid signature in FileHeader stream : get"\#(signature)""# + return "Invalid signature in FileHeader stream : get'\(signature)'" } } } diff --git a/Sources/HwpKit/Streams/HwpFileHeader.swift b/Sources/HwpKit/Streams/HwpFileHeader.swift index b5066f5..5d91900 100644 --- a/Sources/HwpKit/Streams/HwpFileHeader.swift +++ b/Sources/HwpKit/Streams/HwpFileHeader.swift @@ -19,17 +19,23 @@ public struct HwpFileHeader: HwpStream { /** EncryptVersion - § 0 : None - § 1 : (한글 2.5 버전 이하) - § 2 : (한글 3.0 버전 Enhanced) - § 3 : (한글 3.0 버전 Old) - § 4 : (한글 7.0 버전 이후) + - 0 : None + - 1 : (한글 2.5 버전 이하) + - 2 : (한글 3.0 버전 Enhanced) + - 3 : (한글 3.0 버전 Old) + - 4 : (한글 7.0 버전 이후) */ - // let encryptVersion: UInt32 + let encryptVersion: UInt32 let koreaOpenLicense: UInt8 //공공누리 Korea Open Government License - init(_ data: Data) { - signature = String(data: data[0...32], encoding: .ascii) ?? "Error" + init(_ data: Data, _ report: (HwpReportable)throws->Void) throws { + guard let signature = data[0..<32].stringASCII else { + throw HwpError.invalidDataForString(data: data[0..<32], name: "signature") + } + self.signature = signature + if (signature != "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") { + try report(HwpWarning.invalidFileHeaderSignature(signature: signature)) + } let revision: UInt8 = data[32] let build: UInt8 = data[33] @@ -37,15 +43,15 @@ public struct HwpFileHeader: HwpStream { let major: UInt8 = data[35] version = HwpVersion(major: major, minor: minor, build: build, revision: revision) - let bits1 = data[36...40].toBits() + let bits1 = data[36..<40].toBits() isCompressed = bits1[0] isEncrypted = bits1[1] - let bits2 = data[40...44].toBits() + let bits2 = data[40..<44].toBits() isHavekoreaOpenLicense = bits2[0] - //encryptVersion = UInt32(data[44...48]) + encryptVersion = data[44..<48].uint32 koreaOpenLicense = UInt8(data[48]) } } diff --git a/Sources/HwpKit/Streams/HwpPreviewImage.swift b/Sources/HwpKit/Streams/HwpPreviewImage.swift index 58ab7a6..04fe0bb 100644 --- a/Sources/HwpKit/Streams/HwpPreviewImage.swift +++ b/Sources/HwpKit/Streams/HwpPreviewImage.swift @@ -1,3 +1,9 @@ -struct HwpPreviewImage { - let test = "Hello" +import Foundation + +struct HwpPreviewImage: HwpStream { + let image: Data + + init(_ data: Data, _ report: (HwpReportable) throws -> Void) throws { + image = data + } } diff --git a/Sources/HwpKit/Streams/PreviewText.swift b/Sources/HwpKit/Streams/PreviewText.swift index 9ed70f6..b422373 100644 --- a/Sources/HwpKit/Streams/PreviewText.swift +++ b/Sources/HwpKit/Streams/PreviewText.swift @@ -1,10 +1,12 @@ import Foundation -import OLEKit -struct HwpPreviewText { +struct HwpPreviewText: HwpStream { let text: String - - init(dataReader: DataReader) { - text = String(data: dataReader.readDataToEnd(), encoding: .utf8) ?? "Error" + + init(_ data: Data, _ report: (HwpReportable) throws -> Void) throws { + guard let text = String(data: data, encoding: .utf16LittleEndian) else { + throw HwpError.invalidDataForString(data: data, name: "PreviewText") + } + self.text = text } } diff --git a/Sources/HwpKit/Tags/HwpDocInfoTag.swift b/Sources/HwpKit/Tags/HwpDocInfoTag.swift deleted file mode 100644 index 7e83125..0000000 --- a/Sources/HwpKit/Tags/HwpDocInfoTag.swift +++ /dev/null @@ -1,25 +0,0 @@ -final class HwpDocInfoTag { - static let BEGIN: Int = 0x10 - - static let DOCUMENT_PROPERTIES = BEGIN - static let ID_MAPPINGS = BEGIN + 1 - static let BIN_DATA = BEGIN + 2 - static let FACE_NAME = BEGIN + 3 - static let BORDER_FILL = BEGIN + 4 - static let CHAR_SHAPE = BEGIN + 5 - static let TAB_DEF = BEGIN + 6 - static let NUMBERING = BEGIN + 7 - static let BULLET = BEGIN + 8 - static let PARA_SHAPE = BEGIN + 9 - static let STYLE = BEGIN + 10 - static let DOC_DATA = BEGIN + 11 - static let DISTRIBUTE_DOC_DATA = BEGIN + 12 - static let RESERVED = BEGIN + 13 - static let COMPATIBLE_DOCUMENT = BEGIN + 14 - static let LAYOUT_COMPATIBILITY = BEGIN + 15 - static let TRACKCHANGE = BEGIN + 16 - static let MEMO_SHAPE = BEGIN + 76 - static let FORBIDDEN_CHAR = BEGIN + 78 - static let TRACK_CHANGE = BEGIN + 80 - static let TRACK_CHANGE_AUTHOR = BEGIN + 81 -} diff --git a/Sources/HwpKit/Tags/HwpSectionTag.swift b/Sources/HwpKit/Tags/HwpSectionTag.swift deleted file mode 100644 index f1ad65d..0000000 --- a/Sources/HwpKit/Tags/HwpSectionTag.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// File.swift -// -// -// Created by Seungbin Oh on 2020/09/20. -// - -import Foundation diff --git a/Sources/HwpKit/Tags/HwpTag.swift b/Sources/HwpKit/Tags/HwpTag.swift new file mode 100644 index 0000000..8f2bc3e --- /dev/null +++ b/Sources/HwpKit/Tags/HwpTag.swift @@ -0,0 +1,59 @@ +let BEGIN: Int = 0x10 + +final class HwpTag { + static let DOCUMENT_PROPERTIES = BEGIN + static let ID_MAPPINGS = BEGIN + 1 + static let BIN_DATA = BEGIN + 2 + static let FACE_NAME = BEGIN + 3 + static let BORDER_FILL = BEGIN + 4 + static let CHAR_SHAPE = BEGIN + 5 + static let TAB_DEF = BEGIN + 6 + static let NUMBERING = BEGIN + 7 + static let BULLET = BEGIN + 8 + static let PARA_SHAPE = BEGIN + 9 + static let STYLE = BEGIN + 10 + static let DOC_DATA = BEGIN + 11 + static let DISTRIBUTE_DOC_DATA = BEGIN + 12 + static let RESERVED = BEGIN + 13 + static let COMPATIBLE_DOCUMENT = BEGIN + 14 + static let LAYOUT_COMPATIBILITY = BEGIN + 15 + static let TRACKCHANGE = BEGIN + 16 + static let MEMO_SHAPE = BEGIN + 76 + static let FORBIDDEN_CHAR = BEGIN + 78 + static let TRACK_CHANGE = BEGIN + 80 + static let TRACK_CHANGE_AUTHOR = BEGIN + 81 +} + +final class HwpSectionTag { + static let PARA_HEADER = BEGIN + 50 + static let PARA_TEXT = BEGIN + 51 + static let PARA_CHAR_SHAPE = BEGIN + 52 + static let PARA_LINE_SEG = BEGIN + 53 + static let PARA_RANGE_TAG = BEGIN + 54 + static let CTRL_HEADER = BEGIN + 55 + static let LIST_HEADER = BEGIN + 56 + static let PAGE_DEF = BEGIN + 57 + static let FOOTNOTE_SHAPE = BEGIN + 58 + static let PAGE_BORDER_FILL = BEGIN + 59 + static let SHAPE_COMPONENT = BEGIN + 60 + static let TABLE = BEGIN + 61 + static let SHAPE_COMPONENT_LINE = BEGIN + 62 + static let SHAPE_COMPONENT_RECTANGLE = BEGIN + 63 + static let SHAPE_COMPONENT_ELLIPSE = BEGIN + 64 + static let SHAPE_COMPONENT_ARC = BEGIN + 65 + static let SHAPE_COMPONENT_POLYGON = BEGIN + 66 + static let SHAPE_COMPONENT_CURVE = BEGIN + 67 + static let SHAPE_COMPONENT_OLE = BEGIN + 68 + static let SHAPE_COMPONENT_PICTURE = BEGIN + 69 + static let SHAPE_COMPONENT_CONTAINER = BEGIN + 70 + static let CTRL_DATA = BEGIN + 71 + static let EQEDIT = BEGIN + 72 + static let RESERVED = BEGIN + 73 + static let SHAPE_COMPONENT_TEXTART = BEGIN + 74 + static let FORM_OBJECT = BEGIN + 75 + static let MEMO_SHAPE = BEGIN + 76 + static let MEMO_LIST = BEGIN + 77 + static let CHART_DATA = BEGIN + 79 + static let VIDEO_DATA = BEGIN + 82 + static let SHAPE_COMPONENT_UNKNOWN = BEGIN + 99 +} diff --git a/Sources/HwpKit/Utils/HwpRecord.swift b/Sources/HwpKit/Utils/HwpRecord.swift index 9c55972..a604954 100644 --- a/Sources/HwpKit/Utils/HwpRecord.swift +++ b/Sources/HwpKit/Utils/HwpRecord.swift @@ -1,7 +1,9 @@ -struct Record { - children: HWPRecord[] = [] - payload: ArrayBuffer - tagID: Int - size: Int - parentTagID: Int +import Foundation + +struct HwpRecord { + let children: [HwpRecord] = [] + let payload: [BYTE] + let tagID: Int + let size: Int + let parentTagID: Int } diff --git a/Sources/HwpKit/Utils/HwpStream.swift b/Sources/HwpKit/Utils/HwpStream.swift index 4da556c..8f8d891 100644 --- a/Sources/HwpKit/Utils/HwpStream.swift +++ b/Sources/HwpKit/Utils/HwpStream.swift @@ -1,5 +1,5 @@ import Foundation protocol HwpStream { - init(_ data: Data) + init(_ data: Data, _ report: (HwpReportable)throws->Void) throws } diff --git a/Sources/HwpKit/Utils/Type.swift b/Sources/HwpKit/Utils/Type.swift index 4fc4b77..c928a08 100644 --- a/Sources/HwpKit/Utils/Type.swift +++ b/Sources/HwpKit/Utils/Type.swift @@ -1,8 +1,92 @@ -// -// File.swift -// -// -// Created by Seungbin Oh on 2020/09/19. -// - import Foundation + +/**부호 없는 한 바이트(0~255)*/ +typealias BYTE = UInt8 +/**16비트 컴파일러에서 ‘unsigned int’에 해당*/ +typealias WORD = UInt16 +/**16비트 컴파일러에서 ‘unsigned long’에 해당*/ +typealias DWORD = UInt32 +/** + WCHAR는 한글의 내부 코드로 표현된 문자 한 글자를 표현하는 자료형이다. 한글의 내부 코드는 한글, 영문, 한자를 비롯해 모든 문자가 2 바이트의 일정한 길이를 가진다. + */ +typealias WCHAR = UniChar +/** + HWPUNIT과 SHWPUNIT는 문자의 크기, 그림의 크기, 용지 여백 등, 문서를 구성하는 요소들의 크기를 표현하기 위한 자료형이다. 문서 출력 장치의 해상도는 가변적이기 때문에, 크기 정보를 점(도트)의 수로 표현할 수는 없다. 따라서 일정한 단위를 기준으로 해야 하는데, 한글에서는 1/7200인치를 기본 단위로 사용한다. 예를 들어 [가로 2 인치 x 세로 1 인치]짜리 그림의 크기를 HWPUNIT 형으로 표현하면 각각 14400 x 7200이 된다. + */ +typealias HWPUNIT = UInt32 +/**1/7200인치로 표현된 한글 내부 단위*/ +typealias SHWPUNIT = Int32 +/**INT16 과 같다.*/ +typealias HWPUNIT16 = Int16 + +// Data to [bytes] +extension Data { + var bytes: [UInt8] { + return [UInt8](self) + } + + func toBits() -> [Bool] { + return self.reduce([Bool]()) {$0 + $1.toBits()} + } + + var uint32: UInt32 { + get { + return self.withUnsafeBytes { $0.load(as: UInt32.self) } + } + } + + var stringASCII: String? { + get { + return String(data: self, encoding: .ascii) + } + } +} + +extension Array where Element == Data { + func toBits() -> [Bool] { + return self.reduce([Bool]()) {$0 + $1.toBits()} + } +} + +// [bytes] to Data +extension Array where Element == UInt8 { + var data: Data { + return Data(self) + } +} + +extension UInt8 { + func toBits() -> [Bool] { + var byte = self + var bits = [Bool](repeating: false, count: 8) + for i in 0..<8 { + let currentBit = byte & 0x01 + if currentBit != 0 { + bits[i] = true + } + + byte >>= 1 + } + + return bits + } + +} + +extension UInt32 { + func toBits() -> [Bool] { + var byte = self + var bits = [Bool](repeating: false, count: 32) + for i in 0..<32 { + let currentBit = byte & 0x01 + if currentBit != 0 { + bits[i] = true + } + + byte >>= 1 + } + + return bits + } +} + diff --git a/Tests/HwpKitTests/HwpKitTests.swift b/Tests/HwpKitTests/HwpKitTests.swift index 188d948..ecef6c6 100644 --- a/Tests/HwpKitTests/HwpKitTests.swift +++ b/Tests/HwpKitTests/HwpKitTests.swift @@ -17,6 +17,7 @@ final class HwpKitTests: XCTestCase { func testSignature() throws { let hwp = try openHwp() + dump(hwp.fileHeader.signature) XCTAssertEqual(hwp.fileHeader.signature, "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") } diff --git a/Tests/HwpKitTests/HwpUtilTests.swift b/Tests/HwpKitTests/HwpUtilTests.swift index 9ed63a0..ff7f71a 100644 --- a/Tests/HwpKitTests/HwpUtilTests.swift +++ b/Tests/HwpKitTests/HwpUtilTests.swift @@ -5,7 +5,7 @@ final class HwpUtilTests: XCTestCase { func testBitsFromInt8() { let byte = UInt8(0x4A) let bits = [false, true, false, false, true, false, true, false].reversed() as [Bool] - XCTAssertEqual(bits, bitsFromUInt8(byte)) + XCTAssertEqual(bits, byte.toBits()) } static var allTests = [ From a48d512d2c0e5c33e94f7ef7f78cff200ddfb91d Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 21 Sep 2020 08:33:46 +0900 Subject: [PATCH 06/19] lint --- Sources/HwpKit/HwpFile.swift | 8 ++--- Sources/HwpKit/Report/HwpError.swift | 9 ++++- Sources/HwpKit/Streams/DocInfo.swift | 13 +++++-- Sources/HwpKit/Streams/HwpFileHeader.swift | 17 +++++---- Sources/HwpKit/Streams/HwpPreviewImage.swift | 2 +- Sources/HwpKit/Streams/PreviewText.swift | 2 +- Sources/HwpKit/Utils/DataReader.swift | 18 ++++++++++ Sources/HwpKit/Utils/HwpRecord.swift | 38 +++++++++++++++++--- Sources/HwpKit/Utils/Type.swift | 32 ++++++++++------- Tests/HwpKitTests/HwpKitTests.swift | 10 +++--- Tests/HwpKitTests/HwpUtilTests.swift | 4 +-- 11 files changed, 111 insertions(+), 42 deletions(-) create mode 100644 Sources/HwpKit/Utils/DataReader.swift diff --git a/Sources/HwpKit/HwpFile.swift b/Sources/HwpKit/HwpFile.swift index 88feca9..9ec5dde 100644 --- a/Sources/HwpKit/HwpFile.swift +++ b/Sources/HwpKit/HwpFile.swift @@ -4,7 +4,7 @@ public struct HwpFile { let fileHeader: HwpFileHeader //let previewText : HKPreviewText var directories: [DirectoryEntry] = [] - + init(filePath: String, report: (HwpReportable) throws -> Void = { _ in }) throws { let ole: OLEFile do { @@ -12,18 +12,18 @@ public struct HwpFile { } catch { throw HwpError.invalidFilePath(path: filePath) } - + do { guard let fileHeaderStream = ole.root.children.first(where: { $0.name == HwpStreamName.fileHeader.rawValue }) else { throw HwpError.streamDoesNotExist(name: HwpStreamName.fileHeader) } let fileHeaderReader = try ole.stream(fileHeaderStream) fileHeader = try HwpFileHeader(fileHeaderReader.readDataToEnd(), report) - + } catch { throw HwpError.invalidFilePath(path: filePath) } - + // do { // guard let previewTextStream = ole.root.children.first(where: {$0.name == HKStreamName.PreviewText.rawValue}) else { // throw HKError.StreamDoesNotExist(name: HKStreamName.PreviewText) diff --git a/Sources/HwpKit/Report/HwpError.swift b/Sources/HwpKit/Report/HwpError.swift index e9ef8ae..8350c16 100644 --- a/Sources/HwpKit/Report/HwpError.swift +++ b/Sources/HwpKit/Report/HwpError.swift @@ -5,6 +5,7 @@ public enum HwpError: Error { case invalidFilePath(path: String) case streamDoesNotExist(name: HwpStreamName) case invalidDataForString(data: Data, name: String) + case bigRecordNotSuppoted(tagId: UInt32, level: UInt32) } extension HwpError: CustomStringConvertible { @@ -18,11 +19,17 @@ extension HwpError: CustomStringConvertible { return "Stream '\(name)' does not exist" case let .invalidDataForString(data, name): return - """ + """ Cannot covert data to utf16le string data: '\(data)' name: '\(name)' """ + case let .bigRecordNotSuppoted(tagId, level): + return + """ + Currently big record is not supported to parse + tagId: '\(tagId)', level: '\(level)' + """ } } } diff --git a/Sources/HwpKit/Streams/DocInfo.swift b/Sources/HwpKit/Streams/DocInfo.swift index 5e0775a..77e9f09 100644 --- a/Sources/HwpKit/Streams/DocInfo.swift +++ b/Sources/HwpKit/Streams/DocInfo.swift @@ -1,3 +1,12 @@ -struct HwpDocInfo { - let test = "Hello" +import Foundation + +struct HwpDocInfo: HwpStream { + let record: HwpRecord + let numberOfSection: UInt16 + + init(_ data: Data, _ report: (HwpReportable) throws -> Void) throws { + record = try parseRecordTree(data: data) + var reader = DataReader(record.payload) + numberOfSection = reader.readUInt16() + } } diff --git a/Sources/HwpKit/Streams/HwpFileHeader.swift b/Sources/HwpKit/Streams/HwpFileHeader.swift index 5d91900..5049c4d 100644 --- a/Sources/HwpKit/Streams/HwpFileHeader.swift +++ b/Sources/HwpKit/Streams/HwpFileHeader.swift @@ -8,12 +8,12 @@ public struct HwpFileHeader: HwpStream { /**signature. 문서 파일은 "HWP Document File"*/ public let signature: String public let version: HwpVersion - + /**압축 여부*/ public let isCompressed: Bool /**암호 설정 여부*/ public let isEncrypted: Bool - + /**CCL, 공공누리 라이선스 정보*/ public let isHavekoreaOpenLicense: Bool @@ -33,7 +33,7 @@ public struct HwpFileHeader: HwpStream { throw HwpError.invalidDataForString(data: data[0..<32], name: "signature") } self.signature = signature - if (signature != "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") { + if signature != "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" { try report(HwpWarning.invalidFileHeaderSignature(signature: signature)) } @@ -42,15 +42,14 @@ public struct HwpFileHeader: HwpStream { let minor: UInt8 = data[34] let major: UInt8 = data[35] version = HwpVersion(major: major, minor: minor, build: build, revision: revision) - - let bits1 = data[36..<40].toBits() + + let bits1 = data[36..<40].bits isCompressed = bits1[0] isEncrypted = bits1[1] - - let bits2 = data[40..<44].toBits() + + let bits2 = data[40..<44].bits isHavekoreaOpenLicense = bits2[0] - - + encryptVersion = data[44..<48].uint32 koreaOpenLicense = UInt8(data[48]) } diff --git a/Sources/HwpKit/Streams/HwpPreviewImage.swift b/Sources/HwpKit/Streams/HwpPreviewImage.swift index 04fe0bb..1ffeeaf 100644 --- a/Sources/HwpKit/Streams/HwpPreviewImage.swift +++ b/Sources/HwpKit/Streams/HwpPreviewImage.swift @@ -2,7 +2,7 @@ import Foundation struct HwpPreviewImage: HwpStream { let image: Data - + init(_ data: Data, _ report: (HwpReportable) throws -> Void) throws { image = data } diff --git a/Sources/HwpKit/Streams/PreviewText.swift b/Sources/HwpKit/Streams/PreviewText.swift index b422373..8a4d4b8 100644 --- a/Sources/HwpKit/Streams/PreviewText.swift +++ b/Sources/HwpKit/Streams/PreviewText.swift @@ -2,7 +2,7 @@ import Foundation struct HwpPreviewText: HwpStream { let text: String - + init(_ data: Data, _ report: (HwpReportable) throws -> Void) throws { guard let text = String(data: data, encoding: .utf16LittleEndian) else { throw HwpError.invalidDataForString(data: data, name: "PreviewText") diff --git a/Sources/HwpKit/Utils/DataReader.swift b/Sources/HwpKit/Utils/DataReader.swift new file mode 100644 index 0000000..b1d82ca --- /dev/null +++ b/Sources/HwpKit/Utils/DataReader.swift @@ -0,0 +1,18 @@ +import Foundation + +struct DataReader { + let data: Data + var offset: Int = 0 + + init(_ data: Data) { + self.data = data + } + + mutating func readUInt16() -> UInt16 { + precondition(offset+2 HwpRecord { + let root = HwpRecord(payload: Data(), tagID: 0, size: 0, parentTagID: 0) + var offset = 0 + while offset> 10) & 0x3FF + let size = (value >> 20) & 0xFFF + if size == 0xFFF { + throw HwpError.bigRecordNotSuppoted(tagId: tagId, level: level) + } + + var parent = root + let payload = data[offset.. [Bool] { - return self.reduce([Bool]()) {$0 + $1.toBits()} + + var bits: [Bool] { + get { + return self.reduce([Bool]()) {$0 + $1.toBits()} + } + + } + + var uint16: UInt16 { + get { + return self.withUnsafeBytes {$0.load(as: UInt16.self)} + } } - + var uint32: UInt32 { get { return self.withUnsafeBytes { $0.load(as: UInt32.self) } } } - + var stringASCII: String? { get { return String(data: self, encoding: .ascii) @@ -44,7 +53,7 @@ extension Data { extension Array where Element == Data { func toBits() -> [Bool] { - return self.reduce([Bool]()) {$0 + $1.toBits()} + return self.reduce([Bool]()) {$0 + $1.bits} } } @@ -64,13 +73,13 @@ extension UInt8 { if currentBit != 0 { bits[i] = true } - + byte >>= 1 } - + return bits } - + } extension UInt32 { @@ -82,11 +91,10 @@ extension UInt32 { if currentBit != 0 { bits[i] = true } - + byte >>= 1 } - + return bits } } - diff --git a/Tests/HwpKitTests/HwpKitTests.swift b/Tests/HwpKitTests/HwpKitTests.swift index ecef6c6..a91f971 100644 --- a/Tests/HwpKitTests/HwpKitTests.swift +++ b/Tests/HwpKitTests/HwpKitTests.swift @@ -9,18 +9,18 @@ final class HwpKitTests: XCTestCase { .appendingPathComponent("blank.hwp") return try HwpFile(filePath: url.path) } - + func testOpen() throws { let hwp = try openHwp() XCTAssertNotNil(hwp.fileHeader) } - + func testSignature() throws { let hwp = try openHwp() dump(hwp.fileHeader.signature) XCTAssertEqual(hwp.fileHeader.signature, "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") } - + func testHwpVersion() throws { let hwp = try openHwp() XCTAssertEqual(hwp.fileHeader.version.major, 5) @@ -28,12 +28,12 @@ final class HwpKitTests: XCTestCase { XCTAssertEqual(hwp.fileHeader.version.build, 3) XCTAssertEqual(hwp.fileHeader.version.revision, 4) } - + func testEncryptVersion() throws { let hwp = try openHwp() XCTAssertEqual(hwp.fileHeader.encryptVersion, 4) } - + static var allTests = [ ("testOpen", testOpen), ("testSignature", testSignature), diff --git a/Tests/HwpKitTests/HwpUtilTests.swift b/Tests/HwpKitTests/HwpUtilTests.swift index ff7f71a..8105f1b 100644 --- a/Tests/HwpKitTests/HwpUtilTests.swift +++ b/Tests/HwpKitTests/HwpUtilTests.swift @@ -7,8 +7,8 @@ final class HwpUtilTests: XCTestCase { let bits = [false, true, false, false, true, false, true, false].reversed() as [Bool] XCTAssertEqual(bits, byte.toBits()) } - + static var allTests = [ - ("testBitsFromInt8", testBitsFromInt8), + ("testBitsFromInt8", testBitsFromInt8) ] } From 055b5242177645e8d21cb7a559003d8fb52bbc97 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 21 Sep 2020 10:17:32 +0900 Subject: [PATCH 07/19] parse document properties --- Package.swift | 9 +- Sources/HwpKit/HwpFile.swift | 4 +- .../HwpKit/Models/HwpDocumentProperties.swift | 5 + Sources/HwpKit/Models/LineSegment.swift | 16 +-- Sources/HwpKit/Report/HwpError.swift | 10 +- Sources/HwpKit/Report/HwpReportable.swift | 4 +- Sources/HwpKit/Report/HwpWarning.swift | 3 + Sources/HwpKit/Streams/BodyText/Section.swift | 16 +-- Sources/HwpKit/Streams/DocInfo.swift | 12 -- Sources/HwpKit/Streams/HwpDocInfo.swift | 27 +++++ Sources/HwpKit/Streams/HwpFileHeader.swift | 24 ++-- Sources/HwpKit/Streams/HwpPreviewImage.swift | 2 +- Sources/HwpKit/Streams/PreviewText.swift | 2 +- Sources/HwpKit/Tags/HwpTag.swift | 108 +++++++++--------- Sources/HwpKit/Utils/DataReader.swift | 16 ++- Sources/HwpKit/Utils/HwpRecord.swift | 14 +-- Sources/HwpKit/Utils/HwpStream.swift | 2 +- Sources/HwpKit/Utils/Type.swift | 34 ++---- Tests/HwpKitTests/HwpKitTests.swift | 4 +- Tests/HwpKitTests/HwpUtilTests.swift | 4 +- Tests/HwpKitTests/XCTestManifests.swift | 10 +- 21 files changed, 173 insertions(+), 153 deletions(-) create mode 100644 Sources/HwpKit/Models/HwpDocumentProperties.swift delete mode 100644 Sources/HwpKit/Streams/DocInfo.swift create mode 100644 Sources/HwpKit/Streams/HwpDocInfo.swift diff --git a/Package.swift b/Package.swift index bba3a7e..622dee2 100644 --- a/Package.swift +++ b/Package.swift @@ -9,7 +9,8 @@ let package = Package( // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "HwpKit", - targets: ["HwpKit"]) + targets: ["HwpKit"] + ), ], dependencies: [ // Dependencies declare other packages that this package depends on. @@ -24,9 +25,11 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "HwpKit", - dependencies: ["OLEKit"]), + dependencies: ["OLEKit"] + ), .testTarget( name: "HwpKitTests", - dependencies: ["HwpKit"]) + dependencies: ["HwpKit"] + ), ] ) diff --git a/Sources/HwpKit/HwpFile.swift b/Sources/HwpKit/HwpFile.swift index 9ec5dde..d66691d 100644 --- a/Sources/HwpKit/HwpFile.swift +++ b/Sources/HwpKit/HwpFile.swift @@ -2,10 +2,10 @@ import OLEKit public struct HwpFile { let fileHeader: HwpFileHeader - //let previewText : HKPreviewText + // let previewText : HKPreviewText var directories: [DirectoryEntry] = [] - init(filePath: String, report: (HwpReportable) throws -> Void = { _ in }) throws { + init(filePath: String, report: (HwpReportable) -> Void = { _ in }) throws { let ole: OLEFile do { ole = try OLEFile(filePath) diff --git a/Sources/HwpKit/Models/HwpDocumentProperties.swift b/Sources/HwpKit/Models/HwpDocumentProperties.swift new file mode 100644 index 0000000..d56f6c9 --- /dev/null +++ b/Sources/HwpKit/Models/HwpDocumentProperties.swift @@ -0,0 +1,5 @@ +import Foundation + +struct HwpDocumentProperties { + let sectionSize: UInt16 +} diff --git a/Sources/HwpKit/Models/LineSegment.swift b/Sources/HwpKit/Models/LineSegment.swift index 9955165..6a0e68c 100644 --- a/Sources/HwpKit/Models/LineSegment.swift +++ b/Sources/HwpKit/Models/LineSegment.swift @@ -1,10 +1,10 @@ struct HwpLineSegment { - let start: Int = 0 - let y: Int = 0 - let height: Int = 0 - let textHeight: Int = 0 - let baseLineGap: Int = 0 - let lineSpacing: Int = 0 - let startByte: Int = 0 - let width: Int = 0 + let start: Int = 0 + let y: Int = 0 + let height: Int = 0 + let textHeight: Int = 0 + let baseLineGap: Int = 0 + let lineSpacing: Int = 0 + let startByte: Int = 0 + let width: Int = 0 } diff --git a/Sources/HwpKit/Report/HwpError.swift b/Sources/HwpKit/Report/HwpError.swift index 8350c16..f344c11 100644 --- a/Sources/HwpKit/Report/HwpError.swift +++ b/Sources/HwpKit/Report/HwpError.swift @@ -19,11 +19,11 @@ extension HwpError: CustomStringConvertible { return "Stream '\(name)' does not exist" case let .invalidDataForString(data, name): return - """ - Cannot covert data to utf16le string - data: '\(data)' - name: '\(name)' - """ + """ + Cannot covert data to utf16le string + data: '\(data)' + name: '\(name)' + """ case let .bigRecordNotSuppoted(tagId, level): return """ diff --git a/Sources/HwpKit/Report/HwpReportable.swift b/Sources/HwpKit/Report/HwpReportable.swift index 697ed5a..5ee19c0 100644 --- a/Sources/HwpKit/Report/HwpReportable.swift +++ b/Sources/HwpKit/Report/HwpReportable.swift @@ -1,5 +1,3 @@ import Foundation -public protocol HwpReportable { - -} +public protocol HwpReportable {} diff --git a/Sources/HwpKit/Report/HwpWarning.swift b/Sources/HwpKit/Report/HwpWarning.swift index 0daa1b8..2d44099 100644 --- a/Sources/HwpKit/Report/HwpWarning.swift +++ b/Sources/HwpKit/Report/HwpWarning.swift @@ -2,6 +2,7 @@ import Foundation public enum HwpWarning: HwpReportable { case invalidFileHeaderSignature(signature: String) + case unidentifiedTag(tagId: UInt32) } extension HwpWarning: CustomStringConvertible { @@ -9,6 +10,8 @@ extension HwpWarning: CustomStringConvertible { switch self { case let .invalidFileHeaderSignature(signature): return "Invalid signature in FileHeader stream : get'\(signature)'" + case let .unidentifiedTag(tagId): + return "Cannot Read HwpRecord Tag : '\(tagId)'" } } } diff --git a/Sources/HwpKit/Streams/BodyText/Section.swift b/Sources/HwpKit/Streams/BodyText/Section.swift index bfe3307..940d647 100644 --- a/Sources/HwpKit/Streams/BodyText/Section.swift +++ b/Sources/HwpKit/Streams/BodyText/Section.swift @@ -1,10 +1,10 @@ struct HwpSection { - let width: Int = 0 - let height: Int = 0 - let paddingLeft: Int = 0 - let paddingRight: Int = 0 - let paddingTop: Int = 0 - let paddingBottom: Int = 0 - let headerPadding: Int = 0 - let footerPadding: Int = 0 + let width: Int = 0 + let height: Int = 0 + let paddingLeft: Int = 0 + let paddingRight: Int = 0 + let paddingTop: Int = 0 + let paddingBottom: Int = 0 + let headerPadding: Int = 0 + let footerPadding: Int = 0 } diff --git a/Sources/HwpKit/Streams/DocInfo.swift b/Sources/HwpKit/Streams/DocInfo.swift deleted file mode 100644 index 77e9f09..0000000 --- a/Sources/HwpKit/Streams/DocInfo.swift +++ /dev/null @@ -1,12 +0,0 @@ -import Foundation - -struct HwpDocInfo: HwpStream { - let record: HwpRecord - let numberOfSection: UInt16 - - init(_ data: Data, _ report: (HwpReportable) throws -> Void) throws { - record = try parseRecordTree(data: data) - var reader = DataReader(record.payload) - numberOfSection = reader.readUInt16() - } -} diff --git a/Sources/HwpKit/Streams/HwpDocInfo.swift b/Sources/HwpKit/Streams/HwpDocInfo.swift new file mode 100644 index 0000000..b72d2f3 --- /dev/null +++ b/Sources/HwpKit/Streams/HwpDocInfo.swift @@ -0,0 +1,27 @@ +import Foundation + +struct HwpDocInfo: HwpStream { + let record: HwpRecord + var documentProperties: HwpDocumentProperties + + init(_ data: Data, _ report: (HwpReportable) -> Void) throws { + record = try parseRecordTree(data: data) + + record.children.forEach { item in visitRecord(item, report) } + } + + private mutating func visitRecord(_ record: HwpRecord, _ report: (HwpReportable) -> Void) { + switch record.tagID { + case HwpDocInfoTag.DOCUMENT_PROPERTIES: + visitDocumentPropertes(record) + default: + report(HwpWarning.unidentifiedTag(tagId: record.tagID)) + } + } + + private mutating func visitDocumentPropertes(_ record: HwpRecord) { + var reader = DataReader(record.payload) + let sectionSize = reader.readUInt16() + documentProperties = HwpDocumentProperties(sectionSize: sectionSize) + } +} diff --git a/Sources/HwpKit/Streams/HwpFileHeader.swift b/Sources/HwpKit/Streams/HwpFileHeader.swift index 5049c4d..b383a66 100644 --- a/Sources/HwpKit/Streams/HwpFileHeader.swift +++ b/Sources/HwpKit/Streams/HwpFileHeader.swift @@ -5,16 +5,16 @@ import Foundation 한글의 문서 파일이라는 것을 나타내기 위해 ‘파일 인식 정보’가 저장된다. */ public struct HwpFileHeader: HwpStream { - /**signature. 문서 파일은 "HWP Document File"*/ + /** signature. 문서 파일은 "HWP Document File" */ public let signature: String public let version: HwpVersion - /**압축 여부*/ + /** 압축 여부 */ public let isCompressed: Bool - /**암호 설정 여부*/ + /** 암호 설정 여부 */ public let isEncrypted: Bool - /**CCL, 공공누리 라이선스 정보*/ + /** CCL, 공공누리 라이선스 정보 */ public let isHavekoreaOpenLicense: Bool /** @@ -26,15 +26,15 @@ public struct HwpFileHeader: HwpStream { - 4 : (한글 7.0 버전 이후) */ let encryptVersion: UInt32 - let koreaOpenLicense: UInt8 //공공누리 Korea Open Government License + let koreaOpenLicense: UInt8 // 공공누리 Korea Open Government License - init(_ data: Data, _ report: (HwpReportable)throws->Void) throws { - guard let signature = data[0..<32].stringASCII else { - throw HwpError.invalidDataForString(data: data[0..<32], name: "signature") + init(_ data: Data, _ report: (HwpReportable) -> Void) throws { + guard let signature = data[0 ..< 32].stringASCII else { + throw HwpError.invalidDataForString(data: data[0 ..< 32], name: "signature") } self.signature = signature if signature != "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" { - try report(HwpWarning.invalidFileHeaderSignature(signature: signature)) + report(HwpWarning.invalidFileHeaderSignature(signature: signature)) } let revision: UInt8 = data[32] @@ -43,14 +43,14 @@ public struct HwpFileHeader: HwpStream { let major: UInt8 = data[35] version = HwpVersion(major: major, minor: minor, build: build, revision: revision) - let bits1 = data[36..<40].bits + let bits1 = data[36 ..< 40].bits isCompressed = bits1[0] isEncrypted = bits1[1] - let bits2 = data[40..<44].bits + let bits2 = data[40 ..< 44].bits isHavekoreaOpenLicense = bits2[0] - encryptVersion = data[44..<48].uint32 + encryptVersion = data[44 ..< 48].uint32 koreaOpenLicense = UInt8(data[48]) } } diff --git a/Sources/HwpKit/Streams/HwpPreviewImage.swift b/Sources/HwpKit/Streams/HwpPreviewImage.swift index 1ffeeaf..4205dbe 100644 --- a/Sources/HwpKit/Streams/HwpPreviewImage.swift +++ b/Sources/HwpKit/Streams/HwpPreviewImage.swift @@ -3,7 +3,7 @@ import Foundation struct HwpPreviewImage: HwpStream { let image: Data - init(_ data: Data, _ report: (HwpReportable) throws -> Void) throws { + init(_ data: Data, _: (HwpReportable) -> Void) throws { image = data } } diff --git a/Sources/HwpKit/Streams/PreviewText.swift b/Sources/HwpKit/Streams/PreviewText.swift index 8a4d4b8..eaad5b4 100644 --- a/Sources/HwpKit/Streams/PreviewText.swift +++ b/Sources/HwpKit/Streams/PreviewText.swift @@ -3,7 +3,7 @@ import Foundation struct HwpPreviewText: HwpStream { let text: String - init(_ data: Data, _ report: (HwpReportable) throws -> Void) throws { + init(_ data: Data, _: (HwpReportable) -> Void) throws { guard let text = String(data: data, encoding: .utf16LittleEndian) else { throw HwpError.invalidDataForString(data: data, name: "PreviewText") } diff --git a/Sources/HwpKit/Tags/HwpTag.swift b/Sources/HwpKit/Tags/HwpTag.swift index 8f2bc3e..23e714b 100644 --- a/Sources/HwpKit/Tags/HwpTag.swift +++ b/Sources/HwpKit/Tags/HwpTag.swift @@ -1,59 +1,59 @@ -let BEGIN: Int = 0x10 +let BEGIN: UInt32 = 0x10 -final class HwpTag { - static let DOCUMENT_PROPERTIES = BEGIN - static let ID_MAPPINGS = BEGIN + 1 - static let BIN_DATA = BEGIN + 2 - static let FACE_NAME = BEGIN + 3 - static let BORDER_FILL = BEGIN + 4 - static let CHAR_SHAPE = BEGIN + 5 - static let TAB_DEF = BEGIN + 6 - static let NUMBERING = BEGIN + 7 - static let BULLET = BEGIN + 8 - static let PARA_SHAPE = BEGIN + 9 - static let STYLE = BEGIN + 10 - static let DOC_DATA = BEGIN + 11 - static let DISTRIBUTE_DOC_DATA = BEGIN + 12 - static let RESERVED = BEGIN + 13 - static let COMPATIBLE_DOCUMENT = BEGIN + 14 - static let LAYOUT_COMPATIBILITY = BEGIN + 15 - static let TRACKCHANGE = BEGIN + 16 - static let MEMO_SHAPE = BEGIN + 76 - static let FORBIDDEN_CHAR = BEGIN + 78 - static let TRACK_CHANGE = BEGIN + 80 - static let TRACK_CHANGE_AUTHOR = BEGIN + 81 +final class HwpDocInfoTag { + static let DOCUMENT_PROPERTIES: UInt32 = BEGIN + static let ID_MAPPINGS: UInt32 = BEGIN + 1 + static let BIN_DATA: UInt32 = BEGIN + 2 + static let FACE_NAME: UInt32 = BEGIN + 3 + static let BORDER_FILL: UInt32 = BEGIN + 4 + static let CHAR_SHAPE: UInt32 = BEGIN + 5 + static let TAB_DEF: UInt32 = BEGIN + 6 + static let NUMBERING: UInt32 = BEGIN + 7 + static let BULLET: UInt32 = BEGIN + 8 + static let PARA_SHAPE: UInt32 = BEGIN + 9 + static let STYLE: UInt32 = BEGIN + 10 + static let DOC_DATA: UInt32 = BEGIN + 11 + static let DISTRIBUTE_DOC_DATA: UInt32 = BEGIN + 12 + static let RESERVED: UInt32 = BEGIN + 13 + static let COMPATIBLE_DOCUMENT: UInt32 = BEGIN + 14 + static let LAYOUT_COMPATIBILITY: UInt32 = BEGIN + 15 + static let TRACKCHANGE: UInt32 = BEGIN + 16 + static let MEMO_SHAPE: UInt32 = BEGIN + 76 + static let FORBIDDEN_CHAR: UInt32 = BEGIN + 78 + static let TRACK_CHANGE: UInt32 = BEGIN + 80 + static let TRACK_CHANGE_AUTHOR: UInt32 = BEGIN + 81 } final class HwpSectionTag { - static let PARA_HEADER = BEGIN + 50 - static let PARA_TEXT = BEGIN + 51 - static let PARA_CHAR_SHAPE = BEGIN + 52 - static let PARA_LINE_SEG = BEGIN + 53 - static let PARA_RANGE_TAG = BEGIN + 54 - static let CTRL_HEADER = BEGIN + 55 - static let LIST_HEADER = BEGIN + 56 - static let PAGE_DEF = BEGIN + 57 - static let FOOTNOTE_SHAPE = BEGIN + 58 - static let PAGE_BORDER_FILL = BEGIN + 59 - static let SHAPE_COMPONENT = BEGIN + 60 - static let TABLE = BEGIN + 61 - static let SHAPE_COMPONENT_LINE = BEGIN + 62 - static let SHAPE_COMPONENT_RECTANGLE = BEGIN + 63 - static let SHAPE_COMPONENT_ELLIPSE = BEGIN + 64 - static let SHAPE_COMPONENT_ARC = BEGIN + 65 - static let SHAPE_COMPONENT_POLYGON = BEGIN + 66 - static let SHAPE_COMPONENT_CURVE = BEGIN + 67 - static let SHAPE_COMPONENT_OLE = BEGIN + 68 - static let SHAPE_COMPONENT_PICTURE = BEGIN + 69 - static let SHAPE_COMPONENT_CONTAINER = BEGIN + 70 - static let CTRL_DATA = BEGIN + 71 - static let EQEDIT = BEGIN + 72 - static let RESERVED = BEGIN + 73 - static let SHAPE_COMPONENT_TEXTART = BEGIN + 74 - static let FORM_OBJECT = BEGIN + 75 - static let MEMO_SHAPE = BEGIN + 76 - static let MEMO_LIST = BEGIN + 77 - static let CHART_DATA = BEGIN + 79 - static let VIDEO_DATA = BEGIN + 82 - static let SHAPE_COMPONENT_UNKNOWN = BEGIN + 99 + static let PARA_HEADER: UInt32 = BEGIN + 50 + static let PARA_TEXT: UInt32 = BEGIN + 51 + static let PARA_CHAR_SHAPE: UInt32 = BEGIN + 52 + static let PARA_LINE_SEG: UInt32 = BEGIN + 53 + static let PARA_RANGE_TAG: UInt32 = BEGIN + 54 + static let CTRL_HEADER: UInt32 = BEGIN + 55 + static let LIST_HEADER: UInt32 = BEGIN + 56 + static let PAGE_DEF: UInt32 = BEGIN + 57 + static let FOOTNOTE_SHAPE: UInt32 = BEGIN + 58 + static let PAGE_BORDER_FILL: UInt32 = BEGIN + 59 + static let SHAPE_COMPONENT: UInt32 = BEGIN + 60 + static let TABLE: UInt32 = BEGIN + 61 + static let SHAPE_COMPONENT_LINE: UInt32 = BEGIN + 62 + static let SHAPE_COMPONENT_RECTANGLE: UInt32 = BEGIN + 63 + static let SHAPE_COMPONENT_ELLIPSE: UInt32 = BEGIN + 64 + static let SHAPE_COMPONENT_ARC: UInt32 = BEGIN + 65 + static let SHAPE_COMPONENT_POLYGON: UInt32 = BEGIN + 66 + static let SHAPE_COMPONENT_CURVE: UInt32 = BEGIN + 67 + static let SHAPE_COMPONENT_OLE: UInt32 = BEGIN + 68 + static let SHAPE_COMPONENT_PICTURE: UInt32 = BEGIN + 69 + static let SHAPE_COMPONENT_CONTAINER: UInt32 = BEGIN + 70 + static let CTRL_DATA: UInt32 = BEGIN + 71 + static let EQEDIT: UInt32 = BEGIN + 72 + static let RESERVED: UInt32 = BEGIN + 73 + static let SHAPE_COMPONENT_TEXTART: UInt32 = BEGIN + 74 + static let FORM_OBJECT: UInt32 = BEGIN + 75 + static let MEMO_SHAPE: UInt32 = BEGIN + 76 + static let MEMO_LIST: UInt32 = BEGIN + 77 + static let CHART_DATA: UInt32 = BEGIN + 79 + static let VIDEO_DATA: UInt32 = BEGIN + 82 + static let SHAPE_COMPONENT_UNKNOWN: UInt32 = BEGIN + 99 } diff --git a/Sources/HwpKit/Utils/DataReader.swift b/Sources/HwpKit/Utils/DataReader.swift index b1d82ca..10ead6f 100644 --- a/Sources/HwpKit/Utils/DataReader.swift +++ b/Sources/HwpKit/Utils/DataReader.swift @@ -8,11 +8,19 @@ struct DataReader { self.data = data } - mutating func readUInt16() -> UInt16 { - precondition(offset+2 Data { + precondition(offset + length < data.count) defer { - offset += 2 + offset += length } - return data[offset.. UInt16 { + return readBytes(2).uint16 + } + + mutating func readUInt32() -> UInt32 { + return readBytes(4).uint32 } } diff --git a/Sources/HwpKit/Utils/HwpRecord.swift b/Sources/HwpKit/Utils/HwpRecord.swift index d5a5c4b..f6d0842 100644 --- a/Sources/HwpKit/Utils/HwpRecord.swift +++ b/Sources/HwpKit/Utils/HwpRecord.swift @@ -10,10 +10,9 @@ struct HwpRecord { func parseRecordTree(data: Data) throws -> HwpRecord { let root = HwpRecord(payload: Data(), tagID: 0, size: 0, parentTagID: 0) - var offset = 0 - while offset> 10) & 0x3FF @@ -23,14 +22,13 @@ func parseRecordTree(data: Data) throws -> HwpRecord { } var parent = root - let payload = data[offset..Void) throws + init(_ data: Data, _ report: (HwpReportable) -> Void) throws } diff --git a/Sources/HwpKit/Utils/Type.swift b/Sources/HwpKit/Utils/Type.swift index 1538b07..d56b3a9 100644 --- a/Sources/HwpKit/Utils/Type.swift +++ b/Sources/HwpKit/Utils/Type.swift @@ -1,10 +1,10 @@ import Foundation -/**부호 없는 한 바이트(0~255)*/ +/** 부호 없는 한 바이트(0~255) */ typealias BYTE = UInt8 -/**16비트 컴파일러에서 ‘unsigned int’에 해당*/ +/** 16비트 컴파일러에서 ‘unsigned int’에 해당 */ typealias WORD = UInt16 -/**16비트 컴파일러에서 ‘unsigned long’에 해당*/ +/** 16비트 컴파일러에서 ‘unsigned long’에 해당 */ typealias DWORD = UInt32 /** WCHAR는 한글의 내부 코드로 표현된 문자 한 글자를 표현하는 자료형이다. 한글의 내부 코드는 한글, 영문, 한자를 비롯해 모든 문자가 2 바이트의 일정한 길이를 가진다. @@ -14,9 +14,9 @@ typealias WCHAR = UniChar HWPUNIT과 SHWPUNIT는 문자의 크기, 그림의 크기, 용지 여백 등, 문서를 구성하는 요소들의 크기를 표현하기 위한 자료형이다. 문서 출력 장치의 해상도는 가변적이기 때문에, 크기 정보를 점(도트)의 수로 표현할 수는 없다. 따라서 일정한 단위를 기준으로 해야 하는데, 한글에서는 1/7200인치를 기본 단위로 사용한다. 예를 들어 [가로 2 인치 x 세로 1 인치]짜리 그림의 크기를 HWPUNIT 형으로 표현하면 각각 14400 x 7200이 된다. */ typealias HWPUNIT = UInt32 -/**1/7200인치로 표현된 한글 내부 단위*/ +/** 1/7200인치로 표현된 한글 내부 단위 */ typealias SHWPUNIT = Int32 -/**INT16 과 같다.*/ +/** INT16 과 같다. */ typealias HWPUNIT16 = Int16 // Data to [bytes] @@ -26,34 +26,25 @@ extension Data { } var bits: [Bool] { - get { - return self.reduce([Bool]()) {$0 + $1.toBits()} - } - + return reduce([Bool]()) { $0 + $1.toBits() } } var uint16: UInt16 { - get { - return self.withUnsafeBytes {$0.load(as: UInt16.self)} - } + return withUnsafeBytes { $0.load(as: UInt16.self) } } var uint32: UInt32 { - get { - return self.withUnsafeBytes { $0.load(as: UInt32.self) } - } + return withUnsafeBytes { $0.load(as: UInt32.self) } } var stringASCII: String? { - get { - return String(data: self, encoding: .ascii) - } + return String(data: self, encoding: .ascii) } } extension Array where Element == Data { func toBits() -> [Bool] { - return self.reduce([Bool]()) {$0 + $1.bits} + return reduce([Bool]()) { $0 + $1.bits } } } @@ -68,7 +59,7 @@ extension UInt8 { func toBits() -> [Bool] { var byte = self var bits = [Bool](repeating: false, count: 8) - for i in 0..<8 { + for i in 0 ..< 8 { let currentBit = byte & 0x01 if currentBit != 0 { bits[i] = true @@ -79,14 +70,13 @@ extension UInt8 { return bits } - } extension UInt32 { func toBits() -> [Bool] { var byte = self var bits = [Bool](repeating: false, count: 32) - for i in 0..<32 { + for i in 0 ..< 32 { let currentBit = byte & 0x01 if currentBit != 0 { bits[i] = true diff --git a/Tests/HwpKitTests/HwpKitTests.swift b/Tests/HwpKitTests/HwpKitTests.swift index a91f971..e1f969d 100644 --- a/Tests/HwpKitTests/HwpKitTests.swift +++ b/Tests/HwpKitTests/HwpKitTests.swift @@ -1,5 +1,5 @@ -import XCTest @testable import HwpKit +import XCTest final class HwpKitTests: XCTestCase { func openHwp() throws -> HwpFile { @@ -38,6 +38,6 @@ final class HwpKitTests: XCTestCase { ("testOpen", testOpen), ("testSignature", testSignature), ("testHwpVersion", testHwpVersion), - ("testEncryptVersion", testEncryptVersion) + ("testEncryptVersion", testEncryptVersion), ] } diff --git a/Tests/HwpKitTests/HwpUtilTests.swift b/Tests/HwpKitTests/HwpUtilTests.swift index 8105f1b..2d42395 100644 --- a/Tests/HwpKitTests/HwpUtilTests.swift +++ b/Tests/HwpKitTests/HwpUtilTests.swift @@ -1,5 +1,5 @@ -import XCTest @testable import HwpKit +import XCTest final class HwpUtilTests: XCTestCase { func testBitsFromInt8() { @@ -9,6 +9,6 @@ final class HwpUtilTests: XCTestCase { } static var allTests = [ - ("testBitsFromInt8", testBitsFromInt8) + ("testBitsFromInt8", testBitsFromInt8), ] } diff --git a/Tests/HwpKitTests/XCTestManifests.swift b/Tests/HwpKitTests/XCTestManifests.swift index 63add0d..b41c599 100644 --- a/Tests/HwpKitTests/XCTestManifests.swift +++ b/Tests/HwpKitTests/XCTestManifests.swift @@ -1,9 +1,9 @@ import XCTest #if !canImport(ObjectiveC) -public func allTests() -> [XCTestCaseEntry] { - return [ - testCase(HwpKitTests.allTests) - ] -} + public func allTests() -> [XCTestCaseEntry] { + return [ + testCase(HwpKitTests.allTests), + ] + } #endif From d661920e000647fe6d939c480a406a0bf2488d2a Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 21 Sep 2020 10:33:28 +0900 Subject: [PATCH 08/19] fix bug of doc info --- Sources/HwpKit/Report/HwpError.swift | 3 +++ Sources/HwpKit/Streams/HwpDocInfo.swift | 23 +++++++++------------- Sources/HwpKit/Streams/HwpFileHeader.swift | 2 +- 3 files changed, 13 insertions(+), 15 deletions(-) diff --git a/Sources/HwpKit/Report/HwpError.swift b/Sources/HwpKit/Report/HwpError.swift index f344c11..cef0af0 100644 --- a/Sources/HwpKit/Report/HwpError.swift +++ b/Sources/HwpKit/Report/HwpError.swift @@ -6,6 +6,7 @@ public enum HwpError: Error { case streamDoesNotExist(name: HwpStreamName) case invalidDataForString(data: Data, name: String) case bigRecordNotSuppoted(tagId: UInt32, level: UInt32) + case recordDoesNotExist(tag: UInt32) } extension HwpError: CustomStringConvertible { @@ -30,6 +31,8 @@ extension HwpError: CustomStringConvertible { Currently big record is not supported to parse tagId: '\(tagId)', level: '\(level)' """ + case let .recordDoesNotExist(tag): + return "Record '\(tag)' does not exist." } } } diff --git a/Sources/HwpKit/Streams/HwpDocInfo.swift b/Sources/HwpKit/Streams/HwpDocInfo.swift index b72d2f3..4feff05 100644 --- a/Sources/HwpKit/Streams/HwpDocInfo.swift +++ b/Sources/HwpKit/Streams/HwpDocInfo.swift @@ -1,27 +1,22 @@ import Foundation -struct HwpDocInfo: HwpStream { +public struct HwpDocInfo: HwpStream { let record: HwpRecord - var documentProperties: HwpDocumentProperties + let documentProperties: HwpDocumentProperties - init(_ data: Data, _ report: (HwpReportable) -> Void) throws { + internal init(_ data: Data, _ report: (HwpReportable) -> Void) throws { record = try parseRecordTree(data: data) - record.children.forEach { item in visitRecord(item, report) } - } - - private mutating func visitRecord(_ record: HwpRecord, _ report: (HwpReportable) -> Void) { - switch record.tagID { - case HwpDocInfoTag.DOCUMENT_PROPERTIES: - visitDocumentPropertes(record) - default: - report(HwpWarning.unidentifiedTag(tagId: record.tagID)) + guard let documentProperties = record.children.first(where: {$0.tagID == HwpDocInfoTag.DOCUMENT_PROPERTIES}) + else { + throw HwpError.recordDoesNotExist(tag: HwpDocInfoTag.DOCUMENT_PROPERTIES) } + self.documentProperties = HwpDocInfo.visitDocumentPropertes(documentProperties) } - private mutating func visitDocumentPropertes(_ record: HwpRecord) { + static private func visitDocumentPropertes(_ record: HwpRecord) -> HwpDocumentProperties { var reader = DataReader(record.payload) let sectionSize = reader.readUInt16() - documentProperties = HwpDocumentProperties(sectionSize: sectionSize) + return HwpDocumentProperties(sectionSize: sectionSize) } } diff --git a/Sources/HwpKit/Streams/HwpFileHeader.swift b/Sources/HwpKit/Streams/HwpFileHeader.swift index b383a66..e655033 100644 --- a/Sources/HwpKit/Streams/HwpFileHeader.swift +++ b/Sources/HwpKit/Streams/HwpFileHeader.swift @@ -28,7 +28,7 @@ public struct HwpFileHeader: HwpStream { let encryptVersion: UInt32 let koreaOpenLicense: UInt8 // 공공누리 Korea Open Government License - init(_ data: Data, _ report: (HwpReportable) -> Void) throws { + internal init(_ data: Data, _ report: (HwpReportable) -> Void) throws { guard let signature = data[0 ..< 32].stringASCII else { throw HwpError.invalidDataForString(data: data[0 ..< 32], name: "signature") } From b2c5456ac54976713ce08917dfb3f148730e893a Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 21 Sep 2020 17:41:16 +0900 Subject: [PATCH 09/19] add version test case --- Package.swift | 8 ++++-- Sources/HwpKit/HwpFile.swift | 2 ++ Sources/HwpKit/Streams/HwpDocInfo.swift | 6 ++--- Sources/HwpKit/Utils/DataReader.swift | 4 +-- Sources/HwpKit/Utils/Type.swift | 14 +++++------ .../BasicTests.swift} | 3 +-- .../HwpKitTests/{Versions => Basic}/blank.hwp | Bin .../Versions/{2007.hwp => 2014VP.hwp} | Bin 8704 -> 8704 bytes Tests/HwpKitTests/Versions/VersionTests.swift | 23 ++++++++++++++++++ Tests/HwpKitTests/XCTestManifests.swift | 6 +++-- 10 files changed, 48 insertions(+), 18 deletions(-) rename Tests/HwpKitTests/{HwpKitTests.swift => Basic/BasicTests.swift} (93%) rename Tests/HwpKitTests/{Versions => Basic}/blank.hwp (100%) rename Tests/HwpKitTests/Versions/{2007.hwp => 2014VP.hwp} (51%) create mode 100644 Tests/HwpKitTests/Versions/VersionTests.swift diff --git a/Package.swift b/Package.swift index 622dee2..1883970 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.2 +// swift-tools-version:5.3 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -29,7 +29,11 @@ let package = Package( ), .testTarget( name: "HwpKitTests", - dependencies: ["HwpKit"] + dependencies: ["HwpKit"], + resources: [ + .copy("Basic/blank.hwp"), + .copy("Versions/2014VP.hwp"), + ] ), ] ) diff --git a/Sources/HwpKit/HwpFile.swift b/Sources/HwpKit/HwpFile.swift index d66691d..8298ce9 100644 --- a/Sources/HwpKit/HwpFile.swift +++ b/Sources/HwpKit/HwpFile.swift @@ -35,6 +35,8 @@ public struct HwpFile { public enum HwpStreamName: String { case fileHeader = "FileHeader" + case docInfo = "DocInfo" case summary = "\005HwpSummaryInformation" case previewText = "PrvText" + case previewImage = "PrvImage" } diff --git a/Sources/HwpKit/Streams/HwpDocInfo.swift b/Sources/HwpKit/Streams/HwpDocInfo.swift index 4feff05..6bc77b9 100644 --- a/Sources/HwpKit/Streams/HwpDocInfo.swift +++ b/Sources/HwpKit/Streams/HwpDocInfo.swift @@ -4,17 +4,17 @@ public struct HwpDocInfo: HwpStream { let record: HwpRecord let documentProperties: HwpDocumentProperties - internal init(_ data: Data, _ report: (HwpReportable) -> Void) throws { + internal init(_ data: Data, _: (HwpReportable) -> Void) throws { record = try parseRecordTree(data: data) - guard let documentProperties = record.children.first(where: {$0.tagID == HwpDocInfoTag.DOCUMENT_PROPERTIES}) + guard let documentProperties = record.children.first(where: { $0.tagID == HwpDocInfoTag.DOCUMENT_PROPERTIES }) else { throw HwpError.recordDoesNotExist(tag: HwpDocInfoTag.DOCUMENT_PROPERTIES) } self.documentProperties = HwpDocInfo.visitDocumentPropertes(documentProperties) } - static private func visitDocumentPropertes(_ record: HwpRecord) -> HwpDocumentProperties { + private static func visitDocumentPropertes(_ record: HwpRecord) -> HwpDocumentProperties { var reader = DataReader(record.payload) let sectionSize = reader.readUInt16() return HwpDocumentProperties(sectionSize: sectionSize) diff --git a/Sources/HwpKit/Utils/DataReader.swift b/Sources/HwpKit/Utils/DataReader.swift index 10ead6f..cd60415 100644 --- a/Sources/HwpKit/Utils/DataReader.swift +++ b/Sources/HwpKit/Utils/DataReader.swift @@ -17,10 +17,10 @@ struct DataReader { } mutating func readUInt16() -> UInt16 { - return readBytes(2).uint16 + readBytes(2).uint16 } mutating func readUInt32() -> UInt32 { - return readBytes(4).uint32 + readBytes(4).uint32 } } diff --git a/Sources/HwpKit/Utils/Type.swift b/Sources/HwpKit/Utils/Type.swift index d56b3a9..3170e83 100644 --- a/Sources/HwpKit/Utils/Type.swift +++ b/Sources/HwpKit/Utils/Type.swift @@ -22,36 +22,36 @@ typealias HWPUNIT16 = Int16 // Data to [bytes] extension Data { var bytes: [UInt8] { - return [UInt8](self) + [UInt8](self) } var bits: [Bool] { - return reduce([Bool]()) { $0 + $1.toBits() } + reduce([Bool]()) { $0 + $1.toBits() } } var uint16: UInt16 { - return withUnsafeBytes { $0.load(as: UInt16.self) } + withUnsafeBytes { $0.load(as: UInt16.self) } } var uint32: UInt32 { - return withUnsafeBytes { $0.load(as: UInt32.self) } + withUnsafeBytes { $0.load(as: UInt32.self) } } var stringASCII: String? { - return String(data: self, encoding: .ascii) + String(data: self, encoding: .ascii) } } extension Array where Element == Data { func toBits() -> [Bool] { - return reduce([Bool]()) { $0 + $1.bits } + reduce([Bool]()) { $0 + $1.bits } } } // [bytes] to Data extension Array where Element == UInt8 { var data: Data { - return Data(self) + Data(self) } } diff --git a/Tests/HwpKitTests/HwpKitTests.swift b/Tests/HwpKitTests/Basic/BasicTests.swift similarity index 93% rename from Tests/HwpKitTests/HwpKitTests.swift rename to Tests/HwpKitTests/Basic/BasicTests.swift index e1f969d..99e5e13 100644 --- a/Tests/HwpKitTests/HwpKitTests.swift +++ b/Tests/HwpKitTests/Basic/BasicTests.swift @@ -1,11 +1,10 @@ @testable import HwpKit import XCTest -final class HwpKitTests: XCTestCase { +final class BasicTests: XCTestCase { func openHwp() throws -> HwpFile { let url = URL(fileURLWithPath: #file) .deletingLastPathComponent() - .appendingPathComponent("Versions") .appendingPathComponent("blank.hwp") return try HwpFile(filePath: url.path) } diff --git a/Tests/HwpKitTests/Versions/blank.hwp b/Tests/HwpKitTests/Basic/blank.hwp similarity index 100% rename from Tests/HwpKitTests/Versions/blank.hwp rename to Tests/HwpKitTests/Basic/blank.hwp diff --git a/Tests/HwpKitTests/Versions/2007.hwp b/Tests/HwpKitTests/Versions/2014VP.hwp similarity index 51% rename from Tests/HwpKitTests/Versions/2007.hwp rename to Tests/HwpKitTests/Versions/2014VP.hwp index 8e06a8e4451122eeaa5aaec37d6b3b985e62111b..641868ee285fa65c01ac17416723c9b16c19361c 100644 GIT binary patch delta 2339 zcmZ8i3p|ur8$YjM#xSmpDaD7}GT4m!y>U;m+g7WRYGP<|$!!ynaoI{p@~T)Wtx*x1 zTvivMlq3pG@@qteE*mAq(9J%twBPsp&iwx8|J=@Vp2wKyB)KNJR(g>!4A+v>knapD zX&yV&gHaGdNecLGvZov-2{H*V0}D@<)WMke1UXf@n6Sahk%^TU#_*4ng=#XOeuXG$ zU@Aa%PNxA^n@D$JcoM}$29ZIP0?^>f`3$zaVD`%I3=UY;yJdp0f6Mt+7CtT;_5Y?Q zS_;O(Cun@BAK+9P9w!%%nc@?21%bMt>jCruO8^D{qBuifBY^Roz7*JGPA2?jAe#d$ z0G0qNfHlAdU<)8(?13E!`NGe#Se4?KBvy;Rqpvjh6+=i4>`A~x^O?Z%z`VT(+W8SLiB8t+okru};g z^5iV|Rmu*y2JezwS$#v&9^-3(O0;GJO=?2Q|L*3H!UXJ^XdUuIKSEMdn8jibh+|FQA102z>|WJ}3}HfoD5dc0gu?*nrBKoc+Xq3L%@kDE{^pB7|>bIPpi0 zdh>*A`mLG#J)f>ViYZsg;ITUy0^#WXcv|AACmu>lOViI8GkJ!qot$*i{of5a2?x{v zLoXAiSN^H8JKOhj(q^OB*IienQ&Jjk2Z=`X0z&9c5syN1#ECOjOY^PFN1~UfI><8mM48EM1ni-t&`RraLRnu|ya){tWYeM{GuYzOE&nIj9zOJfi;@cVe z9O$u}`cPLqT6FS7kLzTp+RjY|^?~Lm+N{@Y@KCzuRPM3J)VK6Yl^>gDFo*PIS|*j4eGAh?t7OIyfEo@2iV2wQ6^WOaJ?{S5z zPVQK{nO#uIkxo#(v7m+HhaES6;oc?u7#JW2YXC7o#-_ZDhWd z!Eit|7RpFlzT#tV7W#{%=}FZPsW!z({OlR2AyR3I!C0Ow4Uu}&IQP)X^pCxAn9=!M zs^?JEV0%Msm_N_R>bSc?rJ|b(=ud3vBXX81Z|IMM))eGaNH&{i!IZ~fxr?GmykwNNNk^ZIhiO|w9 zKh>Q%3@x8#t^;kI>s7%`$J5Qt5xVBf%cApAhqg?wyB>A-T&s+q$h)edaNE&~X2X1$ z`Gan<-ocbfwWNxP^7^v(?L3PgSL_?+4y-+LEhMbwgjNu(QU6uu?*|?n5^2%w7D(V$;y;^N#kcO?wYeN=R;do=bVtpJeqEkGB`Sc-rkb zZ!)9rL*JT_f{yiX*RjT3E{iRSCO(8X>|auQLfcm%B6%kK__50LeY{5T?WV@AMEIf3 z%mi>2NO2Gfw%mP&szi)@oV`d>4#u(6+-O3QxRd66oUJCsXVYDO%An3vmRNSW7%ev{ z7u0J1=HaXrLO*4ac!efw$+XJ9-O=ZOdncbLT(pmLG=(ys>1+F@ZL&LGoAhv*c)`gI z=Cb>ZYuSGYij_7Tu9&@~Y z+6Kca2>R`$Bx79Qm-Y+=;tfzm>WICnb?)UtXn9>5$jQ)p21dL{#FCiZld*Oz8B+t9 zOC|gWDfYLKI3UZyYgSVkj%EEh6|)ME#fNS73~a;!B3cLm1TH#EMH9&hKjGswgwM*J zIXcu4!tXd0P1xHngkyULdaxl16|DvNCx>DG|BWvRPJs5E-4eSY*!7qY89;|ZEX@=htv&WiAgl-Hv;Um`f z3kcur<&d-A;Hp0n=LLljb_lbc?U)G8gyi2Hvj8Vq_Kj9q4u`zhU9+QgOiSFSOeSw*Na^YA%N-K>lb3KLuICnh=1QJCc5QD7 z))E*I7|BVwu*JkBLQ&C!?WTJ)dATKd*HHy8lj!$sA2aLL)RCJcd;GD+0!PwjHOiBq z?GgvSC`dZBKlkd+%*^Z^;=f$RLAOcA5kveu7R7k!8%mlg>pr`Cy-8X|jiGZ4p~;~z L?iLJ>T$J?>H`09F delta 1952 zcmZ8i4Lnp?6u)o0nK8ba7`DkY43j7{43QKoLi*6QyT&$c6SfjD#Ew)u!&YR984s0@ z(k`X!_9MF@edyDYG@@y3cH4xVwp3WFwv|1vRJ(hAzyJN8d(OG%p7-v%=PCRZ{#8q8 zm>$8ytxT9*_DKQRT8xem@--n+X~D*b3OWuL2O-jMJ~o{gp?#^JNC6v2uE9bBj0Oq@ zFoG=aSu~oz&hm!IFocM|=u;!-fc?Y{Gl6GK=%n8n^w|Ib zzy;t65CYr)?f^2z1K6`>&}0&(matATpW>LB7-WSwgu?S0gHH@hKGg`bYqCbA?Ri&8=3l+6wT9ij0CQjzA|cUkZX5A- z738r3SOPqdBeI5y$4b-twACb3aj8a0g9@!c=C8j zUE@t25|KJ(5uw8Q@_~Yec(eDJ8S+!yLx&VyxQ!#fdorKJINxK+8{DApP@%Ud+lC+e z^$!j=!!y%;(29mKfqwnPY_&ZztD@VtBsZ7F*c~LOk!5eMza-U!MtxKNbII7cxU)5t z^+sL=J0Dnyo26S#t=Y%f8wbUC?iXinSGzq-IOP*)TX|fQDtCEQnRk6p5bJjJPI_IA zSHDh)hA-vVnzQxhoG8t*h|#m$!@2UzYBciT$I}PSGk9pG#%C^HL0Iur-VIg2>Qi+Y*SfB=K_8H*x*O` z=fv@9s-MlK)GdVHNqw!95fWsX5^+sAzzl1oT7|LhumVNBndJ-1BAseRdRUb|*0$ak zes|Pv*68DarfJ#ZN}(I~(~h(|MmfhcPtN69BvI$Ui>)Kt@sOI!xHl#*yuYz`awTq< zLSMD!=$To$?R#X7wJupZ{|GHHuy*zJ@v8?WsFbcI{l>{H?>hj2V|&jkqq6&TSHm|ZT1@S)Hz{*;Bk7{>0|ZM{9$AUpbGYnY~xSe)}Wu8ptA^kEQEj=-2gLDY%c zgK(mnbAu4zIH8zEm4`C@mn#|L(vVH186uTP6dV(%pR>d7#EKmkpAEQ*t5$SH*%kfV z+O;(8V6o*cy@GW5dow@rdR#bAE)1ldkpJnjpy<}$#V^Zg{L>xn_TlPpht{W7Op4il z%b8u-rfNCg%$_kwt9>LMdeCjg>vRusVB16&o-bbhSLZ5s3Nj%mTyMgc>xab=MO+WL z5U!agiiArmL~DVa(R#Ri>);zGEaDv+ztmlRrj?CKoJ2Ct-mF`O(C6~45h7ck4(ubd z-`SaDmwGGD<;?4BWD4_QXtHGUnhGHMa1=lVuf`4hi)T8EWObmBqVrZV%phbcgcnn2 zNMrw>7EC1Y*mBcZB3Tl|e>OIlBnA$hSSwwlWMqKtO}k!6A4=+_Gtj$yY}6aec}UI` zutr5ylC2vlfGJxpsMBvcOaI%Ks+LLc3p{Om0LLDs?)L{QJ7XS94O2#ttO! z2Dr7ck*=MM$i@Gb(s{2pByE|)68fUg#WCHt8qP4bs%8Ihj3asL?fpWu HwpFile { + let url = URL(fileURLWithPath: #file) + .deletingLastPathComponent() + .appendingPathComponent("\(name).hwp") + return try HwpFile(filePath: url.path) + } + + func test2014VP() throws { + let hwp = try openHwp("2014VP") + XCTAssertEqual(hwp.fileHeader.version.major, 5) + XCTAssertEqual(hwp.fileHeader.version.minor, 0) + XCTAssertEqual(hwp.fileHeader.version.build, 5) + XCTAssertEqual(hwp.fileHeader.version.revision, 0) + } + + static var allTests = [ + ("test2014VP", test2014VP), + ] +} diff --git a/Tests/HwpKitTests/XCTestManifests.swift b/Tests/HwpKitTests/XCTestManifests.swift index b41c599..b94520c 100644 --- a/Tests/HwpKitTests/XCTestManifests.swift +++ b/Tests/HwpKitTests/XCTestManifests.swift @@ -2,8 +2,10 @@ import XCTest #if !canImport(ObjectiveC) public func allTests() -> [XCTestCaseEntry] { - return [ - testCase(HwpKitTests.allTests), + [ + testCase(BasicTests.allTests), + testCase(VersionTests.allTests), + testCase(HwpUtilTests.allTests), ] } #endif From f1df919ec90be66b47a7412ef6032435cbedf969 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Tue, 22 Sep 2020 16:43:17 +0900 Subject: [PATCH 10/19] parse document properties --- .../HwpCaratLocation.swift | 14 +++++++++++++ .../HwpDocumentProperties.swift | 14 +++++++++++++ .../HwpStartingIndex.swift | 20 +++++++++++++++++++ .../HwpKit/Models/HwpDocumentProperties.swift | 5 ----- ...LineSegment.swift => HwpLineSegment.swift} | 0 Sources/HwpKit/Streams/HwpDocInfo.swift | 10 ++++------ 6 files changed, 52 insertions(+), 11 deletions(-) create mode 100644 Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift create mode 100644 Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift create mode 100644 Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift delete mode 100644 Sources/HwpKit/Models/HwpDocumentProperties.swift rename Sources/HwpKit/Models/{LineSegment.swift => HwpLineSegment.swift} (100%) diff --git a/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift b/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift new file mode 100644 index 0000000..2e5e836 --- /dev/null +++ b/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift @@ -0,0 +1,14 @@ +import Foundation + +struct HwpCaratLocation { + let listId:UInt32 + let paragraphId:UInt32 + let charIndex:UInt32 + + init(_ data: Data) { + var reader = DataReader(data) + listId = reader.readUInt32() + paragraphId = reader.readUInt32() + charIndex = reader.readUInt32() + } +} diff --git a/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift b/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift new file mode 100644 index 0000000..2fe05c7 --- /dev/null +++ b/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift @@ -0,0 +1,14 @@ +import Foundation + +public struct HwpDocumentProperties { + let sectionSize: UInt16 + let startingIndex: HwpStartingIndex + let caratLocation: HwpCaratLocation + + init(_ data: Data) { + var reader = DataReader(data) + sectionSize = reader.readUInt16() + startingIndex = HwpStartingIndex(reader.readBytes(12)) + caratLocation = HwpCaratLocation(reader.readBytes(12)) + } +} diff --git a/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift b/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift new file mode 100644 index 0000000..9937f95 --- /dev/null +++ b/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift @@ -0,0 +1,20 @@ +import Foundation + +struct HwpStartingIndex { + let page:UInt16 + let footnote: UInt16 + let endnote:UInt16 + let picture: UInt16 + let table: UInt16 + let equation: UInt16 + + init(_ data:Data) { + var reader = DataReader(data) + page = reader.readUInt16() + footnote = reader.readUInt16() + endnote = reader.readUInt16() + picture = reader.readUInt16() + table = reader.readUInt16() + equation = reader.readUInt16() + } +} diff --git a/Sources/HwpKit/Models/HwpDocumentProperties.swift b/Sources/HwpKit/Models/HwpDocumentProperties.swift deleted file mode 100644 index d56f6c9..0000000 --- a/Sources/HwpKit/Models/HwpDocumentProperties.swift +++ /dev/null @@ -1,5 +0,0 @@ -import Foundation - -struct HwpDocumentProperties { - let sectionSize: UInt16 -} diff --git a/Sources/HwpKit/Models/LineSegment.swift b/Sources/HwpKit/Models/HwpLineSegment.swift similarity index 100% rename from Sources/HwpKit/Models/LineSegment.swift rename to Sources/HwpKit/Models/HwpLineSegment.swift diff --git a/Sources/HwpKit/Streams/HwpDocInfo.swift b/Sources/HwpKit/Streams/HwpDocInfo.swift index 6bc77b9..bf24992 100644 --- a/Sources/HwpKit/Streams/HwpDocInfo.swift +++ b/Sources/HwpKit/Streams/HwpDocInfo.swift @@ -3,20 +3,18 @@ import Foundation public struct HwpDocInfo: HwpStream { let record: HwpRecord let documentProperties: HwpDocumentProperties - + internal init(_ data: Data, _: (HwpReportable) -> Void) throws { record = try parseRecordTree(data: data) - + guard let documentProperties = record.children.first(where: { $0.tagID == HwpDocInfoTag.DOCUMENT_PROPERTIES }) else { throw HwpError.recordDoesNotExist(tag: HwpDocInfoTag.DOCUMENT_PROPERTIES) } self.documentProperties = HwpDocInfo.visitDocumentPropertes(documentProperties) } - + private static func visitDocumentPropertes(_ record: HwpRecord) -> HwpDocumentProperties { - var reader = DataReader(record.payload) - let sectionSize = reader.readUInt16() - return HwpDocumentProperties(sectionSize: sectionSize) + return HwpDocumentProperties(record.payload) } } From 992689e34d44acddf98930a76571e0c2ede4b30a Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Sat, 26 Sep 2020 10:38:34 +0900 Subject: [PATCH 11/19] working with parsing record --- .../Utils/{HwpStream.swift => HwpData.swift} | 2 +- .../{BasicTests.swift => BlankTests.swift} | 2 +- Tests/HwpKitTests/Basic/ContentTests.swift | 8 ++++++++ Tests/HwpKitTests/Basic/noori.hwp | Bin 0 -> 238080 bytes 4 files changed, 10 insertions(+), 2 deletions(-) rename Sources/HwpKit/Utils/{HwpStream.swift => HwpData.swift} (80%) rename Tests/HwpKitTests/Basic/{BasicTests.swift => BlankTests.swift} (97%) create mode 100644 Tests/HwpKitTests/Basic/ContentTests.swift create mode 100644 Tests/HwpKitTests/Basic/noori.hwp diff --git a/Sources/HwpKit/Utils/HwpStream.swift b/Sources/HwpKit/Utils/HwpData.swift similarity index 80% rename from Sources/HwpKit/Utils/HwpStream.swift rename to Sources/HwpKit/Utils/HwpData.swift index a8625bf..dc94aeb 100644 --- a/Sources/HwpKit/Utils/HwpStream.swift +++ b/Sources/HwpKit/Utils/HwpData.swift @@ -1,5 +1,5 @@ import Foundation -protocol HwpStream { +protocol HwpData { init(_ data: Data, _ report: (HwpReportable) -> Void) throws } diff --git a/Tests/HwpKitTests/Basic/BasicTests.swift b/Tests/HwpKitTests/Basic/BlankTests.swift similarity index 97% rename from Tests/HwpKitTests/Basic/BasicTests.swift rename to Tests/HwpKitTests/Basic/BlankTests.swift index 99e5e13..6c8f685 100644 --- a/Tests/HwpKitTests/Basic/BasicTests.swift +++ b/Tests/HwpKitTests/Basic/BlankTests.swift @@ -1,7 +1,7 @@ @testable import HwpKit import XCTest -final class BasicTests: XCTestCase { +final class BlankTests: XCTestCase { func openHwp() throws -> HwpFile { let url = URL(fileURLWithPath: #file) .deletingLastPathComponent() diff --git a/Tests/HwpKitTests/Basic/ContentTests.swift b/Tests/HwpKitTests/Basic/ContentTests.swift new file mode 100644 index 0000000..0d8316e --- /dev/null +++ b/Tests/HwpKitTests/Basic/ContentTests.swift @@ -0,0 +1,8 @@ +// +// File.swift +// +// +// Created by Seungbin Oh on 2020/09/25. +// + +import Foundation diff --git a/Tests/HwpKitTests/Basic/noori.hwp b/Tests/HwpKitTests/Basic/noori.hwp new file mode 100644 index 0000000000000000000000000000000000000000..cb86d4f935cb2a70264114533b9ac2358d2c4b4e GIT binary patch literal 238080 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 z zRVuV76&sZ$LYPu*t+<_cc6vko&WA>O76xGsXG^iwHm0FL4TaHB$?3kVBLaxK6OEg- z^?KxyWMl8)fBO03^4nM;`qq%^ zb+IXgllc#XypK7TbS^7f=t@1l`=v!M3cK*R1w3-=bib&^3Yz)(_ z9FgO})c4zL8TmDd0Og^M>t|KB`r6Z>S35Ddipw+AoUvN2yw*l1xbCm7jBi<{;?W1Kzv+3DXR@c2cdAsjnYrTG=~!1JuCH&y zHo>B)PCdYtq-;UiFpaknSUb3ND?xywKwoh&=-PsY9u+u4n#4=2=`)K3q1!j@;YJ*$4)E8w_Cvht4p;c*$u5~&6c?q2VO zvev!<;dO`DNC&%5rw6^mO9?3rnc97!QP?A1!qUWwCK5#@KbcR9aV2FTMZ^>j!he97^Vwx33-AQ`0_M5(&DJX79d^ zlXOHi)5w|PZj;M$wX(cKi$H5<_K?ufm0NwBqpVtJ{zb0kJS~PGE*pJz?qu2mnt)a z_VO^a@VD~A66HfvZUN^2b)rrf(Mbyi$^VW)@^3#9!p3na}xF z2vfeKiy)P~+ktC2NtjM_Xft*$C^ zrhJG?;T-qxv0h=Pebo7ZWZue|rENIZ_)Ne`*!1YDRgX=Ws`8Ld@t32FVSJNb4H`?f zM<3}eC?iqFZ#xH3wK1!VsI})<8%*T(whpj(WSZ>BY`)RB+ptctYx1?}y7%I2Ne`{@ z^FeySa+cnVZyQ=wnUR7i0jmc&btT~hmE5bmWI;=PDbj~yXa*5CGRmmlVpwHGeIyo0 zbuW4?gI)1TKS9>4|Gpc4(Hg(K6IH_uF%Qk#LV=_L=;iyXA6Q==F%Sw_?JF%+W!Ov> znv=W^Nad9Ik|A%qHo!J2dRi<+byPy@iZ#1AESw{MD}7iiHT? z$+s_xpjb;L+#YUVI+Rx6$Z@VrX)N2#SHH2PtSiaQN2{<)>i61^{@RBJUSoxFWvUwG zFBbNuTQH>&UVN5n`L>SjDCHCPMmL`OG(N&WR`e!)%z9P9mT6o)^Lp(5@rO)OtV&

RMz|C8>7GnJCVHvK8l>HN=5 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

S` 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

  • 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 bK@FnJK(z8#xR4zDTx#C`vtOwFEP-v49 literal 0 HcmV?d00001 From 1c19b02ed682a97b5d4af12831bd14d886aa9787 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Sat, 26 Sep 2020 10:38:49 +0900 Subject: [PATCH 12/19] working with parsing record --- Package.swift | 3 +- README.md | 16 ++++++++-- Sources/HwpKit/HwpFile.swift | 27 ++++++++-------- .../HwpCaratLocation.swift | 4 +-- .../HwpDocumentProperties.swift | 8 ++--- .../HwpStartingIndex.swift | 4 +-- Sources/HwpKit/Models/HwpVersion.swift | 10 +++++- Sources/HwpKit/Report/HwpError.swift | 7 ----- Sources/HwpKit/Streams/HwpDocInfo.swift | 10 +++--- Sources/HwpKit/Streams/HwpFileHeader.swift | 20 ++++++------ Sources/HwpKit/Streams/HwpPreviewImage.swift | 2 +- Sources/HwpKit/Streams/PreviewText.swift | 2 +- Sources/HwpKit/Utils/DataReader.swift | 22 ++++++++----- Sources/HwpKit/Utils/HwpRecord.swift | 7 ++--- Sources/HwpKit/Utils/Type.swift | 31 +++++++++++++------ Tests/HwpKitTests/Basic/ContentTests.swift | 26 +++++++++++----- 16 files changed, 120 insertions(+), 79 deletions(-) diff --git a/Package.swift b/Package.swift index 1883970..8f1a59e 100644 --- a/Package.swift +++ b/Package.swift @@ -17,7 +17,7 @@ let package = Package( // .package(url: /* package url */, from: "1.0.0"), .package( url: "https://github.com/CoreOffice/OLEKit.git", - .revision("6a809b91a9a524594c02d990dbce157d7e9cb447") + .revision("14c4e245519cfd9b822f7e365734b6e08e092503") ), ], targets: [ @@ -32,6 +32,7 @@ let package = Package( dependencies: ["HwpKit"], resources: [ .copy("Basic/blank.hwp"), + .copy("Basic/noori.hwp"), .copy("Versions/2014VP.hwp"), ] ), diff --git a/README.md b/README.md index 267f67c..5c483aa 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,21 @@ # HwpKit -![Test-macOS](https://github.com/sboh1214/HwpKit/workflows/Test-macOS/badge.svg) -![Test-Ubuntu](https://github.com/sboh1214/HwpKit/workflows/Test-Ubuntu/badge.svg) [![codecov](https://codecov.io/gh/sboh1214/HwpKit/branch/master/graph/badge.svg)](https://codecov.io/gh/sboh1214/HwpKit) -[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsboh1214%2FHwpKit.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsboh1214%2FHwpKit?ref=badge_shield) HWP file reader. +## Install + +### Swift Package Manager + +## CI/CD + +![Test-macOS](https://github.com/sboh1214/HwpKit/workflows/Test-macOS/badge.svg) +![Test-Ubuntu](https://github.com/sboh1214/HwpKit/workflows/Test-Ubuntu/badge.svg) + ## License + +![GitHub](https://img.shields.io/github/license/sboh1214/HwpKit) +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsboh1214%2FHwpKit.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsboh1214%2FHwpKit?ref=badge_shield) + [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsboh1214%2FHwpKit.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsboh1214%2FHwpKit?ref=badge_large) diff --git a/Sources/HwpKit/HwpFile.swift b/Sources/HwpKit/HwpFile.swift index 8298ce9..cac7029 100644 --- a/Sources/HwpKit/HwpFile.swift +++ b/Sources/HwpKit/HwpFile.swift @@ -2,9 +2,9 @@ import OLEKit public struct HwpFile { let fileHeader: HwpFileHeader + let docInfo: HwpDocInfo // let previewText : HKPreviewText - var directories: [DirectoryEntry] = [] - + init(filePath: String, report: (HwpReportable) -> Void = { _ in }) throws { let ole: OLEFile do { @@ -12,18 +12,19 @@ public struct HwpFile { } catch { throw HwpError.invalidFilePath(path: filePath) } - - do { - guard let fileHeaderStream = ole.root.children.first(where: { $0.name == HwpStreamName.fileHeader.rawValue }) else { - throw HwpError.streamDoesNotExist(name: HwpStreamName.fileHeader) - } - let fileHeaderReader = try ole.stream(fileHeaderStream) - fileHeader = try HwpFileHeader(fileHeaderReader.readDataToEnd(), report) - - } catch { - throw HwpError.invalidFilePath(path: filePath) + + guard let fileHeaderStream = ole.root.children.first(where: { $0.name == HwpStreamName.fileHeader.rawValue }) else { + throw HwpError.streamDoesNotExist(name: HwpStreamName.fileHeader) } - + let fileHeaderReader = try ole.stream(fileHeaderStream) + fileHeader = try HwpFileHeader(fileHeaderReader.readDataToEnd(), report) + + guard let docInfoStream = ole.root.children.first(where: {$0.name == HwpStreamName.docInfo.rawValue}) else { + throw HwpError.streamDoesNotExist(name: HwpStreamName.docInfo) + } + let docInfoReader = try ole.stream(docInfoStream) + docInfo = try HwpDocInfo(docInfoReader.readDataToEnd(), report) + // do { // guard let previewTextStream = ole.root.children.first(where: {$0.name == HKStreamName.PreviewText.rawValue}) else { // throw HKError.StreamDoesNotExist(name: HKStreamName.PreviewText) diff --git a/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift b/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift index 2e5e836..cf55f48 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift @@ -1,11 +1,11 @@ import Foundation -struct HwpCaratLocation { +struct HwpCaratLocation: HwpData { let listId:UInt32 let paragraphId:UInt32 let charIndex:UInt32 - init(_ data: Data) { + init(_ data: Data, _ report: (HwpReportable) -> Void) { var reader = DataReader(data) listId = reader.readUInt32() paragraphId = reader.readUInt32() diff --git a/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift b/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift index 2fe05c7..e0b5f8e 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift @@ -1,14 +1,14 @@ import Foundation -public struct HwpDocumentProperties { +public struct HwpDocumentProperties: HwpData { let sectionSize: UInt16 let startingIndex: HwpStartingIndex let caratLocation: HwpCaratLocation - init(_ data: Data) { + init(_ data: Data, _ report: (HwpReportable) -> Void) { var reader = DataReader(data) sectionSize = reader.readUInt16() - startingIndex = HwpStartingIndex(reader.readBytes(12)) - caratLocation = HwpCaratLocation(reader.readBytes(12)) + startingIndex = HwpStartingIndex(reader.readBytes(12), report) + caratLocation = HwpCaratLocation(reader.readBytes(12), report) } } diff --git a/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift b/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift index 9937f95..3acbdaa 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift @@ -1,6 +1,6 @@ import Foundation -struct HwpStartingIndex { +struct HwpStartingIndex: HwpData { let page:UInt16 let footnote: UInt16 let endnote:UInt16 @@ -8,7 +8,7 @@ struct HwpStartingIndex { let table: UInt16 let equation: UInt16 - init(_ data:Data) { + init(_ data:Data, _ report: (HwpReportable)->Void) { var reader = DataReader(data) page = reader.readUInt16() footnote = reader.readUInt16() diff --git a/Sources/HwpKit/Models/HwpVersion.swift b/Sources/HwpKit/Models/HwpVersion.swift index bb034fe..3b5ba35 100644 --- a/Sources/HwpKit/Models/HwpVersion.swift +++ b/Sources/HwpKit/Models/HwpVersion.swift @@ -12,9 +12,17 @@ import Foundation - rr: Record에 정보들이 추가된 것을 나타냄. 숫자가 달라 도 구 버전과 호환 가능. */ -public struct HwpVersion { +public struct HwpVersion: HwpData { public let major: UInt8 public let minor: UInt8 public let build: UInt8 public let revision: UInt8 + + init(_ data: Data, _ report: (HwpReportable) -> Void) { + var reader = DataReader(data) + revision = reader.readUInt8() + build = reader.readUInt8() + minor = reader.readUInt8() + major = reader.readUInt8() + } } diff --git a/Sources/HwpKit/Report/HwpError.swift b/Sources/HwpKit/Report/HwpError.swift index cef0af0..d84ab25 100644 --- a/Sources/HwpKit/Report/HwpError.swift +++ b/Sources/HwpKit/Report/HwpError.swift @@ -5,7 +5,6 @@ public enum HwpError: Error { case invalidFilePath(path: String) case streamDoesNotExist(name: HwpStreamName) case invalidDataForString(data: Data, name: String) - case bigRecordNotSuppoted(tagId: UInt32, level: UInt32) case recordDoesNotExist(tag: UInt32) } @@ -25,12 +24,6 @@ extension HwpError: CustomStringConvertible { data: '\(data)' name: '\(name)' """ - case let .bigRecordNotSuppoted(tagId, level): - return - """ - Currently big record is not supported to parse - tagId: '\(tagId)', level: '\(level)' - """ case let .recordDoesNotExist(tag): return "Record '\(tag)' does not exist." } diff --git a/Sources/HwpKit/Streams/HwpDocInfo.swift b/Sources/HwpKit/Streams/HwpDocInfo.swift index bf24992..18c2a28 100644 --- a/Sources/HwpKit/Streams/HwpDocInfo.swift +++ b/Sources/HwpKit/Streams/HwpDocInfo.swift @@ -1,20 +1,20 @@ import Foundation -public struct HwpDocInfo: HwpStream { +public struct HwpDocInfo: HwpData { let record: HwpRecord let documentProperties: HwpDocumentProperties - internal init(_ data: Data, _: (HwpReportable) -> Void) throws { + init(_ data: Data, _ report: (HwpReportable) -> Void) throws { record = try parseRecordTree(data: data) guard let documentProperties = record.children.first(where: { $0.tagID == HwpDocInfoTag.DOCUMENT_PROPERTIES }) else { throw HwpError.recordDoesNotExist(tag: HwpDocInfoTag.DOCUMENT_PROPERTIES) } - self.documentProperties = HwpDocInfo.visitDocumentPropertes(documentProperties) + self.documentProperties = HwpDocInfo.visitDocumentPropertes(documentProperties, report) } - private static func visitDocumentPropertes(_ record: HwpRecord) -> HwpDocumentProperties { - return HwpDocumentProperties(record.payload) + private static func visitDocumentPropertes(_ record: HwpRecord, _ report: (HwpReportable) -> Void) -> HwpDocumentProperties { + return HwpDocumentProperties(record.payload, report) } } diff --git a/Sources/HwpKit/Streams/HwpFileHeader.swift b/Sources/HwpKit/Streams/HwpFileHeader.swift index e655033..5d0037c 100644 --- a/Sources/HwpKit/Streams/HwpFileHeader.swift +++ b/Sources/HwpKit/Streams/HwpFileHeader.swift @@ -4,7 +4,7 @@ import Foundation 파일 인식 정보 한글의 문서 파일이라는 것을 나타내기 위해 ‘파일 인식 정보’가 저장된다. */ -public struct HwpFileHeader: HwpStream { +public struct HwpFileHeader: HwpData { /** signature. 문서 파일은 "HWP Document File" */ public let signature: String public let version: HwpVersion @@ -29,7 +29,9 @@ public struct HwpFileHeader: HwpStream { let koreaOpenLicense: UInt8 // 공공누리 Korea Open Government License internal init(_ data: Data, _ report: (HwpReportable) -> Void) throws { - guard let signature = data[0 ..< 32].stringASCII else { + var reader = DataReader(data) + + guard let signature = reader.readBytes(32).stringASCII else { throw HwpError.invalidDataForString(data: data[0 ..< 32], name: "signature") } self.signature = signature @@ -37,20 +39,16 @@ public struct HwpFileHeader: HwpStream { report(HwpWarning.invalidFileHeaderSignature(signature: signature)) } - let revision: UInt8 = data[32] - let build: UInt8 = data[33] - let minor: UInt8 = data[34] - let major: UInt8 = data[35] - version = HwpVersion(major: major, minor: minor, build: build, revision: revision) + version = HwpVersion(reader.readBytes(4), report) - let bits1 = data[36 ..< 40].bits + let bits1 = reader.readBytes(4).bits isCompressed = bits1[0] isEncrypted = bits1[1] - let bits2 = data[40 ..< 44].bits + let bits2 = reader.readBytes(4).bits isHavekoreaOpenLicense = bits2[0] - encryptVersion = data[44 ..< 48].uint32 - koreaOpenLicense = UInt8(data[48]) + encryptVersion = reader.readUInt32() + koreaOpenLicense = reader.readUInt8() } } diff --git a/Sources/HwpKit/Streams/HwpPreviewImage.swift b/Sources/HwpKit/Streams/HwpPreviewImage.swift index 4205dbe..32d7d73 100644 --- a/Sources/HwpKit/Streams/HwpPreviewImage.swift +++ b/Sources/HwpKit/Streams/HwpPreviewImage.swift @@ -1,6 +1,6 @@ import Foundation -struct HwpPreviewImage: HwpStream { +struct HwpPreviewImage: HwpData { let image: Data init(_ data: Data, _: (HwpReportable) -> Void) throws { diff --git a/Sources/HwpKit/Streams/PreviewText.swift b/Sources/HwpKit/Streams/PreviewText.swift index eaad5b4..f8e2dd5 100644 --- a/Sources/HwpKit/Streams/PreviewText.swift +++ b/Sources/HwpKit/Streams/PreviewText.swift @@ -1,6 +1,6 @@ import Foundation -struct HwpPreviewText: HwpStream { +struct HwpPreviewText: HwpData { let text: String init(_ data: Data, _: (HwpReportable) -> Void) throws { diff --git a/Sources/HwpKit/Utils/DataReader.swift b/Sources/HwpKit/Utils/DataReader.swift index cd60415..4c2dfe7 100644 --- a/Sources/HwpKit/Utils/DataReader.swift +++ b/Sources/HwpKit/Utils/DataReader.swift @@ -3,24 +3,30 @@ import Foundation struct DataReader { let data: Data var offset: Int = 0 - + init(_ data: Data) { self.data = data } - + mutating func readBytes(_ length: Int) -> Data { - precondition(offset + length < data.count) + precondition(offset + length < data.count + 1) defer { offset += length } - return data[offset ..< offset + length] + // The indices of a Data value (or of collections in general) are not necessarily zero-based. A slice shares the indices with the originating data. + // https://stackoverflow.com/questions/54698947/swift-data-subdata-fails-with-exc-bad-instruction-code-exc-i386-invop-subcode + return data[(offset+data.startIndex) ..< (offset+data.startIndex) + length] } - + + mutating func readUInt8() -> UInt8 { + return readBytes(1).uint8 + } + mutating func readUInt16() -> UInt16 { - readBytes(2).uint16 + return readBytes(2).uint16 } - + mutating func readUInt32() -> UInt32 { - readBytes(4).uint32 + return readBytes(4).uint32 } } diff --git a/Sources/HwpKit/Utils/HwpRecord.swift b/Sources/HwpKit/Utils/HwpRecord.swift index f6d0842..191b529 100644 --- a/Sources/HwpKit/Utils/HwpRecord.swift +++ b/Sources/HwpKit/Utils/HwpRecord.swift @@ -16,17 +16,16 @@ func parseRecordTree(data: Data) throws -> HwpRecord { let tagId = value & 0x3FF let level = (value >> 10) & 0x3FF - let size = (value >> 20) & 0xFFF + var size = (value >> 20) & 0xFFF if size == 0xFFF { - throw HwpError.bigRecordNotSuppoted(tagId: tagId, level: level) + size = reader.readUInt32() } var parent = root let payload = reader.readBytes(Int(size)) for _ in 0 ..< level { - // parent = parent.children.slice(-1).pop()! - parent = parent.children.remove(at: 0) + parent = parent.children[-1] } let child = HwpRecord(payload: payload, tagID: tagId, size: size, parentTagID: parent.tagID) parent.children.append(child) diff --git a/Sources/HwpKit/Utils/Type.swift b/Sources/HwpKit/Utils/Type.swift index 3170e83..5eb915a 100644 --- a/Sources/HwpKit/Utils/Type.swift +++ b/Sources/HwpKit/Utils/Type.swift @@ -1,4 +1,5 @@ import Foundation +import OLEKit /** 부호 없는 한 바이트(0~255) */ typealias BYTE = UInt8 @@ -24,19 +25,31 @@ extension Data { var bytes: [UInt8] { [UInt8](self) } - + var bits: [Bool] { reduce([Bool]()) { $0 + $1.toBits() } } - + + var uint8: UInt8 { + withUnsafeBytes {$0.load(as: UInt8.self)} + } + var uint16: UInt16 { withUnsafeBytes { $0.load(as: UInt16.self) } } - + +// var uint32: UInt32 { +// withUnsafeBytes {$0.load(as: UInt32.self)} +// } + var uint32: UInt32 { - withUnsafeBytes { $0.load(as: UInt32.self) } + let start = self.startIndex + return (UInt32(self[start + 3]) << 24) + + (UInt32(self[start + 2]) << 16) + + (UInt32(self[start + 1]) << 8) + + UInt32(self[start]) } - + var stringASCII: String? { String(data: self, encoding: .ascii) } @@ -64,10 +77,10 @@ extension UInt8 { if currentBit != 0 { bits[i] = true } - + byte >>= 1 } - + return bits } } @@ -81,10 +94,10 @@ extension UInt32 { if currentBit != 0 { bits[i] = true } - + byte >>= 1 } - + return bits } } diff --git a/Tests/HwpKitTests/Basic/ContentTests.swift b/Tests/HwpKitTests/Basic/ContentTests.swift index 0d8316e..c7f5b6f 100644 --- a/Tests/HwpKitTests/Basic/ContentTests.swift +++ b/Tests/HwpKitTests/Basic/ContentTests.swift @@ -1,8 +1,20 @@ -// -// File.swift -// -// -// Created by Seungbin Oh on 2020/09/25. -// +@testable import HwpKit +import XCTest -import Foundation +final class ContentTests: XCTestCase { + func openHwp() throws -> HwpFile { + let url = URL(fileURLWithPath: #file) + .deletingLastPathComponent() + .appendingPathComponent("noori.hwp") + return try HwpFile(filePath: url.path) + } + + func testSection() throws { + let hwp = try openHwp() + XCTAssertEqual(hwp.docInfo.documentProperties.sectionSize, 1) + } + + static var allTests = [ + ("testSection", testSection), + ] +} From 6b05ac2c44de5b298a68f967a2665611a65c2995 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Sun, 27 Sep 2020 13:09:46 +0900 Subject: [PATCH 13/19] remove HwpReportable and HwpWarning --- .../xcshareddata/xcschemes/HwpKit.xcscheme | 2 +- Package.swift | 8 ++--- Sources/HwpKit/{Report => }/HwpError.swift | 9 +++-- Sources/HwpKit/HwpFile.swift | 33 ++++++++++--------- .../HwpCaratLocation.swift | 10 +++--- .../HwpDocumentProperties.swift | 8 ++--- .../HwpStartingIndex.swift | 8 ++--- Sources/HwpKit/Models/HwpVersion.swift | 4 +-- Sources/HwpKit/Report/HwpReportable.swift | 3 -- Sources/HwpKit/Report/HwpWarning.swift | 17 ---------- Sources/HwpKit/Streams/HwpDocInfo.swift | 15 +++++---- Sources/HwpKit/Streams/HwpFileHeader.swift | 8 ++--- Sources/HwpKit/Streams/HwpPreviewImage.swift | 2 +- ...PreviewText.swift => HwpPreviewText.swift} | 2 +- Sources/HwpKit/Tags/HwpTag.swift | 2 ++ Sources/HwpKit/Utils/DataReader.swift | 10 +++--- Sources/HwpKit/Utils/HwpData.swift | 2 +- Sources/HwpKit/Utils/HwpRecord.swift | 8 ++--- Sources/HwpKit/Utils/Type.swift | 20 +++++------ Tests/HwpKitTests/Basic/BlankTests.swift | 2 +- Tests/HwpKitTests/Basic/ContentTests.swift | 4 +-- Tests/HwpKitTests/HwpUtilTests.swift | 2 +- Tests/HwpKitTests/Versions/VersionTests.swift | 2 +- Tests/HwpKitTests/XCTestManifests.swift | 2 +- 24 files changed, 85 insertions(+), 98 deletions(-) rename Sources/HwpKit/{Report => }/HwpError.swift (72%) delete mode 100644 Sources/HwpKit/Report/HwpReportable.swift delete mode 100644 Sources/HwpKit/Report/HwpWarning.swift rename Sources/HwpKit/Streams/{PreviewText.swift => HwpPreviewText.swift} (82%) diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/HwpKit.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/HwpKit.xcscheme index df90497..24f73ba 100644 --- a/.swiftpm/xcode/xcshareddata/xcschemes/HwpKit.xcscheme +++ b/.swiftpm/xcode/xcshareddata/xcschemes/HwpKit.xcscheme @@ -10,7 +10,7 @@ ActionType = "Xcode.IDEStandardExecutionActionsCore.ExecutionActionType.ShellScriptAction"> + scriptText = "# Type a script or drag a script file from your workspace to insert its path. if which swiftlint >/dev/null; then say "Pre build scripts running." exec > "${PROJECT_DIR}/prebuild.log" 2>&1 echo "Starting build scheme Pre-actions" "${PROJECT_DIR}/Build-Phases/That_pre-action_script.sh" echo `swiftlint autocorrect` echo `swiftlint` else echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint" fi "> diff --git a/Package.swift b/Package.swift index 8f1a59e..d0b0dea 100644 --- a/Package.swift +++ b/Package.swift @@ -10,7 +10,7 @@ let package = Package( .library( name: "HwpKit", targets: ["HwpKit"] - ), + ) ], dependencies: [ // Dependencies declare other packages that this package depends on. @@ -18,7 +18,7 @@ let package = Package( .package( url: "https://github.com/CoreOffice/OLEKit.git", .revision("14c4e245519cfd9b822f7e365734b6e08e092503") - ), + ) ], targets: [ // Targets are the basic building blocks of a package. A target can define a module or a test suite. @@ -33,8 +33,8 @@ let package = Package( resources: [ .copy("Basic/blank.hwp"), .copy("Basic/noori.hwp"), - .copy("Versions/2014VP.hwp"), + .copy("Versions/2014VP.hwp") ] - ), + ) ] ) diff --git a/Sources/HwpKit/Report/HwpError.swift b/Sources/HwpKit/HwpError.swift similarity index 72% rename from Sources/HwpKit/Report/HwpError.swift rename to Sources/HwpKit/HwpError.swift index d84ab25..0b472f0 100644 --- a/Sources/HwpKit/Report/HwpError.swift +++ b/Sources/HwpKit/HwpError.swift @@ -1,18 +1,17 @@ import Foundation public enum HwpError: Error { - case invalidReport(report: HwpReportable) case invalidFilePath(path: String) case streamDoesNotExist(name: HwpStreamName) case invalidDataForString(data: Data, name: String) case recordDoesNotExist(tag: UInt32) + case invalidFileHeaderSignature(signature: String) + case unidentifiedTag(tagId: UInt32) } extension HwpError: CustomStringConvertible { public var description: String { switch self { - case let .invalidReport(report): - return "Invalid HwpReportable '\(report)'" case let .invalidFilePath(path): return "Invalid File Path '\(path)'" case let .streamDoesNotExist(name): @@ -26,6 +25,10 @@ extension HwpError: CustomStringConvertible { """ case let .recordDoesNotExist(tag): return "Record '\(tag)' does not exist." + case let .invalidFileHeaderSignature(signature): + return "Invalid signature in FileHeader stream : get'\(signature)'" + case let .unidentifiedTag(tagId): + return "Cannot Read HwpRecord Tag : '\(tagId)'" } } } diff --git a/Sources/HwpKit/HwpFile.swift b/Sources/HwpKit/HwpFile.swift index cac7029..1766c03 100644 --- a/Sources/HwpKit/HwpFile.swift +++ b/Sources/HwpKit/HwpFile.swift @@ -3,34 +3,35 @@ import OLEKit public struct HwpFile { let fileHeader: HwpFileHeader let docInfo: HwpDocInfo - // let previewText : HKPreviewText - - init(filePath: String, report: (HwpReportable) -> Void = { _ in }) throws { + let previewText: HwpPreviewText + + init(filePath: String) throws { let ole: OLEFile do { ole = try OLEFile(filePath) } catch { throw HwpError.invalidFilePath(path: filePath) } - - guard let fileHeaderStream = ole.root.children.first(where: { $0.name == HwpStreamName.fileHeader.rawValue }) else { + + let streams = Dictionary(uniqueKeysWithValues: ole.root.children.map { ($0.name, $0 ) }) + + guard let fileHeaderStream = streams[HwpStreamName.fileHeader.rawValue] else { throw HwpError.streamDoesNotExist(name: HwpStreamName.fileHeader) } let fileHeaderReader = try ole.stream(fileHeaderStream) - fileHeader = try HwpFileHeader(fileHeaderReader.readDataToEnd(), report) - - guard let docInfoStream = ole.root.children.first(where: {$0.name == HwpStreamName.docInfo.rawValue}) else { + fileHeader = try HwpFileHeader(fileHeaderReader.readDataToEnd()) + + guard let docInfoStream = streams[HwpStreamName.docInfo.rawValue] else { throw HwpError.streamDoesNotExist(name: HwpStreamName.docInfo) } let docInfoReader = try ole.stream(docInfoStream) - docInfo = try HwpDocInfo(docInfoReader.readDataToEnd(), report) - - // do { - // guard let previewTextStream = ole.root.children.first(where: {$0.name == HKStreamName.PreviewText.rawValue}) else { - // throw HKError.StreamDoesNotExist(name: HKStreamName.PreviewText) - // } - // previewText = HKPreviewText(dataReader: try ole.stream(previewTextStream)) - // } + docInfo = try HwpDocInfo(docInfoReader.readDataToEnd()) + + guard let previewTextStream = streams[HwpStreamName.previewText.rawValue] else { + throw HwpError.streamDoesNotExist(name: HwpStreamName.previewText) + } + let previewTextReader = try ole.stream(previewTextStream) + previewText = try HwpPreviewText(previewTextReader.readDataToEnd()) } } diff --git a/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift b/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift index cf55f48..8753b66 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift @@ -1,11 +1,11 @@ import Foundation struct HwpCaratLocation: HwpData { - let listId:UInt32 - let paragraphId:UInt32 - let charIndex:UInt32 - - init(_ data: Data, _ report: (HwpReportable) -> Void) { + let listId: UInt32 + let paragraphId: UInt32 + let charIndex: UInt32 + + init(_ data: Data) { var reader = DataReader(data) listId = reader.readUInt32() paragraphId = reader.readUInt32() diff --git a/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift b/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift index e0b5f8e..42faf17 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift @@ -4,11 +4,11 @@ public struct HwpDocumentProperties: HwpData { let sectionSize: UInt16 let startingIndex: HwpStartingIndex let caratLocation: HwpCaratLocation - - init(_ data: Data, _ report: (HwpReportable) -> Void) { + + init(_ data: Data) { var reader = DataReader(data) sectionSize = reader.readUInt16() - startingIndex = HwpStartingIndex(reader.readBytes(12), report) - caratLocation = HwpCaratLocation(reader.readBytes(12), report) + startingIndex = HwpStartingIndex(reader.readBytes(12)) + caratLocation = HwpCaratLocation(reader.readBytes(12)) } } diff --git a/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift b/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift index 3acbdaa..91044f2 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift @@ -1,14 +1,14 @@ import Foundation struct HwpStartingIndex: HwpData { - let page:UInt16 + let page: UInt16 let footnote: UInt16 - let endnote:UInt16 + let endnote: UInt16 let picture: UInt16 let table: UInt16 let equation: UInt16 - - init(_ data:Data, _ report: (HwpReportable)->Void) { + + init(_ data: Data) { var reader = DataReader(data) page = reader.readUInt16() footnote = reader.readUInt16() diff --git a/Sources/HwpKit/Models/HwpVersion.swift b/Sources/HwpKit/Models/HwpVersion.swift index 3b5ba35..4fd12e5 100644 --- a/Sources/HwpKit/Models/HwpVersion.swift +++ b/Sources/HwpKit/Models/HwpVersion.swift @@ -17,8 +17,8 @@ public struct HwpVersion: HwpData { public let minor: UInt8 public let build: UInt8 public let revision: UInt8 - - init(_ data: Data, _ report: (HwpReportable) -> Void) { + + init(_ data: Data) { var reader = DataReader(data) revision = reader.readUInt8() build = reader.readUInt8() diff --git a/Sources/HwpKit/Report/HwpReportable.swift b/Sources/HwpKit/Report/HwpReportable.swift deleted file mode 100644 index 5ee19c0..0000000 --- a/Sources/HwpKit/Report/HwpReportable.swift +++ /dev/null @@ -1,3 +0,0 @@ -import Foundation - -public protocol HwpReportable {} diff --git a/Sources/HwpKit/Report/HwpWarning.swift b/Sources/HwpKit/Report/HwpWarning.swift deleted file mode 100644 index 2d44099..0000000 --- a/Sources/HwpKit/Report/HwpWarning.swift +++ /dev/null @@ -1,17 +0,0 @@ -import Foundation - -public enum HwpWarning: HwpReportable { - case invalidFileHeaderSignature(signature: String) - case unidentifiedTag(tagId: UInt32) -} - -extension HwpWarning: CustomStringConvertible { - public var description: String { - switch self { - case let .invalidFileHeaderSignature(signature): - return "Invalid signature in FileHeader stream : get'\(signature)'" - case let .unidentifiedTag(tagId): - return "Cannot Read HwpRecord Tag : '\(tagId)'" - } - } -} diff --git a/Sources/HwpKit/Streams/HwpDocInfo.swift b/Sources/HwpKit/Streams/HwpDocInfo.swift index 18c2a28..d76f679 100644 --- a/Sources/HwpKit/Streams/HwpDocInfo.swift +++ b/Sources/HwpKit/Streams/HwpDocInfo.swift @@ -1,20 +1,21 @@ import Foundation public struct HwpDocInfo: HwpData { + let record: HwpRecord let documentProperties: HwpDocumentProperties - - init(_ data: Data, _ report: (HwpReportable) -> Void) throws { + + init(_ data: Data) throws { record = try parseRecordTree(data: data) - + guard let documentProperties = record.children.first(where: { $0.tagID == HwpDocInfoTag.DOCUMENT_PROPERTIES }) else { throw HwpError.recordDoesNotExist(tag: HwpDocInfoTag.DOCUMENT_PROPERTIES) } - self.documentProperties = HwpDocInfo.visitDocumentPropertes(documentProperties, report) + self.documentProperties = HwpDocInfo.visitDocumentPropertes(documentProperties) } - - private static func visitDocumentPropertes(_ record: HwpRecord, _ report: (HwpReportable) -> Void) -> HwpDocumentProperties { - return HwpDocumentProperties(record.payload, report) + + private static func visitDocumentPropertes(_ record: HwpRecord) -> HwpDocumentProperties { + return HwpDocumentProperties(record.payload) } } diff --git a/Sources/HwpKit/Streams/HwpFileHeader.swift b/Sources/HwpKit/Streams/HwpFileHeader.swift index 5d0037c..66558fd 100644 --- a/Sources/HwpKit/Streams/HwpFileHeader.swift +++ b/Sources/HwpKit/Streams/HwpFileHeader.swift @@ -28,18 +28,18 @@ public struct HwpFileHeader: HwpData { let encryptVersion: UInt32 let koreaOpenLicense: UInt8 // 공공누리 Korea Open Government License - internal init(_ data: Data, _ report: (HwpReportable) -> Void) throws { + internal init(_ data: Data) throws { var reader = DataReader(data) - + guard let signature = reader.readBytes(32).stringASCII else { throw HwpError.invalidDataForString(data: data[0 ..< 32], name: "signature") } self.signature = signature if signature != "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" { - report(HwpWarning.invalidFileHeaderSignature(signature: signature)) + throw HwpError.invalidFileHeaderSignature(signature: signature) } - version = HwpVersion(reader.readBytes(4), report) + version = HwpVersion(reader.readBytes(4)) let bits1 = reader.readBytes(4).bits isCompressed = bits1[0] diff --git a/Sources/HwpKit/Streams/HwpPreviewImage.swift b/Sources/HwpKit/Streams/HwpPreviewImage.swift index 32d7d73..e3cc063 100644 --- a/Sources/HwpKit/Streams/HwpPreviewImage.swift +++ b/Sources/HwpKit/Streams/HwpPreviewImage.swift @@ -3,7 +3,7 @@ import Foundation struct HwpPreviewImage: HwpData { let image: Data - init(_ data: Data, _: (HwpReportable) -> Void) throws { + init(_ data: Data) throws { image = data } } diff --git a/Sources/HwpKit/Streams/PreviewText.swift b/Sources/HwpKit/Streams/HwpPreviewText.swift similarity index 82% rename from Sources/HwpKit/Streams/PreviewText.swift rename to Sources/HwpKit/Streams/HwpPreviewText.swift index f8e2dd5..f7316d5 100644 --- a/Sources/HwpKit/Streams/PreviewText.swift +++ b/Sources/HwpKit/Streams/HwpPreviewText.swift @@ -3,7 +3,7 @@ import Foundation struct HwpPreviewText: HwpData { let text: String - init(_ data: Data, _: (HwpReportable) -> Void) throws { + init(_ data: Data) throws { guard let text = String(data: data, encoding: .utf16LittleEndian) else { throw HwpError.invalidDataForString(data: data, name: "PreviewText") } diff --git a/Sources/HwpKit/Tags/HwpTag.swift b/Sources/HwpKit/Tags/HwpTag.swift index 23e714b..d6fb8ac 100644 --- a/Sources/HwpKit/Tags/HwpTag.swift +++ b/Sources/HwpKit/Tags/HwpTag.swift @@ -1,3 +1,5 @@ +// swiftlint:disable identifier_name + let BEGIN: UInt32 = 0x10 final class HwpDocInfoTag { diff --git a/Sources/HwpKit/Utils/DataReader.swift b/Sources/HwpKit/Utils/DataReader.swift index 4c2dfe7..d8f906b 100644 --- a/Sources/HwpKit/Utils/DataReader.swift +++ b/Sources/HwpKit/Utils/DataReader.swift @@ -3,11 +3,11 @@ import Foundation struct DataReader { let data: Data var offset: Int = 0 - + init(_ data: Data) { self.data = data } - + mutating func readBytes(_ length: Int) -> Data { precondition(offset + length < data.count + 1) defer { @@ -17,15 +17,15 @@ struct DataReader { // https://stackoverflow.com/questions/54698947/swift-data-subdata-fails-with-exc-bad-instruction-code-exc-i386-invop-subcode return data[(offset+data.startIndex) ..< (offset+data.startIndex) + length] } - + mutating func readUInt8() -> UInt8 { return readBytes(1).uint8 } - + mutating func readUInt16() -> UInt16 { return readBytes(2).uint16 } - + mutating func readUInt32() -> UInt32 { return readBytes(4).uint32 } diff --git a/Sources/HwpKit/Utils/HwpData.swift b/Sources/HwpKit/Utils/HwpData.swift index dc94aeb..21e204d 100644 --- a/Sources/HwpKit/Utils/HwpData.swift +++ b/Sources/HwpKit/Utils/HwpData.swift @@ -1,5 +1,5 @@ import Foundation protocol HwpData { - init(_ data: Data, _ report: (HwpReportable) -> Void) throws + init(_ data: Data) throws } diff --git a/Sources/HwpKit/Utils/HwpRecord.swift b/Sources/HwpKit/Utils/HwpRecord.swift index 191b529..a90e2e4 100644 --- a/Sources/HwpKit/Utils/HwpRecord.swift +++ b/Sources/HwpKit/Utils/HwpRecord.swift @@ -9,7 +9,8 @@ struct HwpRecord { } func parseRecordTree(data: Data) throws -> HwpRecord { - let root = HwpRecord(payload: Data(), tagID: 0, size: 0, parentTagID: 0) + var parent = HwpRecord(payload: Data(), tagID: 0, size: 0, parentTagID: 0) + var reader = DataReader(data) while reader.offset < data.count { let value = reader.readUInt32() @@ -21,14 +22,13 @@ func parseRecordTree(data: Data) throws -> HwpRecord { size = reader.readUInt32() } - var parent = root let payload = reader.readBytes(Int(size)) for _ in 0 ..< level { - parent = parent.children[-1] + parent = parent.children.reversed()[0] } let child = HwpRecord(payload: payload, tagID: tagId, size: size, parentTagID: parent.tagID) parent.children.append(child) } - return root + return parent } diff --git a/Sources/HwpKit/Utils/Type.swift b/Sources/HwpKit/Utils/Type.swift index 5eb915a..9a54ef3 100644 --- a/Sources/HwpKit/Utils/Type.swift +++ b/Sources/HwpKit/Utils/Type.swift @@ -25,23 +25,23 @@ extension Data { var bytes: [UInt8] { [UInt8](self) } - + var bits: [Bool] { reduce([Bool]()) { $0 + $1.toBits() } } - + var uint8: UInt8 { withUnsafeBytes {$0.load(as: UInt8.self)} } - + var uint16: UInt16 { withUnsafeBytes { $0.load(as: UInt16.self) } } - + // var uint32: UInt32 { // withUnsafeBytes {$0.load(as: UInt32.self)} // } - + var uint32: UInt32 { let start = self.startIndex return (UInt32(self[start + 3]) << 24) @@ -49,7 +49,7 @@ extension Data { + (UInt32(self[start + 1]) << 8) + UInt32(self[start]) } - + var stringASCII: String? { String(data: self, encoding: .ascii) } @@ -77,10 +77,10 @@ extension UInt8 { if currentBit != 0 { bits[i] = true } - + byte >>= 1 } - + return bits } } @@ -94,10 +94,10 @@ extension UInt32 { if currentBit != 0 { bits[i] = true } - + byte >>= 1 } - + return bits } } diff --git a/Tests/HwpKitTests/Basic/BlankTests.swift b/Tests/HwpKitTests/Basic/BlankTests.swift index 6c8f685..9dec1c4 100644 --- a/Tests/HwpKitTests/Basic/BlankTests.swift +++ b/Tests/HwpKitTests/Basic/BlankTests.swift @@ -37,6 +37,6 @@ final class BlankTests: XCTestCase { ("testOpen", testOpen), ("testSignature", testSignature), ("testHwpVersion", testHwpVersion), - ("testEncryptVersion", testEncryptVersion), + ("testEncryptVersion", testEncryptVersion) ] } diff --git a/Tests/HwpKitTests/Basic/ContentTests.swift b/Tests/HwpKitTests/Basic/ContentTests.swift index c7f5b6f..4d59fba 100644 --- a/Tests/HwpKitTests/Basic/ContentTests.swift +++ b/Tests/HwpKitTests/Basic/ContentTests.swift @@ -8,13 +8,13 @@ final class ContentTests: XCTestCase { .appendingPathComponent("noori.hwp") return try HwpFile(filePath: url.path) } - + func testSection() throws { let hwp = try openHwp() XCTAssertEqual(hwp.docInfo.documentProperties.sectionSize, 1) } static var allTests = [ - ("testSection", testSection), + ("testSection", testSection) ] } diff --git a/Tests/HwpKitTests/HwpUtilTests.swift b/Tests/HwpKitTests/HwpUtilTests.swift index 2d42395..fa6e306 100644 --- a/Tests/HwpKitTests/HwpUtilTests.swift +++ b/Tests/HwpKitTests/HwpUtilTests.swift @@ -9,6 +9,6 @@ final class HwpUtilTests: XCTestCase { } static var allTests = [ - ("testBitsFromInt8", testBitsFromInt8), + ("testBitsFromInt8", testBitsFromInt8) ] } diff --git a/Tests/HwpKitTests/Versions/VersionTests.swift b/Tests/HwpKitTests/Versions/VersionTests.swift index 891e92b..fc900c6 100644 --- a/Tests/HwpKitTests/Versions/VersionTests.swift +++ b/Tests/HwpKitTests/Versions/VersionTests.swift @@ -18,6 +18,6 @@ final class VersionTests: XCTestCase { } static var allTests = [ - ("test2014VP", test2014VP), + ("test2014VP", test2014VP) ] } diff --git a/Tests/HwpKitTests/XCTestManifests.swift b/Tests/HwpKitTests/XCTestManifests.swift index b94520c..360d9ae 100644 --- a/Tests/HwpKitTests/XCTestManifests.swift +++ b/Tests/HwpKitTests/XCTestManifests.swift @@ -5,7 +5,7 @@ import XCTest [ testCase(BasicTests.allTests), testCase(VersionTests.allTests), - testCase(HwpUtilTests.allTests), + testCase(HwpUtilTests.allTests) ] } #endif From f676cb5821303d51bf1d6c035332e39c5248fc63 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 28 Sep 2020 01:57:57 +0900 Subject: [PATCH 14/19] handle hwp file that is compressed --- Package.swift | 3 +- Sources/HwpKit/HwpError.swift | 3 ++ Sources/HwpKit/HwpFile.swift | 20 ++++++--- .../HwpCaratLocation.swift | 2 +- .../HwpDocumentProperties.swift | 6 +-- .../HwpStartingIndex.swift | 14 +++--- Sources/HwpKit/Models/HwpLineSegment.swift | 10 ----- .../HwpKit/Streams/BinData/BinaryData.swift | 3 -- Sources/HwpKit/Streams/HwpBinaryData.swift | 8 ++++ Sources/HwpKit/Streams/HwpDocInfo.swift | 12 +++-- Sources/HwpKit/Streams/HwpFileHeader.swift | 5 ++- Sources/HwpKit/Streams/HwpPreviewImage.swift | 5 +++ Sources/HwpKit/Streams/HwpPreviewText.swift | 7 ++- .../Section.swift => HwpSection.swift} | 0 Sources/HwpKit/Streams/HwpSummary.swift | 11 +++++ Sources/HwpKit/Streams/Summary.swift | 6 --- Sources/HwpKit/Tags/HwpTag.swift | 6 +++ Sources/HwpKit/Utils/DataReader.swift | 4 +- Sources/HwpKit/Utils/HwpRecord.swift | 41 ++++++++++++------ Sources/HwpKit/Utils/Type.swift | 18 ++++---- Tests/HwpKitTests/Basic/BlankTests.swift | 3 +- Tests/HwpKitTests/Basic/ContentTests.swift | 4 +- Tests/HwpKitTests/Basic/content.hwp | Bin 0 -> 16384 bytes Tests/HwpKitTests/Basic/noori.hwp | Bin 238080 -> 0 bytes Tests/HwpKitTests/Versions/2014VP.hwp | Bin 8704 -> 0 bytes Tests/HwpKitTests/Versions/VersionTests.swift | 23 ---------- 26 files changed, 119 insertions(+), 95 deletions(-) delete mode 100644 Sources/HwpKit/Models/HwpLineSegment.swift delete mode 100644 Sources/HwpKit/Streams/BinData/BinaryData.swift create mode 100644 Sources/HwpKit/Streams/HwpBinaryData.swift rename Sources/HwpKit/Streams/{BodyText/Section.swift => HwpSection.swift} (100%) create mode 100644 Sources/HwpKit/Streams/HwpSummary.swift delete mode 100644 Sources/HwpKit/Streams/Summary.swift create mode 100755 Tests/HwpKitTests/Basic/content.hwp delete mode 100644 Tests/HwpKitTests/Basic/noori.hwp delete mode 100644 Tests/HwpKitTests/Versions/2014VP.hwp delete mode 100644 Tests/HwpKitTests/Versions/VersionTests.swift diff --git a/Package.swift b/Package.swift index d0b0dea..225030b 100644 --- a/Package.swift +++ b/Package.swift @@ -32,8 +32,7 @@ let package = Package( dependencies: ["HwpKit"], resources: [ .copy("Basic/blank.hwp"), - .copy("Basic/noori.hwp"), - .copy("Versions/2014VP.hwp") + .copy("Basic/content.hwp") ] ) ] diff --git a/Sources/HwpKit/HwpError.swift b/Sources/HwpKit/HwpError.swift index 0b472f0..2ca55f5 100644 --- a/Sources/HwpKit/HwpError.swift +++ b/Sources/HwpKit/HwpError.swift @@ -7,6 +7,7 @@ public enum HwpError: Error { case recordDoesNotExist(tag: UInt32) case invalidFileHeaderSignature(signature: String) case unidentifiedTag(tagId: UInt32) + case notSupportedOS } extension HwpError: CustomStringConvertible { @@ -29,6 +30,8 @@ extension HwpError: CustomStringConvertible { return "Invalid signature in FileHeader stream : get'\(signature)'" case let .unidentifiedTag(tagId): return "Cannot Read HwpRecord Tag : '\(tagId)'" + case .notSupportedOS: + return "not supported OS" } } } diff --git a/Sources/HwpKit/HwpFile.swift b/Sources/HwpKit/HwpFile.swift index 1766c03..765e623 100644 --- a/Sources/HwpKit/HwpFile.swift +++ b/Sources/HwpKit/HwpFile.swift @@ -1,11 +1,12 @@ +import Foundation import OLEKit public struct HwpFile { - let fileHeader: HwpFileHeader - let docInfo: HwpDocInfo - let previewText: HwpPreviewText + public let fileHeader: HwpFileHeader + public let docInfo: HwpDocInfo + public let previewText: HwpPreviewText - init(filePath: String) throws { + public init(filePath: String) throws { let ole: OLEFile do { ole = try OLEFile(filePath) @@ -25,7 +26,16 @@ public struct HwpFile { throw HwpError.streamDoesNotExist(name: HwpStreamName.docInfo) } let docInfoReader = try ole.stream(docInfoStream) - docInfo = try HwpDocInfo(docInfoReader.readDataToEnd()) + let docInfoData = docInfoReader.readDataToEnd() as NSData + if fileHeader.isCompressed { + if #available(OSX 10.15, *) { + docInfo = try HwpDocInfo(docInfoData.decompressed(using: .zlib) as Data) + } else { + throw HwpError.notSupportedOS + } + } else { + docInfo = try HwpDocInfo(docInfoData as Data) + } guard let previewTextStream = streams[HwpStreamName.previewText.rawValue] else { throw HwpError.streamDoesNotExist(name: HwpStreamName.previewText) diff --git a/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift b/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift index 8753b66..225321b 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpCaratLocation.swift @@ -1,6 +1,6 @@ import Foundation -struct HwpCaratLocation: HwpData { +public struct HwpCaratLocation: HwpData { let listId: UInt32 let paragraphId: UInt32 let charIndex: UInt32 diff --git a/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift b/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift index 42faf17..c43e5c0 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpDocumentProperties.swift @@ -1,9 +1,9 @@ import Foundation public struct HwpDocumentProperties: HwpData { - let sectionSize: UInt16 - let startingIndex: HwpStartingIndex - let caratLocation: HwpCaratLocation + public let sectionSize: UInt16 + public let startingIndex: HwpStartingIndex + public let caratLocation: HwpCaratLocation init(_ data: Data) { var reader = DataReader(data) diff --git a/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift b/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift index 91044f2..16fd237 100644 --- a/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift +++ b/Sources/HwpKit/Models/Document Properties/HwpStartingIndex.swift @@ -1,12 +1,12 @@ import Foundation -struct HwpStartingIndex: HwpData { - let page: UInt16 - let footnote: UInt16 - let endnote: UInt16 - let picture: UInt16 - let table: UInt16 - let equation: UInt16 +public struct HwpStartingIndex: HwpData { + public let page: UInt16 + public let footnote: UInt16 + public let endnote: UInt16 + public let picture: UInt16 + public let table: UInt16 + public let equation: UInt16 init(_ data: Data) { var reader = DataReader(data) diff --git a/Sources/HwpKit/Models/HwpLineSegment.swift b/Sources/HwpKit/Models/HwpLineSegment.swift deleted file mode 100644 index 6a0e68c..0000000 --- a/Sources/HwpKit/Models/HwpLineSegment.swift +++ /dev/null @@ -1,10 +0,0 @@ -struct HwpLineSegment { - let start: Int = 0 - let y: Int = 0 - let height: Int = 0 - let textHeight: Int = 0 - let baseLineGap: Int = 0 - let lineSpacing: Int = 0 - let startByte: Int = 0 - let width: Int = 0 -} diff --git a/Sources/HwpKit/Streams/BinData/BinaryData.swift b/Sources/HwpKit/Streams/BinData/BinaryData.swift deleted file mode 100644 index 03ed7ae..0000000 --- a/Sources/HwpKit/Streams/BinData/BinaryData.swift +++ /dev/null @@ -1,3 +0,0 @@ -struct HwpBinaryData { - let test = "hello" -} diff --git a/Sources/HwpKit/Streams/HwpBinaryData.swift b/Sources/HwpKit/Streams/HwpBinaryData.swift new file mode 100644 index 0000000..d260d09 --- /dev/null +++ b/Sources/HwpKit/Streams/HwpBinaryData.swift @@ -0,0 +1,8 @@ +/** + 바이너리 데이터 + + BinData 스토리지에는 그림이나 OLE 개체와 같이 문서에 첨부된 바이너리 데이터가 각각의 스트림으 로 저장된다. + */ +public struct HwpBinaryData { + let test = "hello" +} diff --git a/Sources/HwpKit/Streams/HwpDocInfo.swift b/Sources/HwpKit/Streams/HwpDocInfo.swift index d76f679..57e798f 100644 --- a/Sources/HwpKit/Streams/HwpDocInfo.swift +++ b/Sources/HwpKit/Streams/HwpDocInfo.swift @@ -1,14 +1,18 @@ import Foundation +/** + 문서 정보 + + 본문에 사용 중인 글꼴, 글자 속성, 문단 속성, 탭, 스타일 등에 문서 내 공통으로 사용되는 세부 정보를 담고 있다. + */ public struct HwpDocInfo: HwpData { - let record: HwpRecord - let documentProperties: HwpDocumentProperties + public let documentProperties: HwpDocumentProperties init(_ data: Data) throws { - record = try parseRecordTree(data: data) + let records = try parseRecordTree(data: data) - guard let documentProperties = record.children.first(where: { $0.tagID == HwpDocInfoTag.DOCUMENT_PROPERTIES }) + guard let documentProperties = records.first(where: { $0.tagId == HwpDocInfoTag.DOCUMENT_PROPERTIES }) else { throw HwpError.recordDoesNotExist(tag: HwpDocInfoTag.DOCUMENT_PROPERTIES) } diff --git a/Sources/HwpKit/Streams/HwpFileHeader.swift b/Sources/HwpKit/Streams/HwpFileHeader.swift index 66558fd..70f773f 100644 --- a/Sources/HwpKit/Streams/HwpFileHeader.swift +++ b/Sources/HwpKit/Streams/HwpFileHeader.swift @@ -2,6 +2,7 @@ import Foundation /** 파일 인식 정보 + 한글의 문서 파일이라는 것을 나타내기 위해 ‘파일 인식 정보’가 저장된다. */ public struct HwpFileHeader: HwpData { @@ -25,8 +26,8 @@ public struct HwpFileHeader: HwpData { - 3 : (한글 3.0 버전 Old) - 4 : (한글 7.0 버전 이후) */ - let encryptVersion: UInt32 - let koreaOpenLicense: UInt8 // 공공누리 Korea Open Government License + public let encryptVersion: UInt32 + public let koreaOpenLicense: UInt8 // 공공누리 Korea Open Government License internal init(_ data: Data) throws { var reader = DataReader(data) diff --git a/Sources/HwpKit/Streams/HwpPreviewImage.swift b/Sources/HwpKit/Streams/HwpPreviewImage.swift index e3cc063..df627f4 100644 --- a/Sources/HwpKit/Streams/HwpPreviewImage.swift +++ b/Sources/HwpKit/Streams/HwpPreviewImage.swift @@ -1,5 +1,10 @@ import Foundation +/** + 미리보기 이미지 + + PrvImage 스트림에는 미리보기 이미지가 BMP 또는 GIF 형식으로 저장된다. + */ struct HwpPreviewImage: HwpData { let image: Data diff --git a/Sources/HwpKit/Streams/HwpPreviewText.swift b/Sources/HwpKit/Streams/HwpPreviewText.swift index f7316d5..1cc1dec 100644 --- a/Sources/HwpKit/Streams/HwpPreviewText.swift +++ b/Sources/HwpKit/Streams/HwpPreviewText.swift @@ -1,6 +1,11 @@ import Foundation -struct HwpPreviewText: HwpData { +/** + 미리보기 텍스트 + + PrvText 스트림에는 미리보기 텍스트가 유니코드 문자열로 저장된다. + */ +public struct HwpPreviewText: HwpData { let text: String init(_ data: Data) throws { diff --git a/Sources/HwpKit/Streams/BodyText/Section.swift b/Sources/HwpKit/Streams/HwpSection.swift similarity index 100% rename from Sources/HwpKit/Streams/BodyText/Section.swift rename to Sources/HwpKit/Streams/HwpSection.swift diff --git a/Sources/HwpKit/Streams/HwpSummary.swift b/Sources/HwpKit/Streams/HwpSummary.swift new file mode 100644 index 0000000..ac52a07 --- /dev/null +++ b/Sources/HwpKit/Streams/HwpSummary.swift @@ -0,0 +1,11 @@ +import Foundation + +/** + 문서 요약 + + \005HwpSummaryInfomation 스트림에는 한글 메뉴의 “파일-문서 정보-문서 요약”에서 입력한 내 용이 저장된다. + */ +struct HwpSummary { + let title: String + let subject: String +} diff --git a/Sources/HwpKit/Streams/Summary.swift b/Sources/HwpKit/Streams/Summary.swift deleted file mode 100644 index c0625c1..0000000 --- a/Sources/HwpKit/Streams/Summary.swift +++ /dev/null @@ -1,6 +0,0 @@ -import Foundation - -struct HwpSummary { - let title: String - let subject: String -} diff --git a/Sources/HwpKit/Tags/HwpTag.swift b/Sources/HwpKit/Tags/HwpTag.swift index d6fb8ac..f49b416 100644 --- a/Sources/HwpKit/Tags/HwpTag.swift +++ b/Sources/HwpKit/Tags/HwpTag.swift @@ -2,6 +2,9 @@ let BEGIN: UInt32 = 0x10 +/** + ’문서 정보’의 데이터 레코드 + */ final class HwpDocInfoTag { static let DOCUMENT_PROPERTIES: UInt32 = BEGIN static let ID_MAPPINGS: UInt32 = BEGIN + 1 @@ -26,6 +29,9 @@ final class HwpDocInfoTag { static let TRACK_CHANGE_AUTHOR: UInt32 = BEGIN + 81 } +/** + ‘본문’의 데이터 레코드 + */ final class HwpSectionTag { static let PARA_HEADER: UInt32 = BEGIN + 50 static let PARA_TEXT: UInt32 = BEGIN + 51 diff --git a/Sources/HwpKit/Utils/DataReader.swift b/Sources/HwpKit/Utils/DataReader.swift index d8f906b..cbdb42b 100644 --- a/Sources/HwpKit/Utils/DataReader.swift +++ b/Sources/HwpKit/Utils/DataReader.swift @@ -13,8 +13,8 @@ struct DataReader { defer { offset += length } - // The indices of a Data value (or of collections in general) are not necessarily zero-based. A slice shares the indices with the originating data. - // https://stackoverflow.com/questions/54698947/swift-data-subdata-fails-with-exc-bad-instruction-code-exc-i386-invop-subcode + // The indices of a Data value (or of collections in general) are not necessarily zero-based. + // A slice shares the indices with the originating data. return data[(offset+data.startIndex) ..< (offset+data.startIndex) + length] } diff --git a/Sources/HwpKit/Utils/HwpRecord.swift b/Sources/HwpKit/Utils/HwpRecord.swift index a90e2e4..7075eb6 100644 --- a/Sources/HwpKit/Utils/HwpRecord.swift +++ b/Sources/HwpKit/Utils/HwpRecord.swift @@ -1,15 +1,33 @@ import Foundation +/** + 데이터 레코드 구조 + + 논리적으로 연관된 데이터들을 헤더 정보와 함께 저장하는 방식을 데이터 레코드라고 한다. + 레코드 구조를 가지는 스트림은 연속된 여러 개의 레코드로 구성된다. 데이터 레코드는 헤더와 데이터로 구성되며 각 헤더 정보를 활용하여 전체 논리적 구조를 생성하게 된다. + 레코드의 헤더에는 데이터 확장에 대비한 정보를 가지고 있다. + 따라서 이후에 한글의 기능이 확장되어 레코드에 데이터가 추가되는 경우에도 하위 버전의 한글이 상위 버전의 한글 문서를 읽을 수 있도록 하위 호환성이 보장된다. + */ struct HwpRecord { - var children: [HwpRecord] = [] + /** + 레코드가 나타내는 데이터의 종류를 나타내는 태그이다. Tag ID에는 10 비트가 사용되므 로 0x000 - 0x3FF까지 가능하다. + - 0x000 - 0x00F = 일반 레코드 태그가 아닌 특별한 용도로 사용한다. + - 0x010 - 0x1FF = 한글에 의해 내부용으로 예약된 영역(HWPTAG_BEGIN = 0x010) + - 0x200 - 0x3FF = 외부 어플리케이션이 사용할 수 있는 영역 + */ + let tagId: UInt32 + /** + 연관된 레코드의 논리적인 묶음을 표현하기 위한 정보 + + 대부분 하나의 오브젝트는 여러 개의 레코드로 구성되는 것이 일반적이기 때문에 하나의 레코드가 아닌 "논리적으로 연관된 연속된 레코드"라는 개념이 필요하다. + 스트림을 구성하는 모든 레코드는 계층 구조로 표현할 수 있는데, 레벨은 바로 이 계층 구조에서의 depth를 나타낸다. + */ + let level: UInt32 let payload: Data - let tagID: UInt32 - let size: UInt32 - let parentTagID: UInt32 } -func parseRecordTree(data: Data) throws -> HwpRecord { - var parent = HwpRecord(payload: Data(), tagID: 0, size: 0, parentTagID: 0) +func parseRecordTree(data: Data) throws -> [HwpRecord] { + var records = [HwpRecord]() var reader = DataReader(data) while reader.offset < data.count { @@ -21,14 +39,11 @@ func parseRecordTree(data: Data) throws -> HwpRecord { if size == 0xFFF { size = reader.readUInt32() } + print(tagId, level, size) let payload = reader.readBytes(Int(size)) - - for _ in 0 ..< level { - parent = parent.children.reversed()[0] - } - let child = HwpRecord(payload: payload, tagID: tagId, size: size, parentTagID: parent.tagID) - parent.children.append(child) + let current = HwpRecord(tagId: tagId, level: level, payload: payload) + records.append(current) } - return parent + return records } diff --git a/Sources/HwpKit/Utils/Type.swift b/Sources/HwpKit/Utils/Type.swift index 9a54ef3..21afc88 100644 --- a/Sources/HwpKit/Utils/Type.swift +++ b/Sources/HwpKit/Utils/Type.swift @@ -12,7 +12,10 @@ typealias DWORD = UInt32 */ typealias WCHAR = UniChar /** - HWPUNIT과 SHWPUNIT는 문자의 크기, 그림의 크기, 용지 여백 등, 문서를 구성하는 요소들의 크기를 표현하기 위한 자료형이다. 문서 출력 장치의 해상도는 가변적이기 때문에, 크기 정보를 점(도트)의 수로 표현할 수는 없다. 따라서 일정한 단위를 기준으로 해야 하는데, 한글에서는 1/7200인치를 기본 단위로 사용한다. 예를 들어 [가로 2 인치 x 세로 1 인치]짜리 그림의 크기를 HWPUNIT 형으로 표현하면 각각 14400 x 7200이 된다. + HWPUNIT과 SHWPUNIT는 문자의 크기, 그림의 크기, 용지 여백 등, 문서를 구성하는 요소들의 크기를 표현하기 위한 자료형이다. + 문서 출력 장치의 해상도는 가변적이기 때문에, 크기 정보를 점(도트)의 수로 표현할 수는 없다. + 따라서 일정한 단위를 기준으로 해야 하는데, 한글에서는 1/7200인치를 기본 단위로 사용한다. + 예를 들어 [가로 2 인치 x 세로 1 인치]짜리 그림의 크기를 HWPUNIT 형으로 표현하면 각각 14400 x 7200이 된다. */ typealias HWPUNIT = UInt32 /** 1/7200인치로 표현된 한글 내부 단위 */ @@ -38,11 +41,8 @@ extension Data { withUnsafeBytes { $0.load(as: UInt16.self) } } -// var uint32: UInt32 { -// withUnsafeBytes {$0.load(as: UInt32.self)} -// } - var uint32: UInt32 { + precondition(self.count == 4) let start = self.startIndex return (UInt32(self[start + 3]) << 24) + (UInt32(self[start + 2]) << 16) @@ -72,10 +72,10 @@ extension UInt8 { func toBits() -> [Bool] { var byte = self var bits = [Bool](repeating: false, count: 8) - for i in 0 ..< 8 { + for index in 0 ..< 8 { let currentBit = byte & 0x01 if currentBit != 0 { - bits[i] = true + bits[index] = true } byte >>= 1 @@ -89,10 +89,10 @@ extension UInt32 { func toBits() -> [Bool] { var byte = self var bits = [Bool](repeating: false, count: 32) - for i in 0 ..< 32 { + for index in 0 ..< 32 { let currentBit = byte & 0x01 if currentBit != 0 { - bits[i] = true + bits[index] = true } byte >>= 1 diff --git a/Tests/HwpKitTests/Basic/BlankTests.swift b/Tests/HwpKitTests/Basic/BlankTests.swift index 9dec1c4..dbaa354 100644 --- a/Tests/HwpKitTests/Basic/BlankTests.swift +++ b/Tests/HwpKitTests/Basic/BlankTests.swift @@ -1,4 +1,4 @@ -@testable import HwpKit +import HwpKit import XCTest final class BlankTests: XCTestCase { @@ -16,7 +16,6 @@ final class BlankTests: XCTestCase { func testSignature() throws { let hwp = try openHwp() - dump(hwp.fileHeader.signature) XCTAssertEqual(hwp.fileHeader.signature, "HWP Document File\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") } diff --git a/Tests/HwpKitTests/Basic/ContentTests.swift b/Tests/HwpKitTests/Basic/ContentTests.swift index 4d59fba..8eabb95 100644 --- a/Tests/HwpKitTests/Basic/ContentTests.swift +++ b/Tests/HwpKitTests/Basic/ContentTests.swift @@ -1,11 +1,11 @@ -@testable import HwpKit +import HwpKit import XCTest final class ContentTests: XCTestCase { func openHwp() throws -> HwpFile { let url = URL(fileURLWithPath: #file) .deletingLastPathComponent() - .appendingPathComponent("noori.hwp") + .appendingPathComponent("content.hwp") return try HwpFile(filePath: url.path) } diff --git a/Tests/HwpKitTests/Basic/content.hwp b/Tests/HwpKitTests/Basic/content.hwp new file mode 100755 index 0000000000000000000000000000000000000000..8b29baf391a186aa4b4a0bf119902e71103fada9 GIT binary patch literal 16384 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 z zRVuV76&sZ$LYPu*t+<_cc6vko&WA>O76xGsXG^iwHm0FL4TaHB$?3kVBLaxK6OEg- z^?KxyWMl8)fBO03^4nM;`qq%^ zb+IXgllc#XypK7TbS^7f=t@1l`=v!M3cK*R1w3-=bib&^3Yz)(_ z9FgO})c4zL8TmDd0Og^M>t|KB`r6Z>S35Ddipw+AoUvN2yw*l1xbCm7jBi<{;?W1Kzv+3DXR@c2cdAsjnYrTG=~!1JuCH&y zHo>B)PCdYtq-;UiFpaknSUb3ND?xywKwoh&=-PsY9u+u4n#4=2=`)K3q1!j@;YJ*$4)E8w_Cvht4p;c*$u5~&6c?q2VO zvev!<;dO`DNC&%5rw6^mO9?3rnc97!QP?A1!qUWwCK5#@KbcR9aV2FTMZ^>j!he97^Vwx33-AQ`0_M5(&DJX79d^ zlXOHi)5w|PZj;M$wX(cKi$H5<_K?ufm0NwBqpVtJ{zb0kJS~PGE*pJz?qu2mnt)a z_VO^a@VD~A66HfvZUN^2b)rrf(Mbyi$^VW)@^3#9!p3na}xF z2vfeKiy)P~+ktC2NtjM_Xft*$C^ zrhJG?;T-qxv0h=Pebo7ZWZue|rENIZ_)Ne`*!1YDRgX=Ws`8Ld@t32FVSJNb4H`?f zM<3}eC?iqFZ#xH3wK1!VsI})<8%*T(whpj(WSZ>BY`)RB+ptctYx1?}y7%I2Ne`{@ z^FeySa+cnVZyQ=wnUR7i0jmc&btT~hmE5bmWI;=PDbj~yXa*5CGRmmlVpwHGeIyo0 zbuW4?gI)1TKS9>4|Gpc4(Hg(K6IH_uF%Qk#LV=_L=;iyXA6Q==F%Sw_?JF%+W!Ov> znv=W^Nad9Ik|A%qHo!J2dRi<+byPy@iZ#1AESw{MD}7iiHT? z$+s_xpjb;L+#YUVI+Rx6$Z@VrX)N2#SHH2PtSiaQN2{<)>i61^{@RBJUSoxFWvUwG zFBbNuTQH>&UVN5n`L>SjDCHCPMmL`OG(N&WR`e!)%z9P9mT6o)^Lp(5@rO)OtV&

    S` z_fY90u;(OlvP3f{-- zaOM?id-hFzI>TjE+aKQKEh(1oqO}J!ms3hp zB3O)iX%|oFFuY*OV;BlsQbZZC{H4mJcs#v{;>R4a%MQ!D#t`>Q97zG6om8A2nK^ow*;2NY+jf%+>{aH})C0=Oy=Jvib-wR? z-f(Dkcs%;c_;hgbk}$)u-rU@42fPmLn7PGMK#&>PD>C1C>Kb!3$P9-nTM;QGqNqc$ zrIAbxi=}q^PF%~WeX%e}!?6#y=xdRd80E_aDtuE;^5N#7mcxmiKT^;o)A7uoT%H-; z{D#Yf7ccft3xG~NzdUEnjj#)36)2j$ptiUV?Mh4j@<_!yMm}A4EUpNJl(Q!OCRJS2 z^>!@#8axcr#ZUhdeC{@`2z{ga@35pKnJ`UIp(X?&-eGD|_#1^_IalL&g=Q2_9ueWJ zsh)(owkB&brbtXIr&_jNv%_QFD0w}i;_hbVwvpAre5qZS5j&`0sis&}W-nM?BI_=q zU<TM`#A&dhq-p=xi%##zON{k_r-uBP^vKb~#3yHD2ljXhqR zCI-*ssCC_C$HWac`j~P(lEE&y6Rb)OD*ObS%w-Y%v*T>|j?J}OP)Z*_^Yn(>oosJU zQmxwL-P=3qvRP%d@#Bp{_Mao^#xFNhrn8S_??p%&IMwGr+h9C% z0PvS3B1FdpPX~Ee1`P|uwMWxDg&x7?@qi*01U@U(psB1QBo1n-jVUOtTqzCQMH`sY zt`pzj$gFg480j51;%=x0T9^O6v~8vFLImb{YUwWgt*!9tL;Rmc%2A4y0wEGku-~3# zXJxH&T7FWzbdWWsB&Ld_J#$|c3!voFjSdrK{twv7>$CByhaj!Yuyk zq|&+v7mb5(3StisL6rC|4<4{pL9^SCbZV_ zISRsPvauynN2>gT*|-t}2Oc|Z)_gz?yg3iK{?waiBF)2k$G)H&r~I7ic%Eu>7pht# z+#I{vq?{i+ivFdqm`MGWB5~OBywlt7S*gr8q50WdaewxPb=_K0fI6$+nN z@;x++>wbIpJiwsK=r3mMEFrT{cWN2(^f-YZ3?{d#jE;-N4wHaM^JxnrE;Ke%?7B#Cy{wn;?as0ZkSPsT;l=MaEA6fTOTzmTiMp%DzbZ1M2gVachCiGaV~p7I zw72{kJw4?2Nqcfpn0a_%lW-3lb>jJD)MPGoEzHUq&G5es+1OR25<_DTu_0*J|Dnc^ zF1`L_*m|~2XY>5;{eAtT|BK7~w3s8_k%-Hf3~arolaYgCE=AO&&r_uj$HnZF;FM)# zX6w~F7NnWUU2n94*g-qMM(t*gW5UXpeS*1X@2IM0&rF@Q<*l77!sRxffGRs5Iry4( z;2p){Y2(DwN`PhUxE%@j=jDedHe;0b3{%UUuTH=nE!~TM-wf(~?SC3LRo`1CG;5r? zLu>yoZ%}XI_MfJ>)2z0cxNKDO*?(CJ?Wf_5u1=Zzw0mK4fnR4G{_2DwEb}c){Op6z z))$Xw+N;i=93G)07ura6D zyi*Oph8_WK3`}iZK1N|E5ZD_e?X)_R)FySRk$KDQqKN*5g$)8;*Q z2$}W`e=H)B=%8c+8(hghs(TC34Yn?klzwDoTDUNlY;&X$V|V@~;aCRTqONX~6P3x?hHjzBOw+@T z$tT%?`VALAH<(3&a-paZp97?;O4E0+R=;%p*(0G#KGQn^)b+jPa2)^cSqSN#w6p)` z^aS0awHNr0+Yd49rvjd$%Fg*sgezFm!bH!XIRKER!rZ2#pV6mt(bV z_w7YA-tFeoK|w#4S!IhlLcH`mTU>5f2(C7u;){z>prjKolfGpNk_TN)`D-@b^GGht zgy9jU+8Xv4FP|@SEl6wE4JMP;2Qq{v5c!t-x*Ez|vU-cvI|KG+wO4(P?(IDu1S@N|g zQl_yifJ7Rhh(re9wyjycqs}ky!!(A)2Y#bf#95mEXzbc%M7Z?RxZz)r0a~3}e*QsG z!vQVNWZX#zL*`A!?qk*s&zVG&XZxtHH>p$AhkB_1b;b)xi+s5zBs<4 z0d@QZaR2IDjMIDsoMY$~{(<@}1Hk6?yej0A#C4bio5_s|Weha`vs7;L`}0d)q`2?D zqrN|fX8%ehR3bfZ|F2{iH3){jyG_(T^EoMvw)|WuGm5v!tSH}+jvg2LIlJ%p`1r8X zC{w&$h(5Wn)9hQoVBpBlzb4kO>B99vzwAHm%Yo8%`C7>==~OM{t{={#&i!I_$!@gZYg@HsO~XGAT&9fb#vgkkOU0s;D}I=r z{LSSuZfG!O;iAwQ@gHGo$-3Ia(2b6AKa(9sY%WBX)7&bD$d_#J6)MpGCWd?>5DV3>Pyx|nEQKnK zrU+Wy>F9D2m>}?9)nCqar7WdbngCCBOSW*Fucfo#*N1vIK5&Jc?B;Woi;IyPPtX{z zLo0uqcm2ThBYj5@$Lj^O;xqIw`Lr(UKQ519;2xDknydxU`so1Z#QTmB z6~8PW7qNT7U+1c~-Jlv0f!0+1nJGpY*4<6C8}oXIa{^U6TWngK|=w8R>VNdr=ty6%)gC4E($HXC|$D+G8p7rPf+z*AWgu$-F#Iw|C zQPjh3&HaE)_nn{PGu_4Tk(+MJrVxJj5b=GIlkJiR9;d0YR}bdKYl@ScU68MJZnId> zy#s@EQg{fXbcYr8<6#oO9h8siHi)f2yM4$mZ(CvzdMET)qHgy-#bL+qn{G@@4c#LT zx{RZP%X#D6g~F7w^+Sty)M-=ZC7s z!=H`bJdra(he~+!Wui#hf}TiPLRw-!5?#7yu`zjWOg^$lI3>6nj2J>&_fC$DnOa6W z2D0t?B^(HB0Qck>vzEI0SqXzgaZeM13>iwi zz&JV*WTr7eJtn{N`FVYmvc=&0xZiJXP*hYlma{eQ5D`_kJFRxi=6uYOo{7gXCqA>( z3#V6YhhDW?-}s%rdAOr^RO2qtO&xjeTsBn^m@EzD)#( zfHv7AgKcNcUj2i>+`xjttP^E#jeJk7JXg;LrIY5en{s8N8)o{GpNWnIk~z-8*!zHPS@7UTHPl0oKvarr38P~R1qgB%Y;mXuKpBn(1|T7*VL1@#$?kx7LipL z{in4;lf<8wHdx)f(SK$BWc2S6w1O0c9&TP7emK#qkTAP(fYQn&w;zjM z&9Xw~{6a3y^bicIv*e(!iOG*Q46o-t7Y!e=&+xA4>*Rm7OrFT26)#KO)h8b9mnm=a z8OgPJ>#{4-q2wL0m@hQPCE5QAKT0ShMw<>(=hM93~L z|Gu|;0P!&o&X7jKD1G-a%rjuJmnX<1V}6!;M)(8@_MqCKP8nr6Of68D3h~tqGF}eX zCfSZ?IKACD^b)T6h{DT8tp_Y!b;Y9R_k>0Qw5n4p74YG=?~^5L%Q3rUTMN(H&e0?C zr6?zFMSRtF)$NzSc$15%5BofaWrwodL@4vB!$1M5mR6=)+c>6tp31F(2I;L2g9dc^ zE81REISV89v0Q{Q*6-Wh-+Fm}>ZMIS$mWu9$k5BE!Jii`P;=0D;5V?izpFhaxmi3J zUn>)?n46mA|5dyB=3_mgYu!lQd!g%q5br+b}coZsMr%jzMkA8`y zrE_)ReT6N;W;{=n7b(Ap@32^-eH^)@2dL_x@~rMxqL!#p4D$R)z)`8)cwrOTLMXQb z@wpZ*C*vp-`VwPi5X;Mrg$5L`O6KbOSLZFgtg6N%0vL zy!r>ZIJ2FAzd{=H+dr-A#cZreRRg{2beYcf^TnZ*7<|o{X3!Z*h+Hkg_rq8)o-tpS z)^_BJ^dm9Aj!DJ{TP3ZZT2@FcLPDrc78F! zEkD}bh1M?JIvAT=ZpY`Wn4W!tt^+KW*=wu? z_UNg76NhJxoE5!^gv7zET5ICM`2|5EE5RSMM>Mw)oI&z)KBB!oMt&)QRw+B z6SD(fIMN#}`|3w!>W6?X50{UZe#w3qbM0cH=H`wj1bI?16XoK08h;2Crx>pxHU#h5 z!PwyfA3WC~wR^^<6Yrw9sqGa6cOef*eOUtCynK;Q3lzFef{2sMab0@(2E3xgP$#UI zFE+N0O)jB8Kwa~3KjA8QT_zCA?pUxQ^a%r5gI5iYJ00cl7^ z)z(g{alM(`bzZM+Q6%~--y7zrU^vhJH*gnOfo3Pwou~U^0oNRz^tWiFX5U|0?7iraYy0OcUO{hr?L+5ubRJ2^ z`i<^RUOc_R(czm89(yPCMl4#2+UX99fXmd1SL>;0RHS6vFQZIIPXVwQ3IbxIfu~T3 z8&Z}Xtsbs++3(*d^NXamIR}$#^DkPhZD%xJ=_Uxm+f6!kxgf zJnE;yfaU$xfE8N_CEd$;y}J2czfo`+??|exCNo#M#j!>2N%e%;p#(mW(fCtrKU!Ax znJ~q_t4#ysjj4qAf^^Crv;Ae9IP-W>$`MbHw56OG$3Zvlw-4_EjbIFnKAIe~NBCF_ zrVUnh#iyC}O>RBwzL^z9$;BrH04?uP#5*4kdi->@vq<;q)rJjco>y?+Jm7OCHLji> zI88RHPDhrO|Fd+;uwY{W*8>pP)IK@-{O-aA}6%nlpK{+w6UA6gjS!^VSvun(#d zabyTzQBAZFEXEHI#;-1aZ`aDL)x*j9Aie#$mCwbpzx7Db^u=A_{uNk8lBCa=4Shrc zeCY+{DJ*L~1Qv{hbsyx*>|_S-=xh607agn9thv@ttk6SanO#voO~tjMM1hRFog-^X zq^LF8CKKL3!saBgdP34!CWD2TG|1xR{(K0kci!SlRywbtWrW(y(AMZI7ksZuat!n2 zknrgoG9*5@!aU#RMCTVPQRO$g`<=NZxiinfKNi~^bxgxhX$VnbBrk~3cS5t#8*yGv z%xJghBI`JEyIwzXTPMOd`pe(7w}&zXd@8?xx_uO2=Z^%Yea{$1SHO?2;+2X6Qa2OK z^+cq#&3y`2o(MIu4qKLw+7J?ZybEs6m z(m!kiZCkL}GLJJgweuNXF4sp~Wxw(}>vl>hEZx*Oa~ZNis+W$MdeXaZe8H3aqtjDn z!}4Q)M$2u4oP<#Vq>3(@}s81!;kg4 zNdcBY_e#kD-JiA23pB1Xmi6WSMKFGn^usMC#DzcqpC7Lx@U zKl9czEABbtqjbp~zl%wl+?`xq(jT(fcal*G976@4a%RW(njq8gG&ciJcseu2o_zh* z-ensTk&=#GK>8*o(D^L029YpzTUYyo>^gQPd+nMheSV*uTi`8_xi{l4KlKnR|__-fZcG7k_g(}sU z$k=-@{2T6-#y-J`;g88Fj!TO8X_2wm=+!sKOR?A~T~Q-!!7c{^jWpoYo62)*y1=nc zVc851N({2vif;=^O7BB5=o6CIdY}&EVV@@c;^fS5kV8HV%BHQfiMLPXi#?Fmw+nbj z0cJmiyEqjA1cwnxKOsuz0$GO3Pnh@UNQH6evLfJobT-c}CA(T7?zBH3v%fijJ$nuaVXdy{jO=BLb$)QabL3cLz97*2^ z6yjr@^0#b04>1);M?3{Q`7xf3tP_R@k)PXV@Y|dwZcALs)E6V{PsmOjXgpg<0%js7 zHcbBh`{CC8H#CnFDs?%)LU^4n-*+mve&-Rr57A1-@dw;%XszjrBZo{(@@)~=5Ipox z!$a81{4J!YQj(-hjD(H-w+n^68KUCps#QuS7VX+KQYP#ZbJanncX0r-_i&v}CTD8m zLIF(b0CXuJ%PYLBV#}n?;I>T2e9Fdj*y+pImR@1|6aa9i^{qvBVexy~U~Zxt-88mk zFTuOPfS=!{U_Vt#^&=v@HEiANT9rf0Lf ztbA?>2SEjDriM*gE-n|L3!+w7c5C)kS;bsCx~T5&40!#hxq36^4TS7gNN{6mk|fP}RZF%M%xqDoH! z`cU)R$IKvsc7tcC*P!!1W^S*$Zz^X0{XMTTx<7wGU|44n=bXQ@V z6MG#s1{r%NI~}X%d-5j*OHx3Nf48qk} z#IF-H+KbElU6i}7`pr&~ni~kk(4nR(()*FAB#ClTnovR8Hfj2X#9 z(Z9WWtSq&)_xb$xB6-jx{ul7CO23N#?|5_f;-G!YT`t(`VZ#XoVXkrez=(m#PD%V-<1cKunqr;2QO? z)UG28hHENPs+84y@Y@^SCg=;Z5)KT)sl5CMikvQJC(>DxwP*o!KX-StYqr}Nt(VSO z9#Cn`o85!LXpCjOL;$_yJqfHeJr}1YN_B`pAC%~(CPl9-ey?l$vvHx(+3fA}TVn^? z$Eq8uw9xfzG>lJ3FFTV!T~xjdn5lW*HiNkIYa7(l+^SPluN@Na$oR27aNQXn-;&A; ztw=>(T{N>dvOyA_(%P|+ht?Pefpo=qb*|el-n_oZ{_t%hqs1{;es)2ZA(&(Zd+r!} zG(&V(m|Fr|@>GF8V}TuY9Ob-r(6?w_u&a;8kn1K)gh-PGQS(x}ud|Zr%Cj6aNl^Y< zHNPuOhDA#Z*DxAISCm$W7=ZIdjkoemz6-v*w+NY3#NEkZVu?$r+6Wjqh3;3#dDlAe zJzyi1G-~6!Z{$|_g%Xaq=rRF!l5TK|6~uwN-DB3&7-ayaF^Yb5{U%*Zrf%4FlRf@|`CS^L&0LkTTV;~UcD%Wkc$j^O znpxa=f`56NQQbE7o=lVp>Da~;@zTQmiFzVEHdl|fM^R_UsDYd_7V)17+RSuiRJ}f3 zPn6Fs;cU%@0^t`OU)QWti&jKbiDu$6v*a#jz|A34cpHKiUvG3HB^|GV;Q99Z zxJ=ofQhrAzS3&i|@2YxdWlb|bh(NL&qmTnkDA^Q(HhvJKEn_B1^M;RNsVKR<5vfo+ zQj*mzu9>iE6`zA(XeSxiE7X4pks91uV9(M->{TQ;=@sn6!0h(f=<)YXP3?^`mTtV7 zJPxU+ptiY=@ppT?@Gx4dFZvtnTJbD*1v1(8`}UFO^Y(X^DaaGbM@Tjri#?uN5u@cI zc@qf?y7UpXijNtiVUI?a)M1k<1*(ba#`T=z6RTkr(CpD!*YdQt+E^hL48`ji*Ys`# zb&*eL-J&+=m^&08#h1UQ!6>$_uH$BC|Gs(Qjy1&$sQwaLBXTqkYs&b^QQreQAa`Uv zpERAn`M-_4SEu6tfq_6E=51%vuLI!eJ=w^0m`JVlLQ>W-GA8gxF98ogS3)kIk!f1+v0>A zGgs3POAGV*NyqlM(PyTUD~_pr+AVKe3XcV$(Opq<`b^X6uC6I7e2|soZX76KseszH zo*ROf4xZRHaR3LKO%imN2bxeyb0_w+;)o$^F;>2w&f&zIu3z0kvhLqWea_eHcn>%2 zsx|(Dna~|6QUtT*G-M_msJi_f>9nRy$sleOXFL^t)5ojrx!A$3}6t;0v5JAKTt&+&c zW%6lp3eR+O)ApzxxQ*^%Q+S1ly9YGJtDQmP3!&B#Gkx?j{84xgElemeFJ07Mjb+@RIzQ2yIFyHwT;(CMSZI&2LAqjfo zGF@_r2fj>gZ5>k+s7HS-SZeo&PKAU%qexEqcR`w%jma-~*!6gfE~*d|ldNIt;~ooX z*%=TKq48NXQU&kef^(B1iYrGhu1Nhy_8_UD&*bd0tq>PE=Ho~Fkdfdalila}_e*hS z5$_`W=tq-*{(N{e?!O#6`zt-)%E~kTOY(m`Kqy2qP%Ex*|M;}vPMIO;E4?%L*f&Nk zsd(VNFc#DtY$?H*WQm5pDl?+(!R*pw5sHMEy zW~m$c{xsJ%co8g_&{Y9tHScOj5@SQ_otaT z_ltQ#Z^r{4lLHKruU|I_vWJ`VK6JpNY|h4AW^> zs-+$MCWg&!(#gaWd&0u5n}cWU8Z62zgMqU!bC_~g^#ypdK?i)XiNU>u4OPiS7+MI-6= z1*Sy6;A?>?B}W&I`jwx6cE~`l@nT}UdIC#Jlf*&nEfWK*1&Np$^TLi<@z(lGS0_R$ zY^vfVHIVz`m(7HPNPdX1p#|hm)0$+5-XkB25uwxsTQ>liB*JM5lNRCf4qWmFbx%m#7< zaw5C3Js}%fuqzX|$&yPb6%Tnoc*z^)oVBI?yGK0SoP2OHf;JAKQT}`usd+@Teub@W z;zOO#Cwo{7LE-T^Q~)xbvjX**Xd1RV>f0ZSQySb$EZ*<#o}ns)rp)a-=x$1{adey< zZm+wXhHTY<$n_;GKZEoc$cv8#EV~rvxLkFbaCB(+j#2jw)9& zkr+u}%$K5p)q)}0XYs?I%4!%L2jv{o%eJP8S}G%^s2nb0#q-X+`m|NQM(L7^kFYNS z6cTF)RK7TI_mkwJ#Qei|+_2|%aHDT}zy|4aosbFs*72pLc^i15aHeM;oQ)&g76w4q z(j#k#Gn7b)EKiS*b6F?jVUR_Q281X1sOnMVoqW^M2#YAYs}-uz&$T2T)Fy1TkQwEC zuI19vJP_Asb=6{3w}FD*$jFWE$4$feDB{aT|9kh!RkjtgEX2*$d33rz_rUfJkNJDc z-B`4P{L#$g-XyNSs<$zl!erB-ZiINUncTBk*0d_Dc`nyvX1g+xrIsKlS19LCZNiY@ z)-0Wd^N}|G>gm(wYP45&smW2pr2vOh;|L;9|0C|}8uWXIugkDwmx;ACxZ0draE1u2 z?T4zV2v&L!jYN~1U)uO3fK6dnE3$*E7K0*7I>PJY1CrPQY^)Y=5Q4pWn#??WGx@MJ zSdcGJn3rG2Q70T{G@DE9V|{2R@XP`@SLRSHsaJAVv4eubQpC;?4zXTuNLK;^F1;%M z?H}|{9Om{j|IFeHyaH?neYL}VSTqGKyn=vyh3 zE#S=x>S+J$~X#I zJIJxtt{NH4r%_>E;i}yeu9s9o+Y4%$P*cjN2oQD)*5_T3BT{`Q4Q$t&`ka9Um*G>B z{nsD*_V-$aV#?6W%t*7M;jBmwew*DZyIsfE8?JOHYhRi9@lBX+{TIw++O(6>ny(rD zH~Q%O&y+Oi#ep;}^!!^IcK7DO z!}RjLYmw4lq_%V~RUJ%@jyBCcx6XFysGkc&CN&v{e^jp$ty;^QI#jaIF&B@Jo&26S zfF4ea5!E|Dvcn=9;Mv^u&t%{y_fO_q=3v&XcL146M$02{Hx}uSFa2}&+}>9PD~H~v zb@6>qy9@wsv!>^5QzpHRK8=JmdmHa~8BAku7T=^Q8tT;h+1?o*Ql{*bbp50Uw`5JP z>Y)UK)iY`g6D}MhAdZ^e92$xF+ROO?{)tnVVK)vz+85a_?q-G`n;G z#$R-w<&qDRz6j)v&F>avxBL;aYg)5aq@oOBq&?Z5$vljSLS1XDRb$i^a&2 zU1U|+yNAe{q;#7^Y8L)z*3C7jVBrMW8QUinmO(|Ry_X_Q3?-vS=D=6r4Pklrfvcbi><}W9n@XEO@h*I>x<>@ z4cehuxZPuoa0WF}O(=lWXQ?JV>cWF3DijGd5g`w(0*fE++flEKewSzb?i(-`tTHtK z&3?V)oI)+_2PsDBg#T}I34%T%y^C=dZ*^r{2$8c}6~F zBbFQO_XWggSw`1A&JhlFWFn^^XU_C1H2dtLPd%pt0HLnoL(6p`QmvRNa}f&es&-|x zTy67UwL*~K*(TJb0VXt|1X5SXYiG02Q6p%7vppJX3zcYHE&%B3a5E1UA}CPdtGz;ME?6P>tU4!a`0NU+vrsRyxoYB;G^~=nrdMa540($9G2IjpjCaZwnxPJXJh-i~{ zO|YB8hsKcrR<`I;Zbf3&MC7(9`L+w#cCCH$MiPpbNRxL@-{x0NKh)1$e4=%qf=!B{ zx+$Kfk`;73b!1LOQM2^%Ngx6Rk~k@;v1#^ruu@aGqRpjwgMgk+rurW>_iL5MR+iu>Yj&BHQZy~!D{)xujD!M~ zrk<9O>u9%vFK%>p(OGnHQ~!!AeFCk#nB%?}cGfC>(%;4mB3n{wVyb**}+@y^EhzXNWcmvZ@SmwBIh}JfhGu<;`lQe+W9f#j$!&P>* z*GxVAf`ZkgJR7vhRKDuuYHZ9c@kKbQgzuQBvcZS(Z6#7nn;Ua)7p8~?Wii^zRcs|W z({~%WXL0%oh_Z=P0N5db&baMK@lU;tu&n?I+31$kOWAe&%)eZv|1QFH3fN|}40(2` zs=xhYyN#~6Vm|HmI?5)BmCA3LmTS>a`-scge!(Kb)h|;1%}8!yZhi{)d>~Cv zRTg3A>SY1%$mJtI0XGF=uxff`lbR`+Y7dg$l4aGhnL1iz_v9FIg~*Et-~vq^@F?TW z%xkbprrw{I3u)mk?Zyx8FfK_fr_VskZOd!%7xRtOg8`=|bUt?nJY8CX3aWxbsj$Qi zu($Qb1u6mhT8ph~xo$g~(UuO@v$iwuf4Ti7V@hZrPE(8q z;?9U43884}Y4p7!?H7o*mNpa6Kg0Yqa$&^KGn=k=-3v7GvZL-k z!KX4-ImVY}QsdyRB7cw>ffR;#n4{Kx)ogn`@MWcjuhzJJJ^BfD_rDC2{r^ctBwnth z7qpAJ`ue~qsDa$&EO@nVF^~Q*SwqTT_#-Z^fpm8hB>378X z%zJE!O|blmd?RFM6r+7z$uqeHR(AcYz5zak`j-7B_zG=*3dgR>ZswuEye748KH@Io zmt9;L*2Fd}{)6Jd#Bc236Odw+ju=5dUHyPel4YM9nrn$KYq(%OW5M;Y?!8LUG>t)J z!t7M>pb8VkZV!;HM}=-WH+sTi@}$9zU%zUppm@JW#85hz#mJ-o;0CGq4kNwwb-_y| zwSjI~V<$B&wGZ5QHonngh#ou?Ti|~P(aj!%p4>n?-Ts~!{`#vG8zC8Zr1o31BwUG& zD*auh4nKXx=VtNb^1}GGah@ns?h)N@aJ^h?=~V0l?L61R1=|*WbLhfsr~h{l}J9po&_ZVz4N8crvXbvrhbAVMgwST>rtwJailh zLDBC^Ba<|e$GpX5xHb}su^!^AF);!Wjy@4H^>eqJt~{Pz zqGu_X9f2Yy33QePAnloa#n!@!swr#EeJnn6o+xv6>MK^EOJypJam6q6Ef$l7*K+;( zR>9oYuP6@Enpel|CBCI{0ll3Pvp22Xqhk#YU=lfm`y{!qOKy{IRSF4kb!NBi%m!fu z{QEqJEKwT}55KTRu2?7p#md%GCDgN0U8I$2zbff4IbpE#3~NdW)=UvNE-h}*)^W|_ z!F)dVwIWeE3D31{GO-~fR<~oZhrjW=&+FE>Svd%=GsF}@0~ihAW)#_#=ETJUQ)UlM zzAfuuM7_RVc)|Op>6vZ6r(vX_%yuC~a77Sh8IUzST*^E$E9a3dqOfP8LSN(Ve<2$z z%p%dMeyc*tho_vVhuc5PTt^u^@_h_AA+=nIE!a3|0oFC5R0f5Uj7}=2#yFnE z%4|+BR-YvDv~OdDMq89A!O2CdwvSheC|2fDL^@9g^JR*G8v`{jfAohywcH^#u0;Kb zUt8rsR`}gizAiGSc_?P_CF`)*M$qH*)`Q@fLpB@Re^wN|V`i_nY7 zT2?JJRoz!p=>|#jM-}GnX=v1%b|gL*>BV~F`=l5Hduw`Mkm3Jtv55c~EBK{d?Mw2~ zpKe8lgUaODQuC!_vE>z@t<8*c-Uo2?-%o71TdXMWqCSmf^&N$PTccLc(%B8;$pXKD z|E>Fsdj0Dp$(sn3u7F)fFp`)v46o>r=QDk~`~Yd;lA|ObE9_Ck#^%7Fpgz^|y-ig; zK<<2r-{F2r%M)Bf2qbKh8~lGnon=&8VbiYPdZAES+$nB>;4Urh6emc~;O@a%+@V;4 zQ{3IXXn-Ka9f|~ZcMk74-?z?M`|n=Q+BSQhnQQL5uSiE-IOOm;e6_#xpsumhwMd&s zYB~45^DB^;5GL6KLL5TR?+iK`R*%C|^l7|2zvh^oQj@QrTu(i@mUV#a+GIW(fT;`V zLSGYvjs`VV-2ClQ;nE-s4n)05oXsBG_4Gej!W9HwLDPK^t2<~%7Z|AdH+C!e^Lq|Z zOgjQ2!JeYJs$D#V2^y__N6mhdBz(7)=sU}wSHLSbVbbwRYr+ChN?l(d%2s>uD9y8J zK$R+3bf2CNkB;;`J6U6Zy+D@@n-rI4H#gHl=nU zhkw@RT^-xlZQUiLGZx~+YYgL92)(&5Qy>v`irPFvZ!_DkFP(gSJ6El?RclE|(}e#2Oxo@TSrP7hv-QP9=ROK?720PZtgTTrO$u6BTbpAS z`^mN6{PJ((6DT>=ty``aeT|7lfgLG@rNOiO>}qrMo3az8$9iJ`^xjl zkpEW=OOs1sgo*RoEHcc*zPCD#0C6Zp-QMh{9PvrBs|PQt_vXv|J(rGpY%(JtF%{ZW z{g_lHt?bbpPxpWjk)Ctko+H)FQm9kOdVqqXf74=>AB0grz?x*Iv})DK;-c{9(@MI= z&stLneW$8s)@I+{7O?_=^Z@&v*)3pZ>^M*8h{XH1huErzY{FaAYnhb!Ooc`}qViqN zmKlk4P}R8MrAhn!ydS9Tf0(y(Rh0mA`IzXfaT6IY8lsE&T4Gxx=(kNh(z|c;z>G3Y z!0xbpO)EBxH+rhK3J2D3Ad(8q$m!)xK6^H4F;m$zPePLjyIt?eyDKzGPJDJ%+fXQH zsk!xtIGE(wIcH9WORs6`lUke1v)tG>@-4wOiscJt^7RhBGwEyxVQ-nisw;=&uc~&} zw0EjjoNUBNtwT*xaS*-;rRsrzJN8X6-$Pc3q)V3U*K2{BCW~Q(4C6jr17>1(VRaY! z$;ol+1$X;x!kcW)L$W*ptlsl>@9h7Do9hd7vqvp|TChW=wf=SjQ(5EEr1H@26twv% zRvgJ(?fBH)>B(Oe$+JHDz!AqEp6Lq?Sb0ZDuu&iZa&x909e4d}+y4Tp}Ob3lQPlYaC@|Kojl z&dO0d^TzX-DJPM4Pw4s!rA#bImBy0j)%GJwi>vjk;zAq|e`R5zADa+i+_m08Ize6C zefy&m)OOOD0!&k~V7c+Pog2F~rl(m{gmFLunAXir>2yEP<~Hye^irJpZ>z=lRu@UJQZq89fAW8PU7yqf*z#nGOVojrKjlLHpPcFQ2vHqI3kfp;F zS}@L0ZQ4N>DtXq!2}RGt9(IzR)lY82XbO?7n8`Iv2$RH4Ku;urJ>60oS)w7;#!wM( zp(Hd;{Nq)JW`}wG#TLQvwd1ubGP}k! zqrLj$=`6-Tf3%0qWiU!PaPFv~_nE@15*gKF8;bNP6eoDR^QG(4FKkz_2@eqji^_ea zB}6}_;TlE$Wh!AdnqIMUK3?Sv%i)vKLG=gUDejcx7P+!1A%#WrXW492wpyfKH~Mq)y>K` zjR)xeuzi|^eOHUt97|sJ*gubB^_mc9gLRC~hMDfXTD%hvaTLw?nTT)&3G~k2O$zw5 z%f=MRJ`HR*(*&Auq)^6(V$T?>%XJ~RB!Z)u0WHE2`5Jk1JiR7J@5tPK{9;}}#gs_| zprXx`ZoBW`_}}HcW6W}&ne!@M`HNM;+sa1L=KE6`@ei|9xMVt#D8b+0Q5MLNa`IgZG07I}1$iT+4y41+7x1tqkMqe1>3|F2TFp)da%mM9W zfI?Ls+A{|t5K`0>jEf%obysktbwnIoO<|Uv2#2Lv+H`h*wyoiK5IiBe!M9(f7B7_U zHPq~}zdH!qKnaeaUKl(}N%9A@LVmmIs^_L^=7oT#t>awZa0Ju&-2CcU{amCSt}c68 zt()t}n6m%)M|D~Je7;WL6pRwxt@`ou|3#f0`w2JFkf%#O9^2Z#G{Y)_J8x=LQtK1y z&;QfY_x6?C%PbmUi`0p#b-ocF{+Sw}*vsWIuK=zhP2XzLo1g>4=++sx9)u(Yp?v*q z!GbH>5Pz0$w#&;t!$7Qq{lGEDQzKu`*H<(DxcQ-wlPO&J8)gYW;t(g=#`(t?yY=Yu zsla81J3^XfMEUO-NWd-8t~+0ap-XRhBi_PHL8|S-N&(@gAFq(})kKZ~b6KDa~}F z**aMc0#lmQsrn@%1RKRazbuD(58CQY@E(tPoG2DG((1nIVki8boC?|md&D2_(k)m6 zXMf!C+GDG%nai@Cz6memfvnCrrql}XxV8D432rw_9bUiMQI_Q>;*tUvl(txsvgUHi=pDZu)F0xi zL=yjWkq!>NEV2Hue_&U0gU|)Hg`TpWfNwddeHisYbif(hnXtD`!QpA2$ZTsl6n%BoCPia8% zC!q6255M>|DByG3ZBoWm!IT@@pskY*3^~LuJ-|i30|*-DM^#I|=%ee~Z}X}S@k z5OVXD*xF0*9@@wZZr^;6O^bx(FfYD+5Q+Y|gLSLkjE8}wanE=5bW;E~bLg_Mh0`h3 zMRAg{5&G^SS7jcZP1|h~iRNkdhvqK!&nP(E9t`1z7D2zfuz&ms+M34jlf^0q{#<)p z%cDv!Vl5o12%HPuuWV@Qemnw(l1ViQg(C%H6Vu9me-LcZ?5k#JP9#^%2{YQxt-~O? zsTaC)3D20WVoCL^`&f2#|cVeuuhFTZG< zCfYSYTR=eI5_RW$`0jCU_3m-hJ75)Qb9uK9dSkq&oRq26c=P2?I#E!IiIJEeyHvj2 zaXQDqMy?zmAsx1An3Q=KA_MzJYi9`@&F%7%uipZ0KsS zP32R0UHTYN-L-%-?S}I}R&g^yCIUgQfp~sKLkr2Y7#`QAcH^BZi#mNkL6jp*Ty#F4 zb!CAY*+K3DJ<6~2u5XufIQ$&$nL0Mc9*mn9MiIDDd5ptS?8mn1?` z_FRF74lgg*E}OftM{$O4DGEd}*(oM9>&soBC&qg- zN7P*VjJbX&QO&1}Tp)|^J_&s2?&&3}06hxJi!V=9S9-IZ;WS9)6SZ+mei0fxPN%ec zP0xC-p%Iv;;40GP;^OC3rIAq{M)x#JcVd;f6rlF824Av3L7DK48W;_b@uMFHh5#uprz!xl9n4JFs5yu2o21{ze=H*{+{Wj+iMHTg>-Syjp|9Pa%( z#Oe;!01f?kuByoxP@^PXg|XBq(EfK<(=o(o!RJyIod*t-b80b5^JFzm^d%~?*BYi} z+C&A&smVtE;WEkk&n}rpb<9S3m~u*5>jsgE1RSd%&urxMe1MZ@{W-%vbjqiY@!@0; zT>23FfZY0X)?7P6Cf6m&JUMpCzic+1JBrTd`fQeUlE~_F0yMuq!llX{K2E4iix;Z>^i5ySkP_b<6=ZQX zY>k~Q&vHS|X+7v}6ejHn_Yk7!7|XHcWlV~5kB%9efS#|baZyXk-Z!3fk_a8sYlz7| z>e_v1u{4_FuGR@^kS5Nvj%llAUGH*|-9;@PV`S-m6I-k5Jo$_Zc@J@l`{gtjADEMk zoTZ8}u`XpP`$V8`_mE-8o4E1&cPw0_J9csX+>3y_;(%W}J$rjRSLN@(PQEF4;A_F# zXvlc{g?H%>ySV#$(|=Y36?4BQcpM|$vyn^I`j6uJ!Fk|dss@!l#CMvO;Cx&uF?8Ns z`efn_@-Z`s+NNWRV7wh5e1>;UX1|h}JZXq#Odi@Cut@C_+C$KcY2aNOGG-|k%orOB zrg=J4*oElaDxT;Um2iWQTaT){c`LXEtP{8}n9qnH3*t~^ZO!Y>eO>u~0?>1}NQB1%7K%k!c+h_b9b;TS)qPnm`*@=OT@g50GDM^~&NXQ%nh(6d0nR~bhN-`6eu#5)| zyYvNdhG3bGW^~(UZb7lUhne5|OFvE3Ji9NKSeM%6CbzT=xvw&|M=2Z+Ye#<9rgUSL zqRIY5ruIGITLdRJuk`LR)6OLE&I-@m{HQ}3(0CGK7c&*y4G)7*_?*Qg_YtHD-1B{yZFm2hkf2ayw8}s@B(t|8?AhNCJ^yTe~ zMshwy3WU|fH0ERu$GaetL7nJb!+lH4QRm~k$EiNl0_JfV4`zYVu-o5BbX0&Xadn?H zEEB=O0*F_;A|lFM-INHtZtTJuUwI!y6d@s68Hqk&k=COZH>aMG7xk{y<0SmRoM;*H zK|Ki0+>G(I86%ja^GX74OEOg&S5}-o3_yf1@oTv35YA%8Z}!p;UqFNvN5!u^`Ie#` zo`qv8AW>7+FoWMn)Epjm*g~KPRW6AcM%07o*=d!b?s& zt!aVuMbb*x1a zMc!r;Wd?Da2;IXk)KExknt{ymm%1LH{3x`&s&`r`xB;4I)fRMg`F4+Dg#0yYoBTUO z?cZ=)IcUKC*Hi>#Ecx1cBF}!{I^r?2PFXhvb!Dl?WtmD$ZXy zAu7xH@MS>TTVgjupJW7+g;elY4j@Iy^$y!o50O+l_)h7tBGl%%Mm<6FS;TrTVC0igsmuoLXF@H z#+e7{y%}~W3S(_)GYp-;vz=G%o=n4+8vBaupfKB9b(D3|KD@&b45bu7IU2b^3OdHtV+OxAF_G;jUX%gC)iOg-khm40*h>%GaFD3Wip(R=T zBgHcd{@&XOt=47aFJY$NGcHOb_|Y4AqCXkQN&1u5tG9kPurlrz#KGfAQ2JIk;``N6 z?sRN-6v7509H%>%`Xi%WlfxgO8V@8f53l~G;-faN{TysAZ98o7O1~so0If^#ZJ00o z1?m?T4o7r8=;Pu_V9I=X-6Zw*KXEJVe_RfHi!%i#h~frX&FP$-oHlt!&syL4!jO(> z2NZRh6*JWKn`rhGpD|t&W|DOuq!=3Opa>d1j82l7wSjRv!Uf7ID+{sFSu1OCHy<|X zV*BaaX|mJkaJ0?PTDJaqKX_=h8|;k%c*Z^myeq=F{CG;E9I=5EFcU{G!T)6oE;bCc z)dCp}(k2RVEj3)7Zn(Toe8SCQGf!?$01<(r?Xcclx2jaSU8-DLq!Hos6m+#TQLVpJ zmZ4L5`b47pUqS_^a?0;BPo&5}t9T~o_t1NJ*I4rpM)jE$m5lq{V{EZKA8)#a=d;`Dw+DClUh(+j z=~|stD~|nrcBu+IK*-QxN!m-IC(@xbw>Awn>@HIX6<5K7&LGZyV(I-J(O6DrYS;>7 z4qunNBrdVIsW$q6Lx~Vg<&io%40tO5Ip_Je$+xs6!`XQP*K_CwH5?Z5j zoEU^O`Q1ZeAVl7Uh(JFW?R_S@(PqZ^T53w?L2Bm~9?NZDjz=j6E#P5dNYtx;*E2Mc zm%`)8D?#QyFc3^_&rNewPDp3=^f^UI!v#cTf;%Uw7(3}Ya;tat=HxGr+b}-Gq4xvX z=jtAtGWj-D1RLflJ(MF1gS&>u7)lb82$-LZu6{HP3i7%-j%jkd@mV}+Jh}ER>{9!j zQJgKODYCgU&H?n_YlYVJPE!c((^2J4utzRdSyWQp2ZupfP}xg4+Et8rB!odP=O2qU z41%dyxVM`IQ5>2R#G82v+p}bYS`Zic0vE6t(rQ06Bu3~G))r$r(brPxu}M6*PX(^X z1jR&vR>)SjKSy^}A2leeZ)UQda#Sk)yJ0%wS;l#|PqyHY5`yFCgE3uqFcRltb!^=W zHLb?i@%hTGOH&0oHxRcCo^X^)I5(TMV=ddHg&kL#NRB&3_a~LcBcspC89(=z1qDUN59Efawc-(yH^$Gs;KP4TI+JYwT&mXP^ z;|eLV6TcWsK#{an!7PT@s_%c{Cei(pC1Lv|`{ykQ2`~;KTmOfIj^}blTr6JcZmnR% zr7wj)=beH6QpxBF|CU(J*l#DOpEYO$Ga%aEWw6rjA*rC8>dn8xyFUt^6&0n($k1II-g^l1h`Zi?l0IONL0&6nqK(uiUIr#EAe^Kz70G$=8LcS0JwvL z4D_gv%|adwLuD3ox8En6?a4kF&wUcn7y*trD5Sa!eSt-Op5Y9{#6i^k%RY~4sT|T^ zGOb~aJ}`v15>XJq3aX_VdaD_M`X?NJ(kl0fw|_6qNEK|oc-1bV9#ct*8{M|H5jvQ} z(>rvIt^6QwQ{HOES&2|$>l!QiR{r}#d>3YN>H>YE({5uj6=LT#f+8TP6Ne*=tA6i$ z5%|&MXwAH-4|E$@3&Ccm>T=T6u6MGj;dgU2Nro74O$bUh@OgA-<&4rdX{M=5)2hF* zokdKhF+GZytZesl@O76Gs7Cb!C7D$NoYwQl~}VOiVe|iRj6yV$w2j?pPh~F zkR^9bpu}y}j$QAzEw3E*4r9D$#-yGaW5TM?$VZ1bgn5U%#sxYatDcdv_xkP7so``x=z`_$TyVg1wQ#gbLT2h@k=B%KN%s)n zs;5VL?3Vh_t>1O><;MR`agc=5x{k^GMkqKw{G}Ho5#2_g;@F5>=X8LyU3J=ApD0`wpbM zmd;RCpHao5v!<=Yvwq1ciC)H7UKR}Dp1Wfn-38t4uJ+z)A{aloeKA*;Z2hq9-D10I zYRk$>*1_Go^ZUQzURv*#Qs9?LSOJ6Lbcnl?7==?8w{$IQ``Jb4@R-u4t)AR}X-IbQ zU9&uirt|-W>E@mh8A9nNRJ(fdyC&7vB}e&MRN4flp(m zkz!2p2aCDjr%;fsDpNuziR1n1)&ASdx#g>qXVu5?BCaRI^o~pG)0EzUTdJ6n`QD6c zK0O@DWxVx59MU2L;dsYtW4m91z}E}?`Qd(PQ^jLVPO z@r*C>iAIL))3>R(4J2J%N!0}hUX4PQDh_q^a&wHnDBx_JKX!7cj4|NgOhZ$-(GK?9 zinwZ+e_y~ORV7E4DL&)0mKjXRpCUZ!=%x}R^be5xQ=V-oxO!{@xEkO|N7Sd3G-nDt+XCq=$ zYx9t$2_G@5@1&)AI5$rIbhan8Frcw1S6tYq6OWgQ1kbuqI5irxR^I$IXZ@wDvM+f{8QJQWrM|}LUpopZD4ekR9G)Y3jCUws_rEZu$7;Xn&JCgZZC0OoAYL*+G_r z&_cbgU$+DbJ)!ipCODrXyYNO!^ms&B^meaMv{U0mXw>3zqn~kN+ynEbAy8{riU)tk zKcm^YFZ=?-J^f!svhMia(U_2Bwx+2QW@bR3zF|>$h{hQnk1Hh(O%Ap+COOU2dur6y zbi$PuLn!>k2?zFvcoj9%ypQ;*aaFWMa6LV9pPaFOrP_4n3Ey4y9~a)+bIb12&~44y zwY74~-?)8XX6_mv`KOI_RT{HRw!QwXBTB`nNY9JWeP-o3h57FYI(*L=+x&Sb$*tf3 zu4Ekf?fnOAw!UA#DG7B=I1dz}CZ=Co;{@q70=$fjjG9(}a|Q3}swi?Op7%yD{#VFW zz}ZO6D1Qeg&U|F`BTZ+#LEL?;FLLL`>%3K}WGZ*H3y&fuOg)~lP9?^(>Kl(fjc&in zUv$%R`BJOI{8#DZjpaxWp?u+O)dTl2V!WYjITa0lW&Q7UCHE9qb2FVkZhlPc;Hq)X zEyz{6iuz+~Z{8((0a!w`Tg(1k+^J~ZUw5C9pVWNz`4cg#_7UeDjREZqvrm{=!p^1K zdC{tGHhc2k2i8l33*mN^qv3I7kdn)BTY=e?6+{hNrfXJftNd-UKf#MO-yL_PC ze6?l^S3l$|cgi`gh(@x7&m1Za#2o%Y9OcB@7&&^hKH?u@Pk?{I08W4y?cl)H@=w|R z+^!Q=QC!aPD;(cm9Ce*yHv4|-7|WY^`aOg2k%`J16JTj-U;0xW2+5MrJWOqkN7#kJ zO>SOvTf^3kGCh~NnD*4mnBLT}ncw7rQ|NS0gf+?SYKYO+LB}m|{|2BVG#Fzh zse_K!x!u-VgciI89y>Eh+mNB6JW4gbO9r9_3y?29H51Hgj6}E-Z_PISBT9p^7PQ+& z=$Xy;dy!!tb2i4wJdm9QBJOU-UBU^TEr7ic5Hmx{JroTgLlgRR$mBQYop$4)Yo#di zPIKmQcE);V?AGfnCKTXq28d)lzO^Y@zW;yj){}s-?|BMonuGd~JAnlYGn} z((5y@;c(How?XV*xtJjg+S}S|+;EZhwDHX_>F7eH z_k7GU4AmHAl5eLygtji?2e0&}od=qYQj6erbm?&QO`rK(8XP*^rU6!he2SS+Dg8+!3&FC0puO zWlgmR;i=1cTL8wo&B=OQeWm2RXqB3s?_8+GXaO02C&*XF^wdlH-rrpG)c4hopDNt4 zWunGwkJy9zfI-()d`%VVF4ulG?@m>fy{*+JT5zd~qS9mp z0%}gn_rH_X+*<(^k^jbSU&_0S4N0s?WUGk9F7y~z#b(MWq(w5*5U5X+(=@k*fGh)q%<4XZwNi5moK2uL{~? z)E7R&j?3|xO<*fKC?^g{V=MojT!#-us=7F;CQ~Z5WS&Jz3<^>jha<}I|Mj!mdm|VJ zzf1P16$>k0AggL|QMKtlcsHq|pW=zR#NIo=G=~MzNeObF#I?W6X>4t^_{NVVCF2zbE(u~PS+!X4ZL0RO;NGcA~yzE-)Zuu3G|?A<~& zJ6C|5JUnvIL=m?q zyp|mwjD>%C)z1aNAB&_fPj7`6HD9$@s1D4TRtrd#e{tmz*N?txCV%Lx+&keXNi)iv zPjZb{Et6P=wF06*zAf;#@>ptx&YvfVb{u`9ozFZIn7i0XqjUNK^EM#HV92-AQ^(z^ z4OB&|M>{hhBG>sNciFdpw+7D@&_VfRc-nh<{erX+Llg#Jp~n(Lnu&S0ysm5lxp+(7 zcFAA9s>*2Kk&F);NkYwRgLns>Rrifq8{>qmHHvQtVoHqsW zYP6M>q~OJ|t47K;5_zu@>wI|~`LG}_Q*x+#3K^%fnUm>%W-&X?gpSU-G-6_TvuzT? zgy+6+Rb-DaGOYe5_O}=pF6C*!y}Nw*JEt2Fly? zx+btsY!UrK!b4O`?2<+i_O0S>3F)AfWEh^OJxC5K6=h;g40hOgnAh0x?MA=wkbL+dg#!Jc|l9iB~%V4oD zOc()hfVj$GX{m#<%ZT;mSG`i-r>eg~r7K~kwS;~W%kepE z$V6XJ_}hiUz$T%Uc%OggElJ!FdYv@!<-ectvj5 z3n+A=!wrCAQ#Q8_wMFS?h%Brxt%^9ZbY^8xsW}vKFP+?X9J}-#{tX4Fl6HPz9w!8v*iABn6idGF+I!uro7nWe zK_Y~+2E9fuDRf(1gRWT}o;`%X2QAH-y5C`nw%v;hu`xa-Z z+~G*`Q?UWp-psfacax35;RF4uMr9F65Q{ku0& zT$`)3Yr((cj6TnGr^k6mh!;>tZ~b~JAYMdbb}3*}4%NO@J9`|^%yMV?}HApJBKfG^e3XGH@yEFN|YDONQ0ivEXyt-yG-aCW+8w5(IbETCy!`v z(o&abK~7p``(+g+C9i=KyDWpOxSj7MXH>Dz{x6;))#ZL)vH_=kQqiq6g2xDU;;2Gg z=F*B%PKsn{5JuJrQ{X*QCn)jz_ixGY;Zz?Zd`(y=!sPzaDW-dplJS{@bM%|q`%ZyL z)KacDwQ!5ED4zz#Ll&86VanA@b^_w-Fp1%q!A_5ryt!)IstTYDB&JP?Bwb$3k6)|X zWl|i@p&-s1(vZDo;M3>|NtC2~iI@$2aP^n@uxA+V*WXtZtM9T)1jbY~(B5f z^l^lhk%6D?gLBqth=di(3OVhj+umItlU8GfnB11Vn3=L33?425XBQH%yJF^87#mDk zA`xUUsPx^xB(pB_+0G)$Cld5txz0(rEPHA!qKWc37QeJ*KgHN!YkPMQ)U2@KT*v)c zOgk>jzLh{if{uf`=A{DDXX!@WuAmQ0vbR@U1SpPlyJxic-_lc{99-W0Yu!w)(So`Y z?P(w5oE6aoN8vQtJPW`3{kN-f(u8I*4!qQO&VaKBj@#tE)dfcQ6AZbnl<;#`8k+kF zgHb3A%Tamrh9C7R^+htA02JB>nxBPO3wCyv_(XG9MhEe>&F1<(d;N(%dK^?CAT6V= zijB2^YMsyPxnH>pR=Ijibj7zL>99o177xyr?Z((f8S$zu)L4&TaAjKHt2nsGiAIOT z79iyx4d05hHK@^%XvqaP5ZKM z1>S1b$z)}#Ow;l{8|UQ9n*4*9EvS*XPoi%1)Ai;ywFTFO+^O_-pV#^W(L3e1ckw%p ze?K@w*@g8G7jstFRe=3TSl9<{3XVDUFbV3}bZ?aKV9< z5j<(7h%xY0EnX>ps`3M!QVG-2_U=0Lh}JxP#B1lfh7`y2nGJOs zkMQV%C^Vi+t_=lJFJ?jmmC>r%aK7wkCf;Kxd20$BjGJiYq|(&8Lr*4H2Xbg`(iq!n zmDlrsw6vd}o5{}sbF4%w@JD`SCH%2G0~h!a$o*Yx!# z%}9`*&DJ3e%`dOh1rm|kDUmT?Ivq+|8c`3}BYnCTI&%KEVk`8#eJ>WiQvI z@TAs(Gh!VRsAh*C@`m@;Ag*<6PB?YufSRp#WQZ2V&IH-CWdkNtB1WuCg2g`!78kjH z+po;}HlAkNxsja?p|CN>Mqxh9eE^VoNJRbm&@Y|BHs;!>FU(d-QX>%M@4xGI+EdfT z855HZf7g2TgN6_-cDzQfLD0oZe`kH+NA8rJk-7^<5JPgQkn^M8c~hnfKx(;Al?8Kq zs;~B)ZSm58Ymf~SQdUTUi|Fgb$CFGlLs$Xes93&x5_))6SvCvG!~rYO?{@Pi%pIZh zYOT~%NV~=v*ZYW(3xYO>t^ZJuB8U(~n&oFzsaUZ(rGvq)X5#U^tHKB+q-2wQJzoS- zT1L7f`Pg68w^CVOv%qM zSCv3t95yXO>|FPT59n2_L4YV^H;4_ z5S}sAt1*3%GkOGDCXHg#ok@~{>9KZ!4&yAClqG?jh1^*{Za2WX!%*SORz5^UE_dK< ze2FSsXJWaNjEltnbqR2Pmw6gh!PKaKlq`dSP2_reWRP*lW zSQY<=B{s(AnDb51WookqKyPAjJy{``(4#z@tHfcHU9g@6jTb8m)UaK;Es>zPU1En# zedA;fRBfI_0?>*|IxBzdRv8o_Syu2rbg=%@%QPjUulY~|m_J-kG1VR`q7u@$Kr0~; z^r&~6JtIGz*`vNEKm-E2bLIF;FE4D}9`>uStw~<#1POqs5wfh3+Hg{mQ8gK@!s)xr zQ#)XaYJZQhq33G2hA z!30v&~Y~PJ(Yn`F&qbYs54CuLSZfW94-h8UoJQCpYB+7oHzr zkTC(Q>-!BzyIFmDQTbTJXT-i@#lc~p{**N^S>}6T?Wc(Q+BQ<;7{z6;$zB38N|ziy z_xi>nSWoIQ7WI+^nN8QXm|*VJ{UUK1^CY|1l8Lg3UXH5tGsXj){O*64+L;?QooA%& zq@&$3zEFh+NT8x({P!0Fp>0&yoE4Rn%InvrAM{vDs&gFu>J!*tP`&wBF^O^!$h3(dncD!AW?^C zWMn)2lFvR}tzxn;caTOLjcWCMl}u#%64`m$$kWLU5a68BcX}p?Z)TqCq`<);FoHEL zofIh=nzz$8&I)r&+@V)mR2Bw!wYA0VJ5ueb)1ADWT6&5#({#*wlG>18`)*sIp}mcVT^Tn!55|C*pTwuc$(dlW~!u z+OT)96g-%P_D=j+9JEbo&cK>&X!m7vrm(?J z4@z-)Aq(WLtNoGERke7T9(C-rtl5OA+I*dg+$l(Ab1WQW6-C?@eQtB6ciZrlfspDH z1i0$q_yWuGL+Lx+cpIUmE)7&#AuNbZhE9Ka;d9c}gj;<^GFG{i@DZ5hn!vSnKt^6$ z++OUWSuQY}JjI-eoga@YD-t{%zns4d)PJW;lX0dow?38kSLf?}Z1GtxZ-cm+;2HEw zvu5U~*!3T6zP}XYVSwox?~rVqvcj5S>u_^&`~%j$1X+wt>Dl3{B(Bu&z2jE(U|?^4 zc4L}Cldy*{IoQ5*b>%XLwk8dh!lkQ75r0S$}9wI$0B;GBjRQeHf7g!qAwA z%Cp+r8uyzyfIx19?RiY2m*%CF%^5OkE!^fCoETwo!&X<3dcw+d$tLbc?`Mi5q+v$n zi%)18w_bbe_;_s!MXI^ltl9D+0gn7YlNEtWt*Xhlu$85%IC=QSxM8Na3MqpzFO!?- zAjiPW44L3qrVpKil1TTS&U$YI?XvAnsMN=PBvBHuu5bW4*Wv@dJfaz9CeC{c5|(%1 z{ev{OR)`wqxc}O$>sr0DAW;GD=PgN)#|!sNG^CQGVS=?7-}o9r&E>DKgJlIZU1c`4 zsd)x+%QAa?J1$uc&^4R9=JzLtMu7tls+$xm0=i>l#yix+iI4kdwm%;t@)m)4Ke+XA zkY9kpz+}(;jja0^hCz(fOdiI8rHx!)h4MJsWMzj>Sl}%V^5}J}>!)X(1kC@1)`0bVNpWsBsUjzG}l@W7`D;xUvWNu@dPacn)Ftz7tJ$i>`>6?SFE}W25 zaIygz)5nlX((fu$D&EQurv?!3nZA{2!*grb= zWZS=Iy>@I)W8eh{i%dU)*BMf`8ujw@tW@i4IKuSn-5ch{8?=?nk%wL|cZel1-Q&;9 z_D&Jp-k^n5F~{@w$ag|6=bT@JGzzwzzZ(r58MzIP-Y){=?dwBrdizb|(-M`xX^%g+ z-OvjR)0rdihFXV}p5LBbCTePOQlF1dQM*fMGW0QWxD8XuO0v|+FFioG)(6wafc_H9 zWxrU{$|*lV!*+mRrvd19oyHDj`ZP|3tW~{Qt6Hmg=o%LdwYN%X`Xj#_*cZkkN`FZy z$5fzZ&wE3@ao|=i$ig&C%-Bs;X3js$4$@hsx;KtK-uqO;eAc==`*oDmNfV$_$+T}x zR4W{%PDOhp_j;k#9O|yGla2i313u|c!D{Ph@%X!!Zy=oKs`kNufNj48Q`b&{4O>kP$jS}yXf&UZK#M4v~}B~70`$!?RX%8pQ(>$3>wZ2;bQ zK>HvQJ@puu*aAB0+I>MNrHy5iA8f$xQM2Up=v5-3{Dzrc@g2ceylv9AF;q82k&lAl z9nq{J{!MY_Qb1p5YeWt$S829njV?}by1iRBv_-sa@{9dO7_paWq&|8GkK1&DjnKw! zw$Is+o_A}u$NXAx1-_c{DF* zM>9Do?H|<8FUT+{DCkp!bw#Mex~Vfy+3p)IU2hgq{T&f4E@Ia~v#@pQ)I}p=ab;(R zUt$gD3B}y=iEo$O6uG>m>KtXKdFCb>#?F(reFFLq7w*XK#G#Djg2K`3u?m?|e(w@df11Nym7F+MG>1Thcq z{$D%+{TC?-{$XS9sijdoS)yrWf%hJb#)IP33zgrEbicm((a0PZ6P z&c2%csdazONvYwf;W;6>7AeI!9yzkTo$StkY(RS8c83zZY16Ec-1rjNZ7f!`Wa9Bx zX~l`Se!3yXIF@H8oYMYJcd}tGm~ARplgO6Op45g$rlWN6JLAY-M&l*<}7o zq^##(2r{DURU`sSWxRj1dn6!77O; zu4zRntf5|U%9*ObQ;sETdHBKSov^&)5ISOW(yd9IRIEn-a? zRB1C|)EjvLv}CcL=0sj^7Rq_bATv5x|v%#E-UJqWwq8GE4@ZJsph;m_F)d3d4`Q~v8If{ejNiv^omC8C=yA) ze6GoQ%!Vj_bZZW+uv`1d;^XVM;?M8-<*)L-3+q|Wh;;RQ5F7cD6ulnL-I}xJ%HEl} z;tfAPsfx6cL1|**23~n&+*)2#~cBrQJxA{Zb0a~#lp#JjT3hTRQ)tU?w6cX zL_EpCBjA09Ka5)^rdiD_tRaml**%9u#U)`fjzl1)Sg1rhX;;@&6b_b0qQH`TWA&=t z!q=U3Xqz4=NHD+&p)KdLY|hT@>m&_KTy&aqM}M!saUqV%tvK@GCJ6%})#LE?T}@nK zrP+?A_mddkSYNiuqGuD`eTiQZWCq`Z;v!_UpM+w3{h@pE>!nR>sv_P9`~L9#)Wfh_ z{Kkc`QP}6^OkKBnzLuMojiYN@z2#HwboJ4>tA}I{zQH0R^ZuMr)T7Ir8|Oa1kID`B z`Pz-C#4^#ee2yrr>jcJ1u*3Cpj)fA4fexiPk)g``gg!-JWmLU$`Ak}R24N0&lnl>L z+_2nmGzujIslLLAsCn$XA>2|?C$H$hvDcZtX!{l6qX)*u<{Q(-_7mQDX(n|<((;+C z9Bg7YfI`5bH-%@h0aVk|!Y^ppvJ0%Y;I5u6?ll$)53}}4hag?F_||k!&wtQ!4Kd;9 z5q(msy|&bzD4^xPmhiISiWim5pNl9edgjmZOBCS}Ys*tE%}^?@ElMi+jQ=*PuP@T$ z_5w0`HXyj2XqPy!QvG;^+3~i`0yT45P7liz>ZPZ?S1?yA$CmN!r|q-_uc-2 z{Vm|{cX#{%4yLBk^r`P3Ip8L1dzE_l;xf=SEqM@gJ~{4lmp8PK=<0RMpI6!(GFMo$ z4(((rRUE{&lv-JniENzo&wrO_Z7Pr_u&U=!!*jv=-?Hw4GJ!duzi^eOZt2W4=!h3( zTvn*Sj+i57#QvEsoCrJMkC+f(&ickkL1T3fX^*0SvyL-k4|(YD@NlRPd?N6Ongt$=@pH7 z*!hQB{_C!t4D+7qoBt^I@%gitT%je~UOkNEZv(dl8v(^S0^fz5&IR1#shJ{%y?T%D zF1)u+@y*8l!F)3yV&t63M@nOWE|{D+#H2BD z-e?TYS&Y-^$I5SU^TQot`Bt4DvBY<1!*MdyO2um4GrVnEbd^jzc&9AM(eTu`e6ot- zElFahOkCyj3SO~WO$S3}ZGd%84p1Ybpsk_ntLmpJVDk=!R@EX&j~AY6U2^kw5stEy z5-NijMr+7V_-@62U(9k7=U(`ta;Gk#_L#-H)Qwp3^avgPxOEIqD9ANux56jhuY2Bi zYZltzkzeDJT_h!|hKgQpfDOk@89#miy=X$_TEINB2JXHowD8XbSq!tH{-d&}BoPg% zUL?F1@a~P zCY>_=Xn>X4*=fQX)V8dn7C7*<5;Y!!`u%>N%3gJfQVDgNt44q1fl)Q!b8G0t`!xTvEO|wg%&?7&D5sBY7J!F{1n5ny1Dp)N! z%=O2X9k8V_BPc^Z!~>1;CvP+j0X9Z; zPu>F~mq+$?WNl9q->_GRsCdd97U=`~vyev-BMhYhZ1-Qh zu#DrFnoFmuMN0SSFV0RKJKaBbk3)wvlXNJ>CB1BBEGD1GU@e%sNp#&{xlesvL2}+N zv9_2K#veWJ{Esm&9|I6Vqq{02e$XNnqgLk!+yjlXt0Q?bs<7_Jz6-qbru!PW(88bh)XU|mpo z)9Hz{npi$OebGVN>gf->t#2^1MuRRVpHXse9hxHe`hOCd7kNN%vhQUTtXZ8u2dlM8 z^ILE!tw$uX;w{AyWe_c%f)(Y@BRakL_&$#Yk%)*cU@F|l_h=lXIsL?R1COIz+#1+% zdY$>O7;*F9NfM<23U14fAI8VNmi{NuVfprY(Dl3tbK&eA;rJ`4N96D@mw+r~{LGyo z$uOXa(LOk3!8W$VKMXTZN%0+!7^Nv7Wq34F-1W#i9V;_PRE{24}#JXh$z zrFI5-*lc}3I8Zzf@n#EulYa(jRVY^j_S3JB;n+wDN&A8U6V}aZXY6Z4hcEivc1p!r zN}#PdnLGtyW*|{e^vBNH7hbW3wh+O~s&snqtTOZy9fxAPD6wUHJ1fO+HOpx5_{uMD z=BlE29OpwE<=PBvJA}Vr8uUphRU}$+q*nhFy#8vQua@ng^2OVrDor+5l+9?ICdK4K zE(NR%k8zfhQVxzXzJ;+jD{e$cCr}xa_!sf`58;vpw51HJ-?Wpg;WEZO-xHYm@iMJU zqZu2dYc>>)zm?6Tx|wPD;ufAeL>FMoO7^hccQ?6kkG_zoqO`aZuyS?o#3rxk8=9a z)a@I};nYnU)jN>iy(2G;r_b#S8;dsWxn>6WKnCy7Z+^LWnLV3cpi)`uae%siPgUB{ zz@Yn#q`Q6XG}NBa$9=R}yhWQNfD~>qF>l*rR5vy^E!pQze3|MEy+#WM+se!rreqNq z`#A=Ch?p{_8R_pEwaz^{lVak8y**p9*-M_C|ER-(hg4d5M$K_rS&H`(s3Aj6h+^m? z^M@LxenPUg$itCKY8J1z)Jyy7TxsBsmlEZA)R?W`H}e(wWYSb9vJ_wZXQ+-xS<^zK zs|cT4OIF`CHP<1d2WL~jNrP*EVd6ixWT|m3|J(LLVA?6-g{l^1xeSI-W^H48jJ^~e z4=0Ud{Kt)bq;|kAHHFBV?~93m!caB1{y>?u!r0*AshL$iBWYg$Z5Cyr?BQ@yhr6$Y}lG1A?r21jVZXF*TEFK?s z8P%|uk(zi-bX+cK^Vy*pR#Ne~iJE&>izNX*@!uX<(NQsO(J9as6d`$nzFWe&%3GQG zUItNraH%#CFqDKXp1-ucCxy!~!dXs=a<(q+L^!1wk{~82v7Q}UshdrgoWi4J$)wW5 zE%vbjYF=|+H9u0qDDxn7$@ymUCcWuSOe~bn#T)Mb&0(~a2`tfr{k@&)@X`*&6b#17 zw899wX_yD7(#p$OxUojx@Jd<$A->YKPsgx62hsfp#v$axq|L=w9cTmG*&u4_Vr{1(#O<@lL&j zlpiMVO*teCOcU>}KCPX8Xs*olnU_Rgk#$xnH@dv%>RQ`;dRh1cervbL(JLGHy+*E1 zFMHPJHx5U+Uf|D3voE8N(%mR~=1Q58e7Yu;XcM-9;}P)5#tG0F8gv4I4tUn^z9vxD z&_ui@d0yXHu0%^dTOr>)`!ht_sgVq(6;hJJas1;&8Pm+tACi{;xGt?Jxp2ewjn!>Os<|gp-tA`(Dz1lW zuyB~(y@j!{WkBS!pwLyrJt*l*?yKjfS2dZhNV3XWI~ASADyv{HDU%J#*oK8}B~q>t zvm$(UyNm_<)JG|2KBBRsMFr*sqN&pK&G6kjqTniMI#u8rrSNNkw!QHhhM{S0RatU~ zOnhVnIL0l^EN6X6Imvz6RGIpcYUt4TOtCUZzJvPi=k8gX!zH4+XmxcF)5{@RlJMx< zqKEAHNkamQ=g>Mg!$TSsHIZ(Eyg!ZBQGJju1g3~1M~xjLZE^wg5yX|X{+rKl;)5XP zALKhluFouK;lf9s_#^@h`4eH z%5eA2i$S9yG_`Baf&YBy(V^~BNP>Xn7CLHWE?M6)RL0U$j$eVUg8vQ4DPMa_jyggQ z2?-dYT9PO-L*wV=&(BT+cb&8t{X0qM-ii>$fUB*!)d+E70`C1>$j67~5g+CBJHT9T}kC^;Fy2WM-uA zA`;_!HvhV79DSjl78{8uo#@YYHBtUZsIQcwHPF~=)g!Q}w87Ftu4!!P4qSP&h=<~p z7otjq%pcz-J{{hEZe^V68*SX$wb}67^!8uXAJ*yyx#F7jpsI<)rs5qw}><+cLfn-5nue_iP86dj~Ao2y42R z>u7Sb?-A}PT38|^${!D*ae*vpW#!;gE8mo(owUQ2d1_+*Z@l!A^^6wqM`p9fB|R~& z5%#DE9@BEMEfH~keo>ruhD5^kQik!obQ%aUwSc#4RLNFo-}S&F)&>)d{Ar5%Z1#c{ z&N~X>v8K0X2^?C@0)_{V_5T|@fO~^xfKs;iBnPJYd;=sQScS4ej$Ws; z{Ea&}eDnf-H-cu?-Vudsf(VrB35b+s$2bOOt^=;^eRXyU{pwr;N&Pz`{kSzn`5@P( z!t?BC%@e~E2UBDkj@0z+(a@lnPsBv$9GGjeY(mh9&6h?H-0NCjz}|uN8@*MTpqBXv zXWvi&o~cth!j1eRn`zfEZjy4Rlh()}s75*hQ~^Hw+b(oEhbj)GFgI5Pm!j-0`UE-~ zEE%{pC&2h*}LJW<=m-xW&ln7nbAQ{#KOy)V`@0sUnda{HC*- z$>@$B^zkiX)0?z5S+xT7Gp`-|22Tg>R*$2s443||a&&&A(l;}6T31lV7lcZ;03xE0 zur1c2I*y})U#kx``J$EnvdWc;aLa@V(}`lTITcifjQs2f$c*a#k~KjFm|YoA-$mz< zt;R!jqS5Om_YTT!?yTlAx@*-_W1Fs@Nlr=Y*-lWWzUdZ?3CJ$1ot%zpuHp(lB~ zfp|dA!ZVh>WP5zN;)}NXXQ6@1>A#{))OvVX%#M7%?$`30tVHyeZ@5UEOsn14q%0^` z{$w4oYpmyt;%EF@z07V8!btR4e|abmupS60&XACounYudEu@((?ETzMugm?FkH6C) z8EUsD-AouW8f9-AJtLnbQFw$UDMDjKpk_V`S#dM7f5pBLe6jfcP9@j|By_Ffq@qfT zTbd9BrqcD?0cXI2Z?%OY5O(@si+2dWIeF80aTL0RW>Tj1yG=*m+)wL%%+h$mFCwci zkN(6XMJ-RTFd+tnlM=Y?gS2>I4}Erk+%SG8A{ObF=u7Fk+mzao?jPi2`R!RWIc`~} zTB{SV8#ZW3#c-Tov>C3mi&IhY%dB0#-BVK4y1yaTM9}Bkp>AX@r}(>opBQk`J$Q>p zQ_Dc-AzginC(#6?%cl-uhIfQH9d)NKU9|!b8TGAUbPaxOYS`Rk z_yndvt6IERu2{B>f}H=KWMxU~LW){vE0(_0DLSuK>8^y_{9FQ@39C4bOJ)7&mPb5% z-gIM9(1w$|qjzUlg18QmdZTsPs`?J&Y=#^5p8V+IY1Ss^w)zv_x!~s31u^P|P)ddz zvo=a(cJ#_2N;#Zxko|34>eod0ZvjjdI=bsl9HycP3$b@ii>foXc{vL= zc>En%Vz>`s*{uy>JT*OOJG89@(@*(gwOz-d6Vw9yRzN;mP zs}n)s8Y&hCQcVqAiKq}Wyv9J(QA@*xzw^Q-YPEUg6UjSC6BmLW+^%hWR`1iJU1cuhWUk*I56@S9Hc#<)Kx?)VVn+}!Wnu?cx11-qLgMvj z1Wuc&yY)aKV)Ens_DHSmS#3iC*6y^^1Qwm-DU$I~`{_glwAKVuy__(-({g{&ngxtZ zO{F{GH*0Unp3$E(7!PmVdO`k4TT?&2i}pQDcMPT@EYwCJl%h=fzGV$YC;-)Hh^5qi zl73)`AqG#+Bsto*tR8K9`xpueF^o8FshIhSJAcWle5-ZDkzXSB%q7Z`MUf$`048!! zl2$HFyi>CluIw|d6mE(okCTG#@KT&Je|O*v2C1_tz)nUC1? z70ovp1Bpn2V9lLM$FonEdFjESP0QM3q5C_suS&mI%J<#9S`Ft;t}HnY5~T3Y$GHYP zBJ+~IrZ6JSAW~mp!Ip3(+!*)q5}ZWI#(l3lf%+1LPwe01Ee2xk-)%0Y8gs-5ik@9d@5LJbPsZ2LsPQgzvW@p={6E!hr0%N& zGmC$R6 z+&4j@J>iya0Rxs;+Ye$YrkJL^WXL_x^<~PbVE7f%@eJXuKpXky6;?z~Kjfme!sO+y z0&u6Ev*8@b!j({CkFNfRZS;B~1zW3Jq);ng_erY8S+Z{FyI^^&H1*uV%KGFn)xv_d z4{D@)miCbVEZTVZr{!Fbt7He8srewyLrl+?iq;4#4*e78e){10KIVvO;pXl8=FC^I z9+&sJyRPDQR+4Nli01li3xB3YWO!FqeNllo01(wY_&X-E}Yj2mfb!1x#bJB6(_BXcD_>-sQl^Pqea=e==b zqLG$glezU!BA88?&_ZW zMft(?*{33^=qL=7fh7^M7|rD*pn2Q_Ex4nmS)Xm%LpVem{+tNt6R6DnN+3+)P}}s} z(peoYb>$1v@}!_wlk!RBmHK?oM8Pj!F3q}5b3|#S zge}Rso!LCMmiq|P1CC}H@*X@^qA5y_JlN?q)s>*?s_MamIutiQUNIznbUD+0AC_Wv zl>4XUnI?yYVd^1>Mb~Unvqg^)x8Z$H!D^-h0xxG0GiNR? zo?D@gwrbOkh-wC?e5mH`80Ex$CHGD~bdNbQ=XI<9=<$F}4Ip1n7uzO>H6i@&>Q$IV zy3z4Z(~Idpp46pFfAr|%Cq}uKX1He29Cy)>HBkqZ_}om7*z0>t(<9_l2+~YUoZdB? z1~-LSs_cYXD7CnCL_N$QO+y+^Tjz{Ux=>TyKm@!!kLj4AZZ9bdu~WOt2i0P^311;H zSmRjlF0s!nQoa{RbQxOv1(*&6tTJ`XhO<7xA{o)%FAnfvmjo-OGVz0`%AB&`#)Jh zb?3D8z5dy!nutPRr!5oYfUQAA4i9uFv8CZV)J?pVVKhZ{qK6G{#t{|#=FqD7_Q@|= zE*e;MPhcHt&!?AU8wZgm;!92K-1dmH?Hp{pE!TB?%1GRA>AZOVu~d&b6T&#R%)Q2i z`Q>+5T=CRi!>YHA+wLXGno4{N8$#bjCw~A55;}c%zv^Ud6y{O=&pDe3Ci`MFC7qtm z+x&;y7}Rcav|t#~KjVDovPy5wWUM4PYU2&oPI<4xJmMLC;Q@u7ia#*yZFLnsdTASQ zyXb<4{OLFHq(~);?V`cC2i(*QFn^7xGGDDm|8KNk5>gdLf)XOvW9;fQ z{;60dz^P596r5_~zUf`!h%YZ8h=_S=eR~~{12-Pus(L_9fOzf+98^{f&*c?HOK`{; z*U7M+!O8DdY6UDVGV^7x@h(7RVPH;uXmfcsaVADv^yyv!;?W6-_e#LAiJSD}Bna=0 zW<^@39W!Z1Cs+_u9zwIE!X&_Mu{h1tV~vzZ_#GkR>Gv*+0|>Ub788#q$OLcyZ-}w} zPyZ*_--~)aC9nMTudS*dz3D1^6dYmDC{-+Wp?4y&?>7yCOf^SBwJ>lh1iEF~A1EhB z8d-TCM*KX?-7A`ocl;jcAO9X~Z-3y|H*woW8JyhF$f8AlS^sP2y6&o3^|)Pv?4p8`u61a(pP{9}x;28>@uPQJRas=u&KUSz$QBF<8(33Ep_ zdk!o0?H|bb?&4S*-$s$@m-v+(g$PW^EeUhhU{_!8N9gCo;($%BMmL%a;xGbn#4V3a?yui}pYRuW^k^ow*7 z?lQFc{^y^n$O7cc?-0L2*4x)mtcp#$@T^2N^=rNJ80yXGmSuH*fY$!)~djB^OeO`y_LFI18dfBk}5yC9TI`v|HO(EHC1~ zE0NdmYL$^0KJ#%)`85*})KEXLjg>r1a8=(p+q~33EyLKXUR#RtA5kY86A0U&>byG+-2svMld8*=#o{~=`_;SeTdB(2ZfhT_^y9tN%cr!wqRpy zyX(J6IJ!zp*H2(ZqP%>Y5`V_ltQD$3B{sw+F(a!r#Y3Hl+T)ezLoQDSF>vPWyiXD{ zAa^_2B5nmq^|n1NjkcH^D(`WI55s542h=0*D(Q%R>c$C6@SmPx^^APo8w7%*dpPY^z;Rwb| zL!EXVf;8v8GtNmu1a14^fu~@EzYTh1(0H7qR8O2s^2q9gJ?k|LK4lr@qzvI>fKoqR zuj8jcFrsUHqn(|iErB4<0gSk|>TO8C(1b~fh%rWT2YD@X zplfugnq*Uom*@1u`4zi!sV&sH+?9YyttUzCo1GKJYoUseG%aa$aHn|;>}UsOBAayT zv>cQkpT0S~5Hwa2%F5w|l18zPbsD65OUf{rb&=Q|2FW4=@VOU3%)Tvy#45R|Wb6H#Kbf z0>Wc2b0#qB2_I$)5v?=iuq?tw8D9Sjy-c94Sn<5_$zZ<`cvkq`eTI=JmBQExCcj(C zG=8<@mgQ8@bLJSU#3C)n)oYSvhI#&^VzJNebwrmT7vUvbm}kx<_kQ-Kt> zcSQilcj#PCuL40jq$(ZPEWT4tH6?}3D4E${9GfVdc$mtrL=G2%=UG=BYJbJP*7~-( z_*0!&%CrNG-m^1$@Dq4R&;?v6g+0hl7WO7vB*}uVLlM?3nJtw|OEmh+GgrF81w5)u zAu^riwr~h(YAoNT^~Dg&@wyVTD+y zB<@&yELu1Az;_*^tyBxW=S*C_va40Jd1%_BNoM#_Wint2L`&GB#6xstf{M(PbZY5T z9(ac3c}S&2<>DM4JDBuF1=0@e+}sx_-s*w-Kre}q{e58rI$2*+Ztv=H3b_w zw=|FDmcN~YC7by%Xx?#yvul!$Z3bq{AE_+aHDN|Jp(k9O%^?=tb!1jhV(r zj-g6cX3!wz?v`CEvfv`+^>|K;Xs|_YFfK*(Jf*}(m?8B_K>dooWSDQu3%JM>q<-$S(F(Z=e8v0oRU$L|!Mn+% zL!iqm~j_d7|iKPR?D6DwAo6NXbB*WClXgGe0u_n##6w&R#x_Dr=}pJhE; zkNiFaVmw8VWM~C`hthyEF_Q#1l0(sxGUUXHG7Iu|ij}RWi~k)Ygv-jUyL;Z*_4QpZ zqk1bD_j!8yGvb_$QpuI9ZypM#h!!v;+lrZ)p~z?q)0_`IM+AD#C=bA0r}+tOf>1*# za#dJNVdV$S1m51!0#A$#^Ij=R_mPLgGUw`~X?WL^DUzv8;iq=zP-jYC`OKP zRBE#E6%Au)S!1L2+p#QrK3eB2KlHcZ?h6>pHobY#AIFeh*x~=%twxY1@FWUuzk?MK z7L(O8brq)_*IOo%XqWzREdADM`mMt7>|6BOXH@MYC>i4D^RC}d*Ld6Nuy`4Xd(U0*bU*%gAv2)y(|?h%oR*lS-oonJr84HeH%Tc zw<*5Y>FSkub9&koevRViG_v`M`3naVCo6->-j^SC*eYeBhY4_+^!ll`mMQkik$YOn zwpxUmRPvvpk{dOP);da)NShl3C!CxJN9C9atkpM}seBtR9zO0#=SQWkf%*BbWp%4{S6&2ws+VQWl=xnb#ISul7S8 zD{UkrJ8XvY^4;fRK(WL}t|zeh zO}eV700Z$D0~t+I>=?+kq=j3MTM{EPRL{8hX!en#C6T5jKMEGD?{B`_s3)Zi#98C& zTdaAn_aW)i6UV5QN!W%>`n2RPxnl8`z%n6^S;2g(>;C z$jmvE;-;e!d6@YO3B*QbWSQ=5A>q!{&+IC%?F= zVEEBGDgjqDljvh{uBU=M=E{uO2>)aHR!`@f@&$%#L<#7!BLH^ht&Qe)qpb-i#2SE{ z!)o=sV|3JNX0?=h^jfk}RHiX8Gt2Ye`w?M`Yg>_V;_ zk}Yh~V4J7>a9)$c>Z;4)q5eo#vR1Bi_d{dU-a`&-!~GgM4|9`f-}OGcWb?Hxve-mX zpcIN0uPMdSm)X$la{u<8ljT7N`F8AHs$4HSj+dgiFO>4vR=t>+d~V*sKRN5#o&mU9 z#`jW@b()Sgm#yA3*(725cjOp*@bt^A9)5VUS(!_&)s=A_>{nr;_#`i^&2nLT9!O~8Zkct}J@sN;Pidnj{Q3cmaBpMY=>nMB}^P{hVn%xSlr5tB%19WLjL zJ2uj%IF%9~RX}F!xWrG_b^r0$_I5dU+ydkazc@ZQp#^$ao}2;0b78sq5k0dZ#eGsW zxoO8F#BMeCY2#x4F<6iq{ep;&*al?zmuOCO%DRlT+tuW>3)Z`5<;LdRv%9zhdDp=! z%sHLdsB-LLo49{w;pLA!;!V2YzX*8yfNW9~75>p=(~m68fIS->p=|x;?h~CKomC>K zqmOkG8X8(rAzh{?+LIU_KM(J4#s{8qEwB0E+IlS}g68qdU1shhF54&M$i~lUpQ*Um zLoiRFv7<^w(?z<=rw%u_YKC)MJKOv3RLdP3A^DA8iE?SbEPQk7#gD@tb# ze^;+WXDk9w5+0%IfMN>pnux$$zc9|iZcnQCvwr;YxW+4sy->$N#C8+Z@Tj?uuC^%7ReihWX#tYY``2YaUQ zcd|&i?hc|S;jDv+EImGF`bpMv*w84p@Sy}9`z?wzXYT|j98LGRL?S)K&Y|0-M!dx! zpRaV{iRMZ2m**R6;=wC1W2Oz0|CXcFF5bw7AjErES=;B7=Z2^)yh4qLc;*DBzkS=- z+n0PTs;NKf@Ow0yW z&q2nHQldNe7C3K?4zKH`iigq1jqkI<3#W&$5}We5L6yTU?rz!R^%FVclX-WVYHxXD zk&^1c0|xXX4Q4v+Jop5@A>I?iQeVW>7E7m9+Vp0cTAtG`lpU2A6!{jZ%kw0Idj_fk zFwdZwD8G|PcE@)TOl)}=>)41Xi8M@xb_`vv1OKhRM=X60mSfD+6xdT}d~$-D`CtVO ze1p`bkr)dKTF;Nyu}$Vde8m}q!Nm7%sCxL9EpA-+#Kc{^TZXhWK6xJ*NIuD*?QTxu z!^XZRYqsN6 zn#WF6WqH`7)L8^rkVzT%r4%!B#vd#Cv~hojexV%LeTn(sI`se8)%!c;a>#~vWI{V; zXHh#8PTymF^uZsEtYkH|0l(h(hI#tAK~;ECCn30&w%DWSAC1(H%>%jTH;D>#^|h`e zU6CVQ?$cTie<3QQf_^&9q0WLnw|@^dX3A>SlTk-j3DuGnIz^^F=}mRz3Chsyn)5jY zZmOiZSY-|k@lopbX)c(VG8x>ge*Az&dT~2$&&Tg0^|HmP(=gh~>&*oxwu)w0sfRYW zS-78!!)|_*GiaXF7R}4bEM;3^R}m8M9;5aFYbV2YQ|^D$^hCpZlHX}>5u z=T<=lhaFusYSDy6K#m8Onx9jYE}kNn(J;~WL%HpTR+3|(nB@+V)~ss>cke^nYrzXA zH=8oG46`~(?u(dD|sSB8j??n&{E%8y^NW zK^P_h5^Ii!;;(#p)zgPukG_I1(YJZ#Vv<|RLpyA2x!)Ho$Cj3Rj&AmDbQei=@4dYj zSDK`qeIvXqiJMihj#R7YZP(^Ia5Lt;gy(Y%{}u1Cr#4Y7X+a>P`g+xT;u#s4XX|s$ z;VFD;t6aiA?LXbOdc38}?R4%wAtzEq=oS_+rj1)MmoOI*H%r~O%0M}r^pp2e*LXgh zSn&U5?v3I-hkIg^y{8%;OywO>a$8JEbRedD93VTwl;_N48ZtaAiyDKQ=X z|8Xk6X1Qwu#wHS@noB{%Fqp+fAbKvQd5tnR)1OL!z$#v!oS$0h&@j2Rd%GLA)ie_9 zzuZ=MfU02pHDQfOz4GI!k1L8RMd&(dY;<<8u*`^bx0?G-5RGV13(GOuGA`%qwdEMrdURviBUs$7m z(|S zUf^7GKfy}6zBAU8D4SE?;hm z%{23lZD)49{Jo*t7gz605w|dzdI?J*@^*{gG`kd0|C_RCTLZSyzh0^XCq5i-nD>^j zsY^U`e`ig}c27O%kl3q;+wp z|9neoeZ)@NA@^K8npCBm}|s@7(?uQX(Q;%ZXExf z^X2`=ZM+L!z$$|Q7fH@fz>tq9mp&ss$ynI-)99O2J+Vrw}X=U&*U z_SH_O9oZqQx<1HR-Amky=0RrU;rU9lP<-MpAP{fG@qVGQOnC`631s-ZlRjq?TtZhH z*X#TAj3aGIgAD&$4A}Rfs4VnYg}ggTE^_Xo)pSG*6RC8RpPp*-?Q;3D1bOg1TfY6; zY&kSOPCv31y(Ru{JFUUKp9;U1`h%8G*O+U<#8{qcdE_29+tF{YQlZbY>ri^esL&uy z&{4?O3Wtl}nMblU!h24c4F$FohtnfxxzXiLVt9;VR2bHv0pl1`L@~#v)F3OTyGq{nK&7` z!+lh_$-*hC^*IhTcrU7MiwQd~9^a0T zsq}f-kmNvhff9BtrgogOG&|O05)s8q+SO6}|D^9py7E{;pT+#E&+!S|+|AsOY~34{ zj;iyU-``cyUVU$j`*s^jMNmrh$xF3F58n=%AUw{1(2L0LJG1TJNgBKbVKP{y} zl)t?YiqQv!??fNF^Hos#DPQ~LOMRtT6BP}gN{~__ub?g~SD#z9n&3Wi$YL!6*?-_n zf4T2CzQ%RB#!w~`Hd9(lej_|L>-L&nJ!f^_d8BWYI_MW)PdJ4JXfN?M743l2pj6Gs z!3_gUeF+23>s-@!CKCe=mgu2Q{%< zO$Fso1?{BCw$&~y-XOEW(>i`!Wckl}o_#Pi!^jMCcvt@$W-gnTKHmJxMQYYld~~qI ztfaZ&aP0#^Y$ha8ETf^^{jw4)4m#m#)r)Z}l)Y!0a#p@6#g?&RWR;3-byek=ALkC* zT0P($MGM7+2eB_f3F&P}4o{CB@X@|@jVQIp9GgO(x_ps^y=iRMIyRt@nJI7bdok*x zhPY?ni)vKtzl;zxhcu`2qf@`&B{kSRPusOEE==lLF&!ZE4&fKD%!?lt|K{fBrPRz0 zt;Q&ReqqZLO($y2nR($g^4z)mpBtd#LehZ_pZm_-2^GgbOAuDOXlaNc!ZGLr!V!5Q zi=^Kl7=-MznczzJ7+ zEt>ItX0S+=*mk6&c6!dj#?fi_dHG?pm`zq&^Nu~*c>ah(t~|P~F;a(?S(B)+NTTS1 zC%Q(&wxMIBgJh<`-N%<4Bwj1T^XF!~tJQ%SIX=uX1*(KENvlvk_!$W?ZGl6b6LPt+ zYM)U>Qo3nE+V;e*m%pasYAx@&NJy3IGZLiU5iMN&rd$ z$^gm%DgY`0ssNw>)c`dBwE%Sh^#Bb3jQ~vmFo0%&7JycOHh}*G=)V9R0G$9`0Nnu3 zFE1~>z;_=&KfnOMAOIX-2w)gs1Yi{4KmYwd{W(ZJbn9{OG-peX7KIN?=w zBl_ywuCyCHJ&iKfl}Bb)f6t2y?-TBJ=h3I7_?zXX{`|2;;`m4dKSGxw7A|KFsy1GB)tdpZ9T6X)O(UGDHP^b`n!L0f&PD>Zv&4-cL zPl0$GA3Z3m!hy*gl`GCQv@yDj`xH_>8|nQg|SMTR~W2V2-X zi!CR1+5PPvtxh{Yk&r+$SR?o(_=Dj)NkG?+0RtwP&oWq8RDDDLB3b7G25OUSY%RIx zCMHt5x(S(EnuWH_%(g+!91%VBMo)%&Q{!cwbr;+6*R7q-T2xOhnbP{F87mRgj9n%p%5u*x{ccM)&uf|L z@&mdBC2up&^>K*XrvG?cd$lgD$oo5<&0aN^`_A>KMztTjdCwdsm`>Z|SXu6W7yM;y zId79l^~(3?)yJn%g?j9CtPC;NUfLnYWDy~JAC8&0eUH;3oZi)N`zNHryB6w+(e{md zS=4w2@1`HY7=IRc^nnAMoGi)>vP0}eR?cpmfJ5y zCHHR6h!T|5Kl^1{uTWD))&2eZ>=S9om)jblhbH1LbjOAVuOn7=GUei2Lp&cf_Ez4i zjGy*wRKpoe8C>-Q=n3f&u}hVYUCj@`0;m-@r-N**sXMyi$8jnHQzcqUaqps<3s

    RMz|C8>7GnJCVHvK8l>HN=5 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

  • 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 bK@FnJK(z8#xR4zDTx#C`vtOwFEP-v49 diff --git a/Tests/HwpKitTests/Versions/2014VP.hwp b/Tests/HwpKitTests/Versions/2014VP.hwp deleted file mode 100644 index 641868ee285fa65c01ac17416723c9b16c19361c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8704 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 diff --git a/Tests/HwpKitTests/Versions/VersionTests.swift b/Tests/HwpKitTests/Versions/VersionTests.swift deleted file mode 100644 index fc900c6..0000000 --- a/Tests/HwpKitTests/Versions/VersionTests.swift +++ /dev/null @@ -1,23 +0,0 @@ -@testable import HwpKit -import XCTest - -final class VersionTests: XCTestCase { - func openHwp(_ name: String) throws -> HwpFile { - let url = URL(fileURLWithPath: #file) - .deletingLastPathComponent() - .appendingPathComponent("\(name).hwp") - return try HwpFile(filePath: url.path) - } - - func test2014VP() throws { - let hwp = try openHwp("2014VP") - XCTAssertEqual(hwp.fileHeader.version.major, 5) - XCTAssertEqual(hwp.fileHeader.version.minor, 0) - XCTAssertEqual(hwp.fileHeader.version.build, 5) - XCTAssertEqual(hwp.fileHeader.version.revision, 0) - } - - static var allTests = [ - ("test2014VP", test2014VP) - ] -} From e04d043e597f234723547e46c56dfb98e277f0cc Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 28 Sep 2020 02:03:40 +0900 Subject: [PATCH 15/19] add 2007 and 2014VP version of hwp --- Tests/HwpKitTests/Versions/2007.hwp | Bin 0 -> 8704 bytes Tests/HwpKitTests/Versions/2014VP.hwp | Bin 0 -> 8704 bytes Tests/HwpKitTests/Versions/VersionTests.swift | 32 ++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 Tests/HwpKitTests/Versions/2007.hwp create mode 100644 Tests/HwpKitTests/Versions/2014VP.hwp create mode 100644 Tests/HwpKitTests/Versions/VersionTests.swift diff --git a/Tests/HwpKitTests/Versions/2007.hwp b/Tests/HwpKitTests/Versions/2007.hwp new file mode 100644 index 0000000000000000000000000000000000000000..8e06a8e4451122eeaa5aaec37d6b3b985e62111b GIT binary patch literal 8704 zcmeHLdt6k-7e74Y;UiZ;S`=|rQhZ-Q6s?qeUUf~%e!Biby~JiHK30X;%<|%s!~mo0 zhMJh5C}kH>1VKejSzuKRMg57o;HvmaiHtF?@;kHaD*5^VpZcTU&$IizXC7zf+&MF6 z&de=5*21tMwRI^xMgzeH9#lJmU9EB}Oj}#>GBDNAvIo`G)wI|Kfyo#253<00d{;Vu zFX;c%0&l}?{Dp!7hQTc4bKxWE%5^3eX!IwauS-MAeo+_My2#X?xw^>z)iVEN{eR{B z)BXQ>Bs=37IxM=_${vOMUaFBC4%1);ybmlQ5Y+gb`@AlmsB^)H)Cfy$5p*7&5O_+# zE3}LTE~KHj`h#F3uKlT)sz1q4e|_h_4XT-I4y1!os~Uao9UQq9{ja{%60EFfjHbhB z`i#aot!nIU;kCsq?@sMUV*#~g69n~92jq^3#t7OsEo+9HPF-_z-qQXB|7TjD5qe%Y zXkZ+K!A$%Gnj(P3ALg1$LeWQOqlY|=dV;l8?U6rC=J7HoEZA@MKY!HsA^IQH`~mtv zeW|5cKiyO4d(@>pRXv|Bc%&Nr4fQ?%^nWYr%G6its-NmLt2ggIV{ry7R-Q+z>r5`_ z`4;xzqvTSRDb<6*YqN*rJwEHbgS3H7Ji`#)V#{Wtq?AVml1M=E21@m*1I8Zi*QG@LnsjK5gia65grIC*9m!Ngr_;* z6?r#vn%4KkbT0&h=#B6~cq95Cd=ONoA97!F8nZ9x85U?}itcEr2GWR;!+rY)rotak zW$J;)Cl9=dA;(lsPR@e|4=O4uj7DQ|adBQ=URGAtwr$%sY}gPN7q@KLGObn{5)v|L z(j{~<$$`1tsEdV02Q-MU$`W>!{KM6V;FNCbiKJW+E*$r6SkaybDo0O$Zj00AHZ zfCG$WK#V$aS|oabWb@>EjwG@~V8}{2SpWtN=+q#pKu`kj2OI;e0*Is|l1LuCPgD8R^Ktu#^YG9RMkaVXdQ6~u*5-&{6kxO!r0E__oS_4o6ZU#EZAWEkNNykeWoFuYR z0wW1>DH0?t7&V~hOaox)0Mra96*`HC5)mZAON5gMD-lK_a)|)`jRw%`9t}Xvfs)l3 ziFld_dctQDP9$t1VFV&yNnim1jRDj;Isj$O066eqb^1r<=hTE%J~aQ+XTYGR=GO@% zgD0YzBq*u*BjrR3L<0s6bSe;85d45=fKvcV^n{3n2!!y2s0m>SVF-~E0>l6Y9q7^^ zO#mSRA~@h!DsM0iKu7otq85oV!8CwK0$KxTbij$A5`g8wj{}AU1u4;y6B$G=lAjW8 z?}#-d@}~ujE>e}DWkro&La?8p_KoFyBUOy{9Y(_{1hrOBM+#~|s}?x?YXokAzzO)* za)O2vIIY0(JWmfA)wuIhhP);Qw7+YMc?X~Y2B=Sf!vm;xbYsPY{fix(x(4XP4F{LY zI*wY)rha!QO71au9f7a zZ9cZ%Z*k+cqjn@8-^j*wos_?0OVMWkjic6$+PU>)iYjgTx%{0er+(xPu4p?t{rfX% z!9`mq6{P=gc9-U2{<_h-ww=q;R$e<-uX9Y=qw z%-nvdK=2MZug^@oax7s;l>3<7JFXTbk4u?+WcSYNr^KLwZ^vY%-#nW!@A~;8S-Wms z$XVQ^-J97N6&H1J-KHGP&aAvrxN-FQH}~wmbNzH$$c3YOvZ`(w4yvNsjoq7lx3at_ zWy-O=d+t@;zF4q+?7qGC?~%&u7mn@QhsLw>H1M`A!G;KjPRWKvP5YJ`7R!cvmM(D~ zA6&XrJ~g>?ncIiurOOq|Jj)_IRtJ}T<{2-S!K>89bg##FWo->y`giLCWhYwfI1Jp^ zIqOzhVcp|pG+wO23VMIBMraW>h$RR*aj^&*!x9lR4jK_O7T!kCSco2Lx(~^)4;l;o zk<)k>fSkt1U~}K0$Y~s0fSl42PW4%k~w)4qcLMhDUesn6XjU<>!f!iw414S&588 z=7H!{p0X9mC4TF^_`=TdGnPpUkNza{pr+7Y{e9-Sb@!*v+LM-&*>u3_rB~YpQ>KUvl1`kY;ZMs!TsS~$P=jg&8stYn=}r7pG4h#7FXJPIlg#&m4u zYSVXH!U~rVn>H)m4v}_MLEnyl<>o%wl|H&k`>3;QleOPvUFOClUXBd89X&9s*T_z} z*|sZWW$PNQ}coXyN~p!U(`*;0RB z%|BUx{Ke_U7Adw(wD#{#*__?&i{mT9yQlYFvGh0pbx!SHFE1U;Hoy04W~_UK{%)*$ z-kzjb_p1{wG47uhr@j{SmD4XrxYY?AHkBKaK5x}0HE(BfzK>&}v2fxwRpSfGzG_=G z_r%aWtI`=&SMRx9_`-J9oM9o~#24ob_{lEmvjsB-@<-;~KjC~Qbt$Ch z44W8tGbqYx#;TCCO+rkMM&c_u#m-f!mteJ%Q_+{VQwyxRUntAilvuF$((4~rwqM@) zVE$(3@gL>()6e?h_Ae*r#N1osH`q&2rrzRJ{`-he+Vs<==TBsmZ;#72`i$ar#`B)|WG1O6=36a$1K~zF)t3FRORJrMv%GGIFduuj=OhN~_XNAD`;qIC|Q4 z{e;5!xKS~ZZSm~n$U#qBaoGv}ilMWE!e+idD^xLj+Kk7)U|?u!WZCCvjQL-qu;{Fp z7WvDDj*W7x){LH+uv`_ZQjH85;SjTA@V2*>93VHn0>rn@s5`AWr#~|$;@h=tmf5Uc zWdCy4e-HR2{$`T*2)k_yfA2kT%}HtPgCskT-9^VeC$9S8*AM0=HxK#bWKY+Wqp|t> z@?1Mt*rneH`1NXuQ~MJ>qr13vm=?cp?bts~yz65PFP%P5BXYwiNX-LOU5MO51AK#M z76iZ>`29qKH~2u@Ndqyj#5fs*sTr82-tf75Z;YnCDCLDQI}mwK{Qfl! zzeNDVuW7%&`d~>?w%!%i^-zVoeZJyk6FhKyrKmZFlwlYG*4Ai?oup-Q9bnCH9fuwyEZl6l&9%wR^NnuhUjzD70Qph0&QEH z5?-z8hn7WFa`wYN46vnrDei{bi*v`A+?2kr-NQFtXKguWx($2JRG*IL%-Vf6G(GP< zmUC8f!CWB6acYjUdr#KP_GtIUN@de7d0P%~J!Onl;HWo0^;&eSz;NJaxV-4MjP1V6 ze&b}uo8dJw*$BU3udI$xpOKeLY$# zP^;c{%lcb8G%YGUGzZEwibC7nR|d&!d#~{x>Fu@X(D6$P%Ll>kqi*GWBeVPE+K9ad mOl%+P+alb>Zn(c7!X#T85WgAL`JD!PTSKk%qTSzRf&T(~|HIz^ literal 0 HcmV?d00001 diff --git a/Tests/HwpKitTests/Versions/2014VP.hwp b/Tests/HwpKitTests/Versions/2014VP.hwp new file mode 100644 index 0000000000000000000000000000000000000000..641868ee285fa65c01ac17416723c9b16c19361c GIT binary patch literal 8704 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 literal 0 HcmV?d00001 diff --git a/Tests/HwpKitTests/Versions/VersionTests.swift b/Tests/HwpKitTests/Versions/VersionTests.swift new file mode 100644 index 0000000..e35a866 --- /dev/null +++ b/Tests/HwpKitTests/Versions/VersionTests.swift @@ -0,0 +1,32 @@ +@testable import HwpKit +import XCTest + +final class VersionTests: XCTestCase { + func openHwp(_ name: String) throws -> HwpFile { + let url = URL(fileURLWithPath: #file) + .deletingLastPathComponent() + .appendingPathComponent("\(name).hwp") + return try HwpFile(filePath: url.path) + } + + func test2007() throws { + let hwp = try openHwp("2007") + XCTAssertEqual(hwp.fileHeader.version.major, 5) + XCTAssertEqual(hwp.fileHeader.version.minor, 0) + XCTAssertEqual(hwp.fileHeader.version.build, 2) + XCTAssertEqual(hwp.fileHeader.version.revision, 2) + } + + func test2014VP() throws { + let hwp = try openHwp("2014VP") + XCTAssertEqual(hwp.fileHeader.version.major, 5) + XCTAssertEqual(hwp.fileHeader.version.minor, 0) + XCTAssertEqual(hwp.fileHeader.version.build, 5) + XCTAssertEqual(hwp.fileHeader.version.revision, 0) + } + + static var allTests = [ + ("test2007", test2007), + ("test2014VP", test2014VP) + ] +} From ba22202c66bcaa84daae6398ef154e36edcbec79 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 28 Sep 2020 09:29:09 +0900 Subject: [PATCH 16/19] refactor code --- Package.swift | 13 ++++++-- Sources/HwpKit/HwpError.swift | 6 ++-- Sources/HwpKit/HwpFile.swift | 61 ++++++++++++++++++++++------------- 3 files changed, 53 insertions(+), 27 deletions(-) diff --git a/Package.swift b/Package.swift index 225030b..e4bce9d 100644 --- a/Package.swift +++ b/Package.swift @@ -5,6 +5,9 @@ import PackageDescription let package = Package( name: "HwpKit", + platforms: [ + .macOS(.v10_11) + ], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( @@ -18,6 +21,10 @@ let package = Package( .package( url: "https://github.com/CoreOffice/OLEKit.git", .revision("14c4e245519cfd9b822f7e365734b6e08e092503") + ), + .package( + url: "https://github.com/mw99/DataCompression.git", + .exact("3.6.0") ) ], targets: [ @@ -25,14 +32,16 @@ let package = Package( // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "HwpKit", - dependencies: ["OLEKit"] + dependencies: ["OLEKit", "DataCompression"] ), .testTarget( name: "HwpKitTests", dependencies: ["HwpKit"], resources: [ .copy("Basic/blank.hwp"), - .copy("Basic/content.hwp") + .copy("Basic/content.hwp"), + .copy("Version/2007.hwp"), + .copy("Version/2014VP.hwp") ] ) ] diff --git a/Sources/HwpKit/HwpError.swift b/Sources/HwpKit/HwpError.swift index 2ca55f5..89740ca 100644 --- a/Sources/HwpKit/HwpError.swift +++ b/Sources/HwpKit/HwpError.swift @@ -3,11 +3,11 @@ import Foundation public enum HwpError: Error { case invalidFilePath(path: String) case streamDoesNotExist(name: HwpStreamName) + case streamDecompressFailed(name: HwpStreamName) case invalidDataForString(data: Data, name: String) case recordDoesNotExist(tag: UInt32) case invalidFileHeaderSignature(signature: String) case unidentifiedTag(tagId: UInt32) - case notSupportedOS } extension HwpError: CustomStringConvertible { @@ -17,6 +17,8 @@ extension HwpError: CustomStringConvertible { return "Invalid File Path '\(path)'" case let .streamDoesNotExist(name): return "Stream '\(name)' does not exist" + case let .streamDecompressFailed(name): + return "Stream '\(name)' failed to decompress" case let .invalidDataForString(data, name): return """ @@ -30,8 +32,6 @@ extension HwpError: CustomStringConvertible { return "Invalid signature in FileHeader stream : get'\(signature)'" case let .unidentifiedTag(tagId): return "Cannot Read HwpRecord Tag : '\(tagId)'" - case .notSupportedOS: - return "not supported OS" } } } diff --git a/Sources/HwpKit/HwpFile.swift b/Sources/HwpKit/HwpFile.swift index 765e623..87fc211 100644 --- a/Sources/HwpKit/HwpFile.swift +++ b/Sources/HwpKit/HwpFile.swift @@ -1,11 +1,12 @@ import Foundation import OLEKit +import DataCompression -public struct HwpFile { +public class HwpFile { public let fileHeader: HwpFileHeader public let docInfo: HwpDocInfo public let previewText: HwpPreviewText - + public init(filePath: String) throws { let ole: OLEFile do { @@ -13,35 +14,51 @@ public struct HwpFile { } catch { throw HwpError.invalidFilePath(path: filePath) } - let streams = Dictionary(uniqueKeysWithValues: ole.root.children.map { ($0.name, $0 ) }) - - guard let fileHeaderStream = streams[HwpStreamName.fileHeader.rawValue] else { - throw HwpError.streamDoesNotExist(name: HwpStreamName.fileHeader) + let test = Test(ole, streams) + + fileHeader = try HwpFileHeader(test.getDataFromStream(.fileHeader, false)) + + docInfo = try HwpDocInfo(test.getDataFromStream(.docInfo, fileHeader.isCompressed)) + + guard let previewTextStream = streams[HwpStreamName.previewText.rawValue] else { + throw HwpError.streamDoesNotExist(name: HwpStreamName.previewText) } - let fileHeaderReader = try ole.stream(fileHeaderStream) - fileHeader = try HwpFileHeader(fileHeaderReader.readDataToEnd()) + let previewTextReader = try ole.stream(previewTextStream) + previewText = try HwpPreviewText(previewTextReader.readDataToEnd()) + } + + +} - guard let docInfoStream = streams[HwpStreamName.docInfo.rawValue] else { - throw HwpError.streamDoesNotExist(name: HwpStreamName.docInfo) +fileprivate struct Test { + private let ole: OLEFile + private let streams: [String: DirectoryEntry] + + init(_ ole: OLEFile, _ streams: [String: DirectoryEntry]) { + self.ole = ole + self.streams = streams + } + + fileprivate func getDataFromStream(_ streamName: HwpStreamName, _ isCompressed: Bool) throws -> Data { + guard let stream = streams[streamName.rawValue] else { + throw HwpError.streamDoesNotExist(name: streamName) } - let docInfoReader = try ole.stream(docInfoStream) - let docInfoData = docInfoReader.readDataToEnd() as NSData - if fileHeader.isCompressed { + let reader = try ole.stream(stream) + let data = reader.readDataToEnd() + if isCompressed { if #available(OSX 10.15, *) { - docInfo = try HwpDocInfo(docInfoData.decompressed(using: .zlib) as Data) + return try (data as NSData).decompressed(using: .zlib) as Data } else { - throw HwpError.notSupportedOS + guard let decompressedData = data.decompress(withAlgorithm: .zlib) else { + throw HwpError.streamDecompressFailed(name: streamName) + } + return decompressedData } + } else { - docInfo = try HwpDocInfo(docInfoData as Data) - } - - guard let previewTextStream = streams[HwpStreamName.previewText.rawValue] else { - throw HwpError.streamDoesNotExist(name: HwpStreamName.previewText) + return data } - let previewTextReader = try ole.stream(previewTextStream) - previewText = try HwpPreviewText(previewTextReader.readDataToEnd()) } } From 277f29d26cc0e8905a29e5c960948e7c7c2fc1a0 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 28 Sep 2020 09:36:08 +0900 Subject: [PATCH 17/19] lower swift package version --- Package.swift | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Package.swift b/Package.swift index e4bce9d..7225dbf 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.3 +// swift-tools-version:5.1 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -36,13 +36,7 @@ let package = Package( ), .testTarget( name: "HwpKitTests", - dependencies: ["HwpKit"], - resources: [ - .copy("Basic/blank.hwp"), - .copy("Basic/content.hwp"), - .copy("Version/2007.hwp"), - .copy("Version/2014VP.hwp") - ] + dependencies: ["HwpKit"] ) ] ) From 2ace3fe4f4ea92d686d1302b8bf463008e133550 Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 28 Sep 2020 09:42:02 +0900 Subject: [PATCH 18/19] add platforms --- Package.swift | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Package.swift b/Package.swift index 7225dbf..60aa8fe 100644 --- a/Package.swift +++ b/Package.swift @@ -5,9 +5,7 @@ import PackageDescription let package = Package( name: "HwpKit", - platforms: [ - .macOS(.v10_11) - ], + platforms: [.macOS(.v10_11), .iOS(.v9), .tvOS(.v9), .watchOS(.v2)], products: [ // Products define the executables and libraries a package produces, and make them visible to other packages. .library( From d39094aa968220c8a1c8cb0facd5cb6cb4b13d7a Mon Sep 17 00:00:00 2001 From: Seungbin Oh Date: Mon, 28 Sep 2020 10:13:35 +0900 Subject: [PATCH 19/19] dropping ubuntu support --- .github/workflows/Coverage.yml | 2 +- .github/workflows/Documentation.yml | 2 +- .github/workflows/Test.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/Coverage.yml b/.github/workflows/Coverage.yml index 908e33f..014f242 100644 --- a/.github/workflows/Coverage.yml +++ b/.github/workflows/Coverage.yml @@ -6,7 +6,7 @@ on: - master jobs: - test: + coverage: runs-on: macos-latest diff --git a/.github/workflows/Documentation.yml b/.github/workflows/Documentation.yml index bcdbd98..6fe3b7c 100644 --- a/.github/workflows/Documentation.yml +++ b/.github/workflows/Documentation.yml @@ -6,7 +6,7 @@ on: - master jobs: - build: + documentation: runs-on: ubuntu-latest steps: diff --git a/.github/workflows/Test.yml b/.github/workflows/Test.yml index 553e1c8..1e9ed47 100644 --- a/.github/workflows/Test.yml +++ b/.github/workflows/Test.yml @@ -8,7 +8,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - os: [macOS-latest, ubuntu-latest] + os: [macOS-latest] swift: ["5.1", "5.2"] steps: