about summary refs log tree commit diff
path: root/src/string.rs
diff options
context:
space:
mode:
authorsezna <ahansen2@trinity.edu>2015-09-29 09:38:52 -0500
committerAlex <ahansen2@trinity.edu>2015-10-02 08:37:21 -0500
commit2f7acf00e5d02ae795332c1fa83e41939d6361d7 (patch)
tree50182c7081a9ddf814df15c56e046fb28b84df81 /src/string.rs
parent9ab2d95119681dc4823a4b1c67bf616178eafa2a (diff)
Added punctuation preference
Create test.rs

Delete test.rs

Fixed compile error.

Trying a possible fix on an arithmetic overflow

another try at the test failure...

passed all tests.

Added tests and cleaned up logic as per nrc's critiques

Delete string.rs.old

Delete string.rs.bk

Made changes as per nrc's requests.

Update string_punctuation.rs

Update string_punctuation.rs

fixed logical redundancy
Diffstat (limited to 'src/string.rs')
-rw-r--r--src/string.rs20
1 files changed, 16 insertions, 4 deletions
diff --git a/src/string.rs b/src/string.rs
index ffaf52d3380..59ba4992863 100644
--- a/src/string.rs
+++ b/src/string.rs
@@ -39,6 +39,7 @@ pub fn rewrite_string<'a>(s: &str, fmt: &StringFormat<'a>) -> Option<String> {
 
     let graphemes = UnicodeSegmentation::graphemes(&*stripped_str, false).collect::<Vec<&str>>();
     let indent = fmt.offset.to_string(fmt.config);
+    let punctuation = ":,;.";
 
     let mut cur_start = 0;
     let mut result = String::with_capacity(round_up_to_power_of_two(s.len()));
@@ -62,11 +63,22 @@ pub fn rewrite_string<'a>(s: &str, fmt: &StringFormat<'a>) -> Option<String> {
         while !graphemes[cur_end - 1].trim().is_empty() {
             cur_end -= 1;
             if cur_end - cur_start < MIN_STRING {
-                // We can't break at whitespace, fall back to splitting
-                // anywhere that doesn't break an escape sequence.
                 cur_end = cur_start + max_chars;
-                while graphemes[cur_end - 1] == "\\" {
-                    cur_end -= 1;
+                // Look for punctuation to break on.
+                while (!punctuation.contains(graphemes[cur_end - 1])) && cur_end > 1 {
+                    if cur_end > 1 {
+                        cur_end -= 1;
+                    }
+                }
+                // We can't break at whitespace or punctuation, fall back to splitting
+                // anywhere that doesn't break an escape sequence.
+                if cur_end < cur_start + MIN_STRING {
+                    cur_end = cur_start + max_chars;
+                    while graphemes[cur_end - 1] == "\\" {
+                        if cur_end > 1 {
+                            cur_end -= 1;
+                        }
+                    }
                 }
                 break;
             }