From bf9e2b03a626e6b47ebfcd4ba69f3a5c0009f5b2 Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sun, 17 Dec 2023 00:20:25 -0800 Subject: [PATCH 1/4] Correct Font Size Calculated by MsDoc Reader Fix #2526. Most of that issue has already been fixed. The one remaining problem was a deprecation message handling font size. The code used `dechex($operand / 2)`, and issued the deprecation message whenever `$operand` was odd because `dechex` is designed only for integer conversion. `$operand` is actually 2 times the point size, so it will be odd only when the point size is some integer plus half a point (no other fractions are allowed). At any rate, it seems that `dechex` should not be used here in the first place; font size is a numeric value, not a hex string. There are many problems with MsDoc Reader at the moment. This PR is narrowly focused on the problem at hand. Its test is, at least, more detailed than the existing MsDoc Reader test, which does nothing more than confirm that read successfully creates a PhpWord object. The new test verifies that the font size is as expected, but does not validate any other aspect of the read. --- src/PhpWord/Reader/MsDoc.php | 2 +- tests/PhpWordTests/Reader/MsDocTest.php | 16 ++++++++++++++++ .../PhpWordTests/_files/documents/word.2526.doc | Bin 0 -> 24576 bytes 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 tests/PhpWordTests/_files/documents/word.2526.doc diff --git a/src/PhpWord/Reader/MsDoc.php b/src/PhpWord/Reader/MsDoc.php index 4cf755e3fa..2599e42350 100644 --- a/src/PhpWord/Reader/MsDoc.php +++ b/src/PhpWord/Reader/MsDoc.php @@ -1871,7 +1871,7 @@ private function readPrl($data, $pos, $cbNum) break; // sprmCHps case 0x43: - $oStylePrl->styleFont['size'] = dechex($operand / 2); + $oStylePrl->styleFont['size'] = $operand / 2; break; // sprmCIss diff --git a/tests/PhpWordTests/Reader/MsDocTest.php b/tests/PhpWordTests/Reader/MsDocTest.php index deb8b9badd..f5f75ab790 100644 --- a/tests/PhpWordTests/Reader/MsDocTest.php +++ b/tests/PhpWordTests/Reader/MsDocTest.php @@ -60,6 +60,22 @@ public function testLoad(): void self::assertInstanceOf('PhpOffice\\PhpWord\\PhpWord', $phpWord); } + public function testLoadHalfPointFont(): void + { + $filename = __DIR__ . '/../_files/documents/word.2526.doc'; + $phpWord = IOFactory::load($filename, 'MsDoc'); + $sections = $phpWord->getSections(); + self::assertCount(1, $sections); + $elements = $sections[0]->getElements(); + self::assertArrayHasKey(0, $elements); + $element0 = $elements[0]; + if (method_exists($element0, 'getFontStyle')) { + self::assertSame(19.5, $element0->getFontStyle()->getSize()); + } else { + self::fail('Unexpected no font style for first element'); + } + } + /** * Test exception on not existing file. */ diff --git a/tests/PhpWordTests/_files/documents/word.2526.doc b/tests/PhpWordTests/_files/documents/word.2526.doc new file mode 100644 index 0000000000000000000000000000000000000000..94fc5ed8fd566e4cdaa44b6f1eb8b520773454d1 GIT binary patch literal 24576 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 is)sro_y=Ph`kir6W13Ib^PNe3&!RC Date: Sun, 17 Dec 2023 14:03:54 -0800 Subject: [PATCH 2/4] Suggestions from @Progi1984 --- docs/changes/1.x/1.3.0.md | 14 ++++++++++++++ tests/PhpWordTests/Reader/MsDocTest.php | 2 +- .../{word.2526.doc => reader.font-halfpoint.doc} | Bin 3 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 docs/changes/1.x/1.3.0.md rename tests/PhpWordTests/_files/documents/{word.2526.doc => reader.font-halfpoint.doc} (100%) diff --git a/docs/changes/1.x/1.3.0.md b/docs/changes/1.x/1.3.0.md new file mode 100644 index 0000000000..e85d9ff892 --- /dev/null +++ b/docs/changes/1.x/1.3.0.md @@ -0,0 +1,14 @@ +# [1.2.0](https://github.com/PHPOffice/PHPWord/tree/1.2.0) (WIP) + +[Full Changelog](https://github.com/PHPOffice/PHPWord/compare/1.2.0...1.3.0) + +## Enhancements + +### Bug fixes + +- MsDoc Reader : Correct Font Size Calculation by [@oleibman](https://github.com/oleibman) Issue [#2526](https://github.com/PHPOffice/PHPWord/issues/2526) PR [#2531](https://github.com/PHPOffice/PHPWord/pull/2531) + +### Miscellaneous + + +### BC Breaks diff --git a/tests/PhpWordTests/Reader/MsDocTest.php b/tests/PhpWordTests/Reader/MsDocTest.php index f5f75ab790..cf4db6d0d9 100644 --- a/tests/PhpWordTests/Reader/MsDocTest.php +++ b/tests/PhpWordTests/Reader/MsDocTest.php @@ -62,7 +62,7 @@ public function testLoad(): void public function testLoadHalfPointFont(): void { - $filename = __DIR__ . '/../_files/documents/word.2526.doc'; + $filename = __DIR__ . '/../_files/documents/reader.font-halfpoint.doc '; $phpWord = IOFactory::load($filename, 'MsDoc'); $sections = $phpWord->getSections(); self::assertCount(1, $sections); diff --git a/tests/PhpWordTests/_files/documents/word.2526.doc b/tests/PhpWordTests/_files/documents/reader.font-halfpoint.doc similarity index 100% rename from tests/PhpWordTests/_files/documents/word.2526.doc rename to tests/PhpWordTests/_files/documents/reader.font-halfpoint.doc From ea7a670589a3a1775fe07f9e69350f012985787c Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sun, 17 Dec 2023 14:09:32 -0800 Subject: [PATCH 3/4] Typo Tolerated By Windows but Not By Unix --- tests/PhpWordTests/Reader/MsDocTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/PhpWordTests/Reader/MsDocTest.php b/tests/PhpWordTests/Reader/MsDocTest.php index cf4db6d0d9..b62d545de0 100644 --- a/tests/PhpWordTests/Reader/MsDocTest.php +++ b/tests/PhpWordTests/Reader/MsDocTest.php @@ -62,7 +62,7 @@ public function testLoad(): void public function testLoadHalfPointFont(): void { - $filename = __DIR__ . '/../_files/documents/reader.font-halfpoint.doc '; + $filename = __DIR__ . '/../_files/documents/reader.font-halfpoint.doc'; $phpWord = IOFactory::load($filename, 'MsDoc'); $sections = $phpWord->getSections(); self::assertCount(1, $sections); From 0709ae36dd79d49ab3b91bf0cde5e65d0b28c9eb Mon Sep 17 00:00:00 2001 From: oleibman <10341515+oleibman@users.noreply.github.com> Date: Sun, 17 Dec 2023 14:16:40 -0800 Subject: [PATCH 4/4] Correct Title Line of Change Log --- docs/changes/1.x/1.3.0.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/changes/1.x/1.3.0.md b/docs/changes/1.x/1.3.0.md index e85d9ff892..e3514080ac 100644 --- a/docs/changes/1.x/1.3.0.md +++ b/docs/changes/1.x/1.3.0.md @@ -1,4 +1,4 @@ -# [1.2.0](https://github.com/PHPOffice/PHPWord/tree/1.2.0) (WIP) +# [1.3.0](https://github.com/PHPOffice/PHPWord/tree/1.3.0) (WIP) [Full Changelog](https://github.com/PHPOffice/PHPWord/compare/1.2.0...1.3.0)