OpenTTD Source 20241224-master-gf74b0cf984
autocompletion.cpp
Go to the documentation of this file.
1/*
2 * This file is part of OpenTTD.
3 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
4 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
5 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
6 */
7
10#include "stdafx.h"
11
12#include "autocompletion.h"
13
14#include "console_internal.h"
15#include "town.h"
17
18#include "safeguards.h"
19
20bool AutoCompletion::AutoComplete()
21{
22 // We are pressing TAB for the first time after reset.
23 if (this->suggestions.empty()) {
24 this->InitSuggestions(this->textbuf->buf);
25 if (this->suggestions.empty()) {
26 return false;
27 }
28 this->ApplySuggestion(prefix, suggestions[0]);
29 return true;
30 }
31
32 // We are pressing TAB again on the same text.
33 if (this->current_suggestion_index + 1 < this->suggestions.size()) {
34 this->ApplySuggestion(prefix, this->suggestions[++this->current_suggestion_index]);
35 } else {
36 // We are out of options, restore original text.
37 this->textbuf->Assign(initial_buf);
38 this->Reset();
39 }
40 return true;
41}
42
43void AutoCompletion::Reset()
44{
45 this->prefix = "";
46 this->query = "";
47 this->initial_buf.clear();
48 this->suggestions.clear();
49 this->current_suggestion_index = 0;
50}
51
52void AutoCompletion::InitSuggestions(std::string_view text)
53{
54 this->initial_buf = text;
55 size_t space_pos = this->initial_buf.find_last_of(' ');
56 this->query = this->initial_buf;
57 if (space_pos == std::string::npos) {
58 this->prefix = "";
59 } else {
60 this->prefix = this->query.substr(0, space_pos + 1);
61 this->query.remove_prefix(space_pos + 1);
62 }
63
64 this->suggestions = this->GetSuggestions(prefix, query);
65 this->current_suggestion_index = 0;
66}
Generic auto-completion engine.
std::string_view query
Last token of the text. This is used to based the suggestions on.
std::string_view prefix
Prefix of the text before the last space.
std::string initial_buf
Value of text buffer when we started current suggestion session.
Internally used functions for the console.
Base core network types and some helper functions to access them.
A number of safeguards to prevent using unsafe methods.
Definition of base types and functions in a cross-platform compatible way.
void Assign(StringID string)
Render a string into the textbuffer.
Definition textbuf.cpp:431
char *const buf
buffer in which text is saved
Base of the town class.