LibreOffice Module starmath (master) 1
token.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
29#pragma once
30
31#include <tools/color.hxx>
32#include <o3tl/string_view.hxx>
34
35// std imports
36#include <memory>
37#include <utility>
38
39// TokenGroups
40enum class TG
41{
42 NONE = 0x000000,
43 Oper = 0x000001,
44 Relation = 0x000002,
45 Sum = 0x000004,
46 Product = 0x000008,
47 UnOper = 0x000010,
48 Power = 0x000020,
49 Attribute = 0x000040,
50 Align = 0x000080,
51 Function = 0x000100,
52 Blank = 0x000200,
53 LBrace = 0x000400,
54 RBrace = 0x000800,
55 Color = 0x001000,
56 Font = 0x002000,
57 Standalone = 0x004000,
58 Limit = 0x010000,
59 FontAttr = 0x020000
60};
61
62namespace o3tl
63{
64template <> struct typed_flags<TG> : is_typed_flags<TG, 0x037fff>
65{
66};
67}
68
69// Tokens identifiers. Allow to know what kind of information the node contains.
71{
72 // clang-format off
73 // Uncategorized
78 // Basic
80 TGT, TLT, TGE, TLE, // > < >= <=
81 TASSIGN, TNEQ, TGG, TLL, // = != >>> <<<
82 TPARALLEL, TORTHO, TEQUIV, // Geometry
83 TOPER, TSUM, TPROD, TCOPROD, // Operators
84 TIM, TRE, THBAR, TLAMBDABAR, // Complex and constants
85 TPLUSMINUS, TMINUSPLUS, TSIM, TSIMEQ, // +- -+ ~ ~=
87 TOVER, TTIMES, TCDOT, TDIV, // Product type
89 TFRAC, TIT, // mathml related
90 // Structure
92 // Logic
93 TAND, TOR, TNEG, // && || !
97 TDRARROW, TDLARROW, TDLRARROW, TDEF, // Double arrows, definition
98 TPROP, TNDIVIDES, TDIVIDES, TAPPROX, // Proportions, approximation
99 TLESLANT, TGESLANT, TTRANSL, TTRANSR, // <= >= corresponds
100 // Tensors
103 // Positions
106 // Set theory
108 TIN, TNOTIN, TNI, TEMPTYSET, // Insideout
112 TALEPH, TWP, TINFINITY, // Abstract sets
113 TFORALL, TEXISTS, TNOTEXISTS, // Existential
114 // Font
116 TITALIC, TNITALIC, TBOLD, TNBOLD, // Bold ital
119 TFIXED, TSANS, TSERIF, // Types
120 TACUTE, TGRAVE, THAT, TBREVE, // Accents
124 TTEXT, TNUMBER, TCHARACTER, TIDENT, // Content type
125 // Brackets
126 TLEFT, TRIGHT, TUNDERBRACE, TOVERBRACE, // Scalable, upsidedown
129 TLCEIL, TRCEIL, TLFLOOR, TRFLOOR, // Reals -> Wholes
131 TLLINE, TRLINE, TLDLINE, TRDLINE, // Lines x1 x2
133 // Differential calculus
134 TNABLA, TPARTIAL, TFOURIER, TLAPLACE, // Derivative, Transformation
135 TINTD, TINT, TIINT, TIIINT, // Integral
136 TLINT, TLLINT, TLLLINT, // Circuit integral
137 TDOT, TDDOT, TDDDOT, // Derivative dots
138 // Function
139 TFUNC, TLN, TLOG, TEXP, // Exp - Log
140 TSIN, TCOS, TTAN, TCOT, // Trigo
141 TSINH, TCOSH, TTANH, TCOTH, // Trigo hyperbolic
142 TASIN, TACOS, TATAN, TACOT, // Arctrigo
143 TASINH, TACOSH, TATANH, TACOTH, // Arctrigo hyperbolic
144 TSQRT, TNROOT, TFACT, TABS, // roots, n! |z|
145 // Color
148 // clang-format on
150
152{
153 OUString aIdent;
157 sal_uInt16 nLevel;
158};
159
161{
162 OUString aIdent;
165
167 : eType(TERROR)
168 , cColor()
169 {
170 }
171
172 SmColorTokenTableEntry(const SmColorTokenTableEntry* amColorTokenTableEntry)
173 : aIdent(amColorTokenTableEntry->aIdent)
174 , eType(amColorTokenTableEntry->eType)
175 , cColor(amColorTokenTableEntry->cColor)
176 {
177 }
178
179 SmColorTokenTableEntry(const std::unique_ptr<SmColorTokenTableEntry> amColorTokenTableEntry)
180 : aIdent(amColorTokenTableEntry->aIdent)
181 , eType(amColorTokenTableEntry->eType)
182 , cColor(amColorTokenTableEntry->cColor)
183 {
184 }
185
186 SmColorTokenTableEntry(OUString name, SmTokenType ctype, Color ncolor)
187 : aIdent(std::move(name))
188 , eType(ctype)
189 , cColor(ncolor)
190 {
191 }
192
193 SmColorTokenTableEntry(OUString name, SmTokenType ctype, sal_uInt32 ncolor)
194 : aIdent(std::move(name))
195 , eType(ctype)
196 , cColor(ColorTransparency, ncolor)
197 {
198 }
199
200 bool equals(std::u16string_view colorname) const
201 {
202 return o3tl::compareToIgnoreAsciiCase(colorname, aIdent) == 0;
203 }
204
205 bool equals(sal_uInt32 colorcode) const { return colorcode == static_cast<sal_uInt32>(cColor); }
206
207 bool equals(Color colorcode) const { return colorcode == cColor; }
208};
209
211{
212 OUString aText; // token text
213 SmTokenType eType; // token info
214 OUString cMathChar;
215
216 // parse-help info
218 sal_uInt16 nLevel;
219
221 : eType(TUNKNOWN)
222 , cMathChar('\0')
223 , nGroup(TG::NONE)
224 , nLevel(0)
225 {
226 }
227
228 SmToken(SmTokenType eTokenType, sal_Unicode cMath, OUString rText, TG nTokenGroup = TG::NONE,
229 sal_uInt16 nTokenLevel = 0)
230 : aText(std::move(rText))
231 , eType(eTokenType)
232 , cMathChar(cMath)
233 , nGroup(nTokenGroup)
234 , nLevel(nTokenLevel)
235 {
236 }
237
238 void operator=(const SmTokenTableEntry& aTokenTableEntry)
239 {
240 aText = aTokenTableEntry.aIdent;
241 eType = aTokenTableEntry.eType;
242 cMathChar = OUString(&aTokenTableEntry.cMathChar, 1);
243 nGroup = aTokenTableEntry.nGroup;
244 nLevel = aTokenTableEntry.nLevel;
245 }
246
247 void operator=(const SmTokenTableEntry* aTokenTableEntry)
248 {
249 aText = aTokenTableEntry->aIdent;
250 eType = aTokenTableEntry->eType;
251 cMathChar = OUString(&aTokenTableEntry->cMathChar, 1);
252 nGroup = aTokenTableEntry->nGroup;
253 nLevel = aTokenTableEntry->nLevel;
254 }
255
256 void operator=(const SmColorTokenTableEntry& aTokenTableEntry)
257 {
258 aText = u"";
259 eType = aTokenTableEntry.eType;
260 cMathChar = OUString::number(static_cast<sal_uInt32>(aTokenTableEntry.cColor), 16);
262 nLevel = 0;
263 }
264
265 void operator=(const SmColorTokenTableEntry* aTokenTableEntry)
266 {
267 aText = u"";
268 eType = aTokenTableEntry->eType;
269 cMathChar = OUString::number(static_cast<sal_uInt32>(aTokenTableEntry->cColor), 16);
271 nLevel = 0;
272 }
273
274 void operator=(const std::unique_ptr<SmColorTokenTableEntry>& aTokenTableEntry)
275 {
276 aText = u"";
277 eType = aTokenTableEntry->eType;
278 cMathChar = OUString::number(static_cast<sal_uInt32>(aTokenTableEntry->cColor), 16);
280 nLevel = 0;
281 }
282
283 void setChar(sal_Unicode cChar) { cMathChar = OUString(&cChar, 1); }
284};
285
286/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
ColorTransparency
float u
const char * name
NONE
int compareToIgnoreAsciiCase(std::u16string_view s1, std::u16string_view s2)
SmColorTokenTableEntry(const SmColorTokenTableEntry *amColorTokenTableEntry)
Definition: token.hxx:172
bool equals(std::u16string_view colorname) const
Definition: token.hxx:200
bool equals(Color colorcode) const
Definition: token.hxx:207
bool equals(sal_uInt32 colorcode) const
Definition: token.hxx:205
SmColorTokenTableEntry(OUString name, SmTokenType ctype, Color ncolor)
Definition: token.hxx:186
SmColorTokenTableEntry(const std::unique_ptr< SmColorTokenTableEntry > amColorTokenTableEntry)
Definition: token.hxx:179
SmColorTokenTableEntry(OUString name, SmTokenType ctype, sal_uInt32 ncolor)
Definition: token.hxx:193
SmTokenType eType
Definition: token.hxx:163
sal_Unicode cMathChar
Definition: token.hxx:155
SmTokenType eType
Definition: token.hxx:154
OUString aIdent
Definition: token.hxx:153
sal_uInt16 nLevel
Definition: token.hxx:157
SmTokenType eType
Definition: token.hxx:213
void operator=(const SmTokenTableEntry *aTokenTableEntry)
Definition: token.hxx:247
sal_uInt16 nLevel
Definition: token.hxx:218
OUString cMathChar
Definition: token.hxx:214
void operator=(const std::unique_ptr< SmColorTokenTableEntry > &aTokenTableEntry)
Definition: token.hxx:274
SmToken(SmTokenType eTokenType, sal_Unicode cMath, OUString rText, TG nTokenGroup=TG::NONE, sal_uInt16 nTokenLevel=0)
Definition: token.hxx:228
OUString aText
Definition: token.hxx:212
TG nGroup
Definition: token.hxx:217
void operator=(const SmTokenTableEntry &aTokenTableEntry)
Definition: token.hxx:238
void operator=(const SmColorTokenTableEntry *aTokenTableEntry)
Definition: token.hxx:265
void setChar(sal_Unicode cChar)
Definition: token.hxx:283
SmToken()
Definition: token.hxx:220
void operator=(const SmColorTokenTableEntry &aTokenTableEntry)
Definition: token.hxx:256
TG
The tokens contain the information gathered by the parser.
Definition: token.hxx:41
@ FontAttr
@ RBrace
@ LBrace
@ Standalone
@ Relation
@ Limit
@ Function
@ NONE
@ UnOper
@ Color
SmTokenType
Definition: token.hxx:71
@ TNSUBSETEQ
Definition: token.hxx:110
@ TDDDOT
Definition: token.hxx:137
@ TWIDEHAT
Definition: token.hxx:121
@ TUPARROW
Definition: token.hxx:96
@ TLBRACKET
Definition: token.hxx:128
@ TSTACK
Definition: token.hxx:91
@ TSETQUOTIENT
Definition: token.hxx:111
@ TBINOM
Definition: token.hxx:91
@ TLFLOOR
Definition: token.hxx:129
@ TPARALLEL
Definition: token.hxx:82
@ TGT
Definition: token.hxx:80
@ TLEFT
Definition: token.hxx:126
@ TPARTIAL
Definition: token.hxx:134
@ TCHECK
Definition: token.hxx:123
@ TBREVE
Definition: token.hxx:120
@ TEQUIV
Definition: token.hxx:82
@ TODIVIDE
Definition: token.hxx:101
@ TTOWARD
Definition: token.hxx:86
@ TPROP
Definition: token.hxx:98
@ TWIDEHARPOON
Definition: token.hxx:121
@ TRDBRACKET
Definition: token.hxx:128
@ TGE
Definition: token.hxx:80
@ TLAMBDABAR
Definition: token.hxx:84
@ TGG
Definition: token.hxx:81
@ TFRAC
Definition: token.hxx:89
@ TSIZE
Definition: token.hxx:115
@ TGRAVE
Definition: token.hxx:120
@ TDOTSDIAG
Definition: token.hxx:77
@ TLRDLINE
Definition: token.hxx:132
@ TMINUS
Definition: token.hxx:79
@ TLE
Definition: token.hxx:80
@ TDOT
Definition: token.hxx:137
@ TNITALIC
Definition: token.hxx:116
@ TBAR
Definition: token.hxx:118
@ TFONT
Definition: token.hxx:115
@ TBOPER
Definition: token.hxx:105
@ TLDBRACKET
Definition: token.hxx:128
@ TSIN
Definition: token.hxx:140
@ TRIGHT
Definition: token.hxx:126
@ TSETZ
Definition: token.hxx:107
@ TTRANSL
Definition: token.hxx:99
@ TNOSPACE
Definition: token.hxx:75
@ TUNDERLINE
Definition: token.hxx:118
@ TLIMINF
Definition: token.hxx:86
@ TMATHMLCOL
Definition: token.hxx:147
@ TSQRT
Definition: token.hxx:144
@ TDIVIDEBY
Definition: token.hxx:79
@ TALIGNL
Definition: token.hxx:117
@ TSLASH
Definition: token.hxx:88
@ TMATRIX
Definition: token.hxx:91
@ TRDLINE
Definition: token.hxx:131
@ TDPOUND
Definition: token.hxx:91
@ TEVALUATE
Definition: token.hxx:132
@ TDIVIDES
Definition: token.hxx:98
@ TSETQ
Definition: token.hxx:107
@ TCOLOR
Definition: token.hxx:115
@ TACUTE
Definition: token.hxx:120
@ TSUBSET
Definition: token.hxx:109
@ TRGBA
Definition: token.hxx:146
@ TTO
Definition: token.hxx:105
@ TOVER
Definition: token.hxx:87
@ TDOTSAXIS
Definition: token.hxx:76
@ TOPER
Definition: token.hxx:83
@ TTAN
Definition: token.hxx:140
@ TUNKNOWN
Definition: token.hxx:74
@ TPRECEDESEQUIV
Definition: token.hxx:95
@ TFORALL
Definition: token.hxx:113
@ TNROOT
Definition: token.hxx:144
@ TAPPROX
Definition: token.hxx:98
@ TFROM
Definition: token.hxx:105
@ TIINT
Definition: token.hxx:135
@ TCOS
Definition: token.hxx:140
@ THBAR
Definition: token.hxx:84
@ TPRECEDESEQUAL
Definition: token.hxx:95
@ TESCAPE
Definition: token.hxx:74
@ TLEFTARROW
Definition: token.hxx:96
@ TACOS
Definition: token.hxx:142
@ THARPOON
Definition: token.hxx:122
@ TALIGNR
Definition: token.hxx:117
@ TMULTIPLY
Definition: token.hxx:79
@ TWIDEVEC
Definition: token.hxx:121
@ TDLRARROW
Definition: token.hxx:97
@ TRGROUP
Definition: token.hxx:127
@ TSERIF
Definition: token.hxx:119
@ TSUCCEEDSEQUAL
Definition: token.hxx:95
@ TSPECIAL
Definition: token.hxx:74
@ TORTHO
Definition: token.hxx:82
@ TNOTSUCCEEDS
Definition: token.hxx:94
@ TATAN
Definition: token.hxx:142
@ TINTERSECT
Definition: token.hxx:111
@ TNONE
Definition: token.hxx:74
@ TOPLUS
Definition: token.hxx:101
@ TRSUP
Definition: token.hxx:104
@ TNBOLD
Definition: token.hxx:116
@ TTILDE
Definition: token.hxx:122
@ TNUMBER
Definition: token.hxx:124
@ THAT
Definition: token.hxx:120
@ TICONICCOL
Definition: token.hxx:147
@ TMLINE
Definition: token.hxx:132
@ TUOPER
Definition: token.hxx:105
@ TUNION
Definition: token.hxx:111
@ TACOSH
Definition: token.hxx:143
@ TLIMSUP
Definition: token.hxx:86
@ TRBRACKET
Definition: token.hxx:128
@ TOMINUS
Definition: token.hxx:101
@ TABS
Definition: token.hxx:144
@ TSANS
Definition: token.hxx:119
@ TIM
Definition: token.hxx:84
@ TPRECEDES
Definition: token.hxx:94
@ TSIMEQ
Definition: token.hxx:85
@ TRBRACE
Definition: token.hxx:130
@ TVEC
Definition: token.hxx:122
@ TLBRACE
Definition: token.hxx:130
@ TIN
Definition: token.hxx:108
@ TEXP
Definition: token.hxx:139
@ TASSIGN
Definition: token.hxx:81
@ TSETMINUS
Definition: token.hxx:111
@ TATANH
Definition: token.hxx:143
@ TSUBSETEQ
Definition: token.hxx:109
@ TDDOT
Definition: token.hxx:137
@ TASIN
Definition: token.hxx:142
@ TSUCCEEDSEQUIV
Definition: token.hxx:95
@ TRE
Definition: token.hxx:84
@ TRGB
Definition: token.hxx:146
@ TLOG
Definition: token.hxx:139
@ TSUCCEEDS
Definition: token.hxx:94
@ TSINH
Definition: token.hxx:141
@ TUNDERBRACE
Definition: token.hxx:126
@ TNEG
Definition: token.hxx:93
@ TPROD
Definition: token.hxx:83
@ TBOLD
Definition: token.hxx:116
@ TLGROUP
Definition: token.hxx:127
@ TBACKEPSILON
Definition: token.hxx:76
@ TDOTSVERT
Definition: token.hxx:76
@ TWIDESLASH
Definition: token.hxx:88
@ TASINH
Definition: token.hxx:143
@ TDOWNARROW
Definition: token.hxx:96
@ TLANGLE
Definition: token.hxx:130
@ TPLACE
Definition: token.hxx:75
@ TDOTSUP
Definition: token.hxx:77
@ TLIM
Definition: token.hxx:86
@ TRLINE
Definition: token.hxx:131
@ TNSUBSET
Definition: token.hxx:110
@ TDOTSLOW
Definition: token.hxx:76
@ TCSUP
Definition: token.hxx:104
@ TNOTEXISTS
Definition: token.hxx:113
@ TNEQ
Definition: token.hxx:81
@ TACOT
Definition: token.hxx:142
@ TFOURIER
Definition: token.hxx:134
@ TLT
Definition: token.hxx:80
@ TWP
Definition: token.hxx:112
@ TDLARROW
Definition: token.hxx:97
@ TOVERLINE
Definition: token.hxx:118
@ TCIRC
Definition: token.hxx:102
@ TLSUP
Definition: token.hxx:105
@ TLLLINT
Definition: token.hxx:136
@ TLPARENT
Definition: token.hxx:127
@ TLINT
Definition: token.hxx:136
@ TSETC
Definition: token.hxx:107
@ TNDIVIDES
Definition: token.hxx:98
@ TNSUPSET
Definition: token.hxx:110
@ THTMLCOL
Definition: token.hxx:146
@ TDOTSDOWN
Definition: token.hxx:75
@ TCOSH
Definition: token.hxx:141
@ TEND
Definition: token.hxx:74
@ TFACT
Definition: token.hxx:144
@ TPLUS
Definition: token.hxx:79
@ TDRARROW
Definition: token.hxx:97
@ TGESLANT
Definition: token.hxx:99
@ TNABLA
Definition: token.hxx:134
@ TIIINT
Definition: token.hxx:135
@ TCSUB
Definition: token.hxx:104
@ TRIGHTARROW
Definition: token.hxx:96
@ TSIM
Definition: token.hxx:85
@ TALIGNC
Definition: token.hxx:117
@ TNI
Definition: token.hxx:108
@ TACOTH
Definition: token.hxx:143
@ TSBLANK
Definition: token.hxx:75
@ TERROR
Definition: token.hxx:77
@ TLL
Definition: token.hxx:81
@ TLSUB
Definition: token.hxx:104
@ TDEF
Definition: token.hxx:97
@ TDIV
Definition: token.hxx:87
@ TBLANK
Definition: token.hxx:75
@ TBACKSLASH
Definition: token.hxx:88
@ TINT
Definition: token.hxx:135
@ TAND
Definition: token.hxx:93
@ TNSUPSETEQ
Definition: token.hxx:110
@ TNEWLINE
Definition: token.hxx:76
@ TDVIPSNAMESCOL
Definition: token.hxx:146
@ TSUPSET
Definition: token.hxx:109
@ TTANH
Definition: token.hxx:141
@ TLAPLACE
Definition: token.hxx:134
@ TRCEIL
Definition: token.hxx:129
@ TODOT
Definition: token.hxx:101
@ TFIXED
Definition: token.hxx:119
@ TLLINT
Definition: token.hxx:136
@ TWIDETILDE
Definition: token.hxx:121
@ TLESLANT
Definition: token.hxx:99
@ TWIDEBACKSLASH
Definition: token.hxx:88
@ TINFINITY
Definition: token.hxx:112
@ TOTIMES
Definition: token.hxx:101
@ TEXISTS
Definition: token.hxx:113
@ TRANGLE
Definition: token.hxx:130
@ TOR
Definition: token.hxx:93
@ TITALIC
Definition: token.hxx:116
@ TPLUSMINUS
Definition: token.hxx:85
@ TLN
Definition: token.hxx:139
@ TEMPTYSET
Definition: token.hxx:108
@ TNOTPRECEDES
Definition: token.hxx:94
@ TTEXT
Definition: token.hxx:124
@ TINTD
Definition: token.hxx:135
@ TIDENT
Definition: token.hxx:124
@ TRFLOOR
Definition: token.hxx:129
@ TPOUND
Definition: token.hxx:91
@ TOVERBRACE
Definition: token.hxx:126
@ THEX
Definition: token.hxx:146
@ TIT
Definition: token.hxx:89
@ TFUNC
Definition: token.hxx:139
@ TPHANTOM
Definition: token.hxx:115
@ TTRANSR
Definition: token.hxx:99
@ TLCEIL
Definition: token.hxx:129
@ TMINUSPLUS
Definition: token.hxx:85
@ TCOT
Definition: token.hxx:140
@ TCIRCLE
Definition: token.hxx:122
@ TLLINE
Definition: token.hxx:131
@ TCOTH
Definition: token.hxx:141
@ TSETR
Definition: token.hxx:107
@ TCOPROD
Definition: token.hxx:83
@ TLDLINE
Definition: token.hxx:131
@ TSETN
Definition: token.hxx:107
@ TTIMES
Definition: token.hxx:87
@ TSUPSETEQ
Definition: token.hxx:109
@ TSUM
Definition: token.hxx:83
@ TALEPH
Definition: token.hxx:112
@ TRPARENT
Definition: token.hxx:127
@ TRSUB
Definition: token.hxx:104
@ TLRLINE
Definition: token.hxx:132
@ TCHARACTER
Definition: token.hxx:124
@ TOVERSTRIKE
Definition: token.hxx:118
@ TNOTIN
Definition: token.hxx:108
@ TCDOT
Definition: token.hxx:87
sal_uInt16 sal_Unicode