23#ifndef MAXIMATOKENIZER_H
24#define MAXIMATOKENIZER_H
35#include "Configuration.h"
36#include <unordered_map>
83 explicit Token(wxString&& text) : m_text(std::move(text)) {}
84 explicit Token(
const wxString &text) : m_text(text) {}
85 Token(wxString&& text,
TextStyle style) : m_text(std::move(text)), m_style(style) {}
86 Token(
const wxString& text,
TextStyle style) : m_text(text), m_style(style) {}
87 Token& operator=(
Token&& t)
noexcept { m_text = std::move(t.m_text); m_style = t.m_style;
return *
this; }
89 Token(
Token&& token)
noexcept { *
this = std::move(token); }
91 TextStyle GetTextStyle()
const {
return m_style; }
92 const wxString &GetText()
const {
return m_text; }
93 operator const wxString &()
const {
return m_text; }
98 static bool IsAlpha(wxUniChar ch);
99 static bool IsNum(wxUniChar ch);
100 static bool IsAlphaNum(wxUniChar ch);
101 static bool IsSpace(wxUniChar ch);
102 static const wxString UnicodeNumbers() {
103 return wxS(
"\u00BD\u00B2\u00B3\u221E");
105 static const wxString Operators() {
106 return wxS(
"\u221A\u22C0\u22C1\u22BB\u22BC\u22BD\u00AC\u222b\u2264\u2265\u2211"
107 "\u2260+-*/^:=#'!()[]{}");
110 using TokenList = std::vector<Token>;
111 TokenList PopTokens() && {
return std::move(
m_tokens); }
115 const TokenList &initialTokens);
151 using StringHash = std::unordered_map<wxString, int, wxStringHash>;
Small compatibility shims for older toolchains and older wxWidgets.
#define wxWARN_UNUSED
Marks a class whose unused instances are a bug.
Definition: Compat.h:116
This file declares everything needed for the text style system used to style all the elements on the ...
TextStyle
All text styles known to wxMaxima.
Definition: TextStyle.h:230
The configuration storage for the current worksheet.
Definition: Configuration.h:102
A maxima code snippet from this tokenizer.
Definition: MaximaTokenizer.h:80
Maximatokenizer breaks down maxima input to individual commands.
Definition: MaximaTokenizer.h:52
static const wxString m_plusSigns
Plus sign.
Definition: MaximaTokenizer.h:143
static StringHash m_hardcodedFunctions
Names of functions that don't require parenthesis.
Definition: MaximaTokenizer.h:159
static const wxString m_not_alphas
Unicode Operators and other special non-ascii characters.
Definition: MaximaTokenizer.h:139
static const wxString m_spaces
Space characters.
Definition: MaximaTokenizer.h:141
static const wxString m_minusSigns
Minus sign.
Definition: MaximaTokenizer.h:145
TokenList m_tokens
The tokens the string is divided into.
Definition: MaximaTokenizer.h:135
static const wxString m_additional_alphas
ASCII symbols that wxIsalnum() doesn't see as chars, but maxima does.
Definition: MaximaTokenizer.h:137
static wxString FirstStatement(const wxString &commands, const Configuration *const configuration)
The first statement in a piece of Maxima code, without its terminator.
Definition: MaximaTokenizer.cpp:400
static bool IsHardcodedKeyword(const wxString &text)
Is this text one of the fake-function keywords (see m_hardcodedFunctions)?
Definition: MaximaTokenizer.h:128
static const wxString m_linebreaks
Linebreak characters.
Definition: MaximaTokenizer.h:147
static void EnsureHardcodedFunctionsInitialized()
Populates m_hardcodedFunctions on first use; safe to call repeatedly.
Definition: MaximaTokenizer.cpp:36