Update textwrap to 0.16.2

Test: m rust
Change-Id: I84f8fd3f3eda6664cf9c60cdd733f5f9bd263d8f
diff --git a/crates/textwrap/.android-checksum.json b/crates/textwrap/.android-checksum.json
index 44c03fe..5e12b91 100644
--- a/crates/textwrap/.android-checksum.json
+++ b/crates/textwrap/.android-checksum.json
@@ -1 +1 @@
-{"package":null,"files":{".cargo-checksum.json":"0dac5bd7e5a1d5c7b5f9179a48a521d7b0111e88cc436e778c16da272b053483","Android.bp":"120b0f00b8985f3408b93c2f8938599ca3e461451556c462bf3c87e2e452b272","CHANGELOG.md":"cb64070a5d1ff874383e7d5ea4518232b69710956cf4645a742244b4fc3393ab","Cargo.lock":"de655148efbc57fa392c0b62016ab85e1566d3680d877694321bafe17ddf366d","Cargo.toml":"a2421be759cfe248459b862e5eaf54fb6b291a18d7b917c1d7411fb95a25afda","LICENSE":"6313043340d419f839feeecb23b50e9578ea6395482c4cdeeee97b368b055ecd","METADATA":"be49e28e9338ab281356ad881da46efdae3770c40230ff750868fa9fe30e8a52","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","README.md":"f6f56de352892cb84de0a68f35c327ebfd934c39829b71d94d8afb3c6b188c79","TEST_MAPPING":"150ff00712a0e459d398e2c22b3d247530b9dd85a8afa66fb33b8b0b33c50326","cargo_embargo.json":"90e88d48b8b66c169f4bdb414623f05a1268265397fdeb5aecb3e50c74916444","rustfmt.toml":"922261b27cfc88b760a98e5599e8aa236a30277b4d6ff94b4f13ce1048e47724","src/columns.rs":"3a53a79c7b85bff98f8e8d5418cce71e388b484b821a21d74aae442e402ad5de","src/core.rs":"c7dd9de96e8591fdc97a138436caa9e04ebb324612f50cf72d02f542beebe32b","src/fill.rs":"341b37ee7da0b1ea0bb3a5623a6cae597e516494392a4bbbbbc7613330a8dfec","src/fuzzing.rs":"501c698180b11eff01b02ed571a8aea4a42be692c973dc4d27c8e70f5dd02d32","src/indentation.rs":"9f8e7de5b0cdae818ad04f287a547124228e46c5761fade573ac110d87ad153e","src/lib.rs":"4c3c6cdfdbfde5885ce8e199f5e030b74f3325067c5ee508234cedb2a8e3bf89","src/line_ending.rs":"608b79214e3699a8478df22d90c36b48ebd9dc4fccbc5c92ee3ff4adfb64d205","src/options.rs":"4718e1bccb6a9de9ddd36012884cd2151ef7ccace4f057c19c8bb9a0b19a291d","src/refill.rs":"d1a0698020464d6e3a59c23f5389d4485337c78ee93193405cc1d9a86a267265","src/termwidth.rs":"4d5fb79617e643a246594ea69ed6c317f3bce40ae96eeb54777bc77a66366f21","src/word_separators.rs":"cf203fbf4576df83549d826f8723749e3e4e8d87c4479eacf4fc734c6f3daaf2","src/word_splitters.rs":"63748fba20d3c002457e37b96b18dc31922102550f478fcbee5514771d453fbf","src/wrap.rs":"a2103572284312021ca266861a683c418817d107695a8ded7fa372145f60db14","src/wrap_algorithms.rs":"b49fac73098f6232520d5757ae5391c0bb8ea97b5f777bb1d344b7f17e0737d5","src/wrap_algorithms/optimal_fit.rs":"869c7d2980cf65eb889215cc9bad1a50e04ac17b112be8d580563e3a1b3ef176","tests/indent.rs":"b72b15af05a4fc797cda88390adac9f0e7de1696d70d8dbcd0ec7eedc6297d74","tests/version-numbers.rs":"5c979a297b0a007544a3a9577b774e1d01bf04c03a23a7f554889afc1fdde159"}}
\ No newline at end of file
+{"package":null,"files":{".cargo-checksum.json":"7e77f39180c989a22361906b5ae1fd2a0cf1a0fe3291b82ca593301d049b9505","Android.bp":"fbbee48ccd4119bddfaa62f80c6c9226dc5d81ab0ef515a066f26fdc37c584f3","CHANGELOG.md":"a1d0803aaf577473bd76a725e9507d6ab9d165cd6cc7c8321bb1be31ee6538bb","Cargo.toml":"59463707508faba3f65ca341bc38c02fc9ff32c306a8cbafe02af1c63db038ca","LICENSE":"6313043340d419f839feeecb23b50e9578ea6395482c4cdeeee97b368b055ecd","METADATA":"902ba0c9fd2f70277cb37556816a10f1e7e0c3ac32cbca57587e4ff91f03795a","MODULE_LICENSE_MIT":"0d6f8afa3940b7f06bebee651376d43bc8b0d5b437337be2696d30377451e93a","README.md":"34f7fe435aadd8272c81d9b778d82c353735d128578028f9fa4a941edd50d469","TEST_MAPPING":"150ff00712a0e459d398e2c22b3d247530b9dd85a8afa66fb33b8b0b33c50326","cargo_embargo.json":"90e88d48b8b66c169f4bdb414623f05a1268265397fdeb5aecb3e50c74916444","dprint.json":"71e1b0666488e4014cfd03825cf43866a7b8570394563f42d57c18af97cfede4","rustfmt.toml":"922261b27cfc88b760a98e5599e8aa236a30277b4d6ff94b4f13ce1048e47724","src/columns.rs":"3a53a79c7b85bff98f8e8d5418cce71e388b484b821a21d74aae442e402ad5de","src/core.rs":"e32e47d387071d8a44dfa72d774a2a29b4139309d5c3218d866ba6cab2f8fff2","src/fill.rs":"341b37ee7da0b1ea0bb3a5623a6cae597e516494392a4bbbbbc7613330a8dfec","src/fuzzing.rs":"501c698180b11eff01b02ed571a8aea4a42be692c973dc4d27c8e70f5dd02d32","src/indentation.rs":"9f8e7de5b0cdae818ad04f287a547124228e46c5761fade573ac110d87ad153e","src/lib.rs":"31447d5792f84315c9c487059b06e3729b3e0a8c01b7df8fe20cf01241f4f4cb","src/line_ending.rs":"608b79214e3699a8478df22d90c36b48ebd9dc4fccbc5c92ee3ff4adfb64d205","src/options.rs":"22468f72f1c593290afb08c0df46f73fce6950be00caa27b6a00d1a6d0c29062","src/refill.rs":"d1a0698020464d6e3a59c23f5389d4485337c78ee93193405cc1d9a86a267265","src/termwidth.rs":"4d5fb79617e643a246594ea69ed6c317f3bce40ae96eeb54777bc77a66366f21","src/word_separators.rs":"39255fbaf836a4de6c21803a6b6adecfb07d33bbf51a8cfc26dba4bbe3b3ed48","src/word_splitters.rs":"9e5c903d2fdd2aeacae4f08f629f08560e1df613b78d658be44d963c510772bd","src/wrap.rs":"a2103572284312021ca266861a683c418817d107695a8ded7fa372145f60db14","src/wrap_algorithms.rs":"20b0a0db8c0923ae236856a0d9b66f83ff8d630532f66e3f20e6553a0aec6257","src/wrap_algorithms/optimal_fit.rs":"869c7d2980cf65eb889215cc9bad1a50e04ac17b112be8d580563e3a1b3ef176","tests/indent.rs":"b72b15af05a4fc797cda88390adac9f0e7de1696d70d8dbcd0ec7eedc6297d74","tests/version-numbers.rs":"5c979a297b0a007544a3a9577b774e1d01bf04c03a23a7f554889afc1fdde159"}}
\ No newline at end of file
diff --git a/crates/textwrap/.cargo-checksum.json b/crates/textwrap/.cargo-checksum.json
index 0948683..52bf023 100644
--- a/crates/textwrap/.cargo-checksum.json
+++ b/crates/textwrap/.cargo-checksum.json
@@ -1 +1 @@
-{"files":{"CHANGELOG.md":"2b49672ca15da27844abb6643660faa3a517b1b731c7c5023a55de2e570f35fb","Cargo.lock":"c60631b9ccb2798984507f9e074ce15d9b6e59f34d4dc3418ef40c222ac55725","Cargo.toml":"bccd38e75da62b89a7bb2d741926688f1822ecd5165a703ffaadf9177a34e919","LICENSE":"ce93600c49fbb3e14df32efe752264644f6a2f8e08a735ba981725799e5309ef","README.md":"5dd8128a4e9057aeb6133a073d30a819230243907e717349101b41a11ec23234","rustfmt.toml":"02637ad90caa19885b25b1ce8230657b3703402775d9db83687a3f55de567509","src/columns.rs":"73432251f95ac0b84d5e971989ebc5f867d8b8ca82d5e3fc67fe3a66216fbc38","src/core.rs":"e2cc6b1e5978df0db9b6d0425e7d0ebf65dd188aff90df800f1f2dda7b1c53f2","src/fill.rs":"1fe773dad2d0bb67a7739b3931c1ee3269d677b71a0716dcdb5b01fe2539d7c2","src/fuzzing.rs":"0a77010a555a244ac5e907754b2104912299815009922cfdc0f6b48d92135295","src/indentation.rs":"f41ee8be41e01620c7d88b76f81a01ce6a619939505eaf3fcfe6c8021fae022b","src/lib.rs":"d5d39085faa4527bf6c16a91c5a44b9b894e3f3a2606763bceac22038528c28c","src/line_ending.rs":"bf416f683ab952d4df75d5dc3c199e7ae7740db2c5982ac1a20c3f4b186ded76","src/options.rs":"0d3aec6ab238f3aa14aa57e736384ec208cd3013373941c76d66c0125ca0630f","src/refill.rs":"33ce98ef31c4791893fc2136edd8f8d95cdd38fa54daa59aaf078b359c43d913","src/termwidth.rs":"2e7854e822c435341bc4d467d13614d417df4f2f530cea3c5e49e3b44e754943","src/word_separators.rs":"d3b2b5faf224bf414bf9da48be02eaffb41aec3a91674bedab02ad5748344143","src/word_splitters.rs":"8de2b92eff6d752e321f219136b45b9812267b5be7ace57602a3bb9d3b5cf332","src/wrap.rs":"52c48e2e5155100e4067363e56b180785684bca3109c95c3425ef8051738ff0e","src/wrap_algorithms.rs":"c99498f2e58634f707545ba73c3a99025086d1afb8c12aeceff2ced2887bb8ae","src/wrap_algorithms/optimal_fit.rs":"a9ce8bad61d4fa81df9e292a557fbf5303df78391d63610ec512b9b06f9193b1","tests/indent.rs":"51f977db11632a32fafecf86af88413d51238fe6efcf18ec52fac89133714278","tests/version-numbers.rs":"9e964f58dbdf051fc6fe0d6542ab312d3e95f26c3fd14bce84449bb625e45761"},"package":"23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"}
\ No newline at end of file
+{"files":{"CHANGELOG.md":"123afc265217452f107de1a41575175073d1b4d0c6de805a69c680d11e722d61","Cargo.toml":"7dd1dff309ceeb9643053c0dc9369adb8cc8d24277e01c15894d176bdc309a29","LICENSE":"ce93600c49fbb3e14df32efe752264644f6a2f8e08a735ba981725799e5309ef","README.md":"a6af9c0c0d3f66531572dba26a80ed0453d19c21594d1f821ab45404451a484c","dprint.json":"610d0fa20613c46ccb6accd22ba61feeb42fd3fdc7536f488f625c2bbb797cc0","rustfmt.toml":"02637ad90caa19885b25b1ce8230657b3703402775d9db83687a3f55de567509","src/columns.rs":"73432251f95ac0b84d5e971989ebc5f867d8b8ca82d5e3fc67fe3a66216fbc38","src/core.rs":"c86d46cdb8b25236ca71590c07753becf83d9a8ffa177d5659776a8b9df82307","src/fill.rs":"1fe773dad2d0bb67a7739b3931c1ee3269d677b71a0716dcdb5b01fe2539d7c2","src/fuzzing.rs":"0a77010a555a244ac5e907754b2104912299815009922cfdc0f6b48d92135295","src/indentation.rs":"f41ee8be41e01620c7d88b76f81a01ce6a619939505eaf3fcfe6c8021fae022b","src/lib.rs":"f75e23a5fb7a79c9b4f460b6066405928da3a189071fdf5f3b786ca1deabe34d","src/line_ending.rs":"bf416f683ab952d4df75d5dc3c199e7ae7740db2c5982ac1a20c3f4b186ded76","src/options.rs":"6c69154a5ab3ff82aa08d259bb2a9dbb657efb96d1e660641617ba37a8e42f14","src/refill.rs":"33ce98ef31c4791893fc2136edd8f8d95cdd38fa54daa59aaf078b359c43d913","src/termwidth.rs":"2e7854e822c435341bc4d467d13614d417df4f2f530cea3c5e49e3b44e754943","src/word_separators.rs":"867dc93a1c726490aa2260a58ecfde39c3c3d9b475ceff524706c2149bbff98a","src/word_splitters.rs":"ac9b82108e6b38260b7117c0430dc6e4de54df5936ce9aefbbca6e87b16e1fbe","src/wrap.rs":"52c48e2e5155100e4067363e56b180785684bca3109c95c3425ef8051738ff0e","src/wrap_algorithms.rs":"c99f5878e9451a492443b8bdb2aa42245af15d5d0c742ab13e24f5fcdd7c2bef","src/wrap_algorithms/optimal_fit.rs":"a9ce8bad61d4fa81df9e292a557fbf5303df78391d63610ec512b9b06f9193b1","tests/indent.rs":"51f977db11632a32fafecf86af88413d51238fe6efcf18ec52fac89133714278","tests/version-numbers.rs":"9e964f58dbdf051fc6fe0d6542ab312d3e95f26c3fd14bce84449bb625e45761"},"package":"c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"}
\ No newline at end of file
diff --git a/crates/textwrap/Android.bp b/crates/textwrap/Android.bp
index e8b615e..d929998 100644
--- a/crates/textwrap/Android.bp
+++ b/crates/textwrap/Android.bp
@@ -18,7 +18,7 @@
     host_supported: true,
     crate_name: "textwrap",
     cargo_env_compat: true,
-    cargo_pkg_version: "0.16.1",
+    cargo_pkg_version: "0.16.2",
     crate_root: "src/lib.rs",
     edition: "2021",
     apex_available: [
diff --git a/crates/textwrap/CHANGELOG.md b/crates/textwrap/CHANGELOG.md
index 362c0c0..498d3a9 100644
--- a/crates/textwrap/CHANGELOG.md
+++ b/crates/textwrap/CHANGELOG.md
@@ -1,76 +1,87 @@
 # Changelog
 
-This file lists the most important changes made in each release of
-`textwrap`.
+This file lists the most important changes made in each release of `textwrap`.
+
+## Version 0.16.2 (2025-03-03)
+
+This release fixes an unnecessary `f64` cast, updates all dependencies, bumps
+the minimum supported Rust version to 1.70.
+
+- [#540](https://github.com/mgeisler/textwrap/pull/540): Avoid spurious `f64`
+  cast and comparison.
+- [#565](https://github.com/mgeisler/textwrap/pull/565): Configure automatic
+  Dependabot updates.
+- [#579](https://github.com/mgeisler/textwrap/pull/579): Bump `rust-version` to
+  1.70.
 
 ## Version 0.16.1 (2024-02-17)
 
 This release fixes `display_width` to ignore inline-hyperlinks. The minimum
 supported version of Rust is now documented to be 1.56.
 
-* [#526](https://github.com/mgeisler/textwrap/pull/526): Ignore ANSI hyperlinks
+- [#526](https://github.com/mgeisler/textwrap/pull/526): Ignore ANSI hyperlinks
   in `display_width`: calculations.
-* [#521](https://github.com/mgeisler/textwrap/pull/521): Add `Options::width`
+- [#521](https://github.com/mgeisler/textwrap/pull/521): Add `Options::width`
   setter method.
-* [#520](https://github.com/mgeisler/textwrap/pull/520): Clarify that
+- [#520](https://github.com/mgeisler/textwrap/pull/520): Clarify that
   `WordSeparator` is an enum rather than a trait.
-* [#518](https://github.com/mgeisler/textwrap/pull/518): Test with latest stable
+- [#518](https://github.com/mgeisler/textwrap/pull/518): Test with latest stable
   and nightly Rust, but check that we can build with Rust 1.56.
 
 ## Version 0.16.0 (2022-10-23)
 
-This release marks `Options` as `non_exhaustive` and extends it to
-make line endings configurable, it adds new fast paths to `fill` and
-`wrap`, and it fixes crashes in `unfill` and `refill`.
+This release marks `Options` as `non_exhaustive` and extends it to make line
+endings configurable, it adds new fast paths to `fill` and `wrap`, and it fixes
+crashes in `unfill` and `refill`.
 
-* [#480](https://github.com/mgeisler/textwrap/pull/480): Mark
-  `Options` as `non_exhaustive`. This will allow us to extend the
-  struct in the future without breaking backwards compatibility.
-* [#478](https://github.com/mgeisler/textwrap/pull/478): Add fast
-  paths to `fill` and `wrap`. This makes the functions 10-25 times
-  faster when the no wrapping is needed.
-* [#468](https://github.com/mgeisler/textwrap/pull/468): Fix `refill`
-  to add back correct line ending.
-* [#467](https://github.com/mgeisler/textwrap/pull/467): Fix crashes
-  in `unfill` and `refill`.
-* [#458](https://github.com/mgeisler/textwrap/pull/458): Test with
-  Rust 1.56 (first compiler release with support for Rust 2021).
-* [#454](https://github.com/mgeisler/textwrap/pull/454): Make line
-  endings configurable.
-* [#448](https://github.com/mgeisler/textwrap/pull/448): Migrate to
-  the Rust 2021 edition.
+- [#480](https://github.com/mgeisler/textwrap/pull/480): Mark `Options` as
+  `non_exhaustive`. This will allow us to extend the struct in the future
+  without breaking backwards compatibility.
+- [#478](https://github.com/mgeisler/textwrap/pull/478): Add fast paths to
+  `fill` and `wrap`. This makes the functions 10-25 times faster when the no
+  wrapping is needed.
+- [#468](https://github.com/mgeisler/textwrap/pull/468): Fix `refill` to add
+  back correct line ending.
+- [#467](https://github.com/mgeisler/textwrap/pull/467): Fix crashes in `unfill`
+  and `refill`.
+- [#458](https://github.com/mgeisler/textwrap/pull/458): Test with Rust 1.56
+  (first compiler release with support for Rust 2021).
+- [#454](https://github.com/mgeisler/textwrap/pull/454): Make line endings
+  configurable.
+- [#448](https://github.com/mgeisler/textwrap/pull/448): Migrate to the Rust
+  2021 edition.
 
 ## Version 0.15.2 (2022-10-24)
 
-This release is identical to 0.15.0 and is only there to give people a
-way to install crates which depend on the yanked 0.15.1 release. See
+This release is identical to 0.15.0 and is only there to give people a way to
+install crates which depend on the yanked 0.15.1 release. See
 [#484](https://github.com/mgeisler/textwrap/issues/484) for details.
 
 ## Version 0.15.1 (2022-09-15)
 
-This release was yanked since it accidentally broke backwards
-compatibility with 0.15.0.
+This release was yanked since it accidentally broke backwards compatibility with
+0.15.0.
 
 ## Version 0.15.0 (2022-02-27)
 
 This is a major feature release with two main changes:
 
-* [#421](https://github.com/mgeisler/textwrap/pull/421): Use `f64`
-  instead of `usize` for fragment widths.
+- [#421](https://github.com/mgeisler/textwrap/pull/421): Use `f64` instead of
+  `usize` for fragment widths.
 
   This fixes problems with overflows in the internal computations of
-  `wrap_optimal_fit` when fragments (words) or line lengths had
-  extreme values, such as `usize::MAX`.
+  `wrap_optimal_fit` when fragments (words) or line lengths had extreme values,
+  such as `usize::MAX`.
 
-* [#438](https://github.com/mgeisler/textwrap/pull/438): Simplify
-  `Options` by removing generic type parameters.
+- [#438](https://github.com/mgeisler/textwrap/pull/438): Simplify `Options` by
+  removing generic type parameters.
 
-  This change removes the new generic parameters introduced in version
-  0.14, as well as the original `WrapSplitter` parameter which has
-  been present since very early versions.
+  This change removes the new generic parameters introduced in version 0.14, as
+  well as the original `WrapSplitter` parameter which has been present since
+  very early versions.
 
-  The result is a simplification of function and struct signatures
-  across the board. So what used to be
+  The result is a simplification of function and struct signatures across the
+  board. So what used to be
 
   ```rust
   let options: Options<
@@ -86,54 +97,52 @@
   let options: Options<'_> = Options::new(80);
   ```
 
-  The anonymous lifetime represent the lifetime of the
-  `initial_indent` and `subsequent_indent` strings. The change is
-  nearly performance neutral (a 1-2% regression).
+  The anonymous lifetime represent the lifetime of the `initial_indent` and
+  `subsequent_indent` strings. The change is nearly performance neutral (a 1-2%
+  regression).
 
 Smaller improvements and changes:
 
-* [#404](https://github.com/mgeisler/textwrap/pull/404): Make
-  documentation for short last-line penalty more precise.
-* [#405](https://github.com/mgeisler/textwrap/pull/405): Cleanup and
-  simplify `Options` docstring.
-* [#411](https://github.com/mgeisler/textwrap/pull/411): Default to
-  `OptimalFit` in interactive example.
-* [#415](https://github.com/mgeisler/textwrap/pull/415): Add demo
-  program to help compute binary sizes.
-* [#423](https://github.com/mgeisler/textwrap/pull/423): Add fuzz
-  tests with fully arbitrary fragments.
-* [#424](https://github.com/mgeisler/textwrap/pull/424): Change
+- [#404](https://github.com/mgeisler/textwrap/pull/404): Make documentation for
+  short last-line penalty more precise.
+- [#405](https://github.com/mgeisler/textwrap/pull/405): Cleanup and simplify
+  `Options` docstring.
+- [#411](https://github.com/mgeisler/textwrap/pull/411): Default to `OptimalFit`
+  in interactive example.
+- [#415](https://github.com/mgeisler/textwrap/pull/415): Add demo program to
+  help compute binary sizes.
+- [#423](https://github.com/mgeisler/textwrap/pull/423): Add fuzz tests with
+  fully arbitrary fragments.
+- [#424](https://github.com/mgeisler/textwrap/pull/424): Change
   `wrap_optimal_fit` penalties to non-negative numbers.
-* [#430](https://github.com/mgeisler/textwrap/pull/430): Add
-  `debug-words` example.
-* [#432](https://github.com/mgeisler/textwrap/pull/432): Use precise
-  dependency versions in Cargo.toml.
+- [#430](https://github.com/mgeisler/textwrap/pull/430): Add `debug-words`
+  example.
+- [#432](https://github.com/mgeisler/textwrap/pull/432): Use precise dependency
+  versions in Cargo.toml.
 
 ## Version 0.14.2 (2021-06-27)
 
-The 0.14.1 release included more changes than intended and has been
-yanked. The change intended for 0.14.1 is now included in 0.14.2.
+The 0.14.1 release included more changes than intended and has been yanked. The
+change intended for 0.14.1 is now included in 0.14.2.
 
 ## Version 0.14.1 (2021-06-26)
 
 This release fixes a panic reported by @Makoto, thanks!
 
-* [#391](https://github.com/mgeisler/textwrap/pull/391): Fix panic in
+- [#391](https://github.com/mgeisler/textwrap/pull/391): Fix panic in
   `find_words` due to string access outside of a character boundary.
 
 ## Version 0.14.0 (2021-06-05)
 
-This is a major feature release which makes Textwrap more configurable
-and flexible. The high-level API of `textwrap::wrap` and
-`textwrap::fill` remains unchanged, but low-level structs have moved
-around.
+This is a major feature release which makes Textwrap more configurable and
+flexible. The high-level API of `textwrap::wrap` and `textwrap::fill` remains
+unchanged, but low-level structs have moved around.
 
-The biggest change is the introduction of new generic type parameters
-to the `Options` struct. These parameters lets you statically
-configure the wrapping algorithm, the word separator, and the word
-splitter. If you previously spelled out the full type for `Options`,
-you now need to take the extra type parameters into account. This
-means that
+The biggest change is the introduction of new generic type parameters to the
+`Options` struct. These parameters lets you statically configure the wrapping
+algorithm, the word separator, and the word splitter. If you previously spelled
+out the full type for `Options`, you now need to take the extra type parameters
+into account. This means that
 
 ```rust
 let options: Options<HyphenSplitter> = Options::new(80);
@@ -149,150 +158,140 @@
 > = Options::new(80);
 ```
 
-This is quite a mouthful, so we suggest using type inference where
-possible. You won’t see any chance if you call `wrap` directly with a
-width or with an `Options` value constructed on the fly. Please open
-an issue if this causes problems for you!
+This is quite a mouthful, so we suggest using type inference where possible. You
+won’t see any chance if you call `wrap` directly with a width or with an
+`Options` value constructed on the fly. Please open an issue if this causes
+problems for you!
 
 ### New `WordSeparator` Trait
 
-* [#332](https://github.com/mgeisler/textwrap/pull/332): Add
-  `WordSeparator` trait to allow customizing how words are found in a
-  line of text. Until now, Textwrap would always assume that words are
-  separated by ASCII space characters. You can now customize this as
-  needed.
+- [#332](https://github.com/mgeisler/textwrap/pull/332): Add `WordSeparator`
+  trait to allow customizing how words are found in a line of text. Until now,
+  Textwrap would always assume that words are separated by ASCII space
+  characters. You can now customize this as needed.
 
-* [#313](https://github.com/mgeisler/textwrap/pull/313): Add support
-  for using the Unicode line breaking algorithm to find words. This is
-  done by adding a second implementation of the new `WordSeparator`
-  trait. The implementation uses the unicode-linebreak crate, which is
-  a new optional dependency.
+- [#313](https://github.com/mgeisler/textwrap/pull/313): Add support for using
+  the Unicode line breaking algorithm to find words. This is done by adding a
+  second implementation of the new `WordSeparator` trait. The implementation
+  uses the unicode-linebreak crate, which is a new optional dependency.
 
-  With this, Textwrap can be used with East-Asian languages such as
-  Chinese or Japanese where there are no spaces between words.
-  Breaking a long sequence of emojis is another example where line
-  breaks might be wanted even if there are no whitespace to be found.
-  Feedback would be appreciated for this feature.
-
+  With this, Textwrap can be used with East-Asian languages such as Chinese or
+  Japanese where there are no spaces between words. Breaking a long sequence of
+  emojis is another example where line breaks might be wanted even if there are
+  no whitespace to be found. Feedback would be appreciated for this feature.
 
 ### Indent
 
-* [#353](https://github.com/mgeisler/textwrap/pull/353): Trim trailing
+- [#353](https://github.com/mgeisler/textwrap/pull/353): Trim trailing
   whitespace from `prefix` in `indent`.
 
-  Before, empty lines would get no prefix added. Now, empty lines have
-  a trimmed prefix added. This little trick makes `indent` much more
-  useful since you can now safely indent with `"# "` without creating
-  trailing whitespace in the output due to the trailing whitespace in
-  your prefix.
+  Before, empty lines would get no prefix added. Now, empty lines have a trimmed
+  prefix added. This little trick makes `indent` much more useful since you can
+  now safely indent with `"# "` without creating trailing whitespace in the
+  output due to the trailing whitespace in your prefix.
 
-* [#354](https://github.com/mgeisler/textwrap/pull/354): Make `indent`
-  about 20% faster by preallocating the output string.
-
+- [#354](https://github.com/mgeisler/textwrap/pull/354): Make `indent` about 20%
+  faster by preallocating the output string.
 
 ### Documentation
 
-* [#308](https://github.com/mgeisler/textwrap/pull/308): Document
-  handling of leading and trailing whitespace when wrapping text.
+- [#308](https://github.com/mgeisler/textwrap/pull/308): Document handling of
+  leading and trailing whitespace when wrapping text.
 
 ### WebAssembly Demo
 
-* [#310](https://github.com/mgeisler/textwrap/pull/310): Thanks to
-  WebAssembly, you can now try out Textwrap directly in your browser.
-  Please try it out: https://mgeisler.github.io/textwrap/.
+- [#310](https://github.com/mgeisler/textwrap/pull/310): Thanks to WebAssembly,
+  you can now try out Textwrap directly in your browser. Please try it out:
+  https://mgeisler.github.io/textwrap/.
 
 ### New Generic Parameters
 
-* [#331](https://github.com/mgeisler/textwrap/pull/331): Remove outer
-  boxing from `Options`.
+- [#331](https://github.com/mgeisler/textwrap/pull/331): Remove outer boxing
+  from `Options`.
 
-* [#357](https://github.com/mgeisler/textwrap/pull/357): Replace
-  `core::WrapAlgorithm` enum with a `wrap_algorithms::WrapAlgorithm`
-  trait. This allows for arbitrary wrapping algorithms to be plugged
-  into the library.
+- [#357](https://github.com/mgeisler/textwrap/pull/357): Replace
+  `core::WrapAlgorithm` enum with a `wrap_algorithms::WrapAlgorithm` trait. This
+  allows for arbitrary wrapping algorithms to be plugged into the library.
 
-* [#358](https://github.com/mgeisler/textwrap/pull/358): Switch
-  wrapping functions to use a slice for `line_widths`.
+- [#358](https://github.com/mgeisler/textwrap/pull/358): Switch wrapping
+  functions to use a slice for `line_widths`.
 
-* [#368](https://github.com/mgeisler/textwrap/pull/368): Move
-  `WordSeparator` and `WordSplitter` traits to separate modules.
-  Before, Textwrap had several top-level structs such as
-  `NoHyphenation` and `HyphenSplitter`. These implementations of
-  `WordSplitter` now lives in a dedicated `word_splitters` module.
-  Similarly, we have a new `word_separators` module for
-  implementations of `WordSeparator`.
+- [#368](https://github.com/mgeisler/textwrap/pull/368): Move `WordSeparator`
+  and `WordSplitter` traits to separate modules. Before, Textwrap had several
+  top-level structs such as `NoHyphenation` and `HyphenSplitter`. These
+  implementations of `WordSplitter` now lives in a dedicated `word_splitters`
+  module. Similarly, we have a new `word_separators` module for implementations
+  of `WordSeparator`.
 
-* [#369](https://github.com/mgeisler/textwrap/pull/369): Rename
-  `Options::splitter` to `Options::word_splitter` for consistency with
-  the other fields backed by traits.
+- [#369](https://github.com/mgeisler/textwrap/pull/369): Rename
+  `Options::splitter` to `Options::word_splitter` for consistency with the other
+  fields backed by traits.
 
 ## Version 0.13.4 (2021-02-23)
 
-This release removes `println!` statements which was left behind in
-`unfill` by mistake.
+This release removes `println!` statements which was left behind in `unfill` by
+mistake.
 
-* [#296](https://github.com/mgeisler/textwrap/pull/296): Improve house
-  building example with more comments.
-* [#297](https://github.com/mgeisler/textwrap/pull/297): Remove debug
-  prints in the new `unfill` function.
+- [#296](https://github.com/mgeisler/textwrap/pull/296): Improve house building
+  example with more comments.
+- [#297](https://github.com/mgeisler/textwrap/pull/297): Remove debug prints in
+  the new `unfill` function.
 
 ## Version 0.13.3 (2021-02-20)
 
-This release contains a bugfix for `indent` and improved handling of
-emojis. We’ve also added a new function for formatting text in columns
-and functions for reformatting already wrapped text.
+This release contains a bugfix for `indent` and improved handling of emojis.
+We’ve also added a new function for formatting text in columns and functions for
+reformatting already wrapped text.
 
-* [#276](https://github.com/mgeisler/textwrap/pull/276): Extend
-  `core::display_width` to handle emojis when the unicode-width Cargo
-  feature is disabled.
-* [#279](https://github.com/mgeisler/textwrap/pull/279): Make `indent`
-  preserve existing newlines in the input string. Before,
-  `indent("foo", "")` would return `"foo\n"` by mistake. It now
-  returns `"foo"` instead.
-* [#281](https://github.com/mgeisler/textwrap/pull/281): Ensure all
-  `Options` fields have examples.
-* [#282](https://github.com/mgeisler/textwrap/pull/282): Add a
-  `wrap_columns` function.
-* [#294](https://github.com/mgeisler/textwrap/pull/294): Add new
-  `unfill` and `refill` functions.
+- [#276](https://github.com/mgeisler/textwrap/pull/276): Extend
+  `core::display_width` to handle emojis when the unicode-width Cargo feature is
+  disabled.
+- [#279](https://github.com/mgeisler/textwrap/pull/279): Make `indent` preserve
+  existing newlines in the input string. Before, `indent("foo", "")` would
+  return `"foo\n"` by mistake. It now returns `"foo"` instead.
+- [#281](https://github.com/mgeisler/textwrap/pull/281): Ensure all `Options`
+  fields have examples.
+- [#282](https://github.com/mgeisler/textwrap/pull/282): Add a `wrap_columns`
+  function.
+- [#294](https://github.com/mgeisler/textwrap/pull/294): Add new `unfill` and
+  `refill` functions.
 
 ## Version 0.13.2 (2020-12-30)
 
-This release primarily makes all dependencies optional. This makes it
-possible to slim down textwrap as needed.
+This release primarily makes all dependencies optional. This makes it possible
+to slim down textwrap as needed.
 
-* [#254](https://github.com/mgeisler/textwrap/pull/254): `impl
-  WordSplitter` for `Box<T> where T: WordSplitter`.
-* [#255](https://github.com/mgeisler/textwrap/pull/255): Use command
-  line arguments as initial text in interactive example.
-* [#256](https://github.com/mgeisler/textwrap/pull/256): Introduce
-  fuzz tests for `wrap_optimal_fit` and `wrap_first_fit`.
-* [#260](https://github.com/mgeisler/textwrap/pull/260): Make the
-  unicode-width dependency optional.
-* [#261](https://github.com/mgeisler/textwrap/pull/261): Make the
-  smawk dependency optional.
+- [#254](https://github.com/mgeisler/textwrap/pull/254): `impl WordSplitter` for
+  `Box<T> where T: WordSplitter`.
+- [#255](https://github.com/mgeisler/textwrap/pull/255): Use command line
+  arguments as initial text in interactive example.
+- [#256](https://github.com/mgeisler/textwrap/pull/256): Introduce fuzz tests
+  for `wrap_optimal_fit` and `wrap_first_fit`.
+- [#260](https://github.com/mgeisler/textwrap/pull/260): Make the unicode-width
+  dependency optional.
+- [#261](https://github.com/mgeisler/textwrap/pull/261): Make the smawk
+  dependency optional.
 
 ## Version 0.13.1 (2020-12-10)
 
-This is a bugfix release which fixes a regression in 0.13.0. The bug
-meant that colored text was wrapped incorrectly.
+This is a bugfix release which fixes a regression in 0.13.0. The bug meant that
+colored text was wrapped incorrectly.
 
-* [#245](https://github.com/mgeisler/textwrap/pull/245): Support
-  deleting a word with Ctrl-Backspace in the interactive demo.
-* [#246](https://github.com/mgeisler/textwrap/pull/246): Show build
-  type (debug/release) in interactive demo.
-* [#249](https://github.com/mgeisler/textwrap/pull/249): Correctly
-  compute width while skipping over ANSI escape sequences.
+- [#245](https://github.com/mgeisler/textwrap/pull/245): Support deleting a word
+  with Ctrl-Backspace in the interactive demo.
+- [#246](https://github.com/mgeisler/textwrap/pull/246): Show build type
+  (debug/release) in interactive demo.
+- [#249](https://github.com/mgeisler/textwrap/pull/249): Correctly compute width
+  while skipping over ANSI escape sequences.
 
 ## Version 0.13.0 (2020-12-05)
 
-This is a major release which rewrites the core logic, adds many new
-features, and fixes a couple of bugs. Most programs which use
-`textwrap` stays the same, incompatibilities and upgrade notes are
-given below.
+This is a major release which rewrites the core logic, adds many new features,
+and fixes a couple of bugs. Most programs which use `textwrap` stays the same,
+incompatibilities and upgrade notes are given below.
 
-Clone the repository and run the following to explore the new features
-in an interactive demo (Linux only):
+Clone the repository and run the following to explore the new features in an
+interactive demo (Linux only):
 
 ```sh
 $ cargo run --example interactive --all-features
@@ -302,28 +301,27 @@
 
 #### Rewritten core wrapping algorithm
 
-* [#221](https://github.com/mgeisler/textwrap/pull/221): Reformulate
-  wrapping in terms of words with whitespace and penalties.
+- [#221](https://github.com/mgeisler/textwrap/pull/221): Reformulate wrapping in
+  terms of words with whitespace and penalties.
 
-The core wrapping algorithm has been completely rewritten. This fixed
-bugs and simplified the code, while also making it possible to use
-`textwrap` outside the context of the terminal.
+The core wrapping algorithm has been completely rewritten. This fixed bugs and
+simplified the code, while also making it possible to use `textwrap` outside the
+context of the terminal.
 
-As part of this, trailing whitespace is now discarded consistently
-from wrapped lines. Before we would inconsistently remove whitespace
-at the end of wrapped lines, except for the last. Leading whitespace
-is still preserved.
+As part of this, trailing whitespace is now discarded consistently from wrapped
+lines. Before we would inconsistently remove whitespace at the end of wrapped
+lines, except for the last. Leading whitespace is still preserved.
 
 ### New Features
 
 #### Optimal-fit wrapping
 
-* [#234](https://github.com/mgeisler/textwrap/pull/234): Introduce
-  wrapping using an optimal-fit algorithm.
+- [#234](https://github.com/mgeisler/textwrap/pull/234): Introduce wrapping
+  using an optimal-fit algorithm.
 
-This release adds support for new wrapping algorithm which finds a
-globally optimal set of line breaks, taking certain penalties into
-account. As an example, the old algorithm would produce
+This release adds support for new wrapping algorithm which finds a globally
+optimal set of line breaks, taking certain penalties into account. As an
+example, the old algorithm would produce
 
     "To be, or"
     "not to be:"
@@ -331,8 +329,8 @@
     "the"
     "question"
 
-Notice how the fourth line with “the” is very short. The new algorithm
-shortens the previous lines slightly to produce fewer short lines:
+Notice how the fourth line with “the” is very short. The new algorithm shortens
+the previous lines slightly to produce fewer short lines:
 
     "To be,"
     "or not to"
@@ -340,21 +338,21 @@
     "is the"
     "question"
 
-Use the new `textwrap::core::WrapAlgorithm` enum to select between the
-new and old algorithm. By default, the new algorithm is used.
+Use the new `textwrap::core::WrapAlgorithm` enum to select between the new and
+old algorithm. By default, the new algorithm is used.
 
-The optimal-fit algorithm is inspired by the line breaking algorithm
-used in TeX, described in the 1981 article [_Breaking Paragraphs into
-Lines_](http://www.eprg.org/G53DOC/pdfs/knuth-plass-breaking.pdf) by
-Knuth and Plass.
+The optimal-fit algorithm is inspired by the line breaking algorithm used in
+TeX, described in the 1981 article
+[_Breaking Paragraphs into Lines_](http://www.eprg.org/G53DOC/pdfs/knuth-plass-breaking.pdf)
+by Knuth and Plass.
 
 #### In-place wrapping
 
-* [#226](https://github.com/mgeisler/textwrap/pull/226): Add a
-  `fill_inplace` function.
+- [#226](https://github.com/mgeisler/textwrap/pull/226): Add a `fill_inplace`
+  function.
 
-When the text you want to fill is already a temporary `String`, you
-can now mutate it in-place with `fill_inplace`:
+When the text you want to fill is already a temporary `String`, you can now
+mutate it in-place with `fill_inplace`:
 
 ```rust
 let mut greeting = format!("Greetings {}, welcome to the game! You have {} lives left.",
@@ -362,31 +360,30 @@
 fill_inplace(&mut greeting, line_width);
 ```
 
-This is faster than calling `fill` and it will reuse the memory
-already allocated for the string.
+This is faster than calling `fill` and it will reuse the memory already
+allocated for the string.
 
 ### Changed Features
 
 #### `Wrapper` is replaced with `Options`
 
-* [#213](https://github.com/mgeisler/textwrap/pull/213): Simplify API
-  with only top-level functions.
-* [#215](https://github.com/mgeisler/textwrap/pull/215): Reintroducing
-  the type parameter on `Options` (previously known as `Wrapper`).
-* [#219](https://github.com/mgeisler/textwrap/pull/219): Allow using
-  trait objects with `fill` & `wrap`.
-* [#227](https://github.com/mgeisler/textwrap/pull/227): Replace
-  `WrapOptions` with `Into<Options>`.
+- [#213](https://github.com/mgeisler/textwrap/pull/213): Simplify API with only
+  top-level functions.
+- [#215](https://github.com/mgeisler/textwrap/pull/215): Reintroducing the type
+  parameter on `Options` (previously known as `Wrapper`).
+- [#219](https://github.com/mgeisler/textwrap/pull/219): Allow using trait
+  objects with `fill` & `wrap`.
+- [#227](https://github.com/mgeisler/textwrap/pull/227): Replace `WrapOptions`
+  with `Into<Options>`.
 
-The `Wrapper` struct held the options (line width, indentation, etc)
-for wrapping text. It was also the entry point for actually wrapping
-the text via its methods such as `wrap`, `wrap_iter`,
-`into_wrap_iter`, and `fill` methods.
+The `Wrapper` struct held the options (line width, indentation, etc) for
+wrapping text. It was also the entry point for actually wrapping the text via
+its methods such as `wrap`, `wrap_iter`, `into_wrap_iter`, and `fill` methods.
 
-The struct has been replaced by a simpler `Options` struct which only
-holds options. The `Wrapper` methods are gone, their job has been
-taken over by the top-level `wrap` and `fill` functions. The signature
-of these functions have changed from
+The struct has been replaced by a simpler `Options` struct which only holds
+options. The `Wrapper` methods are gone, their job has been taken over by the
+top-level `wrap` and `fill` functions. The signature of these functions have
+changed from
 
 ```rust
 fn fill(s: &str, width: usize) -> String;
@@ -408,172 +405,170 @@
     Opt: Into<Options<'a, S>>;
 ```
 
-The `Into<Options<'a, S>` bound allows you to pass an `usize` (which
-is interpreted as the line width) *and* a full `Options` object. This
-allows the new functions to work like the old, plus you can now fully
-customize the behavior of the wrapping via `Options` when needed.
+The `Into<Options<'a, S>` bound allows you to pass an `usize` (which is
+interpreted as the line width) _and_ a full `Options` object. This allows the
+new functions to work like the old, plus you can now fully customize the
+behavior of the wrapping via `Options` when needed.
 
-Code that call `textwrap::wrap` or `textwrap::fill` can remain
-unchanged. Code that calls into `Wrapper::wrap` or `Wrapper::fill`
-will need to be update. This is a mechanical change, please see
+Code that call `textwrap::wrap` or `textwrap::fill` can remain unchanged. Code
+that calls into `Wrapper::wrap` or `Wrapper::fill` will need to be update. This
+is a mechanical change, please see
 [#213](https://github.com/mgeisler/textwrap/pull/213) for examples.
 
 Thanks to @CryptJar and @Koxiat for their support in the PRs above!
 
 ### Removed Features
 
-* The `wrap_iter` and `into_wrap_iter` methods are gone. This means
-  that lazy iteration is no longer supported: you always get all
-  wrapped lines back as a `Vec`. This was done to simplify the code
-  and to support the optimal-fit algorithm.
+- The `wrap_iter` and `into_wrap_iter` methods are gone. This means that lazy
+  iteration is no longer supported: you always get all wrapped lines back as a
+  `Vec`. This was done to simplify the code and to support the optimal-fit
+  algorithm.
 
-  The first-fit algorithm could still be implemented in an incremental
-  fashion. Please let us know if this is important to you.
+  The first-fit algorithm could still be implemented in an incremental fashion.
+  Please let us know if this is important to you.
 
 ### Other Changes
 
-* [#206](https://github.com/mgeisler/textwrap/pull/206): Change
-  `Wrapper.splitter` from `T: WordSplitter` to `Box<dyn
-  WordSplitter>`.
-* [#216](https://github.com/mgeisler/textwrap/pull/216): Forbid the
-  use of unsafe code.
+- [#206](https://github.com/mgeisler/textwrap/pull/206): Change
+  `Wrapper.splitter` from `T: WordSplitter` to `Box<dyn WordSplitter>`.
+- [#216](https://github.com/mgeisler/textwrap/pull/216): Forbid the use of
+  unsafe code.
 
 ## Version 0.12.1 (2020-07-03)
 
 This is a bugfix release.
 
-* Fixed [#176][issue-176]: Mention compile-time wrapping by linking to
-  the [`textwrap-macros` crate].
-* Fixed [#193][issue-193]: Wrapping with `break_words(false)` was
-  broken and would cause extra whitespace to be inserted when words
-  were longer than the line width.
+- Fixed [#176][issue-176]: Mention compile-time wrapping by linking to the
+  [`textwrap-macros` crate].
+- Fixed [#193][issue-193]: Wrapping with `break_words(false)` was broken and
+  would cause extra whitespace to be inserted when words were longer than the
+  line width.
 
 ## Version 0.12.0 (2020-06-26)
 
-The code has been updated to the [Rust 2018 edition][rust-2018] and
-each new release of `textwrap` will only support the latest stable
-version of Rust. Trying to support older Rust versions is a fool's
-errand: our dependencies keep releasing new patch versions that
-require newer and newer versions of Rust.
+The code has been updated to the [Rust 2018 edition][rust-2018] and each new
+release of `textwrap` will only support the latest stable version of Rust.
+Trying to support older Rust versions is a fool's errand: our dependencies keep
+releasing new patch versions that require newer and newer versions of Rust.
 
-The `term_size` feature has been replaced by `terminal_size`. The API
-is unchanged, it is just the name of the Cargo feature that changed.
+The `term_size` feature has been replaced by `terminal_size`. The API is
+unchanged, it is just the name of the Cargo feature that changed.
 
 The `hyphenation` feature now only embeds the hyphenation patterns for
 US-English. This slims down the dependency.
 
-* Fixed [#140][issue-140]: Ignore ANSI escape sequences.
-* Fixed [#158][issue-158]: Unintended wrapping when using external splitter.
-* Fixed [#177][issue-177]: Update examples to the 2018 edition.
+- Fixed [#140][issue-140]: Ignore ANSI escape sequences.
+- Fixed [#158][issue-158]: Unintended wrapping when using external splitter.
+- Fixed [#177][issue-177]: Update examples to the 2018 edition.
 
 ## Version 0.11.0 (2018-12-09)
 
-Due to our dependencies bumping their minimum supported version of
-Rust, the minimum version of Rust we test against is now 1.22.0.
+Due to our dependencies bumping their minimum supported version of Rust, the
+minimum version of Rust we test against is now 1.22.0.
 
-* Merged [#141][issue-141]: Fix `dedent` handling of empty lines and
-  trailing newlines. Thanks @bbqsrc!
-* Fixed [#151][issue-151]: Release of version with hyphenation 0.7.
+- Merged [#141][issue-141]: Fix `dedent` handling of empty lines and trailing
+  newlines. Thanks @bbqsrc!
+- Fixed [#151][issue-151]: Release of version with hyphenation 0.7.
 
 ## Version 0.10.0 (2018-04-28)
 
-Due to our dependencies bumping their minimum supported version of
-Rust, the minimum version of Rust we test against is now 1.17.0.
+Due to our dependencies bumping their minimum supported version of Rust, the
+minimum version of Rust we test against is now 1.17.0.
 
-* Fixed [#99][issue-99]: Word broken even though it would fit on line.
-* Fixed [#107][issue-107]: Automatic hyphenation is off by one.
-* Fixed [#122][issue-122]: Take newlines into account when wrapping.
-* Fixed [#129][issue-129]: Panic on string with em-dash.
+- Fixed [#99][issue-99]: Word broken even though it would fit on line.
+- Fixed [#107][issue-107]: Automatic hyphenation is off by one.
+- Fixed [#122][issue-122]: Take newlines into account when wrapping.
+- Fixed [#129][issue-129]: Panic on string with em-dash.
 
 ## Version 0.9.0 (2017-10-05)
 
-The dependency on `term_size` is now optional, and by default this
-feature is not enabled. This is a *breaking change* for users of
-`Wrapper::with_termwidth`. Enable the `term_size` feature to restore
-the old functionality.
+The dependency on `term_size` is now optional, and by default this feature is
+not enabled. This is a _breaking change_ for users of `Wrapper::with_termwidth`.
+Enable the `term_size` feature to restore the old functionality.
 
-Added a regression test for the case where `width` is set to
-`usize::MAX`, thanks @Fraser999! All public structs now implement
-`Debug`, thanks @hcpl!
+Added a regression test for the case where `width` is set to `usize::MAX`,
+thanks @Fraser999! All public structs now implement `Debug`, thanks @hcpl!
 
-* Fixed [#101][issue-101]: Make `term_size` an optional dependency.
+- Fixed [#101][issue-101]: Make `term_size` an optional dependency.
 
 ## Version 0.8.0 (2017-09-04)
 
-The `Wrapper` struct is now generic over the type of word splitter
-being used. This means less boxing and a nicer API. The
-`Wrapper::word_splitter` method has been removed. This is a *breaking
-API change* if you used the method to change the word splitter.
+The `Wrapper` struct is now generic over the type of word splitter being used.
+This means less boxing and a nicer API. The `Wrapper::word_splitter` method has
+been removed. This is a _breaking API change_ if you used the method to change
+the word splitter.
 
-The `Wrapper` struct has two new methods that will wrap the input text
-lazily: `Wrapper::wrap_iter` and `Wrapper::into_wrap_iter`. Use those
-if you will be iterating over the wrapped lines one by one.
+The `Wrapper` struct has two new methods that will wrap the input text lazily:
+`Wrapper::wrap_iter` and `Wrapper::into_wrap_iter`. Use those if you will be
+iterating over the wrapped lines one by one.
 
-* Fixed [#59][issue-59]: `wrap` could return an iterator. Thanks
-  @hcpl!
-* Fixed [#81][issue-81]: Set `html_root_url`.
+- Fixed [#59][issue-59]: `wrap` could return an iterator. Thanks @hcpl!
+- Fixed [#81][issue-81]: Set `html_root_url`.
 
 ## Version 0.7.0 (2017-07-20)
 
-Version 0.7.0 changes the return type of `Wrapper::wrap` from
-`Vec<String>` to `Vec<Cow<'a, str>>`. This means that the output lines
-borrow data from the input string. This is a *breaking API change* if
-you relied on the exact return type of `Wrapper::wrap`. Callers of the
-`textwrap::fill` convenience function will see no breakage.
+Version 0.7.0 changes the return type of `Wrapper::wrap` from `Vec<String>` to
+`Vec<Cow<'a, str>>`. This means that the output lines borrow data from the input
+string. This is a _breaking API change_ if you relied on the exact return type
+of `Wrapper::wrap`. Callers of the `textwrap::fill` convenience function will
+see no breakage.
 
-The above change and other optimizations makes version 0.7.0 roughly
-15-30% faster than version 0.6.0.
+The above change and other optimizations makes version 0.7.0 roughly 15-30%
+faster than version 0.6.0.
 
-The `squeeze_whitespace` option has been removed since it was
-complicating the above optimization. Let us know if this option is
-important for you so we can provide a work around.
+The `squeeze_whitespace` option has been removed since it was complicating the
+above optimization. Let us know if this option is important for you so we can
+provide a work around.
 
-* Fixed [#58][issue-58]: Add a "fast_wrap" function.
-* Fixed [#61][issue-61]: Documentation errors.
+- Fixed [#58][issue-58]: Add a "fast_wrap" function.
+- Fixed [#61][issue-61]: Documentation errors.
 
 ## Version 0.6.0 (2017-05-22)
 
-Version 0.6.0 adds builder methods to `Wrapper` for easy one-line
-initialization and configuration:
+Version 0.6.0 adds builder methods to `Wrapper` for easy one-line initialization
+and configuration:
 
 ```rust
 let wrapper = Wrapper::new(60).break_words(false);
 ```
 
-It also add a new `NoHyphenation` word splitter that will never split
-words, not even at existing hyphens.
+It also add a new `NoHyphenation` word splitter that will never split words, not
+even at existing hyphens.
 
-* Fixed [#28][issue-28]: Support not squeezing whitespace.
+- Fixed [#28][issue-28]: Support not squeezing whitespace.
 
 ## Version 0.5.0 (2017-05-15)
 
-Version 0.5.0 has *breaking API changes*. However, this only affects
-code using the hyphenation feature. The feature is now optional, so
-you will first need to enable the `hyphenation` feature as described
-above. Afterwards, please change your code from
+Version 0.5.0 has _breaking API changes_. However, this only affects code using
+the hyphenation feature. The feature is now optional, so you will first need to
+enable the `hyphenation` feature as described above. Afterwards, please change
+your code from
+
 ```rust
 wrapper.corpus = Some(&corpus);
 ```
+
 to
+
 ```rust
 wrapper.splitter = Box::new(corpus);
 ```
 
-Other changes include optimizations, so version 0.5.0 is roughly
-10-15% faster than version 0.4.0.
+Other changes include optimizations, so version 0.5.0 is roughly 10-15% faster
+than version 0.4.0.
 
-* Fixed [#19][issue-19]: Add support for finding terminal size.
-* Fixed [#25][issue-25]: Handle words longer than `self.width`.
-* Fixed [#26][issue-26]: Support custom indentation.
-* Fixed [#36][issue-36]: Support building without `hyphenation`.
-* Fixed [#39][issue-39]: Respect non-breaking spaces.
+- Fixed [#19][issue-19]: Add support for finding terminal size.
+- Fixed [#25][issue-25]: Handle words longer than `self.width`.
+- Fixed [#26][issue-26]: Support custom indentation.
+- Fixed [#36][issue-36]: Support building without `hyphenation`.
+- Fixed [#39][issue-39]: Respect non-breaking spaces.
 
 ## Version 0.4.0 (2017-01-24)
 
 Documented complexities and tested these via `cargo bench`.
 
-* Fixed [#13][issue-13]: Immediatedly add word if it fits.
-* Fixed [#14][issue-14]: Avoid splitting on initial hyphens.
+- Fixed [#13][issue-13]: Immediately add word if it fits.
+- Fixed [#14][issue-14]: Avoid splitting on initial hyphens.
 
 ## Version 0.3.0 (2017-01-07)
 
@@ -589,7 +584,6 @@
 
 [rust-2018]: https://doc.rust-lang.org/edition-guide/rust-2018/
 [`textwrap-macros` crate]: https://crates.io/crates/textwrap-macros
-
 [issue-13]: https://github.com/mgeisler/textwrap/issues/13
 [issue-14]: https://github.com/mgeisler/textwrap/issues/14
 [issue-19]: https://github.com/mgeisler/textwrap/issues/19
diff --git a/crates/textwrap/Cargo.lock b/crates/textwrap/Cargo.lock
deleted file mode 100644
index 98b6420..0000000
--- a/crates/textwrap/Cargo.lock
+++ /dev/null
@@ -1,657 +0,0 @@
-# This file is automatically @generated by Cargo.
-# It is not intended for manual editing.
-version = 3
-
-[[package]]
-name = "aho-corasick"
-version = "1.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
-dependencies = [
- "memchr",
-]
-
-[[package]]
-name = "bincode"
-version = "1.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "bitflags"
-version = "1.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
-
-[[package]]
-name = "bitflags"
-version = "2.4.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf"
-
-[[package]]
-name = "equivalent"
-version = "1.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
-
-[[package]]
-name = "errno"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a258e46cdc063eb8519c00b9fc845fc47bcfca4130e2f08e88665ceda8474245"
-dependencies = [
- "libc",
- "windows-sys 0.52.0",
-]
-
-[[package]]
-name = "form_urlencoded"
-version = "1.2.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
-dependencies = [
- "percent-encoding",
-]
-
-[[package]]
-name = "fst"
-version = "0.4.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a"
-
-[[package]]
-name = "hashbrown"
-version = "0.14.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
-
-[[package]]
-name = "hermit-abi"
-version = "0.3.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bd5256b483761cd23699d0da46cc6fd2ee3be420bbe6d020ae4a091e70b7e9fd"
-
-[[package]]
-name = "hyphenation"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bcf4dd4c44ae85155502a52c48739c8a48185d1449fff1963cffee63c28a50f0"
-dependencies = [
- "bincode",
- "fst",
- "hyphenation_commons",
- "pocket-resources",
- "serde",
-]
-
-[[package]]
-name = "hyphenation_commons"
-version = "0.8.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5febe7a2ade5c7d98eb8b75f946c046b335324b06a14ea0998271504134c05bf"
-dependencies = [
- "fst",
- "serde",
-]
-
-[[package]]
-name = "idna"
-version = "0.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6"
-dependencies = [
- "unicode-bidi",
- "unicode-normalization",
-]
-
-[[package]]
-name = "indexmap"
-version = "2.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "233cf39063f058ea2caae4091bf4a3ef70a653afbc026f5c4a4135d114e3c177"
-dependencies = [
- "equivalent",
- "hashbrown",
-]
-
-[[package]]
-name = "io-lifetimes"
-version = "1.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
-dependencies = [
- "hermit-abi",
- "libc",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "libc"
-version = "0.2.153"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9c198f91728a82281a64e1f4f9eeb25d82cb32a5de251c6bd1b5154d63a8e7bd"
-
-[[package]]
-name = "libredox"
-version = "0.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3af92c55d7d839293953fcd0fda5ecfe93297cfde6ffbdec13b41d99c0ba6607"
-dependencies = [
- "bitflags 2.4.2",
- "libc",
- "redox_syscall",
-]
-
-[[package]]
-name = "linux-raw-sys"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
-
-[[package]]
-name = "memchr"
-version = "2.7.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149"
-
-[[package]]
-name = "numtoa"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
-
-[[package]]
-name = "percent-encoding"
-version = "2.3.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
-
-[[package]]
-name = "pocket-resources"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c135f38778ad324d9e9ee68690bac2c1a51f340fdf96ca13e2ab3914eb2e51d8"
-
-[[package]]
-name = "proc-macro2"
-version = "1.0.78"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e2422ad645d89c99f8f3e6b88a9fdeca7fabeac836b1002371c4367c8f984aae"
-dependencies = [
- "unicode-ident",
-]
-
-[[package]]
-name = "pulldown-cmark"
-version = "0.9.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b"
-dependencies = [
- "bitflags 2.4.2",
- "memchr",
- "unicase",
-]
-
-[[package]]
-name = "quote"
-version = "1.0.35"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef"
-dependencies = [
- "proc-macro2",
-]
-
-[[package]]
-name = "redox_syscall"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4722d768eff46b75989dd134e5c353f0d6296e5aaa3132e776cbdb56be7731aa"
-dependencies = [
- "bitflags 1.3.2",
-]
-
-[[package]]
-name = "redox_termios"
-version = "0.1.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "20145670ba436b55d91fc92d25e71160fbfbdd57831631c8d7d36377a476f1cb"
-
-[[package]]
-name = "regex"
-version = "1.10.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b62dbe01f0b06f9d8dc7d49e05a0785f153b00b2c227856282f671e0318c9b15"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-automata",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-automata"
-version = "0.4.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5bb987efffd3c6d0d8f5f89510bb458559eab11e4f869acb20bf845e016259cd"
-dependencies = [
- "aho-corasick",
- "memchr",
- "regex-syntax",
-]
-
-[[package]]
-name = "regex-syntax"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
-
-[[package]]
-name = "rustix"
-version = "0.37.27"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fea8ca367a3a01fe35e6943c400addf443c0f57670e6ec51196f71a4b8762dd2"
-dependencies = [
- "bitflags 1.3.2",
- "errno",
- "io-lifetimes",
- "libc",
- "linux-raw-sys",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "semver"
-version = "1.0.21"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0"
-
-[[package]]
-name = "serde"
-version = "1.0.196"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "870026e60fa08c69f064aa766c10f10b1d62db9ccd4d0abb206472bee0ce3b32"
-dependencies = [
- "serde_derive",
-]
-
-[[package]]
-name = "serde_derive"
-version = "1.0.196"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33c85360c95e7d137454dc81d9a4ed2b8efd8fbe19cee57357b32b9771fccb67"
-dependencies = [
- "proc-macro2",
- "quote",
- "syn",
-]
-
-[[package]]
-name = "serde_spanned"
-version = "0.6.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "eb3622f419d1296904700073ea6cc23ad690adbd66f13ea683df73298736f0c1"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "smawk"
-version = "0.3.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7c388c1b5e93756d0c740965c41e8822f866621d41acbdf6336a6a168f8840c"
-
-[[package]]
-name = "syn"
-version = "2.0.49"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "915aea9e586f80826ee59f8453c1101f9d1c4b3964cd2460185ee8e299ada496"
-dependencies = [
- "proc-macro2",
- "quote",
- "unicode-ident",
-]
-
-[[package]]
-name = "terminal_size"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e6bf6f19e9f8ed8d4048dc22981458ebcf406d67e94cd422e5ecd73d63b3237"
-dependencies = [
- "rustix",
- "windows-sys 0.48.0",
-]
-
-[[package]]
-name = "termion"
-version = "2.0.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c4648c7def6f2043b2568617b9f9b75eae88ca185dbc1f1fda30e95a85d49d7d"
-dependencies = [
- "libc",
- "libredox",
- "numtoa",
- "redox_termios",
-]
-
-[[package]]
-name = "textwrap"
-version = "0.16.1"
-dependencies = [
- "hyphenation",
- "smawk",
- "terminal_size",
- "termion",
- "unic-emoji-char",
- "unicode-linebreak",
- "unicode-width",
- "version-sync",
-]
-
-[[package]]
-name = "tinyvec"
-version = "1.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
-dependencies = [
- "tinyvec_macros",
-]
-
-[[package]]
-name = "tinyvec_macros"
-version = "0.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
-
-[[package]]
-name = "toml"
-version = "0.7.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dd79e69d3b627db300ff956027cc6c3798cef26d22526befdfcd12feeb6d2257"
-dependencies = [
- "serde",
- "serde_spanned",
- "toml_datetime",
- "toml_edit",
-]
-
-[[package]]
-name = "toml_datetime"
-version = "0.6.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1"
-dependencies = [
- "serde",
-]
-
-[[package]]
-name = "toml_edit"
-version = "0.19.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b5bb770da30e5cbfde35a2d7b9b8a2c4b8ef89548a7a6aeab5c9a576e3e7421"
-dependencies = [
- "indexmap",
- "serde",
- "serde_spanned",
- "toml_datetime",
- "winnow",
-]
-
-[[package]]
-name = "unic-char-property"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
-dependencies = [
- "unic-char-range",
-]
-
-[[package]]
-name = "unic-char-range"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
-
-[[package]]
-name = "unic-common"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
-
-[[package]]
-name = "unic-emoji-char"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b07221e68897210270a38bde4babb655869637af0f69407f96053a34f76494d"
-dependencies = [
- "unic-char-property",
- "unic-char-range",
- "unic-ucd-version",
-]
-
-[[package]]
-name = "unic-ucd-version"
-version = "0.9.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
-dependencies = [
- "unic-common",
-]
-
-[[package]]
-name = "unicase"
-version = "2.7.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89"
-dependencies = [
- "version_check",
-]
-
-[[package]]
-name = "unicode-bidi"
-version = "0.3.15"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "08f95100a766bf4f8f28f90d77e0a5461bbdb219042e7679bebe79004fed8d75"
-
-[[package]]
-name = "unicode-ident"
-version = "1.0.12"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b"
-
-[[package]]
-name = "unicode-linebreak"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b09c83c3c29d37506a3e260c08c03743a6bb66a9cd432c6934ab501a190571f"
-
-[[package]]
-name = "unicode-normalization"
-version = "0.1.22"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
-dependencies = [
- "tinyvec",
-]
-
-[[package]]
-name = "unicode-width"
-version = "0.1.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e51733f11c9c4f72aa0c160008246859e340b00807569a0da0e7a1079b27ba85"
-
-[[package]]
-name = "url"
-version = "2.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "31e6302e3bb753d46e83516cae55ae196fc0c309407cf11ab35cc51a4c2a4633"
-dependencies = [
- "form_urlencoded",
- "idna",
- "percent-encoding",
-]
-
-[[package]]
-name = "version-sync"
-version = "0.9.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "835169da0173ea373ddf5987632aac1f918967fbbe58195e304342282efa6089"
-dependencies = [
- "proc-macro2",
- "pulldown-cmark",
- "regex",
- "semver",
- "syn",
- "toml",
- "url",
-]
-
-[[package]]
-name = "version_check"
-version = "0.9.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
-
-[[package]]
-name = "windows-sys"
-version = "0.48.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
-dependencies = [
- "windows-targets 0.48.5",
-]
-
-[[package]]
-name = "windows-sys"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
-dependencies = [
- "windows-targets 0.52.0",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
-dependencies = [
- "windows_aarch64_gnullvm 0.48.5",
- "windows_aarch64_msvc 0.48.5",
- "windows_i686_gnu 0.48.5",
- "windows_i686_msvc 0.48.5",
- "windows_x86_64_gnu 0.48.5",
- "windows_x86_64_gnullvm 0.48.5",
- "windows_x86_64_msvc 0.48.5",
-]
-
-[[package]]
-name = "windows-targets"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8a18201040b24831fbb9e4eb208f8892e1f50a37feb53cc7ff887feb8f50e7cd"
-dependencies = [
- "windows_aarch64_gnullvm 0.52.0",
- "windows_aarch64_msvc 0.52.0",
- "windows_i686_gnu 0.52.0",
- "windows_i686_msvc 0.52.0",
- "windows_x86_64_gnu 0.52.0",
- "windows_x86_64_gnullvm 0.52.0",
- "windows_x86_64_msvc 0.52.0",
-]
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
-
-[[package]]
-name = "windows_aarch64_gnullvm"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cb7764e35d4db8a7921e09562a0304bf2f93e0a51bfccee0bd0bb0b666b015ea"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
-
-[[package]]
-name = "windows_aarch64_msvc"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbaa0368d4f1d2aaefc55b6fcfee13f41544ddf36801e793edbbfd7d7df075ef"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
-
-[[package]]
-name = "windows_i686_gnu"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a28637cb1fa3560a16915793afb20081aba2c92ee8af57b4d5f28e4b3e7df313"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
-
-[[package]]
-name = "windows_i686_msvc"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ffe5e8e31046ce6230cc7215707b816e339ff4d4d67c65dffa206fd0f7aa7b9a"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
-
-[[package]]
-name = "windows_x86_64_gnu"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3d6fa32db2bc4a2f5abeacf2b69f7992cd09dca97498da74a151a3132c26befd"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
-
-[[package]]
-name = "windows_x86_64_gnullvm"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a657e1e9d3f514745a572a6846d3c7aa7dbe1658c056ed9c3344c4109a6949e"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.48.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
-
-[[package]]
-name = "windows_x86_64_msvc"
-version = "0.52.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04"
-
-[[package]]
-name = "winnow"
-version = "0.5.40"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
-dependencies = [
- "memchr",
-]
diff --git a/crates/textwrap/Cargo.toml b/crates/textwrap/Cargo.toml
index 1493f0a..71f7601 100644
--- a/crates/textwrap/Cargo.toml
+++ b/crates/textwrap/Cargo.toml
@@ -11,10 +11,11 @@
 
 [package]
 edition = "2021"
-rust-version = "1.56"
+rust-version = "1.70"
 name = "textwrap"
-version = "0.16.1"
+version = "0.16.2"
 authors = ["Martin Geisler <martin@geisler.net>"]
+build = false
 exclude = [
     ".github/",
     ".gitignore",
@@ -23,6 +24,11 @@
     "fuzz/",
     "images/",
 ]
+autolib = false
+autobins = false
+autoexamples = false
+autotests = false
+autobenches = false
 description = "Library for word wrapping, indenting, and dedenting strings. Has optional support for Unicode and emojis as well as machine hyphenation."
 documentation = "https://docs.rs/textwrap/"
 readme = "README.md"
@@ -43,43 +49,6 @@
 [package.metadata.docs.rs]
 all-features = true
 
-[[example]]
-name = "hyphenation"
-path = "examples/hyphenation.rs"
-required-features = ["hyphenation"]
-
-[[example]]
-name = "termwidth"
-path = "examples/termwidth.rs"
-required-features = ["terminal_size"]
-
-[dependencies.hyphenation]
-version = "0.8.4"
-features = ["embed_en-us"]
-optional = true
-
-[dependencies.smawk]
-version = "0.3.1"
-optional = true
-
-[dependencies.terminal_size]
-version = "0.2.1"
-optional = true
-
-[dependencies.unicode-linebreak]
-version = "0.1.4"
-optional = true
-
-[dependencies.unicode-width]
-version = "0.1.10"
-optional = true
-
-[dev-dependencies.unic-emoji-char]
-version = "0.9.0"
-
-[dev-dependencies.version-sync]
-version = "0.9.4"
-
 [features]
 default = [
     "unicode-linebreak",
@@ -87,5 +56,49 @@
     "smawk",
 ]
 
+[lib]
+name = "textwrap"
+path = "src/lib.rs"
+
+[[test]]
+name = "indent"
+path = "tests/indent.rs"
+
+[[test]]
+name = "version-numbers"
+path = "tests/version-numbers.rs"
+
+[dependencies.hyphenation]
+version = "0.8.4"
+features = ["embed_en-us"]
+optional = true
+
+[dependencies.smawk]
+version = "0.3.2"
+optional = true
+
+[dependencies.terminal_size]
+version = "0.4.0"
+optional = true
+
+[dependencies.unicode-linebreak]
+version = "0.1.5"
+optional = true
+
+[dependencies.unicode-width]
+version = "0.2.0"
+optional = true
+
+[dev-dependencies.unic-emoji-char]
+version = "0.9.0"
+
+[dev-dependencies.version-sync]
+version = "0.9.5"
+
 [target."cfg(unix)".dev-dependencies.termion]
-version = "2.0.1"
+version = "4.0.2"
+
+[lints.rust.unexpected_cfgs]
+level = "warn"
+priority = 0
+check-cfg = ["cfg(fuzzing)"]
diff --git a/crates/textwrap/METADATA b/crates/textwrap/METADATA
index 67197f4..9f9ad31 100644
--- a/crates/textwrap/METADATA
+++ b/crates/textwrap/METADATA
@@ -1,17 +1,17 @@
 name: "textwrap"
 description: "Library for word wrapping, indenting, and dedenting strings. Has optional support for Unicode and emojis as well as machine hyphenation."
 third_party {
-  version: "0.16.1"
+  version: "0.16.2"
   license_type: NOTICE
   last_upgrade_date {
-    year: 2024
-    month: 12
-    day: 20
+    year: 2025
+    month: 3
+    day: 6
   }
   homepage: "https://crates.io/crates/textwrap"
   identifier {
     type: "Archive"
-    value: "https://static.crates.io/crates/textwrap/textwrap-0.16.1.crate"
-    version: "0.16.1"
+    value: "https://static.crates.io/crates/textwrap/textwrap-0.16.2.crate"
+    version: "0.16.2"
   }
 }
diff --git a/crates/textwrap/README.md b/crates/textwrap/README.md
index bf13cd0..7141683 100644
--- a/crates/textwrap/README.md
+++ b/crates/textwrap/README.md
@@ -5,30 +5,30 @@
 [![](https://img.shields.io/crates/v/textwrap.svg)][crates-io]
 [![](https://docs.rs/textwrap/badge.svg)][api-docs]
 
-Textwrap is a library for wrapping and indenting text. It is most
-often used by command-line programs to format dynamic output nicely so
-it looks good in a terminal. You can also use Textwrap to wrap text
-set in a proportional font—such as text used to generate PDF files, or
-drawn on a [HTML5 canvas using WebAssembly][wasm-demo].
+Textwrap is a library for wrapping and indenting text. It is most often used by
+command-line programs to format dynamic output nicely so it looks good in a
+terminal. You can also use Textwrap to wrap text set in a proportional font—such
+as text used to generate PDF files, or drawn on a
+[HTML5 canvas using WebAssembly][wasm-demo].
 
 ## Usage
 
 To use the textwrap crate, add this to your `Cargo.toml` file:
+
 ```toml
 [dependencies]
 textwrap = "0.16"
 ```
 
-By default, this enables word wrapping with support for Unicode
-strings. Extra features can be enabled with Cargo features—and the
-Unicode support can be disabled if needed. This allows you slim down
-the library and so you will only pay for the features you actually
-use.
+By default, this enables word wrapping with support for Unicode strings. Extra
+features can be enabled with Cargo features—and the Unicode support can be
+disabled if needed. This allows you slim down the library and so you will only
+pay for the features you actually use.
 
-Please see the [_Cargo Features_ in the crate
-documentation](https://docs.rs/textwrap/#cargo-features) for a full
-list of the available features as well as their impact on the size of
-your binary.
+Please see the
+[_Cargo Features_ in the crate
+documentation](https://docs.rs/textwrap/#cargo-features) for a full list of the
+available features as well as their impact on the size of your binary.
 
 ## Documentation
 
@@ -52,18 +52,18 @@
 }
 ```
 
-Sharp-eyed readers will notice that the first line is 22 columns wide.
-So why is the word “and” put in the second line when there is space
-for it in the first line?
+Sharp-eyed readers will notice that the first line is 22 columns wide. So why is
+the word “and” put in the second line when there is space for it in the first
+line?
 
-The explanation is that textwrap does not just wrap text one line at a
-time. Instead, it uses an optimal-fit algorithm which looks ahead and
-chooses line breaks which minimize the gaps left at ends of lines.
-This is controlled with the `smawk` Cargo feature, which is why the
-example is wrapped in the `cfg`-block.
+The explanation is that textwrap does not just wrap text one line at a time.
+Instead, it uses an optimal-fit algorithm which looks ahead and chooses line
+breaks which minimize the gaps left at ends of lines. This is controlled with
+the `smawk` Cargo feature, which is why the example is wrapped in the
+`cfg`-block.
 
-Without look-ahead, the first line would be longer and the text would
-look like this:
+Without look-ahead, the first line would be longer and the text would look like
+this:
 
 ```rust
 #[cfg(not(feature = "smawk"))] {
@@ -79,12 +79,12 @@
 }
 ```
 
-The second line is now shorter and the text is more ragged. The kind
-of wrapping can be configured via `Options::wrap_algorithm`.
+The second line is now shorter and the text is more ragged. The kind of wrapping
+can be configured via `Options::wrap_algorithm`.
 
-If you enable the `hyphenation` Cargo feature, you get support for
-automatic hyphenation for [about 70 languages][patterns] via
-high-quality TeX hyphenation patterns.
+If you enable the `hyphenation` Cargo feature, you get support for automatic
+hyphenation for [about 70 languages][patterns] via high-quality TeX hyphenation
+patterns.
 
 Your program must load the hyphenation pattern and configure
 `Options::word_splitter` to use it:
@@ -110,35 +110,34 @@
 ```
 
 The US-English hyphenation patterns are embedded when you enable the
-`hyphenation` feature. They are licensed under a [permissive
-license][en-us license] and take up about 88 KB in your binary. If you
-need hyphenation for other languages, you need to download a
-[precompiled `.bincode` file][bincode] and load it yourself. Please
-see the [`hyphenation` documentation] for details.
+`hyphenation` feature. They are licensed under a
+[permissive license][en-us license] and take up about 88 KB in your binary. If
+you need hyphenation for other languages, you need to download a
+[precompiled `.bincode` file][bincode] and load it yourself. Please see the
+[`hyphenation` documentation] for details.
 
 ## Wrapping Strings at Compile Time
 
-If your strings are known at compile time, please take a look at the
-procedural macros from the [`textwrap-macros` crate].
+If your strings are known at compile time, please take a look at the procedural
+macros from the [`textwrap-macros` crate].
 
 ## Examples
 
-The library comes with [a
-collection](https://github.com/mgeisler/textwrap/tree/master/examples)
-of small example programs that shows various features.
+The library comes with
+[a collection](https://github.com/mgeisler/textwrap/tree/master/examples) of
+small example programs that shows various features.
 
 If you want to see Textwrap in action right away, then take a look at
-[`examples/wasm/`], which shows how to wrap sans-serif, serif, and
-monospace text. It uses WebAssembly and is automatically deployed to
+[`examples/wasm/`], which shows how to wrap sans-serif, serif, and monospace
+text. It uses WebAssembly and is automatically deployed to
 https://mgeisler.github.io/textwrap/.
 
-For the command-line examples, you’re invited to clone the repository
-and try them out for yourself! Of special note is
-[`examples/interactive.rs`]. This is a demo program which demonstrates
-most of the available features: you can enter text and adjust the
-width at which it is wrapped interactively. You can also adjust the
-`Options` used to see the effect of different `WordSplitter`s and wrap
-algorithms.
+For the command-line examples, you’re invited to clone the repository and try
+them out for yourself! Of special note is [`examples/interactive.rs`]. This is a
+demo program which demonstrates most of the available features: you can enter
+text and adjust the width at which it is wrapped interactively. You can also
+adjust the `Options` used to see the effect of different `WordSplitter`s and
+wrap algorithms.
 
 Run the demo with
 
@@ -150,13 +149,12 @@
 
 ## Release History
 
-Please see the [CHANGELOG file] for details on the changes made in
-each release.
+Please see the [CHANGELOG file] for details on the changes made in each release.
 
 ## License
 
-Textwrap can be distributed according to the [MIT license][mit].
-Contributions will be accepted under the same license.
+Textwrap can be distributed according to the [MIT license][mit]. Contributions
+will be accepted under the same license.
 
 [crates-io]: https://crates.io/crates/textwrap
 [build-status]: https://github.com/mgeisler/textwrap/actions?query=workflow%3Abuild+branch%3Amaster
diff --git a/crates/textwrap/dprint.json b/crates/textwrap/dprint.json
new file mode 100644
index 0000000..1b32b8f
--- /dev/null
+++ b/crates/textwrap/dprint.json
@@ -0,0 +1,19 @@
+{
+  "markdown": {
+    "textWrap": "always"
+  },
+  "exec": {
+    "commands": [{
+      "command": "rustfmt",
+      "exts": ["rs"]
+    }]
+  },
+  "excludes": ["target/", "package-lock.json"],
+  "plugins": [
+    "https://plugins.dprint.dev/json-0.20.0.wasm",
+    "https://plugins.dprint.dev/markdown-0.18.0.wasm",
+    "https://plugins.dprint.dev/toml-0.7.0.wasm",
+    "https://plugins.dprint.dev/exec-0.5.1.json@492414e39dea4dccc07b4af796d2f4efdb89e84bae2bd4e1e924c0cc050855bf",
+    "https://plugins.dprint.dev/prettier-0.57.0.json@1bc6b449e982d5b91a25a7c59894102d40c5748651a08a095fb3926e64d55a31"
+  ]
+}
diff --git a/crates/textwrap/src/core.rs b/crates/textwrap/src/core.rs
index 6b07f76..2ed441c 100644
--- a/crates/textwrap/src/core.rs
+++ b/crates/textwrap/src/core.rs
@@ -357,7 +357,7 @@
 {
     let mut shortened_words = Vec::new();
     for word in words {
-        if word.width() > line_width as f64 {
+        if word.width > line_width {
             shortened_words.extend(word.break_apart(line_width));
         } else {
             shortened_words.push(word);
diff --git a/crates/textwrap/src/lib.rs b/crates/textwrap/src/lib.rs
index 32611c0..85105f6 100644
--- a/crates/textwrap/src/lib.rs
+++ b/crates/textwrap/src/lib.rs
@@ -113,7 +113,7 @@
 //! The full dependency graph, where dashed lines indicate optional
 //! dependencies, is shown below:
 //!
-//! <img src="https://raw.githubusercontent.com/mgeisler/textwrap/master/images/textwrap-0.16.1.svg">
+//! <img src="https://raw.githubusercontent.com/mgeisler/textwrap/master/images/textwrap-0.16.2.svg">
 //!
 //! ## Default Features
 //!
@@ -193,7 +193,7 @@
 //! [terminal_size]: https://docs.rs/terminal_size/
 //! [hyphenation]: https://docs.rs/hyphenation/
 
-#![doc(html_root_url = "https://docs.rs/textwrap/0.16.1")]
+#![doc(html_root_url = "https://docs.rs/textwrap/0.16.2")]
 #![forbid(unsafe_code)] // See https://github.com/mgeisler/textwrap/issues/210
 #![deny(missing_docs)]
 #![deny(missing_debug_implementations)]
diff --git a/crates/textwrap/src/options.rs b/crates/textwrap/src/options.rs
index 80e420d..9aa24ba 100644
--- a/crates/textwrap/src/options.rs
+++ b/crates/textwrap/src/options.rs
@@ -47,7 +47,7 @@
     }
 }
 
-impl<'a> From<usize> for Options<'a> {
+impl From<usize> for Options<'_> {
     fn from(width: usize) -> Self {
         Options::new(width)
     }
diff --git a/crates/textwrap/src/word_separators.rs b/crates/textwrap/src/word_separators.rs
index e06e9b8..e49b1f4 100644
--- a/crates/textwrap/src/word_separators.rs
+++ b/crates/textwrap/src/word_separators.rs
@@ -38,7 +38,7 @@
 /// let words = AsciiSpace.find_words("Hello World!").collect::<Vec<_>>();
 /// assert_eq!(words, vec![Word::from("Hello "), Word::from("World!")]);
 /// ```
-#[derive(Clone, Copy)]
+#[derive(Debug, Clone, Copy)]
 pub enum WordSeparator {
     /// Find words by splitting on runs of `' '` characters.
     ///
@@ -156,17 +156,6 @@
     }
 }
 
-impl std::fmt::Debug for WordSeparator {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            WordSeparator::AsciiSpace => f.write_str("AsciiSpace"),
-            #[cfg(feature = "unicode-linebreak")]
-            WordSeparator::UnicodeBreakProperties => f.write_str("UnicodeBreakProperties"),
-            WordSeparator::Custom(_) => f.write_str("Custom(...)"),
-        }
-    }
-}
-
 impl WordSeparator {
     /// Create a new word separator.
     ///
diff --git a/crates/textwrap/src/word_splitters.rs b/crates/textwrap/src/word_splitters.rs
index e2dc6aa..c2eeac4 100644
--- a/crates/textwrap/src/word_splitters.rs
+++ b/crates/textwrap/src/word_splitters.rs
@@ -33,7 +33,7 @@
 /// details.
 ///
 /// [hyphenation]: https://docs.rs/hyphenation/
-#[derive(Clone)]
+#[derive(Debug, Clone)]
 pub enum WordSplitter {
     /// Use this as a [`Options.word_splitter`] to avoid any kind of
     /// hyphenation:
@@ -98,18 +98,6 @@
     Hyphenation(hyphenation::Standard),
 }
 
-impl std::fmt::Debug for WordSplitter {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            WordSplitter::NoHyphenation => f.write_str("NoHyphenation"),
-            WordSplitter::HyphenSplitter => f.write_str("HyphenSplitter"),
-            WordSplitter::Custom(_) => f.write_str("Custom(...)"),
-            #[cfg(feature = "hyphenation")]
-            WordSplitter::Hyphenation(dict) => write!(f, "Hyphenation({})", dict.language()),
-        }
-    }
-}
-
 impl PartialEq<WordSplitter> for WordSplitter {
     fn eq(&self, other: &WordSplitter) -> bool {
         match (self, other) {
diff --git a/crates/textwrap/src/wrap_algorithms.rs b/crates/textwrap/src/wrap_algorithms.rs
index 7737e08..f4a8de7 100644
--- a/crates/textwrap/src/wrap_algorithms.rs
+++ b/crates/textwrap/src/wrap_algorithms.rs
@@ -32,7 +32,7 @@
 /// enabled, a more complex algorithm is available which will look at
 /// an entire paragraph at a time in order to find optimal line breaks
 /// ([`WrapAlgorithm::OptimalFit`]).
-#[derive(Clone, Copy)]
+#[derive(Clone, Copy, Debug)]
 pub enum WrapAlgorithm {
     /// Wrap words using a fast and simple algorithm.
     ///
@@ -119,17 +119,6 @@
     }
 }
 
-impl std::fmt::Debug for WrapAlgorithm {
-    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
-        match self {
-            WrapAlgorithm::FirstFit => f.write_str("FirstFit"),
-            #[cfg(feature = "smawk")]
-            WrapAlgorithm::OptimalFit(penalties) => write!(f, "OptimalFit({:?})", penalties),
-            WrapAlgorithm::Custom(_) => f.write_str("Custom(...)"),
-        }
-    }
-}
-
 impl WrapAlgorithm {
     /// Create new wrap algorithm.
     ///
@@ -344,10 +333,7 @@
 ///
 /// Apologies to anyone who actually knows how to build a house and
 /// knows how long each step takes :-)
-pub fn wrap_first_fit<'a, T: Fragment>(
-    fragments: &'a [T],
-    line_widths: &[f64],
-) -> Vec<&'a [T]> {
+pub fn wrap_first_fit<'a, T: Fragment>(fragments: &'a [T], line_widths: &[f64]) -> Vec<&'a [T]> {
     // The final line width is used for all remaining lines.
     let default_line_width = line_widths.last().copied().unwrap_or(0.0);
     let mut lines = Vec::new();
diff --git a/pseudo_crate/Cargo.lock b/pseudo_crate/Cargo.lock
index 275f6d9..8f0555e 100644
--- a/pseudo_crate/Cargo.lock
+++ b/pseudo_crate/Cargo.lock
@@ -452,7 +452,7 @@
  "termcolor",
  "termtree",
  "textdistance",
- "textwrap 0.16.1",
+ "textwrap 0.16.2",
  "thiserror 2.0.11",
  "thiserror-impl 2.0.11",
  "thread_local",
@@ -1254,7 +1254,7 @@
  "bitflags 1.3.2",
  "clap_lex 0.2.4",
  "indexmap 1.9.3",
- "textwrap 0.16.1",
+ "textwrap 0.16.2",
 ]
 
 [[package]]
@@ -6137,13 +6137,13 @@
 
 [[package]]
 name = "textwrap"
-version = "0.16.1"
+version = "0.16.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
+checksum = "c13547615a44dc9c452a8a534638acdf07120d4b6847c8178705da06306a3057"
 dependencies = [
  "smawk",
  "unicode-linebreak",
- "unicode-width 0.1.11",
+ "unicode-width 0.2.0",
 ]
 
 [[package]]
diff --git a/pseudo_crate/Cargo.toml b/pseudo_crate/Cargo.toml
index e99d618..d655791 100644
--- a/pseudo_crate/Cargo.toml
+++ b/pseudo_crate/Cargo.toml
@@ -362,7 +362,7 @@
 termcolor = "=1.4.1"
 termtree = "=0.4.1"
 textdistance = "=1.1.1"
-textwrap = "=0.16.1"
+textwrap = "=0.16.2"
 thiserror = "=2.0.11"
 thiserror-impl = "=2.0.11"
 thread_local = "=1.1.8"