提交 6a649e6b 编写于 作者: B bors

auto merge of #8710 : pnkfelix/rust/fsk-issue5516-codepoint-fix, r=alexcrichton

...bytes.

(removing previous note about eff-eye-ex'ing #5516 since it actually does not do so, it just gets us half-way.)
......@@ -689,9 +689,9 @@ pub fn usage(brief: &str, opts: &[OptGroup]) -> ~str {
}
}
// FIXME: #5516
// FIXME: #5516 should be graphemes not codepoints
// here we just need to indent the start of the description
let rowlen = row.len();
let rowlen = row.char_len();
if rowlen < 24 {
do (24 - rowlen).times {
row.push_char(' ')
......@@ -707,14 +707,14 @@ pub fn usage(brief: &str, opts: &[OptGroup]) -> ~str {
desc_normalized_whitespace.push_char(' ');
}
// FIXME: #5516
// FIXME: #5516 should be graphemes not codepoints
let mut desc_rows = ~[];
do each_split_within(desc_normalized_whitespace, 54) |substr| {
desc_rows.push(substr.to_owned());
true
};
// FIXME: #5516
// FIXME: #5516 should be graphemes not codepoints
// wrapped description
row.push_str(desc_rows.connect(desc_sep));
......@@ -798,7 +798,7 @@ enum LengthLimit {
cont
};
ss.iter().enumerate().advance(|x| machine(x));
ss.char_offset_iter().advance(|x| machine(x));
// Let the automaton 'run out' by supplying trailing whitespace
while cont && match state { B | C => true, A => false } {
......@@ -1580,4 +1580,31 @@ fn test_groups_usage_description_wrapping() {
debug!("generated: <<%s>>", usage);
assert!(usage == expected)
}
#[test]
fn test_groups_usage_description_multibyte_handling() {
let optgroups = ~[
groups::optflag("k", "k\u2013w\u2013",
"The word kiwi is normally spelled with two i's"),
groups::optflag("a", "apple",
"This \u201Cdescription\u201D has some characters that could \
confuse the line wrapping; an apple costs 0.51€ in some parts of Europe."),
];
let expected =
~"Usage: fruits
Options:
-k --k–w– The word kiwi is normally spelled with two i's
-a --apple This “description” has some characters that could
confuse the line wrapping; an apple costs 0.51€ in
some parts of Europe.
";
let usage = groups::usage("Usage: fruits", optgroups);
debug!("expected: <<%s>>", expected);
debug!("generated: <<%s>>", usage);
assert!(usage == expected)
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册