[colobot] 26/62: Add syntax highlighting for escape codes
Didier Raboud
odyx at moszumanska.debian.org
Fri Nov 10 11:53:56 UTC 2017
This is an automated email from the git hooks/post-receive script.
odyx pushed a commit to branch debian/master
in repository colobot.
commit e3c44e956fadb9322613dee777e64cff5aa3694a
Author: melex750 <melex750 at users.noreply.github.com>
Date: Sat Jul 22 14:30:05 2017 -0400
Add syntax highlighting for escape codes
---
src/script/script.cpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 57 insertions(+), 1 deletion(-)
diff --git a/src/script/script.cpp b/src/script/script.cpp
index 8253cae..f9a70e3 100644
--- a/src/script/script.cpp
+++ b/src/script/script.cpp
@@ -589,6 +589,56 @@ void CScript::UpdateList(Ui::CList* list)
list->SetState(Ui::STATE_ENABLE);
}
+// Colorize a string literal with escape sequences also colored
+
+void HighlightString(Ui::CEdit* edit, const std::string& s, int start)
+{
+ edit->SetFormat(start, start + 1, Gfx::FONT_HIGHLIGHT_STRING);
+
+ auto it = s.cbegin() + 1;
+
+ ++start;
+ while (it != s.cend() && *it != '\"')
+ {
+ if (*(it++) != '\\') // not escape sequence
+ {
+ edit->SetFormat(start, start + 1, Gfx::FONT_HIGHLIGHT_STRING);
+ ++start;
+ continue;
+ }
+
+ if (it == s.cend()) break;
+
+ int end = start + 2;
+
+ if (CBot::CharInList(*it, "01234567")) // octal escape sequence
+ {
+ for (int i = 0; ++it != s.cend() && i < 2; i++, end++)
+ {
+ if (!CBot::CharInList(*it, "01234567")) break;
+ }
+ }
+ else if (*it == 'x' || *it == 'u' || *it == 'U') // hex or unicode escape
+ {
+ bool isHexCode = (*it == 'x');
+ int maxlen = (*it == 'u') ? 4 : 8;
+
+ for (int i = 0; ++it != s.cend(); i++, end++)
+ {
+ if (!isHexCode && i >= maxlen) break;
+ if (!CBot::CharInList(*it, "0123456789ABCDEFabcdef")) break;
+ }
+ }
+ else // n, r, t, etc.
+ ++it;
+
+ edit->SetFormat(start, end, Gfx::FONT_HIGHLIGHT_NONE);
+ start = end;
+ }
+
+ if (it != s.cend())
+ edit->SetFormat(start, start + 1, Gfx::FONT_HIGHLIGHT_STRING);
+}
// Colorize the text according to syntax.
@@ -643,10 +693,16 @@ void CScript::ColorizeScript(Ui::CEdit* edit, int rangeStart, int rangeEnd)
{
color = Gfx::FONT_HIGHLIGHT_CONST;
}
- else if (type == CBot::TokenTypString || type == CBot::TokenTypNum) // string literals and numbers
+ else if (type == CBot::TokenTypNum) // numbers
{
color = Gfx::FONT_HIGHLIGHT_STRING;
}
+ else if (type == CBot::TokenTypString) // string literals
+ {
+ HighlightString(edit, token, cursor1);
+ bt = bt->GetNext();
+ continue;
+ }
assert(cursor1 < cursor2);
edit->SetFormat(cursor1, cursor2, color);
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/colobot.git
More information about the Pkg-games-commits
mailing list