summaryrefslogtreecommitdiff
path: root/src/string_base.h
diff options
context:
space:
mode:
authormichi_cc <michi_cc@openttd.org>2013-08-05 20:35:27 +0000
committermichi_cc <michi_cc@openttd.org>2013-08-05 20:35:27 +0000
commite7dc14b25af4b2802a956dd1cd99c187fb4acb56 (patch)
treec9fcb2f1af8e1ec6d5d6ebe03d4c30eb00eb1fed /src/string_base.h
parent33f3cf3a5daeaf9e6e5b5414696f93676249bc41 (diff)
downloadopenttd-e7dc14b25af4b2802a956dd1cd99c187fb4acb56.tar.xz
(svn r25652) -Fix: Improve text caret movement for complex scripts.
Diffstat (limited to 'src/string_base.h')
-rw-r--r--src/string_base.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/src/string_base.h b/src/string_base.h
new file mode 100644
index 000000000..73439f639
--- /dev/null
+++ b/src/string_base.h
@@ -0,0 +1,60 @@
+/* $Id$ */
+
+/*
+ * This file is part of OpenTTD.
+ * 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.
+ * 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.
+ * 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/>.
+ */
+
+#ifndef STRING_BASE_H
+#define STRING_BASE_H
+
+#include "string_type.h"
+
+/** Class for iterating over different kind of parts of a string. */
+class StringIterator {
+public:
+ /** Sentinel to indicate end-of-iteration. */
+ static const size_t END = SIZE_MAX;
+
+ /**
+ * Create a new iterator instance.
+ * @return New iterator instance.
+ */
+ static StringIterator *Create();
+
+ virtual ~StringIterator() {}
+
+ /**
+ * Set a new iteration string. Must also be called if the string contents
+ * changed. The cursor is reset to the start of the string.
+ * @param s New string.
+ */
+ virtual void SetString(const char *s) = 0;
+
+ /**
+ * Change the current string cursor.
+ * @param p New cursor position.
+ * @return Actual new cursor position at the next valid character boundary.
+ * @pre p has to be inside the current string.
+ */
+ virtual size_t SetCurPosition(size_t pos) = 0;
+
+ /**
+ * Advance the cursor by one iteration unit.
+ * @return New cursor position (in bytes) or #END if the cursor is already at the end of the string.
+ */
+ virtual size_t Next() = 0;
+
+ /**
+ * Move the cursor back by one iteration unit.
+ * @return New cursor position (in bytes) or #END if the cursor is already at the start of the string.
+ */
+ virtual size_t Prev() = 0;
+
+protected:
+ StringIterator() {}
+};
+
+#endif /* STRING_BASE_H */