Skip to content

Commit 79eab0d

Browse files
authored
Publish 0.2.0 with newlines treated as width 1 (#68)
* Revert "Treat newlines as width 0 in the 0.1 stream, publish 0.1.14 (#67)" This reverts commit 9eaafa5. * Update readme * Bump to 0.2
1 parent 9eaafa5 commit 79eab0d

File tree

5 files changed

+22
-32
lines changed

5 files changed

+22
-32
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[package]
22

33
name = "unicode-width"
4-
version = "0.1.14"
4+
version = "0.2.0"
55
authors = [
66
"kwantam <kwantam@gmail.com>",
77
"Manish Goregaokar <manishsmail@gmail.com>",

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,16 @@ to your `Cargo.toml`:
5555
[dependencies]
5656
unicode-width = "0.1.11"
5757
```
58+
59+
60+
## Changelog
61+
62+
63+
### 0.2.0
64+
65+
- Treat `\n` as width 1 (#60)
66+
- Treat ambiguous `Modifier_Letter`s as narrow (#63)
67+
- Support `Grapheme_Cluster_Break=Prepend` (#62)
68+
- Support lots of ligatures (#53)
69+
70+
Note: If you are using `unicode-width` for linebreaking, the change treating `\n` as width 1 _may cause behavior changes_. It is recommended that in such cases you feed already-line segmented text to `unicode-width`. In other words, please apply higher level control character based line breaking protocols before feeding text to `unicode-width`. Relying on any character producing a stable width in this crate is likely the sign of a bug.

scripts/unicode.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,10 +1281,7 @@ def lookup_fns(
12811281
s += """
12821282
if c <= '\\u{A0}' {
12831283
match c {
1284-
// According to the spec, LF should be width 1, which is how it is often rendered when it is forced to have a single-line rendering
1285-
// However, this makes it harder to use this crate to calculate line breaks, and breaks assumptions of downstream crates.
1286-
// https://github.com/unicode-rs/unicode-width/issues/60
1287-
'\\n' => (0, WidthInfo::LINE_FEED),
1284+
'\\n' => (1, WidthInfo::LINE_FEED),
12881285
'\\r' if next_info == WidthInfo::LINE_FEED => (0, WidthInfo::DEFAULT),
12891286
_ => (1, WidthInfo::DEFAULT),
12901287
}

src/tables.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -215,10 +215,7 @@ fn width_in_str(c: char, mut next_info: WidthInfo) -> (i8, WidthInfo) {
215215
}
216216
if c <= '\u{A0}' {
217217
match c {
218-
// According to the spec, LF should be width 1, which is how it is often rendered when it is forced to have a single-line rendering
219-
// However, this makes it harder to use this crate to calculate line breaks, and breaks assumptions of downstream crates.
220-
// https://github.com/unicode-rs/unicode-width/issues/60
221-
'\n' => (0, WidthInfo::LINE_FEED),
218+
'\n' => (1, WidthInfo::LINE_FEED),
222219
'\r' if next_info == WidthInfo::LINE_FEED => (0, WidthInfo::DEFAULT),
223220
_ => (1, WidthInfo::DEFAULT),
224221
}
@@ -510,10 +507,7 @@ fn width_in_str_cjk(c: char, mut next_info: WidthInfo) -> (i8, WidthInfo) {
510507
}
511508
if c <= '\u{A0}' {
512509
match c {
513-
// According to the spec, LF should be width 1, which is how it is often rendered when it is forced to have a single-line rendering
514-
// However, this makes it harder to use this crate to calculate line breaks, and breaks assumptions of downstream crates.
515-
// https://github.com/unicode-rs/unicode-width/issues/60
516-
'\n' => (0, WidthInfo::LINE_FEED),
510+
'\n' => (1, WidthInfo::LINE_FEED),
517511
'\r' if next_info == WidthInfo::LINE_FEED => (0, WidthInfo::DEFAULT),
518512
_ => (1, WidthInfo::DEFAULT),
519513
}

tests/tests.rs

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -214,23 +214,18 @@ fn test_control_line_break() {
214214
assert_width!('\r', None, None);
215215
assert_width!('\n', None, None);
216216
assert_width!("\r", 1, 1);
217-
// This is 0 due to #60
218-
assert_width!("\n", 0, 0);
219-
assert_width!("\r\n", 0, 0);
217+
assert_width!("\n", 1, 1);
218+
assert_width!("\r\n", 1, 1);
220219
assert_width!("\0", 1, 1);
221-
assert_width!("1\t2\r\n3\u{85}4", 6, 6);
222-
assert_width!("\r\u{FE0F}\n", 1, 1);
223-
assert_width!("\r\u{200D}\n", 1, 1);
220+
assert_width!("1\t2\r\n3\u{85}4", 7, 7);
221+
assert_width!("\r\u{FE0F}\n", 2, 2);
222+
assert_width!("\r\u{200D}\n", 2, 2);
224223
}
225224

226225
#[test]
227226
fn char_str_consistent() {
228227
let mut s = String::with_capacity(4);
229228
for c in '\0'..=char::MAX {
230-
// Newlines are special cased (#60)
231-
if c == '\n' {
232-
continue;
233-
}
234229
s.clear();
235230
s.push(c);
236231
assert_eq!(c.width().unwrap_or(1), s.width());
@@ -423,10 +418,6 @@ fn test_khmer_coeng() {
423418
assert_width!(format!("\u{17D2}{c}"), 0, 0);
424419
assert_width!(format!("\u{17D2}\u{200D}\u{200D}{c}"), 0, 0);
425420
} else {
426-
// Newlines are special cased (#60)
427-
if c == '\n' {
428-
continue;
429-
}
430421
assert_width!(
431422
format!("\u{17D2}{c}"),
432423
c.width().unwrap_or(1),
@@ -597,11 +588,6 @@ fn emoji_test_file() {
597588
}
598589
}
599590

600-
#[test]
601-
fn test_newline_zero_issue_60() {
602-
assert_width!("a\na", 2, 2);
603-
}
604-
605591
// Test traits are unsealed
606592

607593
#[cfg(feature = "cjk")]

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy