Skip to content

Commit d5afdae

Browse files
committed
address review comments
1 parent d9a0fcb commit d5afdae

File tree

2 files changed

+9
-18
lines changed

2 files changed

+9
-18
lines changed

src/rime/gear/navigator.cc

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -216,9 +216,8 @@ bool Navigator::JumpLeft(Context* ctx, size_t start_pos, bool loop) {
216216
: (std::max)(start_pos, spans_.PreviousStop(end_of_input))
217217
// 跳至前一個切分點
218218
: (std::max)(start_pos, spans_.PreviousStop(caret_pos));
219-
if (stop_before_delimiter_ && IsAfterDelimiter(new_pos) &&
220-
caret_pos != new_pos - 1)
221-
new_pos--;
219+
if (stop_before_delimiter_)
220+
new_pos = SkipDelimiterBackward(new_pos);
222221
if (new_pos != caret_pos) {
223222
ctx->set_caret_pos(new_pos);
224223
return true;
@@ -238,9 +237,8 @@ bool Navigator::JumpRight(Context* ctx, size_t start_pos, bool loop) {
238237
: (caret_pos >= end_of_translation) ? end_of_input
239238
// 跳至後一個切分點
240239
: spans_.NextStop(caret_pos);
241-
if (stop_before_delimiter_ && IsAfterDelimiter(new_pos) &&
242-
caret_pos != new_pos - 1)
243-
new_pos--;
240+
if (stop_before_delimiter_)
241+
new_pos = SkipDelimiterBackward(new_pos);
244242
if (new_pos != caret_pos) {
245243
ctx->set_caret_pos(new_pos);
246244
return true;
@@ -300,16 +298,10 @@ bool Navigator::GoToEnd(Context* ctx) {
300298
return false;
301299
}
302300

303-
bool Navigator::IsAfterDelimiter(size_t pos) {
304-
if (pos == 0)
305-
return false;
306-
return delimiters_.find(input_[pos - 1]) != string::npos;
307-
}
308-
309-
bool Navigator::IsBeforeDelimiter(size_t pos) {
310-
if (pos >= input_.length() - 1)
311-
return false;
312-
return delimiters_.find(input_[pos]) != string::npos;
301+
size_t Navigator::SkipDelimiterBackward(size_t pos) {
302+
while (pos > 0 && delimiters_.find(input_[pos - 1]) != string::npos)
303+
pos--;
304+
return pos;
313305
}
314306

315307
} // namespace rime

src/rime/gear/navigator.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ class Navigator : public Processor, public KeyBindingProcessor<Navigator, 2> {
5858
private:
5959
string delimiters_;
6060
bool stop_before_delimiter_ = false;
61-
bool IsBeforeDelimiter(size_t pos);
62-
bool IsAfterDelimiter(size_t pos);
61+
size_t SkipDelimiterBackward(size_t pos);
6362
};
6463

6564
} // namespace rime

0 commit comments

Comments
 (0)