starmath/inc/strings.hxx                  |  601 +++++++++++++++---------------
 starmath/inc/token.hxx                    |    3 
 starmath/source/ElementsDockingWindow.cxx |   55 ++
 starmath/source/parse5.cxx                |   33 +
 4 files changed, 388 insertions(+), 304 deletions(-)

New commits:
commit fb0ecd64011922bc47716f77d4225bca3a8b0858
Author:     Khaled Hosny <kha...@libreoffice.org>
AuthorDate: Thu Sep 28 12:08:20 2023 +0300
Commit:     خالد حسني <kha...@libreoffice.org>
CommitDate: Thu Sep 28 14:34:43 2023 +0200

    starmath: Add Arabic functions to elements panel
    
    Change-Id: I9aa1bdd344dbca078aec683b5fcd93fd07d98521
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157365
    Tested-by: Jenkins
    Reviewed-by: خالد حسني <kha...@libreoffice.org>

diff --git a/starmath/inc/strings.hxx b/starmath/inc/strings.hxx
index 4be4f1d144f5..cf8e7d5de2ce 100644
--- a/starmath/inc/strings.hxx
+++ b/starmath/inc/strings.hxx
@@ -20,294 +20,319 @@
 inline constexpr OUStringLiteral RID_UNDOFORMATNAME = u"Format";
 
 // clang-format off
-#define RID_PLUSX               "+<?> "
-#define RID_MINUSX              "-<?> "
-#define RID_PLUSMINUSX          "+-<?> "
-#define RID_MINUSPLUSX          "-+<?> "
-#define RID_NEGX                "neg <?> "
-#define RID_XPLUSY              "<?> + <?> "
-#define RID_XMINUSY             "<?> - <?> "
-#define RID_XCDOTY              "<?> cdot <?> "
-#define RID_XTIMESY             "<?> times <?> "
-#define RID_XSYMTIMESY          "<?> * <?> "
-#define RID_XSYMDIVIDEY         "<?> / <?> "
-#define RID_XDIVY               "<?> div <?> "
-#define RID_XOVERY              "{<?>} over {<?>} "
-#define RID_FRACXY              "frac {<?>} {<?>} "
-#define RID_XODIVIDEY           "<?> odivide <?> "
-#define RID_XODOTY              "<?> odot <?> "
-#define RID_XOMINUSY            "<?> ominus <?> "
-#define RID_XOPLUSY             "<?> oplus <?> "
-#define RID_XOTIMESY            "<?> otimes <?> "
-#define RID_XANDY               "<?> and <?> "
-#define RID_XORY                "<?> or <?> "
-#define RID_XEQY                "<?> = <?> "
-#define RID_XNEQY               "<?> <> <?> "
-#define RID_XLTY                "<?> < <?> "
-#define RID_XGTY                "<?> > <?> "
-#define RID_XLEY                "<?> <= <?> "
-#define RID_XGEY                "<?> >= <?> "
-#define RID_XLESLANTY           "<?> leslant <?> "
-#define RID_XGESLANTY           "<?> geslant <?> "
-#define RID_XLLY                "<?> << <?> "
-#define RID_XGGY                "<?> >> <?> "
-#define RID_XDEFY               "<?> def <?> "
-#define RID_XEQUIVY             "<?> equiv <?> "
-#define RID_XAPPROXY            "<?> approx <?> "
-#define RID_XSIMY               "<?> sim <?> "
-#define RID_XSIMEQY             "<?> simeq <?> "
-#define RID_XPROPY              "<?> prop <?> "
-#define RID_XORTHOY             "<?> ortho <?> "
-#define RID_XPARALLELY          "<?> parallel <?> "
-#define RID_XTOWARDY            "<?> toward <?> "
-#define RID_XTRANSLY            "<?> transl <?> "
-#define RID_XTRANSRY            "<?> transr <?> "
-#define RID_XINY                "<?> in <?> "
-#define RID_XNOTINY             "<?> notin <?> "
-#define RID_XOWNSY              "<?> owns <?> "
-#define RID_XUNIONY             "<?> union <?> "
-#define RID_XINTERSECTIONY      "<?> intersection <?> "
-#define RID_XSETMINUSY          "<?> setminus <?> "
-#define RID_XSETQUOTIENTY       "<?> setquotient <?> "
-#define RID_XSUBSETY            "<?> subset <?> "
-#define RID_XSUBSETEQY          "<?> subseteq <?> "
-#define RID_XSUPSETY            "<?> supset <?> "
-#define RID_XSUPSETEQY          "<?> supseteq <?> "
-#define RID_XNSUBSETY           "<?> nsubset <?> "
-#define RID_XNSUBSETEQY         "<?> nsubseteq <?> "
-#define RID_XNSUPSETY           "<?> nsupset <?> "
-#define RID_XNSUPSETEQY         "<?> nsupseteq <?> "
-#define RID_FUNCX               "func <?>(<?>) "
-#define RID_ABSX                "abs{<?>} "
-#define RID_FACTX               "fact{<?>} "
-#define RID_SQRTX               "sqrt{<?>} "
-#define RID_NROOTXY             "nroot{<?>}{<?>} "
-#define RID_EX                  "func e^{<?>} "
-#define RID_EXPX                "exp(<?>) "
-#define RID_LNX                 "ln(<?>) "
-#define RID_LOGX                "log(<?>) "
-#define RID_SINX                "sin(<?>) "
-#define RID_COSX                "cos(<?>) "
-#define RID_TANX                "tan(<?>) "
-#define RID_COTX                "cot(<?>) "
-#define RID_ARCSINX             "arcsin(<?>) "
-#define RID_ARCCOSX             "arccos(<?>) "
-#define RID_ARCTANX             "arctan(<?>) "
-#define RID_ARCCOTX             "arccot(<?>) "
-#define RID_SINHX               "sinh(<?>) "
-#define RID_COSHX               "cosh(<?>) "
-#define RID_TANHX               "tanh(<?>) "
-#define RID_COTHX               "coth(<?>) "
-#define RID_ARSINHX             "arsinh(<?>) "
-#define RID_ARCOSHX             "arcosh(<?>) "
-#define RID_ARTANHX             "artanh(<?>) "
-#define RID_ARCOTHX             "arcoth(<?>) "
-#define RID_OPERX               "oper oper <?> "
-#define RID_OPER_FROMX          "oper oper from{<?>} <?> "
-#define RID_OPER_TOX            "oper oper to{<?>} <?> "
-#define RID_OPER_FROMTOX        "oper oper from{<?>} to{<?>} <?> "
-#define RID_SUMX                "sum <?> "
-#define RID_SUM_FROMX           "sum from{<?>} <?> "
-#define RID_SUM_TOX             "sum to{<?>} <?> "
-#define RID_SUM_FROMTOX         "sum from{<?>} to{<?>} <?> "
-#define RID_MAJX                "maj <?> "
-#define RID_MAJ_FROMX           "maj from{<?>} <?> "
-#define RID_MAJ_TOX             "maj to{<?>} <?> "
-#define RID_MAJ_FROMTOX         "maj from{<?>} to{<?>} <?> "
-#define RID_PRODX               "prod <?> "
-#define RID_PROD_FROMX          "prod from{<?>} <?> "
-#define RID_PROD_TOX            "prod to{<?>} <?> "
-#define RID_PROD_FROMTOX        "prod from{<?>} to{<?>} <?> "
-#define RID_COPRODX             "coprod <?> "
-#define RID_COPROD_FROMX        "coprod from{<?>} <?> "
-#define RID_COPROD_TOX          "coprod to{<?>} <?> "
-#define RID_COPROD_FROMTOX      "coprod from{<?>} to{<?>} <?> "
-#define RID_LIMX                "lim <?> "
-#define RID_LIM_FROMX           "lim from{<?>} <?> "
-#define RID_LIM_TOX             "lim to{<?>} <?> "
-#define RID_LIM_FROMTOX         "lim from{<?>} to{<?>} <?> "
-#define RID_LIMINFX             "liminf <?> "
-#define RID_LIMINF_FROMX        "liminf from{<?>} <?> "
-#define RID_LIMINF_TOX          "liminf to{<?>} <?> "
-#define RID_LIMINF_FROMTOX      "liminf from{<?>} to{<?>} <?> "
-#define RID_LIMSUPX             "limsup <?> "
-#define RID_LIMSUP_FROMX        "limsup from{<?>} <?> "
-#define RID_LIMSUP_TOX          "limsup to{<?>} <?> "
-#define RID_LIMSUP_FROMTOX      "limsup from{<?>} to{<?>} <?> "
-#define RID_HADDX               "hadd <?> "
-#define RID_HADD_FROMX          "hadd from{<?>} <?> "
-#define RID_HADD_TOX            "hadd to{<?>} <?> "
-#define RID_HADD_FROMTOX        "hadd from{<?>} to{<?>} <?> "
-#define RID_EXISTS              "exists "
-#define RID_NOTEXISTS           "notexists "
-#define RID_FORALL              "forall "
-#define RID_INTX                "int <?> "
-#define RID_INT_FROMX           "int from{<?>} <?> "
-#define RID_INT_TOX             "int to{<?>} <?> "
-#define RID_INT_FROMTOX         "int from{<?>} to{<?>} <?> "
-#define RID_IINTX               "iint <?> "
-#define RID_IINT_FROMX          "iint from{<?>} <?> "
-#define RID_IINT_TOX            "iint to{<?>} <?> "
-#define RID_IINT_FROMTOX        "iint from{<?>} to{<?>} <?> "
-#define RID_IIINTX              "iiint <?> "
-#define RID_IIINT_FROMX         "iiint from{<?>} <?> "
-#define RID_IIINT_TOX           "iiint to{<?>} <?> "
-#define RID_IIINT_FROMTOX       "iiint from{<?>} to{<?>} <?> "
-#define RID_LINTX               "lint <?> "
-#define RID_LINT_FROMX          "lint from{<?>} <?> "
-#define RID_LINT_TOX            "lint to{<?>} <?> "
-#define RID_LINT_FROMTOX        "lint from{<?>} to{<?>} <?> "
-#define RID_LLINTX              "llint <?> "
-#define RID_LLINT_FROMX         "llint from{<?>} <?> "
-#define RID_LLINT_TOX           "llint to{<?>} <?> "
-#define RID_LLINT_FROMTOX       "llint from{<?>} to{<?>} <?> "
-#define RID_LLLINTX             "lllint <?> "
-#define RID_LLLINT_FROMX        "lllint from{<?>} <?> "
-#define RID_LLLINT_TOX          "lllint to{<?>} <?> "
-#define RID_LLLINT_FROMTOX      "lllint from{<?>} to{<?>} <?> "
-#define RID_FROMX               "from{<?>} <?> "
-#define RID_TOX                 "to{<?>} <?> "
-#define RID_FROMXTOY            "from{<?>} to{<?>} <?> "
-#define RID_ACUTEX              "acute <?> "
-#define RID_BARX                "bar <?> "
-#define RID_BREVEX              "breve <?> "
-#define RID_CHECKX              "check <?> "
-#define RID_CIRCLEX             "circle <?> "
-#define RID_DOTX                "dot <?> "
-#define RID_DDOTX               "ddot <?> "
-#define RID_DDDOTX              "dddot <?> "
-#define RID_GRAVEX              "grave <?> "
-#define RID_HATX                "hat <?> "
-#define RID_TILDEX              "tilde <?> "
-#define RID_VECX                "vec <?> "
-#define RID_HARPOONX            "harpoon <?> "
-#define RID_UNDERLINEX          "underline {<?>} "
-#define RID_OVERLINEX           "overline {<?>} "
-#define RID_OVERSTRIKEX         "overstrike {<?>} "
-#define RID_PHANTOMX            "phantom {<?>} "
-#define RID_BOLDX               "bold <?> "
-#define RID_ITALX               "ital <?> "
-#define RID_SIZEXY              "size <?> {<?>} "
-#define RID_FONTXY              "font <?> {<?>} "
-#define RID_COLORX_BLACK        "color black {<?>} "
-#define RID_COLORX_BLUE         "color blue {<?>} "
-#define RID_COLORX_GREEN        "color green {<?>} "
-#define RID_COLORX_RED          "color red {<?>} "
-#define RID_COLORX_AQUA         "color aqua {<?>} "
-#define RID_COLORX_FUCHSIA      "color fuchsia {<?>} "
-#define RID_COLORX_GRAY         "color gray {<?>} "
-#define RID_COLORX_LIME         "color lime {<?>} "
-#define RID_COLORX_MAROON       "color maroon {<?>} "
-#define RID_COLORX_NAVY         "color navy {<?>} "
-#define RID_COLORX_OLIVE        "color olive {<?>} "
-#define RID_COLORX_PURPLE       "color purple {<?>} "
-#define RID_COLORX_SILVER       "color silver {<?>} "
-#define RID_COLORX_TEAL         "color teal {<?>} "
-#define RID_COLORX_YELLOW       "color yellow {<?>} "
-#define RID_COLORX_RGB          "color rgb 0 0 0 {<?>} "
-#define RID_COLORX_RGBA         "color rgba 0 0 0 0 {<?>} "
-#define RID_COLORX_HEX          "color hex 000000 {<?>} "
-#define RID_COLORX_CORAL        "color coral {<?>} "
-#define RID_COLORX_CRIMSON      "color crimson {<?>} "
-#define RID_COLORX_MIDNIGHT     "color midnightblue {<?>} "
-#define RID_COLORX_VIOLET       "color violet {<?>} "
-#define RID_COLORX_ORANGE       "color orange {<?>} "
-#define RID_COLORX_ORANGERED    "color orangered {<?>} "
-#define RID_COLORX_SEAGREEN     "color seagreen {<?>} "
-#define RID_COLORX_INDIGO       "color indigo {<?>} "
-#define RID_COLORX_HOTPINK      "color hotpink {<?>} "
-#define RID_COLORX_LAVENDER     "color lavender {<?>} "
-#define RID_COLORX_SNOW         "color snow {<?>} "
-#define RID_LRGROUPX            "{<?>} "
-#define RID_LRPARENTX           "(<?>) "
-#define RID_LRBRACKETX          "[<?>] "
-#define RID_LRDBRACKETX         "ldbracket <?> rdbracket "
-#define RID_LRBRACEX            "lbrace <?> rbrace "
-#define RID_LRANGLEX            "langle <?> rangle "
-#define RID_LRCEILX             "lceil <?> rceil "
-#define RID_LRFLOORX            "lfloor <?> rfloor "
-#define RID_LRLINEX             "lline <?> rline "
-#define RID_LRDLINEX            "ldline <?> rdline "
-#define RID_LMRANGLEXY          "langle <?> mline <?> rangle "
-#define RID_SLRPARENTX          "left ( <?> right ) "
-#define RID_SLRBRACKETX         "left [ <?> right ] "
-#define RID_SLRDBRACKETX        "left ldbracket <?> right rdbracket "
-#define RID_SLRBRACEX           "left lbrace <?> right rbrace "
-#define RID_SLRANGLEX           "left langle <?> right rangle "
-#define RID_SLRCEILX            "left lceil <?> right rceil "
-#define RID_SLRFLOORX           "left lfloor <?> right rfloor "
-#define RID_SLRLINEX            "left lline <?> right rline "
-#define RID_SLRDLINEX           "left ldline <?> right rdline "
-#define RID_SLMRANGLEXY         "left langle <?> mline <?> right rangle "
-#define RID_XOVERBRACEY         "{<?>} overbrace {<?>} "
-#define RID_XUNDERBRACEY        "{<?>} underbrace {<?>} "
-#define RID_EVALX               "evaluate <?> "
-#define RID_EVAL_FROMX          "evaluate {<?>} from{<?>} "
-#define RID_EVAL_TOX            "evaluate {<?>} to{<?>} "
-#define RID_EVAL_FROMTOX        "evaluate {<?>} from{<?>} to{<?>} "
-#define RID_RSUBX               "<?>_{<?>} "
-#define RID_RSUPX               "<?>^{<?>} "
-#define RID_LSUBX               "<?> lsub{<?>} "
-#define RID_LSUPX               "<?> lsup{<?>} "
-#define RID_CSUBX               "<?> csub{<?>} "
-#define RID_CSUPX               "<?> csup{<?>} "
-#define RID_SBLANK              "` "
-#define RID_BLANK               "~ "
-#define RID_NEWLINE             "newline "
-#define RID_BINOMXY             "binom{<?>}{<?>} "
-#define RID_STACK               "stack{<?> # <?> # <?>} "
-#define RID_MATRIX              "matrix{<?> # <?> ## <?> # <?>} "
-#define RID_ALIGNLX             "alignl <?> "
-#define RID_ALIGNCX             "alignc <?> "
-#define RID_ALIGNRX             "alignr <?> "
-#define RID_ALEPH               "aleph "
-#define RID_EMPTYSET            "emptyset "
-#define RID_RE                  "Re "
-#define RID_IM                  "Im "
-#define RID_INFINITY            "infinity "
-#define RID_PARTIAL             "partial "
-#define RID_NABLA               "nabla "
-#define RID_WP                  "wp "
-#define RID_LAPLACE             "laplace "
-#define RID_BACKEPSILON         "backepsilon "
-#define RID_FOURIER             "fourier "
-#define RID_DOTSAXIS            "dotsaxis "
-#define RID_DOTSUP              "dotsup "
-#define RID_DOTSDOWN            "dotsdown "
-#define RID_DOTSLOW             "dotslow "
-#define RID_DOTSVERT            "dotsvert "
-#define RID_XCIRCY              "<?> circ <?> "
-#define RID_XWIDESLASHY         "{<?>} wideslash {<?>} "
-#define RID_XWIDEBSLASHY        "{<?>} widebslash {<?>} "
-#define RID_XDIVIDESY           "<?> divides <?> "
-#define RID_XNDIVIDESY          "<?> ndivides <?> "
-#define RID_DLARROW             "<?> dlarrow <?> "
-#define RID_DLRARROW            "<?> dlrarrow <?> "
-#define RID_DRARROW             "<?> drarrow <?> "
-#define RID_SETN                "setN "
-#define RID_SETZ                "setZ "
-#define RID_SETQ                "setQ "
-#define RID_SETR                "setR "
-#define RID_SETC                "setC "
-#define RID_WIDEHATX            "widehat {<?>} "
-#define RID_WIDETILDEX          "widetilde {<?>} "
-#define RID_WIDEVECX            "widevec {<?>} "
-#define RID_WIDEHARPOONX        "wideharpoon {<?>} "
-#define RID_HBAR                "hbar "
-#define RID_LAMBDABAR           "lambdabar "
-#define RID_LEFTARROW           "leftarrow "
-#define RID_RIGHTARROW          "rightarrow "
-#define RID_UPARROW             "uparrow "
-#define RID_DOWNARROW           "downarrow "
-#define RID_NOSPACE             "nospace {<?>} "
-#define RID_XPRECEDESY          "<?> prec <?> "
-#define RID_XPRECEDESEQUALY     "<?> preccurlyeq <?> "
-#define RID_XPRECEDESEQUIVY     "<?> precsim <?> "
-#define RID_XSUCCEEDSY          "<?> succ <?> "
-#define RID_XSUCCEEDSEQUALY     "<?> succcurlyeq <?> "
-#define RID_XSUCCEEDSEQUIVY     "<?> succsim <?> "
-#define RID_XNOTPRECEDESY       "<?> nprec <?> "
-#define RID_XNOTSUCCEEDSY       "<?> nsucc <?> "
+#define RID_PLUSX               u"+<?> "
+#define RID_MINUSX              u"-<?> "
+#define RID_PLUSMINUSX          u"+-<?> "
+#define RID_MINUSPLUSX          u"-+<?> "
+#define RID_NEGX                u"neg <?> "
+#define RID_XPLUSY              u"<?> + <?> "
+#define RID_XMINUSY             u"<?> - <?> "
+#define RID_XCDOTY              u"<?> cdot <?> "
+#define RID_XTIMESY             u"<?> times <?> "
+#define RID_XSYMTIMESY          u"<?> * <?> "
+#define RID_XSYMDIVIDEY         u"<?> / <?> "
+#define RID_XDIVY               u"<?> div <?> "
+#define RID_XOVERY              u"{<?>} over {<?>} "
+#define RID_FRACXY              u"frac {<?>} {<?>} "
+#define RID_XODIVIDEY           u"<?> odivide <?> "
+#define RID_XODOTY              u"<?> odot <?> "
+#define RID_XOMINUSY            u"<?> ominus <?> "
+#define RID_XOPLUSY             u"<?> oplus <?> "
+#define RID_XOTIMESY            u"<?> otimes <?> "
+#define RID_XANDY               u"<?> and <?> "
+#define RID_XORY                u"<?> or <?> "
+#define RID_XEQY                u"<?> = <?> "
+#define RID_XNEQY               u"<?> <> <?> "
+#define RID_XLTY                u"<?> < <?> "
+#define RID_XGTY                u"<?> > <?> "
+#define RID_XLEY                u"<?> <= <?> "
+#define RID_XGEY                u"<?> >= <?> "
+#define RID_XLESLANTY           u"<?> leslant <?> "
+#define RID_XGESLANTY           u"<?> geslant <?> "
+#define RID_XLLY                u"<?> << <?> "
+#define RID_XGGY                u"<?> >> <?> "
+#define RID_XDEFY               u"<?> def <?> "
+#define RID_XEQUIVY             u"<?> equiv <?> "
+#define RID_XAPPROXY            u"<?> approx <?> "
+#define RID_XSIMY               u"<?> sim <?> "
+#define RID_XSIMEQY             u"<?> simeq <?> "
+#define RID_XPROPY              u"<?> prop <?> "
+#define RID_XORTHOY             u"<?> ortho <?> "
+#define RID_XPARALLELY          u"<?> parallel <?> "
+#define RID_XTOWARDY            u"<?> toward <?> "
+#define RID_XTRANSLY            u"<?> transl <?> "
+#define RID_XTRANSRY            u"<?> transr <?> "
+#define RID_XINY                u"<?> in <?> "
+#define RID_XNOTINY             u"<?> notin <?> "
+#define RID_XOWNSY              u"<?> owns <?> "
+#define RID_XUNIONY             u"<?> union <?> "
+#define RID_XINTERSECTIONY      u"<?> intersection <?> "
+#define RID_XSETMINUSY          u"<?> setminus <?> "
+#define RID_XSETQUOTIENTY       u"<?> setquotient <?> "
+#define RID_XSUBSETY            u"<?> subset <?> "
+#define RID_XSUBSETEQY          u"<?> subseteq <?> "
+#define RID_XSUPSETY            u"<?> supset <?> "
+#define RID_XSUPSETEQY          u"<?> supseteq <?> "
+#define RID_XNSUBSETY           u"<?> nsubset <?> "
+#define RID_XNSUBSETEQY         u"<?> nsubseteq <?> "
+#define RID_XNSUPSETY           u"<?> nsupset <?> "
+#define RID_XNSUPSETEQY         u"<?> nsupseteq <?> "
+#define RID_FUNCX               u"func <?>(<?>) "
+#define RID_ABSX                u"abs{<?>} "
+#define RID_FACTX               u"fact{<?>} "
+#define RID_SQRTX               u"sqrt{<?>} "
+#define RID_NROOTXY             u"nroot{<?>}{<?>} "
+#define RID_EX                  u"func e^{<?>} "
+#define RID_EXPX                u"exp(<?>) "
+#define RID_LNX                 u"ln(<?>) "
+#define RID_LOGX                u"log(<?>) "
+#define RID_SINX                u"sin(<?>) "
+#define RID_COSX                u"cos(<?>) "
+#define RID_TANX                u"tan(<?>) "
+#define RID_COTX                u"cot(<?>) "
+#define RID_ARCSINX             u"arcsin(<?>) "
+#define RID_ARCCOSX             u"arccos(<?>) "
+#define RID_ARCTANX             u"arctan(<?>) "
+#define RID_ARCCOTX             u"arccot(<?>) "
+#define RID_SINHX               u"sinh(<?>) "
+#define RID_COSHX               u"cosh(<?>) "
+#define RID_TANHX               u"tanh(<?>) "
+#define RID_COTHX               u"coth(<?>) "
+#define RID_ARSINHX             u"arsinh(<?>) "
+#define RID_ARCOSHX             u"arcosh(<?>) "
+#define RID_ARTANHX             u"artanh(<?>) "
+#define RID_ARCOTHX             u"arcoth(<?>) "
+#define RID_OPERX               u"oper oper <?> "
+#define RID_OPER_FROMX          u"oper oper from{<?>} <?> "
+#define RID_OPER_TOX            u"oper oper to{<?>} <?> "
+#define RID_OPER_FROMTOX        u"oper oper from{<?>} to{<?>} <?> "
+#define RID_SUMX                u"sum <?> "
+#define RID_SUM_FROMX           u"sum from{<?>} <?> "
+#define RID_SUM_TOX             u"sum to{<?>} <?> "
+#define RID_SUM_FROMTOX         u"sum from{<?>} to{<?>} <?> "
+#define RID_MAJX                u"maj <?> "
+#define RID_MAJ_FROMX           u"maj from{<?>} <?> "
+#define RID_MAJ_TOX             u"maj to{<?>} <?> "
+#define RID_MAJ_FROMTOX         u"maj from{<?>} to{<?>} <?> "
+#define RID_PRODX               u"prod <?> "
+#define RID_PROD_FROMX          u"prod from{<?>} <?> "
+#define RID_PROD_TOX            u"prod to{<?>} <?> "
+#define RID_PROD_FROMTOX        u"prod from{<?>} to{<?>} <?> "
+#define RID_COPRODX             u"coprod <?> "
+#define RID_COPROD_FROMX        u"coprod from{<?>} <?> "
+#define RID_COPROD_TOX          u"coprod to{<?>} <?> "
+#define RID_COPROD_FROMTOX      u"coprod from{<?>} to{<?>} <?> "
+#define RID_LIMX                u"lim <?> "
+#define RID_LIM_FROMX           u"lim from{<?>} <?> "
+#define RID_LIM_TOX             u"lim to{<?>} <?> "
+#define RID_LIM_FROMTOX         u"lim from{<?>} to{<?>} <?> "
+#define RID_LIMINFX             u"liminf <?> "
+#define RID_LIMINF_FROMX        u"liminf from{<?>} <?> "
+#define RID_LIMINF_TOX          u"liminf to{<?>} <?> "
+#define RID_LIMINF_FROMTOX      u"liminf from{<?>} to{<?>} <?> "
+#define RID_LIMSUPX             u"limsup <?> "
+#define RID_LIMSUP_FROMX        u"limsup from{<?>} <?> "
+#define RID_LIMSUP_TOX          u"limsup to{<?>} <?> "
+#define RID_LIMSUP_FROMTOX      u"limsup from{<?>} to{<?>} <?> "
+#define RID_HADDX               u"hadd <?> "
+#define RID_HADD_FROMX          u"hadd from{<?>} <?> "
+#define RID_HADD_TOX            u"hadd to{<?>} <?> "
+#define RID_HADD_FROMTOX        u"hadd from{<?>} to{<?>} <?> "
+#define RID_EXISTS              u"exists "
+#define RID_NOTEXISTS           u"notexists "
+#define RID_FORALL              u"forall "
+#define RID_INTX                u"int <?> "
+#define RID_INT_FROMX           u"int from{<?>} <?> "
+#define RID_INT_TOX             u"int to{<?>} <?> "
+#define RID_INT_FROMTOX         u"int from{<?>} to{<?>} <?> "
+#define RID_IINTX               u"iint <?> "
+#define RID_IINT_FROMX          u"iint from{<?>} <?> "
+#define RID_IINT_TOX            u"iint to{<?>} <?> "
+#define RID_IINT_FROMTOX        u"iint from{<?>} to{<?>} <?> "
+#define RID_IIINTX              u"iiint <?> "
+#define RID_IIINT_FROMX         u"iiint from{<?>} <?> "
+#define RID_IIINT_TOX           u"iiint to{<?>} <?> "
+#define RID_IIINT_FROMTOX       u"iiint from{<?>} to{<?>} <?> "
+#define RID_LINTX               u"lint <?> "
+#define RID_LINT_FROMX          u"lint from{<?>} <?> "
+#define RID_LINT_TOX            u"lint to{<?>} <?> "
+#define RID_LINT_FROMTOX        u"lint from{<?>} to{<?>} <?> "
+#define RID_LLINTX              u"llint <?> "
+#define RID_LLINT_FROMX         u"llint from{<?>} <?> "
+#define RID_LLINT_TOX           u"llint to{<?>} <?> "
+#define RID_LLINT_FROMTOX       u"llint from{<?>} to{<?>} <?> "
+#define RID_LLLINTX             u"lllint <?> "
+#define RID_LLLINT_FROMX        u"lllint from{<?>} <?> "
+#define RID_LLLINT_TOX          u"lllint to{<?>} <?> "
+#define RID_LLLINT_FROMTOX      u"lllint from{<?>} to{<?>} <?> "
+#define RID_FROMX               u"from{<?>} <?> "
+#define RID_TOX                 u"to{<?>} <?> "
+#define RID_FROMXTOY            u"from{<?>} to{<?>} <?> "
+#define RID_ACUTEX              u"acute <?> "
+#define RID_BARX                u"bar <?> "
+#define RID_BREVEX              u"breve <?> "
+#define RID_CHECKX              u"check <?> "
+#define RID_CIRCLEX             u"circle <?> "
+#define RID_DOTX                u"dot <?> "
+#define RID_DDOTX               u"ddot <?> "
+#define RID_DDDOTX              u"dddot <?> "
+#define RID_GRAVEX              u"grave <?> "
+#define RID_HATX                u"hat <?> "
+#define RID_TILDEX              u"tilde <?> "
+#define RID_VECX                u"vec <?> "
+#define RID_HARPOONX            u"harpoon <?> "
+#define RID_UNDERLINEX          u"underline {<?>} "
+#define RID_OVERLINEX           u"overline {<?>} "
+#define RID_OVERSTRIKEX         u"overstrike {<?>} "
+#define RID_PHANTOMX            u"phantom {<?>} "
+#define RID_BOLDX               u"bold <?> "
+#define RID_ITALX               u"ital <?> "
+#define RID_SIZEXY              u"size <?> {<?>} "
+#define RID_FONTXY              u"font <?> {<?>} "
+#define RID_COLORX_BLACK        u"color black {<?>} "
+#define RID_COLORX_BLUE         u"color blue {<?>} "
+#define RID_COLORX_GREEN        u"color green {<?>} "
+#define RID_COLORX_RED          u"color red {<?>} "
+#define RID_COLORX_AQUA         u"color aqua {<?>} "
+#define RID_COLORX_FUCHSIA      u"color fuchsia {<?>} "
+#define RID_COLORX_GRAY         u"color gray {<?>} "
+#define RID_COLORX_LIME         u"color lime {<?>} "
+#define RID_COLORX_MAROON       u"color maroon {<?>} "
+#define RID_COLORX_NAVY         u"color navy {<?>} "
+#define RID_COLORX_OLIVE        u"color olive {<?>} "
+#define RID_COLORX_PURPLE       u"color purple {<?>} "
+#define RID_COLORX_SILVER       u"color silver {<?>} "
+#define RID_COLORX_TEAL         u"color teal {<?>} "
+#define RID_COLORX_YELLOW       u"color yellow {<?>} "
+#define RID_COLORX_RGB          u"color rgb 0 0 0 {<?>} "
+#define RID_COLORX_RGBA         u"color rgba 0 0 0 0 {<?>} "
+#define RID_COLORX_HEX          u"color hex 000000 {<?>} "
+#define RID_COLORX_CORAL        u"color coral {<?>} "
+#define RID_COLORX_CRIMSON      u"color crimson {<?>} "
+#define RID_COLORX_MIDNIGHT     u"color midnightblue {<?>} "
+#define RID_COLORX_VIOLET       u"color violet {<?>} "
+#define RID_COLORX_ORANGE       u"color orange {<?>} "
+#define RID_COLORX_ORANGERED    u"color orangered {<?>} "
+#define RID_COLORX_SEAGREEN     u"color seagreen {<?>} "
+#define RID_COLORX_INDIGO       u"color indigo {<?>} "
+#define RID_COLORX_HOTPINK      u"color hotpink {<?>} "
+#define RID_COLORX_LAVENDER     u"color lavender {<?>} "
+#define RID_COLORX_SNOW         u"color snow {<?>} "
+#define RID_LRGROUPX            u"{<?>} "
+#define RID_LRPARENTX           u"(<?>) "
+#define RID_LRBRACKETX          u"[<?>] "
+#define RID_LRDBRACKETX         u"ldbracket <?> rdbracket "
+#define RID_LRBRACEX            u"lbrace <?> rbrace "
+#define RID_LRANGLEX            u"langle <?> rangle "
+#define RID_LRCEILX             u"lceil <?> rceil "
+#define RID_LRFLOORX            u"lfloor <?> rfloor "
+#define RID_LRLINEX             u"lline <?> rline "
+#define RID_LRDLINEX            u"ldline <?> rdline "
+#define RID_LMRANGLEXY          u"langle <?> mline <?> rangle "
+#define RID_SLRPARENTX          u"left ( <?> right ) "
+#define RID_SLRBRACKETX         u"left [ <?> right ] "
+#define RID_SLRDBRACKETX        u"left ldbracket <?> right rdbracket "
+#define RID_SLRBRACEX           u"left lbrace <?> right rbrace "
+#define RID_SLRANGLEX           u"left langle <?> right rangle "
+#define RID_SLRCEILX            u"left lceil <?> right rceil "
+#define RID_SLRFLOORX           u"left lfloor <?> right rfloor "
+#define RID_SLRLINEX            u"left lline <?> right rline "
+#define RID_SLRDLINEX           u"left ldline <?> right rdline "
+#define RID_SLMRANGLEXY         u"left langle <?> mline <?> right rangle "
+#define RID_XOVERBRACEY         u"{<?>} overbrace {<?>} "
+#define RID_XUNDERBRACEY        u"{<?>} underbrace {<?>} "
+#define RID_EVALX               u"evaluate <?> "
+#define RID_EVAL_FROMX          u"evaluate {<?>} from{<?>} "
+#define RID_EVAL_TOX            u"evaluate {<?>} to{<?>} "
+#define RID_EVAL_FROMTOX        u"evaluate {<?>} from{<?>} to{<?>} "
+#define RID_RSUBX               u"<?>_{<?>} "
+#define RID_RSUPX               u"<?>^{<?>} "
+#define RID_LSUBX               u"<?> lsub{<?>} "
+#define RID_LSUPX               u"<?> lsup{<?>} "
+#define RID_CSUBX               u"<?> csub{<?>} "
+#define RID_CSUPX               u"<?> csup{<?>} "
+#define RID_SBLANK              u"` "
+#define RID_BLANK               u"~ "
+#define RID_NEWLINE             u"newline "
+#define RID_BINOMXY             u"binom{<?>}{<?>} "
+#define RID_STACK               u"stack{<?> # <?> # <?>} "
+#define RID_MATRIX              u"matrix{<?> # <?> ## <?> # <?>} "
+#define RID_ALIGNLX             u"alignl <?> "
+#define RID_ALIGNCX             u"alignc <?> "
+#define RID_ALIGNRX             u"alignr <?> "
+#define RID_ALEPH               u"aleph "
+#define RID_EMPTYSET            u"emptyset "
+#define RID_RE                  u"Re "
+#define RID_IM                  u"Im "
+#define RID_INFINITY            u"infinity "
+#define RID_PARTIAL             u"partial "
+#define RID_NABLA               u"nabla "
+#define RID_WP                  u"wp "
+#define RID_LAPLACE             u"laplace "
+#define RID_BACKEPSILON         u"backepsilon "
+#define RID_FOURIER             u"fourier "
+#define RID_DOTSAXIS            u"dotsaxis "
+#define RID_DOTSUP              u"dotsup "
+#define RID_DOTSDOWN            u"dotsdown "
+#define RID_DOTSLOW             u"dotslow "
+#define RID_DOTSVERT            u"dotsvert "
+#define RID_XCIRCY              u"<?> circ <?> "
+#define RID_XWIDESLASHY         u"{<?>} wideslash {<?>} "
+#define RID_XWIDEBSLASHY        u"{<?>} widebslash {<?>} "
+#define RID_XDIVIDESY           u"<?> divides <?> "
+#define RID_XNDIVIDESY          u"<?> ndivides <?> "
+#define RID_DLARROW             u"<?> dlarrow <?> "
+#define RID_DLRARROW            u"<?> dlrarrow <?> "
+#define RID_DRARROW             u"<?> drarrow <?> "
+#define RID_SETN                u"setN "
+#define RID_SETZ                u"setZ "
+#define RID_SETQ                u"setQ "
+#define RID_SETR                u"setR "
+#define RID_SETC                u"setC "
+#define RID_WIDEHATX            u"widehat {<?>} "
+#define RID_WIDETILDEX          u"widetilde {<?>} "
+#define RID_WIDEVECX            u"widevec {<?>} "
+#define RID_WIDEHARPOONX        u"wideharpoon {<?>} "
+#define RID_HBAR                u"hbar "
+#define RID_LAMBDABAR           u"lambdabar "
+#define RID_LEFTARROW           u"leftarrow "
+#define RID_RIGHTARROW          u"rightarrow "
+#define RID_UPARROW             u"uparrow "
+#define RID_DOWNARROW           u"downarrow "
+#define RID_NOSPACE             u"nospace {<?>} "
+#define RID_XPRECEDESY          u"<?> prec <?> "
+#define RID_XPRECEDESEQUALY     u"<?> preccurlyeq <?> "
+#define RID_XPRECEDESEQUIVY     u"<?> precsim <?> "
+#define RID_XSUCCEEDSY          u"<?> succ <?> "
+#define RID_XSUCCEEDSEQUALY     u"<?> succcurlyeq <?> "
+#define RID_XSUCCEEDSEQUIVY     u"<?> succsim <?> "
+#define RID_XNOTPRECEDESY       u"<?> nprec <?> "
+#define RID_XNOTSUCCEEDSY       u"<?> nsucc <?> "
+#define RID_ARALOGX             u"لو(<?>) "
+#define RID_ARASINX             u"حا(<?>) "
+#define RID_ARACOSX             u"حتا(<?>) "
+#define RID_ARATANX             u"طا(<?>) "
+#define RID_ARACOTX             u"طتا(<?>) "
+#define RID_ARASECX             u"ٯا(<?>) "
+#define RID_ARACSCX             u"ٯتا(<?>) "
+#define RID_ARASINHX            u"حاز(<?>) "
+#define RID_ARACOSHX            u"حتاز(<?>) "
+#define RID_ARATANHX            u"طاز(<?>) "
+#define RID_ARACOTHX            u"طتاز(<?>) "
+#define RID_ARASECHX            u"ٯاز(<?>) "
+#define RID_ARACSCHX            u"ٯتاز(<?>) "
+#define RID_ARASIN2X            u"جا(<?>) "
+#define RID_ARACOS2X            u"جتا(<?>) "
+#define RID_ARATAN2X            u"ظا(<?>) "
+#define RID_ARACOT2X            u"ظتا(<?>) "
+#define RID_ARASEC2X            u"قا(<?>) "
+#define RID_ARACSC2X            u"قتا(<?>) "
+#define RID_ARASINH2X           u"جاز(<?>) "
+#define RID_ARACOSH2X           u"جتاز(<?>) "
+#define RID_ARATANH2X           u"ظاز(<?>) "
+#define RID_ARACOTH2X           u"ظتاز(<?>) "
+#define RID_ARASECH2X           u"قاز(<?>) "
+#define RID_ARACSCH2X           u"قتاز(<?>) "
 // clang-format on
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/starmath/source/ElementsDockingWindow.cxx 
b/starmath/source/ElementsDockingWindow.cxx
index 149211950444..dad659a11c43 100644
--- a/starmath/source/ElementsDockingWindow.cxx
+++ b/starmath/source/ElementsDockingWindow.cxx
@@ -44,7 +44,7 @@
 namespace
 {
 // element, element help, element visual, element visual's translatable
-typedef std::tuple<std::string_view, TranslateId, std::u16string_view, 
TranslateId> SmElementDescr;
+typedef std::tuple<std::u16string_view, TranslateId, std::u16string_view, 
TranslateId> SmElementDescr;
 
 // SmParser 5 elements
 
@@ -158,6 +158,7 @@ const SmElementDescr s_a5FunctionsList[] =
     {RID_LNX, RID_LNX_HELP, {}, {}},
     {RID_EXPX, RID_EXPX_HELP, {}, {}},
     {RID_LOGX, RID_LOGX_HELP, {}, {}},
+    {RID_ARALOGX, RID_SINX_HELP, {}, {}},
     {},
     {RID_SINX, RID_SINX_HELP, {}, {}},
     {RID_COSX, RID_COSX_HELP, {}, {}},
@@ -168,6 +169,32 @@ const SmElementDescr s_a5FunctionsList[] =
     {RID_TANHX, RID_TANHX_HELP, {}, {}},
     {RID_COTHX, RID_COTHX_HELP, {}, {}},
     {},
+    {RID_ARASINX, RID_SINX_HELP, {}, {}},
+    {RID_ARACOSX, RID_COSX_HELP, {}, {}},
+    {RID_ARATANX, RID_TANX_HELP, {}, {}},
+    {RID_ARACOTX, RID_COTX_HELP, {}, {}},
+    {RID_ARASECX, RID_COTX_HELP, {}, {}},
+    {RID_ARACSCX, RID_COTX_HELP, {}, {}},
+    {RID_ARASINHX, RID_SINHX_HELP, {}, {}},
+    {RID_ARACOSHX, RID_COSHX_HELP, {}, {}},
+    {RID_ARATANHX, RID_TANHX_HELP, {}, {}},
+    {RID_ARACOTHX, RID_COTHX_HELP, {}, {}},
+    {RID_ARASECHX, RID_COTX_HELP, {}, {}},
+    {RID_ARACSCHX, RID_COTX_HELP, {}, {}},
+    {},
+    {RID_ARASIN2X, RID_SINX_HELP, {}, {}},
+    {RID_ARACOS2X, RID_COSX_HELP, {}, {}},
+    {RID_ARATAN2X, RID_TANX_HELP, {}, {}},
+    {RID_ARACOT2X, RID_COTX_HELP, {}, {}},
+    {RID_ARASEC2X, RID_COTX_HELP, {}, {}},
+    {RID_ARACSC2X, RID_COTX_HELP, {}, {}},
+    {RID_ARASINH2X, RID_SINHX_HELP, {}, {}},
+    {RID_ARACOSH2X, RID_COSHX_HELP, {}, {}},
+    {RID_ARATANH2X, RID_TANHX_HELP, {}, {}},
+    {RID_ARACOTH2X, RID_COTHX_HELP, {}, {}},
+    {RID_ARASECH2X, RID_COTX_HELP, {}, {}},
+    {RID_ARACSCH2X, RID_COTX_HELP, {}, {}},
+    {},
     {RID_ARCSINX, RID_ARCSINX_HELP, {}, {}},
     {RID_ARCCOSX, RID_ARCCOSX_HELP, {}, {}},
     {RID_ARCTANX, RID_ARCTANX_HELP, {}, {}},
@@ -408,18 +435,18 @@ const SmElementDescr s_a5OthersList[] =
 
 const SmElementDescr s_a5ExamplesList[] =
 {
-    {"{func e}^{i %pi} + 1 = 0", RID_EXAMPLE_EULER_IDENTITY_HELP, {}, {}},
-    {"C = %pi cdot d = 2 cdot %pi cdot r", RID_EXAMPLE_CIRCUMFERENCE_HELP, {}, 
{}},
-    {"c = sqrt{ a^2 + b^2 }", RID_EXAMPLE_PYTHAGOREAN_THEO_HELP, {}, {}},
-    {"vec F = m times vec a", RID_EXAMPLE_2NEWTON, {}, {}},
-    {"E = m c^2", RID_EXAMPLE_MASS_ENERGY_EQUIV_HELP, {}, {}},
-    {"G_{%mu %nu} + %LAMBDA g_{%mu %nu}= frac{8 %pi G}{c^4} T_{%mu %nu}", 
RID_EXAMPLE_GENERAL_RELATIVITY_HELP, {}, {}},
-    {"%DELTA t' = { %DELTA t } over sqrt{ 1 - v^2 over c^2 }", 
RID_EXAMPLE_SPECIAL_RELATIVITY_HELP, {}, {}},
-    {"d over dt left( {partial L}over{partial dot q} right) = {partial 
L}over{partial q}", RID_EXAMPLE_EULER_LAGRANGE_HELP, {}, {}},
-    {"int from a to b f'(x) dx = f(b) - f(a)", RID_EXAMPLE_FTC_HELP, {}, {}},
-    {"ldline %delta bold{r}(t) rdline approx e^{%lambda t} ldline %delta { 
bold{r} }_0 rdline", RID_EXAMPLE_CHAOS_HELP, {}, {}},
-    {"f(x) = sum from { n=0 } to { infinity } { {f^{(n)}(x_0) } over { fact{n} 
} (x-x_0)^n }", RID_EXAMPLE_A_TAYLOR_SERIES_HELP, {}, {}},
-    {"f(x) = {1} over { %sigma sqrt{2 %pi} } func e^-{ {(x-%mu)^2} over {2 
%sigma^2} }", RID_EXAMPLE_GAUSS_DISTRIBUTION_HELP, {}, {}},
+    {u"{func e}^{i %pi} + 1 = 0", RID_EXAMPLE_EULER_IDENTITY_HELP, {}, {}},
+    {u"C = %pi cdot d = 2 cdot %pi cdot r", RID_EXAMPLE_CIRCUMFERENCE_HELP, 
{}, {}},
+    {u"c = sqrt{ a^2 + b^2 }", RID_EXAMPLE_PYTHAGOREAN_THEO_HELP, {}, {}},
+    {u"vec F = m times vec a", RID_EXAMPLE_2NEWTON, {}, {}},
+    {u"E = m c^2", RID_EXAMPLE_MASS_ENERGY_EQUIV_HELP, {}, {}},
+    {u"G_{%mu %nu} + %LAMBDA g_{%mu %nu}= frac{8 %pi G}{c^4} T_{%mu %nu}", 
RID_EXAMPLE_GENERAL_RELATIVITY_HELP, {}, {}},
+    {u"%DELTA t' = { %DELTA t } over sqrt{ 1 - v^2 over c^2 }", 
RID_EXAMPLE_SPECIAL_RELATIVITY_HELP, {}, {}},
+    {u"d over dt left( {partial L}over{partial dot q} right) = {partial 
L}over{partial q}", RID_EXAMPLE_EULER_LAGRANGE_HELP, {}, {}},
+    {u"int from a to b f'(x) dx = f(b) - f(a)", RID_EXAMPLE_FTC_HELP, {}, {}},
+    {u"ldline %delta bold{r}(t) rdline approx e^{%lambda t} ldline %delta { 
bold{r} }_0 rdline", RID_EXAMPLE_CHAOS_HELP, {}, {}},
+    {u"f(x) = sum from { n=0 } to { infinity } { {f^{(n)}(x_0) } over { 
fact{n} } (x-x_0)^n }", RID_EXAMPLE_A_TAYLOR_SERIES_HELP, {}, {}},
+    {u"f(x) = {1} over { %sigma sqrt{2 %pi} } func e^-{ {(x-%mu)^2} over {2 
%sigma^2} }", RID_EXAMPLE_GAUSS_DISTRIBUTION_HELP, {}, {}},
 };
 
 const std::vector<TranslateId> s_a5Categories{
@@ -603,7 +630,7 @@ void SmElementsControl::addElements(int nCategory)
         }
         else
         {
-            OUString aElement(OUString::createFromAscii(element));
+            OUString aElement(element);
             OUString aVisual(elementVisual.empty() ? aElement : 
OUString(elementVisual));
             if (visualTranslatable)
                 aVisual = aVisual.replaceFirst("$1", 
SmResId(visualTranslatable));
commit 0eebe81f9def5f65e797281927e74ae20a4a6564
Author:     Khaled Hosny <kha...@libreoffice.org>
AuthorDate: Thu Sep 28 11:46:32 2023 +0300
Commit:     خالد حسني <kha...@libreoffice.org>
CommitDate: Thu Sep 28 14:34:35 2023 +0200

    starmath: Add Arabic functions
    
    Change-Id: Ie7597cbde29c8b9cd53d591dc9a722e7df76048b
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/157361
    Tested-by: Jenkins
    Reviewed-by: خالد حسني <kha...@libreoffice.org>

diff --git a/starmath/inc/token.hxx b/starmath/inc/token.hxx
index 8409af89dd8a..eb0de6d23875 100644
--- a/starmath/inc/token.hxx
+++ b/starmath/inc/token.hxx
@@ -84,7 +84,7 @@ enum SmTokenType
     TIM,            TRE,            THBAR,          TLAMBDABAR,     // Complex 
and constants
     TPLUSMINUS,     TMINUSPLUS,     TSIM,           TSIMEQ,         // +- -+ ~ 
~=
     TLIM,           TLIMSUP,        TLIMINF,        TTOWARD,        // Limits
-    THADD,
+    THADD,          TNAHA,
     TOVER,          TTIMES,         TCDOT,          TDIV,           // Product 
type
     TSLASH,         TBACKSLASH,     TWIDESLASH,     TWIDEBACKSLASH, //Slash
     TFRAC,          TIT,                                            // mathml 
related
@@ -139,6 +139,7 @@ enum SmTokenType
     // Function
     TFUNC,          TLN,            TLOG,           TEXP,           // Exp - 
Log
     TSIN,           TCOS,           TTAN,           TCOT,           // Trigo
+    TSEC,           TCSC,           TSECH,          TCSCH,
     TSINH,          TCOSH,          TTANH,          TCOTH,          // Trigo 
hyperbolic
     TASIN,          TACOS,          TATAN,          TACOT,          // Arctrigo
     TASINH,         TACOSH,         TATANH,         TACOTH,         // 
Arctrigo hyperbolic
diff --git a/starmath/source/parse5.cxx b/starmath/source/parse5.cxx
index 935d2ba30c68..d2742b27afa6 100644
--- a/starmath/source/parse5.cxx
+++ b/starmath/source/parse5.cxx
@@ -259,7 +259,35 @@ const SmTokenTableEntry aTokenTable[]
         { u"wideslash", TWIDESLASH, MS_SLASH, TG::Product, 0 },
         { u"widetilde", TWIDETILDE, MS_TILDE, TG::Attribute, 5 },
         { u"widevec", TWIDEVEC, MS_VEC, TG::Attribute, 5 },
-        { u"wp", TWP, MS_WP, TG::Standalone, 5 } };
+        { u"wp", TWP, MS_WP, TG::Standalone, 5 },
+        { u"جا", TSIN, '\0', TG::Function, 5 },
+        { u"جاز", TSINH, '\0', TG::Function, 5 },
+        { u"جتا", TCOS, '\0', TG::Function, 5 },
+        { u"جتاز", TCOSH, '\0', TG::Function, 5 },
+        { u"حا", TSIN, '\0', TG::Function, 5 },
+        { u"حاز", TSINH, '\0', TG::Function, 5 },
+        { u"حتا", TCOS, '\0', TG::Function, 5 },
+        { u"حتاز", TCOSH, '\0', TG::Function, 5 },
+        { u"حد", THADD, MS_HADD, TG::Oper, 5 },
+        { u"طا", TTAN, '\0', TG::Function, 5 },
+        { u"طاز", TTANH, '\0', TG::Function, 5 },
+        { u"طتا", TCOT, '\0', TG::Function, 5 },
+        { u"طتاز", TCOTH, '\0', TG::Function, 5 },
+        { u"ظا", TTAN, '\0', TG::Function, 5 },
+        { u"ظاز", TTANH, '\0', TG::Function, 5 },
+        { u"ظتا", TCOT, '\0', TG::Function, 5 },
+        { u"ظتاز", TCOTH, '\0', TG::Function, 5 },
+        { u"قا", TSEC, '\0', TG::Function, 5 },
+        { u"قاز", TSECH, '\0', TG::Function, 5 },
+        { u"قتا", TCSC, '\0', TG::Function, 5 },
+        { u"قتاز", TCSCH, '\0', TG::Function, 5 },
+        { u"لو", TLOG, '\0', TG::Function, 5 },
+        { u"مجـ", TSUM, MS_MAJ, TG::Oper, 5 },
+        { u"نها", TNAHA, '\0', TG::Oper, 5 },
+        { u"ٯا", TSEC, '\0', TG::Function, 5 },
+        { u"ٯاز", TSECH, '\0', TG::Function, 5 },
+        { u"ٯتا", TCSC, '\0', TG::Function, 5 },
+        { u"ٯتاز", TCSCH, '\0', TG::Function, 5 } };
 
 // First character may be any alphabetic
 const sal_Int32 coStartFlags = KParseTokens::ANY_LETTER | 
KParseTokens::IGNORE_LEADING_WS;
@@ -1900,10 +1928,13 @@ std::unique_ptr<SmNode> SmParser5::DoOper()
         case TLIMSUP:
         case TLIMINF:
         case THADD:
+        case TNAHA:
             if (eType == TLIMSUP)
                 m_aCurToken.aText = u"lim sup";
             else if (eType == TLIMINF)
                 m_aCurToken.aText = u"lim inf";
+            else if (eType == TNAHA)
+                m_aCurToken.aText = u"نها";
             else if (eType == THADD)
                 m_aCurToken.aText = OUString(&MS_HADD, 1);
             else

Reply via email to