aboutsummaryrefslogtreecommitdiffhomepage
path: root/reader.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-09-10 20:46:46 -0700
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2013-09-10 20:46:46 -0700
commitb993dce12ff3e5b8e38c761706c9db1ef101aee4 (patch)
tree8ce313b1d95102940626693fd68bfc19f798d704 /reader.cpp
parentcd1c2f74d3bcc9a1d3c5eaad007788e950e27c74 (diff)
Rework some of the new case-modifying commands to share more code, and
also to update the autosuggestion and syntax highlighting
Diffstat (limited to 'reader.cpp')
-rw-r--r--reader.cpp50
1 files changed, 25 insertions, 25 deletions
diff --git a/reader.cpp b/reader.cpp
index de0b3679..c3630d73 100644
--- a/reader.cpp
+++ b/reader.cpp
@@ -3792,37 +3792,37 @@ const wchar_t *reader_readline(void)
}
case R_UPCASE_WORD:
- {
- size_t pos = data->buff_pos;
- move_word(MOVE_DIR_RIGHT, false, move_word_style_punctuation, false);
- for (; pos < data->buff_pos; pos++)
- data->command_line.at(pos) = towupper(data->command_line.at(pos));
- reader_repaint();
- break;
- }
-
case R_DOWNCASE_WORD:
- {
- size_t pos = data->buff_pos;
- move_word(MOVE_DIR_RIGHT, false, move_word_style_punctuation, false);
- for (; pos < data->buff_pos; pos++)
- data->command_line.at(pos) = towlower(data->command_line.at(pos));
- reader_repaint();
- break;
- }
-
case R_CAPITALIZE_WORD:
{
- size_t pos = data->buff_pos;
+ // For capitalize_word, whether we've capitalized a character so far
bool capitalized_first = false;
+
+ // We apply the operation from the current location to the end of the word
+ size_t pos = data->buff_pos;
move_word(MOVE_DIR_RIGHT, false, move_word_style_punctuation, false);
- for (; pos < data->buff_pos; pos++) {
- if (iswalnum(data->command_line.at(pos)) && !capitalized_first) {
- data->command_line.at(pos) = towupper(data->command_line.at(pos));
- capitalized_first = true;
- } else
- data->command_line.at(pos) = towlower(data->command_line.at(pos));
+ for (; pos < data->buff_pos; pos++)
+ {
+ wchar_t chr = data->command_line.at(pos);
+
+ // We always change the case; this decides whether we go uppercase (true) or lowercase (false)
+ bool make_uppercase;
+ if (c == R_CAPITALIZE_WORD)
+ make_uppercase = ! capitalized_first && iswalnum(chr);
+ else
+ make_uppercase = (c == R_UPCASE_WORD);
+
+ // Apply the operation and then record what we did
+ if (make_uppercase)
+ chr = towupper(chr);
+ else
+ chr = towlower(chr);
+
+ data->command_line.at(pos) = chr;
+ capitalized_first = capitalized_first || make_uppercase;
}
+ data->command_line_changed();
+ reader_super_highlight_me_plenty(data->buff_pos);
reader_repaint();
break;
}