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.)
This commit is contained in:
bors 2013-08-25 04:21:15 -07:00
commit 6a649e6b8b

View File

@ -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 --kw 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)
}
}