From 5722970496c8daeeb8dbc5c4fcbbefe8bc7ede37 Mon Sep 17 00:00:00 2001 From: jkriege2 Date: Fri, 19 Aug 2022 12:16:00 +0200 Subject: [PATCH] JKQTMathText: - NEW: added environment-modifying commands for font sizes: \c \\tiny ... \c \\normalsize ... \c \\Huge - NEW: added environment-modifying commands for text color: \c {\\color{COL}...} - NEW: added environment-modifying commands for text formatting: \c {\\bfseries...}, \c {\\itshape...}, \c {\\bf...}, \c {\\it...}, \c {\\sffamily...}, \c {\\ttfamily...}, ... - REFACTORING: split up several .h/.cpp-files in nodes subdirectory --- doc/dox/jkqtmathtext_renderingmodel.dox | 33 +- doc/dox/jkqtmathtext_supportedlatex.dox | 100 ++- doc/dox/todo.dox | 1 - doc/dox/whatsnew.dox | 3 + doc/images/jkqtmathtext/MTDarrow.png | Bin 1484 -> 1566 bytes doc/images/jkqtmathtext/MTDvec.png | Bin 1297 -> 1341 bytes .../jkqtmathtext/jkqtmathtext_array.png | Bin 4695 -> 4633 bytes .../jkqtmathtext/jkqtmathtext_bbmatrix.png | Bin 1528 -> 1444 bytes .../jkqtmathtext/jkqtmathtext_bmatrix.png | Bin 1191 -> 1227 bytes .../jkqtmathtext_brace_begincases.png | Bin 4427 -> 4346 bytes ...mathtext_doc_subsuper_italiccorrection.png | Bin 9883 -> 10282 bytes ...xt_doc_subsuper_italiccorrection_boxes.png | Bin 24578 -> 24727 bytes ...kqtmathtext_doc_subsupershift_integral.png | Bin 12550 -> 13724 bytes ...htext_doc_subsupershift_integral_boxes.png | Bin 26455 -> 27720 bytes doc/images/jkqtmathtext/jkqtmathtext_emph.png | Bin 0 -> 6548 bytes .../jkqtmathtext/jkqtmathtext_fontsizes.png | Bin 0 -> 30157 bytes .../jkqtmathtext/jkqtmathtext_limits.png | Bin 7019 -> 7171 bytes .../jkqtmathtext/jkqtmathtext_lowercase.png | Bin 0 -> 2079 bytes .../jkqtmathtext/jkqtmathtext_mathaccents.png | Bin 41848 -> 38655 bytes .../jkqtmathtext/jkqtmathtext_mathdeco.png | Bin 1624 -> 1674 bytes .../jkqtmathtext_mathfontsizes.png | Bin 0 -> 23649 bytes .../jkqtmathtext_mathmode_and_textmode.png | Bin 2821 -> 2840 bytes ...jkqtmathtext_mathoperator_width_factor.png | Bin 7292 -> 7533 bytes .../jkqtmathtext/jkqtmathtext_mathstyle.png | Bin 0 -> 9772 bytes .../jkqtmathtext/jkqtmathtext_matrix.png | Bin 2781 -> 3059 bytes .../jkqtmathtext/jkqtmathtext_pmatrix.png | Bin 1694 -> 1720 bytes .../jkqtmathtext_specialsubsuper.png | Bin 2064 -> 2199 bytes .../jkqtmathtext/jkqtmathtext_tabular.png | Bin 3593 -> 3775 bytes .../jkqtmathtext/jkqtmathtext_textaccents.png | Bin 9958 -> 10760 bytes .../jkqtmathtext/jkqtmathtext_textgreek.png | Bin 0 -> 3470 bytes .../jkqtmathtext/jkqtmathtext_unicode.png | Bin 3933 -> 3740 bytes .../jkqtmathtext/jkqtmathtext_upgreek.png | Bin 0 -> 1542 bytes .../jkqtmathtext/jkqtmathtext_uppercase.png | Bin 0 -> 3035 bytes .../jkqtmathtext/jkqtmathtext_vmatrix.png | Bin 1163 -> 1126 bytes .../jkqtmathtext/jkqtmathtext_vvmatrix.png | Bin 1254 -> 1241 bytes doc/images/jkqtmathtext/schreq_normalmode.png | Bin 5592 -> 5221 bytes .../symbols/jkqtmathtext_symbols_arg.png | Bin 1356 -> 1388 bytes .../symbols/jkqtmathtext_symbols_argmax.png | Bin 1582 -> 1595 bytes .../symbols/jkqtmathtext_symbols_argmin.png | Bin 1408 -> 1436 bytes .../symbols/jkqtmathtext_symbols_bigcap.png | Bin 1446 -> 1448 bytes .../symbols/jkqtmathtext_symbols_bigcup.png | Bin 1473 -> 1458 bytes .../symbols/jkqtmathtext_symbols_bighat.png | Bin 1420 -> 1414 bytes .../symbols/jkqtmathtext_symbols_bigodot.png | Bin 1435 -> 1440 bytes .../symbols/jkqtmathtext_symbols_bigoplus.png | Bin 1438 -> 1432 bytes .../jkqtmathtext_symbols_bigotimes.png | Bin 1380 -> 1371 bytes .../symbols/jkqtmathtext_symbols_bigsqcup.png | Bin 1439 -> 1438 bytes .../symbols/jkqtmathtext_symbols_biguplus.png | Bin 1510 -> 1502 bytes .../symbols/jkqtmathtext_symbols_bigvee.png | Bin 1469 -> 1450 bytes .../symbols/jkqtmathtext_symbols_bigwedge.png | Bin 1420 -> 1414 bytes .../symbols/jkqtmathtext_symbols_coprod.png | Bin 1444 -> 1453 bytes .../symbols/jkqtmathtext_symbols_iiint.png | Bin 1654 -> 1657 bytes .../symbols/jkqtmathtext_symbols_iint.png | Bin 1571 -> 1532 bytes .../symbols/jkqtmathtext_symbols_int.png | Bin 1435 -> 1441 bytes .../symbols/jkqtmathtext_symbols_lim.png | Bin 1303 -> 1291 bytes .../symbols/jkqtmathtext_symbols_liminf.png | Bin 1350 -> 1386 bytes .../symbols/jkqtmathtext_symbols_limsup.png | Bin 1513 -> 1537 bytes .../symbols/jkqtmathtext_symbols_oiiint.png | Bin 1676 -> 1674 bytes .../symbols/jkqtmathtext_symbols_oiint.png | Bin 1590 -> 1628 bytes .../symbols/jkqtmathtext_symbols_oint.png | Bin 1513 -> 1525 bytes .../symbols/jkqtmathtext_symbols_prod.png | Bin 1492 -> 1483 bytes .../symbols/jkqtmathtext_symbols_sum.png | Bin 1407 -> 1402 bytes doc/jkqtmathtext_docimages_formating.jkmt | 56 +- ...mathtext_docimages_symbolsandencoding.jkmt | 7 + examples/jkqtmathtext_test/testform.cpp | 39 +- lib/jkqtcommon/jkqtpstringtools.cpp | 3 +- lib/jkqtcommon/jkqtpstringtools.h | 2 + lib/jkqtmathtext.pri | 18 +- lib/jkqtmathtext/CMakeLists.txt | 19 +- lib/jkqtmathtext/jkqtmathtext.cpp | 54 +- lib/jkqtmathtext/jkqtmathtext.h | 3 + lib/jkqtmathtext/jkqtmathtexttools.cpp | 26 +- lib/jkqtmathtext/jkqtmathtexttools.h | 23 +- .../nodes/jkqtmathtextboxinstructionnode.cpp | 345 ++++++++ .../nodes/jkqtmathtextboxinstructionnode.h | 131 +++ .../nodes/jkqtmathtextdecoratednode.cpp | 4 +- .../nodes/jkqtmathtextfracnode.cpp | 61 +- ...cpp => jkqtmathtexthorizontallistnode.cpp} | 307 +------ .../nodes/jkqtmathtexthorizontallistnode.h | 109 +++ .../nodes/jkqtmathtextinstructionnode.cpp | 758 +--------------- .../nodes/jkqtmathtextinstructionnode.h | 145 --- lib/jkqtmathtext/nodes/jkqtmathtextlistnode.h | 171 +--- .../nodes/jkqtmathtextmatrixnode.cpp | 16 +- .../jkqtmathtextmodifyenvironmentnode.cpp | 833 ++++++++++++++++++ .../nodes/jkqtmathtextmodifyenvironmentnode.h | 170 ++++ lib/jkqtmathtext/nodes/jkqtmathtextnode.cpp | 30 +- lib/jkqtmathtext/nodes/jkqtmathtextnode.h | 44 +- .../nodes/jkqtmathtextnoopnode.cpp | 81 ++ lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.h | 82 ++ .../nodes/jkqtmathtextsymbolnode.cpp | 37 +- .../nodes/jkqtmathtextsymbolnode.h | 11 +- .../nodes/jkqtmathtexttextnode.cpp | 204 ----- lib/jkqtmathtext/nodes/jkqtmathtexttextnode.h | 77 -- .../nodes/jkqtmathtextverbatimnode.cpp | 239 +++++ .../nodes/jkqtmathtextverbatimnode.h | 123 +++ .../nodes/jkqtmathtextverticallistnode.cpp | 312 +++++++ .../nodes/jkqtmathtextverticallistnode.h | 150 ++++ 96 files changed, 3078 insertions(+), 1749 deletions(-) create mode 100644 doc/images/jkqtmathtext/jkqtmathtext_emph.png create mode 100644 doc/images/jkqtmathtext/jkqtmathtext_fontsizes.png create mode 100644 doc/images/jkqtmathtext/jkqtmathtext_lowercase.png create mode 100644 doc/images/jkqtmathtext/jkqtmathtext_mathfontsizes.png create mode 100644 doc/images/jkqtmathtext/jkqtmathtext_mathstyle.png create mode 100644 doc/images/jkqtmathtext/jkqtmathtext_textgreek.png create mode 100644 doc/images/jkqtmathtext/jkqtmathtext_upgreek.png create mode 100644 doc/images/jkqtmathtext/jkqtmathtext_uppercase.png create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.cpp create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.h rename lib/jkqtmathtext/nodes/{jkqtmathtextlistnode.cpp => jkqtmathtexthorizontallistnode.cpp} (76%) create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.cpp create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.h create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.cpp create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.h create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextverbatimnode.cpp create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextverbatimnode.h create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextverticallistnode.cpp create mode 100644 lib/jkqtmathtext/nodes/jkqtmathtextverticallistnode.h diff --git a/doc/dox/jkqtmathtext_renderingmodel.dox b/doc/dox/jkqtmathtext_renderingmodel.dox index 518651bf2a..b0ab02baec 100644 --- a/doc/dox/jkqtmathtext_renderingmodel.dox +++ b/doc/dox/jkqtmathtext_renderingmodel.dox @@ -2,8 +2,10 @@ \defgroup jkqtmathtext_renderingmodel JKQTMathText Rendering Model \ingroup jkqtmathtext_general + + \section jkqtmathtext_renderingmodel_basics Basics - JKQTMathText parses an (LaTeX) input string of mathematicalkmarkup and in a first step generates a memory representation of the it (cf. \ref jkqtmathtext_items ). + JKQTMathText parses an input string of mathematical markup (i.e. LaTeX) and in a first step generates a memory representation of the it (cf. \ref jkqtmathtext_items ). Then this memory representation is used to draw the represented math using the renndering API of QPainter. As an example, we look at the following LaTeX markup, representing the solution to a quadratic equation: @@ -25,7 +27,10 @@ \image html jkqtmathtext/jkqtmathtext_doc_quadraticeq_tree.png \note The memory representation is independent of the actual math markup language (e.g. LaTeX) which was initially parsed. - But of course it is modelled, so the features of the supported markup languages are supported by the memory model. + But of course it is modelled, so the features of the supported markup languages are supported by the memory model. + + \note Also the parser performs optimizations on the tree, e.g. by removing a JKQTMathTextHorizontalListNode if it contains + only one entry! You can see that each node corresponds to a box, if these are overlayed over the rendering: @@ -38,5 +43,27 @@ \image html jkqtmathtext_node_geo.png - + \section jkqtmathtext_renderingmodel_linebreaks Linebreaks and Blocks + + As described above, JKQTMathText represents the mathematicl markup as a tree of boxes. When calling JKQTMathText::parse() without + any additional parameters, the base-node is a JKQTMathTextVerticalListNode that can represent several lines of text. A new line + is started when a \c \\\\ or \c \\newline command is found. Automatic line breaking is not performed, i.e. each line can possibly + become very long, also longer than the available space for drawing! Also lineabreaks are only allowed directly in the current + context. You cannot write + \code.tex + \textbf{line1\\text2} + \endcode + but have to write + \code.tex + \textbf{line1}\\ + \textbf{line2} + \endcode + + With environment-altering instructions like \c \\bfserie or \c \\it this can be overcome: If you write + \code.tex + \bf line1\\ + line2 + \endcode + both lines are typeset in bold face! + */ diff --git a/doc/dox/jkqtmathtext_supportedlatex.dox b/doc/dox/jkqtmathtext_supportedlatex.dox index a01321688d..77d98c04f5 100644 --- a/doc/dox/jkqtmathtext_supportedlatex.dox +++ b/doc/dox/jkqtmathtext_supportedlatex.dox @@ -22,17 +22,29 @@ - operators are typeset with additional space around them . - \section JKQTMathTextSuppoertedLaTeXFontProps Font Properties - The supported LaTeX subset is listes below. Please note that some commands are used differently than in actual LaTeX. - For example \c \\bf is just a renamed form of \c \\textbf and used as \c \\bf{...} and NOT as \c {\\bf...} . + \section JKQTMathTextSuppoertedLaTeXFormatting Formatting + The supported LaTeX subset for formatting text is listed in this section. + + \subsection JKQTMathTextSuppoertedLaTeXFontPropsFontProps Font Properties + JKQTMathText supports these instructions for font properties: - - \c \\bf{...} \c \\textbf{...} \c \\mathbf{...}: draw the contained text in bold face \image html jkqtmathtext/jkqtmathtext_bold.png - - \c \\it{...} \c \\textit{...} \c \\mathit{...} : draw the contained text in italic face \image html jkqtmathtext/jkqtmathtext_italic.png - - \c \\rm{...} \c \\textrm{...} \c \\mathrm{...} \c \\mbox{...} : draw the contained text in normal upright roman font face \image html jkqtmathtext/jkqtmathtext_fonts.png - - \c \\sf{...} \c \\textsf{...} \c \\mathsf{...} : draw the contained text in normal upright sans-serif font face \image html jkqtmathtext/jkqtmathtext_fonts.png - - \c \\textcal{...} \c \\mathcal{...} : draw the contained text in caligraphic font face \image html jkqtmathtext/jkqtmathtext_cal.png - - \c \\textfrak{...} \c \\mathfrak{...} : draw the contained text in fraktur font face \image html jkqtmathtext/jkqtmathtext_frak.png - - \c \\textscript{...} \c \\mathscript{...} : draw the contained text in script font face \image html jkqtmathtext/jkqtmathtext_script.png + - \c \\textbf{...} \c \\mathbf{...} \c {\\bf...} \c {\\bfseries...}: draw the contained text in bold face \image html jkqtmathtext/jkqtmathtext_bold.png + - \c \\textit{...} \c \\mathit{...} \c {\\it...} \c {\\itshape...} : draw the contained text in italic face \image html jkqtmathtext/jkqtmathtext_italic.png + - \c \\emph{...} : emphasize text \image html jkqtmathtext/jkqtmathtext_emph.png + - \c \\textsc{...} \c \\mathsc{...} \c {\\sc...} \c {\\scshape...} : draw the text in small caps \image html jkqtmathtext/jkqtmathtext_sc.png + - \c \\uppercase{...} : draw the text in all uppercase \image html jkqtmathtext/jkqtmathtext_uppercase.png + - \c \\lowercase{...} : draw the text in all uppercase \image html jkqtmathtext/jkqtmathtext_lowercase.png + . + + \subsection JKQTMathTextSuppoertedLaTeXFontPropsFonts Font Selection + These instructions are supported to select a font: + - \c \\textrm{...} \c \\mathrm{...} \c {\\rm...} \c {\\rmfamily...} \c \\mbox{...} : draw the contained text in normal upright roman font face \image html jkqtmathtext/jkqtmathtext_fonts.png + - \c \\textsf{...} \c \\mathsf{...} \c {\\sf...} \c {\\sffamily...} : draw the contained text in normal upright sans-serif font face \image html jkqtmathtext/jkqtmathtext_fonts.png + - \c \\textcal{...} \c \\mathcal{...} \c {\\cal...} : draw the contained text in caligraphic font face \image html jkqtmathtext/jkqtmathtext_cal.png + - \c \\textfrak{...} \c \\mathfrak{...} \c {\\frak...} : draw the contained text in fraktur font face \image html jkqtmathtext/jkqtmathtext_frak.png + - \c \\textscript{...} \c \\mathscript{...} \c {\\script...} : draw the contained text in script font face \image html jkqtmathtext/jkqtmathtext_script.png + - \c \\texttt{...} \c \\mathtt{...} \c {\\tt...} \c {\\ttshape...} : draw text in typewriter font \image html jkqtmathtext/jkqtmathtext_fonts.png + - \c \\userfont{font}{...} : draw text in a user-specific font, available on the system \image html jkqtmathtext/jkqtmathtext_userfont.png (generated by default, \\userfont{Arial}{Arial}, \\userfont{Comic Sans MS}{Comic Sans MS} ) - \c \\textbb{...} \c \\mathbb{...} : draw the contained text in blackboard font face \image html jkqtmathtext/jkqtmathtext_bb.png Blackboard fonts are not widely available on target systems (viable fonts are e.g. "Double Stroke", "CloisterOpenFace BT", "GoudyHandtooled BT", "Castellar", "MathJax_AMS", "Castellar Standard", "MathJax_AMS Standard", "Colonna MT"). But the most important blackboard characters are usually available in the higher unicode codepoints of Fonts specialized for math (e.g. XIST, STIX, ASANA). Therefore JKQTMathText supports using these characters, or simulating a blackboard font in addition to using one of the fonts above. You can set that by setting JKQTMathText::setFontBlackboradMode() with one of the options from JKQTMathTextBlackboradDrawingMode: - MTBBDMfontDirectly: use a blackboard font specified by JKQTMathText::setFontBlackboard() \image html jkqtmathtext/jkqtmathtext_bb_font_directly.png using \c JKQTMathText::setFontBlackboard("Castellar") @@ -40,23 +52,65 @@ - MTBBDMunicodeCharactersOrFontDirectly: \image html jkqtmathtext/jkqtmathtext_bb_unicode_or_font_directly.png using \c JKQTMathText::setFontBlackboard("Castellar") - MTBBDMunicodeCharactersOrSimulate: \image html jkqtmathtext/jkqtmathtext_bb_unicode_or_simulate.png using \c JKQTMathText::setFontBlackboard("Arial") . - - \c \\script{...} \c \\textscript{...} \c \\mathscript{...} : draw the contained text in a script font face \image html jkqtmathtext/jkqtmathtext_fonts.png - - \c \\sc{...} : draw the text in small caps \image html jkqtmathtext/jkqtmathtext_sc.png + - \c \\textscript{...} \c \\mathscript{...} \c {\\script...} : draw the contained text in a script font face \image html jkqtmathtext/jkqtmathtext_fonts.png + . + + \subsection JKQTMathTextSuppoertedLaTeXFontPropsFontSizes Font Sizes + JKQTMathText supports these instructions for font size: + - \c {\\tiny...} + - \c {\\ssmall...} + - \c {\\scriptsize...} + - \c {\\footnotesize...} + - \c {\\small...} + - \c {\\normalsize...} switches back to the default font size + - \c {\\large...} + - \c {\\Large...} + - \c {\\LARGE...} + - \c {\\huge...} + - \c {\\Huge...} + - \c {\\userfontsize{pointsize}...} + . + + \image html jkqtmathtext/jkqtmathtext_fontsizes.png + + + JKQTMathText supports these instructions for font size in math mode: + - \c $\\displaystyle...$ switches back to the default font size + - \c $\\textstyle...$ switches back to the default font size + - \c $\\scriptstyle...$ + - \c $\\scriptscriptstyle...$ + . + + \image html jkqtmathtext/jkqtmathtext_mathfontsizes.png + + \subsection JKQTMathTextSuppoertedLaTeXUnderlinesEtz Text Decoration: Underline, Overlines, Strikeout, ... + + JKQTMathText supports several LaTeX instruction to decorate the text with underlines, overlines, etc: - \c \\ul{...} , \c \\underline{...} , \c \\uline{...} \c \\underlined{...} : draw the text with underlining \image html jkqtmathtext/jkqtmathtext_ul.png - \c \\uul{...} : draw the text with double-underlining \image html jkqtmathtext/jkqtmathtext_uul.png - \c \\dashuline{...} : draw the text with dashed underlining \image html jkqtmathtext/jkqtmathtext_dashuline.png - \c \\dotuline{...} : draw the text with dotted underlining \image html jkqtmathtext/jkqtmathtext_dotuline.png - \c \\ol{...} \c \\overline{...} \c \\overlined{...} : draw the text with overlining \image html jkqtmathtext/jkqtmathtext_ol.png - \c \\ool{...} : draw the text with double-overlining \image html jkqtmathtext/jkqtmathtext_ool.png - - \c \\tt{...} \c \\texttt{...} \c \\mathtt{...} : draw text in typewriter font \image html jkqtmathtext/jkqtmathtext_fonts.png - - \c \\textcolor{color}{...} \c \\color{color} \c \\mathcolor{color}{...} : draw colored text \image html jkqtmathtext/jkqtmathtext_colored.png - - \c \\userfont{font}{...} : draw text in a user-specific font, available on the system \image html jkqtmathtext/jkqtmathtext_userfont.png (generated by default, \\userfont{Arial}{Arial}, \\userfont{Comic Sans MS}{Comic Sans MS} ) - \c \\sout{...} : strike out the text \image html jkqtmathtext/MTDstrike.png - \c \\cancel{...} : slanted strike out the text \image html jkqtmathtext/MTDcancel.png - \c \\bcancel{...} : back-strike out the text \image html jkqtmathtext/MTDbcancel.png - \c \\xcancel{...} : x-strike out the text \image html jkqtmathtext/MTDxcancel.png + - \\vec{x} \\dot{x} \\ddot{x} \\overline{x} \\underline{x} \\hat{x} \\tilde{x} \\uul{x} \\ool{x} \\bar{x} \\arrow{x} \\widehat{x} \\widetilde{x} ...: Decorations over/under symbols \image html jkqtmathtext/jkqtmathtext_mathdeco.png + \image html jkqtmathtext/jkqtmathtext_mathaccents.png + . + + \subsection JKQTMathTextSuppoertedLaTeXTextColor Text Color + + JKQTMathText supports several standard commands to set the text color: + - \c \\textcolor{color}{...} \c \\mathcolor{color}{...} : draw colored text \image html jkqtmathtext/jkqtmathtext_colored.png + - \c {\\color{color}...} : same as above . + You can use all color names like (\c black , \c blue , \c yellow , \c transparent , ... see e.g. https://www.w3.org/TR/SVG11/types.html#ColorKeywords or https://en.wikipedia.org/wiki/Web_colors) or a color defined via \c #RGB \c #RRGGBB \c #AARRGGBB \c #RRRGGGBBB \c #RRRRGGGGBBBB (where R,G,B are HEX-digits) + + \see jkqtp_String2QColor() + \section JKQTMathTextSuppoertedLaTeXBoxes Boxes @@ -69,11 +123,11 @@ - \c \\dashbox{...} , \c \\dbox{...} : draw a dashed box \image html jkqtmathtext/jkqtmathtext_dashbox.png - \c \\dottedbox{...} : draw a dottted box \image html jkqtmathtext/jkqtmathtext_dottedbox.png - \c \\ovaldoublebox{...} : draw a double oval box \image html jkqtmathtext/jkqtmathtext_doubleovalbox.png - - \c \\colorbox{bordercolor}{...} : draw a colored box \image html jkqtmathtext/jkqtmathtext_colorbox.png - - \c \\shaded{backgroundcolor}{...} : draw a filled box \image html jkqtmathtext/jkqtmathtext_shaded.png - - \c \\snugshade{...} : draw text with a snug shade around it \image html jkqtmathtext/jkqtmathtext_snugshade.png - - \c \\fcolorbox{bordercolor}{backgroundcolor}{...} : draw a colored, filled box \image html jkqtmathtext/jkqtmathtext_fcolorbox.png - - \c \\colorbox{color}{...} : draw a colored box around text \image html jkqtmathtext/jkqtmathtext_colorbox.png + - \c \\colorbox{bordercolor}{...} : draw a colored box (see \ref JKQTMathTextSuppoertedLaTeXTextColor for accepted colors) \image html jkqtmathtext/jkqtmathtext_colorbox.png + - \c \\shaded{backgroundcolor}{...} : draw a filled box (see \ref JKQTMathTextSuppoertedLaTeXTextColor for accepted colors) \image html jkqtmathtext/jkqtmathtext_shaded.png + - \c \\snugshade{...} : draw text with a snug shade around it (see \ref JKQTMathTextSuppoertedLaTeXTextColor for accepted colors) \image html jkqtmathtext/jkqtmathtext_snugshade.png + - \c \\fcolorbox{bordercolor}{backgroundcolor}{...} : draw a colored, filled box (see \ref JKQTMathTextSuppoertedLaTeXTextColor for accepted colors) \image html jkqtmathtext/jkqtmathtext_fcolorbox.png + - \c \\colorbox{color}{...} : draw a colored box around text (see \ref JKQTMathTextSuppoertedLaTeXTextColor for accepted colors) \image html jkqtmathtext/jkqtmathtext_colorbox.png . @@ -90,7 +144,9 @@ \section JKQTMathTextSuppoertedLaTeXSymbols Symbols and special characters These instructions draw different types of characters and symbols: - - \c \\alpha ... : display the according greek letter (see \ref jkqtmathtext_supportedlatexsymbols ) \image html jkqtmathtext/jkqtmathtext_greek.png + - \c \\alpha ... : display the according greek letter in italic style (see \ref jkqtmathtext_supportedlatexsymbols ) \image html jkqtmathtext/jkqtmathtext_greek.png + - \c \\upalpha ... : display the according upright greek letter. This letter is always upright, independent of the surrounding environment (see \ref jkqtmathtext_supportedlatexsymbols ) \image html jkqtmathtext/jkqtmathtext_upgreek.png + - \c \\textalpha ... : display the according greek letter with italic style defined by the current environment (i.e. italic in mathmode or inside \c \\textit{\\alpha} and upright in text mode). (see \ref jkqtmathtext_supportedlatexsymbols ) \image html jkqtmathtext/jkqtmathtext_textgreek.png - \c \\charDECIMAL and \c \\char\"HEX and \c \\char\'OCTAL : draws a unicode character from its 32-bit codepoint \image html jkqtmathtext/jkqtmathtext_char.png (generated by A: \\char65, circonflex: \\char\"109 accent: \\char\'351) - \c \\unicode{HEX} and \c \\usym{HEX} : draws a unicode character from its 32-bit codepoint \image html jkqtmathtext/jkqtmathtext_unicode.png (generated by star: \\unicode{2605}, circonflex: \\unicode{109} emoticons: \\usym{1F440} \\usym{1F929}) - \c \\utfeight{HEX} : draws a unicode character from its UTF-8 encoding \image html jkqtmathtext/jkqtmathtext_utf8.png (generated by star: \\utfeight{e29885} emoticons \\utfeight{F09F9881} \\utfeight{f09f98bb}) @@ -107,8 +163,6 @@ - \c - : draw a hyphen \image html jkqtmathtext/jkqtmathtext_hyphen.png - \c -- : draw an en-dash \image html jkqtmathtext/jkqtmathtext_endash.png - \c --- : draw an em-dash \image html jkqtmathtext/jkqtmathtext_emdash.png - - \\vec{x} \\dot{x} \\ddot{x} \\overline{x} \\underline{x} \\hat{x} \\tilde{x} \\uul{x} \\ool{x} \\bar{x} \\arrow{x} \\widehat{x} \\widetilde{x} ...: Decorations over/under symbols \image html jkqtmathtext/jkqtmathtext_mathdeco.png - \image html jkqtmathtext/jkqtmathtext_mathaccents.png . diff --git a/doc/dox/todo.dox b/doc/dox/todo.dox index 81e79710eb..08b760f888 100644 --- a/doc/dox/todo.dox +++ b/doc/dox/todo.dox @@ -39,7 +39,6 @@ This page lists several todos and wishes for future version of JKQTPlotter
  • JKQTMathText:
  • diff --git a/doc/dox/whatsnew.dox b/doc/dox/whatsnew.dox index 58601921d8..ba7c70ddc2 100644 --- a/doc/dox/whatsnew.dox +++ b/doc/dox/whatsnew.dox @@ -95,6 +95,9 @@ Changes, compared to \ref page_whatsnew_V4_0_0 "v4.0.0" include:
  • NEW: added support for \\bigl,\\bigr,\\Bigr,... commands for fixed-size but enlarged paramtheses
  • NEW: added support for \\begin{verbatim}...\\end{verbatim}, \\begin{verbatim*}...\\end{verbatim*}
  • NEW: added command line tool \ref JKQTMathTextRenderCmdLineTool that renders LaTeX into images, using it to generate the documentation images for JKQTMathText
  • +
  • NEW: added environment-modifying commands for font sizes: \c \\tiny ... \c \\normalsize ... \c \\Huge
  • +
  • NEW: added environment-modifying commands for text color: \c {\\color{COL}...}
  • +
  • NEW: added environment-modifying commands for text formatting: \c {\\bfseries...}, \c {\\itshape...}, \c {\\bf...}, \c {\\it...}, \c {\\sffamily...}, \c {\\ttfamily...}, ...
  • diff --git a/doc/images/jkqtmathtext/MTDarrow.png b/doc/images/jkqtmathtext/MTDarrow.png index ccddcd6c3c0c2efdb7fe160a546a2e2157bd1953..fd3584e76f504f2a142e2051f5ae247202b6cadd 100644 GIT binary patch delta 1527 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 diff --git a/doc/images/jkqtmathtext/MTDvec.png b/doc/images/jkqtmathtext/MTDvec.png index 320d62b4718b5cdd2f395777d092f6c7c022b6ab..e031db83645bb1c192f4ccbde1eafa9b839cbe4c 100644 GIT binary patch delta 1301 zcmV+w1?u{d3cU)DIe+g-L_t(&f$dtcOL|`vKmL%Wpz%57WWyV3Xlg45!y#I7Xb4(# z*8YHKY|vMRHAvmyaR0xD10}Bo0e5dR0z3Y8?pJ`e6fj7MO z&OP^>^Evn2bDvre5ut~!z<)n&Ko9?;M@AQ+M@AQ+M@AQ+M}I~aq2pxS-`{t7imt`o z-JL1X!)>=!i+|(eVUQ0K?T2b4-B=KtTYJR=`AlBE{u~aJkv>8od zdIKLG9)|h(dAPp5=8|7oSpkd10;i{^%=fCQg3V?Fi+{zUyKFWa#lY|n{|G_zxG^`By_o4ZJXz-czb(8 zyWQRqn>v2Z*xcM?mK_!(NkRaql{K%|t0SfxK!3_*yGs-z2N~&f8U;b9)ky%rNF<_r zM%Qt#*IRpMCWEwdIUEjdhe@{5tBO3=?pa2%1SHsvd=mr#Q>j!<4@-`oizgObD}yK{ zn`^mTMz`C|G=O%>Oa>X1DjpCbwSgxqjo3i@!J3-{jMaQ-gG+R16G$5mNs@H)kOXZM z4}b15MU)*J9H7JDXh;N+H|mUxpmnU(u_SmTn7jd@iKEFuG)^#Duh;9XTLna>QQWx6 zAkOjxsg+GGolc|OZpY)};~F7mRuu^pSy9AZa?dJR&2+KIVfn8Ov@FY}6N#WBUu`cg zE+CuD!pzJJmwY0T0FTE5H#avhK0XejD1QO~z~0^-_nhPaM#jpr4241grlzI<03a5N zK{lHOzu#Zi9uxR{KCoCU5DJArk|YoW0VXFW0RZ6f@ex#2g^`gFT{~N;R3MYdfGCPE zG&BT0pRZ1a8$67q(`g(V8^figC9aG$Q=(X{E6Ge=9dy>x^}bP76aNH3Xjr018Gob8 zjJ9-rwbN=!hAhi9r&yb$kz+h1%BXeK?j1ai(RR@#iY{TSvD$ZZP>sGM(4-N<=y`Y= z9>gYO$g->ps1Zi_Q?14u5TsSntWz$Qf;O@$m4V%i?Awlb%yil)A$w%fDtN zkH>Br-||b}cYt*`{Yw4*3H%u{2#hw`-+({$R~_=xt|*EyIy(B(=9tExB7>X-TrQX4 zS)!Zqr^r}cUDX}*ej7UW?~oqM<4>)O-;N#`U4$MPU4$MPU4(x`;RhmeDGp`Q00000 LNkvXXu0mjfE`VPK delta 1256 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 ba7zM0MgOK;HNgC^H>i!Jc)y)zCdl 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 q#s8hFU^i*rv<)-;D1w diff --git a/doc/images/jkqtmathtext/jkqtmathtext_bbmatrix.png b/doc/images/jkqtmathtext/jkqtmathtext_bbmatrix.png index 0624a625655c03ebbc678d62a57e155abee481db..86b031ed6a2d6548bb4f3c61d5dc69da47c07270 100644 GIT binary patch delta 1439 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 aIrAU;sEY;&ykHyv00002^DdvbD~lp=%>_&CB} z?M~qTj4!T(_~JT8agm)R4(!$nx^C>AtILuA(Ri27{m|3ZYO4U0q%6PN^weEiS__f4I830!`Bh zhr<{g9Bg+=P2p;B0iakcLRD3)tgN&xs|R@X?1q9BT* zrFfdAL6&8N!(lu;JQ#6VmPNT-wkd1puuWW^=MjxY@%Z=%LI^mH!_LkQ3WY+;F>h{e zkk98K%QE)%_CN?hDwTqwe<+xqo_4*!wumdsGDJ~CBoaYyZ?Cc5*Vk8b+$?%Y$mjEr zBniN;racr2;r;#H_2Qa7L^MMr5-}by6h*=8>?~AOMJyI;SzJX?kj-XIy9BHMxSznb zvXD-vK~WT<(I^fM4gdfP3kxmBlO(BOmryJgQK?kwz9nwNvbdV2e_?272!%ocgb?I% zIY^QOhG8%TwH)*7_6?Y*6i)??*jm~wzjOM?l_jj)ie#`+n1emSv%;Dh37yz;RqlarKhGFpRM# z%Q9G&MKYOeIc{|nl{rfDJwf^klxweS3HaO0V&m>co* zRLtx6;yQ>gu7mjEI*2c>gZSb)h%c^#cwXGo)6;gRV2UTjf8}}Ja3wxIKH8m*DYndW ze;Pp$007x+*45scCqKE>-kO`IW1bXOpT@b}Zns_B>UtOq1}zzsI{Nre9|3yBZnsTb z-BzERoCG1nn8{k1y?%E&2qBoCpNA-lt}h9IO*b@Ima(?BhP%7Fx(luzcsGOYax5(^ z87>C^uq+Dzf37bHfDPhmng*Wd>#Ub*N4OQ@@i@A>yOBsFYSz6{5&#>@LOdQvrBbo= zV$FOwuXG7ImJLcLF1C?}26(4S(6J=0{tiL0Sgd>dC7n*UY=7V1-#1+MQb_VDm<+>^L?U6E1MIuM9^iN4{%b3Ca&m&}>uck9dwbjU?`JtlsZ_%5?yhnC z^74X?4s!`jcLYJe@$qrZS|AXxAw};J2n0aWv~f(+G}hPGP0yzY`NMx)<{+M&ig^WJ jTnF*R8+8z0TnG6ZTaE=8&b&%&00000NkvXXu0mjf^eRB= delta 1184 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 literal 9883 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 j_4|wP|2tgzeTUUOqIon}L*HYsgp0ng#w3o?4t_ diff --git a/doc/images/jkqtmathtext/jkqtmathtext_doc_subsuper_italiccorrection_boxes.png b/doc/images/jkqtmathtext/jkqtmathtext_doc_subsuper_italiccorrection_boxes.png index f52abe5da78f70ea79f61bc4d8c217547207dccd..664d0d94a2289d2646eeceecca4fc0e8f2237738 100644 GIT binary patch literal 24727 zcmb@uRa9JC6Smv9JHaKm6C8p&!8Jf|4HDcPg1cLA2^us&aCdhL?%p_!^RK=4_m6SL zxj0wnqMPo~t7p$Ot*V}SiwG4Z88l=fWDp31Ci_WJ4FrO^1YTz&!UNAgoy87;KS&Or zzBq$G=z0G-AX!N<4UeqTY+oN7sn%R7(H8pbH^#{O?nSxo~xQ;K~`<2yEwi+a=J!a8iKW{K6IeHe|NMagf-4vj_?2 zqJ-Tv&`Wczk~mLu%8ddR{8y*z3|&)J1e@h!*@j&6?v~G7_(Ge4KpR<*j;`u zd9IVn%IGTCYe`A~OLh#(>;$EBWH4;!FC=^EKaHT4$FHkM|mPyEoNeBNdWZ z^3tmqlSzR-^}F){Bof7#pe0?r$4dw<)m z#Aj!(O{l>Q=zoSgC{rgbR#nc|v&76qV~ml$$tlG;w`4YGBLF$fD)JgH)ffv(tQ)YQ z2DzRrK!H%hybg-qvq%VE}r$?)PLXlh0Zx2Z}+<0PKjCQIu0aGRS}Wf9vL6+&-&;b7@0YLIh8M=DigNBkQ|GG)&2PT z)b~YI43XkzRaNZIk`kPD1Ld)=b&GN1U#Uz7V`)IoU>3cmc+kbu=;Y)!E$M%LrT+cDoQa^3kS-u~u()RF8u` zzAVJCk?K7(Lz-H4Ux$zM?gvw(CN@IRh&`+jrQh_l+nsmbb&ywqn-TX+XBlYIRPcBv z5nU(85!B8@XaodwHH7U5)c7$+hC(S))B1Nei}gJWkK1d0e@ekGyN7PKD4IO-zIos2 zfAPISi2+w`*MXN8=j$N)wD)i6EZr@erJC+Za&JRR8|`3tP0PM7!6}_;RKnhOHc~0L zy3?V(;m%BI?Af2Vy@DY{GeblK>{Js{rMe8g{b(2*33jP(#zgXN2!VGhyGJ}V!IbQHfIP%XnsyJFHr+B-OC{0sC- zf`M?k35HON295kozjwT)$OSSsPOhg&5sk4lXN_pG125AIqBnHJ9Fx@*gqd@jm0A* zevHS$Ki(=EB%_M?wgBrBDxNP1|B;IINii$C%e+?G;pR|PRm5~4y1U77XE!i{06qw6 zrO_UeNovPM^s=zEzqglP)zR_!lHo^6N3pr?`0=sz@OkoVv7&^NlhZFVq?G$&*kvUOu=X?PlZs4<)KzJfM0o$&rireuuf+soe3*UC8Z^UX@>M8!Jyp}@u&gs#&U#oYqOs2&XTfxQZq6bGw80au8eB6p_Qb$h+@_Ug1e2ne#$19 znX?nc42_LxP&Wc25C8>(`+x>-yd%1FU!X#N@Zq0zPI$1lC#zW>h5tcQFQMU`N&9d6 zz%0-45CJCr>cwj>Q@y74DMHS#;jAZHcN6?XJvsD^mjgsQySrw~4VPtQWo=}>o}Qk+ zVvrX>I?Q-_&g0w#p{qu0M)T#L1$pg07>o=#8++#i`#ReMBOo{!mH^oK4KTD$wrqzV{bfiSXJ>Od0H^(%PxS4e!LWYuQkDUVfTz z{D@CZ-fa|&YTb<>tp)9hu+U2_(bs7+0~4b)7xdx7hp_RlFq`aG2UM#AR3YNc4wypy z3bRE_8Y$dU%UK?G(>A#H_}=HWDHaojvkAIWGoxI&+X(S~2?uY(oB^|Y#7+*Oh|d-@L5Ia-Qy~YR#_i&0c*39p>rnwL{(v z_P7;rIPDXnd7--0)!%|YR=01rj}x^&^R7$Yys&<*7{BSg8#sRgjZbU?+;&zV+n$QdW3qR}t-J+%WRFY(A)@w|hvih8! zmKOGoNptfc*I$|li)4NgTj?Rkw?jH4g{ltwWB)2K(E}tUbXMLWR_JM>?|IRINXW+1 z=$2*M-!jgiEl=M4O#15pP4^%Zo}aG}*Xj}HZQzZ2Od)tKyG3S6UrGa0VlMpGyiO^J zQrmiXdUT$$yI%H@q53ejh>5BrOO(fRTowx zQES6=q!xU#z-+#sj2Dr{jWen19pQgsax9Z25}YNs*+;d?_e-s(DC=%F5TD9 z2q$0BJjq%5?+o2ML#<$rp#sLY@P$GCRA85futggLf-pJ~tdIS>_{Y(%A4L3mRx&?h zD~Y;?Cb9Bln_M|h9l6}!t=O~MjcMbaKM$XPZMBtrVVfu0ckyjykt`@l8nFn){DsY`zF3%NoA`0U}d23_E+t0b-FjGL?xE z=}R!bJE=B4Tq1rZ5-Bc}5p2JD_Bn@Tlr7*Al{TEd=w|cjT*G;BWp5JMw7UzYqA1A~ z=mqJUv?;*{b$=jn^AJ>J%@PIE#oqhX9pU;FU?Rzs%o^{+o)ui9U8VX5z6&`KLX)@C z7HakO&tT+hpHSITJ|@cYPZd3ne#)e(YZOH6oOFI^&Gc;KkdC`q!=N=txRCw)PHzzX zG8aFnMcw_FjNQEeuW>ulqNGmV0*_Vi&|TSXMpuTiNSF8dc3P%g-eUKaEK6|tNzc=> z*`8kit5phS;q;-tHMOMmjIM>K-LSE4LT+wcOACJ|jjmJDdccLk??M&&~eVY?kil!P1xI@2Q%y6y^@V5y#&qW}G%tR9s9+JFqB$UzKZz zfsKvr@O%Hk6~fEWr*DoGE9*u|>Lth;;a~^D&aiH z;kL$DEUa5Uhnklu+kBzoOF@`h4Sd)N(|Nf3cY;u{FFy`uq1+j=9b%mG8aDJIBO`T$ zBsQ!YD4Ce#xln;yTKu$Km9jt4giqx0acSI^KWO?O7LVbJG;s7!U_jsX?J=G#*I7If z7RACYz9&S5M@2PmtRNL|^O!W!-S7sdmERAO&0cpO>Xh`NdgL<(CF-uSO2=G(5 zzUVbNmFXXyi+7bAyB$uK*oUQ+#l@i)stwP%7gos{9dN~tN~bHn)aA`v3xtU6rm8oS z9?|2DJcN{D8LqSuTl^pbeea}jLeu@Wut_H9!M1Brv`O?6us|B66ZwfBOAeQ5Ejaz^ zNHMJF^{dzmXOBEu+e2DbNE^RnE6MS-{zY;x!r?J7@H(RTVmicz3hsEayE)$wVa|kF zK66`^R+g3y<;8H~{VDtDQM*DXx8yokL?M#KO^Xy5yy{bx2{BS%lKsU?hFOm3jJ0d?PZvrfwYgTIAad*0zatk zJL`y5YZ^hUl(o$0UG7C2#J6w~yxdv+MDAMB0%+9Ln>5q ztUIvpy!-nNYQvKaXOD9J!lbbmt`9PRPb`H*%?YWv{rKVG!wRrQNn!7(lW%1flPJ#7 zDH;@5zI1Y?X=pwx!3*)xZ(8Z7S#Z`NDw|?Ij!sO_dbQ{H+)T^(mBb=p<(SaA6X8I( zY7dZesrFp=cBgV0em-yF{eIbXySmJYlgfR{KSlUmZuYLMT2O3V|3=GR4`oB2o-i$4 zI5`Wicz5YjKC3nrN;lX7pFd13UpqZ$ zu)df$Mo>f>R_Xn7@h|+M5?Ckmuek@I%5juMD*Sj(CFx~|m!~-##`Cax?Dxp4{1=)e z0+&qN+nhBV{@fiN3g9}@=Y*U)oQWV%L}7kGODS{>i%x%&FIuwpyj0HI!E8@0%n!d1zJOa%D~f882POZ z35h}0!)_Tmn*1TalBlVMA1WYP9^SOSkr*>KezOFHz4?nA#!IZonlD26FGi{Jy2t&2 zeo7x@HDjdPkx&}CG_{AH+laRxL6)V}gKNC8Jx577Ti*Fut2H7Io%U>3q3i|5_8ax8 zT)B=3qv}rKDOmZdayz(D$^^o^HqBfJiBwbGa!Rt@f8p#+hhWsrW<>%24yJZR44qv1 zDxB#V?CGv#<-$cN%u3eq6ED^hjqCFP=E{)Ku7uWRuMGZ9)LX^Cc-oWyHLLbLYgO|V zV-q?FW{e)pW?|=tuB-XCfzEZ^T~}rB0x6U5Jwf}eSKc3VnK<%;kiih*I|<&^;4q$- z;Iq!>=)ryAkUjE_FyJwG{WjG%d~cg%5tO!pp7x%$g^b4uF-AXtUJ*CE5K8AWmo?EO z#RBPx?*tk?2`d6Y8k+fFtjXZMAr$B+h%@hK9S%)R;K*Uxy4LJ=k-+gK=Kf%nM2|C| zGsPN`Os4%bYJcdeT5jg?2nADnm$q>+2ZM7t`iI2;qRMN&o&D|&3dF^i<dU5v>JQJpK1#^-XAhsAY(Dot$N?^1w=nP~<9`grBTKl$U{olwFnMS&sRtv<` z>63@V_3Vz;q?cJA4xU8lv_7iYcB&88H_ZMus(Jsrt!4{O9FfBO zjzev$;{Co3r>Fg*cY$B$$7i%<2OAix(rQX?^h&B=%-{r3Egy}!CCUBF={ef(@bO`4`b(i_5L_HV?Nl9f17xcQ~yO>=J(l39DL?%24^prCbM>S z7@m|P+`d(+r@SorAH3+|M7g*(|KVdtd9dy7{Qqz=z}Q1^Z~x28T+~XjL?*Y$qM=0H z4Bh1hzqg_}$_UbjiRZhZwq>?ESn0GAWz=&49%O$`^ZWPc2qfm_Q!Ym{>jkiizUnyA zV_6Y6DOZ{0t4@0<+K}U4w$$%vFh!mpnZOz~{YQyk>MlMZ%4~-s8xvs0!0Qi;+9yi< zyK|Q}ml`pqsbn74aJaYsoUP=OvVj=0s}x~ROXK&yVz#!o_vfknC3T(5QE~5qX9;l< zes9tD^0fpeK(6pRKLZlu#AOUV^;%0q7R^$c_AZcK)i*#d zQ9^LFv5|xWEFI7_%DC2M!YcI=$@2(E-)BZk1oU8j28Mz_Rr=(K{^y5lcJmQjJ*Q!s zGZy3!r|!+FUqP)E3jff#10kD+9^2Yr{ZbU@O1$HHkN)*FSJ!|QQnBy!$z7#MiFx2@ ziJSE@^%A4HC@Xq@2~}DXJ>Yc2@)X0w%O<)jUcV);y?{@+!@GkY9au|18(W*sf}tU z;6U_-q6ID6q~78)-mSIflX4+4!nHdt{@_%hqoX?Bj_PHEDe?_>S&yWS$@SeQ#6q44 z?>&;#@Z#sf*T*I7rccIX`=J2D+`;`O-2kfs2;A~IB}3qnjl<~*{*<9g(cFIwVtwQK zU=l;N$-$K4$J8&a52YH6eSLi%XddtPC$drMmQg_-M@4B4+kFwAB4wKc@;sx&t^5f> zyT^WT8e2V33w~Q*2H;;qoyHaoJ(Yoh0r)fgCVLJk6o4ioBat!1RkXEB4+%q!|G_Zl z4gDrt`s(!g;@5Z~GwenL@a9=a#`E*@_5Sw z54=<_!d#%Xx~CfB$qk0?vmh6l#>dA8JOk0mZJME9M16g|TQdDKY`dwhpPw)y1rQ*q z-UwxpP8^0;lG|Z)aQfE$tpA`a^5W99<(Sb39Igd(e*k|5Q(P4B;|JndtPM9;zy*)& zR8^-Z&0byA^SSKDKVyLhR+fZqR9HCCCBQP7^;@_SRaNM1;oVK>Ld2~^N^LK(*s1I| zez3V7&wYYZ&aYp9&dx>ind<>iu$XUc{U-D zor#Hw^3pMF%JJ>%WDY4_a~L`)(OedsW)1*)z1F^trEj4rmxqk8p>l9?dOG31d&e-7 zn|!)8BbL{+%)OBiIuQiDVmTv4SLA)}K&5-b^8YddZ`MLX-ufu>N z2@0RK+-+X5;o)#Q)rJubE?xup&tqIzysj>A}L!1g6F%?}V$-P?|Yj zP{HC!#Intuu$H#=Q0wHe3_*^z&Qd*cuU?ZwelD{U>=XFs4D%gbvSP$~P(oa$W?54( z|Nb$jN;7T;By?{S$&pWTFH6{$f4SAY`cP;vfoiwX^ICEzeuQaN#MqZoy6MWPrsnb8 zv0-|#==m2$k}ZM6*^sFZ#CTe~YF?PB#LdqX3MiSH#_4+P@_Wjx`E%bYYgwGUFrs$*Fq2BfO-IlG6C@L>QA9FA5j=6xjESY?!Af zrfSkx#3(oRDJ$}yAhOT`(O}RwvNLCTI^y(J_R-)I|^A7nN zFW)Zd#H<{h%ruD*GpOXu0kovub$nnmdO+vVv;L->!T(7MgwS?(x z4c0m$sz{=GF{yCF2PY9L?NP5=O79^*QPvz0lJ>jE8F~7WN3R$;?M&&k-InrZ;RxJipu3{6X zC5x;y)V>DSJV;ixF_jVbe6EHw)eU}4i46>SLvu}S86ir)FTF1%z~QH?AE)2ra=C9*K zU*3S0c99}`yd)5L<3{FX0Dc=D5pijNa{aaGxItxe-)2TJku~$}65v^1` zTWRoDX)t^(3j+(wEqL@piF2*Axs_EJ#9gne#4nbG^)Sgz9L{k!F$hq z!Q=S$F(4biS--nUnomU-wr4~88``QMqZT<5@m$X}G%$BS)URjghDe3(@y9vk@5sD$ zgULWN;o19lDr#!mFQoL>NEEF2tFEpNi*vBAbvjVu4i}qZpb5@&GBAV}R2Jmt!74A@3(z#vH}IvZIgdYpT*wQ) zEuYM$_;ez~f-d!a7scNw!BQf&5(_)CAW#yW@?GU@!?N!dQm>T_hy>lxV-L@dMDNXf z5UM1Jyi=5n=Nbwmrwl!eee@2=(08ANEc1;Bx#I=?`_d!Ce>-wZYv*wNg$yBW^m@aG zsI(H|sc?+^6O!OwT@Fu_agRlhNY^lpK?y^6YaKRwwgq# zLxJP+u^Hvo$X12Aa|83@RjfYu&CEwI*Ac_0H>it_vzI2 z9Bh3d5dr*3AQ=Os#enQkerYKplUCJ@M|i{?MjYCpHC(+;u6MZs7dmPu>{LrYDZM`g zFIYy7vas64ORC2``A41{-gGA7@lA)N20Q()iVMD)cdlOK@AY?~2;GZy+dh!My?%kr zy|!cF;3L$V$*Ip1`aLQ%2seY`gqKhm@cpXI-giWqc%m;jGM0iPBKHn@ZsZ20GZ=G& zgg^dtXanPQOMk#Wf~vL8tnfEppP?H)U@^`~jhErAA&1v|K<(YMgd3bXOzPi3#Qb2|P;kms((REz_6bFpM73`{X6h{;relLB z#_&11L%>it&V3+TL?xehDk1rPzk|D;2!Xf5dd$fw6ye4 zWpKbTER0f-Z!!;kQL^jqy`IHF<6bLD$n|B`&Zj9d&yQK>v_N`U2vLR**`ghffnV2m z**MxmRTV1~ofJ8$Kk)ha8Qs&zlpgM)w{iVS$s^&3nBAvoqb?thXp1^Yg^7YD$$?U_ ziLpIa(-WC)FGQ!A;YaZ7k0V6SX6{fKzHb5=Fpk10{jm#qU_{RfZWlzViM6S9OD;D8 z7}g3)DqBR8dYw)h^?XcLm}!F_zqv{-y0XysNju z7^)T_wl4DDgu~NY^HyTVJ0thImAF-+p1T0uX}ovuWXb5?_nC2Q`HQ>~Xy{GruzcXG z)UFl3oWb6j_Q@v*zq)c-hqT^hOpj;J;f&3o-KjunVgM)K_5L`D`1Ta0l7X69GdpVU zleA9DPVx zBP1NL>$9Yc*;qO|fq+{DgkNPe-k2b|(?SqCjBb0dDy*j1hE!>Bl-U!cqV_p(Z@>C- z_{ZB;_plfs@hN zn(bwB%)1iZLUxyTkHoRz&63Y2qQl4sWC{~YDSwhh77MocD@Vdr)FG` z+q3IM8uHh|Mt2;_{|S{31cs+|lUJ)iltj@oPSMLoz-ve1_RVdl+W&>As{KX>Rbis5 zJn=K1l@J5b>+8tNl8X;c)uA_`GkBf7s8ILP7VQaMjbxDoxn2qaiB2 z9bHQnKWYnB>BNC2;=!BsG%(09i^{UCMA7ZdZxcuwrY`>mJ`6}4=S}8O%JtYrGJyNQ ztJ77viUuEaD1eXNINE)7)(~2a;T!WigCm;6gS+YzaV!hnpUtp#5qj3Jwsr#Qa2EqS z3GG@yF#trlQAFgx6m9i}J@wPA%5kYw=LqosNJ_$~5nIlPaQ{A1P?L`|l$Jj>rT`o) zgZ4L~%vmZY4Mw(6Gd^TsLA+=dH8pr@tQ8gC>9FP9+w%h~al{8d$kWe1`_vBr*LQk* zf;?qw5sx6L18&rM%t`-5*Pb2jq)@Ns*rfZ0FP*nR)hhf$57p)_&%TyZ6&EOQ{k?L> zH8n+WyrCO2-R--<;o+8~-9jPqh|s5zVy*DZrs1-U#srB@A1Oo%v&*}Fvzzqkk!_Tk zFP$o#YJNpZ?@>M*>IH{!(+g3m)lLK@>w=Y!WG#ASvNy+t}@5Gi&KFKu_{j$VNH>UYkVTC!geoe&oGdRs-Z=z$1AQgsSR0hK%S zk96|d$Ir1w$1=_LyRU%>0?A&AWwuCCT3chL;`#`>@X2HW1(d;oQu&!F{|#^o^~j&>=@tPCf`;9r>c`hQY{QT;CPAcd*`0c#rg?f zr*60lrFYIz@FLf7P)fAUh0}#N9Y&wCAtD2xwc<3A$yn8|e5d7pcWw`XdaJ6-oudl zJkxCN>`0x5QK1%Xg||DiGIi?3y5l`Ul9%rl5$?jW8cEOva&m4h&Y$p(lVWrkD@D$i z$k@Q{>u&_Ttet`QaRfzG?w)dr&l*s(vI&B)K3(##l9*&ecjmV zjW_sFgBJ~s)7@m;XYX4b7sXFq?e6AVH)ZOHeg~a*@U%)Txd#hVQ(fLlhZe8$lg8ua z@0!4m#0iEqdK{-lm;(&b16^YG+Z%6EK8sa}exSVi8$_~fezm^w*xtf@d9 zIJMC(e^_A-O>|>e4)Fq8ei~*;%MC;d^L3Z=c%Ii%z1Vp3s_xB32r&=cTliMp|F-Tg zVskl^f4q#N+TKqbDo$lEuMsj&^Xsy2UU{?Wg`i-PTl^dxs|8{18`YYKNRM84^wM)2 zWnoLZcK`c0dUK?GKf;6+as4!&$qxRG;9>U&Ome-S&j8R zw@3V9r0v5`pN4Il?oDjIwBkiT5wU;odGMQOj3yP**=8V*UW*kGyuplYw1vTZ^o}nS zx=P1%ZM0MAAAq;-JJEb0_BTu2aqHDTbao`?%CYV%fBAJWlCH(3AX1?id_Knfw;8e5 z8%@S!QnHjtV@cx=5>BXs=mzZD^6?WB#5BqirKg(6#j=e{|5R*$Zzs{JEeod}NtXOqEkr*7O)Twzp;IvTS- zx}U@?+WV0PB_YV@EnR=7tM|ix1zoN^GycZ~X1xkjs)q1wQ z+1PXuz$!xbP(luoNajc8y=?_--3DR<pt)0{>pllqN_pKTT7pBS! zEN=(INv!nHI;hrN5_H-@3TS*qoDyh!Av1SFI)_i-);M=SENOkLv{v>6ciQ0%u>-bm zUGI?*l*ig#V_!fT5#&et7^g@|@-9KXo6s+hmaU$q+x?(ucu0Cys`)XwxQwC%m z*%c(6uSEIkSuYfditl-d^RAd_)SC4UTWkn524g*6nyTCJZW}ki?V8`XM8%;$WKC4S zq^h_;RpMD!;;}cbBcGY4HPrScFHF@N!(<_#i@uu}um}&mL3&Hz6P9LKyj-P@$&8Y%A|JxhJ)clM7Ful9ZKp zb7GUVHT8t&k@gbgj4Ea{O@=42nAXJifONyvjfVn6v5I4--I$t`N7VV8xa1DLK`Gyw zRqkcfX#%*;w|PdBm6myDRWr8QH?P(fgl&QrW^Vk{$!0-yHaB(Y1-RD&GG| z#R*M5>@iRiKNfii=JLHpvw8%#@}%+VAu6-Cs#t2*g)aF$*S7Z~HnUpm{fXxDdlRxT z;ljrY$PE^v!(`Ox?I*)%(7MK}mz#;gtdDFa0*~4}hJU`@ zA8_=Z%@lr$1bNTLxfiDnWQy5(3(sRPiFz6XwN%n8@@qM+8rcABhUjI zXw3Kco0ziIYgp?L8dMRzqZDV0jp})1v$cUmsdF+i{aqILVuh>2ZSv};99!%CuzA(> zYBfk5ced`U%Bn4@$_Bx*mvmX{=w5T$+xHUIkzptfPTyC<^n+hf92|n4^G6`-;~qMH z)4Fr_rkVLAR7_qYVK_k#5hETLVjhs9TVC1T4|79+o`7}+phi1ESxTanV1jd+9&koF zUpR$zpZ?v~_&$$P*xtNPsoG8pIbe$xkg85cuEXHU>ghw(w+84aJkM3y^-+JN5*RQU zhRq7{ZYPG|Gu`DygX%VTE1q)(Jgt)_kE)`w$zTL5LsXp81R-nO_*8hCb=dK4nCC4X z9uixP`we^wQHZ2J?|TlgPUV5W7?g^injU_mnU`z6ur{=0gU{9UQQz#;`ngt_x5?rJ zi$6WsX8k-BR3ovx277C&+tj+2)AH#TyzuMLj^9D{>s6iWbRb;UTo}~5fU3(aCU^Fh zi{M@w=>zs{nkS*(#HavFgsRo|@vCZC-7(NZz1=ra{xM@osr%-R>E5_Td(3Lx7qPOZ zs#KrqFX6FuAWxr%- z`Oh}`_4edk2jyFG3OCiWx`pI1I;%oU4o#MG0mNNeZwJjhL{MAQQl@PsUDpCEmO?wdO(P1=4Qu`3MB5l-P-oZddd;kV z?86@aexstqr@3mf;bHcCwDRG1qy$(apm|o&(;K_4GdoZcOwNqz)2t9)($t`~?s9f= ziqFhMnVau^T=y1Rlw!3rZGkDYwuX+36vT%QYAVT>5PI`}LQ~~kgVl0!T0vYC%RlLR zSK!3|y--F7U+sr{3BZX#QzoYq5_2gj0sYX2w_RP|w{w=nHFZxIl5L05*-hDij8V>i z2|0>4a|;U?5ZEk?MOP(PXeHlOECLmP&4#|WDem41ct8{ir2axkSbNz#c4By+S8u(9 zfSlM_yJoZAfvx^eVQ;*e22^5s?r3#&A@izobH<#N6%}pgF@^S? z2PVTa%N4Y3*Fv-3b#^JPnoI)1u8jY
    >J8?+AQf5jx-09!~L>W0A`$rB55*h|s6 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 S=}lJv0000z;2%1f1ageZasN{^{wUFs0fhOd~kA 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 Hu0mjf>C?TPgND5LS9YYTaNOuf13?fK_ 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 WYuUto0k2!(JXO+EELSiO|Nj90M7dr7 literal 12550 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 literal 0 HcmV?d00001 diff --git a/doc/images/jkqtmathtext/jkqtmathtext_limits.png b/doc/images/jkqtmathtext/jkqtmathtext_limits.png index fab7e7a25dbea1b109e17516253bc85b2bd9401a..b3f9436b535ff3a62660dc1ba4fb03430d63db92 100644 GIT binary patch literal 7171 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 Vg)Xj66PW5j)RZ(8tK==h{|DJN*<}C# literal 7019 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 F{vUM_+>QVM diff --git a/doc/images/jkqtmathtext/jkqtmathtext_lowercase.png b/doc/images/jkqtmathtext/jkqtmathtext_lowercase.png new file mode 100644 index 0000000000000000000000000000000000000000..7534e5b38b805a8401e1954f73fdca678f65f31f GIT binary patch literal 2079 zcmV+)2;ldLP){000>X1^@s6_x@Nf00009a7bBm000i4 z000i40SDjh^Z)<{(Md!>RCt{2oI7k2!4`&p-^MABDK~|Q36DtL6e*Ap9oU5<3M2|c zNdtBPDQrZ6Xb=SwNU@WGxY&da2`SKohsdr-L}*fjQkD%ll^Awea(LNO$$WLGGL z1Txv@=H@UuI*RS>ZJ*t?ZH$hNB9Tat*A;(`a=DB|B7sCAfoio1V1M&N-LLq!A(Q?3 z_3IcJ8G&h~05luRshNfvg+kWPUx?gcPG@H%8-hbepy;v;b)2C1BRb8PtAeLp}_U+q$z5l>u zKX>jN`6{naDB@$=Hm+T}_J7fTV6un3$_HUtmRIyiBodgMoP^^z0DxYvhvUbO`-(zA z?Zvi>i;DmN*L9K4=e@R60m`y0RI635P&GY0?Ol_fFJ9x!&CNyjFJ6D~;)SnG9F662 z**7j>MCmz9!~&jN#FKTkS}mX7;=J*;qR;ZY%LPK$b#eLfWo&P6dpg$F*Y~A4s=zF2 z*3erI7%cESXfx_*%lWUBl{nKg+ijn{R4NVFOQjOib)D_*?lQ(0>-YOCm&-8#Y;A3gF~(T4*<_lgu|lEX-ACED z{mPXqj4{R>$6=>WpZ5B39EW8x8BasKUS|Lp09Ggzn5JnAfOoywY_d!yOl#MaQW@ctQ zTfJWQ`Nik1QmOdHN7FQR@!~~qUS%Iec&r(Q;rlL*fgH=GY5KIveQS0 z`y|J=X_~(AtWL17^Ym2n=W1w!gi&m=z062gCJaV}lEX#u9IM~?Oz|_-4hyzy zHVXjw_U#*aUDGu0?3atTZ5z*?Jwv0>K($&$u~>v{+gMs!!s_ZOu3o+B>%+F~cpedm zi%k&aav8N+Ei^e(sT6+v_yNapyrdV4O9#>TD|&u6$z&2IPMpBcpFaZ&i0O11M~@x_ z@V|w7etsTr-n_y1_&6?HxBy+(F+V?#xw$zMi$$+J5N|Fh_}Gg{(QGzx#%JbuU@@Eu~-c3XJcc-s|cr3DSZ9<6}emvwrw9+qf8tJhA`E#=R ze*gY`xUP#wj~)%gp-8XSL#kqapDK7}eq1r>X!J{cRVP>Oa)dn3N@ zkt_XF)t1_eiIr8k5-RR34Z~o|%gY1WI9xVK$X&QU~{(b2D$U5ZvsVZ<(Ka4T9w6rvkn3RnZ zG#8?eqVI8#@1>4%&D)6hneac7}~)6002ov JPDHLkV1m6Y_)7o) literal 0 HcmV?d00001 diff --git a/doc/images/jkqtmathtext/jkqtmathtext_mathaccents.png b/doc/images/jkqtmathtext/jkqtmathtext_mathaccents.png index 9955da536c966311f22a1607d93ae58bea52e4be..a1e04b51a52e48675d16d007cfb65e563e32f7a7 100644 GIT binary patch literal 38655 zcma&O2RxPk|37>xBwNXzQ5|LPtdc#WVQ*R4dsAeuMD`XEvI*It>^-xRy|Y5NUx&~4 z_x=8U_wWC|?;a|T<2dJB*Y$qCUeEQq0u>b`ak0p;5C{aWw3OIm1mYqN0&&3;69XPu zfBjGu{<~r=rDlgf;H9GeUbsB9wu3;>BBaGco;oM4CV81tEO?ww{k?H#^nI!zA9I-k zx4~V#^rW8mcdEa)jQsdK+jo zN?Z^WbW52yAx0{w_+IZ1zLzDNIHzy)#>lf|XQHd#V_M~SOx^#n;3_!D`uM$+bP9=e zp@aK+<-&UMf=9}cV9J7vW>7kk7SkKP3a3xsRUyzs2+%~L?muUP{|M0Zu*q=F9vOLv zaS8Pkg7P;F4+vhEaJ*?{F#pGIb5_1ETy!>|@6+C{`mZnL53 zP~OS<<-y$Gv)6`0)2FuC?&LL?Z3$hTf_K@UaMJ1Rmesn7IuMwgAb`(9k^UPP{CX=&+n z!qneek8_9+(@WVYEl#!DRFp!l11Gx8-p+!b{_L$UL7rwJa$_fD+`dw_`Ex$0q@R5`bC@7yCKyglNHUIb~??Ux^0ZLor6XD%i`jn zYqu5Z7q(w5xJa_Z=c*JuroSl@#MEwLW#x|y%4Cs|j+G6y!Rp>#TwZP)djtoHo!N&w zp4u86O`Is~K_0`Z!=g^dAl=v!N?|;x`*VxWyMfkmV-gqfaZa3IPEJzta=GP15S%Q8 z;%$93xenhJK5+uH((>}IJNSJ!(nq3Xc+GJ!?#86iVt)Ae(Yt*Pz8XhHV)dvG?Vmk+ z_K{EO?d$6GD(vsiuX@w!et&!OLw7Vr#4#a>k)81AJ8JgX5YwUzL8=uKf){v2@jtgD>M60P#`HUkINV4 zgA57~yAignE2p6Fkl=Ok!B0BkTX0EG3wC;%7V+WQC%)syuxY8oFFz7KU?36~5v0D{ zy}fPu9!>WXdxR8Pety2xtw?z5g|4Kg$r`tkFsFDHBCNEMl506nWd@m2y8Um;M(f(! z6H&I#{HV0sJUU($Q?G1!Nc1@P)~#D_E ziMBy0=*&jHsPvXW@MyJUq{`uLG_yw5`hDwZ#9z<*>AfFj{pxKJm#joZMNLdimD;zy zUVDUiX(*bTpU*ASy|crWm7UGmCP(1=Fxqf+tPC4AL;H6&qr$yb8_J=S9~9$HpXv7 zlfc$l=Y=Gv!sp+wmOaWUF1`v2_T@q0t%BiTr~|a*pDU?6Wb-Xo9`f#Z0+Pp8eeN!tC+%5BC?rjMDL%K4i0$yn5AlFL>H<- zTXExBizkOl!n4z$cX!{{)zNTra{ifP^)el4z0uCm(%L#$E4$V*|C)_r=Z_G>N6sgW}daN#w|%^OBbjMI=={1e>5>;;tKeR>3Vy&gW_pW@dLWFfefP50;l-NJb_@DTnGz)EY)5 zYG`=#xmwG~@zH{V6Pjo)I}=|0hqV_r@m+Ey@VGBFNug0Ec`Li@d-1QDN{&@C_WaVv zL|NvCgSu=VkU{Ak9UVx|I-R7q@8nb3vZMwTJlgh5vrEj)%${TitgWp*%YJHju$--s z6c?wY{7KXF-pyMA;U}6wwgxit8H}da0$=~!KA?Q0B1_;{SZ=^A&z9>{7^@IlhOW$8 zwktr2b4N={OFXxvIi6fSSlM9Yv}`P`MshViDeFnpeT9tNnmSi1-2?XH7gkm(Wd@(h z0;p!6-+7@wqZEd^Vv13#LHR;O-3w2`XzqW?)2S2AwOyeoRGRG}ryRpD9gr$p7{u}> zUUUC#-aoH5BsD6^(FRpaTn9f?n@3$V!NMq1r`kxCjkJTWwrAy*NgTG1h*I%*=AP@l zuqS?gemLV<{r0YFY_4Ppft#9U5pk~`GP$=s<3+)bu46(w{DhI5%F4=ArLRysCMG8M zTz)g)rZ8YqeA1~4TS)Pu4j23lt?e;~RB%9Z*eodq3bD`b>~CXPqQLgpI5Xpa>mBDq5n81vmTOM6d}OA3?*DmEl|j9 zPuJD8YO%!k-vCGKM#KXT51|(?UO*erS-wGtrj!NU_3+R&Ppt&Q?%sZSj=xB>;lS`P z$wV`IOrhDwj~^T7+GFJVw*KJWM0dWFgrVxQ0I4lP2oC)l6c?LF}9?X<@-^ zWMmYiTKu!Hhf9J0?dh{;quP%oCH*rk*+{nCJwAzT&G6y%_xA_1&X(_f#}gqa)N8^p zcIbSuw&E;k`B~w}ogqo#?yCp&y<@*EEG)u42}DT2PJBd0M#lJ*Jy0A=qd+*O>gzI> zt!BS4%_ptutgre--V4==TrD}o|7?XT7(V4LdwY9#C|enGo_e zbrH>uvoe(L(>kk0fSqyHh|svWxz(~F8LkL+ixP>CuYAhMxzK7uN=?o3Tq#i8j~4Sq z{p_z_?`LO!Sn^6pO7;#7`O*BHz8tMxVw?Gc>sEx+F9%IQ>ejwY*&@d^^>+Jf*RDa6 z;`2BxUE6*EfNn5X#b$XR=S!OyllkvK-0ASinkIjI`gbyPR|EO@yZUr>+bi*Kap#`K z+CG2r0xKOkmKEHr|9LK21A*u@8Hh;8>S>?28hlwTx_5GN{exwE@6=TIM72{!QIXAL zWnsIt0i1dj6&3B)54JfTeO0De>}ZEuPx*)#Q3*5U;CcAMMN6Ja&XZcTr`or1dl zhK8B51{RXi037*>{YWkXqTC(UX?=C+G65zUE#^gx%a>)fnDj67_x8TZ*QiL(&&Pdm z(qasMx6Im@Y|3b?^tP5(~SsBD1-w$V=o(}7}BXTa3!9L_#XaM)s5hxnb&4-yG^3%Gg+wT zGv*Mn5rcpCHf|(+2Oxs)&mUXtRHhf~Z*x2M$QX3&hy*KNE3K;czO2O(L;m1{eEV+$ z!i99?NAk>?n8Ux@HQigzlsZRa!`6UBeP;P2Cz6fexW71r#ZE;%ZS@(@~@l9wTXpVt%4%V$os5Bl|`OF1EJ zX7));&LQaRYE(_$T_G1^RY#N1cnO2U#crgX)wxds`K*VB9VaZxn+8SR)MOIm2HE&Q zwzE}bMZAq@4BzLXiznANuA0qaE!b|vdZLB zgx#{_uq7i$zg$*Y`hZAW^RxAZdfeg5C8=IV<5Lfnh>$_vfTv^H(UTY0xw$j|Vd z1Zdpf7K&P_MQI5T-P>dyC0ov#$3X$j`l_|=mCM>&t~Db?2L5Tg>)Qv`M{5-n+8GSe zd^SH{zp${O^p{WIx$x3dF=KpB%vsf76Q- z2L}hBReoB?!NI|-ZaaPbi}20zSN`z|E0uOr;sI4HE!^N`Pi_f>AOpCZpt zh-xLy?uC0staH)P(IIs;+N>;ERqywze+#C}k=vZ{g|>j31ZWpjK4~@-8@AK7bNKoD zmsClpPG4P7(8cxYjOWhc)N9sfNAqb2nNo|(KP1;sSFhg|>}-9&msL=J-`Uye=MgYQ z@}6w0d={WlB~Hj|-P+V)(%Xjw!Oe^%4hO>rq04`hPj;5;PrT|#l&>Y9jVNj5WT@sT6gIz!%Z1i1CR*+i z6Bw(49S*~jlgWd}y4-$InY{~U_8xykV*-1Pls#?nuU6JCe;%E;|4~!kzWPo@yU5~l zN#=;wRig+7+Z4VqYF6FbvzUK^{8^uj~@ThQQvUY z%sD{E4x63cKboa-|wpR;-9^x@amYst+GN(C*Xf1v5x5E-i`NdDr&QIPXNK#&vK{ zmW~KZuRWTX&ux#1Nc>gntO!S3X_CSFMD{*7iPOJ4JBf4kLK}1mg3_m1PkyqZ04sSG z0LYPQC#xaON7??pO{ zQS5TJ6`RM>h%81Jl0gk4B_(BB^~(G7$*+5%r1Lfr*34pW2A|_9>7BcG2iMCFeo!^^ zya>7Gp<3fww$$zj%%g-_q&_*YSBg=Dpcn^@zM>Gej_2RcY3wtO)n}aGfpQ{oJ8P0c z_cD3FfqdnXpMj6a{aihUs|^i4m$#FjzLtOgl{}+7+}76iDr?Qo+xTb~vK^9E@SPdhhBo-iSHxa}ZrO!}`1o-E)*2i;y_b*D#l-G}*b0=eQ#o)#9oj);ixeiy9v z^7{4bT<&jGdo=4jsk-l<3R1iLig-+t$pp*>iXqyh=h2#XXZiPAQDfCktj&^yh7Ixu zlnj^`c`SbfR7|?IZ|>I}kJmK=J#JRJ9)d!A0lyn;aD1Y3au|V#H|b_5B41}GyMA1~ z;i{&iM@M1{YmS6f+n(sNG{M)#O!zZR&y$svg?RZhHK3S|)rXE0=LV1w@=&9EIvd!f zQJHR&E4x3B_orIJJ$Ev^I~u65d=<};-J9w+w8ZydE3tmry!hAiG*4&K95)11kVHY3 z;#J|=fM(fAc2L@wsLwFz7r}GYjfv%(?io03Bu1%h@NJ0kp~o(nR? zxwL|>hP<0ugs%0%%#2wjDp>4Bw8w+hS|a@mcfF_og(Lrw$0l8_c)!G@;32Ya{;K~r zyrs~fbS-vwu1b@o)kO=iP{Gl!(&O#_#IM77$@fHleWX~`TC}Yk;BVXhvQ|xqNL3{W zZ@r$c8B`Wq?E7&SI+L3#U5!*?M|Gc!ATJmq!w z6oI18-=Fc8u7wT?A)?nLg6EKd4l6?d)uK9W2SF$+m_-Q}3fUHQ!nbbUro+65CQ_gC zB%7%}dc1~ip4FQ+wYr+3K9oNedo_4}bEZiu^D&4l%}D*;LNiI%M=#HrKAVtGQqiiN zg9A5E-MPw$RA-GcW()HXXNJIEigzTC+{^Ol8s?ON9>A>&|yB*HoSp3-GW_L zQ$v-GoOd@z5_z}IHbg!WhNF4a*4B0-s_?U_DeM;K#Wa5z#XAPD{wamBRhj%WEGyCL zapi6Lc18Ff{%SP0H{coRYU=6h^X|`n6jNHKeWsle?^3>HnE4ubjg*q|_0$FkL<1F4 zL`h*`c&Pe+yxck03(?_zOMeMc_UITuk2{QaCqwGnbmGDG~*GU>X)e1;!if%-X5$;i^qk=~0$Ntn|u zB=`ux^9;tlAU8HOHH96r1~v!7Rf8rlSkMiuCif_*e*4Q9Rl^t>h;+Z_(uYa&d8{e@ zpWg9>EA6&X!z)XZr`s4ScMBvIBJqZ|?WZ|uJLHcU;SFX*8c*SJ3OVCTFme)O(q zax!co*-c?hLkk4vzn)$VKW@WX1Q7RP^IEITNU3S0Ue8Y;X7WeQqbd!cMP5LhW6x+- zkBafo>vxq&*J-GzeAAJJ_b%Woxq{*Xq_WUzs`krIJbe#@flS zR|y{-9@1hy^drUaX~=UV3vMn1*{95`b!Ar{)EvLHsfF#Cy>TmEL7J7J=jz{fFxmE% zt0pY_|MCk6*kMW06Z6caQiS1P)U>~;AyO;NEFXVKcn&O;*oZSV12F1uL_oimsKC5- zdFTOvpptIkU|lv7*T^y*^wq;yfnFw)z|8Nh*dk1phlhtfKYo~#y0LL{8?I0ptRW+$ z>Swn;*pZQ5X>d>L$p{;f1jK8`A@L+Ov)`$p7-6>O0Mhr~#*|f@4im8`tb{)kffdD> znZEj2m>O*&yp&`(t7hsO18oh&M($17I`JEXpcy>N zRfc+>ppf2(gKu#^TbV7-Pt|g&mI?%1&$<+Hff-DmvDUoWd%k5t;jKQ_e0h$eovjg9 zUsksK3TA5m?7WpeYd>Q>q9_T{1<2@BPCs516|t9%_aReeW@hs6N#`vJe=Bo@&wK1o z@Um7%1^j&SUs9konZyl3Zecn&=9OI|s_eC5B(d@Y1=B5k0N^I(=3GqeU%#ToCnVrD zdsniA`l+@Rhg_z1ejwynEBWzSv*cTbot>QzHun!nu1)84g5VM|LJJ@AIftph{Rb#1 z(6|1342f<&y?XZtVTEA!d-no0tZD`oCBZ_bXmdF#ORnamcC6>bVkkT$r1BW{{^#Q?iFE! z!hi+1yiZkBX5);LTx`(xwS)dF;3wkXFHM=yNfA7S#QN={qpj5vNL=H zqmZC~1L8GKgRRR(jqM>M(|)`SIm7SrBiMEP+pm^nFhPw#>+?#js8C7r=cf+8iy%Tk zvkpQA$G(bX?o0si~3Sqg1Y{sv4*qDcjaI8-Cr>g^wS3uc&N} zhd*1XvUI^9fd}7FJHusecY&Um6<8aYgOrZW&Tfo_(Mqz(_!E>YIcb?6HL93b#;{{D z9=12uI8&&XfaBk!MxJ5OeOOM7=l>35ggm#*N5-YeIQ@e8%8LM5bxIa;SyLh`i&mKD z?QXV3p21b7zuXS=5ttxZ+x-3|ts&dVXl@%fKR@rn>vdn`SKIE&@Ydh$?%4=QYDNbo z8I102lvfDOT!Vh}h{|(uadZ$i+o)U5{YMcdZDQXB#c#TIFoI`eyCas+MELyW1!Go% z(v=IRO?h-Ki9~S*H|j!D$jHbTDYwv=G?QmjRWtwvPuqPn z;aJ7Wa!8_wAXe|Kj*2!h2D&t)2Y|$>@2H3a7H)83)0xWobrmH>{+|Kle`3seLQn)y z?kPEAJx$CfmU(gs-s{Z9-n4RYad8c;G+yQj>sbkw99p54uCC<6pS0S?PH%htzWw=N zKEYT^!kf138kBHrz7S~qUyk?2{}h}avf4X3{sa%OJeZ{m17!iDQSw?m9sotM)uC6hkVAF=@z5tV2F&Y?1U_-EcEJE~r zm50;!@|NX|fZwPM3CP1vp9ukg6%I7OMcT{jG%>lGYcV1}uAbQP4!2-8$irYs^>cv~ z=RE!DGSh;y@hiGHTP?H(*g@Yg_0<=n5?V%P#B@qQL>afN?sPnkmtxQ-`_Qufgl?#S zmYBM78Fa^yLOoH5q!6&omSb`nrq9Xc^v+U0SzMvSv~A^l-bFyPfcF8birpY=P7A>M zR~De(J~A>gHa50UuE~ZHSl!J2(L$&qA$AJzI-kq<(N&~&L2)g7ugFeVVsaPPVw2iI z%Fx$u>}3aN^{INjF`4)jQruu5(C>z^bzU?OrcskXUa+3CQ7c-IUJzw}#1PuCDyII}-qP zfuYWA^xrY@yjwwl?{{VddcSe1 z4Df9*cQBZ!asYM%+E!R7dVRxJ`RzGbcTlz3V^~!tIF(t1y^$pR{QQLuE6Teo4(zo! z^T91dzGO!2bB#Ls^^fL@iql0jqF04bOwuA|y59KET?kz2>W zHjhh!B3JkNPM*B+faC6d8`DY9Qn*$~wD5h-wG#bv=?z?EaR@#jz=U6jy4+;iL(YE6 zm}7~=GXWdPyFqtI7!d>}&fD+LTWX<+XRUy*#25DDaZc1BuK+0i5?e>dFN8xwL$O|l z2=*m*yT_3i&T|Z*6=C9)TcbZ*gjC~;nsmWnM)@aUUyYKJ>9r2 zppdI2XFPIj;I*=gvR@4-`G{f&2NgVJjymQ@0Zm0QcfPwg4>&Ja7-sbAU@`*f;x+5OxeDUXjR9 z!KXK{GLzE2DWYMTi(h5@8>BJRBSx)p&*A`9q#xjraJ1-WXJ<(%C`6w;iJZ9y@N=fg zpHuT4H#axz^K@kVUT-0n!lh8mbVca-X_b|uJ+w*j@x^Oc1`-xGB3`!6DlKrZUG+Zj z);7>DB83mk@yTDyi6sMVL^8Nmqck@cyFT=job=nx)spV?%*>m!BVAoxdH9!=hsf57i1B``<;gh9v1U}3eY|y!W32+?%4+I;P{`Z!b+k%g_u)ZcXfInPS z#c|kH#>$p$vVZ}*7xr*8>jzuO0(Nlz7^P~#75Uj53_tj||G2t&)<#ZV9^kG(Tld0t z!^S>{G~_Kz|3<+r8d7i3k{9GxUOxLfxVJVwv*iqGE8_!OLZ$x#t&DHuD*347~F5Q-9W*$?i8r>1$b`R#0zYqo_S(d`L)$YSr~C>59-a z;KBn*Y$73f8L}<_s?3|Qtbd8ET)T~(mqWN(zSmd>MIvppBj)cPe18Nh9adto_LzB> z-??|xTlg2w5ZOe*Sf~Rdsf)0hHJ?Cql^n@s6q?1sm<}(x?6^$~RVIf8@AjvA*`(Y? zA_TNS>3U6i$5DB5uE5%f*G8Q5*Z(b}nqwQWbGw2@6h}^d_kJUmFHUzLhQI$GimdiQW9D5$~oGE9-qi!nPV!S*qx>@S0 zp&G3Jl%>mWp8dVP9ZeAIZ`+UCig9UWyMlZVNIJaTM~pk{Dl{v^JuPf-MVtkb_esza zKL4bc`r~IB@8^dBFnd#Q!}(jJ}S)Df#3=U^aw@@E!y26$a+rspIa zXQCFUcR|e_IpP(15;+b1UE(y4~&xZ|pG=peuMW!Tn zM1PiwUMfo%WxH)rgNNZm)=FY0rB&qrjAMs9!>aXgM%R4%z`gAmv3@lOz-TM+;>#wh6Zr&X6cFh_gSPi|uZ1dU|@Q-3Nde zaQZ=6`h>A6UX$&i@H# zIp2)Da;9;H9Q>ILX9ueTmCS2VsXKf&FgTb7$2z@$Qa{_GrjFO0{%khkqadQbkr779 z@v1R+>2XDsnx7t%M1oAYm8)}%1%>jn^~}ZP<>gH$uYD&lDS;wT;=?>BjmcfVpq zTUl7-&o;lm8u&G@`|i0m=fH@d1!sHC7QPHuD}J`UyX(U2ee*oiHog)jb_4vKZ}+^I zSE*H=J)8MG*Iv>V91Gl?pN*eieObSQthtYLXee?1ZaW7!Av!%AL|3z(C_6xWN)Yl? zCBh`#+xM2}lw9W@^UC33K=Va$((FemEQ_*|(T18|oC$&MmwDI}#~eVfH1?PTjU*r) zQ-ol^1F8Zl=+Mex0EA%1>SW%^R+v|#)w4TUNQ&WVR&WpasWUTrVi~<^`5jA+)$IKI zK_uGF7r+8yCBxl*`ERT)Q^e($zid*`$m~YwCP@7SC{WmMBZ;u~x%g{7f<#z!adKb; zw~J?kj-u_ll&MySN+R|xaVew-%S$u~>V9%)vi+HLE-dr8=I}S4WAWJJ5#tNCDwiQkF zpsl|FjZlMuxL)}2;Zks*{(usQ$U;IEriquj?vs|X8GOmlwHq~zrBk&Q%H$qT)MgU^=rKk%(R4uoI> zR0hO{>uCfgHFv~Z=-N5P#>YV>gcQ%!`P>$wtDH6Z$yWtn-P&yZ6hDt7yw}yn7hq*m z;+M&!D1RbaQCdp$!w?fuq?(6Z7Zf3o^AQEzFWl?ztanNY0W?<#h3Z;c6MzFJ*vkNR{7f)*5j z8vg>-w90TmNQ12&W*Jgm(02zj0A01nz7oyu#eWx_RjWyM_wNip_%6lpP$c4}-&qK> zb$xAAc-yvF%AoYZ_p-9G&$e?i5(51g7m7!>%VGpax$bCOcSH`!19$qvQ>8J+`E1CO7p_D zVWLmwU<%30Mw`U9GMNJg$DR-_V`8-+cg#C+Ed$*#v#3a^#?g_rBMe0i>XtT=1|1eR zEWEtx^x^`3zLjE#0+l3p_w^vF$MJJizGL8S2G3Kue_}%Ea|Oes%93TnCZ*wPQ(s){ zl=-V2zm56VQlXw&N|t4I$b}eiG*;$0c34Wuh+|=FquKrXF%%BS$TUT*+NiE%s$-{N zQJXz>XmNv?oi|FImoi`3^cM#RKAS*IbQ&a%Kr;qf8nXHBpJb`3{DNb(&E|AN$V)Nc zdy74EtCKYv6BQmuj)T5B$o*OPaMtb26{rlX^1jgCh=H0&_`f9VTmMbMzElWYH$o<} z5JExJ3ScD;DHC_&8kgDrz6qvCvU6* zN~?BUYpnG+V)FS-D%fqHtBYvRWuvcomK1LV+0W3_p7IMB9`&JnB@j4lr+q<8Tkf=> z&7Cy7BJSnorOcnaz*(Cb_i1UC37Q4?7|Sawxa}?8#AO-W>gwvYcrPF~#r^~2Wo@rx z2Z&VV43`+R;vv{VuAo*cN8HniVJ6S7QUYdXX1Lwoy<68V$^86lDW^9yFb4in6y zSpbArv5dBBoQHO!55zN+1pjU}EpIT%#2sf@bwCkbX1mMtoHI_&Xs-P?<8xXfcDH|& za}zNNT=eHRr~<{F?x#l(bQp(l`H?k_@zh@oC_4iFQf@V68F#;ZxC@;oycOIWP*FIm z#Ke?3?sa*GVj8fjBrn)4U(^-pSrvWQ{pSxKT+C>taJU}RK&1>)OLs9p_r5cjPd4iI z`AOI2f0pFEbo6*oJ>NB0J=zc@oBr9FMObnP0wZd>TM(=4?ANb^W*&Q!A|`Jt?+dAd z4S8HgUr|hjrvbj{;KyfD+5OS%1cKehJEP!ia=#esAkg;+gjU&zvbYlzNUC6A0i6DG z?1`1mbV*h0%jhWAu+ACa2k9O)ZbJb24MdEb)~?7U@R5dui! zUzgpuh)9GCnbN(k#Cu=`LX^9BtaL)rnp4&N;iE_48G4CKUAnMvK(l}P!{5)Z_-AFT z&867Z2Srs*U{=Svl8)AdOJty@s0M#avh4+o4n*=vv~Q>80xar++QU21tU6%@UdJoY zSKtw#Ys}2dVfkdY4W!FH{n7u)wLEZ#iUPmZZQl~o4djk-&~#E!G;>imRPFxPw+k*P zY+zNhOAN?jE0fjZ`{rL@X|FC*D{iyC77_myewIjKcPA?%3G_r#aN@A))aF%r&u;PY zg_UrBUASgM-c&_dU0n^X3(8oua-XGGt`+sin*m_vV2_tQru1#*HH3qOgoOO;>SG(K zaIOWSd2ag9kdhz1Wq?MjK6JCjIASoA6D(3UcmWa20~Etz;$R5*(hcaOsk8mrV-e}qG$-E;)lem1~4Oj%eo*Vn&HyI{ffigd-Y zYBo&Z>2M(}CPYFPy_dsuQCGNc&V||^pQgnJUpTgC1H$lOIC?zZ^_Kb>C>GX&H^*-w z;HK<&jdfIShpsu~b_TyL@ulm*&6KSCPXm_z1dcwjL}hq&Ss#1&7#xR;>E2M*%l~1j zu3DH{9{%VpgZYoogz3l|;5L?*6FW_LR4n)Q6kO@;@ArXVUlos9io&ODbF*so(*8S6 z_V$pIf*Bsv2!k^u@}4;@`QcJLHF)W9oFJsj4C(Ygzak&W>HJ+y4o?5ziOWX+l8kVS z6qQM0XV)9={z#=>rsy~SjuXIOQ4t}i(slU}+1Fi&$D2U;`q*AsRpr`%o)-^?o$3s_ z&HzstY=k_`N)CF&7*;;-QvsZW&R0NyVO}EDm8Ivpz4^a%+G z2@XFA5#A6b0kJDDZBgwZEgZ*#KVydZ@F6ANSR4@N_Qb+dg0d}J+53WW6yNw z%i+-lRXsU_p+zjGF(u1wo8!uAg1ww%=9BoAWeYJc{?LA&BmRc4We@v54rXMj=M+p7fQTNVo5zN&AO|HFFNCIFlb`oRon-B~M7 ziO7iuq?#D7(4%53m>OsQ{{Fv?l5NLMou2GxvOp3#7!5d~KHkCchF3T!->4)_$}{1O zntf{U@z{BIlvCdlqKT;5J;}j-KoA_5U|DrV=XhDgW_5)9@9g~(df<1!c4Eq2h7g`^ z-#_))+Ok2-wS)<*Ll2(tRxf%>8}OIUX`NCzPxV!T<(>7rNq*0+iUmRr1I5t5GDI&J z&LziZiIJ7xhA#in^tqaH{}0=CW;=Cda%E|Pxpwe6LiY9?QHmfC%NM;}qA(U0bph=9 zCpDM74r06lQ5Dm9Hk5Z0h~7tu#-QtWWt4?c{>Bc(^YmR^$9DD`8bp4$Z+DJV+TFIS z*&XsuNkL`DIZxm-Uqc-&>BRhiJ?JFY!|jxCB`0ew7l@hJs*3 zes(`7&e#D_y?orVq(&0z`=v{lN?0@?Zw^Tc%9wB@9;65DinSk9Dl&z};hHo1LZZB% zOJS_!Yy|2~t{FY?Er}{UVMeQ#0>Uagd)t4>5?MO!Aud_A)6B)lh@4KU>aGv&_ z;+cX8HuQ6Ji7wzJNX;r!D*>r9)DsbuQ<9Eeu>P6*Gy6?%5?~_FBH=HF44GR>ZY4G? zAN|kCw)ULKd(7Bo!wNeY`T6pYB=@~@L*)6Ja7*{UTdi#qIDL!(`XzT{vLgWE?!M(ee2|v4MeC0L+fF zMncj9(;ES;7t-OQ#AV3tcx!Nd7T4D?tY<4(Znfo10#d)H-gl2W9D?baf>tXxElf=t zmin{5yGaryx;xC~WG6R*H!`?Zvp;Dk$Qm-2Di5ZeE?WTfkwk4*u@k;E&wn_Rn35Ri zG!4;(#As=>2LxRZ>VWYO0`Z~&amFii>8P2)MqljmPnzd26>2AH{I5MgvbuZR71*w@_IL zICTW|xJ?tLOvEBYL64XG@*8x2ae&EXU8xCQFa`(jMFNuv1?zT|nlIR>Wi`&DGU>on zz|e8qTm8;Yf=#6F5-ac4elc>yh$!`acRN#nbV7_0F9Q3)bJLECgraGREkf+q?h`K> z+7~2pu(Q8{!JC1hA#i{$A|Mki-@mdU{%HXsWkf`3XlJI0{a-_&@dedSi`*?ALfL#& z$F)aySNanMpJiJN1VLMdsJ!mE&r`B|7037CJ#?>YXm6@57kevW5--{%q4ATVub-vL zHAvTB(9+b(s#_)-pGChRfQbrw*@uO%sG@>5gNbQTG~vu*xK#W_jogCmM!Rf^U*peMt1eVpGd zAu^~ih8#D(p8CPdD9>HFb)<|pV+yk|MAJbuyjHllF6l*eMss$ErXLK)38%2mwhx)4 zFi4}|r^hOwAW$4A@p6}7AOeqCFqSa!+aW##b@SK9Ydxx$qf_GIUcoG@l~t=G?ucBh_ity#@XC-h+jh<^J5t>rrv>p_j?-4 z5Ew(ni*H0Iwr3kJ^<`$&$tx(_01?Uzv(Pp;-Gr2nhl?vpiP({Khx$qdOvFT{!t~hU zB9cfvjW7Blhy$pgu*cC}oUk$Te^MTyI4e@q4w!ZTWs04P>-~D9AsHB^&YKOFFZ@^> z187kBkpg5~0ms#ECis=5plHaolZLl$l@)l%*DT0w!7NN<#dw9YO&nAPY=Xt0sm|B&e9lF|?ko8=huiz9g&e61T@ zginvBDos+u$?o1zM1!vKQrUWlJ%7IWB&<3JFvBER6a*a&!O(-!r{>#Bfn#JKz02x& zo0Y3(WeD>&#wA&Un_LQgCIuBmMZE*ZO}~q)gaznZCr zK8|bvv#>h}39?{|HN`Q55y4?JEhies`21Z*T-U#EDHmkxm9MJegEJJFyn`5ibEeTc#NCYC#u0(GEqH&vdhKGD_W_yXlULs(bh7@ z0fPO;!_dqv)E>r<(ZdtV*6w^)6 z!tzPU$ck3|7%(}1_u|rnTk?+?1PUHdH}LX-Jl|spruVtC=500!xZ~wrry9Xv-H*Vsuh+W zHmy`IJc!XQNQP5)1{tej0xhx5u)I`{noc*Ls@0n4{%IMaj~RObhc=t%#dB5YhLD>I zH6iA_P_I~bW-w7wd|mx6$r}PNAIJ?dj7q={3d-)pn-zb51D~|4EDXw4!naxHA z=b3`XTv2CwHP{2FE|9aujSW!b&XV~eKV7IH7$*XVP_OpPZZz1Onr9Ghmr@UM%VK3x-NuAq_kGm82&^e%>?j5sZ+$yx;jPt+_w(2+oPK)S#NVu+ z^3H3*1E@XHZy}9&$lJXQWD;fJLMk=cWu9z7G=$1Y8#&L8c1BSije9ln99v73LsF5k zHJqlK^r3zf-YxbEV`a$HrH#Rj1wI9^xtuuKGHWC}e!Nt=pRGn-vSRp3lWozfZ^|H} zo~1+;--0~azt@#mqNyS8(1($f!)vEo-OH=<=VQS3d!u0HkK<)96Qh#+v4dscH1u;B ziF&1k9NMjo6)EBP)@qT>sd`8iou!ECiws&fC*3wiv#Q~?1zR;69tG12x6i{=^B2IDVMN)8>88QxNlp+Y8j!*XMN`pjT%f zZm-O^XeSL%hQJ&bsL;K=y$?wuk%R!ygO^>RBU@tiGASaYo-2&eE@9|3YcBi!w-8eF zyHeG{7Rb(9|Jj^TTYwpN5C!3`5kpoTw1jASLksLa%)d)POZ+Delw}Hn5h`ubel!UK zjF1opcUNgv2LV?aKw;rPbL4s zHU;6X2NoM{XLloL+T66J3zq3%KhGOIu+b5olVapXUq>Zs>u8&Cq3vuvFw1(vc1X#wvP)4Yq$aP~XX~G1! zn_G28RS^MQXpx`251T$u)m96I)%1kZROeXjL8sLiwV43EsI084S~U)~@0p0jXi5gY z#7aS3*rm&Ov;>%tu!FErbg7(}%@PDLhw?QB3kI5zKeyEk+R{SbS~3a$%XfH#-c>kF zMjX|&S2QgmLa^C=`nMZw1-Mhg0|`xUrI%?u_21y8Bj)BEg>p<%5f+CJXwGM)rokU8 z7ZG0FhZ+lEhnyow=xhb+{JnT?AYh?x6air*0MbTk8;2_u*a{p5XSowBRLRtObKvPx zw5~l>J}|J)t~Y;jHdnoh;&j+0ONdlhML2JNscsntw1h+$x1J=y$8D z`3_TP&+u)J@w;6AEwy9{ktxVVZA2(vTOHE?;0}Ig-uhiX%f*d*OBhP#s2~!K9~dLg zB9cgPjE;6#O@>r=-VGp=$|Fp}2eGhocO-Zl0vl41Ugl57+(W~Lu_N{-7dL!PzNkag ziU{zWr&FJE=<8^t6-2H2;BFyG;dZ8fBpfEc2OIJbjqCPQ;1Au}wTN9Cp1jQ&dN70U z^#LifW#6>;*i@?YI*_Dp7t07-D#I( z&4BFyux+7gqukq-3fLdxFS&u7LRbkE**=S@L+yo|$`I#{h{NdUSrjlGqD}Nv!JES^ zf~Xx1W(NJp1_bmzJDaHNZK2qeV@;+Dw4Z9y!ZB{_I9DAeR& z+kjR|i06;nehr2Q0F8W}#R~}y)q`Ys)&c5PGcaF;iFu7BH|_CxTY)J=Z-5wNo3J`^)w_&-i@bm&q%^si!8=@nvQt?l`0oJ zOO@llTV7mzATBQ6+v;n55KUW)fpLV!f5to@mlobS`%P4(YmwV% zcX<%e!QB8@up_h(bWc$KLI0cS|B1_pn8bJ@Y#K1 zj8_^U`iG8ax+0k<7p!hFq7o57ml^umC^m2ivgE~RVGXYpH~0+~ki3KpA^*<#l+Neo z=2FQ&CdTr$-dR+l6mZ0W!HtjOuEI`|Y^CG|Sy%G9Rwi~j+F`O*+hy(@PQisGjHMR$ z%pdkmMGdJbRB}_8kab4ImcH4koxVE1X9mP?(&1XcY#pW&5n-qV>J~JRHm7*?0LI|C zG9vsR(m`UM$RSIDeq^8=LHXxvr@XLmlV{ncTvKaReH$3TX)^557$kKx6QwJ09P_C0+lo8z1v3;KO<@Wt+l7;P2bd1 z%9g+h!T0a!9A!tOV^i+JDYk$AY=zJ@T7 zkRw_(V#I|;^g#J_X?e$($Z49rn|${3X)SN-?#-6Hen|IJSy>;F6I@I|w8Ti%yNjS^8%G|Z{(a;B|Cu^ZgX|38Lw5W> zomQSc;lhXCc(fojU;C$-mH6-9^P6*g6->>}zI+N{n->Y6fLcHb5B>gq+*}6CMq-py zi{^4RFR4$x*@(>wjz$O1M9TkD*LQ&B*uHUx%t|5cfkJ8TT|%2kgNk-(ik38Kh^B@H z6>X)VCDD*5Dy1bADpVe+q`kl2o%g?v@B7~4c#p&Tmgl*j`?;^{I?vxaS4j82)+?-B zu4y^>H_WVQ19DbK)Ml*?J;g-o8^~_0jLUI~r7tdDv z$W<+V9=EcG65}OQ9KthV5)$`@3K6N1Yg8$1=ZWOBQ3{jN8CO}hmb3S&;vc&XhkdYi zw6hcWR1lOm?@$&iV@M$z=lWu6YP@9L^Ng=BNU6gk=U#<3Mqa?W2LZJMq04`5kNS&Y zPy;*b7-e1cNFSP50 zvPNqmUl4s1F#g*|I8PtHXB*@s1m;NwC_DD4sB_~vyHNPQdK9Fjwkp!R@940&D%-vf zbz7t1nm^IL^yZ#F`;9*nX-Ah9rbxM?W!1}hqlK}Xj!IRW&C1Lq%#!V4!07R~ftQzb z`hGJ__cOXlD4(=%n(aJhgvJ%m`pwj{KT~4@oLU(U&MN#@-KNsBcgxG%Mim+lq*xF= zp3i)vv6Ta0=b5v;32e}*6K|_8@W{X(88n1{k4XFh6}IzM%rjMTQ;mO+Pkylq24lfV zMf3kx75D7yt9<}di6{@>#WLT<9`FqI5v5`bz}$MsQo)RfncN&TUl*v^{*LaiQXK92 z!}IjAEyIIye`|YMS~XhMHJf3l@_n9#8BzKg|JN^a456o=Uch4mPa;)sDI(g0amv7y z2YW1DVBSMX)%<4nDfQ2f*WL~F)eq>oSKZds{cz6V9b;j}1d43g7;E|$^1SN14(R*M zRMiQpV_NVIo>W*aF;Ic>DR1lwzF>5m?tk7Mgw1a)gXVsmz~17Ew@z^dpfHDw4LUa$ zX{x{BTo$2+FWtQ;j{2CO=^y6i9y@w;0~7`B$t^s-Z4CR2i2{l4{-MorrYBB>4fqTl zve2uBb`G6C*;(IpkD2qbii@=?BgwTWabLl>uetT=G&KH+qkuf3C$z7rN3A@qivid= z&LVylh0e9OZXsW z5RaDpH~0&HCg`4_j=;JFeI%y{SFuguaA%w`F8ZNWEI>AM=f$T4#N+*zjR3S0I>&}a z4u44eW4hcA@ettKmDRp4^PB6nlCLazQU&L4*n zYe@mo3`2py+w6U*?p$=0roATc`6ag7Y#kd%kyeP6c$7yD?)ja!9y-VMu#dm8GA4tH z3&zY^q_ZjM&^RBFWmCCuAUOmelyE z8+^d+Y_;y`kIdJp?uEo7B|H1=d+DzqD!b{gb;oU0{Jud+i>T5df?|4drdTO(%DvKv zl9I9?=4~toouCeltI~dHokCs)S_(PYT-$&Vb#RkEC$*W1?)$(**pTN z8iUdOJyu5xNmRX?{Cx(CfIO42Q_U|f``~3uCvRW}Z?is9NVA}bz`Yf3Vj?pJ7 z%5z4$GMG}8Y1xBQAEcxZpqJ|6pCYEOLp)SYPwOWU4MEgK5X;g}8*C!I|H%N6K5|OF z)*wlXNod!_Cwic8=eZ^HIWF7cA+#4O6_2NLjS<(%!j-W`Dx8vg>~#7 zE>H*6+9Q=Qx4K%v=Kc*AQpxaqL_yfQE(-}BYC5~xk;aZ#$mQd?g1JX7FrSauQ}p`V z#MvjhRRyj)y~o4jwYqsl;!GM-PMj%*)aC2YQtGn4pIf zZmyS*`dR^NB#I9o(}enPXZFZ##;k5mPQqCnl<*$Z)KV)XM*rE8%D}b2y|q7Wpb~ai zeQM@~Wgjq1sPwfY_eWj?4jjEj_*1&9{oodoi;fC@;=Xe35_1ON{bFC)V}QmnYbdkP*}%Ww3onOpKwSv2g-e3IPBW z4GjB1(y*4Rs@XWbxGagZOK7Y3s(bL)(T<^i+ubgDv5fiFvGo8&EktRg>c?llK_c@` z@;=UGeCis8+7l9=bxsS=i?F7-lI3M*tH~TU;KivA4J)D7LW}&^MSf&_ydGU8udAIP z!!b#gIsj?NscDQ=L^jM4D)hpvSd_oDo^QB9Iaj82euh~!6;W`LR zHU-SHX4Wn=hEJBqkSB}B0%pwiD%Fr3N?L?CsDy-41OP4sUz}=1mT!$K+#@MB?K_A& z0M-Q(DXYY?)YSE0uYt%ShqDe!@ph*A*UH=@401#uXRmp~QGZ_$>N+ia@`5)2K)8j{yOD##r`|>8XWRrhqNq}2^ z>%gUW=>?Q{pDxu>*-DRnf5jTmG<3*PzYc&y$5M}|m8I4C@d{Y{2zm0JE&4qC{M7Rj zG;Y`}0j!N=OFFD_D`lx@KFe;In3&*{OJm=tL%Z?Hr^}o1sFdRV}b7yi{|K0-#> zZklPlMQ_mJC6HM{#h1|HrJVHajhjoLj9IjA?aR~$9{$|`hy?L{yW~E46tdM1p$Mv{ zrO9|%Uo?Vh`B3D#BBtW}u|KK;@4JLM7`IZpbEPGm8ztKx5JR4emj(=!! z{`fc#?Y8WzJ8zLArqz;+caq_AnVyvvZTHkviH(n+$uISL$TZ9AA*|pG*J6CEHaQXj zuWG(_i$?tAUh~2uBO{F(-Juyj8614Sd#igA7var9wu}6_7z%Qam&22VXL;)`R!k_D zhP!(>tPW1+k58tYQkApHVo6q6Jl-@Gt-z6Amiy{A@W|$H%=6Muws( zpeHv~0@F3n$ainYp)`RBuiK9PiUsCPM&CpCk1(v1bq8%^zx;l+#6xNI4^H^p@^Yy( zr(EUrC0#;HZ~Hkot)3m~tJ|Z+M2kqj(l+y}SEXY4&*wCk2G*Lkm+2V6Z#eT>FkrH?(Sz@lf|PhK=)4+o#oD~X1mSGFMgH=)@`=DFda+re#c~- zSu67ssvC86%AI>3XJ#r_K4tWJO<00az#6{%xc__t;&G7H388C_>1J)(jQ|k9R&#IL z!?NA*##!~K0C?4j7{Y>+icJD|Yc%#ka7rw!FWyyzrlIxIr%>%I&Fey&vf7cr6(zn> z9p5?h<$3 zMR2MK0s?LC^H`Qh*HNxyRM~bOYP>_5yBQd{E;THt|F_l+xFt;SRqMx@&j_WlmcFko zct_vYX3WvWe(o6Ql)XpolbQ$TFXv**#QlUY2|0$^?bxOv^+K|l2+rw%-ciulP?@OJ z&f=ZH!8cpiY-zS{gaiT-xU3A_&W;Z9{@~Y+T@MHLYG#zgK(KF7w3O5NUetK+Z4R}a ziJAwY0|Mn52Kik@dYACy;+%muZ?;(IYs!eW#3h9zKz#H`Z-)m?Z*1Jgs|#Jx$s5@% z-}Agb-YDc3p?8*%$B}>to{FVONcG?Cx1#WfpBpQAh(mQQy{Y(a)rcp%)Tn{Rm zL9W}cK3FTX6GNt&*{m#`LKAmQU(G#or$oVl(W*J-JEa;!isMPENF`E_OpuJ!#Ef0N zmIVFxUQ%S*sIl@w4VOz#&dHI+$4fnKPgo;|65r-4l)J|VVvcDEI(h?Pd&Bx21na8`wzY(XE&C*hN(a4H+XsbosBV@=Z(qwwg4Fo+! zvD+|#knn!bzC|`P)W2u(YiCQWcjV0j9wc+FtkJJ<7s8_fFk@w@Wt9bH^Cr^tTA_$h z0gm(g39h692p~9#S|a}KU5W+b&v*o?mxLkgZOin8Y;ppH{f-v-MSIPHlOuvO$97C0 zsE-hGKVA6w=rUr`2EMVcNga`2HOpjfm#oMS7k})z>p_2Hl z*G=3GrB|psi46j2@?L+U@0VEe5|Yf9t!XNg0xT$R-vP|7`W+}>0vPs5=ti=+sVoHt zPtLUhec#1rqyvOJlyMLydgMa9P=J_q*lQdy;_5-wb0O7lJ~|S_Wes)$!h^Qg!9W{X z%d~_w5;%BTNZhuimA1Tjezlz_O!*qoR9uo|xjL=6e@Fp@4`XQxz>IH@(7z^fz9xrT zz9H#>AXN}?a7$J_L1ri z#maBbV+bG5-BRP-vv!(?_OuW+zuUr;4e{>`?s>c%aKm4?P)nTJ!+*|Kc_rX71}i?z zKQNywE>1gHflQ!EKPJ&Zx3OeYLCqc%khK9b9tG9JEK z4;QkFiwoIdWkZfW6kf01Vqp9&3q18-z{e}_Qp1_4|+TRw1LdK1Cr5a^n*E5Dr zb+X6gP2iV)Vp0bY_-SCi?(x9X$BvGG!oouR@lhjN)XZJRzO0M0<3yY^>S~^XiqqDG zH?J!Ht!_6()Nj}$?T6VM&5Iqm|wJZxc*t5G<=dc~vG z`5e3TVr3O?rSm!Qh2X45*yB1nbb^;WDqs03FK{7A;s*0YRVlcofcw&fDR+9lm$!3} z7s*n<){JBBX#L@_kMBmb4WH;PGoSC`trT}S(44YVn}=@`&nr$`yKhmAr+#WimVaQz zRDl_h-pf%yVVg$XvLp?ylXUU?>kRMD69Ku9o04*Uoe9}l+&`4Sx~pFhi?-lf)|)rf zDV=vI=*aT)17|-W>ADEJh|8OqcvN;o)Ta#%bd@#KCOJ$^ziK=}r>XU73G+gVLDpuL zTu7TS52&K*b=}q&>m?=U6zYOASMBFyMTE`xy%CDaZx&dZ5T=}t0JXaRPJydVVpx^g zFOKC0<9#0U^R6XM*5hgg3hjfPM)$fluih)$knc(M7$MU+tMp2dn2I1lGI|>R&FN#d zua8{bIpzAf2|#qyjvVI;5YC!CXkFlVM`e+}E$;Prr4H+HiaZH>MoN#9RxAA_^;1-L z3L}^vMG9IazqX<_bfjc(-BY}M9;!{g?Ca^1P2sQ2j?=zQpL8=?P*#uFGX;e91E@O- zFRQkRFe5Iv(Ee_s#O*s6Hg#*}>67Hp7&O~fNQvKK{!88aGbH$GuI4&H-9LEpj`uj9 zQ~7DEX(eFlEnPYLJfY@6SBNq@e}zwIPi$*_{LIs&1&Lrz5$Tyv&Ml1c8y>~onW;VD zDWE5?JWq4g{Fu-WDnkkhQV?Y$nsGu30@?G~3ir!xw-eYDX?TOwOCz^^vYUA}lCP1V zJy5IVWpGVK!zRfDJO&hqQQ={sp(a=ZwpahwTW3pc?~pR(;iQ41R&99x@jJBI$AfC2 zM75V0q@jp|rvo}qMtmpS!+4E0X**pVoqlwez(_7hC;c?o1V$B7$aircucCIwUW*_= zG=H%%;VK+9K^a|ZCF7m%@t*)e0+?AxM!*Z$RbeVHV!e?E?1XdYb>2p`5j~64f?p=z zz0RCJ@8H=i$truK_S?i^En4swChqPZ1@k)J7t5dC8@=FYYl}@$H|-d*0bjj3)>ep$ z1*xh$+3#kjry&xE|4_!;NM!ayAeqYct)-_SE3_=*c$!{tlG%IaCzLn-{BZ(dDQXEY z|0=kzZ;O4a^3eLYYKi1lSb?I(u!QJCb;Fa`fW%@7LG7WOL@kHFNA$xeb#49e=>7|H z?z~>7dIK&B$dl8{C5>+A-W+`9Izr?$g8FRV#~-lwQ~P;^vZU-;nQ>3R0T>X$AJ?eo zZcv!|f1%lAXJ`jNO?1TFTnl5*F{28q1!sdk=2yc*+qM?fb;DnM*gSsh1r6ew57^=x zGKVvt9WGwy z&CDa;K8VAiPJ_6z9yJWmlkoJZ9{Nw`;9Z4s1J0aHLA5Z{Jlm?UG(hca``}FxCAbY_ zmkf8zy-i;!zsw1%sRwC4RDwti*o{pP$L;3rEH5HCRHBr(!T*lN*T{QXw>E+Y_>r)% znf3R}8{XTCo{8ebp}PnD)6@c6;=kIW9<)U`r-?MM;iZrpJXC1~?(&}>u_C%6ibAm*c zH20I!$>IIhuAx5LqG}fteAFX-b6w{VV;2OgLU|#})WY zKeCPAd7H&Aohqz#sLQj$w)Xn%1JXpkBDYbpa=oN-a>~L8N$yH%%9$Q^f!ag4!hLMN zj!i`6v)(J^5ox(Rw)@>;jJR*rkwc7)zA@w~?E5o1MXa73(Ey>8FDY7b3!6>rm)7&&7V>E`xQG9>WdBt{dFst*?x7-uK(;rhIqqN1X!LXOHbgedG1 z{8^uno)}1%VF4<=4$7azRC7E%U=?l2{fab5 zctE|P7NRuqzJY!Dhf4av6*6OqgY9w$Li;ttCif>6G3eix2LWNRX&zp`!aXW$+6%uo zl>cPBsQzn;Tso0n%>{B_B#;iVBRh%K!`bHqVUN2;Sh9fi1k(BA2N2kUkIP_LC7txW z+cgqJ;P*r#9ii+doE>@ZQxPV!4;3h=AnMhrldCaKV?*~G>kx)VM#he%-(29W+pNKf z1{CP>VGKC{m7;S=#E3i{KtCvSc+B<52tbO<<7Zw>c)ByABIq@fHZ82y#i8Munt?U z)yM)AE63K&eHxZWcGd*Uv-@baH09(%!bh)wP?w1=-{mf;sPH{E&C;>hQ@K*p(l%h% z<{nmnhfG`giipjprt4m$1bdBI0Lqvl${_4vfgfV-wRiGnAf0W3sCPmKm*16 z-=I}}4fo{9y7h{@Xvc|<#O76|Fu;{{C6qPTRZ6TC{|7AlB0!NEhU< zK3}@dROzEbubRpbSVxAi0b$!(5Zf^4yx@qC^&?i4TD6NY{p-WrKN!9=vu>}?ok@Bd z7(P&RcKZCw#QF3^Wcv{a7UxJ9v8&ijCd*#kiMG`pfPk(y5!r77T7M1}QOAU?4ihc` zfwhl7v?PwrF#^E*5v|;<@9=$}+D<@rH4I13oT2AbyE}b=>vb@v+Q%wynSGHr2UjN1 z^C2Oz^f*WGKK^r0$>JJyJGNER5-mLxgcHa-vx;#9`AWP2JP=7SeQ%==PI5YoacyM9 zUqLPyBpb#29A~7h{x)IXKC_mx>mhv&eKMo*^NxgwX9cOL`*oxIPR|jc8pOOA!debu$7imVy@x6LU12vQEZCa2}X4A zDQ_dbEYEeEhhz~bb+*XjmUPqZE#!3HX@<_VA`JkF^z0rsPL-qG7% zxK({MWv&cOduX@WCHXb6Xg_rh>Kg}>s47Ekt#{zclbq~qMNuXqqkE8%iRlP3JuqbM zuCdI?*OLZPg1A*spdTFupIK=HD$N`w69`bF6Q|}}@d*H9o&Mhc=cli7_+5kL2VLE-A1;RG+r=8)6W1Pof4bGX zyn`9={Tq9imS(S@)}@nB%r-2Ap$)uya$qug0bz}P4m~AmavwT7@94XvPPbRT<+dviU!z{R|{H_@YJQayvIJRXL}ayE9f4z(4rVJ9^fEgB`d+ zbh^yc@}0sa7s?juYYs$~yh6bSk;?RfgJ~{3&%Vvpv}ZIvk~8A^d}05iFMWIHLWICj zwOt(YALA+c^4L=FN0Q7`SfKe7Sr|D1(;})@Yw{D(Gv2wV6W&U3KTU$+S8PId&5LoR z0?yC|QK!2?+7}Z#vJ$?wu_H}lIBHBGX>xag3Wt9~&cLK-f^;Ik1$ZkvYim`ZOQUXH zk9=YahW}D9?$6tJggG`yosq8l5!li?TZjdFj{nT*>c_%AL^_3(M_)A1ydPl}G1s`? zta^p+(U{1hUq)kKU{_hp~FlF8Iw7C6{$Dv{$Uh)X+@CNyfJmwt518cc$NZra{V`gLogOt!i zJrpv=^Do7f4!b(QE|1G1CB~a(KRHuFY6z1(@lwA&7IJVq$RE-EqjliQ2mMM9F$Qxf zk|3FI&dD#TAd@u&Dg)3Lz$=)VoxK&z4u&v5pQ#!Z_!-IPkgQNEEWPj8VGR}z94vQ( z07L=X4=bB0e|qF$ZH-BtPc4kkI%6s*A>ta)xZ$hM?9KfXBmzOI0}y?|;NMOH4pAt! zpqKl@HFU)?MTLf(*SPB3@^c#Ly5{1$6p-M6K?b7Se@XIE`w5AGAoQ2H3ZW&m{$m?3 zOLcR9@ZR@-RaOrDCoUL>MM!9UBNQEYptv&8x(wQqE z$0>Z>$S5mq=6^Z|hyl;RyF#)f<|Y2WK2Y1TAYPxbZ;E|h^rP3Ls9Fsc6 zBTgvk`X|MJiy-ddupk2z%WLhHsMp)}3&~dx3=YlFU-P*bUi}09uG96?P!#?8RdO!1 zJ+wRaZIH@*1r7Bu3p@MC(>uM`#<9MLgArZ0aP02Gb<=OF>yByZv`oimZ>ymv zD@R=SiS|o_NpGW`c>S;w9~p0<$2befDaGwS-qwq}R~c}PM_`j$R7drGwbMbGfN}^O zTAa&yJJ(RIU^vT9+BgHhxoz3~n6)`0e4wkXd2sSlDPjdPme)(P3njcfs#srF=Oo;t z_3Ih+)31FPOLCgIzjh>n!S{9kV(@9lk4|Ar8y0@kkG93U4;YC@Q)=_<(}CF!-xbCN zbEqE$D8@(5Bu37bBng}LTjm+NY2OzB@83m3eti_dZ5hYC=YqSZh4WfK{Xqw>jXn-&uc}a?s;LSfmwzbL*{%O?4?L#fYe;Ve)qx$i1R`sPD z7D+I(nrEm?c^_M)oL=^y^|yBkt;(~8FN58HL^nDeIySIbVNNmFYvK2(S*JJ7Rk`U7 zZK7Gcb9anKuX4a7RETDh?P6Z+ojVBzsoj`ziv6SWwe`*Uw@poyaOdBIh2l9H8)vWr;IQc7w|RZRUmGMH0=};(GE*G8xYytG`io_@ zU#~{2j!3d3({H~*t`&>~6g2s?tDD(6k@R!-a4aoC2`0GoU(RD3bUYdqg+N!pVCd|`_l17Q$vJ19oRqFJblNeViPB4i zqw4dobG6LSQDU#!Y;_(`1SoxC4)ZfgwW#;q-COGz0JaPF+)nQRH}fy~ltddN=8ABt z-RP}$!j^+$99zzi(&l#E5)3$+|ONd zU6)JsV1{s)N3D~(8Fa!xX{FBl_VU9)4$St+ld%#FLQx@LoUCg!>h|EAd}cSjJbl`p z*M6y7#Auw}QO)OETl;1@trySmd6kN#IoQ)nBR~nAAeo?)l)j10Q0$SP@g{XNBz zfx%z#Q^%v1q(L!;QEHGsKWL?EQ2<7TqXp8dbt|0&5ibQ8Agwrr-mO9cO6>uEBa zpB&wAU>9Am=AoD`s?d{BG5#r60A48Z#r>$O(bxL93OLq@!K8%n^UIenoYmxM<-Vh` zN%$In|9+fu+@Ss_NB!>qP(V4kB;FIn!t<5T4Pag|y6K1E(O!n_)}lE>UCjc2s7#u^ zfA50QM0foBJ>ytQXz`TzU^Y-L4VZS#aQ!a&EPrLiUB9O!Vb1&?3hTebQp;wSeeT(< zmE(np5v51^#??z#rlgfUjVsQN^oowRKq!Ko(if1?1>hraC`pi7XZ+FovSIXwM2y;_ zN1+SK(yX)?&3Cc&N4mz zH0Q}XD0~sF-iZ2!(VV?>^K!A!(LUoTZ-Fj^c&t&o8TNIduA%zIgR@DhoF8F`%XuO< zx_oc2ldb(Hg+t|4+2nM$+)+b4=}hF2tHnZ_vVZz=UFh_daRp^>-Fupz4u8dBmI__7 zuU({X^&Py%S;-f?ulMSW57QEQ3F%D7_f}ywT%W@vzQntnNItV@GA(eD&qK+qtO@b5MhfRP@no2E za9u55@Q`@KQ|uuq%sW+2jMA)KEVDhv7E%9O%FtCX&8>t6K2|V$d$XHGNOQ_91_fK3 zPE=8CN_!I7Z1Pw-vrA?nE=^ZDuJMk`iL|()JK;hL{qN%}r-VCV9n%GxT*9i7n_TX& zCcPS|eaL#3#8dpNvx~VpInp#mpcs4Gsc}AwBpphR+7B;J%+FY`v9c;5=o$LY9v33- zVqtoub07vLVR*Lz(m;j&&}O6JW3i4XwS4CXA9tYA+8HbV5h(;xrU+ZNeK?s8Nq?ly3f zhu}Bt-93qeol+NUZ4c#b(1SLNm_UC?k}|73TXXnk>P;kXi5Z&>-|-q@FuEw6gzz`S zJ)lR9y72)6mKuJ$NwY?4-X{rp%q;lGGYhw>;kq&he@yFQ&WR|~YZ$7c+AsnUlF*## zy0o1o(ta``wh>^o?efbHsEtQz9@l4YRW2lEx+ zQ!y7mNJg;}-q=JZQPuP^0sAGaRFHluejTHrnhlrmV4PTZyzA@W|0?Bd>;m%R6DU~C z%kIjy+m}j~~x!QpI?YIG2Nh!K!vlJI+xc2Y_%}Kw9#2B>#EGG!3!3 z&>(Vl(>>EXbfD7IQ()^w@4^JVMec8NMHV{ZEYHUo z&HbM$KX;rUi$Y=$Aod>@$Z>;HxjI=KlJgxxUN=8KJa4OCXtojH&_JWV3ibC57hl*J zyOgu>HN4=Cdnk}4_Z!mfSNN4fgpsxZg_Kn|~=Wb3e=T>LHaqN&Fk0o?$z>&w-@*Hq7_-1cl`Kx?Y8ttQ6DzqzNmQ)vfs&$u-Pk%o3Oc951MWYG}buu}Q?H~zh&&DP&JjHPb{ z-DC(Bl zXPV1<_hsAK@To!Pi1VXTX}{UL6MBBLq)jdqy|Wk?xGlIvyDd{FO37C)ZL#prRM>w} zKO922$;>Luv6edZR(p>tf9aXr=$#a=RF>}fg~eMkU*Fm!|Lql!PJPNH)0mIZ`Cf{x z+gzvGqcY9Wf9WY#Fq}1gk3W+d`@P%M>lsMf(thxz$v>)2Ug=p_L5PgZ)jt-&yvowA zj=NQAF8qnBPK@;OXz{2F)oa~~!?_Y^KQcq2z7b5v#pFID={ zg;8T({lS9=5$bQ70A8FJ+m2aV{mK}@S&yNPhNl=2{FD1QG3qaEa6vJ)8Nj}hBnvVi zrFe=fDp)WMr{z#VD%Zy{M`*Bh2F*jW8>6j+x4k^W*jQpTAABi+_m;=X(!Ag3a56Oz zIETDt3{UD6vj}y~p?FiubBqX!`9XH+_4~bG7L|GN`36)lvh3Vj?GiL9h}vOD zj$TvJJM*p$z=Xq#f={`*pLsf+1Ijw6W{8gDuMjUv{G=#TsjgeT7VSnP;v5rYN}9CW z1&;Oz+PWjY-n%LOx2F@~KdD7a*vaTq8FvB!hAQ^5Q5gS6s2*t{MbrwK+i?AG>j&iC ztQl9rnFc*11HwpTzNrRF@cJ?LmsSDYoIK-Jtni00n+_TKv* zXCgXV;CkFek_GuB;xTF??$+OzGF{!j6=gaf5aEgLGsL+D9n<>j*M1%q6cr6X{GjU( z!|^So*~M1k1=8zBUXWbOEG#&cwmYzrd>1?kTY1#ar2B~1An0;%atQB%wGA`wJK{1| zt}?#sgVmTIX6g_BC1(C{&8S&UnkzdopFgwORPJ~K+)Q)I|C^hEeCM8vZ~3t(PFMkQ zuY4|^WWi(-r%lBemTn58Bk3&I#SJgO^mmx2oVvNrq{ig7P~BN1%k@5U<=OCpOz?h7 zoVb8OtSaYOJd&s7lh5!_2sHlnp`ZfW@Pb^C@QQGE&A7`Rry-}ibP4vchOI)3G>uN`IT^go9rr9B!X}$rP#_>+xr7zl=-d>wq&@#DRd5+!LBe$!o z3zIj1qppAYNB8Hn2MBc7<$%fh_hHT4`#$w%IJ396x6}L|+?i8ty*VZ3+y-LKJc@Qi z*b>gWrVc~-^9kKv`kVX}U5^c2sa{MvbQGaMpL%_~yktq^(2WtZ(+MWP3Em1M9^<(X zOWn^Dmg$<#!pf?v!geiUNoTIoHt7U0RH$t8lD9vSwe6LghwtDFQHY#_%$jtIdiUf-@ylJ{WZ0RwNf+vls$y&};==Z9d2+*Agj<9eDnMa%$M0Sk`P*eVZ6@TW zVtr{t!^kv-Oc29qM}BhbUh~8`H8dtN%Ndy8U=EcPCYyV6_G>*Z;>8OxLV=gb2*v{7 ziH!_U7~ouo+h~d5A$x-Np)k#Eeba6|`1T-*d<=OhPT3(WCU)n8>fnvz*wETZI$at< z!i0UmDUi=U1$!G}fZiFF1bn`IY-JGE!VUq$QGt5}FT7$B_?GORqSAzo1~oE>004;> zHf;z(oHs%(Mxp@-;qO>n%fI+~k zG;Fy6d!W{udMtyJ1Bsxr}N1evBT7ss-Le=Gi(<%?JTW%p=PkbV*v@ABF&4cpqIQ<1- zVRdYMqD*4B0%IKOUOW!d4-5akZN(m$U{q8)MHIHl{g1vanvOP&gm3uIEeHSW)iiS< zx~r);L6PM0GejZ!4)uJwQu$xN@3H-P(nnL zb6oy>?QrsiV)ny08jL(gOA{F^y>vBJUN;<-h3O=EY3oz!TGR+ai1_1B3AgZ;s~WrR z*5OxRHU~9FIs+M+d5EOn2KiAJTrhh$@jBvS^|D*L=qIjs7E+E5H-FgAxc>zyh#{Lj zyAS2DK*k1@{^?Z!$4O4v`T2FwAkYL}Ys{NVj$QcZs2%6r z`3oW{bTPpK5Ex-rmhS6P)3`HbJy3rq=qJ@hn5- zMffc;G3Q|HN_B02{~jWjj2Py`Jx{3kuz?fWwl~a#wu`O1(o2Vl!h&eEQb9E9<2LvDh+_5$*>@gyQ&bi*1zxD;)OVWq4 z{Y&Up9xbdQP$0Sx&aA}4@HCN|hG5J6m+OBUIU|@G)adDfnSUq0{jWZc*!$c59S1P) ZJ0+y~z;26TG#UO;Q_?(^f5gP^{{VfMszCq% literal 41848 zcma&O1yoh-)&{!iR1is}6qIg|6a+z#6qHU$5$Ti`L>dI?R1lGt25BWF6{UMiNq57Y z8^3eTfByfDaqk%4hm6gRwby#zIiH#<_<^$Q1^g@c2n6E7eK~101Ogp?MRUZ(hJWO4 z7URM{cy@ByjtIoXx2XToa3)u_5eRz3eQC)@ZYj&DKF>(!Q_m(xUyasvj$fg%Cf6T- zhTHJR{wiCD9JM>EcIKMME52aeyH;0J1xz(njRma+$rkAS2(~%JTSSuy1emTWTpIim z`}yh9N*vLsm86iV3^f`{S7N+~l89ehA2Q0bznKM+rmfM9@ujAwCZ_7Ijf9>&zn}MV zgRfVNZ_6`no-duQ7ik>ELyRd&j9L7Ce@IHummb%TKIkBj6yXQIY5BcIzk~X#04Tp8qF%)-m)%b=j_F4~hxX5F&<;-4 zd?HUzy}P=)5LITuM-zMXft~SO@!Ox@BZ!;PNiGIXJ5=`#4p#OlUBfkgvA^eY<|?-H z^WnnE3Kl}|vlE_**aoJKuC9XnxTw62s3dX4_U`UeDHY=8AExs?sZ}m3SL%;vxiApo zN5j3wll5M>nCLg^3Pa=2Z{qqnZp|sx9{$O5+w5SX_{@SS8AIuShWbv;*53l@yn`ms zPWMI{s7&@(Y<-p%^c1k}sH^|{_3K@Iz4#jT4U*v6-i`p~5Mi&Zkc_wW^|Ym>rEzAA z_x(C&r93=5zK_ZgA6)O`by*%#?R(CqSt#x7TyE`S$Skee{4JJ^M_4#<@cCNZURvgn zy$&bcK3})MTzPrsWgvOmQmNcF@n{H@lg$DM-73KYlDX)rzb}nIVxWG z5+{o)j%ijoh^ld$#%51HmufvBm*oUxtEeQY47I2WAs-(fZh%zWY-?NF zwfiK>sUl|DHz^6Prz#_VWGTGIBqj*SU>+(lQ;>Y~k{&l9E$!a*s5>$;GI%y4!`9L=AVsKUAlVfS!1f}1Ri34Y+gLD*L%0LYCg@wA#J9{=#OLsAQ8U*^wu}VP-?fuZezlc^CsxaZ|)kOU_igwaFjH z{`C0yzGuBmUeKJ0WD3#9$cWwH_M%^JdO|{DR~KOfoy5iT-oQ6ZDskZscgH5m%FEwn zWyv_&cb1584R+@shVY6fnC2a-xkW^t>I4?2hzrT7l8(7fddb~<^V*CG_F=E6+dXyl z+S9|OC(oWqdwJdV6gO;=@6_|7!@EwAo10NudO47Y?$zKD$H$Ab?caP3FbTVvT*#$4 zEskmPXYBDgEC?wt27VoB5VW1p>vIfkL%J=z3$!~s*}F@O`Ccu@FE&}qpE0;4knuiz zX2piJ3+0iwxTB^rR-=5-jr&s0&H~CQLTIg&KNk7D_rKDaCvr=xO6%*>aOzbdS}7?_ zhAOPD9(zk19v)8ZxZBTuBf~^T!}aq`OiZlBNN#OywL`XEfGzuY=g+SsI}w5Ji-`#d zzU-Z5W}g|!iL9-ypFDjk1#id7#x}j-_F6v64xX4Y?;yFhx;kLWNsRjzuEsMCTyt`1 z8P!kTC+xUqdY3k%^2#bp&AM@H9AK8dE zaL4m*kl>oWgxR!d3mfH$jm^MFvFn-v;?srAQvBCb-+%S@_fuKl465eURBFi1#>vdg z)G?fYq@fXKb`xP_Be}f1+zdN2*dK@JXy z7-+k__MV>9v9Ylu37i5}<{Ld)<&!M$*-_(#*$+gn0nYq0$w-Ey0Jl-|#ZAR8>jkqGR~-m?j;} z-w66}-o1Ob!aBx`%HQ8Vt~UzjY-9iWi5J?y#=Tm_YZ~ar8*mmfwK2klItXVLKLkso z(?-fV>L;^cY6z(z#%u&v>-G$kf>JrRO*A8tMV7Ja;nYV&M6eV1rNPzRn(s9^*qluw zdY_Sj-eF4O>n#5k3Z7%{?LaN|d#BzR??2{-w9)xcM>A^gKFnV4_WxW{b1D4Z^wz<* z`ZEo6bxZQ*oE#R}(F+urdS+%fJjK%sgkx)X!^tskU%q^K|5uTBR?9_76T;=OfG9c4 z!9xA7hdWChS#nS0qF+WtTvSRsD9X%aC~|l6Ol?C-GLpQQTyu@#?X}NG@ZY*+?!2vM z$T8Ms!{qDoA!K60psS~6Mpoi5Do5q6x_Vf6__ajEr}Yx2NGlSpLE40=)yg&bp%<}Ni{ zH%0dzb5mlP5T>6U&vTIZ!r8eScu~7vBF~K>ZQN<0@0tS($(6AyLVSF0eq~pM!3oC? z{5n+cC0eLgjowNrMjOe{SxejIfo6BD-hC&R+%nzD3tV-|7=@InV6WE*`Cg? zH|lA}m7n#JnJ$&3q>9= zJQN##RR3b7n6{&YwIk$p$j{2k`ZkxT^PVA4mZg648{5Z^AN#PS3U`7s68J)3eU?>JjNl8>QJWMeAn(wh zX34OKH0wn%;z6sU@|rBnk8P!kY%5>BVv_V{XKB!Ws_{iec{S;R=7eH)|4@x9ms$=f zt>?O=QY#d9DAT!F=+J6@F)F}z>;i_rfKCh!$4f6 zr5)(06v=*IGgj4fcytu1K^G|T2G(q=*6wW@VTYFj{QRG$r>DcVQsR&fc|K{!I_~>b zMxHkC{>X%l&*p1=LKmr)1SU#p^ELvtQYhycPV}0!TzpEGzJ{4a(7~}FJ@Xv9?08xe z_|zXio+7}4WlSbu45h@$*?Ia)0KxBMhM+SPLUr5urMdC@jS8pJ!?{@4?~e05)8T>> z%sTQnT*s+JoPvIw1eG)w6Z{3gEq9065Qp^X#tu*kMz8xN(FgtL9~;x#zD)%%1o3vc zpFcQD0iM%X;B=>9(lF*NRegj=))`c0JZyg%)ob*6Fmqqm{kufGH*F`+l>c{|{K0!0rG zQIg=7$c}VdCI#INlI9s81Bxmt6lTsk+HuA9$a}KIGI996_LCbeh=%M~HqDVFy#w)8 zmzQ53SLtzvg@uvUBsP7@=_nr4=IU?#kPNMu8{NSz z3c9+wO#e5swmn!@GAMj0bxn3HXzhENm6(=d?<;0b<)hb^ z#2fJZ8qLkksnada5otghQkyh+PEk?uPMjIk*pax0q*&36*J9;oYuA3|X##`+=u1|b z(@gRXfDrVAhYue<_vs+;^R1k4Cy+S&9{Fw4Dtc{3n49}kpAs6Pc5lK1OIu;zt#54X znXa9ubd+Hv21{lc0W@SKgY6CwoEeR8xnKP!*v(2QXJ5FsKU5b%gK zwp7o@M`E>hOBrGJ%$Q?WqosL9Hu}A=%9ueB#ajIlr_{R#Q99~+Ny*9fi$AikTrr^J z$K4!G;;u?2L%A#7PI1saWR=?lbP{K*pX9B{z5*dVo(yk@4e%q_}1k2F_)Fr z=hz@(+BnSUNOt;PCb;@$pVNHlXS){3sQlzy{CdH;3-*7%iKorb3w-ky|HR2{6NgM&Eg z>fihNe7}EJg=5=4In6I_66zt{WCvtb?KuCy(6Fc)pYcAcTn-YcEBx6x=m-6MlIRZ8 zrZ_Q^$zC?Q$@_18wTTtQXnXNBxUqW!q^_X~rs3&keEHe@3;b61yYC*{BgP;K;>H$% zYPvGCyv(i(XJz0bt&s`g44+leu-9fIHLaqVkkZUW+&J%eR>j+xzilWlH>-M_em zTTeBfOhwYP;G_Rez#_ToZ*kDDBWbVUV0}w`A)O}P(M#W4vhH|z!{KPV^y_0qO88Z$F@Ow|c+spaWFx}HD%%99QD27F6rE3a!g`YQXfwf`5;UP!+01;@Zf>~s+z{Jvaxx^-dW|gaUC(0XptsKPu%|F19GEk zx1|q28}w$&Q=+25P@r%<{6W3*TaUYw1U~G29GrQfE2%MBVU1x#^AqV(!?A?)rsBmS zNvVE%c>DHkN*bDOe7U^*eD+bSmtE{ZK+SR<$rCuuG?lq4NCKrp^{H!vO-7%dtVY9P zg)78i-MivqvNlnN=$iEceEwm_uJT$X<>m&?r%GA?R*AH>wzfDX&r~rDF7GZBya;G7 z%3#I~{7Q_8MkKa=r*$&_(288S470S1tT1OGGSTu#S%AdgBKCzbw^ZnA6}FQ-l$}3E zy1iSuZip7h7qwg+HH{}(XfC-!43wUolF;09L-<68|1K9-iy{+S1(q+*5x+fm0jJ4^>1;0PxUpm;BB69L`5*cAJt@j|x{v@qXK(MJL-WW@t`1vb=Ly zi0!63+iw$|zsnGzhX8OM9v)6*gMbSLQUug$fbMXipACJw#`VTki25Et?1GNa5{~{!8Sj~u)z=cU&PGbM zQ73le$BT=Lk_rk68k6$b{h+fT9Ar;6r#@Y{ddrvRRa28BN+*Ce`TOdtF0xe(Brj(t zFHpDLwMpCL`WWcI*M_pDH@cHZf-%#4PM`Nr-H}m!t$33MK;(|iL7h$(W=KX5^ykOs z=C8(HDiF%3_KlBQkJ_eGef~1d4OcM&zL_r%Hq=g2-bBZOtG6Te(5IxjPL3KmBxopR zJelrj$MFaWB{;sgfEcRt5QGn>^;qUXRiw7@zwp1GUncD|Q=%|ZrO$DDK~?NzyT4*^ zpzY>D(PIrdNjt{-Uw;37pYv>}<@Lh!)qsWmm-`Nl%D*k%O^bUM{zmb6t>WvQwjDY7 z`7e9t`P4s$7JH-nteW#)NZ@LD`XOw4Z!Z(%fS*1!mi;$@sdi$ua2nQ&1&Y$!Xg*SJ zDb%k4smo%-)@`y^Mu@s~YKmStT|7J_1mD`jzSIpNO3j97RbK-E378=Mz>kA3Vqy>O zMKdaOBmm56YKjlAS+S|ZgzY%Wx`&cBJ5f2Dj98ow99a<$e zb~c)vSRM0V8hZ0gz#5DF`jn)sS-~MWQ4&VU-a?i4iO5B2p$BER;?Zp+V;J!oj>gx3 z8>?Gy{>uIXI>xkS!y%dY@%r86;Zi26hnH1JzmJa>ut@&;^$YQu=Vrjy$NQe*goK1o zUVKwmS5MmPoxBf>rFZ@-V6O6xwCtM`ATtP4s7IMmaWx#5n0+H_us}Sw-s|empy;P% zZ{~0_oc!!;)$_c==7vta$PL+OMmI59pko;&B_v$6>wa7OZf!m2af_Y(M+4y!tGaxL zZDHPbR=* z=kk%uNnG)=w~&~ap53Phobs128nw*(lKYQ%#AW#=Kb#8RyMBqI;Hi;OBY#UTbKW6O zW47>Jsf1t7TtXv>qoDfhM-*b9S_! z?Q@u&-vH{~yPTYyw^?`!Se4v_L_`z?`g)nV70;-$R)|CWk_ByNerX!EyipOa?o(nR zs5+YMdv{kRd;>4=tB~s|^@JNTyhLf5kzB%+)FGO^6GS_Lp0wLmhkHfdJ9+yx4M#P? z0%7MO?T=|8>^r?bf0BaGWx4$nmeLChoNt`G)fE-w-VF^OqgrxvXMpfmbD$UF`nA)U zAWV3sn!Yv}y{%3{q6dW#NE&&l*$UdH$6sHS@CSO-8Pp!kCGYQ6Ht4S#pt-}I z1CsQ~c2Zpaj3G!S1oVl;{%jQP$XKqS54kQzOZ4>VQ|6OMEj#=O6u#Y%M8R7pW)yxz zX{;+30K}ryWz1_>=kPj?9v~{}FC;Jjr^amNYd`McM;}M-Nr#*Ep=a+TVQEg&1*JX{ zfV}t*B$Ouj3a|55*?#lpjZxTRXg}*mC+luvLk&JY_XiW-IU_(lp7OX4np27P<+K4b z`k*WfZFmq38b#8pbUDUv#+yvI#+HwB5R`i~4dc@uUYeSkqlelus%1OX>+@=1vo8VL z+uCwbnrKx!+yGgZC;KyqQ6Tk3>1a?(t9I$$t0Icws$}cr)hN_UoThM=x*o;+u^V)q zS%+b91$Fg}ePrZlML?xTaad~e@sELlxWVXtPn-Td{rk}lJL+t$SOJWlpdhdd&w028RCl021q`)6-MoLFA*k?e*LJJM-%v zT{o-_PriqH6o@wEh%u4i&21e}>jN|Rb6Y(SOL!w%;3f1*{G1!k=f(&7edb;efZ{ zdHp_#h=>Tj$Y9P4acIjY;}(2GpMf-INVO7kvD0hDoVVMwHmjq5H3zi;(Qm^_zM%K* z5BGZCIt%B0VcVNb05lAWJW7KFK>IW2p>Xg0EVYO~H{))d<6*L#M^6oklKF5yQI}}} zsj(U?j5fHdN}2*?WkjHj9Mx)}#_d($ zQkRuP54Q{prD{?5!CB7NDaV(MphmM>@_#X4O&=nut9w;PM~8oD(9=r`g^Cr&#h$!6 z>$<7vMIR|HCrMY;=ug(==WVKePhUUP+{Lk4kLrV`*X_g4n`VE-IM@UCK#xH{gPqkU zdZ2|ME#?Qg8T0@l&wcJ%16xUFp{N>%#x6hRkPPz$w1MWa*Nk`_rX^FJJ`?F~XFYj_!g!?I1m?l_ zGO3yz0Ozm;-K34QhzV{(Qb~$vNV=kw0M0z49DrBH-VGWNIFgi0d{)V6P9oh`u3RZ= zB$!aHadb-#Yr1pTnD2@HHYiJyne@jY*4kY=%I&X5>u9P+l#KLy9ah)Cl2({9T1#*A^{)?0s;HV-^Wr4>zg z*d`=Wu{WrW5@HFpr%{UPRbVr4n#>Y7s|T7mu)w$}FDEOi-3&3${b|+HLQftFCHg+W z*d+Ee~hXjMjNn&du=YT)~w5RBH~r zLMw-dB)D;YYxuJ)8ylOFKgsh?tb6y&_ma43Kcv5w}=_Km7?Igyun?*#EQn~pR zF}j}z)w6MdN-;!0kDgdscKk71bh`554&u)0M?=m9aLs_3fhwNhpPn@7UVYO1SC zQ6qhZcgA#;5F8omE=vD4q`fIsKhlj0!P%@?WZ-NHmRoKKf27w|@?^@^;2lt@L8{H! zEnvp~v$Vt)k$n3BFz5b$6PA4!Z*k~nJ)&z}i?l&4k&O2fQd0PLjzsl;zp5DmHFoTo ze$SlGMZo|Hw%u&-M#a;)vUT5m{(Qyv`7L<1wu9|}xOQBWe3l}aClpE`krxq)qrA`; z)}D_`KL=yYWo0A)jMo0@epZ`ix&K1LAhc5$dh&2>NxTk3ZwzpI@Xg z35LVqw4!sqAN|Q@T%;2xKO4LfI`92=vlKBCz4QEb3hB|R-@HMY4ANh6?LX1gD~OAVVLjzbrU25iR%`ugEV zYYh@sgy=RG(#FTfg(*~LLQ9Vu&i2mOyZDDz|CI&kv@>H&4@j*N2viG*C->azEzqr; zD;pWcdh1vzAWKK|NLxFY!oaQRd4od?+q%y}|DxMxG{j9@bOqRJmO{1EifYE&i=xMC zAn?juzcldudsOTU&fO4y@mPHF#mlYycaQ?zBUuf!XNg%ilM3+C*j8R^jZq#&Xd7~W z!-{7pbrLtBo98ulRenb*dg1lgbi8=|3GejYHk7T({+tx^#mNjsLwmGjUF~8UJv`o% zBK#&w%}k?5$eY_d4f}~_pn31`GR>c*Px2T}(JpfAoNgl@wI$5ibz2J#S!E~p{F;nf z4-Vd^*HD^tCFa^4T@Shb`SWKx&}cIb6hMywhbs`aeThLtEdA#6{}OC3oSIcU8!pLc zWw9e@SzqUF!M$V_Y(jCKLLd$eyzvgPfI%6G73ts3G!so9wCUf*Oj^R0NfRu6eeEr~ zUxLc2)&h1Hjvu{|sVSzjv$IyQF%}AC`#p51s=0A>{4|36F%D3>4z+z0U8TPrp_dxO+gSxOmE zsMKM)xQ+HJcma-a1OZa}aC#G*kB<+w+@=F46nlle4!2WAWr>@QL0P#JEZsLS@JevP z4WnVdg$oQu6a$WNqQL{**qGMR+PWqDs-Q#MQJ00diMuB#CnMx#kk6on=DyK{LuUk4 zkr?x_0eRGQ0N`_%Y6{F!?FRK-r@zb6aj040`Y}_~8gPN}+>=d}M%fG+)lmnU6Z;=A!&JMA?~6lPiN0ug#@UihpUuZO_E{1qFef0kN2d8thb? z7+Zk;;3F}`Wp#BLYh)fXegy69kaDX*z|tuq&aCsoIgfHb>SA7g`4DtXOLrCFPn5CG z>Myu)g7&@+?*Le1`gg~hh_ohnksO*<29(%=0S%Nx-&0gj5HPvc>%r8SvV<7ploAsc zk3gw^b8o=+{30E5fim+Jd<5eZ~?sXq*;Zy z+1j4@xC754ZDlO_c;d5-NS~j^=z5&-i<%dRoTeo*RTSxJ=NYS7!{BY;t6C+!X77BC zrM3VI3BayFj6ZMjCpg5O9%X8APfCNL%C{m89S^Htclx!PjrUCYoE$oH+-&?~Afwvl zMyuRPFS-<3{H)&OMFum9NkcOe(3E^P=SAx%vw;>$aX%Us6@iP#BGP;_+@b>&jIf6e z0oBHScUhael^8#O_+lWRNFH;@6ImBGl#!GmJ+5i}xbz{?>seiP&47tSLN z=r0i9^L^9M769@3Xz0^pe-}Dfh_F|?nB(QMKDn&uEKfEV)@X{m*ts=cHeoj*{Gqa* z!Thv0EK;(S*Zr3D$jdwQzF?(sw}QyKDc|vDZ4IzYGc4284au2i4og#@3>~J?GZ^G7 zV^`XbAl>m_*#o1nYqXK`vj$FOq@QB1qLu}?Wjc1}iI_X|Zx3qS=))$OJIdccDCp9I z1o^DKpFiK@<$RC1hU;f`1ihEmec_st977Z?%HLiBwdM!^dSE4s=1VTg-<^5_CuwOY z6~`Rwt-6Lrk3x^#wFGTq4|n%Z&xUzdgxBeXGOz#MI)KXo0i$fQ8z52_aB9bu{@ANp z-XbE`j@#Jmhs zl1uR;P^CV!`8OF!%Hyh@q7>pE_bqp%uRT#yqUYtAtjj6QU1wz#6C(Ln=`Zu@WH z{|2|mSLo>I0@*tOxF!)bL+-@MiPX1zE!;;{E?OEDW>}|$ZSl$Tz@Z>rGEN1d7^nBfYsU3Lcp*wT8+?}6 z0h=9aB>L;328t0Mf0|& z&Cb7&H3YjNIPfFLe4$v?mY`MPNs-Dto2;kNEYy>{9@Wmao>Nyx1CW`{Ydgw}xC?;Y ztH8igY+t~^x|7M!T)^XpM>=Zn#l*n!1HIRDM|E`&`#kO7*l++cE9A_m3nGjA7RJ3( zJTp@Y?4l*7ol>zRiS3T}?fc1&_YW~4FVZV zfd5_bqX%!2WBvQH>yUfFxkzoNXA76*o}w?UDycmjd%kvQ>o$Y$y#7_3VUTFRiFdR# zDh<#9+x}@v&QaIe* zi6J9hg09f1Zu^IVwwc@8Ns5MjnSRMCxb*KH;1+9j*&osn-74dq+_FF*P#4NXfz_4i zb@Jw}thze**hWhO1;Pa`8X?!$=M@Dm_F{q&B?AP#gkjcj)pN&w;egr!SC-&BT)2NayiwW!F-ndt~CQUy8WqMdQ*GP>t?|`{km^Ss6iG z_YH|KGi-uQaos29N-}2qPj_XL|6}N?WgZeM;HT*6Ao4KH?r&+Bz6Y zf_COGx&Hwg;~hX-e}N=if?VNRXjs>avrd96Iu&rE2ZNH zR(3)?E1imG+NxeA;NJtm0;U(UDocFU)}1W4@h7inrh_S6Z{b7Cjj@pD3w`f0Ry6_I z0JP@)k&Bn{Q^@5nUM+TG_Q3Kz>Itbc(SfZbY6RhetZ?zS#R+=#o(C1}3-sg^W<>}@ zrJqBZ`yUo|i0AZJ8E-k|nzTirauRR1CH&~A0gKunZd*beH;4Jf7qRxpA7?=UZcJ{xgy=fzkicL}NKE|Ra|3r~cOJYH z)aTQkuH!r#DZ_(g<*n2qAV>09C{4xdXm@(GW~~+Erw0&-Sl_XvflM_&s9Ju^w|x%# z)7Q(3yp)oMfQhEN(%9A?+yr+ZG?apCMtAa%98cTeO+v`IMR!762jJVkJ?ZS z>u9xx2&(5L5L*eX0)Nqk9Ys(O7}$y*=`xW7!x!a3>xw6tTLBCY|BV<-SEFLA_#e3cf`(u`EQ2A$`2L}x5Oq)9gw(9F_>_rS zAx}j?fpw3x>DuF&OI+K-3r3=)9t^90H<|#bv#rdo|8;HNL{@}bgkAO z1lZXW+=Jhq%R|M&hOXz)F8R^suiy>?fdfr&zFP0WKQZOnB2X>hbcv%-Xt4Abhch&F zbsm2Hms;$%n6Az4xj=D5Ib`oKV^~5mj5^~uLLKf*fGa3QtD-ts2`B;-5g9;%04g{- z$ykdHc`OR$-8lCvzA!1LeDb;nF9Lk7udna;IqkoL&w4RlHavfc1h4I2sXorzii(N_ zsV>o(?d`Ia9?kz~;reY)1faVag_(^j03_`Bj464CH&L3NnE4|I5{ZPkys*GYa4=qb z2_a;9HfCD<3bV3F*CLr|LEDA4A~U&ILcM+-eWs+OWY$U5D>g%k@;xPb?>0vO20CdM zm)vPa+M|5Qd7JmB_k>p+5$6>ZwE@x(;jJfbk%8Rv_hfJo0++cP z_hbK2pWE=CKTq|l>?F6kS4JzjmUP@FQ#)tBEG&GqOx~v*Ic~!^sxst=mA5nl{!o4k zWk-gG3%hf-(o1?@U=XW%70<@sZvKB1dF?ns@jTCln+jy_Wrjf45)l=(-(P?1R%akP z54kPjy`lgR=AR7M?jZ5vwM~Z8kAE{IrQF_ZXV4yG4XFJyYNnAMOPHG*^6C{fAm{6` z@=a@d6pU67oFKZrO}yH0<_&@8N33Rfid1bap0V%kggkY3idy{6Bh@3n(?hExPN=wX zAo4^`h+P_iW(2LGqK(odzr0)^FQs?hq{CEA6!0wH|3tA*W;4D&xu=Wzkq9^nz-#G< zm2-+=Wo4ycUjD{sL;^i7;kxlBqVS$L5m1PjtCT&D(r+4VyF!w^G#Ft!!ae^I2NVUXmQdTeYzM0hc9Sp z1xX39`M!;Ib5z^CMi7Vbnv^Ix4y*CwaGz*&Y&G-MN5`WvqLmsCZ!mYP*PCvVrl{YJ$nh**m+VYlk_ z&&FAb>?jFqI9+O}=q6{as1<3+Axyf~$%~DHgTkzbuC&M5XMNMXm)b89-`XXsWBZ9) zWKo#Y+B}8|pn$TT^TjNVs+n(CTJ`4`!W>^x9P-`!@$XfG;4$d$dLPI0@Z#a}SKKwM;VwzD)wlWqI-Pg2qq z(4=90U`RP=Rt`XV9M<=J^>Hw4Y`vCrAucmgoGBY=47jGknc|_r7JTVH5EKUL3bJIt zEc%0gLgKL-?=m$t^8HE<-hcYXA&F!8`Jcr2;#Z>=Q;APCko9C@oMsT~-0yL%$3O^6 zq^#Ke6BQS;sR(T`-tSQH_5&ejI!c!I1wAelZDN^A-QC?0<(HXqSgOg5PmjS|8UO4oR;DJN)#mr@*qI5+Mg1agz zMBr+cOxTK~4s`u&^=1so*o~kvfiL>nY@yistAs1K|z7hn* z-kY-;2+$UmOM5fw>TV;4avo+=b2#c48WI7Qb*w|PK^Nc~ydNFYuepG^I?^6{*zRR% zUW{`-_9c$2($1x*OwuY(ZhN#ansJ^QmytE}8_Snxhhc#8u=?8C->`Z2opApd69_WxX zrZYL8dhYNbO4u1dzItS{z4~Faz-OFueY+23nLMK2L7Ni07x5MO0ze52`^=NKr>cDO zRe#z6lR4BhNEYV(2L7vB@6o5v)TYi&jO&jzF5b*}cDRI^C(I!`oCKa$_DJZoKU;I5 z-x%?UK{mql{U7_V*{&agVZBP}uiAWC-MiDsite5XdWU5j{VB4I#eTBK8C-4R=?W%D zzRKol_S&Q${U>PENhG@XA*tBy#qtsg5YjxFJoD}`xhGuuXUQ>2lk@Ij16A9V(};DW26=V^n~B&$X?RaSqfqHIZ;BV@_p>&A@DKMq#nNqj@vlIZ1C=t4Xe!jH>ky z2*IbhLW*&RSOMoBUh?0$A7Fpyv!%wgD7ImDa=4T6b7w34j2f7Vs_LKXxWyN z00yO)0-e;h85QB<^M|$vm=5I@>l~;_!E;q<0hC~%f|LsG7f`MWT0&~-ubZw#gLz7; zobdzzs8NjV_it0>8}EitnWWjK_I6zFqtVG31;ay<(@n0k62?J#Aiv}Z5DHg#h&@oK zABtM*D0T__r2e@r0eD6{KA_X%OPn3_a-5|>=#hu#h0n>LPs>1oZm72xd~!zE{`i`A zpo;hA8v+;91IDNOlV>M}sLakRihz0o1LQp1;qXTsIFz&)d{AppEa<;se>qrMb(DMZ z?`)FZXr35_=Wvf+uiSauy1UvMWqVaSWFdDiwcL#}17daeXirM{v_+b+So~U^=z~rE1 z2H4>L9eIKL8JI)XH5X4C8xhKBVwP+;pzQ)OL@D452*+^rWCxL>BWU2F9v4Xg>qH}_$maEROhIpR7cp|O#X(Yxe~4*5cT9x@pi4uwF3@T?Ko zau8I8(Y2Omti>;Z+fGFlAxf252H&MJfR^qnIpfcyUr4rntxzZUW$H}{FPwewGv za8w-0Y9Rl+w;^ncjmWe8$cUcqYT^euFRL0Fe421xjgmo53JL{kfx@&S4BxVB-U4F@ zFfj3aZ+c+wyzXnS>3RRrj@XP@_=On3W%A0=uy{m z8t6hFtbZJB6nGxAe$GEWIsDw!wJJs*8DEUwg?u4-oT$YjC`Q?_tS$V%B2u~!-*0ID z_Na3pSooX@!?yp3g(>ClWPm}T@$FXO8%2#?bG~34fKWHUgLvlVHndA=5>{SOVII46 z;K>dXcx^KqZmrdePDxnkXsG$AO9guTSGu1lzz^2Tk!?U{P{UT4HU>ANRfjKu4Tm}p<*a#YXPzM)`p!ui&{gIqirw(@+~r%Qk6@AD6R-^xag+B zJC+t&??(LfHF~RjPEHVgt5M7;518NImObt2p1?8jS+%VdJFDEFA$#*rpfKZ?#j;OW zV&^53$~5qfentdHy$kc0MTXYX>4f7P@@jY)M4r|ywBh7AR_Rf;$#{t>9Ha%cfE0h8 z!Wx)=ekQP_X-;``>#VZBc;veQ!raDJju9Q8)W)o(i=rwikVBX-(Hc_xO-fms}q_UZ~-Wtuzotk7aTCFr5(KDI9_?0 z)>RnQd3c93Vq+4Hir(;pY=EC$C!B<1z#8<#lR1SN9ZAv`NPrg&6q4( z|K~L0d+MUWtxi{p4{XnNZQ)QMo~(VD-H;Ep(4IVb!fk!_5C0+~vC+8o0aHHuCB)#S zfu6y=8!GfvLsZmiy+z|MMA7||CUdv=Cr#!;MB7j0vJZCO{;3W&cho+T{SpoN_7%nmUP0O$; zrAq4L>YB`2sdq1B`vmv`Xl6)Ie~rRmiXCMa>a9sdGGHP0ONp153~jK0H1vuev5$<7 z@ zq=WFSqeF6;OKp*KZAk)Fiv2ro$1e?D<%?6Jk`*X+RyHnH-`-X7A@^wy(Ir1_;C=r} ztPvq$wpKRuCk#Qr6!pyZVn1psxYZpdICM96cqqNhTsF`&yp>AX5v$1G^&*)>2E>@V zr$=ka=GY5fFU*HAT6cwl(Tuvr=uF7eZ7F7LYYn}<_|7t7=_V*wo=N*mwpz3=^-J^{ zakuxROBCq`mLNhR^($~>>F9W2T4tjb0^)qve_%-(odNz-Q%iSbF-B0D#1#u4pXQgS zZJ+cAVJF5Wrly*KqTcyN+Vj(e~&8Lmw2?`=;*r=k%U52z0)yj{_Ow~&~ zm)-JsHTF7jaJ{Z>%Lkqw9^y5*ak=!y4!%1}7I*swzoP|_QYX;0?mf=xTbzuqr&~Cx zq{n5Cl}}`?&wBd^-Wy;taAm`Zb>~+8Z>>m!w63)BM0BGVNt2px?v4yi=EorF^f3LKYSBY>`dk{#Ucm+b^9N!K6mtSYp|(;W!ALJEC?vF0 z(R^aO4`I)?^>w@N#=861cfkdy;m{Ca#O0%IJGV+Oi{0q4-ga>lRHP8O$(x8@dXH%@ z+DOsx%_6W|Z~g7?C=Z)Iz0i9^460;+2LVn|O1$&rfyfU)E^zl7Oql%*y$AtE!AZ}{ zlc&3tp(WWc*@J2nU~bAT`ZQZ#Xn{|9S4@d=%eVvoj{g3CjYRy58vWnf?tr0&H8pIJ z-U4G;4yWRK)xEL556g&&foh?CcG1C&IGVvCbc}--`926=2HQ)zI*5IeVo&SC0LCb} zu4?d^ivfyN=@sVB-nnspI~zm8$&?}!9G?%>aSXBN!|N5!u)6;<$Sd~uMmPTizsSvo z$JM@=wZjx=d-C4|*PPk%Wf`9NA&>w;J-3d>nm5rZwD)J`5(hhOIzn`{eZRc25(#CD zs!g8f0OJ%?b-Dj12)$2l2iC8Xgw=K0F+3%B#H@Y<}(E zUXIqnhaoj>?L>iAfc_xA!CWTznlZmW|BZ#gi2J<2K3~@kJA59PAlL5y$XHTQK>M2z zLp)#6JAnI1kUE$h}>E-pm3=^)lNw%+*%lXDBuDx+yyzcsHmtEQ5OTa zhYr}7Hy#=U&49lFE)PxjrF-?exz%DAMB?Y~3(5$=Psa#u7x z@-xI6eD(u<+7BUFG$$sQjc#v`$A=|{=E?C$B| zZJ6vu01at_nT?V{8vFprKcU>BJce_2k{t^(eanq6FuLZqES+z>xnJOYvSVRkF$}lI zDR-{6VWzjZj>Uz=VUaRZZ|A(vZj_0y%|Njsv357}#DcKQ4b}C9lQg-$X zNy;8YR#uX|ict2Z>=fCR%!*3LN)bZ%y|23O=leXrf1dmGAg<4Ko!5CD$9o+U!ZMP^ zpI+CPczBgeY-br-9$DK)akH(pl`+jj?DBiVm6a9w$3X?UD+8woemQ&`CYk;;8}OeS z-ci9h>ni?Zc|~WX^75*(Gb>5Bfn(Jvby6g1MXz)0kmQw*H$-=jy)zX}x`l3Ksr8#r zjhp0RFdY2T64A;h(HqTwO}0C@OnuM^{!+JJpZrUlo{fqW9sEEuRB4>xKk1LQ(tLs^wAbyG0l?I94yFLPrF*CM@=&6_R0F;o_Z|BOSECsaDU9wGCjo}YxXA2 z@8-?SYDr(It~JbPl7d&7Rmk}78S{~T@184!a8Q|xV_-0(xp;LIN`1HaJ_`}k58P}G zuC4brsmK&go3@JZ?pv~ssdB5hsguV)o@XW&IJ(m!U*O&FPJYJ6kdjfg$+%W4K_fhc-Y}2juhZoe?f?nLYd^eFD{i*cY7@FPJR7K z`ff2>^|vBYQ&%@(rs)FhU?>#xV*yfAQvR8ZHi!)J_6eBrZH&=+aqURp(r_OyWHo;y ziLPBcKfyH|@OpD?ksh$qBJa1qJicdd^USUGB9fv z8_}kHx(k$pd1M)z4Z6OTgQug+evgRNG->Tk`9p;bii!q=b)~gha@-~u1AQ)#FmZ&K~P@^<~nKL-O|LEXZ8yE8Ved@ruWUvg}54gb-?#HwrK zyw7gm)`PaHQoH?AxV36Lr4>$|EIGQn$Q3uUaJ{h1k=`_l%Me$(6M)^Pi^#0KdUDks=E3VySr0YX+nrI}a3&Y&uNK_t70 zKQ}HYoZha){EzNUDP_(18g*Fw?7y0~&~r-Se-&?cE!G`bq&}T?uH1F*Qd9rg4USvl z^^}mL1rRG^Y!<|QEtkxXjh%A*@MM=qZnaF`@=uxGAH7G-6Nvo%v^36%59ys&wnmwH zYBhSV#B6#Io&`D$dI(eN3%uKZonQ=WRMXZ524}MDyLZE}hBdo)rJHf!Jwr^JNawOZ z*`Z!NZC0RXz&~GvdH&q1o_6t1u28J!*Y9EMd|Ao+6j5az6OOI4EfU-&`F^Km`o0;b zk$ocEEVL$Ip~|lgQ|}AybV>2HO=ze*2c>6v1Y2Ks@sF zC#ZYh?swCULjMY*w)@`E9_F4eIr=-OJ_D7Of9cV#n8x+bQfUw0pM(nm(EN^~>=0(&)(Lzo9HS2mbN4$d%r^ z;w#NUYms(XhsPW3t(>)W)|4iT=8`dzih9|0XP8EDD7MnMi~k}Bl!Wb*@2jQeeN)4z zGJmg4C3;<9c@eu%Lw%(Ge1PfaFAa)3`ZjwRa>l=J5qfz??8H^AJx3NByLKigJbzL@ zAiXu)csQVztbtaPC9}|xQuOL&Gfvv{E1%Wn?p(E)E;rSt&p$?<;4rzt=R`r_U1vqT z@cEZ!jiJ)hZ0Y`eeMx<>UD?G^Nve_5Qtv(>!)xWIh^nlrlQ#2imoHl;qFj}7z1dRe z4jSza`t?dZ(f1JCqdX}5rkvcr_PwlREa}eU>cl+pYmUjJC@xLz4N?H5Le|4;pCU4DJ-1X-pBZKZTI>CE)77jSq5K@w% zsuLXH!No)_5$kw;q>G7$fragEkv_|x#4lfpkIX;L;q`qfY};OKyF>enS6U|K(ud1- zl0V|UeXNm8b!+QWkUSGHMI4>n7Hx6z6CStrzOt{4I4&If9ER}_aJb@^p1{;Bx{uAXBxfS{5Z96*;sU*cHD%0v%oZ@0; zVX5TiI37T5MBcLV)|ueajqQ|0A80pnXwD3;JNn)J5=;D)<0*QDJ9M}b-Y=kfM5tPf zZlHUikW*$OQbN(LFcVou_{za`d;UrU&Dj~(pCWwV>b0s~OX>t!^D<6_oRwyE4fmMH zscqjRCb8~a^X{I>VAE8GdS)9{&;FCiF{ia;`5&&lOO)7TDBP&U8+i^8%9Fz8Od6A! zlU^#4bXhY2?32dVX&tCLJxGAK;GWq(oV{3BD2$#icmg>^Dcq27$BqD@1V}`>zuL3G zaVxMm&2LQm12(>S|2`PoG%TFKVPUG*ud|rpuh`ok%&nX`{ml;SM3hQnkU}bsW_tO9 z6BW?mgOYI`$l3M06}&yv)g%(s)&ipy!%@2VrcHN)YlxUQ?b$d9vP)D2gVSYtd$^b( zzU7T0@fogDW!a1y8J2*!Ks}kB4$X)( zV+L0ebJ#k{>Zz%4Al#m*c$|13s6(}fFLH#}LjTQLp>zZyWVnj33ErBjlysb|g|Jj4 zw`;iR*NzL&(aV_3R7q1XCB47!<7(QHbC7O{X+~ZDchxpmsBa& z$}$t9zT07kX-{u-NY^z6&RFHoSh5PXwmDDF8@{;L=p(+QypShid+t4Q+zNFjdV>4h)HpZ} z?UZMyKgFQ0(RqeK@$UDLc)QPdInJ7~lCBGM(?V=^XWv*#e#};1vZD2cPclb0NMnHkygb`UWkGP_DV0WR${4jCK>^@Cckvi zy=@kIf4|f~Xa`bm(`RzCvuV89uS`3jy$7##+kIU?wq?%EC&7bQQ%BiJ;3BQ_szj&6 zQWwvKaZ(!c_RPf4zmjE7#d;e_V?=~$aqL_@sY{(;^`7eTKP5F zKbFjzdE!ZsqiXKq-uH9ciEUl=>N>p+D9E%_EEEvrg=X(<*g9#vk8bmmitpHnkBSSb z`SmN55{KU2Aw=HYCvaab*qz?H2LTU+iv!Z5&dtX*7^mc)F-Lw3TIeoM$a8KxOI^<5 zAJOcDiKPC@e z3Ah~;WKV>-GRi}Awrz4|lUjK|N&pD;w8bWf#t4;mX|s`xHNYESC?Ih4^Lh&9>k7#c zvL*Yth16;Q$Gs8!Jx zYy3*VVR!cBIJRA1m7@4z>OwuGpsE^{wqxP39}o9y%ky(?Ld(y9YDaZ4V^g_>1zcp& zv6J@~wmT$8w>b-fu)%%)D_+7^p0Qh*S8VfG3yPWdm`9`QFN3mZHJV}CCFuj0=&QO zRkYcr7%wY&n_{6o<^u;zXJvh2TR9caMN>E@&4bFsR*L0bme5WuHGKN+K43k$*V*IQ zwp7T<^+KIX5FF?w-n+ECtT~~|PJh(NNesTkfH!Z>LEM1I(f3h{Z21pJ`Esqwr*@4*}u+Q)h@AI4Q{eSKm_ z7^%~yvfAba*53!J!?`Vp2WsyNSiW!ONgYut%aY3`ZhMNPpN2G>m|Ze*^OPpJB1)2tJiW%KIl}bDd4@iH#Jd zb(WQA?9Q+3_gJ1AbD3&%6YCdFdCl!q<2bOg;h5TiRxxvjD9_;dkd5++)2aG-VgfaZ zPqIFStur6#uzgo5{*=`oD}u<~)zo+K?f$;uB%(sZ#r-^BA7~^h5dWRp780yft<~ko zBptS-h=A29Cr2I>ZMz1Xv=qu6nXXHcc4LwL z$+s=2&#{yv;Ml{DOgD(V9>hFIbkrSj`F#RtS_qDGy$|E+$uGXRdP;O-MTvH=Q{IXNsfn>85kt=htK{nLN$cRMLI0&tbn@UHXg|bRQrK5J?f|=Wl>i&rG&$sysRZgkD0A!1kSvXYK+~A0> zj@{lq92}t9niCekX_iuZANo4GoPVuwP;O}-i6Z(Qu{l@VPn}UHzE!rm|Xa9{BRI* zM4$u9eIm3un0>}~pJMOR>wLJa>*eTeRLOBioL3h|)y|(MVDgQL_Q|UITfDWn@9^)r z`cKg~{#<}48u5V%f!m*As(?u}<^q|}uIGPSi1E0j@Xj#Ds&l($TUj;-p$P#cu!lmM zo1!ADd(Z1f%96Oz_5O6JFo0p<0g$vX^Y8NS{<%Q}X+enbA*`Qw@7_&lhCKwbS-|Fq zyRrFopJ`J{H`fg@zcy2nL%NBV&E!~~MTD5baBrQWws0(M@AJ2NZ*xGa(ysKe-_zFZ zzEFxpB4%u#zwX;ZY9&gU^l?UDpb}Cp3=CwuXtQ-KXmc&2yBfU*S=GtrbN4n49h24X)p{N3vhu5G|2pKJ_B&gQ z_4S$w%MFU+Y$yJ3o*AG2aICWSv+?%jkQjZOf@WB3Rx9CiE`0g+^ifcfSJObz|6F&ob(9o@Tu&ys7Sd_f*b=u_=d zw*HuK?QN&)WRd+y;xD_*rY zN%nE>Le;T5o0X_kQm|Lk|y?bZ<#3!DI%OJ^XAKIpaTj*I2_ zbFnBzVP|{eZiwwNA65z7VWGhtsJ0A+Hk7@y<X>IBid}#V@he})#_B%52oiX)tiow?wMarA9;Gp0aZ4WFJKNUDK>-ID`R9pr{S$fntV ztpJ%8@6Yf9aYZ?PWvZkn^ESC4i=Wfa2TYSuO$^yff@A`dS!5(&%EF!<{ug{=s!>LR zxytpov$wbJA2U$+w}5;ABpn9by3tv2eTxk3@+*6Au^OEI@?xe8hRW-|H*f{*G|d0; z9?TdNgBc+%lEWk{#6To-psn@CG4)N;Ra=`Gen1_SKec4pQ{Qs_79z-_>q!r96cb4_ z0EYat=gxU!?mz>=c1QMu);?in#e)t2nVBclltt{JUn5RuaaM;TuZ1I^qrLpzlGilm zYzc$$i(`S#pMsyaK5q}yH$w+15CoK$kt~+DM@#w4+tR4?ab6 zkZP$pIRdtKX(`B|N^I-hep8$5r^&!&an~76rI-?nr-^Aoodrco1{~o+#nfP$piEzd z=MV%m?!^N%b74|50dt-veJw|uuK5|Mi2izI)$meHVcI5j!MJ;MthYJ9A| z_yVa{^r7SY`O;?}KYo<|lQeoL+?PF6Z-W zru|D$6Bx10AW0^+zPR+Sh@tMEnLRN#|GVr;Ir4DRcf_M@2ZP2*;B^ zOZ!o-4JqHtKl$ytQomVj$EqjtI|zrW^KhglevnOzceZ-@Tm4X&Y^ai8n@m*%kV(c3 z9a6J2#~#qN#tQ>M=8{vAOkum z^TDtqdaBjdF};Er06zxjM0G6h-{7}Tk+ArZ^p2FRLh<#`$`$q!$ozNLtgTGjFAhhi zR#fb&aGF+tvcmLykMO4}zfxp7l9~db9Qup89gqMJg(I)1eGgdt^uo@}?4$#h?}l0o zREDVMXHHN8HC;;Fi^xc)t2Z^~q zt~*Ww@*?tf``4pVLjWA)Kb)L5@|6K3+m?MWx4y~@u{DT*r3E4$2=|;Q@OE2YN=6-F#1wpmne|D-4 zEluPlJI;njK`3^y!m+P;_N}^VS`)=QSBo&}2N&}fx1jxgG3Cey(IS7JJcNJhC>(&W zpXn?ZrMgqH8OPkYix+dyC~{?;RyIMZAo)=gA^*_{jRNI^v9{pBqcb>vxY)5iuUQ`IPMaBT428rFEG zQ>AAypl*bdZ}yBR2I%BY4pd26OQ^Gv9BIsvz910t@D%}G!Ym(`TU4ZexCvyN_7e4# zrI%-oT{&)lzNH!|d3~G_LsXdWMMn?87*>4zumk4shzSS;s6;65x1Y!WonuW&!4`F==3YTJ>|3RNAW3gogNPW6(3=)25*LS zcI3*(+Vh%0G3#+cpn?C4M}|6(i$R3MuU9TaSK<%~2sp@-nNJ(J}U_??MKHQffTo_VutghAjB}+wdM_q&LwAg%bzlFsZP7`9wn3L$R5=4Uqp=VoO zBvTeJX(1*wJn4TAb4qFkZfAK*m5{xUL1@D@{{2lAS-*9xF@4{(YYfM zNiw>+K?{Rkvh`~1%ByiDveVTFIaIbbvDN0!x#<7H^3d&Fm&?g|^c*%LvUY3WiT38t zFD9=+jDh+^V)32)+JR)mQBTC?WOIG*p807lg;jL1@pW$EChz-@F%xy}X%mxFVs);% zK~g-v23y5Zf06XPTdGe-aFL3> z-!qMsOQSn*&Len5Qj?8*x5^TUyVtM?s5C)v_4-1mRY2r z$C%Q1Rg(LR;_<~@H0uRQWGj+O^((C>m*69KlS`z{c#6x&?bqf6q;hnX&XI}e^8>DN5e@yGyq-uNoM=sKP zhOv57CeBMecql(8UeaMK8rX3ygX>v><)P-OJPjt&$_^oQ35OR}ls87p%?^owKYlEQh5s(;U#)Dq zU`7H-F=LnqATHLYfuVzX8NN)!vY=`TSK9O z{j@+Q>2JwY0J5n5dkxwW=c<9?K@S-=QcSM;qI-3*8w17OzhLmIFjHseBi77_&4vyd z77EZWP%!7^sZPcF26!?<&W1!AP)=sS_VX;b2rHMlAs1x6a0>`rXhGE2P+Xz5_|l9^ zOw+o(Kc|)HDfC>1BTJiwaOQo4Nj|f6Gp6elTSXW_3tJVn9IwCHZ?*P^B=~lS%5s}V zdR2E{Uu@~gDsc4QzKPn{jr`8Im|;G>^M=tWLtw~I>?QwJyLT={uOFJ8RR$~Tm2(AoX&D=}G%2-QW`%m3l+hHXwQ zsVK(|MDyhsA^8Y<~PGsdirS|af@Kf2Uyz%uWCJnzn ziLN%W!C*9n{7A)qwtL|D&zm_fkor#aBp#W?#f(3k-)m^wRH4^pLQYGT_r(oR#XSmr zuB*4=Ye5n30~P>x1FQ+c zc>S(g+%luYz(AR)7np`Zr1-!NO3Vf8d!Xo*Ou1=WjH|r$VNGxl$UQZ|Krm#Dq36-U zXe3nNIKRUzl3doKdeoHU>Wo3#21{AXlqoLe7n1(!nYe98JAElcMMaIVhQ>8_%8|Ao zTKTIbI-Q2>$<6E)J%axWovW%C- zaKs)Hv#0>#W3$&PG!0CprgE6Xt+PKLTkvjGxzEbViWuMkh0NtA!`tTi@!UI~wc(N> zy*wlK!SoU7M5>z2yVABRQagMpgymhKw?E71yFBcEur~W9jv;2-TA2emC)T66xK69V zND15pM|@jm(&iQmvV1uyq<7$Xa3wiEi%K`5Ot<`AT^Ku(DaJ?XBZrAQWdoUxCmg3x zxg2`mAQpZK@f_SkPpgkx8~NO{s?jmk9*H{HYJ-jwhnMCa{sRX}O@+;sZ2E=JQmuN6 zt%(rLWmw}n#k=R#1?^}GR>Xgj2ZxLj?rf`cbJ5tq6w9xy$$7m?&`c3rbmm7#olh3f z=?Rs2f0(z>0MJ%o(Xkst16i$lh-lIJz?ckEAwF_dal?uZ@{iT(BAb4^04+%b!63T2 z+<~j;ndx54m_scHX$Ly2$4`rGAu8!TOX_9+Ha4cHYmJmH)mbv&Uqrge&4t8icPc20 ztws))Dn3KYDzbiO7Un~om*iN!ly804#5zP_^P`Iymuzf`e+Rd=MocM_8N1fChXb0* zN-I`a3DhpT(JCSVTZRvU5|3z%y4Nzg%?E=Yh1^zU*Ku^WH;=O0vWWCLcYCc^pLq*} zH&q9#S*zGG{K1_>Zkq}XKF?hm5PY4LJ*AawWIbi$60t}EWr6bnhJaCb*@~%--+3?) zJT4stn5d?&e_4DW0S7;Z+L-*(j~OI;$5&6?FI0X^-_^`086g91-7ZZwk7F0@g^E{^ zIcr9E!?Kr8Xb3zfeMipTYpw19>cV5g zyFDS4-0*AaE$6GX{MVXnq$b|^Z$JIgZMzP0dY;cJ>m{>0;rxaRBhtEPQ=LbpVlB@* z+5Xy18b;spAZKZ8`0j^!JM^kwEh?@1pIR@cSF2PWtaD?l6n1vFsrFOr!5v!}k#Ti} z=@ajwi$BfwA-s)4UX9T@^Vv@f=6u`TodV%l!S#LVA22p$B4uzfIOa)$tk-Tr4S-~R z@vaLzTG)dK1%&(B@?giWoPvVauZrCEZ`nXWBrXg^YUYMsA3aQqRWy#jw_Af5k_fuK(WBl(<$mWai4aFf2vWkmn z1u2QHlR-v0f<0iY4#5Ad*RNj(Pt>f=y%)ozB2(eaTvI&M*eU(dD^+I9k(|MktOCP>_2a|D0 ztRlKfCQZoFUU+Z zpP`xr;XT+Gt@Z_?XCD03AcpGU2mSyx_%pqJg9qr9Sj8>&CWGU={ysj0N~BoWlA~kS z1`6uxDr%;ATAa~m=-4oH5LO?d--&H5>T|nSf3U4>srB8P)~BbTub*^ykU#;@tGbV? zC!ZUxwUAxbmRg=H(oU}bpEi2CO$I*?Po3LzmDq!I&QMucTk}Enz|Dv-{q)2y#;^l` zpl$ztNTdM~#BdNQccOTPsGvE#UdEgkLXbM5w_bi;jPM!>i6)=j5f+Wem@(e6)_)+SA0K__IFMCeTzoHH z1*j)Po;f*fS1OsdZzs}gh*!=Yg^6lY<#t+sBGXUT1^Zl~@>%5_Y;2nEFPEXuX}x;} zVRxsnHW~qZ0W|K-o9j94C6e1C|p1HPKN9TE;h<v&6bAGI0w7f6sw58Vx-)Q;NhWWpf7C0^7v?#s?$y7|cP5Yz|%D+!wYGBYgP8T%-0 zj99>ggrCa#ixlM1_XPqN%&uIy<0cJ3PPeXIiEUq#7$jQQNiiAi%X!Tg2V;ggcj0Z% z^tp&!oHVJs`-b%d32F=Jolwnxxi^RaV29*o7QCiO9`o8LMLz=P=!g@{V)%G%_j7{T zhxoY%NruRXNx!e4-T`mQNJnyB+=EtS^Am)E=RX}g84#8B$00}?|0MOcT^v0-H97;$ zV8%-$vJME>duKMkurNB=XzB}@4p>AXyW#D;IIdwaCEReNvUi)+7-#$2pSjJcj)@Okx>2W)hS^qG`h>yHD_;9xH_#v zsNsZuU-kXqX4CfFP!gc(w6wNXpXkImK;+lpls{bK7!p5x*kLE5{1)^xdMCw4e!g(f zJ7}$1Rc`_hXTxkkVX@Verx}PpVAK!rF|cC+3M}c-FS_7Yn)p(d{r|@Seoj}ty2V`I z>ivlAWPf$@a)@;5e4n=KO7BN;pMz9Fd@A{U%}_TYdJdW&*i&Mp-9!n#06QJ}Z}d^f zcSAUUYPn@2d~Sl_{)#j`*zFPs0E0bK+Zr9bJ0;eOEatS? z?T;^Mk6Lmao0h~|)+?yhZ`1DSidXoohK3)IIAnB@jzU*5{98wB&Hid@U`hZn3tKSW zv2ugAq2Qt3<|T4F0dQSr*;V<6&y;%Bb)Wk=_75R5r^C&7nlCv=4lyRz6L;SrKdOx! zpQSZ^x(=$^Y-PXKOKe$XtFd#|$0rB*Wh2$r`=4BPQhI<{AKvZVx+V}o2 z|5esPuhGxP4R1xrkZwOSNHy~~UeVsP6keJ)wk(U8Fliwh2{fUj+1&P7GwD7cT7?y_ zc}dmvrhMvZt?ve=7c!(p+(c6gI+7Fz>71vYD`f~62nH1no6U8VNxB`dWn-d{dz_V} zKHb&ZYsniwH}m?DK%eBB?jWZ#YK&$;C7G`dC^rBwPs`0!X{+yV=BLXWSaKcyEb{EQ zphKTz;kaaKbdBS0ImTh{==*8$mb+RX-R!+S)iQj6`)@a&AD2;CDK(Wg)BNeoM;edD zQl0dRlsBYP6^X_CF#be->X;>83Fk~8gvrGu$exonL~_Q)^32eGT9t<=}$;%b(pt92inNPK4f zYNX;0<3mxc`yHz$51mUY?s2wltniO*9Xa!|GVsMI(OqZSmppAA-Wtmb2@B)Hgoc;g zEy`rws`>qNr&AT*+|Is6UUfBvd!CV$HQi35w2N#knheVd)DZZeH*XF`BzN1iDmV3) ze8FZl1jU?2i|c5j)A^$FfVBWWK#lNZWEA?a?70%%^b3DlD7E^bV)MiLI;nT=y%>{^ zQ~y^B5VW1(!L8;>`jaq$9A$EjkLay{i%2d8j4yUpT|G65aC@NLte?jhk!PkF=W_Y4 z)Xd6k!pJIHqPz7xtRpaPZBFEcb+jl7Vjv2TSqsa1Zl_%Gn_qNS(d;?+vxS8H2CN!p z_nEloj~b3>M`>1=zr!!rE;7eabY37x;M3Td23L{1NXJ6m^ou`D2B|COKEipa@@O~B zw$p9LzMfD!q*uy7QFl#Il}}fz_XAS6ga;f@Q2{Afrij=B(U)fQZlDhUMBn5}&$f!d z^nA8O5ufIBAeXY4E#T7C#pE^Zm8$Y`t(=T-F9xO5Dkm9alr%!Y|K`gflWW%wO$htX ze|VyI;CfRRAQGS=CFiOBBbU2hEhN&>0#7)JZDTR2S%M$PJc*nW>~`bF8;uFwr?XUh zh|!nBDxx!L>Dx-vOCV$2I3;&KCvVHrJTV1J4PCSvBOzJ<9mlUXNwm;4a-@#i0L(hXi?alfMNYR5KD{yM0?fg*p^@@CUy<8T;f} zgR8D?d?pE88!pEAnXodQ?z_v#_jqpA$^Q(gPyl3<62HXIz_0}{VcbpT+E@A;n>rGd z_y2gdN$?Rv{60l=cw4Y_J&>hRANeV>f&XdCq{*Er6IAZApH1phT7$>UnMU@02Ej?Q z9$!4e#33EUbYp4B^*Vjg@r|ugOeH(V3GoPE9t0v2){WeXZ>N>w!-NXm?=>Yjp^#1S z3>3eaIB)6$yNwhcZRXLRi|)8TkR8<_(Cdw3G+dm=khuxGXET)&{6HW8L?{NJ92lp0 zx$J7Tg#iwf^j-F?rqBWr(bBI=A!$KFOe%C+DZJUfqz`EvNYtxKDG4?)-djTyL~hB_ z<#4tl;2NPmM05;fOwAqx?zgPZm~V*LVq>ziW-w1j?t^&gq3^~5 z&ctJ)Ya%g$ns@hoE8ONY$5}<%wBCnwg8)3B`mb_LrrN>qh|gDxe7HFIh)LyW?_fTRi_zDrFz5r;TFcOnM`L}4 z0Fp}QqbzoveSft@z|X2TE-|sqx_A48^1xsMPkg`ArKoO8W6ZP4yqiXsC*?2_{7L+? zFZo2?B(u|GFZhHIlwEVN;3kmKk9-$Dj^=FAQl8h;%xA1fUOJ2vmElL>|%zU$73^lJx)^(WQ|Nl67GWoPZ>q9>8$K@5X|Av;U>M$@iR zo5#K$8_?99@#s*FLgAo0T?pL*T1x|(921?j{gP37=7k-@iHO8_`c&dQrm$$|I7+<; ztcw!eq2om~j#3B??KaEh)U2a>?RNcA*?|*Luc+nK?m@|Y-0qAm_ogFB?frw!dw3^R zC#0=1ly^A4iyIC)!C_^@iAJ)WTYWmv<{B^@f&@Ss)ZU51>pM*JykwKaazu+?XNSz` zXDog{Tcedfv)g6r(wDaE=}~^0xBRNPM+g^;Ti$HLeeJJrUZE|!nKur@FRD{J@{bD4uD!Nhhs~2;-poknQY&qc2N;hWA34#eCk-X}q zOp|J%$r}&gr8$$?IePxe*m+HYh(E=J?%?S}Zapzw^V>9$d)M3ByRYYV%w?^4GWG+P zdnK|Xf1Q&A`t>dpiF7d{m}G4#+%$I%HZLHyPdKUGjD>cKf8dFUNMW^G3Sv4(GN(u7 zOc3nm9Z88rCR=^P7m3+Wm_kPFySC+)54IV|^(mm#>o~FwsRFl-U6#F7(g{~BS0!EG zd~l3KvWKGrzt!FUveo>Pp!NqVAq1BH!}Jp|0qcz)k-nC(B%W?nX(^(f)e(d`^woUv z3_7BRlOH;0spG#1 z?=cWsOvqX3EuB=zU$}BGSvhWsne~NDd@Yn;*WCu)AAA^pWixR~GT)ZN!6V)BQ08Ty zrg004cQ1khLAP4PYnL82FLgAuoqk)9K$|}$xyh=+G^3QCvQ>Ltp zydSTUN}rEsScXPkdv;ol`yVCZ=;@;4C!Dz`FTG~laGY?W!;=|m*M5FOzWQ3>T#)<6 zAI_-Gx>BRKCXx_Z)yyL!yETxVky=|tR$C*aiDPGoF+fvoF@{}#gmj}xA2Twb|0kNZ zBld-NkfiwGmzA@#^SN(UnIz?5_5+7nLjz1R9M5de-tEt$xK-bC(QNMFQ9g5I59)PL zOeSPI7kr*w^*Y3m>BP|Q$FhATA&(mv zNCWVUxs@0wn;1Q_DfZJRBZ#O!!Cr~cY?zX{RvZ@rLlO?v`#Sd$CCDXqX+z(}Zf?P` zor&oaFon!|_KJpT8(@;v9?K{zeIO<3dffW5KzZVkCRC0nFfS(-hdN7*3X7ga9N^oh z=F1X?dDSbVO*z7kqC6Qt^-`r)Y2VgMo;eJg98Mj~_PVO1?*R6{6vzq^&QW+DU& zJSV5;ym*4je&i#$ZL4I;VC!yQa&&sr*TlnhbbUv7j9Apqp|2o(nxP*_wr{W0)~`yq z(Y{d#tr!Z}oS*^w4jW||WRzNs=813}pSMw%_IC2D45u+3o-jL6TIouq>mh4&{bN%E z0_^?Ai?D+E43^$RzZtK~s?nF3NyrLe$pt41wc>4>KC^Cr(PicIDf~pl1EOHF5k zJW1LDow?-q!?wPnJ8k>!yS^x&=HNF4TeG*cQu1z+FE zg>xG$Bli<>POUL@27-R>iOwc|zcYh?9r?l28Ej%pirqHKaV|@{ct{#Dj=^t!^aqN0 zy4?^Cqeo$Sr7CG6YF(@ERUO_sA5 ziexM>K2`J!A~x>Vx@PAcH(z5rrbYVVB**ME9<~zCfgl z_Id(u0g_O?URh?Ms4Ez9*QOwk==gM{_Z5$}pz6EgFs7L`G#tEGXRHW{^y3 z_C_hVO&=q~nFz)DoFrk%Df|d19|T>y5j>BHP)~y|jXFF2r+K?mCTDZ_R;Vu}JkVfv zw_ABVVHu1G6K1xtZNM-rV(iU6{-*34G*Kk?eKwc>stdCoIQ_%hOWcIKDz&JH0TQn& z9R*Mw(4P`SFgN%A>0d3l&)l#-W%z&6*EVPi*Uu_$k$;`vmi?@o7{9QE+Lxd2sk$P# z&;gdfkOYU2Hz1q89qEWZ_w@gGW{*|)Z#sWO^0h`Ao0>k?(0Z^1sGy(z*dLqDRSgr9 zc#j*%CPVTnF-l2_}DVu;W5ZjIbHwR_@yzaHrr1wYX>DjDHLXk#Ij>5Rth`?H?GY&+z+~vF&G+YD**3mV^)NGUY zovvrK`(>-1(EfTU*>hl#o1xrrzOe9#@5PwMA!QHRiI#2AUz?0@ZV>iRfHC7GpokHX zbKEvu>^mgST~~kNWFUN|q#EgrPIE<#zuquCI)kiT>M$(eRu}(&G;~CCQ*>nF)X>8} z&3lmK9s7VO>fTSLfNH+|ANN41q2vA@J~Le%ZvsebsbY=7-} zF5)8chka%fBb86T%`~$t#LKZsf1cx)QnihbMRp8F6{<0ZFZaDa-~+S*zrPB5Ov zK_EgPET8s0FlgwiFp;$DXWASYk}zIORPe}3u_ACVwfv%uYN%= zm=pJia6px~gS!VScKoK48rk zGq>YXxX>mC(^Y<&99ft;{ze&GeS0_SqyJZFrMcy~qC0-rIykomK3oZ#^9sQde@lT_e5wc+^5gwN2{N{O{84UwPJY>^%5# zq>@hNyk2qcFd4Zh`=6F>%5Le@x}t@KSAJ?g`g^%)gxCfq)dM4)QrUK88+_;BE}Y}! zT99;-puX{duI0^i55}Xz#UL^4yIudRs7-IJZ9U<5%wcub|2A0$J*Szo*6bUr<%H_B zolO!`Zf6;1e>6uZ_Pfn~Q4-qmrCCK@G5Vy!b&JB75(6+PMk|F)@~IX=v%-G}^oYL% zdcmq^<&S!62mQC(1gUFJ(GD|s3>Lm=kb2VbYMu_xlc+(JFFpd4H)5Ez`l#5qryGAf zbC`%7p3>4r*&G^acA}c`Ml7}9WC+$z1GCGouq2yh(iiVo^0P00gZpmh8ARcFwb|m2 z!rG07hUOz?^o8s-184>zAyw!-d1YGcex>g&D{XS?B;=$Y3eFxicD>TX8U693>{9rY zJ2sq62z<1WWaA;7Sl=&AnP7V5%J-D-I!@jYO04_CIwQQ$;n*-Yo9p@-Xqd~tJ)L05 zWIf1CjPBSS=CBd~`~X8sh4(fb6UB(Up;04zhx}-r|I2YgFAHnZ_f)o(4LAUkhTV~R zgW-(DITVbTQPZ2f_uz3rRG>7EVi@V2QDKK~@H&fd{GNucGWIe1k|u@SXOU zcC+ds{GKpG#JkQDfz%BdNXbkX&m2WQA2DE)m}7CWIeyHNHNHgon(`U3gu7c%89-op z7*VPE9&=sZYWcz0M-?jPx^;X-)$m{&O0sE_2yf$Oj{VV1Y((HU{-622e>Dux&yu}jlMs$PVt<=O z@=E%nN0!I@+u>qJ`jBA#F8}El*Eb)P{j1g$%}4xY#XUMErIpRtqW3j*-&BSQLdED2 zDPO&`khLgQ@Y$z)iPztNkvcd&v6vS-fQmtjN$MY_O$4RIgtCYhvs=}#3;pYG3+p$vkG5+Lf6n!uD8 z^-1&U@O@S~zM+`@@!-LO>@koMj?)7nGc#Aglmb#TZL4qBO6I>>vKvI%5qS-++Q&;0 zyoU(303+jamHtGb_8m}#IT3A&%K4BMWl=#o8XCjZ--~~CYmnqQ_xqtYu=((m2?}bU z>!ED7pz}2H&88;VF|&gwoS4PuQPhn;z{`8C=6~AV(BkVJ13h8gYI&$oAY6PeVZ{oI zoS_btkVX&Y0mR5;sKrk9;d}&nfyun-xpfN|bDN&7aQN^9>pB=Sq5680(5s(l0^z2_S zfwvia(5-pX$sqM-f3agCCvGQdHB9HG1P=@?1}Kj{-s8FkTr2DTKO^9)g)SS9cr4B! zV=_SBglg6LUll-R4>E+wk0QMGb_(}t_y7u_Vxa_cxpBRZ_H3c`gZKwc=UxS4b}q*@VLqU$^RElvkU6+%~Z=LO7e8(*r?XiS&Cr+3j8$6?1K5 z_yj8jW=3S}C0^ZLt$r%@9O@Hl zG12ba1i-1YIy#qP?5!na)8!ZjZqbRbEdu8e7 zvvo#WpvNL4mndnW@r4AY`X*{`6!wJ8m9WfqS-=)B@f{QK?xWCZle5EuhJGfKx%#h! zRkdGJe0pbA7G{=Oii`v_VQ}YXzg?Hl&Z0j6eckT`w_bUBI{#_n_lL6Z{ZYI-w>Q?7 zmX)QVO2WwYDLBPqt%xW35y=NHoeq)W??EhFl;1r1DVNM( zW~M$DZ#+`higzsjb+<9kM?lDdQ2vJk%y2Q#Lw1T0Zf7@|S{2XP$KhK9n(hA_$(Gq> zmU~tIbg-X!DX>p!$BN7^i>M+2kEAJ}aNlf5FY`Q+8 z85=>Bza6E;C}K=T?wL63&h;Of@4`s$zKyl7QtJ7+Q@GO?MUGGsUE>xUL+xh|P1O$Q zLOcX5jG25iVTb?k{%mGT?%}>Yh6-pD2vy84@J_+l;^Dga^uT}jRa0+sp~fmsrKpEf zCPHf1V#sQ*Ii!MF&0J%nSx=@H(~Eqw5G)9##Fx9he%m8DB*UXg?C{||NEn0n+)w4^ zKiL;&Klc{;s-0pF`a&dOJXMa^gfJD5tS=vFB1%Xsy}6W!(ILuoItQv${FA8p6WA<1 z8ZGjZ_9x69R1=Q4BD!f^ylKqzjcp?(m!sY9#qvQlgBd_p))Oka>=(y(<{%JY5k#zd>i<_z1>;)dr-OG}$BzDbyk$N&PT%;-|3~0mCh$Tj%FO0{`If)280n_{eK-6)u8%&Q5>{s~nKD8HGj?<8(gst% z{YjWW1)Y1rMKRP3N=7$mJYu3nP5F1wWbVfsjHb3KnJA6}z{pQ8w=@PMBkLHn`Ul3_7xQH45s;+SEa9< zVO#&GhD~r^XwOKcX9nGiqOFcE>re0cK5oj`p5Zmk|K$y6pR+sI5pi@Id;Hb6tQ-6f zQZt}}!90n&2vr&J)E+l8ZH0>$S^s2WoS-g}DhNqTK+14TlEnjVYKVAjBCkU-riY|1 zmH)R;!(QM-D`-b#)(_xy$Ct%Vdo#GyB|b~KcX0!-(EI_sVAFTwJ#oqXf8XYRd@TR} zhRIpr9BBin(H(gjc=+TG(0!i_4#4SSU=n-lA00rRG%)04T(VuNgUR>x2 zXNWNAy1e}P(WH$$>PI_^fam|%{CqO`$Gz|S(r4v8Jv9|HFY^z$&+!p(saSL3U*LUZ zAA#3u@-ln?uKg4Ou1-)_ZBXdobo6Fm1s;p@Y@XH({>xvE@? zz`aX~*}wk(Isg9%Grvs(a8O9=F)*bR0Q<%@?~3Q2{_z%=`+>`~4=kO2$v_Qw0*Q(x z$Du^KuPgl(feG#5)HE;P&V$2EtlT`?&EvM^NP>p3K_{gFxBP~zzYn^<6m(74X}#TN zKK=rponfp1Za4!M8NCkMzd7yfsVX*5zakT~M)^3f0nPs4kenoNIr)N<^FhG`Tvu8+ z@x%1}e^}@LIHLZksvj7`kJaseastlAD|W&5(RakGf=@*aZyTzOvF;ux~WiYlWr0VId66I zW~R~3+_~+Hedh;vk=x9flXK5KGxvXI8Y3bC!!S%hn!8fF-O zWV2Z$lS!mfsjyv%6uyhe+}s?Ro10h5A1S_k`GTgVCT!WV1prVkmoYs(jXitzAQp>- z?45ctnGCL8y?=^aE(cxL!*)k06B847`SRtm{*4J*M0JEp|HYPE``r6p|Iv`L9QulN>VXJ%&b@Zm!xC$}sM zEiElbCX*Vm{{rZL7yLV&%{{5)cY5;(dZ(ACw2YuBz}XlO{vo-`zZX`0m2 z(?hefvwt#&E9dg%%hcQ3TmL*VGD1g>9;NyD`4GKQkFM*KNF-=sVSx<8AWhTg>({To z?bwek6bhti8UdiTwzgI9di^jxJx!Knk!4x*{{4IE@9(E8SFX_9+?s;=VJ2U!2>#d`gFaWIB|k@ z?%YWqK73eB|JIy?2M-c}Wv#ETFEpPjl?tU&Daz$?j{bByP2JtyA$her+`D(LVf>q$ zo5Oak&bxQ-=+dQ2G&VLSZR7Fd$MpL3Ye!$PSfrt$p`h-CMqmN<=g*(mym@n=yCa7A zn|~M|AIH9Z`@(i3a`0{r!!Sx%QGm4zb)pRq4?Ftq-o5Mjgq@w84qNT*?T)_o_IA&< zGMS9SRx+8y;NYO+vsW=uh{1MyckbMA^u2xi)|0JjwTeTB4moUHym-;kCqz##sEnCu znhsknEiJfz|Gwk%%*>1@TPkxybX#!AR z?;D08E&dsX;SdiCg#xv%bb zDsw|+%%YqdQJqgg@LWv9z}Ty45X8W!*o_baqaui6U}U#l?bxqCL6SwFGG=1Z2AyC; zYI8$%%%YkbQJzn-@LR(S!zjU1F@GtS%V=$F#lXM-0N~ZDSAkC2+1ZI5J9Z!*kHa+0 zKu=s|G8s%wO(B&^VRCZPvv}AD%d&9p+&NshZ~@=He}`ch(zdGADvlpNj*}-(LesQB zPpblIV`iErhKGlt>pCpU3iPC~%G^*Lv#91ql;=|*R=Ra56bkhhha0KiL6X_6eg_$3xB49_|Ztu z@uKlGEGG5?#liL=V??ru=5?U$$GNYtqIsPh_V-f6G49{)b)enxabGRm zKCgtznAzjwzQWq=d6^t4b3=8^qM92~o=kUSVjE!@dMdxcE#@< zK71Gl4jfnmk5-3bv52QnpRV}5j*bp&+qP{DJYu2(|ED!YkjK~L|6TUl{eStLjDPsf zgkcyZ@N*`NFP=Sn=6Dz6cWrcZG;CLyHHPm@7=}>--}34cH8jIe!XCL_t(|ob8-VXcJo$$NwpBB`$^O%IHGGR76COf}1L|y6~e2 zE);a*6fGiEDF`Acp(02Vgu02=jm3pVL0!}d)RiI#Qo2Y2Eyb^upxDGsVl~Ir&6^pc zow@h4GcWJ_;4X5Td*R=8N^EG0V)E|YJ9Kn(VC~wq0Dx+>iuw6@Y~8vQi9{k|@A%1Pvp9F| z9CEoFY}=079e-A)r>F7c$&=suSFKuw;o;#3Jo+=&u3f{XO`CAwzyWO=Gcz-|e*HQQ zA3luz`}ec>Rj=2vxVVVbt5>tw3yRh@=k@E?s8lM(2QQUM=|@+eg#-Zd`MkEBYJatgb?eq4kx1a|*|PwELZM(Z z7aT0twuFORE{Bnkk!Jh(^CuoWcz{>0UTN8@*Xy`(;|3-sCNMocjoH~*Ejx2_bI9lO z`1tW7?%lhGGiT1={Q2`pr_);Yv>^>Z|^dA-9F6E z&r_*XYPQMANjiA&AbtM)SHp0<1UZhHCh<$rSex8m&Fxsw3=)-GJQ5SdT4T8(;o zdMKC6dHOS%3=ItpMda1;aQpV{mhoS+W=+(td3f>S1zo;;S$q85yLV}Fa?;aRE|)2t zPMf+G8Ev7N2*OI^I1c*y`l5CtR!A`s1c8Mm1z5LGr`qV~sHgANty_T)I505avDMet z=YQ!7Q|+_atjAVYR~N2ax#Ia8R7_N2u-o3vn>Rgu&!0aJWUF4UW7n=-9$SNhgPuMm zdIo_rW`#n*W2>{X6XWCKp3fgXdIC9BuK>aU73$SS%K)yStkf7Jn8(+p1J5luRa@;$*E>qrH3gdPJ=-*tSgo znsGAGI5=abL{}x|Rw@-rrBYgAE_ZHl#w@P65$E+}LSO+_IXpHt)=~@%gG%P!-d@UN zGDbgKO>!!gqI^EzTp+rrWPbekF>TneLA#I;{hQ1~LqlZSwvkxM88em4mSxeiXMfKq znM`UG5(Q^&aK&O-)b}!*Mr4O$fq%urR+LI5oH%g;r%s*1r%#{YIF7chdcBVR{(c-f zbO@GZ89l8E@W!lAC}4DS6t-=nR4N%gDa@H0+%b!5Zp3*#8L`x*OR-pN?y3DER9O5E zU-`whu({q`{lDXBL5#40wj+y_?h)FVY<_2fXlpk@-jkvET z8{9FAYi`7OJ-PjJk8!^T=05J@sYMO8XDm{)Gu`G*^OUlXmn_D(vnX-($>@c9Z8mbFJ=X*l=;7~SXesA%P#To z2^Z=89BU8$719)7+Q)ENFcPEug6?|j^cRd|(IAq%B(l}##^!UIdSx+bE-tI4>lj00 z4;)Z8z~Q!JR|x$1Ui2RyoB+DePg4KihkGYV zmvU9vK2C4yARiD{D<~??|DJTnwCBYMU~MV&KeOph7p<}UsI4TJY(HLs>3_cLA31w+ zkAn5;VC&bfI2uJ-FSRSp6>C^AB*(TVXV1wlcDXMCE@Kmt5Ug4LaNcS-_`a8UAtt^X z9rcuhN;0l>Xo%#~r%#WLh@~$(Z%o`d-MTn0%_$RzqlbfCC1j%wpu@@Dd@6Iq8W!NW zw`4R@q#az?)I^I$Cl_-rq~gmc$M?hg@nbw@7M6Tn4&z{BF6H&zBcDM|is#o=%6DH& zGg#W&KfE3PfP*YB&+2%;GV|;Wt{pY8%+*>wLTYO2K~7xWKoxaTc8#JJeanHYVZooM z2t!+oldqh}ouTq-u^Gh^QEDm`LB)BX4-iuxFq-=EB3FStu!C^l*NgIn9C;}_uqq13X zFfO5?MRk}==FH)7N)kuNDJv7ftI^RsPIo#u53F2VUCCQ4D#v36RY))kHHsfF$FdoW zT}vi3lO@TwUA!LE5iOsKhUUD~E$QrBX{XirjqlRS7aKkm97szmE8f$nrjAmp?VW90 zo@=jv6ie(JXn8H|-yX>^Q6oOR+ZBX&1OMRg4yRjbL&LpNRh^!!y)B!BtZye1i}Z>t z#EaRixQucG{&)d~*Y9?Bm2x1pK00R2*q2%Oif5Yn zE+T~t4CLk1Vi-Tv)U0)JQADWvT9F7~e_43GF;Qi6yrsvL@9N@Wi6(%S!WyQO-RUhz z7H*Z2XZ2e8!R2>X0^TVqDxw~CnyT)3hm_mw{wrq{LW^+ehpppuDD2EAeB);npdWbuJw2mF;m8dN5v9#NNnwURV^YD zDQ6Nptq7638Hulnyeq%W&X)RaH)9WSwkuvS@ITyj2oGerf`w*j zXBX75@R9>L*5F;^S6WbTVg0wX%yF@S?n&7q-|a&s|Ciic4r8^|+>7N1vgUD0AkiviVAmEbO3tY#fPy z#5m_xM<2%UVy&TNFkksH8WuJ-I$CM{E-q{Yg6F&Q9_D=+5hfjx~$n?)-yQwKTM>Lp3|H=gSzEb6?*P$8K=IGJ~=D|cPfxYqz*^(cp8 zcH@w1W)uS9)w;Rk@#|rdra=AfM{+~?;<2HB)Yf<3(%EYqDw%SU(x@09vVGFXaP~qw z!`L-Trk-|%Bo{Hq%2C~Q`C6v&lu!wtEC14A>Ty;ad6cze*YZ*p$6~88@6|RVy!_VI z)^7q4MHivL0h!fUFJ8aCf^>{msJZ?sxk6U_l%g}4--2r6y-**yu1fJr!9#jtoOex4 zvrb#mBEp?g0j!wL76bM!ym#*+O7FlWbX^-6mJz2>^$;R5W2ddA!_hOqkCJAnHoE*0 z%}1P8k1Np#{j4PjFJWhfqpQQVMTfv65VKBTQRIA2%+JTs#AF@2zaOU1`xb!dc}}$RSv7 zaqqSyv5QTO%iRb)E=?Zax)tBVeXqR{AB_?{?cLB& z2iD)4(|DgPWgf}DW+knejDYuRS=)b*uvo7`;4gk_ulS4M2;y_Z@n;8}D)y)q7mA#m zoR24)b@NWO_!lN4Sw7fGBr^A=od)B~$YU7i=R;_@n7l)E=DyHO*7tS18TPxGw7%Q3 zePV4`aU`_WW^^I6Rf_(u;rw_lxB;7E8mjx6rx6j2SQ1M<9nQquoT2_$Mn*<`8BLTd zB@In)EGO)|1|q*2gMitn&%bGs4ycn3l*r1S1o7{ zN*+BG;Vohu!;AAXVW%HB0*X>xiLJ035Kat!Ie!}acXy0S=mK}{7`eE7;95Bw^*_7O zc)G}a`J=u4=D|t1-K3z{`QZXu39V8+l!H{KK~7Xp4V}Fj-u703xqoQrY2vT*eS?c( z$GZ}u#Y27S$wr}j&w0r!_3USaA9=daUr)zC#TvPUyER) zZG1_4^Cs(&Cp2HHLFP9R5%kfI?kAW{m+R%edO*(@DSrMYFk?0j<3Y5s6$!Rwqy=-TOXsrZixhOX6DMW@x( z#N!3G`z=Xorrju0Qd8-}jN6j!^Qx+b-DpNv9u<$2xKmD7IdG66*J^#o*!EM)E2e)Q z{dB4=Gw-2jZP0aSP2t6E$=li?7($Q6ZfU~ykGA#A9Uk3 zO>WYnORe5mjRS3l=TdUYNHLVpcR4wi(ZYHspta4zbg(vaAse=H;{>_K z_Pmacj^oMzldk9CVYjD&Wkyp5iI;=;?3mCK63o4&9{wM>*{oXi9=xgrB&OQ!8#S}` zp&{If;+aIUkyPl8x1v%~QXE%@*q-G*&`?{d_1e4CC?aty`cePx!asU^uot0(?2MU2 zk=k;otGDg-Nf6B)3p`~bDC9s2d;NM}^7im#_Ndpr%(xBr*TDg$sX$_>u@jfh2b>s2 z(hUw2(15KQFW2KPEn66hNB*WR+)? zl7L+N5E)5G@PZ5Y@W?p64VqhR&yU^vO;f9<mO} z2rY#U$E$w*Spv5~3Gz$hYZ3jXS%Yi;NIX*e5 zA`(A*S7hNyo>pHoT*H&d|C@uB7Ox|*T$;h?&`y)E>Edi_IcVO@aHU+VDkimZfeGl#Na>QQSj}MP?$jT~uSKq7q z4PSQ_wcvU@{9|>va3V`8ger*h@ljceiT$H)ZY%q=Ba5RbV|Dss3MDd$Osl~HpKbyI zZlX-VSeBdk)_zU1yE&rj;%-~UH$p_Xi+0~O^?m<j`v{pg* z#lgk3Vl|PCMt@EoaZjf$%~h1DG)YZX(1|js~GdO z^rd74EIT{9;1gS#^X_E+B&dMJabd}p%-62?h6T{JTkw(JD|z^N#amNeQ&Teo@8{;` zWWDz;h3#x(!@59WXJKh$SX=mwh0KeiO!gU}rvzQ9;!29K$*(iV zM>3x&@xAB?ad&rLs2bI`xfv^I&Uh6ci`tHP^5gSc_4?fUo{OZi5ow;qSvt;@Zlu#t znM>+6fm1aD6QUBrfe#L(!%0d>v9=WYsx(`tDy=d^nm)KM8vKW;dE))T5IOnc;>kNWVPL8$DCeKHg;PHO%5`f&|n(0&Bhb^ zA5J1rOax!47vJ(1cY~rz(xde|tIO(D68W#Ov768WD4k3)t|!C(4kn=7-f-}zG&uc! z1MqnG=AL8Sw8z1;JLg3{tGr0|rH_rL(C3>|1wt|!2MnrS#-E(=E zn&0Ta={|h;Fl;2=ZnBy_Uf#&m^a~&N;EId-UTvC_m8`e7DB90kkLvhZXLxVouO5|K z_A^l3^ZHPq$a=L> zS>7|6{^UB?I9gN`O;kC!oS#r+i0Nc$$-3p=7U>POj=O&QL1zO0e#@eh(fR37!r+~y zTjM9k$J@1izJyTjCIM@YEd%v70kd|bBQ-8y@Sr5l zQMl;fwv5VeuiBQpUcb~%8_hlr z8=4-a+_-=p=fQD#bg1V9DcVv`YKX+yphQ)Jmgo|Ox_Y@8k_?tHb_fw|$rAfhOu^v^ z;*Jer?VA-9ZYJT`w!9HFhRs`KG_(E}zK`*Q_p)v2P0%Xu+z7Yv@X&&S*QM)15YqZ7 z_bqGKgy>eiNh+3qU++XnGq*6ywJRvB%$c_9REc@7vPz8}$>)6P_SD$%bG})lh1s*V zWzGwNv6`BS7bbl=+MgBkt5RbRs&PAtexO+@-`kIKJ3sY26K}Gl32)owxah_r59-Pq zHojLm@qKT`_L-F#x~8qsv{fw!rf9g3=wq$D6Wva|?zzuw=E!j!m9Y6I4P{;2g~v&c z7;h&uERERXHo)p$&R{RKCgWXmNchT?KyP08U4hxerng5TRe>2rlx+e7 z19dpa_)ll`MAA}1cS*mN4DgAJpX_b5e-}g=3;GLm7_jzfH#Y6{iek0(eZR9@JdTlc zk@>9c$09TWN-C-kaeb%yOZ7!VLsb-AA&EI--g}-m!rOkerwFYql5(F!o*ZnAx^2za zCEw6kboB5T8_+>2iR*I}24}xrOj4(6>oO}C)6OIfFMYenYT(y1+gHGpT&rdnRC|xT z>T0!WoLgD1d@*kgdQtk4Xta`<+k@#iBFUj}Yc|?!-h$jKJZo>rDE3V&we1G;6ptPD zGI&_5;`k^4Dh2b2@i80VGU%sr)kEua|36!Iw+@vFnA{Gb@FLyWX`8@4iJ~v}BpQU^L zZi#)%&L3#IBBdE#)@?OXIxqJIAs1Vq)r3>{leTWSEv%1MCh=P+$?U{kLZNpGth^Tp zBP^dEU$4rBb%X)Q#HRHrdmq3$njM?$!ymLbG)p)+)tmYT5SGwTuzmiY1ImH}S{o@Y z6s9Tce{&rwO@EGTct!yAYiX+VFb7OE8e28KoUxxP-?F5FmtVFtc2OjU2_|2|kessp zvapk#?{Qg3@VaKK@pA+s46e;h!J7O*s~=9ah%OZ(%O6t27&|CH1ZbR^`n6iu(x7$o zh=<2wtO7Ip3}esKtFIMruxUKrajALy5h5L@!)&dsw(qp|+1sE?*!lp_8TlJSI9fYTy9zRq6Y*{;U*6t`RdsVAbY$A8F+|M@T!iwUTT zw@*@y&bfY$2QC*jUllV>faQHgxt1S47=fzL5r6KAXMesuCkg7PE#*W$PUKqg_9O%_4hTx@WW90>y3vcZ{A*(SLuyG$N$(4&ssdp3 z62FqV^z#06UY*}gxWOD~6KExwD{k-+XgtD2sgZk&2+TiHDE6b6SGkW9HQGksUSI0V zjLOQQKXVtO>A0>e_R>-SQF_66?Mg@E3km`h1tumWmMJf>cyBlL@oH(~F~VMNyFl3& zci!=)UlT28G(%g%3&h`a?qgxYa|v)nttJ#W$fP*P3Y+e$2R}r;f%G)$YGOzZQKR1P z=Qia{i|-G9DB3R61Z6&SUOkNmfYMr^?(J?*5vrPiMimm=Kiw z27%BjH*R}lgP+8rtT^}ypHdr-#oy#Awd+|ERasnsl>D5hm};)j zp+<~R|7+m!@z#C1cc~h>e;A)*=Sta@fXxVpfRIp5VIf{mPmfur9^rqbd#+o4r{)NG zD?2+GHMQ8q3yK2wUgS00pw;U9cPXLSp|*mBbw}wdfW~%qo_EYA#}7bZwumDy>RU$I z_+Ut~vJq-0%Uj#2ip?l=b~qI)$2LNxSiZ#3@A!RzHl~ZJ2E{u zs8)8%WPh{Gu~tvm?^O8IPeP1Fc{<)%s_5uF08?T z_o;g3*LP?1%)6z0$&{G}Z?&0L>pWgSUVEG>Ar`a2YO#|vi&A^?l`{pWW^0}EGxCm3 z_B0{NaDKt~fbnMeCtnnzq*f8bZ*AI8TDP>wPmBz7o6b(^1% zg80ZL(C4#lvVwj%*x9wgQg=N5wGv~BVgEyPjj@7H4H+Hhd1e8fO?~4VJ_?ZAYnXk= z8;nc2{C(%68;EPI4blu*=-&WB3MdYK__t{P!I0;D2wq4lNcX|BOFZMY8hc(1!Hyh7 zpcM`c#hp(s>{u2&z0EDojLogfLB^i+kS}>ij3!Ewj2#4TtoxVWacY&_C+Zu}Z}My4 zVhN8`4$1BLVbpZwvSDhp)v`?fIMH8%pMwAm1pHxmogg1ywm%D?Tvs0`0%2Tk*jCO#;0H#th_F~1{8jPLq7=%ldenEmXa zGnR#5%M9E5#-4j+%W1@!U(<%OPhHFCK8BgSi9AB~;cIjAHWhKGh;U1w4H`F!~ClDw6T4bUj9 zTBlrb&i;{+V34Q#ev`x2#Ka>*`zX$N69?8uj_=B{?dA`zWUq-|?9g7kgu>Fd zvtMX%*0n8`+RmqJlMv{6mQS%}V%xPbRqH&~=4$b$ks&t)v@g+s%>hWf%HIXQX3*E*xS>DB7Lx=qe;0|n`@}+B~)*x zJ)Oh;y66NnyU3=t@ax>?*Vy+Gb{2_WOMjc5jsTws6io1GE50Y&k6k(($bD=xP**mA z{>*CL_Kyw4Hm0@LpqC%v#o54>aNC)wEZUPRQA$=8JG=jVj_)-P;J`x}VJM0@R^^xm zF{Bliu~-=2f>W)F$;;+u$w^1sFW7oQx9sihg8`179_`_Yn+RfRsFO-b0Vv3tv#caW zF?Y_^8Q+6vpqzHxDD`+jdD4JTp#@a|cr0RRVxP@mRZc~ucd#2?S` z^xF%{2E`frYf>@)1SF7zWzPlO(C5J~w73nTaIKzw`+6Ccy#i;th%>W8*NgpczT&hA zoVr-0qc&reMwn{&8fJMq9ht)MwW_AtBl*a~2(Pw0r^6LNzdo$+QaGhh5JTalKso!V zrs;jK$;r+os#UMyNi-!a$PzD4?zO4#e0(u|kWDDRtp8EfUHbj|>gu*&X~W9kRT$K` zB#|=pzm$VXhZ^IyuvOhgkw5g1UzdMpMEx*brX7%zZYpoaSFI2|K9G`Th(~8@i(cGic`iMpw=}2 ztC|3!U~87l6?plaQfs=B@7Qp*t6sQk0N5hGu7HO1#?n)B=Z{dL69E=~sG0F%=Pr%u z{AXl(x|k`pvmVpCGXAZ4W95O6ZWM1gM_rJ&voBlQ1Sb`tu1>;T-d$EwAdQWiI@-NV z*RDMFT*p^k-|fGm(asPNsjiK{DEwq^hNeb%r^d}>+x&BPnEBD}qNj$4kFax2M=Ehe zxH{Rn2z>1Sl{8j<2rvqYQf@7|pJGNL!@HG^W?9;F{z($O(*2H5d%f%Hcuca`Hn~r3 z8c&vb(H@Ud{q>pN&C_tls*7nHeG%f};9ghoJaRN&V-_qnk6Bd2ot9Id+=32&E9 zcfof0{P~5Qh-=vRR1-;b?dXl;X?vmGjC*UA#g%$vBA$;EIG&s0(8*m34hcc(&|26; zXxPrwlc%Sr-zmQhHW9J36ftfPkNf6S3f0Or9E>t>8e=$7{v$B8J$&OSdm(9+qU1?@ z^GFAAiq1{QIYe?C%9|M*Us6+3Gt(s{`$HuNq`;E6cQBRWZfnXYZ~{95$#Ai6eUn$Kp+^>l{6cS%w?Y|3e{g*Us-96^81y8i1M?XhyY$K z{e4Gxvwp7^K})J`xzm)fz5D}~XNp1{SY;3PX)iRLW6HC0vUAD`=Z@b+CEyz+;AQ6`DLJU{o7&grj@#U$g>3w>7S zrXCkOx$zJLlS2+;X@=+k7Rv3lyAWjfWWa=`^}$j_#%Y-1&yfl8_$#J#YTv56t(`MZ z4l;?0jKd;@UgdL&WaJ`#Bu-ztsAjod)hiSm{2~DHiy5!A;xH;|KH0EtH6GEI&GK1y zaQ{%}yl4-x$dM5Z}jr5eh}7Xio<>}=L;X>f{Hi{DXu7yZ9XRd7f{ zPzUudkM+Mk6kt6Sr#0_vpRMHU%V2w306y^#ljaaqcs^i;K(LxJ71LdjuuA z-YmFn}{@k0y{bQrHpl7o#iNqE%Q3~0A0ihW| zdBbN_E%SjeRq*Uq2k`xU?+711UHY$c5UR>XFBd)GBnzh}3m-OkcUuZ|5|C2*PZ`1G zkl+pfb9(PQBoJD#gmCY^t*o1voQ&=<&p#ohQmfcCB7B>4R;vcP8(i`8RMHshlgzh_ zRuBE~6H1q+yT5cxsjC+ObAA{vG3V9VA;`1jB%%iq5{6h~=VZ4Eb^~>FvE!dPD0q-^ z3U)E5v1U!O_pV}~cSO;KbS(65wHcQO5H2E&eDhgxeZ&o(A#FOlIyT%)pclVo?2LZb z&D97A6&B@;p{-0&cS1Boqoh2E3>H$yR$h0@YlJcz}URz3P>Cqju$uKrdEL2!0=@+QhQyZDoy0s{QW~ zCte*MtHTr_F|gnV3OP&OuxR%hh#@ zH9prz3*G7NzIg~xJ)c9z@jfAj=trgxGX);sT!DHEK%vV^kR~dz%B>#d#xVuX&Kq8ZQ#-k6PL5D zKccQazaH_>Zjy|wdZ-`DC(1d3Y~JmJnx|dWZtMd4?cB#TA3ogliZ~U^8LsEny=6Rd z8(hmy?`lAjhQq2|Pg0^Xl{1_AxWjfwSU9NnPN+qkFk)k4L!}vx)A+-;QfE)|&Ku25 zE{SIt?a~%AFZ>7MAK)=hIQoM(oj~=m@3`gU5h%9}G?}0AbPY z-0(rLx9(%)E|Op`1e z0vU(ayIJI-la7T&KK+~7Euo=66rMboa>mjw?$Rx8yyGpT!P32$Ky;w#zpr_`1;LD^ zcy0Evx^359!h{2kqS>t)-^fx?pJ|JOBQZAy37e?y4UL@E8h@qTu`3+h-FAjdp3ac3 z*nmC}*^*G~Be3DcG{+x6>R8x5`Fa-!wI}K7_IxX5rcvL{L2(>WY>!^~QHu@f!$AQ% zWCEubx)S3xPt5ZUiSy@@i>tbXI*nDSwnE;je!o@i;TFDq%LIFA(6g6n58X$?2kW^A2u{ zTx;8EA!}Im?3)fm^asR((hv6-{aeNwEyHg!OE0@^XcWX{``n%|wa)M|(Xd<8QG`sT zWDH}gz{9gAubI`CkutY(|Q}(mQ^lqe227OarDHEt(;uA1$q| z13;AsIfWBr|D<*BO^PTB!VQqO3p=+*_1*muT|9BoyLVB7o$o|QvJ9m4zEkHbC5Z+1>Cixgu*s-89f2Yz z>b8ELIaboafx9|yJ)o}ZoAnETqw%5>#dRgt2w$uQ+)of=m*D^wG@*v`*u`*+VRfyxCd zY6ltawZVo>sNQKdB&LbN2Ihq6*f56|@a~4=|BR$1{Fn?ZJ?*BIWr+T4A#pMu(8m-j z2RiLPs%%ICbN>E7qvA*TgTVI^E=>HCyT)sb+re%fD>wQ1^XGj53QkY^G|p~XVaLy9 z_fL%uM--xQ0_MhIA`KD^%iOYu_H$Ja$2!D=C++KccFgQQCL8yd@_jPMkT+ZuB@0*A zBhz9rgnoY5Oyu{1-=cSDS~!nkaRC*F%x+#S9(Y40qq0@b!}P;Nvh+!5`2K?=U7Z>F zSdqv(HX}c2O~9cneNpL4Wy^0vN9;IsSk@oKDCco;cJLfR7qU5DtVw55sYkA`30^9} zvW=34H5>mn)`3m#8sJhp&KB$aVkWs3xT0Xq7K$6Y)#`mJ|2#MM&Q4hH`{j4+GsfP# zMG7w=nepu#=;o}#6CBbuHa05AGB9Z_PWvuge0VJ!@JE!M<}A=5`2=mpp4_P+EV{m( z%k6tbx5oaCOW2xBn?;?gtLqALtgV*b=6NQR6Lww|lKl+Bay8;Kg@g3FuDFn8aU4=x zg?1xr4ZZp zZa3maN0;gy!GRrJjQ^cDYs}ug_8OHoLkT?8X17kPo4;4BNmiOT1Jur1?j=clHY1Ym z1=A&w8$g0$Xk+HfzS4=?XQv< zfsT{lml+=jRMFMleL4QIB9gn#Jn*tx-)bFyc#)2eP30XXc7OA6#LM(H%2_O}cu)3Q zG>VmiB=dvMje{)OyR`o4FTedb-q7r`kr`TRS*2}twmtZ$l?9BmWv~|rKsMzzGrQZF zF%1$^wfBL2>&4-N7Cu&p7?Px@-#j;tAap3XiI0V+fm?_BeD{ak#$0n?@UP9=&jZNl=m_JHBE|h=o9E|Xq!Um9(k!j->@c z<^whchsxpyy^X# zR(VH4p$S2lFbiNWs8;7ETOEIhafH&?dA1H5sbxw89aY7DFloq&&$k32q6CYS^qn^u?N-OxELWr==-0m%6#Ep6%8MKtvvekgxmg#@37Xx1f?$MaB1C$`g6F>m@W zagqj&Ype|Y?Ceb4;cXAgapL7IlJfrPpjZ?qcl=syH@W?5PL4=(p)2AY9`s3ec-Uk!(dt3P4i04CD*}{RZl`Hj5hAh67m$fD*CV2eMPZ9Ry z1%iK$CX5&dgU9>#dVRx#uxxNJGzG4Kl?2~U>;J*D>2KT^B={H8rY!@eJ^h@{pHuH6 zah=-+f|UUJj~0jdigD2FJA2oi{}0O!vd~r>ysh(xW(xo>*Q&)DwXL570u^|xMgHF7 z(Z7s*Ff^OhW39O6wv)?ODmK23)O8Fj_Mj2gKRhn!AzWx3U0qJuCrbI#Nr|S_?fksF zFCiDB(dO(>{6_@&Z%}LkU$65wB9kD9d^c}_?|IsNwpho<*4H}k5B2>otnvTx(9$p| z6=P<)MZqcE5c|*d!SnL+%4;x!RJ+zE7dEF_Dh$cbmx;t)fG_~QUGL4&D{gh9jMsY?oz#L^>`_`?=_WYQCgbFI);N!Mr5Yd^SwRuFHlePy(QgHq2!=y+uq_3oiWY^R@KGA70TxqLwFUBg{nYDNC^M=?*g z6{;WH5RK}Ao_{^_@YN=yA(v5^+dJw) zX#UL*ziHgunR4zka&iJ;`;PP^W0-NqjsEE9=z!%9L9O%k9s$jC!1jV*I4KKAZ`8ft zH_y+vE@%Si0R5~UKme=ooDhNd-Y-jAJnp6XA4GX2&*6=XinL&A(CAvay$a+5(v@x{ zBI(nW`raSIk-3(p+1F5BY+am5oC%++8g|t*G*ELlomR}eg#`yXh9Trz6T-ArNH`1{ zsbJ?Z38f(r*;Q5Q5>I1muYYu$za*{l1>6eChv+-Fi?3NSSjXOmJjfDLE(oBT+g(Hk z2TJ#d2Y1^yum?qiLhi_MIo*9^-Ep8IZyKfX~gA#?m9GUw_ z#MoTbTEr*<;?+fRTa_A+ZlUz6)8m@PtW;x^1Fp@F8WSlfV3WG_mF#PSzQfGxo`2P} zmzS}-tjA!vfIDjP(H*wQs=k<17O~%6>a4(*r&Exo>hJGIM+21S+0~|S>u~mUoAIXs zP$*n`2G}4RnbH33+mo3KpkOI+-tRd>RbeT|m>&b-w zdBpXS3E=a=O)N=ub$kLSps!L&n1DAYEimj2r9#rS%38hWwu8t{r6&>!6GKZcnvn~z&C z8Us2;_N@r7&qYHwLF#bh?A~xwJ_)r03ATbmili+iatT@O#;@GK78U?eMUWjN6U?Uk zPBwyNyaa`8t6uc!PV*osE18ta50AD%;Q;#l5`lnL1vz6DNMXW62rTe`=;*7h-`}f? zo!T3Vb~~lwJ!QQ1oPSKv!FCJpMWvk%PwoJR8zDKf@>2{UE(ND3IuS z&PQ32bWc5nk|rTo%>>QaXJcbytkNRN?)c?>w9Mn7eEC(o%)cP=MaKf$_%{ZM2;<-D z_|?xT`9Va^Z9``g^WgVyw=@ywydTFMdDlBSI?A0EyAZ7Md&kP~ zqt#6VQWt#5Z^ReP?UxbedO0Fc&$PMpp{vGdHIRHen1S456ymj&0 zLoC>FJ%csuU%XmcMc|9c4S!*(k<38>MNp@MQIr}r3U=(qS0(_0O%+_1NrCYOXak1? zbXy{5Uc%Wv0L)Q2;Lnc0#Fu?Fn`Sc;mtjzB+YT5jId4cMJB!bF51>anoMVT=T@c`^ zATqG>Tq~X^fyThU$kgKC(6P;Mt9|u87}gLzwr5@DpvoKp(_ntOcy2bR)Wof<{)UW- z|Hx)7Br`l4^a)=0wHfoCHP)6i9)1rGKAmdv_t&q3*aAh~`HttZz{P5Wx~E`GY0yWn zeT3W3Z}hT8NSdQD#Rl!G5f4$4M&%SqqKFHOGUmVGIC?QEk`A|dy1U{*wHNaP};)o&A?PPZ6j07KR ze#ZlU?N+%KJ`9~)do7&c`FH9Mh}>a_{~ zN(jJQH`V4!GjeUQKFhyawCi!mRs*)Kawa-YYJ_GWB+$qzy)KssL0PA#h|p2u-hPPJ zJ>&>PL#xiMcmcB$f}8R|~!P@$PySoq!5y^AiP%3x? zWiu##m@<%5xUj`ueJ=R{YwmKFpo@0T=#78~KN!dyy{wdeSKU!bO%m7>7)5v;z((bPy)QxD@GCWc#V7m!W9rA(9P{Eu<4b zGI;MnVir7mpz(gN^PvwYahml-mDVBg@uaCDys4^*0n-As3z4FmpHYXNJqlw)i8r<& zF!gwq1JZKffV7g>=6v40aLzoTYJ^E4v=>Gi?=Yy;=SXZd!Z*A8l#5^Rf~o z&8aglPM3k)!%n5%=kw&(R3U*;N!T1z`#$3txtjW(n5g-RZI~CUHS_@M0TsHb*8GOk zQRaWsaE(G^F)ZRXqFiJhv#W!_58t1$oitlDOOM|$fY(k`lQMZ}qpuJYyPQtULk3}4FX3e$@-B z(rxRK9W1%w#Y|^VP!xAX!93VUatRN&&}B}6t7oU|@L+4UbYrGrk~o7~psib~_;y3y z^!rB|PDy4TZvW88`z-CL#YPJm8xGt%UK|QMH-~znu(7c@Me&Q$V8lyR)MNV{J%NVO zdRIv8`fj2&Ds|l6E1yi}CB$5#U9A%*Rd~Rip!8Q@eQV*=+d+@>K;M@uzn`m3T5GVx z|Dx1qksa&$g7so*d~Fl8ZnbSe$^d)t_-U$dD@vP8uIXxfZi$9Qd4jqxz^e4cVTVL7 zG8Gtia-^pNQNPC+8_HousIp@3`EjtoF%5jf(qij!Dw|L<579>7EsNA(+TErOevq>Q zIapmYhZ)&+wM1WWq3cS&e}e@_4FgBbE)5fq4McScCR)8?5F;0>(7{^>_cOE-DdXP` zXnvP-=I86{3#_o_Ly{R5;bOHKR4rm0x_Ei|MC3fA-m7O{%yJn97n^8!;jD(}Lk2Jm zh6PCP2!N60^~IR?blpOt@Y5w@*-hKY>f-OcrgzgHdV711Yq*_~do1}zx@m&bR{Rpf znOTzys;&F1uh3F&dLd=xHf2iszs*a1EFokhx?`e&(xjw z06ijxmw~WAH;zB^`8)isvg>TV*g8=NBY8f*a%edpllc*m=1f&?0nO~6n9$jw$tB9& zEvVvW4xmfxpPbYkRvgz*vp~)Kbz+z7!nUZ8bzM5Mg0_fFMDqpE^IkR4nCIIn=cr!x zOyiT1B1nMtNnH4-pAw$=wef;RHzf^K0+J$$z8T2~#Notfqq$?w6E-+002PKA+2(8a zmF5q$L_{`2Wn&n95sC?BhdzyA4<%^3P$uasQUJ_fqi8T>Ky84dt z#V=)2Pf{}*vHD#(=2)h5s%Ba?jfh+C{!sC`VA@PDI9i9|k3Ot>IfM9!Qctgo$|t++ z9r=KQ*ZSkfKaE%d>GpM2C_nv@kk{{sOItsP(I7gX?#`hMjxJPm@bW%A#?D`w{gj$)6PNHy~B&%9Z@DW8#UBA6Cke3@xaD zi3!!?+02}ux9WWk9WY$XQ{jjae>2odxdV#h_EM_D_uNGN2No7A@a63P&eq8H6{28b zrv;i`tXnhj>02=q5Gqg!FsI#wa0BRI@quV=@=1o?oEV0elNIvbr`l%=0;B+jT9#)8 zOHjml$qbd%W$`VR#odpA!EGae5b6mWnVILm z^06>)A^DUt#R=g1%g^w#)=_@?{)QP_W_7h7PQVKoiLyqjslkI(}dYy7?{yf!7TtcRV1|wvjTQkuLGvjkam;`V8D%q2cWJ zWH1j53tmW|A%#EH)m8n4&Wgks8!Qq>uW3qQF!0cP*|+%Q%+H@>tMOlCLY`TVzXP>EBAcCf$U%C|J~Bcw)m#D zr(xszk<*t(HujuTccEGSj@CqW6_P5rmw`=+Imh*E)>XdbH4^`w`R>K3k}2)!(pNVO zeEL;H%(g5@6Be(WfRK&ysG=)={8*G@yr#o*lVjzGQ@1)!Z|l&(v;_IaQP}pR$r|V* z!D4m>kX?0Am!EHQ%HTc&8sCnHknHGWd6kue+w_naohNVnwnOTV%1_0o1X;v)$QP7F zA-^w51jI9dydE4(pR8aFgCV2-y6QJaK5D5O!@MJ_p@!AO;>#luG$zfo)OaseTKLC8 z+itV5Q^lUeSND(|9W6U%e9+7NDl5!1#Ah$g5B6HN`I6Q$Kz8;;4CCCjo6=sey^%2N z%dA;TP!%th%X+=hoG;6pVbH^xFQ&u^Q>>m~zx|)hP0+gP<`12Eub%&UnR8$;~ zN1m|0aumjgNrvxVuD}o=)OgtT^+0e?cTU+nF^A+sbwYYr_Wc+}oB+d>*xojusT0kDAIC0a;7=!B8! z(@ggnJRTo@DY(JCQtI%b&fE({%vrH`iBWINBp3K+#8t{|%iURlk8$yaXNGZ4=yg{B znh?SsBgm9@?|^Q+*wWJgbL@S98UT4!waC{|G?RW@qi?`KQhTt!LoI|Mf8!r=GUQt)d_d?w0ii|m#Ard)$UAml zCI42&`k+xw8IFgollalS;nDN&4ttg(57VwT;yd3{s~TLuVs>o+qjxT1&EmRX*Ua2p zgd`#A0p*xBC>ae6h_E@H9IAF-li=TB)jBb{zcBiv_Yh?98B=+1vr351u4S8mR z(V&=*{lUQdWiD5e0Mx;@-zf<(VHeFeZF6aTBbm)sm z1*c=Fm~wBD^U*tE@ekD3KLX%^tA%QFE13HnVPuO2a{>!3+^(OBd5O+9fVsSstxNNK zH&{chLwk*SYf`m9nIxqfW9h_~K@vPL|V2NsE()kyB(B*R%mf?D`gm$3ysils)GT=giTYjf)$OqamR84nk;3s{UiO zA>s>6`jyJ#{cVMVl$Y%pKPq*;clP(`DO*ViLtIT z71x4)C-o-EQ>`{zP*5<49Ocb0Hyrhi_^rlNv^=N)nqt;jNO^Yc(@iM2U*Vm-P$0K- z2HlU1<;zPz1kS|k;PoWKPv7FzKF=1vRUN`n##d%VxD4L}QY~7_$|r}oOuS;RhjAO4PfLhB5WlkVw$^Yy2AON<8WNyl?uqV zC=ei<3%~%l=j^V@^6=g-u3o}=#X0)WipT^CLVOKCj&k>TpcCvxlDn&JTiJq9n4WM$ zBC=tJX7cRo=U-H_j@%jzF>?C>t4td3kx#A{`wZVb3lPeXd-k zl{G&Sc~Lm`VplRM?~2`~Thz(-Mq>13B8IQbbeb}WYX!*gp!z4SgZZSv!5I64?LK%h zVM5IM)y!D1H4M;i-j{!w0)0(^I}257%zls%mAqd17bTCj*tRLNrHzSJ>nih^y!d`R z%2F&+{lPl)DDeTzqDraVOK=eeQZn2ml{Yfau88J!FHfnYIQcB?^t|1Kq$MX! zrC6OEtd-49C8aqoXPi6yTvw^7PFh*{|4tbGXD#`^rA6%ezs+w(1P{Xe)sgk}^-rai zXT!|-_~SK&*xH6HH9Ii<0e8}S;*K105#>XxZTopzIq`D2J&~^j&xN6gycBBHKp48% z_Fb@943t--Hd#qp)3fcF=$nQ9&$!(!jes$O1jBI5cO!d%^@TC98`jsQ+nh_M+}eYU zDVwqGHU?76^V-K$;v?LJ0Gfkw2conPf*_^ly%voz>%MNu`;JGftU%}$_p=Ijsdw{?}=9K7?p<4n^tA||pNK1OrkF02|Xht37{8DDUM)jE$CvZ^;3oP z144-tkWy#_R+(vBSpOmv1W4P~JcPbIa*G5(j#}zxDDtwkEe;VF@VU$tFb*;6?&^#w zM9%)7$N}!#R`AZ=3c4)7XDlmt>|Q21NHax>uWmlw_T|c2WH9^s$E`&O)9oJs^uV?j zsv)=QFr1Xwv_z6tnHp2-C!)i1C-jP~7q@ramIx3Ev7ly7fHp4g^fAEN#}|=J!v8tX zuQ4+0`L79%@3R~EbnoH@SB@jYe0*FS$FUB`xL4zCrDGw_GUpXmaO^i{hK1$Au&weA z>4(G-1`r@BF>`kE!}*0WlgaOMz53(oodCdDA5%@JKhoEW#2E-UZo8YDZOZwuum|SpPx~xw(Ux7H95;?x|DGQDB{f=Rf??uQ!c<$^w-g7<(*r~uv|NPP0pk?6ZccJO2VjuU*iyF&& z_QB#W?8Xm8W}j&5q1eGM2p$mGbm>3)`forozz$B$qytk6ygm(pIQaHd86gSDE^Q<8 zeFz%mV8D8gvLblz&j?VR+dwcyCA9%_`_BhL0#H0qk6?a4-!UPZ+%~h=Sr@7M`;f}d zm`|t76F5p#Q|h3CRW*5>d4G&~b@A;x@k-Bua3D$F6hXcU#3T|S3Q}cdu16v4<0hYe zkl`C2*8is1ghw&)YkwU54&OmmbnbcmydE6_q{1VH7Ap7Z;m?Kc5_m$;10uDzP`nE` zcynZ<&eE(7PA6cFaZpSX8oT`dH3&u>rV4}-+$(P(kDL>_9|RE6{b`0`dbI;}hI+;- zjYT~{FlMEf27G|+c8#$CgM|~oZWpL!`8du*)cGw7aoix1Y%gH$yKdL*el_>dUAU;A z4HN&tR+=3>-w&rK;r&)ixfjQ*4D;B9t7^}eg@#`CqlE(p%PWk`AHY}mD~0^oTUSjA^R)2H=>~Kk{Y1^ zuhz(C2H;gLgmC|2rz#DEvxpP$wE*yG+FF_J9v;4v|0a6^je{OAK+;DUll}h@$4{@k zz~OL0(*g1sF_6+CxX^X~uW_$9JFO1l1!T4~ggt&9zO{dC=C)&{7gJDqNd)pOsn-bv zvRt4_xge4e>;+uC{@ENH#f(4NC5jw;eZMB%wp}0YP*=Z~m?&fRrnc-p+;RC%9A;iY zh{7UMDoz9+E$3Z}^`O>AyDb3@*^RpAsqBob_lO#xB6@HnGywBdOg+6B8J<5ic2*ac zKoA$eUxEi~!D{iY^*xwgFwtSNid+oYz`;7hqGP&o=#~yJ?C5{KU%#qVQhR^m(V5lj zv}YLWIbi9dN=0iG6IqTt1uW3;`BQy9YVPg1Eu2P}HNbW?&st$5D6Xk|;_|}H><#w` z^Ua}ZT)`!})8Jr`uKCiH7y=Bsexbidcew(f4Qk572MIJFAzHH z|A?ez)2yX(ijG0=1=>t2hQGHP?`*(uesrmh%iGKA>$ec2tc^})xpJY6obTCL$qyC} zgzAB0v&uv{4k>jIiNUwOxeh5=rP9s%4VIxe{9azWMq1ffT4Div+jnFA6>_QRE}1M0 zg*_jbQzpvmI82OsXl?t{xp0ZIHPSqP6wg+@diAO>m4TzHtLuxqf`gme^pNj%GpkMt z%lfH1uMx6LO?e4gtKxS9U$L7HVq0m&YBzsq(>;3ap&`tkA8WZDS1KIphgnImM)Y4LRZDz_`~QIlekA<{G(rJqqf7t7fQUxI8i`WmkIb9M{_iH9hUk za9gY?NxPwPp<^kD(9a~F!E^}0%g49#G&x~%YRCLplUkSGP`k!Y)VZclzBRuBh=5?#=rx_s9z==j9F> z8jd@AVj!DN0#HleXeb znUk+BFsMtO4%w2yRnu4efpxFvXuggsmUDA;9n?T9EG|Cay{yCK5+dbv{bXln=k_|T zzTW!*O0K_RvgZm@lP00m$KQYLhRb?ve}r-UxSoPOzbN||>E`b_LXW4$F0InbJ}xID zjsKR4^~l^@ULGfeK1u4D4&Jd!jeKR+w)e55gmtjq%B0J+%q)wi6@RND29W)WN+!;d zsV$Z^VFNE_EhZHS2?-PNl<$hpI;OBhUf#GS_Qu@CES8|_;? zFMe}CNk!#v%3;!+KZpSleku#*u&_zyQZ<8iC(O;|w0{RlSiT3gfy|*f!TjWQOWz#VsAs0W|MU%&hLmHuDlOzH+Zg3aCcrJ{dgVE*E7!68Y3cjOb`SDiCCDU?EqT^ z$l1gEfWB8Asc(; z-S|Wotr-8wMhg#PK^a5T!NZEtFc|Ey7veGq0wNHJoUTt+1$IheagRy*R)-bQ?7->m zB716dE1oOOlaFt|pPYulVx1ES+Kazj*@0r<7~t}tbBX{rZHKHc&s!61wo(~omr*quY(jKZ{ zv@%+onm`eIyH4o_=(nHC5ab`@CN?%no8%!x!0xYrEW;4(m0#N%3!-u8TlB*4D@9ZrCrD)XDn%+4=eAU5(y{cxhW`dyNh+Hy4>iqfG%pJ;ZazIr~d+>O)nV zXSI7^5QD++^6}~AYG(A}Jv{j0(D}JYZr{X&JQxffWV6Z7d6F&Iysv9|l9G}jkkn}$ z8V>Eb=Z&zc%ucn16LNf{%_i2iwu0(IHaezPYZ?A@6*`^1Jjr`VZX|#cq!!{YV&=Qj z4q~Ni@oXJ^1%j|4YsXD77H?d&d4nZY_cprDnW1JQ+OB2jaM z%{DpQ4D?Ap3vM~o2AsSdgq3(|YHIM#W)X3K&1Ro`YN_AvI>r&&5ah)>)%A7%GXJ=a|AD7EL9*K(F zT40ym43Xzjgrpz|W*b2@myw)_cklEKgI7T;ui>G6dS<35IOf1E!~fhO`tOGR#y0bi1*+tMsavg@M>b)>lRw6rGZnC8co~}}Q z^L>O~+|gzxlh%6fA3-@EfB&)u=K&^DPs_IT%w;?C-ipC5UlJ%3z8E(xP0hD^D?IK$ z!M|4Vtndn#x*!oyc}2xc=ri~`*7!ILNQLyH>A#KwZ$5txBgr}`W=1pe?24c=Fc>uS zef>h_QtnTu5S0jKn|r^ORfxltmRV*Pz<|} z#Zglogu+=oD==Fr)xw#7q+h~RmH?&RE#GJ^#p}VUiPKjyv@E#deHdl=gs{*}E2*fX z&8z*23iEDh8GSZW64>EJ`12sg-~~#!QlGkt`YYe7zxbpy5f}X$jT%MvPSRCbSyC-a z?%qMm)cnVDa~|ACl17E`_V(*G_ce&3NwV*ypOEKC{Pq$LkOKdq!j#f3Z;zzorAxcF zDym$r8u%73{P-<=Xfi2gL%QuyK zT+ctG24v7IeAogPJ=>YnU~GO$xw%(ppN5RwURPc*kh`NSL5J)^l{5QNoNN5X;!oRs zvsW{fzZj84wtRBkI!At;gE^5*?aTOF8%zypanjh2?#4^=cXV{9X+DYq@Eqs|IMvQ> zPvA;;cz81`slDBFyguaIiX$*}J3Bk;VlmcPdWx^@*6hAw&VhONc}*Q1{2vypvc+dQ zc6SZ6pEC3A)tcJ7607sYOMnFmE)JVc@?R3<=QS#KezZ;qLB# zbSBEZa$IMxuWPqV-)Tm=+%R9AX^*d97O7GS8IdL8NIuV{E<)mwrP=ZYU~Yl!L(rC~ zBeJ4ncjo5Q3nCImG<&j6-;@}I$zL1+ z;!8hz(BE&p$Y-&yYiLNz%gcLMRELvu7x3FUob$3pwFm&4x-^6MO@ZEY+`p961L7yAPIuv|lEAm^e~5Bdn%;*+MA!aM zsYolFoKfnSPDxAz3kwU6YPWw~Gn^}ke`2Y!k)<(&Sli+_3yX+M0}jqui31DGBcKgo zg~DJk7J*5cnwpJ0NFnzzbD;uTQk2IZf-55yOI)*D*U6>_^gJ?>*|(b&#x>m*EW7dvI9v$LFpvXT7cxN z^0?&AfKb&`Q(bDD_u%lsvHPJ3PcyK2i}^!RZ_6(T8yFZk-nfAT`rbOnIH94zh*0SS zfGhN;Z;ptpq#@kKJ%~Cf8oKxBNxPl5|LgqbM~OnvpB{##~6y3o`m#9ul-Kg%-)AH442PGDjp4 zf}Am-XNvi5h<%88ACvP7T4(Ja5T(BuwxqwB0R8;q)2H)iH*-ejqrXS1nDHy}i%)x# z{w%)&DVpuve%P%j!=*?z*WosU-3{bVMv3%^@u$nt6vZSAe56xv6O2eJE1}=wJ=uLj zL#b%xBw%dLvo0Zl#vLNBlL;2_RkA*Fq3O4QoUZf2qH*_Zv^-rj|kmCiSJ z_{u8_j1%QEXeR7PkO}khyMcj6)uf+4qsBJXt@}~l-U{#Dz2gMlmd?w|`y6?q#`VK1 zfA`#V$Q!wp(1*4cyV*d}}p)b+X0eD#SM+fDiP% z=^)_^xjVPSjf?f+15_d%`!UR>Uw!6IOP8z)8O^;L*UB0F@+I@iVZBJ3^RdaY%;Rcp z35OB7^qrr(24#kZhN=|I!otGC$2m`)v;)`Q$7auu#nz2f3{nY3A{|=Ea}i9rnAq6z zRy{B9kjb}_Sco7GO*O;jR1Z#DnT*CBihcrp+dk*y6uRBbDdoMd5L5WU)o;5EryX>* zenHo{!K}!H)>r0~+Qa(ELv)Y4*6MxQb%y*KxB7gI&f3`13q3YviRDF7lZV01qp!kh zckef)UDn99a&gJ7CWkx=v{cJ5n|vK@{^_Z~6{X^P-3dt&nLQV;UY$A(lY=MLxYqv; z;LG&NvT1ZrQ|Gw28DN5)CFQ-+)N==t)9#;3Fb(I38iNBg%ZT0e>$L@GUu#oWc*t(m z%Hc}dii6(&NPxB!O2PuPk6ZfHer@BX{bOv=vLGwk7=^M`$#Q}tnj?q_USrdIoKdmU z5J7tgPp6;wEDKk*SJUKy$HRY&Gw(RQNDk5SU@gTR8N@d?H?MOB;izX0cC5~s>r1O< zMPiQ#pLM`vV`C&UB*`8JJ?2&a9rk{w+jDn1d8~QH@bu z?bBQuDH=`GC0FoXa9UY~(%(ve@DlI36dVx)%(@9q?CNqEn zP|ZlXtPudOT0&}gw_bh~qT6BftFXxhMuq~VclkAe91;@ZI`-r>)heo1}+7D)EiNBoDtkW#_Q&L=N%H4yCfS*5y1_pwTMvg@ zNn#Qz1*to~l!Rx5{|7mgIaE0!E!6~#liFeCWn+q;JKWNVdUD|*gTb&mTzP>FPE`8H zJv=`Cw$!e`h+1cOsa={W{kV_acjoGH3*M z@S-3m;5Cs>2hai}|0W{#*ALIFtu1Z|>n-moe1&+buaA!p2!TNCBQjD32b}=yT3cIl z|E?Swa_*{+(bKFdFYk>q&hGWa;oeTM>Mfs?q^G3tz$H5cDlp>QMlZW{PNv(e`%)r@ zcErGf1rio6+`tWO%vu4F7Me)rcSQuY&pAsSn_&6Z=^hu=j#dSP3$b`JQWp@q=w_6J ziKTh-lrHGm^nd>Hr8eMOO`OO4{Cv?8QX)P1ibRF4G`iT4u(MXQlzfG$ymUkH>6S>8 z=sB7D?ngAR>_rX-_UB;pLGk8Vj&$LHjkU~ zDeBvIuL*^=p+!!ea2xtn`#0>o%G+`cO~IrM!Pb`{#>~MkzFA`X5{q_E=~SaktTruO zo1f6>jnnDV#`@^PHcwRNZJyeZGoubCcMEi7VRinZr7t^I3D>3}0WDs=y;njt-hi&?}G#o;;h4l9BWm{m4FMf$}qy{TS6xl;NIy$Hv%KK$W&#phX zh;<>+#EFY(WgdCEn!@{=O|aE;b`qx%c!{vPaS~!NLSze?MpiE_2H~`it7iBuGPc&l zCp}CrB>@Zom_x=C$E^pZ`AG8uPG(e4e&Nncw6cVN2S?n-;aIWCdn19fXU~F`=UoZw z&V+SGATfX*0Za95!WP+w544@;Iu!w!=-Qgr5S#6w3i&)bDzgPoDa=X_QvooduC9(1 z&lC|!TzkKjZrHy-@ku10?QLS?uxPx?#TvH<-K1? zUE|qyY_vg-&fCrt2&RQ7J>jEvRHN&R;5(_6OAAX&9o^k&45WR8qgfB{-4cvLqSi#@ zGfVfHIbL2~&d*;7Nc- z_{t8JcDMYkIS5xh3B$9Y1y92LK%WBNG{HClB zyp~j5J21`oI+vH58)1Yhk-sv2k@H0MpV(3{@a;C(5Db+z0sAiwXMrdGuQ}XNsG=qJ VirSyO3-q-hD+^mxrI}CCzW|{dUKs!Y diff --git a/doc/images/jkqtmathtext/jkqtmathtext_mathoperator_width_factor.png b/doc/images/jkqtmathtext/jkqtmathtext_mathoperator_width_factor.png index 4a24184794373416bc9dc3d7573639d02c8c10bc..0d41be2f3dd2627967dccd85e1ebf2b6ed41b337 100644 GIT binary patch literal 7533 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 D^|||i literal 7292 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 literal 0 HcmV?d00001 diff --git a/doc/images/jkqtmathtext/jkqtmathtext_matrix.png b/doc/images/jkqtmathtext/jkqtmathtext_matrix.png index b364c81f7b8a06b5a5c5b1052d488f921cef781a..2ca0df8e24a9c7f7402340d6180640aafae391d9 100644 GIT binary patch literal 3059 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 diff --git a/doc/images/jkqtmathtext/jkqtmathtext_pmatrix.png b/doc/images/jkqtmathtext/jkqtmathtext_pmatrix.png index 432d288ef4572267cd3c35e74424daf7020bb3c9..51a37eaab3325ac7779774d85e1805b059a114cd 100644 GIT binary patch delta 1718 zcmV;n21)sz4Y&;=}0(ZlMy~ghj8rPcXUsG0 zgTWx(y?fWzZe?YK{C+>p&CTujJ06d7-Cp%zVFLgGpvA>SDwoT2;=~C8P#vos+_`gy zLZJ|st?i617K>P2UA3Ljl}ZJdE?oiuOiWDdI44OG-&L;z3mfrxe;h=FXf%qxzCK*O zd>H_sXH_SHNTtv470s)Akh^J4V+S=L*{r2r!ghC+*f?(U3VHg-18iF7Q z7#kZyBoe{c*cb)}e+T(IuhZX?Cr=A~uwc}hamxJH$cXbinA_xM4!64qfduMBF zD|9ZGLm&{a?daysn+SzMSYBQR5g`(ZK+`mwJ$shV>pDDt{v7M;>xjqWJF*Q;({TU( zeN0bJH+>PkA`l25m&@53+6D3c{(ic4?V6=cB9W**s2H(We~kQoKdrB?b3H8T(WsAD zEY>kO_0_9aX<%T$*3NQ9m&;{*{rc51K36IgJb3V+`nRTOIDY&%lF1}QQN+D__nKPq zV_`!S#p-OXR4Rx@qsU}3$Y!&ya%$F>AP7)Zbw}7^{?(!LZO=@TE7pC;i3s~x@C`$EMy*tJ3?paz|A^`OA zScCo}rjuU`Owg9i_KI;H^GiT1=R;e{_F;KMI9{XO4LZ+e>U`2|}Szz`($OyU+prJ99cwXtrutZ&RR^6bc2dT^?JZ zM@L7I&*vQtZjPUVAmGZCD~{UN!@Ok4DwaB-1RNGt_BM&4e@Mw>($>~i=t7}D0O;e#kCt{!RP*{X zJLYDmrB-BfzwO>-SzTQv08}g%ZEZcP>qsOLp8xRLI+5DrZZ;LXz|*=808kVK*=)Aq zc}>%B{rYv!C_OiUn?$uvB_7eBn-o*~dV*#-b) ze=-^FatAJ<$H&J}EEXG9`?Kx#+U&$I49K#KPoF+xmKC^p2-d5wi^XC)Hfp`9>8q{hW0{Oqc6002 zExK^w0{3{_LN6^X(d6W0!}I1HYq#|re+=^v1wc1$+@N4E=t)ZFb{G8g>C?8=0cIS1 z!y?Oa+rMGy1lTt$yzdr74!&XO>FL4r^fVqldgLII?N1&)e28=B&T-WvGX8Ngz{QIf zv9hw_*s=Y_v17;hAAV!Z delta 1691 zcmV;M24wlT4W11liBL{Q4GJ0x0000DNk~Le0000}0000o2nGNE03aIY|B)dWe^5z8 zK~#90?OH)-6I&EL6KYWm4Vc=2rnWZIhBBqP5V|QS=^_<$Q*rA`Qa2G4bfX)=m74~v z8!Kd^t`vo;U?^3MiexfrX^bT? zL!l5jj{S znD|U$zJ2=^=gyt0DKM)@r_)$lTf^ncm+R`c6lc$##k+U!n7F255)t0Ne~+=Tv6=(3 zf|oB}g6DZmOia|(Zz;ycf5s4vM%l<_c_5KU5CB?RTVu)_nM{WI`uYd}0iYWQ(gh^m&+j#2-ICnK@cFzGIF_`G0`Xo zeEIT)0MNq1f?=-6<#Ocr`*-sj(ck%#1-hMbc`+CaHtYcZ`SWK2KwrOpHRKtJ`Sj^i z0zm8Q>lHcW1SsB(tw4YBDLnz`*Jo#EE!ndRs;UwIdiLy@e<9CsnXjy@puN2vZnwK4 zN0w#8__4f8!iT}Xj#EBDh?bEY&e}xXqsloF%|RZ(WABo)vRzjou;|J)ljn$hGKSfbYN?1t6s6} zYh<%o(}x99F|*mMtwA*_ve_&;IywwFO*=DRym(Ppe}7wBTeXY%`}c3qK6$rGKU{Mh zht18+y7?s{rkQD2HR|v0$Ii|UHa0fU+1Y7pfYo4jb`}6IH#b+;3jD8Mzp%5jgZ}=0 zL!RNx93CD9@b4qzet@QFkR++@O*Z}a>v~jzp_oHMLvT18NTpKtMOFhA78al=O5K}m zsZ;9nup!U%&^|IU zfoZcpN^T50OX&;c$4*y`G*Pf9C4A-tw57oZMqa&sUA;qc1KlVtjnu zoM=`pVQKa1rLJn)x}^vPgZrw|ZfmRe&!0c!^?K>`>(>=I)wXm?QK`~iZROq$yn6MD z1VLcpnl5ua`OnYKm%X3Q=keyv8;GKaGiT0NTR$ZzS7`?tw~GV7{QNxghR0Mjx_I#- ze?ETvSoU5%pU3j@a@l^iBuSQb-tXVPm%ZM|S7knZ`h*J?F0heVrmxv6g?igUUxs=c z!0NIreQTq*{edc9FVt=7sY8#oIF*#UMr8e!LMAbZi0<6ELo+io74H}KfojQZ`j6K| zy?5_k)%I%b0X=;9knY~S%j}O?%v35xaelv_+3-Pt-|r_`mYMm?m3Bc8(AL(5_4Rf3 zgww=ORTYO09fH^EWgf#3vDep<$s}AZ7rMH-stT}~psFe|nG6O82bsrM60-$kv>IwQ lq9vw{Xo+bfT4LIWe*kG@(SM?PsNMho002ovPDHLkV1m}$FRK6m diff --git a/doc/images/jkqtmathtext/jkqtmathtext_specialsubsuper.png b/doc/images/jkqtmathtext/jkqtmathtext_specialsubsuper.png index 8bfa7e330d4f078c67d5f1aa271bceaf88b3b8e2..8a49b3f7dd8aef29441e77fad10fcfdedad34c54 100644 GIT binary patch literal 2199 zcmV;I2x#|-P)LW>?tUq3UG_f)oS?(**ZN4>APBfh~xuxUHAn+JMlUp6_8K zCSBVlO;VTic|l=)mh}DP$)|ZfpHDtdT1N;Wpio@O|NeCcC=@GD1E#ndYQPj%Lk*bX zYN!EI9A|233UzgLsH>~P($dndwx>^@R{YsDVZcrfAk{CAD2mwJ+yo&6p->3Dy}fwy zUs|BbiLv)EnpVqyeW=DKs@Tseyx;S9^Oq za=Bc^+Tn1xBHhAQr8gIRJ|EKQG@6>4u(`QuYF}mCK7IOBk+y;)NjP-qkedHBN;n)g zJ^qFbSm{*Z9UWjNSze7hN=D&04ogc*U|Cjei^t<2gp_;B1W>GQ<+EkelVzC$+8yj)?^5u%PtBqj;W*7#)fB!Bzu*#H^N~P@UnMF8`!`$4Q z`aT>Em%Uxd^SsXJtWrsCm1S8RIda6ZHpg+ec<~}cQ8autlOzeED1zsCG&D3=?nAXO z?LwS9d2(0V*w`2dA*R3aPQ&xO?h7|EGE(-01_A+BoxF1N_xB@}O5w|wFNU^XU0ub- z#s>QO`W)_=y?D|G)-pXk4Zq(HU}uIHA0IEdZChI#PMtbcrJgyBuZ{0%QEKY=h4~OS$RFe zKg1CqnBzEXY;3^q_v7HfgIHTzLrY5w7>2>ETetA@=TA&bOsEDmIywrLWexdjRw(p` z-IOk>1fS1`zP>)Jt*w=uaXx(bfaT?7^!N8yxp(&9`5;b9p+9`*&YgeUBj?#GC!9zm zz_P4k)o4yrQw9tGnM?-T+uMl8b1jd=Cy)xYjeRVkJec607mOU)SY$jAs% zsTAJ6ee1ehr&WsOgx#F`)nT;qy|A($0O5IFSJ@AMuq;d7zkg3ymesW{EG!Ve-@j}B zXf<2a6Fvst?e_6Z?7iw0qE<$+xb92HF?y2=<9F1ECj!ZC24mUAtI~eE z0u%CgHmZgeA%Blc`&@`(C}U;Tw`2 z+UUy;?Lz%>pII1N>~*rOpiI+teo^;A8HZwe+GDRY?l5%)76gHC97hs~gy9pN&*w=n z7*tP8GMOX;0|SJRzXvxtIZ1BZxS?+E_xmjcQk5F7m4Q?!ch%RP#9~3Qo&6|N1< zW{!hWtL$}&R)RMrYPA|MYXb>r0vw}3Pc_Ns^W@T{OO8kDRKIe4Pp8qWpaeVBNHhEKH&lvFi`}cP}ji;IqTA7`l#j#_@bo$j?V^*vBo-yEo zfdSOl*JEK}0r`AhT{@&7%QAX;dK`PC)X>ln0AOZjrs$J(sJ=7$p81UoK@f2K_;Cb- zK}eE>?d@&dG8v!G=jfu*)zwuTIB)<%Lqm{d8JSE5kw}EQ@QZ8!)A|@q`adsa>c6Q(O%-V2Z1u2261^ Z{{ivZ{Gj!EVHW@Z002ovPDHLkV1lv?Hk1GW literal 2064 zcmV+r2=DiaP)O1%kcI`Pk;;$;^>ikHD$gPq{17Y_p)kXf;=m)>kZXio3%pl^O@ z*LF#ov}^KyActm2zHi<gq5JeFi8yjdgo8|?GM`*QLB#}svQmI6m%_a$l!-VH~ za_!nRlF#P}A%uvcNO+znzkdB<`Zn|8#S2m@m9*cYC=vjgHX(!*i$x*`f~D(w#*m$^ zNT%PLR;xuWU%pIgwOX52r@knPZNJUn3D-hZRY;PAQ>RX8`y!FZq2nr*3YM0Zn7++a zt5uZCWqkYg4FHhK<&e#05e|n@C=>tyk|begX9vk-(wfM?uiF?Nc6N3wpRcMa_V@Q~ERnOg+K^>g#?;i57VI~(MIsSvf%(7aCm9CWtWHn_ zgF(D|_s-INNRos=Ab^8|154TzMNx3_T2I^D;|$yVq#(#MROFt-;c$`MeObEY3nMEg7!%9c-+aN*^aAy zWIfNGJwq%O1MsKU$Y!%WkDZyB!P&EChg33Wp$2KhWl|IcPoF-;?CdP2r>C7RnyuJs z$cm!i$&)8`UeY%Fem|Z+f3Eq<8yg!v{dsz<8(QU=nHlgrZ)jCnxm-rARvSCF0@VNDch7K_JFfWseyp#rLzZQH{`|S`v4uhb zJkR6m)vH4)oqgD1$oYI8l}e>8IzU5T@pv3xzkWqD8pWqipR~287cXAK+}xbD7B!hn z9yt)R1HHf8Xf%*WBnAqzjRWV;pGP zG62-;bu=0c&J^x^&%Q%HtY4 z*5f%tR#g=%D=V0soHR9c>jt{Tl*c)CtjBYPyt=vyS(fqs{rj=)My=8-oAa?7GpYYhO9R( ztA=J2nqp-pjmpY7gm@&2T2T~Sx^xM%v$KX4HPMV-H@Y4)ru^p38)UOtM`OoyR#B29 z!?U(8U%tf0j~~s4M9scs<4C9LV`Q@{8S}Wc$em?!%B|2t?@Rw(jeg~_(nA3IWs-XuJbhE3w)$8}WX6N|hsE0lXdM&5iicV-f zbbF@y@>m_0m}-%W#UkN(o)iiN!xf)@rqoNF-1ym9#*7u~B5sgN{^Sm~F zswfJUmzVMQ@nZ|O#PB3XHQBV=r~Z^3BWt~%L`Ti~!Q?1>w|;c{nk3UdUizL0zYPM7 zqKxY0V*1APJux9N2!bG>*=%BRa+2vEV|~{d@`DEt4t-r{m>-Q{`lHczogptTFC!2L zV0(KTtyW7*X`<-=kA@SU%3}JX(f`+SiH|A8ViBiLpGG2)fTAd9G#YIS#{GW3qY17| ze>D28YLRJZkFKpPm&*u+LPJ|H&h$s8?+0000Gkda diff --git a/doc/images/jkqtmathtext/jkqtmathtext_tabular.png b/doc/images/jkqtmathtext/jkqtmathtext_tabular.png index 71e22597ea19f4385a9bf349bbb7824bce35ca81..6cf1291db5865955e6c9b8a87d1f05fe2007fc33 100644 GIT binary patch literal 3775 zcmZu!byU>d79A7;0qGi25C<4qslfrH8R_m2kPbn?A(e&!LAqpM$dB%B6-Ja4X%M7y zh#@6>zi++u{(FDiSnIC4?p^2Xz0W=|I$EmtNSR4NAkaO8nvx!{W&p#Egb0`&(+4hr zBV7vLs!Q}d03T2Z;Qa*STeM-z% zCP+vM48kDc7$iDvab!#9?uc1tl|G3`7LReWPij(Z5E%{m9BNKs=H3e_4R2P7#Uq{ieS5L)x}|mq;L#|Q;|am#idtD=P}F=Z*mj@?B*58Zf32`~ebvlzVvSRlaN6FZcKALBar>osx){c*k8&nH2khJ%N~w zjqOCD6iTj|7^8Hnv$NC0%q)}}5sh6zUY|_4)A!OPe_x}bh!Tat?jn+?-m6f@_KnWX znR|{KaE9k~c3L(`W)Cg@IoXN#exxXq!HZ&IW9wU9&SwSxP;q<&-l?c(>RwDJE#-5Y zsk;MuxjqOc43oELdD-hr8Oe*<#Nql6SFkSvnmras<5y~GYL+s#*cEjPr*`_z&!uql ztzm-ZP4B2eb$G)qgs_7;49HHa-Gz3>R*PX@%Kk532uV0mzfi&ZGj0r;nwmZhT5`qx zHm~Dd|K41;yxyX@3Vv(2&(GSOd12=eUs+i>lqTU=Z>qRgn%=o40@qAb;}#JU3(w31 zi;0VeP~~5CvSNP^=R8pn9ty8CZ#D|-WS7|RhRwJ6sNcj?5VZ$lBmG6>sSaiwb2({Z zq>9Uhuzj(Ny+eo0O0;sIeuAmbU|hDuZ2v<_q!C zLSp`=h!rVkXXnz@4kX;l_EqaEQ~h(9+d30A6SKcuj%})zMvGi5dNHx?FWCko_^QHM zMT#6yM(KaGGtO-KP-N{w0z2|_%Hax}t%Cmab-vt*YP>iye#5)^%C20AJv}|3!uByJ zK%Jxk`-Ro z0_E!F@%Ks2ug@0M9Y%6^bHVKF{Vbjx7%8KFptb(u?=m5OH^&O-t*6W^nrLNntCvS? z)YW6{ChhsR&aQ*y*aLP&)vFz$C^4?gVTXDRX4^Xvc8_FMsN4F#d0E`67}u^fP}Q~( zmyvltlr3p~lgD%uBL>YxqtPnH#_61QN!4v@nS6Jr2@pvi2JCzA9S$OOH8mhm6DrOR zjlH?P6n*^oLG!~*4Woucp_H@ZafIv}`5JI<4AP~rh?`sF!<<({$$rw?lRGi-Nv*MAQ zCsFu~k-7CqgZzR5#dxX-8ne5c0MiwubE?98w#g|e3ub_bifST@aF6{s95%L^lz3E&hc^n%dgN*XXV;*^Z0# zY*bVil4f#HsiIVr>AG^nq5j|^@WsfQA3Gk8e<(wcdh#R2MB1T-w(mAlm(J^8NuHd7 zA`O1H_1bKV0g?2qSi(eK%56+x4?~QL=Zl?t-XIWy;jLpH5F5cWF)@AMIVF`_`IgF0 zq)~Nms><^7{5>|H0@ z{b9M|cKs*9VhW>{kKEThTX&;AH~p+(l#WH8jG71(f0aaDtfd2ZV!Z}YD^QUT()kfH z3R#FW$_@_p{xh3bW5S%{+*A-LLlXm(K5)p>r+5qWMy(x|qOWahYrF)wDIzWX?T3bg zj$z;6U>w(eUU&Cmijnoy{Y5pa)y}hDv3A(_(k_Rohg_ZTtAo#g+?7?sTHQT6Ptvx% z)4@gjk2P-|B*68&-F$r+nmreVW+21P{}?KF`0g=FxX*r3YA`12uo7l}d*#(93KbA9 zcr8w^Y*aA7s7$@zbtwel;bG&Hs&D`aliVUAB66!;s#L}}XqH=+8jxCATCV$2jhU%K zn;F0fSo+wGL!`yg<@JyG`H#yTZW8<#*TH?EF3+z;%0=rLOk4iZbj_e==eHs;GUs+| zjP^`RO{M2!BL8+e_Lp(-u|F$413t6*-?xS7=zqlJ+dp#NapI?m`ML+7{`}^0|M%IY z`ZrS*u0$HlY78xp8_Y8CS<&e9H1C?5>m~Ru_W#-jWvFhnUoKz%VXS-cQQyHBL<6uMH zUNlzK#_1#p5Y+TND3y5V$Ob=)=ne*w6)66ZX?W+})LvGjm1gOMZJa|j3yNzfMf8oW z6c8dLddkfclH5D4EoX^Wq7-zBOqorCg;RC>y}5j`$WL-B`07yg`0R|OO#;YE^J1`h z-7ZkKdc%kfzemnx{{H>kZMFfyzWJk}>XVN&dc$k`C!e`c*hQc$pzN#OF!`*)8wJEtEoD7by&@m_AkC*kg^(A&fm z8I9$Tipt90A;j!Yf!m#$rp<1@I>3NuXe%?=-tH|soc3Qiwb`w0Ain)>Z?1XH!=r?? zyu94R#N=gMrzR+q<`(x&KeScZ};*C-I^cq%~g*zUbnu^Mn z^fWs%HPZXIsk3(*s0V^PCPPn2bQj1Q&0HqKW-cH)K5B6G>OY;K_wO^riq@0`1JT0a zJT!gc*jz{QH}eY zggSW>Z8%jRen>L159u48M%)OUnN11X8e4sG2-!r)(koL31qGd-uOzV5zqGapFx(41 zIXS@qc0$}4OES2#n)~Ffy7Mw*g7EiLVIlY6#Zu_CEtPtr|! zD>FrudRc_9pkSu@5$`7*x>Doh5jbM| z{W)Evz(DpK}f;Uqj;eA{j3|Dr8d@8RZT ztkI2_UWU`r9r>P;++fs8sfxCNTQax?a8Ufp2Mx&K?Lnj`pJo?d$zbQ_6dAx$RgNG7(a1uQ(05K^Wo?JIhGGikid6IuGbRVDDMzEW3KC?! zl?K9W0Wlj!%aC<1R!1}6<#h7&!~$B8VYR5^!%64y=%c+>v(EXcjaDd5ut zJrV&FhPSVs$)Y|ViT>AOt4cEhmTz!q==m9L!F$e$OB65a?c;p=6kC}*!mjSBujcXI zh>^CXvCA?eA4c?j1J48o*S;neN?XPIT^(XMGP1JDn)!CpwzizFPUk$4>zR&XBNMM{ zA|r`9fHum>!=veo)TCNccoe(;*ED6dNwVN>j-jEU>DE^z>#ghv=r^>FS1r{W^8eet edHv63uD#_$hp3ShQy2gpDF~sgrBtP06Z#(sfl!bD literal 3593 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 UkZ@1}MmsU&q?9B}UcdAEFECAnO8@`> literal 9958 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 UiHe~(i% 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 delta 3914 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 s#-GFZ2QwptF@ncjhyVZp07*qoM6N<$f6D* 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 delta 1156 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 delta 1248 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 literal 5592 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 diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_arg.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_arg.png index c3be2be291cd70f45d1cb939df1b2b74ee6124dc..c833dd61d4a58abe2154912d2d0839493136a985 100644 GIT binary patch delta 1384 zcmV-u1(*8F3hW9YiBL{Q4GJ0x0000DNk~Le000100000e2nGNE0FOzwMUf#Fe+3>% zL_t(&f$ds9Nc&C{|Ma)iNe72Ih!y_~o(O^{I7vISs0fM{-CT^I4qDO8!Nt+Gb9HeP zT*So`|KOw!3J!^jEm*oJh)t$udf!1VG;NYL)v7m-3^Y&1TDXkt9jv_xo!;_NB1e^)->IC<^)gega_Xvxtad zu^1(jNfJfTAX6w5C=dwfeTy4o%=9?ff$J}Ap-`wyRuBZsG0f~*T3Rx^E1f6rQ~KU9 zsil64KPQt(-EeNi?Ch+8f3VlrR|*6Ih6$JMuv)+;XSXO^#*FM@aQpduVzHR5ZDtGQ z*r$r3h?kcaq|<2tKxbzs7-Kj(IsyPBlSzo82mpA0e+PXm93)AC*XuKYjt zK_C!7B9Xx0;Giv`94{{~czSx$pKH4PHBCb>7(_!u12#7|5eNjT>etxVh}G3q$g-^8 zn(1^JnM?-JXtWknf1qg^PEJn17_+_gzY~s0m1P-zzaLv$TOcCGp-D6vg(!+hBogp= zJcvXhczAd~TU(n`Qvd*0S68^aytF;~0MOdniiU;;TV0x_VQOj$)6>)N`Fy%ds|26V zhpw(J{n;_8)x?5!kYySB`}+o8Yez;U@QK?UeE{%!z3AxZf3Wo3s;Z)|uMZm=8(3Ia z0AmcPR0v=-z#9*P?D`c4>!q=&Sy%{*nAc1n$G2xx z>+9>L8I2@K6p2Kt(qWb@Rf||GRxws}qRT9X{Z>*1L9h&@3xxt5A0L049hG)e5%^GsM~vO7zV;)hh3=CFlPNf9&q=Iv%%BDA3N%j;)M`$o(_L zSL09BQ-2FwQtN=KNiF`E*4x{Qxw$!bJf4a9lNltjjxR#6lRg+i3i=k)^f($W&GtgPslhF$3Oe}LoL->fKWmnEU( zmcPBdf2G62!?M1`;f<3-;5WjNPmRapP*t_8D9dZCR!tBDB$G)ou$g%}(hgdhk2J_x(Lz10c4y1GJt ze?Q*d-t-#l&CLylhK3wYwteyHvZi9(PV-E00004yRjxN^3Nin)PxVR!S`X{&$ z7Tbu#%>@&O)&)o;ESMN=Cpwt>4Su(2OIx7Q*Y_iRk~_4$=iGCjd+*_#b72S}1Oa@( zKfi52KO-R5M+D^hh=5!l5s>R6e*$uSL|>Dusw&3E$H6cRMn*?d`60 zYnq1j^>tgFI!K>F5Cp=qEO~u>CFyjU03b(4N2WfKB$36%Me_Oi>1hl_Q3%Izky|d1h%2?lfBG>BE=rcWLJkRTf?Ck8A zh~9^{Qz#|~0ve45DwPTVU~+O29LM42 z<^}+e&1NA80s!FS;{)V-5g|zuLZJ|<)v8G!m6v7Ni#a+fl?r58Mm!$J@bIv0pL)HH zX0r*7<6L!ZZEXSg4%PPe_ff0WaCv#@*nehb2Ji3hP!vUf=ZV}@e<}q+2zZ`{rfEnd z5-1jnu0~o>uh&h60BAemcA$&Cy1MGvr(Un4(P*^QwY0Q^Xf%pUCWD2A1y^Dz8jS|Z z<+A?lIf>9T4Y61Z0|Ns%Jv~J<8tq7KXlMwBhlh}58RzHc0KRuzwOU0gmGWv1G)+T3 zp9jZrn4h2btf!aoe?+b<%ZNlGI6FH7Aq25ltSk9cDg{9hkjZ4gFbtB(B%Yt2F*Y{l z#T)>@!@~oL#iFZA0D#faQLrrQs!P)}Y;0^`b8{0c%j)i~9axsd)YO#z?1|h=CWCM| z?0JXCvW)BNYm+Z_Bcu~h0^D2z@J;T(z<{HFS5*~rb8|R3e>uV4-X1uPgD8r)zrT0Y z`||RFa5!w5N7v+Pnuc<@3|W>@DwRw=w_dN~>FEijQpr(XRaLC4tU!{a7N6@Cs;WX1 z#g1IU(9jU#@whFys;XjfaS?ZScZkJe2!%rWV&(IBN1c?DmQ&MJtYZmh@Lz~kC=~Sk zo#QyNySre}<6YPa%GxudjK28v(gKqGNJt zErDM49UmWqVHhkgFT2WJUS8tr>dN+;D2iYh1`NaKbp=_LF)}g&hG8%}JKM8F<5$p) z6Q{v)E|(+mc)a5uAfD%20(;{xElny?sg!;nMH7TxUB&zcx{emo>2y~a7i=N|MN!D! z-kvT`e~C0k484j&e-mB#Tu~HpdwUB2rn)7q?>aS}=aJ23^#aY~<0A$K2X*;SD1?cL z3Da1brs3=B>#r#vdP1kGU`$PUo_7tNjiC2vMi}L(t65uH(`yU;uxknFz%3Yqe&b~$ zIw+7h!Kj0}7`tN7{~bXR;Uj`L*GB~8`iOvB9v=~q>mvekeZ;?BWXBmXXP$-t0000< KMNUMnLSTY5hIkVI diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_argmax.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_argmax.png index 5383afd89b1c166f48b4bb148776bf39bc879c6e..193398b554c04bfa741216724cae8ad38d2dd667 100644 GIT binary patch delta 1557 zcmV+w2I~2)47&`FIe+a*L_t(|ob6jZY|~B@|K%^FW(uGV9za+EDufpX#E=Q4gR81) zDGK2qq_X2WE7P&(+hTNeULx1kjj3IYu#*jNSW5^vk z0R%yS+1XhX3I!Aj1-yOxwuk26-~e-TbMQQGX!+G@HBn|FD92cE9ET)HBHOmfG))3P zs;YL;c%Da!qR`&n-bi!!zEAV>^JLrhK-%1)W5Dw~l4Y3;!w}NU%*>>6#-O><1Vx^5 z$H2>%FX8(>=6~kq`qHefu3}+f0kgBSW6f16l~AkIz!(z~jukflF!Tu>UDrvHq%cxBe_UBU&Ut5MWZI#>m)t>!r&|%tAi42%3<>}q#QlOV)uBjH6ny*k z4W?-V0BW@w9z1xENPFqhC7d~Prf0m<>0ozvw`**AdK$-%A5XJ{)VP2DK8Og6F$6(? z`T2QlZEf|?DT;zuuU^5jEHs-<)M~ZVbA0&l0e^dYd$@l6dS9A$yA9v>2g*_u1xrgy zuq+F$Rx7meAbk1qC2@SHQ*NzRL!nSWtJQ+8>#6xPO@ky!s8*}+JP$z-pwVbR)3k{@ z6!=x>7mGzadh`gDN+pr*>eZ{LR4TA6D}CV(pkA*-k|g2j_IDwbL%D%ktrm!AsAvX$ zM1SGV&JMnR|Be$UPM}yUVr^}0@DY3jxULIXma(?B1|kxc3#+TE&@>IQEQi6CM*imJ zX5UQ2ar*RW6pO`y^6uWfiwhSnK$c}#mX*4bbne`_#PL)PefRDiwzjsgxVV^VvN(bu z!0p?&@&5gL(2sq4?7FNUo;`bp>FH@)zJGjKNM~6VjvYIOrKKeph5^@gar5TQf$~k$ zM5ogcrdt4*nwrAdvuEMDZsL3XkzBcQ1rHxSgsQ4=T^Ac08$!8`<3N%moIig)@qH?X zI*tPXXfzrCe(j;1P6v+TU~_X*$X~5i@%r`ao;`HZ2!a5+ySs2*7u(z0U3+M|-G9cX zPoJ>8y$#oOvA({J_4RcCfU2rsjKQ)jJb(UND8JEYq)N9_Q&U)6TtvIw?)mD1Ai%Y2 z*SfM450HAjE|mNE^Jj5(5FV)_h}K7%rghb0Po6yKsmr2eLciJ#v63TRw($4y8dj1d zYBrlaGHu)LsX=+!grBwIc6CQ#n+yMq_$t&jzqmRdcWFr;*Et-VVY** zB7EPc<>lpxby5xszVFk{&dx}@X-bi_7*wMY9f3nl(-d|~n$4!LGm`}{#)My08aR$a z<#KtTtq#38?>J84X3q}=&1UmZN|!$ghGF32$B)AOSp?U0ap%q*ym|9xuz#(_3Y(PZ z*T+41@}w}`dY(tBswVbG@pCWb{L#H>+^ed?!qcZuN6JRS@Ez%G3uBBlO&h9j8c#L4 zu9IOHUH#Y>FJ6QxZPGU!e;ba}p-GMM_^DL%7>3amtx2~!M8h}QvxFnN;66Awz{<)B zPMtc{Rcx0^C4Bw*HEcMfKy;73c=6& zo|vX7y#9$IX%CH_7=7QTd-v|qty{N3nS3nkC+B`RbcgZ-k*ca)>2=iFEZ(HBZM&!N z|5wv35mA9C|L?ObA^#(>j3IYu#*jNSW5^wvG2{--82$&&GWGmNXbwL200000NkvXX Hu0mjfID;48 delta 1544 zcmV+j2KV{946Y22Ie*|uL_t(|ob6jbXcSEp|J_F*SH(bzZNvpN1lGbrEUuDEaUp~x z2>H`lx!QQJYV1;^5(M3|u{lX&Dc6`Qyj{42q!J`{vqFeqjw`$_D+s&Q`wE?PZ*OjP zbC*O}_Xk_t?0awK{n_{C%_KP@B4kJn{`=Dl$Z)#I9GWs@4u4GyoBvbaZqy&>WuU(d_IjHJi;?+RULtz;#_xRh6pMs+4AOax#%K;^s;c z6j{n00-Kwg@P9lHGcz-NY1Y=(FgG`c>FMdA<{BFtL#0xIuIqBbp~B`L2LC#FdTq5@ zbbNf=MZ*{)RaFO0wNZGUN5x`Mnh{RqP+ivv00AIP(}W5vFE0nmhG|UG40xkYG#!Q0 zOL$JM2(MKT)GN-fs%k)E7)J0e%**wt)oN0`qB<&y(to3ah)>sbsl2dmT$k{eNH<;A zh2tEF9Lghu8;1Ypg2P5C6bfC&Y&M%@nkFfV5=1KJk1ET@Iq&4;WZ*=u=;GpH&%9xW zg*PeT-{Gj{^Mu#*;K73v)j3_)yZHOrOlEwd-+|6`uq;c;6SZX&i5$v}5}qh3n12%oQA?!R+U~pdUztvc{m)tl+)2)mqPHuD^aRI=CxL@!k+7xM; zhHu}#!Llp>K&4W_qeqW~wAZg+$E8b`dd54Q4h|0wyT&FaCUD`xg(OQzjE4^&f{38& zI(*;9?CdOdc6NH`G)=>sH*a9uHX4lvDwRs&Ie$KU_<*CMBP=Z~^`&XI+weRuR+gq| zSXfwqZQE$IT7iw@@a4-F;rNMmxs^%mTlP4$^i$c0vw{D?WEW)eSJNC3qAlG$APM7m7ZDV9)1Pcobs8*|R90w~aE3xt| z%R;Bqk)~S!7#$tO<;$1hIF9f=|444$yotw;AEQ(%!EqeCefw4_moWxKQE>I@RpI+Y z4rPo10P6KRfZsK=)9HXQhOMnFDSx?K#=Cd#dTQut!}on09v;GR9PID!ch%5#yMK*O zpFUxKe; z3N;#y9+}N%v!@5;Z4-X=icgz%!+FM-u-NlWL8H+)lh);LLbY1O$B!SS^;rhTad7wUUA%w)K7Za;LxoL3 z+`oTcSU;aXf8LkJbzLfzO43?_U-guyY|**z--H)0UJR6tPQrI?w=KMun5LQ7*rGHO zzU&QO0<5mC269c)j6GyeE6&ZKqO;BDj#Tz=XT5s$s%zI6J-a1Jws}Y^&gFueA1r8^ z*41c_jg8^!*RR20L-b*cp?^>);Q07BIGeR?yQ`_bcI{fve2lT!#y_<tl)POy;~w7x|fd{JZmFFTWnC`Xk2_gR{d u{gGJ8kU2DE$Q+t7WDZRkGKZ!N{{ySB?7a#Vkm>*c002ovPDHLkU;%<;ANI`v diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_argmin.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_argmin.png index 95b5c599d4b185722aaff62d9e58fcaec338e0ca..3e887df9ffcb001a5eab2865d7258c1e368dbe72 100644 GIT binary patch delta 1396 zcmV-)1&jKC3!Dp(Ie$(`L_t(&f$dwrOCw(p|K!_frA3NZ1XtwJtQ?4g>lhjuLM#@;z`y`hRdtn_nVD&O9)@Ay^XJd5I$c2_gQjW3aU3NQ z3A($x>xd0mmQDSlC=viF6bg=c@I3$IIkYoAbR>2filR^=k)V^46HggU(^oDs;cUEN)$yQj^kd;c95sKEfNJmAOHk_c%FAGK+`nJX0ueQ)hL}# zH{~T+md&yDt5hmE^sszjwaMhHy0Y1fSTD*};dSHwQEMOdAeN~LIQY^=#i%n8ZBl}edTW@LW)^vSf#^x79_*S)p1Mf3CX4o5LEgXAtYH!p(R{Ne?+7PdA~ z6n#nZ3x5ovfFv@KtdkQ(vB^{4LJY~I-{_X8;)8|AYfe#-(1ewCC zLzZRKYBl6?IZv7U`+GDRjh4Emr>Bulr?I`gjem)W2}qLEa!jpOL$z9Uz1P<1RFWjb zVlk+y3Q-gTkNfuR8#s=`+S-~~z?REpEG#TwaB#4lDZB~{!@$wek#B&$CIXSjx*)2m zf`|e|jum}$r*=!d5{r#SD$z&3}y}iD=48y>e zFMnU~_3Kw85($*c!Sj6h;D(G(>h9C$}*41q=N4HvkPfrhq zhlg=>b>(_r*L8gS_z}fo5sQn9;CUXEN(H}v|Mt~;eSM91Jnk7lfk;#o1psh#bOhjE zPOQ~xP!t6}fBy6xFG&)1c6J;&@jXD-b$?VUl|Wl*PfrhWxg75A?;ZV8UDq)+HHBZl zej$^|n6kh>zq-LN3{I zg{Ha=|JQ)W$HxwvUh}Yz&t|iZ+Rt7Vc+I(0U1=}Q?Q61^OkVcA^tquc9UDbaXn%cu z-Sys&A3vVmW9$Unx-mf^iek%Ju^nBlN|26|*s2Y6etzDuw+*ieK@b9UgZv=Na-d-7 zIEh|e6{5cjeW{3ji+B!^K?x-40*RWYIr3DH{342?#Avwuc1Yp&Ppb@S=Y=kxUa`*+hxL0VX0MAu$LxixX^ zr$(=f=Xtukyrjd!L&sQqFSMN?2@AUNQdp8C=(>)_$H%7nX?c0sEdJdtK@dh(I#&(F=VOG`^;|B>lTCX>D$m9V1YBvvXFsH%$n{eAE}AGp;fNfIU|CT+~lPBNLq z<>jSG*xA_`Mn^~S`1okP`M$Wgz~tm)N7nJC(Wyt=S}dQOoHT8nPpu2B1+x8}BHrl1 zrW=S6MgJA`-Vyy!Dg=l~3;`k%Lx70H5FjEk1o#89QTqp?15?WY0000$Wuj delta 1368 zcmV-e1*iI)3xErdIe#)qL_t(&f$dwrOY>Y5e)=ssh#flAL9B>fA})%9le9xbq*M_R zXU!luROzVV;%MsNRK&r#i*{*>KXB52Ac{~2i-X-vr)H4z4)1sK-lj>Kz8Zhz%>xB% z&OPVe^PGFnIX4<2B0_*4jsL!S0s-ESfJ7f4Akha1Nb~^$5`TSwfJ7g_cO>e%j$|^4 zk&zK-n&z3EdcBUp!9j#VA@ue2p<1n4%1lpBcRUYW*D*IYXQ|T?n!-LQ2E9< zIy(CBt@2q*|>;iA16) zFDZ&*j5UAq`Fx8WmJfKFOpezjilQ-&IT=8cZB)k;G3=I7_J zuz#?CXf%pKq2Ou`PN$YD64@f0j*@oBX0zDZ+5-K~!;mEDuXTMkn4{aRzpJYYLqkKj zySuY|Ua!|NIy#DMHjCBORS1HBa=DDl%S%VS_xJaRL?X5UpCixit{PZrYJMO_iLFnhDE=_sy6;P`|uU7RUehfWSaUq z{NDqXN~IQ?cJnZg7e%q9_cONzc5`mmSDKr1^P0>plbwA#eOCCC8yi(sX=i80@_*U- z`ue-?7`=eiZH!yUvfQ>;>_k_)7Q}NB+g(H5+}wEfw&5!wNs_DEASWn_;wl(CC(-U! zh3NM}KPqCsBi=)#TLOtZCebR#xydiGEZaWga~TT^K0iBMPkjaU_xC%VPovSGy}dox z@}BQRmY7dZPe~L-*9)?WVm>-qv466$v0=P(W5vjOkFlSIPbqAy?*7abquqz?EKSpB zb#>Jk&j{mpUZc^VnVFeyStxl4&tD3c%Vm^GB>-r;``g&qFdBcWk0eRR=krii72$9g zx3{FF`Xv&Nc-uIqSvd;6AGW1hmx2vJp)78e(ZsIwx*Dkt*e*%6&ir%{c!9slYs zB=YDu#ElP diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_bigcap.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_bigcap.png index a8319e38db8aaf8eb95430511edbec1c81e427e5..7abe8aff5cf8a94edb9c81f75322c53f8fd5b50c 100644 GIT binary patch delta 1408 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 diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_bighat.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_bighat.png index b5ee36a8919badcc14279d3e862d355033743d09..db7f077e68af594be13aec299032f9259a57f8a6 100644 GIT binary patch delta 1374 zcmV-k1)=(k3x*4jIe$1wL_t(|ob8%DNW)qfhTmS0I>kXS9f}oE#0)w}rB40~DIFAt zg1eATih{0=j!pN7OGoL{P7(Z_TpS!47Zt1>>>${Jkl^s$K@$3trfGA$R&O5YlANBC z^X5Az@AoAEA|m*B;-80z{<)>L+0|=VJ_n1<0CXp zL#0x&Y|nR4tJN?zHrA4AHn)k#rIx;n#Ue!_5oRmEO;j@z(X8Io?}O%k<#kz^5#Ic>+jBcbsw7D* zebgUo?$Zngr)Xp*qB+re!AxOUEG;*YUB4$g(flw{Rn_r7oo);>i<8UcAP7Q3rH11; zh@yzo)6=ePMl+^$5=9Y1LqoQ048y?F(-QVLXUiA18oJ(!Nd>AJq%;&fwSy7i1^-)QoN zoiZRhb6oEO&1pC4C9=dMdlZal#V1HGV z=qGx5@BH%e0*>Pxjqm>n|K&Xc{8y$7_%RX96wK*u-EZN?MBLuq#_a4YhzQwi7Kuc{ zbItLm_z@9nwHhujFRg+?EEdD(=O=D&Z-3%)JmXqKP16txg%Ah?u(Y&fEybgwqpkC zwyo9u2D)0#i;Iikc^-HRm*m5BTM z``|bZ<#O56Lm(E5f#Wz!IKwbdE|)tNUHcW+B4#of%*@Ono6X|m{oUvw#!^IzhpeGKr^J_h(AGQby+ g0ltU~@I_?6zZVuXl!FY7IRF3v07*qoM6N<$f~AY4KmY&$ delta 1380 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 ySJ&S{8aqoM4f`aJiYS3pL>15Y~ zN`^F_!rlT2?HB0K(bDd09!s|jtpe`L=A}a*QWx8h;GrG@mLXt~;dCfhkK*WEx3LrS z11gJ9G5g+3H`}g?#`7<6qd4i3<6w^6ND0RW{^2}?^$BC4A^Qcvgcc#M;i z6WqUl-}$XnDt}$G>-YQE-ri1I-CUAd#7?J!106^0; zEG#TIqw>y?c0I5xi;Be}0U!X>Y&MDL?;6N|+uPeqz3$925>XcRr6uzd1(1m-fJ{UI z2ocdVO{}b}IFX6hv%kMDqN@2M&8{?=Oz73CSI#cXBYzTARf#c1qtS?TU3dNm;6yNK zaeD=_EYs=fsi%#iC^Q<4V)tujXUDTlFA|H$!#jAmFm4f}*vCcJbw@Z=RXxjehoVV{ z^L`=`-J^i}g>Jk=jPhO-_{Rtu(UxV=+S*#`QEwOqy?psHbR;Jdkvr0ULimYD^uLgP zQ!q;1et%`VZA3Zvs;Y*T65a@y*hqDUqr43FZ_{P+wg!FhSRzL4e3*#bCeCgh zrEYE$mbaYVjC5TOd?)O~#PSnu+eW|NN1;%-l7IS2!p6o10HD|FMY8YpdN55BilX?| z&D+Nq3oPsP>(`KF8K!AM(=;?14d}Y=YhNmraDIO7WU8h~l$1R>I)Wrgp?1s5%Snp& zMAvl;hr_^}S@6e8lVHf~_$B!R}+Wz?Q z1K+-V3!KUTP$(2|@7}%8^6K?E*4NijEEaKebQGyCvMl4tlP8}4#TIdUdmE-{;^)tw zabCSb+>!O^((?(lc<{jg z0|stm9^AB_$er`3?vP*IlgZ@D>7% z74B?Lcko}u&R)?-R8&PAGLu7j)cX2q=qb_K{zDs21 z&H~6z`vj1QD1e!X=)M5Dva*7+v$I(>B{ee>ad&qY&z?O45uw#;VQXtEby8zi%tXZT zc#QAgzdH$q&CN|*US6h3YRr()f}68z3zLBWP06mr@7}#bKA%sW+1}jTL_VK)gm1HL8-u~% z*52ukETX1qc>44yTCEl?E-pN?!BMAkKA%UWQgPP6PN####l^WiKZ!(GT*xyuJc-H^ zoJp^NaH8Dmx-Dd}vjDQNPXL*S0?0%ZKqjI9G7$yv2SR1L?!664R{#J207*qoM6N<$ Ef}%RQy#N3J diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_bigotimes.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_bigotimes.png index bc0ae2d202d09b7005bee0f59661df72df0cb441..dae00973a763b1b2bc1a185096ae49946fca5cc0 100644 GIT binary patch delta 1331 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 Ef?nUEo&W#< delta 1399 zcmV--1&I2d3!e*+Ie$?}L_t(|ob8&iYuij1hkyD=Q6OL!GAM&nhmf>bfp#bbXNv1V zCWM$2(!ap9w?aZPW@!F^+MeajW9U>56t5gG0q`bnQ1 z%d#9PwG{M#hDhhT@JM&M_kG1sN-2D7@z1#bf!lyD(E)sk4u9ZFbO6UBDvE-+xj8Tl zgQcY<$g&JoRS}QJ!7vOMhQa&y@0}XXT~G&*Wts9kPn*pqJvus~9LLd>l@+?Wx=L%c z8l{xdbUIB1L2zO?*D>M5jo9DcN4Z?ay?gfn0Lf$$g+c+fS`G1d8~_lBL@+fq<-~BV z!}fGm6b0YEe}6|X7}U>2B9Xp!CnqOZUthO7oGY;{v0ks^+qZ9!Wf=gF$z)KeRKRf@ zN~ID2AeYNwVq!vnDsLTj*8^FWX*e9F04M+|iXx@-&l;$m+uGW)z3#XfhEhN5vx~n^ zbO2wX1Nagh;Mx);Ny5y`3<`z9jsC_9c=k!`4l`$FW`EFXwG7)N5($0#WffIbv9YmX z*rySmlt>7{{rmUv>C-1KvvM3gdSY2JUCi1#_ zBP~YO_Jud~n?ZeOF}V@4EYrosMbkD`$68)qrswD9rtLiUB+wAV{ zVr^~Bc7KG#^E{qEe~wqLUYWM@ltf9A@b>Ln2!eoMFo@IB)4ugik|Yp9u)V$Q$e5{A z3h&;%Gfm@pLLwnV&r^0f9pv+QFbsniFJAPmclmrCQ&Up|*TGCCqvtmnhCw2c=sA~2 zBzoGjEQ?Smq~`&Q@PtG`5O8sEfu~QOg6DahpMRf&Qi^J|+S5)|RWuq6ghHW#5=Bu& zHk$VfypS*4&kqCbN{ONs()oK-;PRBGS*>1OSad9!UFP`U-OeR4H zL4T{&G8L%N>2%O&Gz_nKLZYgwD3wa!dEWG`JT5#T@$m2vA3l6Aoyq_Z3WYE^IXSey zOeTW|4;~;K4x6rZ-EbU-g@pyfYo3t!=FJ-b7+PLnSr+s2^N=LT@VZugeDdT8c6N3k z2m&NY!ok6TX}>>y{J`||^uQbFdWnjnfPWBTX)3cUi}m$&wA<~zr%P2;JbU&GdwY9G zr_%s{&CN{!|KB7dv^T!lEO4zvEx`~B2GMLbAxRSM-n~0C1C&aoaCv!&uV26F=Q5cL zCMPFRE|+`iKH8p;5Te)0ucE3d+U>UaEU*(--em0DYPE*Otb@pAvyRocv)Sy>8h?>% zpTybO*^#p^8r$332#3SA^Ol4VR4SFe4AE6wE72~ZDB|q9-q9}q=YIvNTo$23n1L&z)Xz3=eGLppI-CYC%0mFRVC`6-C1OfqFoN%RdlZ&w| zF_+8X;lqb07K`}(`?p~>*y?l+1OkY~V)`0buh((s&K+0QPb@JkF4SUVj^k*v+0?(q z*8aXO-QRlK?Q7ilv9kmCVV?u|5*@&o=m5S%2k<32z`vPw7=hw7002ovPDHLk FV1f&?rT+i` diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_biguplus.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_biguplus.png index cff9561c2fff1cc9080468676b31d19822a874de..061761e7059402a4f4bc2fd9c196100b15b2f1e1 100644 GIT binary patch delta 1463 zcmV;o1xWhl3*HNmIe(BzL_t(|ob8%VXwz;O$G`c($UsPif!U!r8B^Ii(8H)~C$}9^ zL?#Lo@6Pt5Fx`#{UOX=8xnq|eho=pZ2IilgcJbKP%M@38um@oc2zl}F{0{z-U%R$x zw!GUK$p?B#-o8mcecw0l^E^?Ah>#G8f6n>_{st0>5=bOUAb*i40cjHR`8*Uw!SL`f zs?}=CF-1}E?%g|Cm+CvDNVF^qnM?+*>w+P;e%eY+M5qTsEA+WQvgGQqP0MIlI#bObh zb8KvE`0d8W$A6<Uc7jLYPAX>1UToIoSck& z!+nX2;asUyNY`}&Kmcfadz)O>rPj_4lx05klbZ-G95GBdl0Tv~3$#u3W*+&JIk| zM7>^zWmzq49LK@*^fcDi){si2j?}-ZswkC8xOMARIFZNQ8+m)fVzGFl-|5yz(7v^Gj4>P>9Ds=Yq=$zP0(*OVNPnl(T_qNaMVO`u09aaDLb+VV!omU! z!|2$js;U?p8-s1zU7zwNBGIxeOiWB1d212GmoHzyIrpb>Cxj6A`t>UqV}X5Tvsvi6 z4$e6&%fjmFYMZ=f#>dC;^XJdgm3R`A%VpH-bzI_7`frwz5 zX3GPBh>*+Wj@|$3*RKH}a4G|T9s;AIqkrI>cRVkIz}(y%GMNmPmzQA}Mq3%96Q4hS z#?a7E*FUiDr?cZYux&fkR900L^Yinl)oN{{O9+8`_wM2O^XL8_y0EYS;Qv3V6W$X) zXcqLXL~n^mrBc}6-}je?UdzJb;v#uy2_fm*E=JPVE+S9&!R!!X*;nWouRGWCw@x=#E1`#t-wR;xW@)^3=l+3~)P+tdEdbF$`*Na>(7b(#}L{u)9L)~vAiQZ`JHM+vKlT8$nVFeOJl<1Mm zVegIB(-!E_{B}lIT-T*nuYX>JZZAcmhbOc7b5`*B(hNqq9;39eti4kGd^YclhXr^%T}bQ}jCK78;)si~={wooljgqG;Ny`U%x zW@cvmsd$_e*Y55v9LMofOJV95{Y+?yj4_l-B{0TXrebr7>u?dM`Ez*PYky8Hd3B7q za-`{e^X5(Hx{hM8*!IQ&@TUkw|K$%4e}4S!vreS7g#$N+>cXu%`FwmFv zlTh@E3%z$=ycpPvkE6!KUNCA*Mqg)55<5#E3Hv0FNR&V#Q38oX2_zCF@Gr6l)c)F zBZNRjqJIHRwo1@4b|^zf?99oQ5iu22G?w`4l%+$Z)+~TXnxPpgVM~=_F`RekYrje3 zI0j!JuKbg{*eCZ!kMB9Y=bS4L5g{TF|J?N-_#22sq-KPSSpq9<;xcsh5-P`WHR{p@gpQj z!p_bP06r=jCeeb@87?-#5-Nrp=lb{*4DVpxw5i? z4<9~wmhnO%qNZt1ow8P|A)C!Y5Cpt<@uDT(WwTlI_4T!lgPBamsc#B`fK)2gbT5@k zHQ9@zh(sdc)B)TGg^02&qh7CLW@ZMAFK75Fwp&`#$*N7xZ7#SIHea1z^SS*I~ z^K%dphzN?JG<^Vw2Wr2U0z-W z@c&D4!~WuXc|q5TXorY+JdSd??1YC-VPR!u1(%nX`26{^b1#$0ptrXdySuwheSaT& zPpD~H+uej^S*TX4-d=Fsys}=e)6C3_YcE+*6k?3E=jTZ5n&c_H|d{-6m1rnFC$B z#R(IUh#a^x5gQMHw(Hh~g*y}R<;$0N^5hAK$my){tUul+cOs%`nm9Z>bW*8_iHVj} zEll_p(LTK(2m+?3ryW;_Uq2ESPawC(@qR5 zl}fmG?_O8-PkhlSFSO6T*f=?`ogW9yi5t&)hdsZJa%T=iX&(n75jhZv$bm>i4n!hy Z;9m{K!%a*LW zHcrq7v`DAB)AzX_&-0v8L_|oC;=kMOzRsT9V?$I)ms zI_{-XDeUd-scLHIP$HsX7|7*va2yAWF+6|%9ACeFMJ|^E5usMAVQp>A75Cmj3fS1# zpzG^vA|h(FT9nOZi81EhBO-e9<_+!c?y6{R=#UUjV>-O0?Xv{`3|Q)3XbE@>({RX>kJ~ch;an5EK7;IV_B9foG_-pAFWo47-Nxz z@H5E!QhuVY>s{fU%JM-7pR}JLTCEm6e*9S4ShZS>Uc7h_+FvOV2N_x7<7KCE6hr8` zu4Ks|x_?==!s?O|QB3K4J|C$wvQyb_h(@E)C1$Nwqii-Cdm8(RGODG+zEY{wb72>V z5HO0^L5LCWzk=!u8>zakch%v&=dV-rz29h*7Ez22(=?^ZgdskrpFmNK<=>1f%j)}1 zm|>(NmZ_;JFvhU8wbirC=g*%3AeLV#sMqVTZGRj2d>&(CV}WHj=Quw<2V<;nT}w+# z&@>IUZNo4OY;0_}S*RdpW@d18b>*h}{3uC56IvHz46k0jLZwncqtWOqpy2ZI5_4eWCenxMCs8?nq47wvFxW?a+@8L#(&`rZRA| zv^;wB2)1npKIfd{<;$1I<#Krc{yp;fe1F$5Mi8f`r+Dz-LGN#fxH*OriVl;pC7M7TqqPmBbmR6uIp0HJyEz5E>J2WQGe$& zQ8gOkA|qr}0f`huEPjN~2;A)0w~1+*`1R{oBp1dD=N#X@eT(FT1HfN7GA$O1I6gkc z$;pY7Yjamf&YcyI9GNO05m5oRCZY(z{6B`?MQ%;Rw{PEKc6Js-gmSrz<>lppchOt7x~| zZfYr=PGe$XA}}9$7lpDOw)v67+udz(*)gwl3mx&pFcZ}2fSw%ob#Tk_q)JAB7XSr0hvq&&3k53Y7>~7 zn?oj(afRcYquFeRCS8Y>$RZksfu~QOqFgTH_wV0<+2E+tIg`m?VPU~t1FO|4Mn*=4 z^86$cVHpaM7ZhnNk>Hd~b4B^9>#mT*&I(AvJ_RHqDj*S20f~qTNJLb?|A-pwmy^sP QtpET307*qoM6N<$g6ZSD^Z)<= delta 1430 zcmV;H1!?-K3%v`FIe%|SL_t(|ob8&wOXN%#$G>?|A_!|?5esp}^N@|8g$P=$TC7;8 z&B6Tz*-j8tto;K_tk-T!vC=|!!C!^4g%-kXuDDa!WeY6?6A?C8%oQ?uW6W-{nelc# z@_{tTWM=Yx=Ew6q6M+yy5W&QM&F;XzKqMjuA`v+diO2zNB7d5uiT?h62!ep&;b9nt z0n4&5GcyB05FiKwj*pLdHP>1Y4j6_(WLYMqQi&9cMIuQONhXtIZf=eo9UT!u2vHP; zq*5s!&9xkDJPfh1v4Mkw1N8Ov0RR>j7O=g&jiaL@%*@OH01}A=Iy*agG}m%4PiNCK z@#Du2bai#v_kR+J#Jh60x3`#|pJ#2ZC1Dn^P$=N~`Wl8|007eIG!73BAxRSU_xAw+ znx>(xt<4^l{~WCAfngXV9*+|M1OUloGK7%VHIUw0US4KicUl>NkSOe9CGrzF5Q)fv zP$J&k+~Df!Ds-ckW#QMaU!mV`HA0El+uMt^wKdGn&VM%iuBK^-$Kw!1F-+5~N!T4p zRaFAOj!1$)cXA%PwbLt*B#D$tCC@UcREj)4J~mW$wOS>Mi;JFhdJ$U0FoNWAxrT+W zRSy-88q?hmXDAwmM&4)g6BR`vvMdL-bfe|Hps{&9Ll}lZzJC46Y^-9jNG2yIef!HK zVk0Aqet$gcR1RVYMNzmp_^PV<*2N?uozg+FGhxdxY zHFMafs%p)Jol>n<$@KJe=u{XT@$Sp3KEILb3`c1l&U@}UY2WLOMrIM|=%6uk*fM_5 zkEth6P-D3_qg*am_Z>gOFh?w3zI=f!%h=uBt$$f&YikPtLiv@Ho0}Wxx{g#T^(O7+ z#Ih{h-rho%<+^pv&dx%TBlgPo~z!z`jGikP3DM?RnT zO#hpviF`hf(a}*mX&Z)IE{FU3`?@*FN~MBowdz}!EX!C}SU^6XN4Z?CD+7NGw=4_$`}>e(8DnE(EM5H&xQOVqtb54s?(Q;w z{Mp$VPEJnhPG#UV9PQ}n@U1VMPGe|j2=RE_v(H{gl7zv*LC3`|t`1m+hR#uQorJ(CNc6N5^*8B74Pjq*8 z*Zzipo1-sYJ|hp`kk%VC(ot2_vuw3meRKLq$p5ZWy`A~5xHwJ}MX`NGR^QNl>;TvC zL%sLh&au}~1vN0eY8mOTINMH~{vfMw=oO6wMO9U9XWSni_PKF7#NWSv_l;ye5`RTe zn4Eh;{GD(LR}l$$J58GX#{-LyK?Nj)L&V~S`i#Kqj@?W$nGBwuo&vcrPAtp9<>h4{ zCmaAismAv$;FKy+lvfk;FSG)+Y351>6gJt&vU&FTs>O%rix zX$hmFqacJJo6TZwZm!{7v{h(|h<~PO;`H>?PAE)FOyK3^h3T(~W)fILUDwgm(*r>e zFf}!0PsQ!+?S>mI6bdj+(@rgkqKMw!UeA2wXCSbMvMeK;%|e#tH&anj6uV41owk2+ zcVF&x&zV{hMX_eC?laKPbWSFdkR%D2Oa_{!y?dU?WI$d+$#>V?-QAnx0e|P2g=JYa zQ}3UFhD2OlT}3PwL#0w-+5{#hCJ>9oY~d`+LZwpqwEuJm7E#kQjEsyRo6X|+`PnlY z9CSLzVlhljP1$Q;p-@13dwWZsp9I1$LqYR`G_6GwoUCcCAb)jz7NXdh15wz=fk;FS kL?Ut^5|IOuh#dF>kXS9f}oE#0)w}rB40~DIFAt zg1eATih{0=j!pN7OGoL{P7(Z_TpS!47Zt1>>>${Jkl^s$K@$3trfGA$R&O5YlANBC z^X5Az@AoAEA|m*B;-80z{<)>L+0|=VJ_n1<0CXp zL#0x&Y|nR4tJN?zHrA4AHn)k#rIx;n#Ue!_5oRmEO;j@z(X8Io?}O%k<#kz^5#Ic>+jBcbsw7D* zebgUo?$Zngr)Xp*qB+re!AxOUEG;*YUB4$g(flw{Rn_r7oo);>i<8UcAP7Q3rH11; zh@yzo)6=ePMl+^$5=9Y1LqoQ048y?F(-QVLXUiA18oJ(!Nd>AJq%;&fwSy7i1^-)QoN zoiZRhb6oEO&1pC4C9=dMdlZal#V1HGV z=qGx5@BH%e0*>Pxjqm>n|K&Xc{8y$7_%RX96wK*u-EZN?MBLuq#_a4YhzQwi7Kuc{ zbItLm_z@9nwHhujFRg+?EEdD(=O=D&Z-3%)JmXqKP16txg%Ah?u(Y&fEybgwqpkC zwyo9u2D)0#i;Iikc^-HRm*m5BTM z``|bZ<#O56Lm(E5f#Wz!IKwbdE|)tNUHcW+B4#of%*@Ono6X|m{oUvw#!^IzhpeGKr^J_h(AGQby+ g0ltU~@I_?6zZVuXl!FY7IRF3v07*qoM6N<$f~AY4KmY&$ delta 1380 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 T7&(tu00000NkvXXu0mjfqfN2R delta 1404 zcmV-?1%vvn3#1E>Ie%73L_t(|ob8&wOZ!e3$KUy)R1jLhAr94wDAE&jkPqn8>X0JR zilBdi+D%Y&bkIM*);ZleijyMRfWNkaItUsU62>|@v&9i*$Zj`k|a?=2+iek^ycPbRJvmK_*S(as7 zUth!L^J!(lV1KZx-owKKqS2_??re!^5wqDWuCA^iNfH1c9*^Vj@DMD^VsCE`0FX>3 z(bUwW&B|Yg+4Vq@BpL_=C;$q8@;px|{a6FlvZbXZ)9a3%VJLOoKC`&zLDDpY*XZbI-SIkZW7*o;LVJ5VhKGm0th2hh zipj}I(|;ZkAq2CtvshnW*RAI$5k*nN?(Qx)j)TwV!{g(l=5ChP5d@)PgEPb2+#L4z z_jNZxM~Em0f)=MN7K_;0+5*Ecn4h1o2z&q^Gqts~wW?et9*gsi^Pq zc;NT@wKza693djdaVV8a7#kY{Ap|ckFQAknlYhxn)Ke4%cXxO2`~6>v$n!iBi39*( zX=w?WOa?PEGvGL`W}6<52fe+$5CoxW)~h%|L;$$IzlSJ_nkm;pQ4~BpJb)0Q+g2nJ z0n4%wMG?tl5}TWwRpONs3`v|RaT6h%RyP|&vmGrr}2={x81`EUE!iA2J(9Csp-sGB3Q?SD+{ z?CjLtMD$o*UPd4gs5@)xAqWBv4-b({CUxuCRz$P#JdgA9^KT0&2twUMxXP~;5%>`D z_4U=z5vCkPQE+i_VMss#jjxI2>zmofY`o7dxOry__|@k8f8mN~0Y4^UdFr*JqXYST z{-=gwnjaH!ad8ntLqnjHBArfSVt-iLE0 z-52!&k$Mx%?CmZix4N8y>pNS3>-JfIE20IsB3gheq6N4jTEJg#Y8=7=frX0z0000< KMNUMnLSTXsv!Pc2 diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_iiint.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_iiint.png index 2777cd3b996eb4d6aec23e00ebf10137b6457b0c..0896d39dd2cfc92754c930f08fb2ab75d80f6be4 100644 GIT binary patch delta 1619 zcmV-Z2CVt^4EYR@Ie#ljL_t(|ob8)GXxmN{$G`efaG}r+8SKGSp??UKDH%$KOu-&( zN(uBoWRE;_N=k-y%hI9H*n)I&I(GDyr4mh>ZiSXY1}Pchf=q^LC`9UFPxl+ryUMaG z$fO8d-kk+P2th_7{`=PhI16MVav&3t1Am!_97t6}P17I<0t7+8 z=H}*5+sevHn%z%~b7?);FbuqX`xb-{G@DJ->vcGegZ=$|5JJ%J_i^XW9c*rHLYC#U zhA|mPO6=_HknQbl_Fa}`0$`v`RaLUQyqwk$CPr%0`TO_p=yW>l`|H=QA&Meiy?Vvk zip3%>Uc8vr5Pv2{Y9f|OCA8aZ_Wj+vcUW9pgr;fCKkn@8V19l+tszW~v`oC$>ydJ~ zOaKr7Y}z&&jiI*FjzCD3_9Z2Y6FHEH$N}ym8is*Fp#VV;@bTkE0DlAQLZN_ew+jGh zHk%Lx0i{w2wr%qs#zf&NqNZu6R4RD+@+APE)9IkuY=2^9Wd&<%Yp^T}2L}hJ*Xwxy z{yk(_#;;$$PQ8fSR%f~zw^}XMrt3P%=ko&rwyx_$6h&g1Ca2N)oNo~dB5Msy?gh3pE(j< zZ$p-4B7aE|IXXHbg#5M4YPHI)v2B}(qL?T?R8^Ja^Lb*LCW|?}&$DftNRkxW+Q+@0 zi-=S(_di3Ya@h19hbZ^kwoR^IzaF~}cVBaJbId4$;4+;%oem7cfFwz*?eOprmSy4U z)vK&cRaF4MwQJX6^`j`tkbCg5y1I(HckiN7sei=kgCa>19zTAJwY9bIixa)BKe(qD z#XG%en|peX1GPeG?cHv7$VzxGT2ZZIlE)2EPF;yxRRuC2h0Z*Sk9cc3wiF3Ie zihso-wzjr{2buJ31uYKSE$zpTAEA~`$7vV_>h(Ih-7cEV=E&=B+_({%5F{4S zZvoMD9g-vsEC73ZdjnH`98^_>Wm#BQSbqo{N3Yileb)T^Jj&%V6h*=9+qVM+q|i)j z6p2M_x7!1P_4|EnZEgAb!yro<1%00PrJN)ZiRib0_)RNnCF3qCz;Pz@>C>ms7f>t~ zasK@I(DB~Ce;*GYK14pBAE>+skzJ;PCKp zXc2H62Xk|C`0(KaDwPVm7C>P5LT6g28;THNL|*=R<;(OQ{Mn14pRn-A8ytK0dFcH# z%%PuAVNujzJGO{X1&b3O`eh?gX@4{tv9lt-XGMAWu|@O?s8v<<-JtiTglQwoa;%`< zjjF1VUq)=7=oe7?`9p6?I0;&<7QTM{%J#R%Mbk8_udlNOF^t$Ej*1UwXJ=W#HA#G! zlvb;S-@kvyD$0KQ_ARo20OBnyLG?rLRzQ;a;b|fAsW5tq%d#vydGZ97Wq;w>vuBu| zp2p0~3`9}H?CdNGg#rqN0vLSwOr)iq#^?KOd-Hjc;om5g6QB_s8Sx*!Hs3oY=g0G16 zdYw(b7cXAKK6vCVs8UL$5`T7gcgH(naKiBwabsfx<#HKs-n_xy-X2WTgs$r>>u{g^ z^80xGo?FBy#naP8Y78nqbrgh89%L76sP2bMqF9zIXX&(o&w2uRsh#bg7k@INS~gK?{Y RYCZq}002ovPDHLkV1fzAAhrMi delta 1616 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 delta 1532 zcmVIe*njL_t(|ob8)2OxsKp$N&CB6((AVAq-KC1gOGAbf}P;kqkzt zssvI7CKhC-R)S8I+M#1B6{nS8fp%re)}eAFO1niu3=B4EfvTilGDNC9;pug#&YvCZ z#Bt7{P5qNH#JSu%|8wv8y}OG*M1+*C`0uI*&<~^{av&9v1AnQA97s$=$8k_76d(u! zMn*-rA_r0tIgqG`EU})On*-oaz}MH;lQi8^ z5=*uVg#rc!1~5B23)3|5MUDr+ZCR z)xLWwGZIO*U%Yq$S(b7A`gH(+ZQFSB<_(wRI!f*R=+Ps5{P?lszDuQ2ta_fih-YVK zFbo5dB)QkB)hf=<&oMSO7Q0{DwlO+7ikX=i=(>(+9<{ zI5_BBNPpf_TUAxcX0vpDe(t;0?B1Qg5_p!lhoLA++cr^b&Ck#KYX5d{7g13ZpI}UY zZsMV)X#}9$>IW=u{_qEe|uTkq_8?t9QQje9&~3m2_iIVcV{ z!&aBrSS-sTNs>ap6D5Q&xX#3Kxs2iAVV^6%fBzo2TrQTIvF|fi4&(Uv*k?D0v9U2o zl7ECoqk(F*is|WTeE9GIH*ekyY@f^Jkj-Xsc6QcwoZLiY@z5(6i-%tK?gSPdyfHS+ zZaXrW44yoBf_lA<$B!T5=;$a^Krc}$D{dmP8}>dxSUi02;6bcDHBCdkUXT6#UcpU7 z(=<`9*L}gACB@#Yf~c@6r=2TjGMPyISAQxMY;0^mQ4|=4fy2YYNaKj&MchOzm&?8z zX7TLKojZ}-rWrPiTe&i0a&i)lMkDk|S}K*Wv9SS7(_Bw^`SNAUK7%Gj7+ge5A|95@ zWdMle%514EC^nW#CDdv)XqpB9xOeX!L{Y@i(b1)}#*41&ZN0#yeUi~0mOeCZiGLzu zir__26n8HM9qh?8mwe1V05`2+7<2^J-HYv$tOg1&zJ8fy%?u9GN= z9ocKuS0`m37ZH=Fm*c==E4Ez{9>hR` zWfC4pS3eu^jfcGW^yyP9+i%~#jeivmx)w30HdYj+Z?^)1h$SMMX|G`f{DB>{=jV>XCfMgfsv6B--(ERp(i5RwvB~_ z1?=wbf`}lBVtS0EQ>xV}u3fw47W2hoG5Y?+UqGmc-p!qrl@*MRjzSQGSbrxA%H^`J zqRHiQXfzs;*Yy5$LPeBi8LFy6mSs#$P2uU&rywHtWC7ca^X{T~U(IpPyCjy&Y6%t5 zaU3i!FGG@~u8+YLi$$2G>2=0H(=;(WJREJo^KT$53xD|VA?@w$UHUfw!?G+AMe))C zDgqW#Ez6>bi3zt49%p9$Brb`_$~Q@ps9vwT{{-mvoQtf`7mGE)Bl0000Y3!w{;Ie$}0L_t(|ob8*xOZ!e3$KUya#HkK~aS$v1Ks-?gspzD3P(%bp z#a*l*C^&Q#{0B^&qb?oANvDXvrw%$ME-JKiu!CSDLW9G7hYtxh)}(DNR!d&cCB59G z@4M%@=XoyWD5Vqup7^iY4^RsPA~GNlkpY2-4Ddz7)zwvS9Dj%A=4PbR>4Iw<$Km4Q z!jECA26GW5NkSwNK|Y@cAp}E1LpV4%KqL|Yr4*{FVtIMl61OIxjM>@Qp|7v6lu}A_ zxf~6L!;}zWU89uJ_4Rdnetyn+=&HeVB^ri-o0}WtaybA%C=`M$%g{6phlht&yPlpN zmcv#ZrXun@kAJ47CMb#m;Gd|+$H!P&TEf=W7Sic748wq?X&4+FWI1$oVZF3fRi%O; zPyiGFJwHFE`Fx&^kB=8zt0g!}gS5{pL7d2dKtu-oh=`ITf#W#z_V!vkcP-(&h>|2> ze}5m_+uP7I4R?2Ueh>Nc__=GDJ9Vw?#&&#NiHf42v463VSxl(wI@;RWzU1ZhHj|T+ zWxEZ-FfcniTUk2l*X)?F;l#uQll~M%p@JaLR4PS9QKSIq=H_NWn_MnO2_ZCwyQ zrT63`{IM59qpV-Z5IxVVVz?d{TU@-%G@h@$wVdQ%DJDl|l? zV>{)pYF|WT;SUu>v2yLtpJIK+VzF;0%$~OcplfSu1=sAp)x5`k{X2XS(X1nS^@rw< zaaz%(PFO4!qX4XD5=GHbB&Uh7dWKT1 ziMfcTKXfv|QZRq0TR%L{qrJTynx+-~Ue|T>_4Oehk7H$J1%wcso}RiM+uq;bqp`8k zaRN=4i^#$s>bj28)6I=Kx<(l(Hv-sfeN|TIH&0;YG+w1f-N<#=e+5So2_Z-%5+H;Wm|`pzv)X+AYlZz|_j{k~b3D&`K0f#@xSI3m=qLn1fGo>J z&n0A82K|?VfB8H=KNqBcpAUY_nq4j6Dq=hyM<^63TJ$W3;o)I~LLo~y!*Vc?$z(iN zz<&ddB1)2k{{DU>5(&J&zZd+C!lYDl4uwJ(8ymBHU^1CRU0vO;KZGiYVrh(7Ofbt@ zW@_iP%=Ni)UG0(?OM5KKfcIGktrlTd3++UCS+$q%x$ zC+DQs$$jU3Nf|;2fr~BvYxf0o09)~DdsFuI_HcT7ilLz)0KoF{G7b(7kj-Wh4u=5%e!m~Ry}h)TZW~n1Sy2?+-`}IJ zuTTHX@ArQhSAQ%P5sSrWF5OnBikQpgaCdhHS(X6+i9`ZtXJ=qp7AGes002P{(ACwY z-<2H!P2V8PGV%F*1ONd*QmGUn1e8)u8Oj!%KY0PEj7Gzl_d8`$05ZTuu#+hzjK^MvELrgqc_?Jm?zw_GlNnKPfy z6Q9r5vKiOY>|O1Mh&246D2jT%U3(bK8IQ-m-7xK1YUkM6+WPcay>HddX*ADwL`1C+ zVb>pOKgR5iZgj)6B8YZPJkOhoWVSK&IN}p?xqlo=rIKxb`1tq;NsLRMDij$KQ%*@Q_Edo39 zaDN;}Em(I7M?`GIysWsszQ*O{rKu?cz~JB@dU|>+uW5C46>Dp2U|AN&$Hxs_L!;J2 zT|~_v+U=oeKh$a-kH>?Nkr7CeWcaLNb}e=H@0ijzcDsv258sJUpPkzu$BN zHK>b7!yhV&f=njUkSTjS9>iiXR4SD(4}SqgQ4k0OaDIM{a5$`w1)%qQj8Ih-g+js7 z3Un-=-%VgQKCJK2psrVAc3y38Tpt@6^?LA4%xN^A6^=BjT5U!dWh0Hk^E|a;hgA$& z4^>XC^o-nOIv0D&HCYA!&dWNQ4~y1Ph(b#W;_b!QkMaX*K1qU@9WV zaY(1r;5hD+DaPY*eM};e(EnCZf7JWE+WMTw2w-zZ*Mp{I{GrEQFHcsy;xXS(0yPomqT}V_pfh4HH1+bqZJdhvX++G*)4O` zR<7G!GNXx`_EEr1`zYXwNC8(w3b-Otz!i}K{{!@!c7LJKMrr^6002ovPDHLkV1fWr BlA!54wfrx0~h#-hUY$PcXL~#fWqmaVVDrJ&7R+fU5 zL2ws;NTm_mtW6Y+HW32ZwaHfVim>~3^S?29FZo^$Y_T(U?%X|-`!iPwV~k;hp5m|n z+JHY1BU1Z-5vhH^h}1q{L~0)}e@=@$sSCdU$wfl96SZQA*jz$46Itv|DePRE-OKCsvU0gxH}^-y)MPRVr_+grg@vXv(P$KFYiscP{lD6aQi^am zjFXd-y1AZ_s;Vktu~@IvS%xG@xV*eXAP|7V;lStTXI;FMBnhG@_AK`A?Cjv`>I!#v zcc$@QlbT2*KnQ`|Zbv4Qe=*HTl7!{uWqf~so06PngtnFt()EXmq6k6=W@l$nEEbVW zCP4_n?(Qxe4u?rLnM`7AY^-h^s87U%5JVyo(^##IHk%D@w;Snn+N{iKENK)|Wm#q( zk4H~b+B*Q|@p$w&SE*E(&*x(t$FbGbRXu?;N`6+L>7|r5jB!Spe|E`~=XsMY@p!y0 z(bdY=?%S7`IzB#*_xE@3JdaAHf~Th^`2Bv^Y&IMpAEQ_-A`}WCkw^fjx{=4@!NtWz zSNpxbzCw~D-SrzmRaLyby@68NQrFhj7J#ak?d|QMP$=kjHp0xz3`(VvDb)NCiAoRz z6pKZyudg?i`TF`of2C4st7~Ot1wNk-$z&3Xi;FD@)le)JkyWQSWm#V4=g+kce+yuvQ9fu>1<1jTfrN0k7soICP za($qhsV65VAxTohc|}n$H#di9G>YBbT~JCPieg>4REw9Fe-}8NPSb%7HK~fCKorG} zT;FE1VSRlaUteE!^{b*N@Or(txw+93s&+_q<&puasv@7y*L#W8vIT(tP)b=W7Bh_j zVCi&PFR8RAl}hR5igEqL#f521ySKN3v1F^=qun~=6}9%8wDq-iHY>xLU3o3nse^z* zq0qD*ZHIU~f8MjkPqP|!C`tV-c%J`tLr4&Wrib&tB$ct>5!;GT#w^^ZjE&#f*;#CF zZ+CQOPb3nihBoj|Q`@-SI2H^BJ2k6oq*5vT{QPv)q<(&Wh9C&dg{+)VE|+5-kB41f zU$byH-0?c&uR@k(76=4bxm?!!2>bi{?BL))kCQylf497E4>~Nnf1?J1)(~m;P)b=g zn`P(c=XGn1u9(Z^EFIdQ!BU-?NF<;rN?ilt=;#QndO!^yp68KDrI5?zP%fA8@bI9o zjYJ~)U0c)XcDq~Njs_halPZcL3WWmB&dxw7?WoZJR1actaS=Sv1E>;~&1Q81GnowL z=jTx>Tb1-K`s3pxmX?+*e#!u$-A~zAXy4x6nq0lxzw;Q2Yb}dv@f9tK?O_37Z1i7$ vy~a@A{Rb5zQu}}rseQnR)IMNDY9H`7a9jDr{l6Bj4qRG9HA zm>4A{miQ7jVqB>UCi1e>#Kbc74CXw8Y18r!!gDJRzobLYJO9&jUDvrFj4_5WL*bvl zy?{|>Ebb5)i#tTd;tr9qxI<(tf9??JNnA=P0)YSsAs~d{?Ci{_lVurhw;S z>}SYwQg+hV(d_MN^@zK{Ds;V-c=UJ&#YFgiyf4I7kW^sQK zg+hUG9LMhN?%KBTdc7@$>1D1~8#IzOHCdzcs!PJbG><;gb?iR?pn&~*J-oa;PH5n$z-g9 z^l+HXqpC|=i838wY3G{>*U2^F_gzP!(nW0Zi3^uu1yukahREz zG2TZ;TwQ>6CIR>o*KW5%mgT1PwOS1e3kx_rJVZ1a1<&)ye`d1{VOBlQ&(CnVT$YU; z32|$+8nW4JS0=&Xa3B~AHWjy4tHI~<;r8~{aK8FxHH29vD5WSCi;btIpHK&Y@$fv) z5{ZPR3;@eyGDaw-Kk0PZ2yx8)&(F^-WqMAa6XtNQex7#JUw!L;m)^gAt*!DVs;aWt z+1ZBcHeu}dfBr#PsZ`)_INI9SR>Wd4OiWC46$Nx6nM^hh)jEH#qluM&_jD26=cEU2&!wt=R=XSf@I5;=}Aq1w3~%&lA)q zT?UEGX2ZqB1@ifP&wVMSczSw*BuT9s^|DjC;l8}Qe`LX6uXC=?2CI-SVp^Z4`UkI~;|vtfFAy5ZP;et!O#t88C%y9$1ixKa#(w!F;-@nbxrLv~Sll5p7I%n@#T_DJafisi)a!bWmXLTz00000NkvXX Hu0mjfK-q89 diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_liminf.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_liminf.png index 33435b68a2a964ec55adbaa744842c4a96ffe6e5..e02ce2ab74adfd2b8481142f5110bdc6581e6420 100644 GIT binary patch delta 1347 zcmV-J1-$yk3hD}wIDZ8kNklUI4^QBqKW%^y_wdQ`5PY&c1fMJq!G9;qL-5J+5L}TpIXMZ2 zVZbm9qS2_)uW1_k`uY$I2J!ax_T|PUlSwcPgU!v&s`QxcFIShoMqU2={M>fT(9jSv znM~QX&Cbr+>a+!Q2}zPD02+xzjJ~(GH_CAwWm%S{(`mP=Tq7QjTjnemJkL{66lp%6 zr=d`&EL&w+rhhEU(zCNOWBuW9_|uqtK2HY*2I$$@Sw;4hBk!6l-SBE2+iH6~wzjq^+OOR}RaL}dv5I76S+01_wSToWbaZqe5D4Ju>B$n4RaM2t z#s(G^7Al&f5WT&w$B*3z)<0z8f6PnHRiBq5v4I&Oi$2U#sGEqH!@wk1F>QFV27VQy{? z;cys=qF`@t&rz=|%V1d+EiEm!-}_|!hNfvaJUn#01&)l2;N|7TLYAg!7#<$R($bQV zZ?)T_EKE5A%d+(J^ncWnlSCpB+x$YWtC`#W{=ShT>CIfWv71wt zWsA(w(Gd-WLZAA!x3?{}6+05^C8I+7N|n{@N=)GvwEyqPsuuBhyz1h%EX%Z~r>7+8K3QLYY6x>n6s6x(byrmtO@B>I zU>F9$U=ZWu}4cY1GX@o){tgfyaI!hH(e-gfhEWL2Kv$F$2h*5bj1wjzd)zxJrlZ}my zxW2wNh`G49KxbzsUS3|Xva$l;qww0@-TfWQ`1|mcuc>~ogx_~a<}I(%A3T)UUD%nE z>{7YOPXa@!|1T1+z^@H@2tHXJf=`x*;FIMc_+)tq{{mS$fcY=uh}{4H002ovPDHLk FV1krZmbw4{ delta 1311 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 AZ~y=R delta 1474 zcmV;z1wHzK4CxDyIe(i;L_t(&f$dv8Pup4;ete}W9V#-KA;J!qtQSn zlL?gB+1bIPM~@)O@`L6Y85x19svXDa3wefN;PCLUA43f#>h(Idx3}@^*)xodjp4_S zA23bRBeT1^i>@c}7PM=|Y zechJJWHLB9ID4*+L7gX)HD; zTSKcpe)8?+?YqyDBnhTzLJ$O`QYnAS65fQ&xbl-SzTR)uIsMca&2v` zuj2zv^B9DSiwjgL6;UV!j@#SYw!}GceSPiQKGft%l7wQhh-$S8 zL4OcD1%ihnl}dr<`L;60$H(A#zHOBGr!dsy0Zjsl$VFnmt2v@5`nDT}fsY?Qwl$eR zGq@NZAMZHN`uaL1Cnq5Y0(4#X1bIPt`t+%9`%sftC=_f3B}qcLTn5kcfo7yzFtZhO ztJr~QXEK5RBEz3QfBF)_qTQL98EkHDLVuE^Q0W!ZHza8Xl`!K)h3D}ot&Jw+IXI)uYX^^ zk{}44ki9jGZw;IC`8?%vIhRap&Ci*dNRniimQGJk>FwLME*V8pTzdG`4_W%+oD+`l zJ_vrLF{gg5DT;H?{L+gsrM9l}yr{x29}GgH(V)xA%bw>6lQ)JPt6dIA6xTLANF)+S zr_(+4WqD|;sqYqsVIY^wb@Yibd4GL|q9_;}8|zql3xZ)7$Y!(n{P}a+gdae6<*{zy z^c_6UlcFfTeytUSLLtz+IsF^+Ax?knXR@5n|IgQ1`}_Mn&6UsRLz~@!`aIJ#DV`gq&CbqJtyT+s-{#y5ww_*JlnxsP99HpP9bpeq%@t(y`r8iY7(2`aGt c$%`<41H|?XfuWDm$p8QV07*qoM6N<$g3pcP*#H0l diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_oiiint.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_oiiint.png index c06180829cdaf7abe7bcf19e04aa1eeb2e50966d..6bbca4e764c2f85be853ddf25cd53c6bd016f5ff 100644 GIT binary patch delta 1636 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 diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_oiint.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_oiint.png index 667b993fdd9fa5eefe031a7de962ec4a530e17e2..68b0c11be0e50ee32e0999e74f66e56d50e8f2e3 100644 GIT binary patch delta 1591 zcmV-72FUrg4BQNmIDZBXNklHW86viLFY851;GITIQR3kzM473C6s6{ej zsMH|?>d+-}h6<#>gv37p5_Lgz>c_$WOC*FkRJPQrW0p#-)C5trhz2hiA~l|3mh%pM z@5M>&#PLT0ef^U%7tySeAu*_wFH+ z$zXbVI*uXq7m9(kwKY09IUypVX0u6CQ&S|0B5xxi(lm`$R#xIL-*;l!&U<@%I6684 z0HjhWEH5tuIDgyDj9a&E#bJ6N#3JJL>({ZdvBBT3udicnZVqqXzUBT=*L6I6_%IIh z{U?s)-DosOk|Y8^0Qk05RrOrkML-}*(!Q`Habg4{B1S;0BIfgX2!g;55ZksfJv|LU z5b*5Tvp7xnl~_b%Vhs%qVQOj$rfK5m&!4z+=MD;m0)He)LZwoP!}MT?eEWCU74%uurRNv0r+shq1efpHg zqP<`kMqn2cxroQd$EZ{)kY$;-l}aU?oSYz&$pq??xrb`CibkUWNs{pC(IzgnUdQAi(7g1H! z7Qt8nBB(zsm&+uIV#kTO`QV^58V!ZMQ54+1efwN!;)Z2eFbo5elarp4Wj4E!N~Q4P#S7GGH9UX*9Q*tGo_#urT}0cq zaeREt-?RA88BnwMaAszPxBdF{%h$x&cYnhM==~tDh^bTx_wV25TiG;C)M~YsfVx~R zLli~axN!r(+3GqxJmlNm3zqeC+sdg_iuc_K!!WS8xCm8MQK?k0ySwXWiY*C4CqixK zg@pxt{`?u++uJCY%Psy8IP+I*JKDC5+1XiSv)PXR3;4aNJ8fmg&6_t-uh-FNG=E(G zzO=N2#l=PFy3SYi>({S4_Gy|Xn$4zf5ksHO&TzyT#<2LXP$=-n0$yQAJDR5XeuThI zQn$V}O>4V8?x^+vC$#sbdF14#3HmHrmSwE0tn?Ivx?$Tk9zTAJ z_wV2P3V}Fbe>t}TgVP`O6J6H>7do2FCOvxe$hY5i5?VyJ6scQ28z(zEJAv#5{T@*S zBD(p$_Hx)oCy_M66UQxO(+!%Z-SOLSIC*EDN)Odz_KhZtlO*I?>TF8>3?(@BO@a*O{xEM+|IdN4&T0gL$z8xm)wtxjNr$QAE2{X z^W2M7ycy2t6{cyzvaATFF<3lBv~3&n^Yf5pIrKHSY&HwiG`SBnO%tP|qg@{p{55z* z;ZL4Cp{=bg&&qMPLTr0g$C(O7b#LZR;hcypeUoLGYPA|K{f8|m1Teh~@i&m9eG!nP peG!m|7y*fh5s-)&0f~qa@Gt)JrFb94MeYCq002ovPDHLkV1ksq74854 delta 1553 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 delta 1474 zcmV;z1wH!p3+W4xIe(i;L_t(|ob8)2Puolw$Nzpsl}bqIz+i@mAVOQk2pAAjm_j0v z2vty82L}g;$KwEia5#+q{(ja&cMYcI ztm`_?&(HDh-G4jtS~whj((dZ&3JVJhEQjtYOhqgfi#R(wgQjT!fK)1l-Q8XAJdb=n z4*rs~mPAlYn|5c1#y>9y6>RhC1(2slE#w69&fIFSLK zhzxiZ5mTwuqrkh@=(vcfR0^u9LKH^~ySqCQi^Z75g|aLYp67|G zszj0`+nCdux4XgZ{T&mLnlcTzS@hM&EohoX-oJm}w(BUBN@QkchTPoTIKHQ2=3J>% z007BkvVZNqoVbN_I*m`CKDC`r3W9*8r6sJbtvSD`t!cBtn)(TX(9(?BLEl1Zy5(~D zNuQ-si3Ec|*JfNxt8X>XC<1u!ht+Bop->2kL;@c^d~mfL@bl+SD2jqaBJrq3X~i%MTwPs35QK((ef##! zeAZMdg>t!!OeRyeeK;J(_4T!*P>G3%vMgh6ZqEFBdwUy#Aealm!oq@CPi(c{YPH(1 zfPY)5RB(59*R-!_G>TX(hK-F4OixcY6p&J_R&jZG*|Z(=)!8r%TwY!x5D3(Ldz|)@ z&*vXa#!H2Xh{fJg#wDjB2-mHC=>z!v*^(3+eE); zGx2>sA4Wz-peTy%|8-r*`1m-|=`_B7{|-SAu(!9@)JI=jTwq{ez?n5QU3wg14JGKR z*2)TJg~pmr@0BFUwyj+nS1)C>`!3HO;#dbq%^r(WYWHZI_EQ@i*Lx1@UJvTToPT!x zHKQXNRc`ZTyKKZMk|Z%Z5YQ}!tc9tFG|T8#{m>flyTwg%z*Iy@lFV{dw`fO5x7ii5 zIFZJ6larI?5t43@&1UiY_itB4*^`qK$g3p)0R2={eC183GD6d{eQCp0)TgngaO_O2nIZ>h}I*=^|m};BhM=0%E}5R zCnrG&K`xiW{QP`R94mP?5p`Y1(b17vm5D?mxWB*eiDM-VMN||8gM)+MI1aP3v!*F- zZf>?bP_bBquIpxf&gb(X5D2)cc)v6niYN#Ia=9D?L3m_}bT0+?d*aLPQ-ACCto1pc z&*!M%`5I_y&e3QTJkKMW&D!ouWV2b2haCLL=hv@ak5WME#t+>_=mnaJm`uDe|_V~LmcF~Cdv7~qM>08c~)cp@^u c6OjS`10sS+songE;{X5v07*qoM6N<$f+nxgF#rGn diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_prod.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_prod.png index 601a2102e53118f0e84d891981cba765409dcd9f..1ff2a7b5ea8618141e6244178d752cbed4683cff 100644 GIT binary patch delta 1444 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 Hu0mjfN{Piv diff --git a/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_sum.png b/doc/images/jkqtmathtext/symbols/jkqtmathtext_symbols_sum.png index 3a5536045641e43f375c45cc85d86fb05545e325..ca90a6aef0dec563fd811ae38863a74f98caa149 100644 GIT binary patch delta 1362 zcmV-Y1+Du33i=9=Ie#okL_t(|ob8&wOY=?~$KU;e)Ts`F=^)lY5i{r@icb1;XmL>7 z+{L)4P{q|h!E}$fbZ~GIom!~BCI=mpNd-d(9RynudN_QZK`!4mw)xTAW2@u^S(3|L z^1jR6`}4U(h=>ppi2vIC0Kb7yL;-{%3Lq3w0K!CETU$dU5`RHF9*1d~b>||H2+q#V zL^aiM2oW)x&0=zL64h!IvMgh2Y6=Gj2bi3k1Q9{kb*!wcSmORVNC10#d-VGHN<>8E za+wl|1j({&og*UJ*w~I&s@82}KA#h_^#48y?D(UDbdbaXUm zQyoiS5u?#4`hWWRkk971rUlTfR;rp6be=};`d0W(<0xY?X)an zDwVQq4X0Qvf{2=NEqRZyf-di>s#-Qi zk|cV3d~__YC<>)gsX%S!^LeW+-hL*NsVh@1mr0go*XL=5pZf!gX!nC|0_F4hKq7Ka z>f}4ibg#eM55)-*p8P`ElfnB`uWjqwD`f^K~7VL z+elRuB?y|3Kh}s{Mbs}P6F{VZtdC^Be!|ltz(3m?PxTLROj9%UE1oM4?cCX_}4# za-N@`ad&su@Y+8K`*d9g03043Vqjn(aD9w1oSvRSmgSDjNeUOSP$*z~dmEWd2FYYn zNPnG|mzOv{KX?3;0ieIXAKl&EuJx_0tzl$j1c^ifg+jqoL?cNOhK7b3U-USydxHB# zkqZjZ|0}ASZE{;!_;v1MdA&})mX~u{ScHk_W%X=@W*cA4P*t^I*=n^)^Yim{9l@=W zQ>TBc#o@NWi^=w~^JkBO;2|2~_u0*Ht$z>XV$^zCIQZIcGuymJ-CmIBvuD@W*Ih?d zqiDn{s;UZ`QobeZvxj0{9!m6_*$72ZJawuQUXvw(M6^dJUJp^p0XKpO=_lJ1$l`2n zZsPp>-1mKM5rrr;O~c#UTT4mVo0}U?CLBQP7RMgQ`#FBw9&}6l&WtgbritOS5LlS#+jx}QSZMBLom#Q69)hzPk{4)gQ#zE{ysp)Dd-DivH@ zTv)lm>FH^Fe0<>c_O>056By4T8is**JdQ{tg1Nal>r>p{-}l|<_4PF>m5P;GibkX8 z@9)Ry>8bC!Iswlj%Cd}HE(ckb>wi8)MNzCWwLiMs5Bt2=+uLj92BXnv^IY8zz}M$I zJ39+WlAviCvf1pH>zbxD{e|S|>8UQuUAt$&7;Bn({|WdKac5@-u~-bHQYp|PFg-nu zSS)4<#~4GYRC3%u>0~^Mn9XJ}Ha3P_E{FH`_qw0jIbJ{KSS*IQxjAbNyi2~mMpsu? zNA90^!YwZ3sV@El5s#U@{Ji8uZPGPpUF{|e`vee%eF6wY6hJ7V074N35Q->(zc&ld UUHF9gtE*5|6`H0Y z5{ZCe7%&WjtE($o)lCW24LZJ|e$K#|}ED}Np5k-+iqfr{w zO&v2d8shl)7#9~8`19uv03eY_Ad|_USS%tEi2wisfdJ;`=V??obvPc*?RFav4-Z&a zSTODd0)a2(YJasFwzs#PRyUP67O`9|;y%*@Of zz4F)LbUsj3mGC@I01yB~Q4~VR=NzctOQ+M0=bdSWA;b;)oZ|Y46mUhPfGZ*e#ul+q zC>W8*s8=i&qxlaLXKWFp(J1oye9ygNu?RxQ&`Xje$A2HJ(;a4dy2%1} z)|Mfpl|cD?-jRrUY_7-TgHTnK`2Bv$|KlU*0$4;-N zCL$rd^P^R78HN4^GMhTAdTMt#s@v$k*KbpwuFQHPRS`#>AIGt6CXimns^0#^$ZDRp zY8a}{w#Vba`T03`o(J&hOCB5?P_g~=^n_})ihpP{+LLzcM$L;{6E0gXn(R6w0ptA)qM$AQoON!VAZQ~&^{r>91?+X8d$c| z>GbSA67s+6WY*~4>f-2bgB>S(e}CVyTz`KQ1RK$i{$9UxJZP(;+oy$zU;Ay&w%(#v zKS;=D%kJ&%S@xi~<{s_hH^jQ549s{N=f#C_|5sJU>78WVyTdEHq6UntJ~Uj3naG(GggdMYGv- zvZA}_C?4y7i_EEqUkpixW6mUhPfGZ*e Z{sNM_z4iKz6Jr1X002ovPDHLkV1mpDk>mgX diff --git a/doc/jkqtmathtext_docimages_formating.jkmt b/doc/jkqtmathtext_docimages_formating.jkmt index 6522b3847e..0f89af9a4f 100644 --- a/doc/jkqtmathtext_docimages_formating.jkmt +++ b/doc/jkqtmathtext_docimages_formating.jkmt @@ -5,9 +5,19 @@ jkqtmathtext_bold.png jkqtmathtext_italic.png {\backslash}textit: \textit{italic text} --- +jkqtmathtext_emph.png +{\backslash}emph in text: \emph{emphasized} non-emphasized\\ +{\backslash}emph in italic: \textit{\emph{emphasized} non-emphasized} +--- jkqtmathtext_sc.png {\backslash}textsc: \textsc{SmallCaps text} --- +jkqtmathtext_uppercase.png +{\backslash}uppercase: \uppercase{All upper-Case text} +--- +jkqtmathtext_lowercase.png +{\backslash}lowercase: \lowercase{All LOWER-Case text} +--- jkqtmathtext_tt.png {\backslash}texttt: \textsc{Typewriter text} --- @@ -93,4 +103,48 @@ Schrödinger's equation: $\left[-\frac{\hbar^2}{2m}\frac{\partial^2}{\partial x^ --- schreq_normalmode.png Schrödinger's equation: \left[-\frac{\hbar^2}{2m}\frac{\partial^2}{\partial x^2}+V\right]\Psi(x)=\mathrm{i}\hbar\frac{\partial}{\partial t}\Psi(x) - +--- +jkqtmathtext_fontsizes.png +\begin{array}{|l|c|} +\hline +\textbf{Commmand} & \textbf{Output} \\ +\hline +{\backslash}tiny: & {\tiny sample text} \\ +{\backslash}ssmall: & {\ssmall sample text} \\ +{\backslash}scriptsize: & {\scriptsize sample text} \\ +{\backslash}footnotesize: & {\footnotesize sample text} \\ +{\backslash}small: & {\small sample text} \\ +{\backslash}normalsize: & {\normalsize sample text} \\ +{\backslash}large: & {\large sample text} \\ +{\backslash}Large: & {\Large sample text} \\ +{\backslash}LARGE: & {\LARGE sample text} \\ +{\backslash}huge: & {\huge sample text} \\ +{\backslash}Huge: & {\Huge sample text} \\ +\hline +{\backslash}userfontsize\{ptsize\}: & {\userfontsize{5} 5pt} {\userfontsize{10} 10pt} {\userfontsize{30} 30pt} {\userfontsize{40} 40pt}\\ +\hline +\end{array} +--- +jkqtmathtext_mathfontsizes.png +\begin{array}{|l|c|} +\hline +\textbf{Commmand} & \textbf{Output} \\ +\hline +default text-mode: & outsize: x^2\ \mathcal{O}(n^2)\ \frac{1}{2}\cdot\sum_{i=0}^\infty k_i \\ +default math-mode: & outsize: $ x^2\ \mathcal{O}(n^2)\ \frac{1}{2}\cdot\sum_{i=0}^\infty k_i$ \\ +{\backslash}displaystyle: & outsize: $\displaystyle x^2\ \mathcal{O}(n^2)\ \frac{1}{2}\cdot\sum_{i=0}^\infty k_i$ \\ +{\backslash}textstyle: & outsize: $\textstyle x^2\ \mathcal{O}(n^2)\ \frac{1}{2}\cdot\sum_{i=0}^\infty k_i$ \\ +{\backslash}scriptstyle: & outsize: $\scriptstyle x^2\ \mathcal{O}(n^2)\ \frac{1}{2}\cdot\sum_{i=0}^\infty k_i$ \\ +{\backslash}scriptscriptstyle: & outsize: $\scriptscriptstyle x^2\ \mathcal{O}(n^2)\ \frac{1}{2}\cdot\sum_{i=0}^\infty k_i$ \\ +\hline +\end{array} +--- +jkqtmathtext_mathstyle.png +\begin{array}{|l|c|} +\hline +\textbf{Style} & \textbf{Output} \\ +\hline +display-style: & outsize: $\displaystyle x^2\ \mathcal{O}(n^2)\ \frac{1}{2}\cdot\sum_{i=0}^\infty k_i$ \\ +text-style: & outsize: $\textstyle x^2\ \mathcal{O}(n^2)\ \frac{1}{2}\cdot\sum_{i=0}^\infty k_i$ \\ +\hline +\end{array} diff --git a/doc/jkqtmathtext_docimages_symbolsandencoding.jkmt b/doc/jkqtmathtext_docimages_symbolsandencoding.jkmt index c17ce06ed4..850bbb3bd0 100644 --- a/doc/jkqtmathtext_docimages_symbolsandencoding.jkmt +++ b/doc/jkqtmathtext_docimages_symbolsandencoding.jkmt @@ -11,6 +11,13 @@ hyphen: - jkqtmathtext_greek.png $\alpha\beta\gamma\xi\chi\nu\Gamma\Delta\Omega$ --- +jkqtmathtext_upgreek.png +$\upalpha\upbeta\upgamma\upxi\upchi\upnu\upGamma\upDelta\upOmega$ +--- +jkqtmathtext_textgreek.png +text: \textalpha\textbeta\textgamma\textxi\textchi\textnu\textGamma\textDelta\textOmega\\ +italic: {\itshape\textalpha\textbeta\textgamma\textxi\textchi\textnu\textGamma\textDelta\textOmega} +--- jkqtmathtext_char.png A: \char65, circonflex: \char"109 accent: \char'351 --- diff --git a/examples/jkqtmathtext_test/testform.cpp b/examples/jkqtmathtext_test/testform.cpp index e32a9f52a6..615f75a477 100644 --- a/examples/jkqtmathtext_test/testform.cpp +++ b/examples/jkqtmathtext_test/testform.cpp @@ -4,6 +4,7 @@ #include #include "jkqtcommon/jkqtpstringtools.h" #include "jkqtmathtext/jkqtmathtext.h" +#include "jkqtmathtext/nodes/jkqtmathtextnodetools.h" #include "jkqtmathtext/nodes/jkqtmathtexttextnode.h" #include "jkqtmathtext/nodes/jkqtmathtextbracenode.h" #include "jkqtmathtext/nodes/jkqtmathtextdecoratednode.h" @@ -15,7 +16,12 @@ #include "jkqtmathtext/nodes/jkqtmathtextsubsupernode.h" #include "jkqtmathtext/nodes/jkqtmathtextsymbolnode.h" #include "jkqtmathtext/nodes/jkqtmathtextwhitespacenode.h" - +#include "jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.h" +#include "jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextnoopnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextverbatimnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextverticallistnode.h" TestForm::TestForm(QWidget *parent) : QWidget(parent), @@ -41,6 +47,24 @@ TestForm::TestForm(QWidget *parent) : "\\end{matrix}"); ui->cmbTestset->addItem("text: umlaute", umla); ui->cmbTestset->addItem("text: umlaute and fonts", "rm: \\textrm{"+testTextUmla+"}, sf: \\textsf{"+testTextUmla+"}, tt: \\texttt{"+testTextUmla+"}, cal: \\textcal{"+testTextUmla+"}, scr: \\textscr{"+testTextUmla+"}, bb: \\textbb{"+testTextUmla+"}, frak: \\textfrak{"+testTextUmla+"}, "); + ui->cmbTestset->addItem("text: font sizes", "\\begin{array}{|lll|llc|}\\hline" + "\\textbf{Commmand} &\\ \\ \\ &\\ \\ \\ & \\textbf{Output}\\\\" + "\\hline" + "{\\backslash}tiny: &&& {\\tiny sample text} \\\\" + "{\\backslash}ssmall: &&& {\\ssmall sample text} \\\\" + "{\\backslash}scriptsize: &&& {\\scriptsize sample text} \\\\" + "{\\backslash}footnotesize: &&& {\\footnotesize sample text} \\\\" + "{\\backslash}small: &&& {\\small sample text} \\\\" + "{\\backslash}normalsize: &&& {\\normalsize sample text} \\\\" + "{\\backslash}large: &&& {\\large sample text} \\\\" + "{\\backslash}Large: &&& {\\Large sample text} \\\\" + "{\\backslash}LARGE: &&& {\\LARGE sample text} \\\\" + "{\\backslash}huge: &&& {\\huge sample text} \\\\" + "{\\backslash}Huge: &&& {\\Huge sample text} \\\\" + "\\hline" + "\\end{array}"); + + ui->cmbTestset->addItem("text: multi-line", "line 1\\\\\\bf line 2 in bold \\\\line 3 still bold \\it now also italic"); ui->cmbTestset->addItem("text: dashes", "hyphen: - endash: -- emdash: --- \\ \\ \\ endash--within text\\ \\ \\ emdash---within text\\ \\ \\ enemdash-----within text\\ \\ \\ ememdash------within text"); ui->cmbTestset->addItem("math: fonts", "base: $"+testText+"$, rm: $\\mathrm{"+testText+"}$, sf: $\\mathsf{"+testText+"}$, tt: $\\mathtt{"+testText+"}$, cal: $\\mathcal{"+testText+"}$, scr: $\\mathscr{"+testText+"}$, bb: $\\mathbb{"+testText+"}$, frak: $\\mathfrak{"+testText+"}$, "); ui->cmbTestset->addItem("math: umlaute", "$"+umla_math+"$"); @@ -76,6 +100,7 @@ TestForm::TestForm(QWidget *parent) : ui->cmbTestset->addItem("math: std dev", "$\\sigma_x=\\sqrt{\\langle (x-\\langle x\\rangle)^2\\rangle}=\\sqrt{\\frac{1}{N-1}\\cdot\\left( \\sum_{i=1}^N{x_i}^2-\\frac{1}{N}\\cdot\\left(\\sum_{i=1}^Nx_i\\right)^2\\right)}$"); ui->cmbTestset->addItem("math: std dev 2", "$\\sigma_x=\\sqrt{\\langle (x-\\langle x\\rangle)^2\\rangle}=\\sqrt{\\frac{1}{N-1}\\cdot\\left( \\sum_{i=1}^Nx_i^2-\\frac{1}{N}\\cdot\\left(\\sum_{i=1}^Nx_i\\right)^2\\right)}$"); ui->cmbTestset->addItem("math: rotation matrix", "$\\mathrm{\\mathbf{M}}(\\alpha) = \\left(\\begin{matrix}\\cos(\\alpha)+n_x^2\\cdot (1-\\cos(\\alpha)) & n_x\\cdot n_y\\cdot (1-\\cos(\\alpha))-n_z\\cdot \\sin(\\alpha) & n_x\\cdot n_z\\cdot (1-\\cos(\\alpha))+n_y\\cdot \\sin(\\alpha)\\\\n_x\\cdot n_y\\cdot (1-\\cos(\\alpha))+n_z\\cdot \\sin(\\alpha) & \\cos(\\alpha)+n_y^2\\cdot (1-\\cos(\\alpha)) & n_y\\cdot n_z\\cdot (1-\\cos(\\alpha))-n_x\\cdot \\sin(\\alpha)\\\\n_z\\cdot n_x\\cdot (1-\\cos(\\alpha))-n_y\\cdot \\sin(\\alpha) & n_z\\cdot n_y\\cdot (1-\\cos(\\alpha))+n_x\\cdot \\sin(\\alpha) & \\cos(\\alpha)+n_z^2\\cdot (1-\\cos(\\alpha))\\end{matrix}\\right)$"); + ui->cmbTestset->addItem("math: rotation matrix, \\tiny", "$\\mathrm{\\mathbf{M}}(\\alpha) = \\left(\\begin{matrix}\\tiny\\cos(\\alpha)+n_x^2\\cdot (1-\\cos(\\alpha)) & n_x\\cdot n_y\\cdot (1-\\cos(\\alpha))-n_z\\cdot \\sin(\\alpha) & n_x\\cdot n_z\\cdot (1-\\cos(\\alpha))+n_y\\cdot \\sin(\\alpha)\\\\n_x\\cdot n_y\\cdot (1-\\cos(\\alpha))+n_z\\cdot \\sin(\\alpha) & \\cos(\\alpha)+n_y^2\\cdot (1-\\cos(\\alpha)) & n_y\\cdot n_z\\cdot (1-\\cos(\\alpha))-n_x\\cdot \\sin(\\alpha)\\\\n_z\\cdot n_x\\cdot (1-\\cos(\\alpha))-n_y\\cdot \\sin(\\alpha) & n_z\\cdot n_y\\cdot (1-\\cos(\\alpha))+n_x\\cdot \\sin(\\alpha) & \\cos(\\alpha)+n_z^2\\cdot (1-\\cos(\\alpha))\\end{matrix}\\right)$"); ui->cmbTestset->addItem("math: like in label at bottom", "$\\left(\\left[\\sqrt{2\\pi\\cdot\\int_{-\\infty}^\\infty f(x)\\;\\mathrm{d}x}\\right]\\right)$"); ui->cmbTestset->addItem("text: like in label at bottom)", "\\left(\\left[\\sqrt{2\\pi\\cdot\\int_{-\\infty}^\\infty f(x)\\;\\mathrm{d}x}\\right]\\right)"); ui->cmbTestset->addItem("text 0", "text"); @@ -94,6 +119,7 @@ TestForm::TestForm(QWidget *parent) : ui->cmbTestset->addItem("text: \\begin{verbatim*}", "outside\\begin{verbatim*}\ninside \\LaTeX verbatim\n 2nd verbaimline\n\t3rd line\n\\end{verbatim*}"); ui->cmbTestset->addItem("text: \\begin{lstlistings}", "outside\\begin{lstlisting}\nint main() {\n printf(\"Hello World\\n\");\n}\n\\end{lstlisting}"); ui->cmbTestset->addItem("text: flushleft", "\\begin{flushleft}text\\\\\\textbf{2^{nd} line of text}\\\\last \\textit{line!} $\\frac{1}{2}$\\end{flushleft}"); + ui->cmbTestset->addItem("text: flushleft, tiny", "\\begin{flushleft}\\tiny text\\\\\\textbf{2^{nd} line of text}\\\\\\color{red}last \\textit{line!} $\\frac{1}{2}$\\end{flushleft}"); ui->cmbTestset->addItem("text: flushright", "\\begin{flushright}text\\\\\\textbf{2^{nd} line of text}\\\\last \\textit{line!} $\\frac{1}{2}$\\end{flushright}"); ui->cmbTestset->addItem("text: center", "\\begin{center}text\\\\\\textbf{2^{nd} line of text}\\\\last \\textit{line!} $\\frac{1}{2}$\\end{center}"); ui->cmbTestset->addItem("text: framed", "\\begin{framed}text\\\\\\textbf{2^{nd} line of text}\\\\last \\textit{line!} $\\frac{1}{2}$\\end{framed}"); @@ -476,6 +502,7 @@ QTreeWidgetItem *TestForm::createTree(JKQTMathTextNode *node, QTreeWidgetItem* p JKQTMathTextVerbatimNode* verbN=dynamic_cast(node); JKQTMathTextPhantomNode* phanN=dynamic_cast(node); JKQTMathTextNoopNode* noopN=dynamic_cast(node); + JKQTMathTextModifiedEnvironmentInstructionNode* modenvN=dynamic_cast(node); QTreeWidgetItem* ti=nullptr; if (parent) ti=new QTreeWidgetItem(parent); @@ -519,12 +546,14 @@ QTreeWidgetItem *TestForm::createTree(JKQTMathTextNode *node, QTreeWidgetItem* p name=QString("SubscriptNode"); if (subN->getChild()) ti->addChild(createTree(subN->getChild(), ti)); } else if (instS) { - name=QString("SimpleInstructionNode: \'%1\' (subsuper=%2, params=%3)").arg(instS->getInstructionName()).arg(instS->isSubSuperscriptAboveBelowNode()).arg(instS->getParameters().join("/")); + name=QString("SimpleInstructionNode: \'%1\' (params=%2)").arg(instS->getInstructionName()).arg(instS->getParameters().join("/")); + } else if (modenvN) { + name=QString("ModifiedEnvironmentInstructionNode: \'%1\' (params=%2)").arg(modenvN->getInstructionName()).arg(modenvN->getParameters().join("/")); } else if (inst1N) { - name=QString("ModifiedTextPropsInstructionNode: \'%1\' (subsuper=%2, params=%3)").arg(inst1N->getInstructionName()).arg(inst1N->isSubSuperscriptAboveBelowNode()).arg(inst1N->getParameters().join("/")); + name=QString("ModifiedTextPropsInstructionNode: \'%1\' (params=%2)").arg(inst1N->getInstructionName()).arg(inst1N->getParameters().join("/")); if (inst1N->getChild()) ti->addChild(createTree(inst1N->getChild(), ti)); } else if (inst1B) { - name=QString("BoxInstructionNode: \'%1\' (subsuper=%2, params=%3)").arg(inst1B->getInstructionName()).arg(inst1B->isSubSuperscriptAboveBelowNode()).arg(inst1B->getParameters().join("/")); + name=QString("BoxInstructionNode: \'%1\' (params=%2)").arg(inst1B->getInstructionName()).arg(inst1B->getParameters().join("/")); if (inst1B->getChild()) ti->addChild(createTree(inst1B->getChild(), ti)); } else if (lstN) { name=QString("HorizontalListNode"); @@ -541,7 +570,7 @@ QTreeWidgetItem *TestForm::createTree(JKQTMathTextNode *node, QTreeWidgetItem* p } else if (verbN) { name=QString("VerbatimTextNode (align=%1, spacingFactor=%2x, verticalOrientation=%3, text='%4')").arg(JKQTMathTextHorizontalAlignment2String(verbN->getAlignment())).arg(verbN->getLineSpacingFactor()).arg(JKQTMathTextVerticalOrientation2String(verbN->getVerticalOrientation())).arg(jkqtp_backslashEscape(verbN->getText())); } else if (symN) { - name=QString("SymbolNode: \'%1\' (subsuper=%3)").arg(symN->getSymbolName()).arg(symN->isSubSuperscriptAboveBelowNode()); + name=QString("SymbolNode: \'%1\'").arg(symN->getSymbolName()); } else if (spN) { name=QString("WhitespaceNode :type=%1, count=%2").arg(spN->Type2String(spN->getWhitespaceType())).arg(spN->getWhitespaceCount()); } else if (txtN) { diff --git a/lib/jkqtcommon/jkqtpstringtools.cpp b/lib/jkqtcommon/jkqtpstringtools.cpp index 95709ebaf1..fa820140b3 100644 --- a/lib/jkqtcommon/jkqtpstringtools.cpp +++ b/lib/jkqtcommon/jkqtpstringtools.cpp @@ -333,6 +333,8 @@ std::string jkqtp_booltostr(bool data){ # undef rgb #endif #define rgb(r,g,b) (0xff000000 | (r << 16) | (g << 8) | b) +#define gray(g) rgb(g,g,g) +#define gray_p(p) gray(static_cast(g/100.0*255.0)) static const struct RGBData { const char *name; @@ -496,7 +498,6 @@ const QStringList& jkqtp_listNamedColors() { sl.reserve(rgbTblSize); for (int i=0; i," as integer betwee 0 and 255 * or as \c ",%" in the range of 0..100 % (i.e. (1-transparency_percent/100)*255). * Also \c ",a%" in the range of 0..100 % (i.e. alpha_percent/100*255). + * + * Finally the default Qt color definitions are supported, i.e. \c #RGB , \c #RRGGBB , \c #AARRGGBB , \c #RRRGGGBBB , \c #RRRRGGGGBBBB */ JKQTCOMMON_LIB_EXPORT QColor jkqtp_String2QColor(const QString& color); diff --git a/lib/jkqtmathtext.pri b/lib/jkqtmathtext.pri index 5de98858aa..7bfdcb5e4e 100644 --- a/lib/jkqtmathtext.pri +++ b/lib/jkqtmathtext.pri @@ -15,12 +15,19 @@ isEmpty(JKQTP_MATHTEXT_PRI_INCLUDED) { $$PWD/jkqtmathtext/nodes/jkqtmathtextfracnode.h \ $$PWD/jkqtmathtext/nodes/jkqtmathtextinstructionnode.h \ $$PWD/jkqtmathtext/nodes/jkqtmathtextlistnode.h \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextverticallistnode.h \ + $$PWD/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h \ $$PWD/jkqtmathtext/nodes/jkqtmathtextmatrixnode.h \ $$PWD/jkqtmathtext/nodes/jkqtmathtextsqrtnode.h \ $$PWD/jkqtmathtext/nodes/jkqtmathtextsubsupernode.h \ $$PWD/jkqtmathtext/nodes/jkqtmathtextsymbolnode.h \ $$PWD/jkqtmathtext/nodes/jkqtmathtextwhitespacenode.h \ - $$PWD/jkqtmathtext/nodes/jkqtmathtextnodetools.h + $$PWD/jkqtmathtext/nodes/jkqtmathtextnodetools.h \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextnoopnode.h \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextverbatimnode.h \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.cpp \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.cpp + SOURCES += $$PWD/jkqtmathtext/jkqtmathtext.cpp \ $$PWD/jkqtmathtext/jkqtmathtextlabel.cpp \ @@ -31,13 +38,18 @@ isEmpty(JKQTP_MATHTEXT_PRI_INCLUDED) { $$PWD/jkqtmathtext/nodes/jkqtmathtextdecoratednode.cpp \ $$PWD/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp \ $$PWD/jkqtmathtext/nodes/jkqtmathtextinstructionnode.cpp \ - $$PWD/jkqtmathtext/nodes/jkqtmathtextlistnode.cpp \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextverticallistnode.cpp \ + $$PWD/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.cpp \ $$PWD/jkqtmathtext/nodes/jkqtmathtextmatrixnode.cpp \ $$PWD/jkqtmathtext/nodes/jkqtmathtextsqrtnode.cpp \ $$PWD/jkqtmathtext/nodes/jkqtmathtextsubsupernode.cpp \ $$PWD/jkqtmathtext/nodes/jkqtmathtextsymbolnode.cpp \ $$PWD/jkqtmathtext/nodes/jkqtmathtextwhitespacenode.cpp \ - $$PWD/jkqtmathtext/nodes/jkqtmathtextnodetools.cpp + $$PWD/jkqtmathtext/nodes/jkqtmathtextnodetools.cpp \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextnoopnode.cpp \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextverbatimnode.cpp \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.cpp \ + $$PWD/jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.cpp include($$PWD/jkqtmathtext/resources/xits.pri) DEFINES += AUTOLOAD_XITS_FONTS diff --git a/lib/jkqtmathtext/CMakeLists.txt b/lib/jkqtmathtext/CMakeLists.txt index 8ae17eca9a..421718f6f5 100644 --- a/lib/jkqtmathtext/CMakeLists.txt +++ b/lib/jkqtmathtext/CMakeLists.txt @@ -32,13 +32,18 @@ set(SOURCES_NODES ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextdecoratednode.cpp ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextfracnode.cpp ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextinstructionnode.cpp - ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextlistnode.cpp + ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextboxinstructionnode.cpp + ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextmodifyenvironmentnode.cpp + ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextverticallistnode.cpp + ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtexthorizontallistnode.cpp ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextmatrixnode.cpp ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextsqrtnode.cpp ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextsubsupernode.cpp ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextsymbolnode.cpp ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextnodetools.cpp ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextwhitespacenode.cpp + ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextnoopnode.cpp + ${CMAKE_CURRENT_LIST_DIR}/nodes/jkqtmathtextverbatimnode.cpp ) set(HEADERS @@ -56,6 +61,10 @@ set(HEADERS_NODES $ $ $ + $ + $ + $ + $ $ $ $ @@ -66,6 +75,10 @@ set(HEADERS_NODES $ $ $ + $ + $ + $ + $ $ $ $ @@ -78,6 +91,10 @@ set(HEADERS_NODES $ $ $ + $ + $ + $ + $ ) if(JKQtPlotter_BUILD_INCLUDE_XITS_FONTS) diff --git a/lib/jkqtmathtext/jkqtmathtext.cpp b/lib/jkqtmathtext/jkqtmathtext.cpp index 960c4d2539..a293d9862e 100644 --- a/lib/jkqtmathtext/jkqtmathtext.cpp +++ b/lib/jkqtmathtext/jkqtmathtext.cpp @@ -23,6 +23,7 @@ #include "jkqtmathtext/nodes/jkqtmathtextnode.h" #include "jkqtcommon/jkqtpcodestructuring.h" #include "jkqtcommon/jkqtpstringtools.h" +#include "jkqtmathtext/nodes/jkqtmathtextnodetools.h" #include "jkqtmathtext/nodes/jkqtmathtexttextnode.h" #include "jkqtmathtext/nodes/jkqtmathtextbracenode.h" #include "jkqtmathtext/nodes/jkqtmathtextdecoratednode.h" @@ -34,7 +35,12 @@ #include "jkqtmathtext/nodes/jkqtmathtextsubsupernode.h" #include "jkqtmathtext/nodes/jkqtmathtextsymbolnode.h" #include "jkqtmathtext/nodes/jkqtmathtextwhitespacenode.h" -#include "jkqtmathtext/nodes/jkqtmathtextnodetools.h" +#include "jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.h" +#include "jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextnoopnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextverbatimnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextverticallistnode.h" #include #include #include @@ -100,10 +106,10 @@ JKQTMathText::JKQTMathText(QObject* parent): matrix_linewidth_thin_factor=0.4; matrix_linewidth_heavy_factor=1.5; matrix_line_separation_factor=2.0; - matrix_xSeparation_factor=0.5; - matrix_ySeparation_factor=0.5; - matrix_xPadding_factor=0.5; - matrix_yPadding_factor=0.5; + matrix_xSeparation_factor=0.75; + matrix_ySeparation_factor=0.6; + matrix_xPadding_factor=0.75; + matrix_yPadding_factor=0.75; blackboradFontMode=MTBBDMdefault; @@ -191,6 +197,7 @@ JKQTMathText::JKQTMathText(QObject* parent): currentTokenID=0; parseString=""; parsingMathEnvironment=false; + parsinginMathTextStyle=false; } JKQTMathText::~JKQTMathText() { @@ -1764,7 +1771,7 @@ JKQTMathTextNode* JKQTMathText::parseLatexString(bool get, JKQTMathTextBraceType if (child!=nullptr) nl->addChild(new JKQTMathTextSuperscriptNode(this, child)); if (child2!=nullptr) nl->addChild(child2); } else if (currentToken==MTTopenbrace) { - nl->addChild(parseLatexString(true)); + nl->addChild(new JKQTMathTextBlockNode(parseLatexString(true), this)); } else if (currentToken==MTTclosebrace) { break; } else if (currentToken==MTTopenbracket) { @@ -1954,8 +1961,16 @@ JKQTMathTextNode* JKQTMathText::parseInstruction(bool *_foundError, bool* getNew child= new JKQTMathTextWhitespaceNode(currentInstructionName, this); } else if (JKQTMathTextSymbolNode::hasSymbol(currentInstructionName)) { child=new JKQTMathTextSymbolNode(this, currentInstructionName); - if (JKQTMathTextSymbolNode::isSubSuperscriptBelowAboveSymbol(currentInstructionName) && parsingMathEnvironment) { - child->setSubSuperscriptAboveBelowNode(true); + if (JKQTMathTextSymbolNode::isSubSuperscriptBelowAboveSymbol(currentInstructionName)) { + if (parsingMathEnvironment) { + if (parsinginMathTextStyle) { + child->setSubSuperscriptAboveBelowNode(false); + } else { + child->setSubSuperscriptAboveBelowNode(true); + } + } else { + child->setSubSuperscriptAboveBelowNode(false); + } } if (getNew) *getNew=true; } else if (big_instructions_family.contains(currentInstructionName)) { @@ -1994,6 +2009,22 @@ JKQTMathTextNode* JKQTMathText::parseInstruction(bool *_foundError, bool* getNew error_list.append(tr("error @ ch. %1: expected symbol-encoding instruction or character after '\\%2' command").arg(currentTokenID).arg(currentInstructionName)); } if (getNew) *getNew=true; + } else if (JKQTMathTextModifiedEnvironmentInstructionNode::supportsInstructionName(currentInstructionName)) { + const size_t Nparams=JKQTMathTextModifiedEnvironmentInstructionNode::countParametersOfInstruction(currentInstructionName); + bool foundError=false; + QStringList params; + if (Nparams>0) { + params=parseStringParams(true, Nparams, &foundError); + } + if (getToken()!=MTTwhitespace) { + if (getNew) *getNew=false; + } + if (!foundError) { + child=new JKQTMathTextModifiedEnvironmentInstructionNode(this, currentInstructionName, params); + JKQTMathTextModifiedEnvironmentInstructionNode::modifyInMathTextStyleEnvironment(currentInstructionName, parsinginMathTextStyle, this, params); + } else { + error_list.append(tr("error @ ch. %1: expected %3 arguments in '{...}' braces after '%2' command").arg(currentTokenID).arg(currentInstructionName).arg(Nparams)); + } } else if (JKQTMathTextModifiedTextPropsInstructionNode::supportsInstructionName(currentInstructionName)) { const size_t Nparams=JKQTMathTextModifiedTextPropsInstructionNode::countParametersOfInstruction(currentInstructionName); bool foundError=false; @@ -2002,7 +2033,7 @@ JKQTMathTextNode* JKQTMathText::parseInstruction(bool *_foundError, bool* getNew if (getToken()==MTTopenbrace) { const bool oldParseMath=parsingMathEnvironment; auto __finalpaint=JKQTPFinally(std::bind([&oldParseMath](bool& parsingMathEnvironment) { parsingMathEnvironment=oldParseMath; }, std::ref(parsingMathEnvironment))); - JKQTMathTextModifiedTextPropsInstructionNode::modifyInMathEnvironment(currentInstructionName, parsingMathEnvironment, params); + JKQTMathTextModifiedTextPropsInstructionNode::modifyInMathEnvironment(currentInstructionName, parsingMathEnvironment, parsinginMathTextStyle, params); child=new JKQTMathTextModifiedTextPropsInstructionNode(this, currentInstructionName, parseLatexString(true), params); } else { @@ -2018,8 +2049,7 @@ JKQTMathTextNode* JKQTMathText::parseInstruction(bool *_foundError, bool* getNew const QStringList params=parseStringParams(true, Nparams, &foundError); if (!foundError) { child=new JKQTMathTextSimpleInstructionNode(this, currentInstructionName, params); - } - if (foundError){ + } else { error_list.append(tr("error @ ch. %1: expected %3 arguments in '{...}' braces after '%2' command").arg(currentTokenID).arg(currentInstructionName).arg(Nparams)); } } else if (JKQTMathTextBoxInstructionNode::supportsInstructionName(currentInstructionName)) { @@ -2031,7 +2061,7 @@ JKQTMathTextNode* JKQTMathText::parseInstruction(bool *_foundError, bool* getNew if (getToken()==MTTopenbrace) { const bool oldParseMath=parsingMathEnvironment; auto __finalpaint=JKQTPFinally(std::bind([&oldParseMath](bool& parsingMathEnvironment) { parsingMathEnvironment=oldParseMath; }, std::ref(parsingMathEnvironment))); - JKQTMathTextBoxInstructionNode::modifyInMathEnvironment(currentInstructionName, parsingMathEnvironment, params); + JKQTMathTextBoxInstructionNode::modifyInMathEnvironment(currentInstructionName, parsingMathEnvironment, parsinginMathTextStyle, params); child=new JKQTMathTextBoxInstructionNode(this, currentInstructionName, parseLatexString(true), params); } else { foundError=true; diff --git a/lib/jkqtmathtext/jkqtmathtext.h b/lib/jkqtmathtext/jkqtmathtext.h index 91351624f9..e9a9d7e16a 100644 --- a/lib/jkqtmathtext/jkqtmathtext.h +++ b/lib/jkqtmathtext/jkqtmathtext.h @@ -985,6 +985,9 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathText : public QObject { QString parseString; /** \brief used by the parser. indicates whether we are in a math environment */ bool parsingMathEnvironment; + /** \brief used by the parser. indicates whether to use textstyle or displaystyle in math-mode */ + bool parsinginMathTextStyle; + public: diff --git a/lib/jkqtmathtext/jkqtmathtexttools.cpp b/lib/jkqtmathtext/jkqtmathtexttools.cpp index 38b81a8a23..6c4cffcf0b 100644 --- a/lib/jkqtmathtext/jkqtmathtexttools.cpp +++ b/lib/jkqtmathtext/jkqtmathtexttools.cpp @@ -452,20 +452,22 @@ JKQTMathTextEnvironment::JKQTMathTextEnvironment() { fontSizeUnit=POINTS; bold=false; italic=false; - smallCaps=false; + capitalization=QFont::MixedCase; underlined=false; overline=false; strike=false; insideMath=false; insideMathForceDigitsUpright=true; + insideMathUseTextStyle=false; } -void JKQTMathTextEnvironment::beginMathMode() +void JKQTMathTextEnvironment::beginMathMode(bool displaystyle) { insideMath=true; insideMathForceDigitsUpright=true; + insideMathUseTextStyle=!displaystyle; italic=true; - smallCaps=false; + capitalization=QFont::MixedCase; underlined=false; overline=false; strike=false; @@ -476,12 +478,25 @@ void JKQTMathTextEnvironment::endMathMode() insideMath=false; insideMathForceDigitsUpright=true; italic=false; - smallCaps=false; + capitalization=QFont::MixedCase; underlined=false; overline=false; strike=false; } +bool JKQTMathTextEnvironment::isMathDisplayStyle() const +{ + if (insideMath) return !insideMathUseTextStyle; + else { + return false; + } +} + +bool JKQTMathTextEnvironment::isMathTextStyle() const +{ + return !isMathDisplayStyle(); +} + JKQTMathTextFontEncoding JKQTMathTextEnvironment::getFontEncoding(JKQTMathText* parent) const { switch (font) { case MTEsans: if (insideMath) { @@ -540,8 +555,7 @@ QFont JKQTMathTextEnvironment::getFont(const JKQTMathText* parent) const { f.setUnderline(underlined); f.setOverline(overline); f.setStrikeOut(strike); - f.setCapitalization(QFont::MixedCase); - if (smallCaps) f.setCapitalization(QFont::SmallCaps); + f.setCapitalization(capitalization); if (fontSizeUnit==POINTS) f.setPointSizeF(fontSize); else if (fontSizeUnit==PIXELS) f.setPixelSize(static_cast(fontSize)); f.setStyleStrategy(QFont::NoFontMerging); diff --git a/lib/jkqtmathtext/jkqtmathtexttools.h b/lib/jkqtmathtext/jkqtmathtexttools.h index 4c03ac30bc..5fb5ffdfc1 100644 --- a/lib/jkqtmathtext/jkqtmathtexttools.h +++ b/lib/jkqtmathtext/jkqtmathtexttools.h @@ -283,7 +283,7 @@ struct JKQTMATHTEXT_LIB_EXPORT JKQTMathTextEnvironment { /** \brief is the text currently italic? */ bool italic; /** \brief is the text currently in small caps? */ - bool smallCaps; + QFont::Capitalization capitalization; /** \brief is the text currently underlined? */ bool underlined; /** \brief is the text currently overlined? */ @@ -294,10 +294,25 @@ struct JKQTMATHTEXT_LIB_EXPORT JKQTMathTextEnvironment { bool insideMath; /** \brief if \a insideMath \c ==true and this is \c true (the default), then digits are forced to be typeset in upright, otherwise they are typeset as defined by the other properties */ bool insideMathForceDigitsUpright; - /** \brief sets insideMath \c =true and insideMathForceDigitsUpright \c =true */ - void beginMathMode(); - /** \brief sets insideMath \c =false and insideMathForceDigitsUpright \c =true */ + /** \brief if \c true the commands like \c \\frac{}{} are executes as \c \\tfrac{}{} . This implements \c \\textstyle or if \c false \c \\displaystyle + * + * \image html jkqtmathtext/jkqtmathtext_mathstyle.png + */ + bool insideMathUseTextStyle; + /** \brief sets insideMath \c =true and insideMathForceDigitsUpright \c =true and \c insideMathUseTextStyle=!displaystyle*/ + void beginMathMode(bool displaystyle=true); + /** \brief sets insideMath \c =false */ void endMathMode(); + /** \brief determines whether to use displaystyle or textstyle for math-instructions like \c \\frace{}{} or \c \\int_x + * + * \image html jkqtmathtext/jkqtmathtext_mathstyle.png + */ + bool isMathDisplayStyle() const; + /** \brief determines whether to use displaystyle or textstyle for math-instructions like \c \\frace{}{} or \c \\int_x + * + * \image html jkqtmathtext/jkqtmathtext_mathstyle.png + */ + bool isMathTextStyle() const; /** \brief build a QFont object from the settings in this object */ diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.cpp new file mode 100644 index 0000000000..55cb324a6e --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.cpp @@ -0,0 +1,345 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + +#include "jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/jkqtmathtext.h" +#include "jkqtcommon/jkqtpcodestructuring.h" +#include "jkqtcommon/jkqtpstringtools.h" +#include +#include +#include +#include +#include +#include +#include + + + + + + + +JKQTMathTextBoxInstructionNode::JKQTMathTextBoxInstructionNode(JKQTMathText* _parent, const QString& name, JKQTMathTextNode* child, const QStringList& parameters): + JKQTMathTextInstruction1Node(_parent, name, child, parameters) +{ + fillInstructions(); +} + +JKQTMathTextBoxInstructionNode::~JKQTMathTextBoxInstructionNode() { +} + + +QString JKQTMathTextBoxInstructionNode::getTypeName() const +{ + return QLatin1String("JKQTMathTextBoxInstructionNode(")+instructionName+")"; +} + +JKQTMathTextNodeSize JKQTMathTextBoxInstructionNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const { + JKQTMathTextEnvironment ev=currentEv; + + const auto& inst=instructions.value(getInstructionName()); + inst.modifier(ev, getParameters()); + const QPen p=inst.pen(ev, getParameters(), parentMathText); + const QBrush b=inst.brush(ev, getParameters(), parentMathText); + const QFontMetricsF fmNonItalic(JKQTMathTextGetNonItalic(currentEv.getFont(parentMathText))); + const double lw=p.widthF(); + const double padding=inst.paddingFactor*fmNonItalic.tightBoundingRect("x").width(); + + const JKQTMathTextNodeSize cs=getChild()->getSize(painter, ev); + JKQTMathTextNodeSize s; + s.width=cs.width+2.0*(padding+lw/2.0); + s.baselineHeight=cs.baselineHeight+padding+lw/2.0; + s.overallHeight=cs.overallHeight+2.0*(padding+lw/2.0); + s.strikeoutPos=cs.strikeoutPos; + return s; +} + +double JKQTMathTextBoxInstructionNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const { + doDrawBoxes(painter, x, y, currentEv); + JKQTMathTextEnvironment ev=currentEv; + + const auto& inst=instructions.value(getInstructionName()); + inst.modifier(ev, getParameters()); + const QPen p=inst.pen(ev, getParameters(), parentMathText); + const QBrush b=inst.brush(ev, getParameters(), parentMathText); + const QFontMetricsF fmNonItalic(JKQTMathTextGetNonItalic(currentEv.getFont(parentMathText))); + const double lw=p.widthF(); + const double padding=inst.paddingFactor*fmNonItalic.tightBoundingRect("x").width(); + const double rr=inst.roundingFactor*fmNonItalic.tightBoundingRect("x").width(); + const JKQTMathTextNodeSize cs=getChild()->getSize(painter, ev); + + { + painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); + painter.setBrush(b); + painter.setPen(p); + const QRectF rect(x+lw/2.0, y-cs.baselineHeight-padding-lw/2.0, cs.width+2.0*padding, cs.overallHeight+2.0*padding); + if (rr>0) painter.drawRoundedRect(rect, rr, rr, Qt::AbsoluteSize); + else painter.drawRect(rect); + if (inst.doubleLine) { + painter.setBrush(Qt::NoBrush); + QPen p2=p; + p2.setWidthF(p.widthF()*0.6); + const QRectF recti(x+lw*2.5, y-cs.baselineHeight-lw/2.0-padding+2.0*lw, cs.width+2.0*padding-4.0*lw, cs.overallHeight+2.0*padding-4.0*lw); + if (rr>0) painter.drawRoundedRect(recti, rr, rr, Qt::AbsoluteSize); + else painter.drawRect(recti); + } + } + + double xnew = getChild()->draw(painter, x+padding+lw/2.0, y, ev); + + return xnew+padding+lw/2.0; +} + +bool JKQTMathTextBoxInstructionNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const { + JKQTMathTextEnvironment ev=currentEv; + fillInstructions(); + const auto& inst=instructions.value(getInstructionName()); + inst.modifier(ev, getParameters()); + const QPen p=inst.pen(ev, getParameters(), parentMathText); + const QBrush b=inst.brush(ev, getParameters(), parentMathText); + const QFontMetricsF fmNonItalic(JKQTMathTextGetNonItalic(currentEv.getFont(parentMathText))); + //const double lw=p.widthF(); + const double padding=inst.paddingFactor*fmNonItalic.tightBoundingRect("x").width(); + //const double rr=inst.roundingFactor*fmNonItalic.tightBoundingRect("x").width(); + QString s=QString("padding: %1px").arg(padding); + if (p!=Qt::NoPen) { + if (s.size()>0 && s.right(2)!="; ") s=s+"; "; + if (p.widthF()>0 && p.color()!=Qt::transparent) s=s+"border-color: "+p.color().name(); + if (s.size()>0 && s.right(2)!="; ") s=s+"; "; + if (p.widthF()>0 && p.color()!=Qt::transparent) s=s+QString("border-width: %1px").arg(p.width()); + } + if (b!=Qt::NoBrush) { + if (s.size()>0 && s.right(2)!="; ") s=s+"; "; + if (b.color()!=Qt::transparent) s=s+"background-color: "+b.color().name(); + } + + if (s.size()>0) html=html+ QString("").arg(s); + bool ok=getChild()->toHtml(html, ev, defaultEv); + if (s.size()>0) html=html+""; + return ok; +} + +bool JKQTMathTextBoxInstructionNode::supportsInstructionName(const QString &instructionName) +{ + fillInstructions(); + return instructions.contains(instructionName); +} + +size_t JKQTMathTextBoxInstructionNode::countParametersOfInstruction(const QString &instructionName) +{ + fillInstructions(); + if (instructions.contains(instructionName)) return instructions[instructionName].NParams; + return 0; +} + +void JKQTMathTextBoxInstructionNode::modifyInMathEnvironment(const QString &instructionName, bool &insideMath, bool& insideMathTextStyle, const QStringList& params) +{ + fillInstructions(); + if (instructions.contains(instructionName)) { + JKQTMathTextEnvironment ev; + ev.insideMath=insideMath; + ev.insideMathUseTextStyle=insideMathTextStyle; + instructions[instructionName].modifier(ev, params); + insideMath=ev.insideMath; + insideMathTextStyle=ev.insideMathUseTextStyle; + } +} + + +QHash JKQTMathTextBoxInstructionNode::instructions; + +void JKQTMathTextBoxInstructionNode::fillInstructions() +{ + + { + InstructionProperties i(InstructionProperties::NoModification, + InstructionProperties::DefaultPen, + InstructionProperties::NoBrush, + InstructionProperties::DefaultPadding, + /*Nparams=*/0); + instructions["fbox"] = i; + instructions["framebox"] = i; + instructions["boxed"] = i; + instructions["framed"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + InstructionProperties::DefaultPen, + InstructionProperties::NoBrush, + InstructionProperties::DefaultPadding, + /*Nparams=*/0); + i.doubleLine=true; + instructions["doublebox"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + InstructionProperties::DefaultPen, + InstructionProperties::NoBrush, + InstructionProperties::DefaultPadding, + /*Nparams=*/0); + i.roundingFactor=0.7; + instructions["ovalbox"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ + QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); + p.setWidthF(p.widthF()*1.5); + return p; + }, + InstructionProperties::NoBrush, + InstructionProperties::DefaultPadding, + /*Nparams=*/0); + i.roundingFactor=0.8; + instructions["Ovalbox"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + InstructionProperties::DefaultPen, + InstructionProperties::NoBrush, + InstructionProperties::DefaultPadding, + /*Nparams=*/0); + i.roundingFactor=0.7; + i.doubleLine=true; + instructions["ovaldoublebox"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ + QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); + p.setColor(jkqtp_String2QColor(parameters.value(0, p.color().name()))); + return p; + }, + InstructionProperties::NoBrush, + InstructionProperties::DefaultPadding, + /*Nparams=*/1); + instructions["colorbox"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ + QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); + p.setStyle(Qt::DashLine); + return p; + }, + InstructionProperties::NoBrush, + InstructionProperties::DefaultPadding, + /*Nparams=*/0); + instructions["dashbox"] = i; + instructions["dashedbox"] = i; + instructions["dbox"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ + QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); + p.setStyle(Qt::DotLine); + return p; + }, + InstructionProperties::NoBrush, + InstructionProperties::DefaultPadding, + /*Nparams=*/0); + instructions["dottedbox"] = i; + instructions["dotbox"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + InstructionProperties::NoPen, + [](JKQTMathTextEnvironment& /*ev*/, const QStringList& parameters, JKQTMathText* /*parent*/){ + return QBrush(jkqtp_String2QColor(parameters.value(0, QColor(Qt::transparent).name())), Qt::SolidPattern); + }, + InstructionProperties::DefaultPadding, + /*Nparams=*/1); + instructions["shaded"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + InstructionProperties::NoPen, + [](JKQTMathTextEnvironment& /*ev*/, const QStringList& parameters, JKQTMathText* /*parent*/){ + return QBrush(jkqtp_String2QColor(parameters.value(0, QColor(Qt::transparent).name())), Qt::SolidPattern); + }, + 0, + /*Nparams=*/1); + instructions["snugshade"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + InstructionProperties::DefaultPen, + InstructionProperties::NoBrush, + 0, + /*Nparams=*/0); + instructions["snugbox"] = i; + } + { + InstructionProperties i(InstructionProperties::NoModification, + [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ + QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); + p.setColor(jkqtp_String2QColor(parameters.value(0, p.color().name()))); + return p; + }, + [](JKQTMathTextEnvironment& /*ev*/, const QStringList& parameters, JKQTMathText* /*parent*/){ + return QBrush(jkqtp_String2QColor(parameters.value(1, QColor(Qt::transparent).name())), Qt::SolidPattern); + }, + InstructionProperties::DefaultPadding, + /*Nparams=*/2); + instructions["fcolorbox"] = i; + } +} + +JKQTMathTextBoxInstructionNode::InstructionProperties::ModifyEnvironmentFunctor JKQTMathTextBoxInstructionNode::InstructionProperties::NoModification= + [](JKQTMathTextEnvironment& /*ev*/, const QStringList& /*parameters*/){}; + +JKQTMathTextBoxInstructionNode::InstructionProperties::GetBoxPenFunctor JKQTMathTextBoxInstructionNode::InstructionProperties::DefaultPen= + [](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, JKQTMathText* parent){ return QPen(ev.color, QFontMetricsF(ev.getFont(parent)).lineWidth(), Qt::SolidLine); }; + +JKQTMathTextBoxInstructionNode::InstructionProperties::GetBoxPenFunctor JKQTMathTextBoxInstructionNode::InstructionProperties::NoPen= + [](JKQTMathTextEnvironment& /*ev*/, const QStringList& /*parameters*/, JKQTMathText* /*parent*/){ return Qt::NoPen; }; + +JKQTMathTextBoxInstructionNode::InstructionProperties::GetBoxBrushFunctor JKQTMathTextBoxInstructionNode::InstructionProperties::NoBrush= + [](JKQTMathTextEnvironment& /*ev*/, const QStringList& /*parameters*/, JKQTMathText* /*parent*/){ return Qt::NoBrush; }; + +double JKQTMathTextBoxInstructionNode::InstructionProperties::DefaultPadding=0.5; + +JKQTMathTextBoxInstructionNode::InstructionProperties::InstructionProperties(): + InstructionProperties(NoModification, DefaultPen, NoBrush, DefaultPadding, 0) +{ + +} + +JKQTMathTextBoxInstructionNode::InstructionProperties::InstructionProperties(const GetBoxPenFunctor &_pen, const GetBoxBrushFunctor &_brush, double _paddingFactor, size_t _NParams): + InstructionProperties(NoModification, _pen, _brush, _paddingFactor, _NParams) + +{ + +} + +JKQTMathTextBoxInstructionNode::InstructionProperties::InstructionProperties(const ModifyEnvironmentFunctor &_modifier, const GetBoxPenFunctor &_pen, const GetBoxBrushFunctor &_brush, double _paddingFactor, size_t _NParams): + NParams(_NParams), + modifier(_modifier), + pen(_pen), + brush(_brush), + paddingFactor(_paddingFactor), + doubleLine(false), + roundingFactor(0.0) +{ + +} diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.h new file mode 100644 index 0000000000..cfa069c223 --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtextboxinstructionnode.h @@ -0,0 +1,131 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + with contributions from: Razi Alavizadeh + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + + +#ifndef JKQTMATHTEXTBOXINSTRUCTIONNODE_H +#define JKQTMATHTEXTBOXINSTRUCTIONNODE_H +#include "jkqtmathtext/jkqtmathtext_imexport.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/nodes/jkqtmathtextnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextinstructionnode.h" +#include +#include + +class JKQTMathText; // forward +// JKQTMATHTEXT_LIB_EXPORT + + +/** \brief subclass representing an instruction node which draws a (possibly colored) box around it's contents + * i.e. it represents instructions like \c \\fbox{...}, \c \\colorbox{color}{...}, ... + * \ingroup jkqtmathtext_items + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextBoxInstructionNode: public JKQTMathTextInstruction1Node { + public: + explicit JKQTMathTextBoxInstructionNode(JKQTMathText* parent, const QString& name, JKQTMathTextNode* child, const QStringList& parameters=QStringList()); + virtual ~JKQTMathTextBoxInstructionNode() override; + /** \copydoc JKQTMathTextNode::getTypeName() */ + virtual QString getTypeName() const override; + /** \copydoc JKQTMathTextNode::draw() */ + virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; + /** \copydoc JKQTMathTextNode::toHtml() */ + virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; + + /** \brief returns true, if the given \a instructionName can be represented by this node + * \see instructions + */ + static bool supportsInstructionName(const QString& instructionName); + /** \brief returns the number of additional string parameters, required for the given \a instructionName + * \see instructions + */ + static size_t countParametersOfInstruction(const QString& instructionName); + /** \brief sets \a insideMath to \c true if inside the node is to be parsed in math mode and \c false else + * \see instructions + */ + static void modifyInMathEnvironment(const QString& instructionName, bool& insideMath, bool &insideMathTextStyle, const QStringList ¶ms=QStringList()); + protected: + /** \copydoc JKQTMathTextNode::getSizeInternal() */ + virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; + /** \brief set all properties in \a ev, as appropriate for the represented instruction */ + bool setupMTenvironment(JKQTMathTextEnvironment &ev) const; + + /** \brief defines the implementation of an instruction represented by JKQTMathTextModifiedTextPropsInstructionNode */ + struct InstructionProperties { + /** \brief this functor implements the instruction */ + typedef std::function ModifyEnvironmentFunctor; + static ModifyEnvironmentFunctor NoModification; + /** \brief this functor returns the QPen to use for the box outline */ + typedef std::function GetBoxPenFunctor; + /** \brief generates a QPen with the lineWidth associated with the QFont of the environment (using QFontMetricsF::lineWidth() ) */ + static GetBoxPenFunctor DefaultPen; + /** \brief generates an invisible pen with 0 width */ + static GetBoxPenFunctor NoPen; + /** \brief this functor returns the QBrush to use for the box fill */ + typedef std::function GetBoxBrushFunctor; + /** \brief generates an invisible QBrush */ + static GetBoxBrushFunctor NoBrush; + /** \brief default padding factor 0.5 xWidth */ + static double DefaultPadding; + /** \brief default constructor, creates a NOP-instruction that does nothing */ + InstructionProperties(); + /** \brief constructor */ + InstructionProperties(const ModifyEnvironmentFunctor& _modifier, const GetBoxPenFunctor& _pen, const GetBoxBrushFunctor& _brush, double _paddingFactor=DefaultPadding, size_t _NParams=0); + /** \brief constructor */ + InstructionProperties(const GetBoxPenFunctor& _pen, const GetBoxBrushFunctor& _brush, double _paddingFactor=DefaultPadding, size_t _NParams=0); + /** \brief number of parameters for this node */ + size_t NParams; + /** \brief functor that modifies a JKQTMathTextEnvironment */ + ModifyEnvironmentFunctor modifier; + /** \brief functor that creates a QPen for the box outline */ + GetBoxPenFunctor pen; + /** \brief functor that creates a QBrush for the box fill */ + GetBoxBrushFunctor brush; + /** \brief padding of the box, as a factor to xWidth of the current font */ + double paddingFactor; + /** \brief draw a double-line */ + bool doubleLine; + /** \brief rounding radius (rx=ry) of the box, as a factor to xWidth of the current font */ + double roundingFactor; + }; + + /** \brief fills instructions + * + * \note this is the customization point for new instructions! + */ + static void fillInstructions(); + /** \brief defines all implemented instructions in this node */ + static QHash instructions; +}; + + + + + +#endif // JKQTMATHTEXTBOXINSTRUCTIONNODE_H + + + + + + + + + diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextdecoratednode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextdecoratednode.cpp index 65ab7b9c11..940e9c671e 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextdecoratednode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtextdecoratednode.cpp @@ -246,8 +246,8 @@ double JKQTMathTextDecoratedNode::draw(QPainter& painter, double x, double y, JK const double italic_xcorrection=getNonItalicXCorretion(painter, cs.width, ev, getChild()); const double deco_xoffset=parentMathText->getDecorationWidthReductionXFactor()*width_X/2.0; const double deco_width=std::max(width_x*0.5,cs.width-2.0*deco_xoffset-italic_xcorrection); - const double deco_vecwidth=width_x*0.18; - const double deco_vecheight=deco_height*0.25; + const double deco_vecwidth=width_x*0.25; + const double deco_vecheight=deco_height*0.5; const double deco_accentwidth=deco_height/4.0; const double deco_miniwidth=((decoration==MTDtilde||decoration==MTDbreve)?fm.boundingRect("j").width():fm.boundingRect("^").width())-italic_xcorrection; const double decotop_xcenter=x+italic_xcorrection+(cs.width-italic_xcorrection)/2.0; diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp index be45c3e203..00046f2ea6 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtextfracnode.cpp @@ -124,6 +124,11 @@ QString JKQTMathTextFracNode::getTypeName() const } JKQTMathTextNodeSize JKQTMathTextFracNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const { + FracType fracmode=this->mode; + if (currentEv.isMathTextStyle()) { + if (fracmode==MTFMfrac) fracmode=MTFMtfrac; + if (fracmode==MTFMsfrac) fracmode=MTFMstfrac; + } const QFont f=currentEv.getFont(parentMathText); const QFontMetricsF fm(f, painter.device()); JKQTMathTextEnvironment ev1=currentEv; @@ -137,14 +142,14 @@ JKQTMathTextNodeSize JKQTMathTextFracNode::getSizeInternal(QPainter& painter, JK const double braceheight=fm.xHeight()*parentMathText->getUnderbraceBraceSizeXFactor(); const double braceseparation=fm.xHeight()*parentMathText->getUnderbraceSeparationXFactor(); - if (mode==JKQTMathTextFracNode::MTFMunderbrace || mode==JKQTMathTextFracNode::MTFMoverbrace||mode==JKQTMathTextFracNode::MTFMunderbracket || mode==JKQTMathTextFracNode::MTFMoverbracket) { + if (fracmode==JKQTMathTextFracNode::MTFMunderbrace || fracmode==JKQTMathTextFracNode::MTFMoverbrace||fracmode==JKQTMathTextFracNode::MTFMunderbracket || fracmode==JKQTMathTextFracNode::MTFMoverbracket) { ev2.fontSize=ev2.fontSize*parentMathText->getUnderbraceFactor(); - } else if (mode==JKQTMathTextFracNode::MTFMunderset || mode==JKQTMathTextFracNode::MTFMoverset) { + } else if (fracmode==JKQTMathTextFracNode::MTFMunderset || fracmode==JKQTMathTextFracNode::MTFMoverset) { ev2.fontSize=ev2.fontSize*parentMathText->getUndersetFactor(); - } else if (mode==JKQTMathTextFracNode::MTFMfrac || mode==JKQTMathTextFracNode::MTFMsfrac) { + } else if (fracmode==JKQTMathTextFracNode::MTFMfrac || fracmode==JKQTMathTextFracNode::MTFMsfrac) { ev1.fontSize=ev1.fontSize*getFracScalingFactor(); ev2.fontSize=ev2.fontSize*getFracScalingFactor(); - } else if (mode==JKQTMathTextFracNode::MTFMtfrac || mode==JKQTMathTextFracNode::MTFMstfrac) { + } else if (fracmode==JKQTMathTextFracNode::MTFMtfrac || fracmode==JKQTMathTextFracNode::MTFMstfrac) { ev1.fontSize=ev1.fontSize*getFracScalingFactor()*0.7; ev2.fontSize=ev2.fontSize*getFracScalingFactor()*0.7; } @@ -174,19 +179,19 @@ JKQTMathTextNodeSize JKQTMathTextFracNode::getSizeInternal(QPainter& painter, JK size.overallHeight=0; size.baselineHeight=0; size.width=0; - if (mode==JKQTMathTextFracNode::MTFMfrac || mode==JKQTMathTextFracNode::MTFMdfrac || mode==JKQTMathTextFracNode::MTFMtfrac || mode==JKQTMathTextFracNode::MTFMstackrel) { + if (fracmode==JKQTMathTextFracNode::MTFMfrac || fracmode==JKQTMathTextFracNode::MTFMdfrac || fracmode==JKQTMathTextFracNode::MTFMtfrac || fracmode==JKQTMathTextFracNode::MTFMstackrel) { const double top_ascent=line_ascent+xheight*parentMathText->getFracShiftFactor(); const double bot_ascent=line_ascent-xheight*parentMathText->getFracShiftFactor(); const double newascent=size1.overallHeight+top_ascent; const double newdescent=size2.overallHeight-bot_ascent; size.width=qMax(size1.width, size2.width); - if (mode!=JKQTMathTextFracNode::MTFMstackrel) size.width+=xwidth/2.0; + if (fracmode!=JKQTMathTextFracNode::MTFMstackrel) size.width+=xwidth/2.0; size.strikeoutPos=line_ascent; size.overallHeight=newascent+newdescent; size.baselineHeight=newascent; - } else if (mode==JKQTMathTextFracNode::MTFMstfrac || mode==JKQTMathTextFracNode::MTFMsfrac) { + } else if (fracmode==JKQTMathTextFracNode::MTFMstfrac || fracmode==JKQTMathTextFracNode::MTFMsfrac) { const double top_ascent=line_ascent; const double newascent=size1.overallHeight+top_ascent; const double newdescent=qMax(size2.overallHeight-size2.baselineHeight, qheight-xheight); @@ -195,23 +200,23 @@ JKQTMathTextNodeSize JKQTMathTextFracNode::getSizeInternal(QPainter& painter, JK size.overallHeight=newascent+newdescent; size.baselineHeight=newascent; - } else if (mode==JKQTMathTextFracNode::MTFMunderbrace || mode==JKQTMathTextFracNode::MTFMunderbracket) { + } else if (fracmode==JKQTMathTextFracNode::MTFMunderbrace || fracmode==JKQTMathTextFracNode::MTFMunderbracket) { const double newdescent=descent1+size2.overallHeight+braceheight+2.0*braceseparation; size.overallHeight=newdescent+size1.baselineHeight; size.baselineHeight=size1.baselineHeight; size.width=qMax(size1.width, size2.width)+xwidth; size.strikeoutPos=line_ascent; - } else if (mode==JKQTMathTextFracNode::MTFMoverbrace || mode==JKQTMathTextFracNode::MTFMoverbracket) { + } else if (fracmode==JKQTMathTextFracNode::MTFMoverbrace || fracmode==JKQTMathTextFracNode::MTFMoverbracket) { size.overallHeight=size1.overallHeight+size2.overallHeight+braceheight+2.0*braceseparation; size.baselineHeight=size1.baselineHeight+size2.overallHeight+braceheight+2.0*braceseparation; size.width=qMax(size1.width, size2.width)+xwidth; size.strikeoutPos=line_ascent; - } else if (mode==JKQTMathTextFracNode::MTFMunderset) { + } else if (fracmode==JKQTMathTextFracNode::MTFMunderset) { size.overallHeight=size1.overallHeight+size2.overallHeight+xheight/6.0; size.baselineHeight=size1.baselineHeight; size.width=qMax(size1.width, size2.width)+xwidth; size.strikeoutPos=line_ascent; - } else if (mode==JKQTMathTextFracNode::MTFMoverset) { + } else if (fracmode==JKQTMathTextFracNode::MTFMoverset) { size.overallHeight=size1.overallHeight+size1.overallHeight+xheight/6.0; size.baselineHeight=size1.baselineHeight+size2.overallHeight+xheight/6.0; size.width=qMax(size1.width, size2.width)+xwidth; @@ -240,6 +245,12 @@ double JKQTMathTextFracNode::getFracScalingFactor() const } double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const { + FracType fracmode=this->mode; + if (currentEv.isMathTextStyle()) { + if (fracmode==MTFMfrac) fracmode=MTFMtfrac; + if (fracmode==MTFMsfrac) fracmode=MTFMstfrac; + } + doDrawBoxes(painter, x, y, currentEv); const QFont f=currentEv.getFont(parentMathText); const QFontMetricsF fm(f, painter.device()); @@ -255,14 +266,14 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat const double braceheight=fm.xHeight()*parentMathText->getUnderbraceBraceSizeXFactor(); const double braceseparation=fm.xHeight()*parentMathText->getUnderbraceSeparationXFactor(); - if (mode==JKQTMathTextFracNode::MTFMunderbrace || mode==JKQTMathTextFracNode::MTFMoverbrace||mode==JKQTMathTextFracNode::MTFMunderbracket || mode==JKQTMathTextFracNode::MTFMoverbracket) { + if (fracmode==JKQTMathTextFracNode::MTFMunderbrace || fracmode==JKQTMathTextFracNode::MTFMoverbrace||fracmode==JKQTMathTextFracNode::MTFMunderbracket || fracmode==JKQTMathTextFracNode::MTFMoverbracket) { ev2.fontSize=ev2.fontSize*parentMathText->getUnderbraceFactor(); - } else if (mode==JKQTMathTextFracNode::MTFMunderset || mode==JKQTMathTextFracNode::MTFMoverset) { + } else if (fracmode==JKQTMathTextFracNode::MTFMunderset || fracmode==JKQTMathTextFracNode::MTFMoverset) { ev2.fontSize=ev2.fontSize*parentMathText->getUndersetFactor(); - } else if (mode==JKQTMathTextFracNode::MTFMfrac || mode==JKQTMathTextFracNode::MTFMsfrac) { + } else if (fracmode==JKQTMathTextFracNode::MTFMfrac || fracmode==JKQTMathTextFracNode::MTFMsfrac) { ev1.fontSize=ev1.fontSize*getFracScalingFactor(); ev2.fontSize=ev2.fontSize*getFracScalingFactor(); - } else if (mode==JKQTMathTextFracNode::MTFMtfrac || mode==JKQTMathTextFracNode::MTFMstfrac) { + } else if (fracmode==JKQTMathTextFracNode::MTFMtfrac || fracmode==JKQTMathTextFracNode::MTFMstfrac) { ev1.fontSize=ev1.fontSize*getFracScalingFactor()*0.7; ev2.fontSize=ev2.fontSize*getFracScalingFactor()*0.7; } @@ -306,26 +317,26 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat p.setWidthF(qMax(parentMathText->ABS_MIN_LINEWIDTH, linewideth)); painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); painter.setPen(p); - if (mode==JKQTMathTextFracNode::MTFMfrac || mode==JKQTMathTextFracNode::MTFMdfrac || mode==JKQTMathTextFracNode::MTFMtfrac) { + if (fracmode==JKQTMathTextFracNode::MTFMfrac || fracmode==JKQTMathTextFracNode::MTFMdfrac || fracmode==JKQTMathTextFracNode::MTFMtfrac) { deltaWidth=xwidth/2.0; const QLineF l(x+p.widthF()*2.0, yline, x+maxWidth+deltaWidth-p.widthF()*2.0, yline); if (l.length()>0) painter.drawLine(l); child1->draw(painter, x+deltaWidth/2.0+(maxWidth-size1.width)/2.0, yline-xheight*(parentMathText->getFracShiftFactor())-descent1, ev1); child2->draw(painter, x+deltaWidth/2.0+(maxWidth-size2.width)/2.0, yline+xheight*(parentMathText->getFracShiftFactor())+ascent2, ev2); - } else if (mode==JKQTMathTextFracNode::MTFMstackrel) { + } else if (fracmode==JKQTMathTextFracNode::MTFMstackrel) { child1->draw(painter, x+(maxWidth-size1.width)/2.0, yline-xheight*(parentMathText->getFracShiftFactor())-descent1, ev1); child2->draw(painter, x+(maxWidth-size2.width)/2.0, yline+xheight*(parentMathText->getFracShiftFactor())+ascent2, ev2); - } else if (mode==JKQTMathTextFracNode::MTFMstfrac || mode==JKQTMathTextFracNode::MTFMsfrac) { + } else if (fracmode==JKQTMathTextFracNode::MTFMstfrac || fracmode==JKQTMathTextFracNode::MTFMsfrac) { deltaWidth=xwidth*0.666; child1->draw(painter, x, yline, ev1); child2->draw(painter, x+size1.width+deltaWidth, y, ev2); const QLineF l(x+size1.width+deltaWidth, y-Mheight, x+size1.width, y+(qheight-xheight)); if (l.length()>0) painter.drawLine(l); - } else if (mode==JKQTMathTextFracNode::MTFMunderset) { + } else if (fracmode==JKQTMathTextFracNode::MTFMunderset) { child1->draw(painter, x+xwidth/2.0+(maxWidth-size1.width)/2.0, y, ev1); child2->draw(painter, x+xwidth/2.0+(maxWidth-size2.width)/2.0, y+descent1+xheight/6.0+ascent2, ev2); deltaWidth=xwidth; - } else if (mode==JKQTMathTextFracNode::MTFMunderbrace) { + } else if (fracmode==JKQTMathTextFracNode::MTFMunderbrace) { const double ybrace=y+descent1+braceseparation+braceheight/2.0; const double ybot=y+descent1+2.0*braceseparation+braceheight+ascent2; { @@ -337,7 +348,7 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat child1->draw(painter, x+xwidth/2.0+(maxWidth-size1.width)/2.0, y, ev1); child2->draw(painter, x+xwidth/2.0+(maxWidth-size2.width)/2.0, ybot, ev2); deltaWidth=xwidth; - } else if (mode==JKQTMathTextFracNode::MTFMunderbracket) { + } else if (fracmode==JKQTMathTextFracNode::MTFMunderbracket) { const double ybrace=y+descent1+braceseparation+braceheight/2.0; const double ybot=y+descent1+2.0*braceseparation+braceheight+ascent2; { @@ -355,11 +366,11 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat child1->draw(painter, x+xwidth/2.0+(maxWidth-size1.width)/2.0, y, ev1); child2->draw(painter, x+xwidth/2.0+(maxWidth-size2.width)/2.0, ybot, ev2); deltaWidth=xwidth; - } else if (mode==JKQTMathTextFracNode::MTFMoverset) { + } else if (fracmode==JKQTMathTextFracNode::MTFMoverset) { child1->draw(painter, x+xwidth/2.0+(maxWidth-size1.width)/2.0, y, ev1); child2->draw(painter, x+xwidth/2.0+(maxWidth-size2.width)/2.0, y-ascent1-xheight/6.0-descent2, ev2); deltaWidth=xwidth; - } else if (mode==JKQTMathTextFracNode::MTFMoverbrace) { + } else if (fracmode==JKQTMathTextFracNode::MTFMoverbrace) { const double ybrace=y-ascent1-braceheight/2.0-braceseparation; const double ytop=y-ascent1-2.0*braceseparation-braceheight-descent2; { @@ -375,7 +386,7 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat child1->draw(painter, x+xwidth/2.0+(maxWidth-size1.width)/2.0, y, ev1); child2->draw(painter, x+xwidth/2.0+(maxWidth-size2.width)/2.0, ytop, ev2); deltaWidth=xwidth; - } else if (mode==JKQTMathTextFracNode::MTFMoverbracket) { + } else if (fracmode==JKQTMathTextFracNode::MTFMoverbracket) { const double ybrace=y-ascent1-braceheight/2.0-braceseparation; const double ytop=y-ascent1-2.0*braceseparation-braceheight-descent2; { @@ -396,7 +407,7 @@ double JKQTMathTextFracNode::draw(QPainter& painter, double x, double y, JKQTMat } - if (mode==JKQTMathTextFracNode::MTFMstfrac || mode==JKQTMathTextFracNode::MTFMsfrac) return x+size1.width+size2.width+deltaWidth; + if (fracmode==JKQTMathTextFracNode::MTFMstfrac || fracmode==JKQTMathTextFracNode::MTFMsfrac) return x+size1.width+size2.width+deltaWidth; else return x+maxWidth+deltaWidth; } diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextlistnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.cpp similarity index 76% rename from lib/jkqtmathtext/nodes/jkqtmathtextlistnode.cpp rename to lib/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.cpp index 4f1cbff830..ebe245beba 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextlistnode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.cpp @@ -19,7 +19,7 @@ -#include "jkqtmathtext/nodes/jkqtmathtextlistnode.h" +#include "jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h" #include "jkqtmathtext/nodes/jkqtmathtextsymbolnode.h" #include "jkqtmathtext/nodes/jkqtmathtextbracenode.h" #include "jkqtmathtext/nodes/jkqtmathtextsubsupernode.h" @@ -52,15 +52,9 @@ QString JKQTMathTextHorizontalListNode::getTypeName() const return "MTHorizontalListNode"; } -JKQTMathTextNodeSize JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const { +JKQTMathTextNodeSize JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment ev) const { + JKQTMathTextEnvironment currentEv=ev; JKQTMathTextNodeSize outSize; - const QFont f=currentEv.getFont(parentMathText); - const QFontMetricsF fm(f); - const double subsupershift=fm.xHeight()*parentMathText->getOperatorsubsuperDistanceFactor(); - const double subsuperextrawidth=fm.boundingRect('x').width()*parentMathText->getOperatorsubsuperExtraSpaceFactor(); - const double subsuperSpecialModeAscent=fm.ascent()*parentMathText->getSubsuperModeSelectionBySizeFactor(); - const double subsuperSpecialModeDecent=fm.descent()*parentMathText->getSubsuperModeSelectionBySizeFactor(); - const double spaceWidth=fm.boundingRect(' ').width(); //QRectF tbr=parent->getTightBoundingRect(currentEv.getFont(parent), "M", painter.device()); @@ -68,6 +62,14 @@ JKQTMathTextNodeSize JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& p double xnew=0; //bool wasBrace=false; for (int i=0; igetOperatorsubsuperDistanceFactor(); + const double subsuperextrawidth=fm.boundingRect('x').width()*parentMathText->getOperatorsubsuperExtraSpaceFactor(); + const double subsuperSpecialModeAscent=fm.ascent()*parentMathText->getSubsuperModeSelectionBySizeFactor(); + const double subsuperSpecialModeDecent=fm.descent()*parentMathText->getSubsuperModeSelectionBySizeFactor(); + const double spaceWidth=fm.boundingRect(' ').width(); + JKQTMathTextSymbolNode::NodeSize prevNodeSize; JKQTMathTextNodeSize* prevNodeSizePtrForSubscript=nullptr; JKQTMathTextNodeSize* prevNodeSizePtrForSuperscript=nullptr; @@ -291,6 +293,7 @@ JKQTMathTextNodeSize JKQTMathTextHorizontalListNode::getSizeInternal(QPainter& p if (nodeI_SubScript) ns=nodeI_SubScript->getSizeWithSpecialPlacement(painter, currentEv, prevNodeSizePtrForSubscript); else if (nodeI_SuperScript) ns=nodeI_SuperScript->getSizeWithSpecialPlacement(painter, currentEv, prevNodeSizePtrForSuperscript); else ns=nodes[i]->getSize(painter, currentEv); + const double cDescent=ns.getDescent(); //qDebug()<<"### else: ns.baselineHeight="<getOperatorsubsuperDistanceFactor(); - const double subsuperextrawidth=fm.boundingRect('x').width()*parentMathText->getOperatorsubsuperExtraSpaceFactor(); - const double subsuperSpecialModeAscent=fm.ascent()*parentMathText->getSubsuperModeSelectionBySizeFactor(); - const double subsuperSpecialModeDecent=fm.descent()*parentMathText->getSubsuperModeSelectionBySizeFactor(); for (int i=0; igetOperatorsubsuperDistanceFactor(); + const double subsuperextrawidth=fm.boundingRect('x').width()*parentMathText->getOperatorsubsuperExtraSpaceFactor(); + const double subsuperSpecialModeAscent=fm.ascent()*parentMathText->getSubsuperModeSelectionBySizeFactor(); + const double subsuperSpecialModeDecent=fm.descent()*parentMathText->getSubsuperModeSelectionBySizeFactor(); JKQTMathTextSymbolNode::NodeSize prevNodeSize; JKQTMathTextNodeSize* prevNodeSizePtrForSubscript=nullptr; @@ -493,6 +503,10 @@ double JKQTMathTextHorizontalListNode::draw(QPainter& painter, double x, double if (nodeI_SuperScript) xnew=nodeI_SuperScript->drawWithSpecialPlacement(painter, xnew, ynew, currentEv, prevNodeSizePtrForSuperscript); else if (nodeI_SubScript) xnew=nodeI_SubScript->drawWithSpecialPlacement(painter, xnew+subscript_xcorrection, ynew, currentEv, prevNodeSizePtrForSubscript); else xnew=nodes[i]->draw(painter, xnew, ynew, currentEv); + JKQTMathTextModifyEnvironmentNodeMixIn* modEnvNode=dynamic_cast(nodes[i]); + if (modEnvNode) { + modEnvNode->modifyEnvironment(currentEv); + } } } return xnew; @@ -503,12 +517,17 @@ void JKQTMathTextHorizontalListNode::addChild(JKQTMathTextNode *n) { nodes.append(n); } -bool JKQTMathTextHorizontalListNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const { +bool JKQTMathTextHorizontalListNode::toHtml(QString &html, JKQTMathTextEnvironment ev, JKQTMathTextEnvironment defaultEv) const { + JKQTMathTextEnvironment currentEv=ev; bool ok=true; for (int i=0; itoHtml(h, currentEv, defaultEv); html=html+h; + JKQTMathTextModifyEnvironmentNodeMixIn* modEnvNode=dynamic_cast(nodes[i]); + if (modEnvNode) { + modEnvNode->modifyEnvironment(currentEv); + } } return ok; } @@ -565,261 +584,13 @@ JKQTMathTextNode *JKQTMathTextHorizontalListNode::replaceChild(int i, JKQTMathTe return c; } - -JKQTMathTextVerticalListNode::JKQTMathTextVerticalListNode(JKQTMathText *_parent, JKQTMathTextHorizontalAlignment _alignment, double _linespacingFactor, JKQTMathTextLineSpacingMode spacingMode_, JKQTMathTextVerticalOrientation _verticalOrientation): - JKQTMathTextMultiChildNode(_parent), - alignment(_alignment), - lineSpacingFactor(_linespacingFactor), - verticalOrientation(_verticalOrientation), - spacingMode(spacingMode_) +void JKQTMathTextHorizontalListNode::modifyEnvironment(JKQTMathTextEnvironment ¤tEv) const { - nodes.clear(); - // these operations cause sub/sup script to be typeset over/under the operator, not right besides! -} - -JKQTMathTextVerticalListNode::~JKQTMathTextVerticalListNode() { - clearChildrenImpl(true); -} - -QString JKQTMathTextVerticalListNode::getTypeName() const -{ - return "MTVerticalListNode"; -} - -JKQTMathTextNodeSize JKQTMathTextVerticalListNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const { - return calcLayout(painter, currentEv); -} - -JKQTMathTextVerticalListNode::LayoutInfo JKQTMathTextVerticalListNode::calcLayout(QPainter &painter, JKQTMathTextEnvironment currentEv) const -{ - LayoutInfo l; - const QFontMetricsF fm(currentEv.getFont(parentMathText)); - const double linespacing=fm.lineSpacing()*lineSpacingFactor; - const double fleading=fm.leading(); - const double synLeading=fm.lineWidth(); - const double lineLeading=((fabs(fleading)>1e-6)?fleading:synLeading)*lineSpacingFactor; - - if (nodes.size()<=0) { - return l; - } - - // from now on we have at least one child node!!! - - QList widths, heights, ascents, descents, strikeouts; - double heightSum=0; - QList ysFromFirstLine; // y-position of each line, where the first line is always at y=0 (i.e. ysFromFirstLine[0]==0) - double y=0; for (int i=0; igetSize(painter, currentEv); - - if (i==0) { - heightSum=loc.baselineHeight; - } else if (i>0) { - double deltaLine=0; - if (spacingMode==MTSMMinimalSpacing) { - deltaLine=descents.last()+lineLeading+loc.baselineHeight; - } else if (spacingMode==MTSMDefaultSpacing) { - deltaLine=qMax(linespacing, descents.last()+lineLeading+loc.baselineHeight); - } - heightSum=heightSum+deltaLine; - y=y+deltaLine; - } - widths<draw(painter, x+l.X.at(i).x(), y+l.X.at(i).y(), currentEv); - } - return x+l.width; -} - -void JKQTMathTextVerticalListNode::addChild(JKQTMathTextNode *n) { - n->setParentNode(this); - nodes.append(n); -} - -bool JKQTMathTextVerticalListNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const { - bool ok=true; - if (alignment==MTHALeft) { - html+="
    "; - } else if (alignment==MTHACentered) { - html+="
    "; - } else if (alignment==MTHARight) { - html+="
    "; - } - for (int i=0; itoHtml(h, currentEv, defaultEv); - if (i==0) html=html+h; - else html=html+"
    "+h; - } - html+="
    "; - return ok; -} - -QList JKQTMathTextVerticalListNode::getChildren() { - return this->nodes; -} - - -int JKQTMathTextVerticalListNode::childCount() const -{ - return nodes.size(); -} - - -void JKQTMathTextVerticalListNode::clearChildrenImpl(bool deleteChildren) -{ - if (deleteChildren) { - for (int i=0; i(nodes[i]); + if (modEnvNode) { + modEnvNode->modifyEnvironment(currentEv); } } - nodes.clear(); } -void JKQTMathTextVerticalListNode::deleteChild(int i) -{ - if (i>=0 && isetParentNode(this); - return c; -} - -JKQTMathTextHorizontalAlignment JKQTMathTextVerticalListNode::getAlignment() const -{ - return alignment; -} - -JKQTMathTextVerticalOrientation JKQTMathTextVerticalListNode::getVerticalOrientation() const -{ - return verticalOrientation; -} - -double JKQTMathTextVerticalListNode::getLineSpacingFactor() const -{ - return lineSpacingFactor; -} - -JKQTMathTextLineSpacingMode JKQTMathTextVerticalListNode::getSpacingMode() const -{ - return spacingMode; -} - -void JKQTMathTextVerticalListNode::setAlignment(JKQTMathTextHorizontalAlignment value) -{ - alignment=value; -} - -void JKQTMathTextVerticalListNode::setVerticalOrientation(JKQTMathTextVerticalOrientation value) -{ - verticalOrientation=value; -} - -void JKQTMathTextVerticalListNode::setLineSpacingFactor(double value) -{ - lineSpacingFactor=value; -} - -void JKQTMathTextVerticalListNode::setSpacingMode(JKQTMathTextLineSpacingMode value) -{ - spacingMode=value; -} - -JKQTMathTextVerticalListNode::LayoutInfo::LayoutInfo(): - JKQTMathTextNodeSize(), X() -{} - - - -JKQTMathTextVerticalListNode::LayoutInfo::LayoutInfo(const JKQTMathTextNodeSize &other): - JKQTMathTextNodeSize(other), - X() -{ - -} - -JKQTMathTextVerticalListNode::LayoutInfo &JKQTMathTextVerticalListNode::LayoutInfo::operator=(const JKQTMathTextNodeSize &other) -{ - JKQTMathTextNodeSize::operator=(other); - X.clear(); - return *this; -} - -JKQTMathTextVerticalListNode::LayoutInfo &JKQTMathTextVerticalListNode::LayoutInfo::operator=(const LayoutInfo &other) -{ - JKQTMathTextNodeSize::operator=(dynamic_cast(other)); - X=other.X; - return *this; -} - -JKQTMathTextVerticalListNode::LayoutInfo::LayoutInfo(const LayoutInfo &other): - JKQTMathTextNodeSize(dynamic_cast(other)), - X(other.X) -{ - -} diff --git a/lib/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h b/lib/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h new file mode 100644 index 0000000000..688dbab39e --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h @@ -0,0 +1,109 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + with contributions from: Razi Alavizadeh + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + + +#ifndef JKQTMATHTEXTHONRIZONTALLISTNODE_H +#define JKQTMATHTEXTHONRIZONTALLISTNODE_H +#include "jkqtmathtext/jkqtmathtext_imexport.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/nodes/jkqtmathtextnode.h" +#include +#include + +class JKQTMathText; // forward +// JKQTMATHTEXT_LIB_EXPORT + + +/** \brief subclass representing a list of nodes in the syntax tree, layed out horizontally + * \ingroup jkqtmathtext_items + * + * This type of node also implements typesetting sub-/superscript above/below the previous node (if + * JKQTMathTextNode::is() is \c true for that previus node. The drawing is done as defined in the + * following image: + * \image html jkqtmathtext_subsuper_with_limits.png + * + * In addition this node also ensures that subscripts are moved to the left for italic previous + * text or nodes that require such a shift (e.g. \c \\nabla or \c \\int ): + * + * \image html jkqtmathtext/jkqtmathtext_doc_subsuper_italiccorrection.png + * + * \image html jkqtmathtext/jkqtmathtext_doc_subsuper_italiccorrection_boxes.png + * + * This is implemented using JKQTMathTextNodeSize::baselineXCorrection . + * + * In addition this class implements execution of instructions derived from + * JKQTMathTextModifyEnvironmentNodeMixIn. + * + * \see JKQTMathTextVerticalListNode + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextHorizontalListNode: public JKQTMathTextMultiChildNode, public JKQTMathTextModifyEnvironmentNodeMixIn { + public: + explicit JKQTMathTextHorizontalListNode(JKQTMathText* parent); + virtual ~JKQTMathTextHorizontalListNode() override; + /** \copydoc JKQTMathTextNode::getTypeName() */ + virtual QString getTypeName() const override; + /** \copydoc JKQTMathTextNode::draw() */ + virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; + /** \copydoc JKQTMathTextNode::toHtml() */ + virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; + /** \brief add a child node */ + void addChild(JKQTMathTextNode* n); + /** \copydoc JKQTMathTextMultiChildNode::getChildren() */ + virtual QList getChildren() override; + /** \copydoc JKQTMathTextMultiChildNode::childCount() */ + virtual int childCount() const override; + /** \copydoc JKQTMathTextMultiChildNode::clearChildren() */ + virtual void clearChildren(bool deleteChildren=true) override; + /** \copydoc JKQTMathTextMultiChildNode::deleteChild() */ + virtual void deleteChild(int i) override; + /** \copydoc JKQTMathTextMultiChildNode::getChild() */ + virtual JKQTMathTextNode* getChild(int i) override; + /** \copydoc JKQTMathTextMultiChildNode::getChild() */ + virtual const JKQTMathTextNode* getChild(int i) const override; + /** \copydoc JKQTMathTextMultiChildNode::getChild() */ + virtual JKQTMathTextNode* replaceChild(int i, JKQTMathTextNode* newChild) override; + /** \copydoc JKQTMathTextModifyEnvironmentNodeMixIn::modifyEnvironment() */ + virtual void modifyEnvironment(JKQTMathTextEnvironment& currentEv) const override; + + protected: + /** \copydoc JKQTMathTextNode::getSizeInternal() */ + virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; + /** \brief list of all nodes within the line */ + QList nodes; + private: + /** \brief internal implementation of clearChildren() that is non-virtual, so can be used in the destructor */ + void clearChildrenImpl(bool deleteChildren); +}; + + + + +#endif // JKQTMATHTEXTHONRIZONTALLISTNODE_H + + + + + + + + + diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextinstructionnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextinstructionnode.cpp index 1503241810..f6b40ebfe1 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextinstructionnode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtextinstructionnode.cpp @@ -87,7 +87,7 @@ double JKQTMathTextSimpleInstructionNode::draw(QPainter &painter, double x, doub const QFontMetricsF fm(f); const QString txt=executeInstruction(); const QRectF bb=fm.boundingRect(txt); - + painter.setPen(currentEv.color); painter.setFont(f); painter.drawText(x,y,txt); return x+bb.width(); @@ -199,759 +199,3 @@ JKQTMathTextSimpleInstructionNode::InstructionProperties::InstructionProperties( - - - -JKQTMathTextModifiedTextPropsInstructionNode::JKQTMathTextModifiedTextPropsInstructionNode(JKQTMathText* _parent, const QString& name, JKQTMathTextNode* child, const QStringList& parameters): - JKQTMathTextInstruction1Node(_parent, name, child, parameters) -{ - fillInstructions(); -} - -JKQTMathTextModifiedTextPropsInstructionNode::~JKQTMathTextModifiedTextPropsInstructionNode() { -} - - -QString JKQTMathTextModifiedTextPropsInstructionNode::getTypeName() const -{ - return QLatin1String("JKQTMathTextModifiedTextPropsInstructionNode(")+instructionName+")"; -} - -JKQTMathTextNodeSize JKQTMathTextModifiedTextPropsInstructionNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const { - fillInstructions(); - JKQTMathTextEnvironment ev=currentEv; - - executeInstruction(ev); - - return getChild()->getSize(painter, ev); -} - -double JKQTMathTextModifiedTextPropsInstructionNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const { - fillInstructions(); - doDrawBoxes(painter, x, y, currentEv); - JKQTMathTextEnvironment ev=currentEv; - - executeInstruction(ev); - //std::cout<<" MODNODE: "<draw(painter, x, y, ev); -} - -bool JKQTMathTextModifiedTextPropsInstructionNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const { - JKQTMathTextEnvironment ev=currentEv; - fillInstructions(); - executeInstruction(ev); - - return getChild()->toHtml(html, ev, defaultEv); -} - -bool JKQTMathTextModifiedTextPropsInstructionNode::supportsInstructionName(const QString &instructionName) -{ - fillInstructions(); - return instructions.contains(instructionName); -} - -size_t JKQTMathTextModifiedTextPropsInstructionNode::countParametersOfInstruction(const QString &instructionName) -{ - fillInstructions(); - if (instructions.contains(instructionName)) return instructions[instructionName].NParams; - return 0; -} - -void JKQTMathTextModifiedTextPropsInstructionNode::modifyInMathEnvironment(const QString &instructionName, bool &insideMath, const QStringList& params) -{ - fillInstructions(); - if (instructions.contains(instructionName)) { - JKQTMathTextEnvironment ev; - ev.insideMath=insideMath; - instructions[instructionName].modifier(ev, params); - insideMath=ev.insideMath; - } -} - - -void JKQTMathTextModifiedTextPropsInstructionNode::executeInstruction(JKQTMathTextEnvironment &ev) const -{ - fillInstructions(); - instructions.value(getInstructionName(), InstructionProperties()).modifier(ev, getParameters()); -} - -QHash JKQTMathTextModifiedTextPropsInstructionNode::instructions; - -void JKQTMathTextModifiedTextPropsInstructionNode::fillInstructions() -{ - - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.bold=true; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["bf"] = i; - instructions["textbf"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.bold=true; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathbf"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.italic=!ev.italic; - }, 0); - instructions["em"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.italic=true; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["it"] = i; - instructions["textit"] = i; - instructions["mathit"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& parameters) { - ev.color=jkqtp_String2QColor(parameters.value(0, ev.color.name())); - }, 1); - instructions["textcolor"] = i; - instructions["mathcolor"] = i; - instructions["color"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& parameters) { - ev.customFontName=parameters.value(0, ""); - ev.font=MTECustomFont; - }, 1); - instructions["userfont"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.beginMathMode(); - }, 0); - instructions["ensuremath"] = i; - instructions["equation"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.smallCaps=true; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["sc"] = i; - instructions["textsc"] = i; - instructions["mathsc"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.underlined=true; - }, 0); - instructions["ul"] = i; - instructions["underlined"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.overline=true; - }, 0); - instructions["ol"] = i; - instructions["overlined"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.strike=true; - }, 0); - instructions["strike"]= i; - instructions["st"]= i; - instructions["sout"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEroman; - ev.italic=false; - }, 0); - instructions["rm"] = i; - instructions["textrm"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEroman; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathrm"] = i; - instructions["unit"] = i; - instructions["operatorname"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.bold=true; - ev.italic=true; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathbfit"] = i; - instructions["bfit"] = i; - instructions["textbfit"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.endMathMode(); - ev.font=JKQTMathTextEnvironmentFont::MTEroman; - }, 0); - instructions["text"] = i; - instructions["mbox"] = i; - instructions["ensuretext"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEroman; - ev.italic=false; - ev.bold=true; - }, 0); - instructions["mat"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathcal"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; - }, 0); - instructions["cal"] = i; - instructions["textcal"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; - ev.italic=false; - ev.bold=true; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathbfcal"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; - ev.bold=true; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["bbfcal"] = i; - instructions["textfcal"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; - }, 0); - instructions["frak"] = i; - instructions["textfrak"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathfrak"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; - ev.bold=true; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathbffrak"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; - ev.bold=true; - }, 0); - instructions["bffrak"] = i; - instructions["textbffrak"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEblackboard; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["bb"] = i; - instructions["textbb"] = i; - instructions["mathbb"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; - }, 0); - instructions["tt"] = i; - instructions["texttt"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathtt"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; - ev.bold=true; - }, 0); - instructions["bftt"] = i; - instructions["textbftt"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; - ev.italic=false; - ev.bold=true; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathbftt"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEsans; - }, 0); - instructions["sf"] = i; - instructions["textsf"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEsans; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathsf"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEsans; - ev.italic=true; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["itsf"] = i; - instructions["textitsf"] = i; - instructions["mathitsf"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEscript; - }, 0); - instructions["script"] = i; - instructions["scr"] = i; - instructions["textscript"] = i; - instructions["textscr"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEscript; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathscript"] = i; - instructions["mathscr"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEscript; - ev.bold=true; - }, 0); - instructions["bfscript"] = i; - instructions["bfscr"] = i; - instructions["textbfscript"] = i; - instructions["textbfscr"] = i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.font=JKQTMathTextEnvironmentFont::MTEscript; - ev.bold=true; - ev.italic=false; - ev.insideMathForceDigitsUpright=false; - }, 0); - instructions["mathbfscript"] = i; - instructions["mathbfscr"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.fontSize=ev.fontSize/0.8; - }, 0); - instructions["displaystyle"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.fontSize=ev.fontSize*0.8; - }, 0); - instructions["scriptstyle"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.fontSize=ev.fontSize*0.8*0.8; - }, 0); - instructions["scriptscriptstyle"]= i; - } - - - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.fontSize=ev.fontSize*1.2; - }, 0); - instructions["bigsize"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.fontSize=ev.fontSize*1.85; - }, 0); - instructions["Bigsize"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.fontSize=ev.fontSize*2.4; - }, 0); - instructions["biggsize"]= i; - } - { - InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { - ev.fontSize=ev.fontSize*3.1; - }, 0); - instructions["Biggsize"]= i; - } -} - -JKQTMathTextModifiedTextPropsInstructionNode::InstructionProperties::InstructionProperties(): - NParams(0), - modifier([](JKQTMathTextEnvironment&, const QStringList&) {}) -{ - -} - -JKQTMathTextModifiedTextPropsInstructionNode::InstructionProperties::InstructionProperties(const ModifyEnvironmentFunctor &_modifier, size_t _NParams): - NParams(_NParams), - modifier(_modifier) -{ - -} - - - - - - - - - - - - - - -JKQTMathTextBoxInstructionNode::JKQTMathTextBoxInstructionNode(JKQTMathText* _parent, const QString& name, JKQTMathTextNode* child, const QStringList& parameters): - JKQTMathTextInstruction1Node(_parent, name, child, parameters) -{ - fillInstructions(); -} - -JKQTMathTextBoxInstructionNode::~JKQTMathTextBoxInstructionNode() { -} - - -QString JKQTMathTextBoxInstructionNode::getTypeName() const -{ - return QLatin1String("JKQTMathTextBoxInstructionNode(")+instructionName+")"; -} - -JKQTMathTextNodeSize JKQTMathTextBoxInstructionNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const { - JKQTMathTextEnvironment ev=currentEv; - - const auto& inst=instructions.value(getInstructionName()); - inst.modifier(ev, getParameters()); - const QPen p=inst.pen(ev, getParameters(), parentMathText); - const QBrush b=inst.brush(ev, getParameters(), parentMathText); - const QFontMetricsF fmNonItalic(JKQTMathTextGetNonItalic(currentEv.getFont(parentMathText))); - const double lw=p.widthF(); - const double padding=inst.paddingFactor*fmNonItalic.tightBoundingRect("x").width(); - - const JKQTMathTextNodeSize cs=getChild()->getSize(painter, ev); - JKQTMathTextNodeSize s; - s.width=cs.width+2.0*(padding+lw/2.0); - s.baselineHeight=cs.baselineHeight+padding+lw/2.0; - s.overallHeight=cs.overallHeight+2.0*(padding+lw/2.0); - s.strikeoutPos=cs.strikeoutPos; - return s; -} - -double JKQTMathTextBoxInstructionNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const { - doDrawBoxes(painter, x, y, currentEv); - JKQTMathTextEnvironment ev=currentEv; - - const auto& inst=instructions.value(getInstructionName()); - inst.modifier(ev, getParameters()); - const QPen p=inst.pen(ev, getParameters(), parentMathText); - const QBrush b=inst.brush(ev, getParameters(), parentMathText); - const QFontMetricsF fmNonItalic(JKQTMathTextGetNonItalic(currentEv.getFont(parentMathText))); - const double lw=p.widthF(); - const double padding=inst.paddingFactor*fmNonItalic.tightBoundingRect("x").width(); - const double rr=inst.roundingFactor*fmNonItalic.tightBoundingRect("x").width(); - const JKQTMathTextNodeSize cs=getChild()->getSize(painter, ev); - - { - painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); - painter.setBrush(b); - painter.setPen(p); - const QRectF rect(x+lw/2.0, y-cs.baselineHeight-padding-lw/2.0, cs.width+2.0*padding, cs.overallHeight+2.0*padding); - if (rr>0) painter.drawRoundedRect(rect, rr, rr, Qt::AbsoluteSize); - else painter.drawRect(rect); - if (inst.doubleLine) { - painter.setBrush(Qt::NoBrush); - QPen p2=p; - p2.setWidthF(p.widthF()*0.6); - const QRectF recti(x+lw*2.5, y-cs.baselineHeight-lw/2.0-padding+2.0*lw, cs.width+2.0*padding-4.0*lw, cs.overallHeight+2.0*padding-4.0*lw); - if (rr>0) painter.drawRoundedRect(recti, rr, rr, Qt::AbsoluteSize); - else painter.drawRect(recti); - } - } - - double xnew = getChild()->draw(painter, x+padding+lw/2.0, y, ev); - - return xnew+padding+lw/2.0; -} - -bool JKQTMathTextBoxInstructionNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const { - JKQTMathTextEnvironment ev=currentEv; - fillInstructions(); - const auto& inst=instructions.value(getInstructionName()); - inst.modifier(ev, getParameters()); - const QPen p=inst.pen(ev, getParameters(), parentMathText); - const QBrush b=inst.brush(ev, getParameters(), parentMathText); - const QFontMetricsF fmNonItalic(JKQTMathTextGetNonItalic(currentEv.getFont(parentMathText))); - //const double lw=p.widthF(); - const double padding=inst.paddingFactor*fmNonItalic.tightBoundingRect("x").width(); - //const double rr=inst.roundingFactor*fmNonItalic.tightBoundingRect("x").width(); - QString s=QString("padding: %1px").arg(padding); - if (p!=Qt::NoPen) { - if (s.size()>0 && s.right(2)!="; ") s=s+"; "; - if (p.widthF()>0 && p.color()!=Qt::transparent) s=s+"border-color: "+p.color().name(); - if (s.size()>0 && s.right(2)!="; ") s=s+"; "; - if (p.widthF()>0 && p.color()!=Qt::transparent) s=s+QString("border-width: %1px").arg(p.width()); - } - if (b!=Qt::NoBrush) { - if (s.size()>0 && s.right(2)!="; ") s=s+"; "; - if (b.color()!=Qt::transparent) s=s+"background-color: "+b.color().name(); - } - - if (s.size()>0) html=html+ QString("").arg(s); - bool ok=getChild()->toHtml(html, ev, defaultEv); - if (s.size()>0) html=html+""; - return ok; -} - -bool JKQTMathTextBoxInstructionNode::supportsInstructionName(const QString &instructionName) -{ - fillInstructions(); - return instructions.contains(instructionName); -} - -size_t JKQTMathTextBoxInstructionNode::countParametersOfInstruction(const QString &instructionName) -{ - fillInstructions(); - if (instructions.contains(instructionName)) return instructions[instructionName].NParams; - return 0; -} - -void JKQTMathTextBoxInstructionNode::modifyInMathEnvironment(const QString &instructionName, bool &insideMath, const QStringList& params) -{ - fillInstructions(); - if (instructions.contains(instructionName)) { - JKQTMathTextEnvironment ev; - ev.insideMath=insideMath; - instructions[instructionName].modifier(ev, params); - insideMath=ev.insideMath; - } -} - - -QHash JKQTMathTextBoxInstructionNode::instructions; - -void JKQTMathTextBoxInstructionNode::fillInstructions() -{ - - { - InstructionProperties i(InstructionProperties::NoModification, - InstructionProperties::DefaultPen, - InstructionProperties::NoBrush, - InstructionProperties::DefaultPadding, - /*Nparams=*/0); - instructions["fbox"] = i; - instructions["framebox"] = i; - instructions["boxed"] = i; - instructions["framed"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - InstructionProperties::DefaultPen, - InstructionProperties::NoBrush, - InstructionProperties::DefaultPadding, - /*Nparams=*/0); - i.doubleLine=true; - instructions["doublebox"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - InstructionProperties::DefaultPen, - InstructionProperties::NoBrush, - InstructionProperties::DefaultPadding, - /*Nparams=*/0); - i.roundingFactor=0.7; - instructions["ovalbox"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ - QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); - p.setWidthF(p.widthF()*1.5); - return p; - }, - InstructionProperties::NoBrush, - InstructionProperties::DefaultPadding, - /*Nparams=*/0); - i.roundingFactor=0.8; - instructions["Ovalbox"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - InstructionProperties::DefaultPen, - InstructionProperties::NoBrush, - InstructionProperties::DefaultPadding, - /*Nparams=*/0); - i.roundingFactor=0.7; - i.doubleLine=true; - instructions["ovaldoublebox"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ - QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); - p.setColor(jkqtp_String2QColor(parameters.value(0, p.color().name()))); - return p; - }, - InstructionProperties::NoBrush, - InstructionProperties::DefaultPadding, - /*Nparams=*/1); - instructions["colorbox"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ - QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); - p.setStyle(Qt::DashLine); - return p; - }, - InstructionProperties::NoBrush, - InstructionProperties::DefaultPadding, - /*Nparams=*/0); - instructions["dashbox"] = i; - instructions["dashedbox"] = i; - instructions["dbox"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ - QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); - p.setStyle(Qt::DotLine); - return p; - }, - InstructionProperties::NoBrush, - InstructionProperties::DefaultPadding, - /*Nparams=*/0); - instructions["dottedbox"] = i; - instructions["dotbox"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - InstructionProperties::NoPen, - [](JKQTMathTextEnvironment& /*ev*/, const QStringList& parameters, JKQTMathText* /*parent*/){ - return QBrush(jkqtp_String2QColor(parameters.value(0, QColor(Qt::transparent).name())), Qt::SolidPattern); - }, - InstructionProperties::DefaultPadding, - /*Nparams=*/1); - instructions["shaded"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - InstructionProperties::NoPen, - [](JKQTMathTextEnvironment& /*ev*/, const QStringList& parameters, JKQTMathText* /*parent*/){ - return QBrush(jkqtp_String2QColor(parameters.value(0, QColor(Qt::transparent).name())), Qt::SolidPattern); - }, - 0, - /*Nparams=*/1); - instructions["snugshade"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - InstructionProperties::DefaultPen, - InstructionProperties::NoBrush, - 0, - /*Nparams=*/0); - instructions["snugbox"] = i; - } - { - InstructionProperties i(InstructionProperties::NoModification, - [](JKQTMathTextEnvironment& ev, const QStringList& parameters, JKQTMathText* parent){ - QPen p=InstructionProperties::DefaultPen(ev, parameters, parent); - p.setColor(jkqtp_String2QColor(parameters.value(0, p.color().name()))); - return p; - }, - [](JKQTMathTextEnvironment& /*ev*/, const QStringList& parameters, JKQTMathText* /*parent*/){ - return QBrush(jkqtp_String2QColor(parameters.value(1, QColor(Qt::transparent).name())), Qt::SolidPattern); - }, - InstructionProperties::DefaultPadding, - /*Nparams=*/2); - instructions["fcolorbox"] = i; - } -} - -JKQTMathTextBoxInstructionNode::InstructionProperties::ModifyEnvironmentFunctor JKQTMathTextBoxInstructionNode::InstructionProperties::NoModification= - [](JKQTMathTextEnvironment& /*ev*/, const QStringList& /*parameters*/){}; - -JKQTMathTextBoxInstructionNode::InstructionProperties::GetBoxPenFunctor JKQTMathTextBoxInstructionNode::InstructionProperties::DefaultPen= - [](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, JKQTMathText* parent){ return QPen(ev.color, QFontMetricsF(ev.getFont(parent)).lineWidth(), Qt::SolidLine); }; - -JKQTMathTextBoxInstructionNode::InstructionProperties::GetBoxPenFunctor JKQTMathTextBoxInstructionNode::InstructionProperties::NoPen= - [](JKQTMathTextEnvironment& /*ev*/, const QStringList& /*parameters*/, JKQTMathText* /*parent*/){ return Qt::NoPen; }; - -JKQTMathTextBoxInstructionNode::InstructionProperties::GetBoxBrushFunctor JKQTMathTextBoxInstructionNode::InstructionProperties::NoBrush= - [](JKQTMathTextEnvironment& /*ev*/, const QStringList& /*parameters*/, JKQTMathText* /*parent*/){ return Qt::NoBrush; }; - -double JKQTMathTextBoxInstructionNode::InstructionProperties::DefaultPadding=0.5; - -JKQTMathTextBoxInstructionNode::InstructionProperties::InstructionProperties(): - InstructionProperties(NoModification, DefaultPen, NoBrush, DefaultPadding, 0) -{ - -} - -JKQTMathTextBoxInstructionNode::InstructionProperties::InstructionProperties(const GetBoxPenFunctor &_pen, const GetBoxBrushFunctor &_brush, double _paddingFactor, size_t _NParams): - InstructionProperties(NoModification, _pen, _brush, _paddingFactor, _NParams) - -{ - -} - -JKQTMathTextBoxInstructionNode::InstructionProperties::InstructionProperties(const ModifyEnvironmentFunctor &_modifier, const GetBoxPenFunctor &_pen, const GetBoxBrushFunctor &_brush, double _paddingFactor, size_t _NParams): - NParams(_NParams), - modifier(_modifier), - pen(_pen), - brush(_brush), - paddingFactor(_paddingFactor), - doubleLine(false), - roundingFactor(0.0) -{ - -} diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextinstructionnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextinstructionnode.h index ae29543a47..408bc1c757 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextinstructionnode.h +++ b/lib/jkqtmathtext/nodes/jkqtmathtextinstructionnode.h @@ -120,151 +120,6 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSimpleInstructionNode: public JKQTMath }; -/** \brief subclass representing an instruction node which modifies the current font (as defined in JKQTMathTextEnvironment), - * i.e. it represents instructions like \c \\textbf{...}, \c \\ul{underlinedText}, ... - * \ingroup jkqtmathtext_items - */ -class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextModifiedTextPropsInstructionNode: public JKQTMathTextInstruction1Node { - public: - explicit JKQTMathTextModifiedTextPropsInstructionNode(JKQTMathText* parent, const QString& name, JKQTMathTextNode* child, const QStringList& parameters=QStringList()); - virtual ~JKQTMathTextModifiedTextPropsInstructionNode() override; - /** \copydoc JKQTMathTextNode::getTypeName() */ - virtual QString getTypeName() const override; - /** \copydoc JKQTMathTextNode::draw() */ - virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; - /** \copydoc JKQTMathTextNode::toHtml() */ - virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; - - /** \brief returns true, if the given \a instructionName can be represented by this node - * \see instructions - */ - static bool supportsInstructionName(const QString& instructionName); - /** \brief returns the number of additional string parameters, required for the given \a instructionName - * \see instructions - */ - static size_t countParametersOfInstruction(const QString& instructionName); - /** \brief sets \a insideMath to \c true if inside the node is to be parsed in math mode and \c false else - * \see instructions - */ - static void modifyInMathEnvironment(const QString& instructionName, bool& insideMath, const QStringList ¶ms=QStringList()); - - protected: - /** \copydoc JKQTMathTextNode::getSizeInternal() */ - virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; - /** \brief defines the implementation of an instruction represented by JKQTMathTextModifiedTextPropsInstructionNode */ - struct InstructionProperties { - /** \brief this functor implements the instruction */ - typedef std::function ModifyEnvironmentFunctor; - /** \brief default constructor, creates a NOP-instruction that does nothing */ - InstructionProperties(); - /** \brief constructor which gets a functor \a _modifier and a number of required parameters \a _NParams */ - InstructionProperties(const ModifyEnvironmentFunctor& _modifier, size_t _NParams=0); - /** \brief number of parameters for this node */ - size_t NParams; - /** \brief functor that modifies a JKQTMathTextEnvironment */ - ModifyEnvironmentFunctor modifier; - }; - - /** \brief fills instructions - * - * \note this is the customization point for new instructions! - */ - static void fillInstructions(); - /** \brief defines all implemented instructions in this node */ - static QHash instructions; - /** \brief executes the instruction on \a ev */ - void executeInstruction(JKQTMathTextEnvironment& ev) const; -}; - - -/** \brief subclass representing an instruction node which draws a (possibly colored) box around it's contents - * i.e. it represents instructions like \c \\fbox{...}, \c \\colorbox{color}{...}, ... - * \ingroup jkqtmathtext_items - */ -class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextBoxInstructionNode: public JKQTMathTextInstruction1Node { - public: - explicit JKQTMathTextBoxInstructionNode(JKQTMathText* parent, const QString& name, JKQTMathTextNode* child, const QStringList& parameters=QStringList()); - virtual ~JKQTMathTextBoxInstructionNode() override; - /** \copydoc JKQTMathTextNode::getTypeName() */ - virtual QString getTypeName() const override; - /** \copydoc JKQTMathTextNode::draw() */ - virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; - /** \copydoc JKQTMathTextNode::toHtml() */ - virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; - - /** \brief returns true, if the given \a instructionName can be represented by this node - * \see instructions - */ - static bool supportsInstructionName(const QString& instructionName); - /** \brief returns true, if the given \a instructionName can be represented by this node - * \see instructions - */ - static void modifyInMathEnvironment(const QString& instructionName, bool& insideMath); - /** \brief returns the number of additional string parameters, required for the given \a instructionName - * \see instructions - */ - static size_t countParametersOfInstruction(const QString& instructionName); - /** \brief sets \a insideMath to \c true if inside the node is to be parsed in math mode and \c false else - * \see instructions - */ - static void modifyInMathEnvironment(const QString& instructionName, bool& insideMath, const QStringList ¶ms=QStringList()); - protected: - /** \copydoc JKQTMathTextNode::getSizeInternal() */ - virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; - /** \brief set all properties in \a ev, as appropriate for the represented instruction */ - bool setupMTenvironment(JKQTMathTextEnvironment &ev) const; - - /** \brief defines the implementation of an instruction represented by JKQTMathTextModifiedTextPropsInstructionNode */ - struct InstructionProperties { - /** \brief this functor implements the instruction */ - typedef std::function ModifyEnvironmentFunctor; - static ModifyEnvironmentFunctor NoModification; - /** \brief this functor returns the QPen to use for the box outline */ - typedef std::function GetBoxPenFunctor; - /** \brief generates a QPen with the lineWidth associated with the QFont of the environment (using QFontMetricsF::lineWidth() ) */ - static GetBoxPenFunctor DefaultPen; - /** \brief generates an invisible pen with 0 width */ - static GetBoxPenFunctor NoPen; - /** \brief this functor returns the QBrush to use for the box fill */ - typedef std::function GetBoxBrushFunctor; - /** \brief generates an invisible QBrush */ - static GetBoxBrushFunctor NoBrush; - /** \brief default padding factor 0.5 xWidth */ - static double DefaultPadding; - /** \brief default constructor, creates a NOP-instruction that does nothing */ - InstructionProperties(); - /** \brief constructor */ - InstructionProperties(const ModifyEnvironmentFunctor& _modifier, const GetBoxPenFunctor& _pen, const GetBoxBrushFunctor& _brush, double _paddingFactor=DefaultPadding, size_t _NParams=0); - /** \brief constructor */ - InstructionProperties(const GetBoxPenFunctor& _pen, const GetBoxBrushFunctor& _brush, double _paddingFactor=DefaultPadding, size_t _NParams=0); - /** \brief number of parameters for this node */ - size_t NParams; - /** \brief functor that modifies a JKQTMathTextEnvironment */ - ModifyEnvironmentFunctor modifier; - /** \brief functor that creates a QPen for the box outline */ - GetBoxPenFunctor pen; - /** \brief functor that creates a QBrush for the box fill */ - GetBoxBrushFunctor brush; - /** \brief padding of the box, as a factor to xWidth of the current font */ - double paddingFactor; - /** \brief draw a double-line */ - bool doubleLine; - /** \brief rounding radius (rx=ry) of the box, as a factor to xWidth of the current font */ - double roundingFactor; - }; - - /** \brief fills instructions - * - * \note this is the customization point for new instructions! - */ - static void fillInstructions(); - /** \brief defines all implemented instructions in this node */ - static QHash instructions; -}; - - - - #endif // JKQTMATHTEXTINSTRUCTIONNODE_H diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextlistnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextlistnode.h index d9ca28f7c7..897e1eb5d1 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextlistnode.h +++ b/lib/jkqtmathtext/nodes/jkqtmathtextlistnode.h @@ -23,176 +23,9 @@ #ifndef JKQTMATHTEXTLISTNODE_H #define JKQTMATHTEXTLISTNODE_H -#include "jkqtmathtext/jkqtmathtext_imexport.h" -#include "jkqtmathtext/jkqtmathtexttools.h" -#include "jkqtmathtext/nodes/jkqtmathtextnode.h" -#include -#include - -class JKQTMathText; // forward -// JKQTMATHTEXT_LIB_EXPORT - - -/** \brief subclass representing a list of nodes in the syntax tree, layed out horizontally - * \ingroup jkqtmathtext_items - * - * This type of node also implements typesetting sub-/superscript above/below the previous node (if - * JKQTMathTextNode::is() is \c true for that previus node. The drawing is done as defined in the - * following image: - * \image html jkqtmathtext_subsuper_with_limits.png - * - * In addition this node also ensures that subscripts are moved to the left for italic previous - * text or nodes that require such a shift (e.g. \c \\nabla or \c \\int ): - * - * \image html jkqtmathtext/jkqtmathtext_doc_subsuper_italiccorrection.png - * - * \image html jkqtmathtext/jkqtmathtext_doc_subsuper_italiccorrection_boxes.png - * - * This is implemented using JKQTMathTextNodeSize::baselineXCorrection . - * - * \see JKQTMathTextVerticalListNode - */ -class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextHorizontalListNode: public JKQTMathTextMultiChildNode { - public: - explicit JKQTMathTextHorizontalListNode(JKQTMathText* parent); - virtual ~JKQTMathTextHorizontalListNode() override; - /** \copydoc JKQTMathTextNode::getTypeName() */ - virtual QString getTypeName() const override; - /** \copydoc JKQTMathTextNode::draw() */ - virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; - /** \copydoc JKQTMathTextNode::toHtml() */ - virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; - /** \brief add a child node */ - void addChild(JKQTMathTextNode* n); - /** \copydoc JKQTMathTextMultiChildNode::getChildren() */ - virtual QList getChildren() override; - /** \copydoc JKQTMathTextMultiChildNode::childCount() */ - virtual int childCount() const override; - /** \copydoc JKQTMathTextMultiChildNode::clearChildren() */ - virtual void clearChildren(bool deleteChildren=true) override; - /** \copydoc JKQTMathTextMultiChildNode::deleteChild() */ - virtual void deleteChild(int i) override; - /** \copydoc JKQTMathTextMultiChildNode::getChild() */ - virtual JKQTMathTextNode* getChild(int i) override; - /** \copydoc JKQTMathTextMultiChildNode::getChild() */ - virtual const JKQTMathTextNode* getChild(int i) const override; - /** \copydoc JKQTMathTextMultiChildNode::getChild() */ - virtual JKQTMathTextNode* replaceChild(int i, JKQTMathTextNode* newChild) override; - protected: - /** \copydoc JKQTMathTextNode::getSizeInternal() */ - virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; - QList nodes; - private: - /** \brief internal implementation of clearChildren() that is non-virtual, so can be used in the destructor */ - void clearChildrenImpl(bool deleteChildren); -}; - - - -/** \brief subclass representing a list of nodes in the syntax tree, layed out vertically - * \ingroup jkqtmathtext_items - * - * Each child can be thought of as a line, so this node represents a list of lines. - * The layout of the lines can left-aligned, right-aligned or centered. - * - * \image html jkqtmathtext_verticallist.png - * - * \image html jkqtmathtext_verticalalignment.png - * - * \image html jkqtmathtext_horizontalalignment.png - * - * \see JKQTMathTextHorizontalListNode - */ -class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextVerticalListNode: public JKQTMathTextMultiChildNode { - public: - - explicit JKQTMathTextVerticalListNode(JKQTMathText* parent, JKQTMathTextHorizontalAlignment _alignment=MTHACentered, double _linespacingFactor=1.0, JKQTMathTextLineSpacingMode spacingMode_=MTSMDefaultSpacing, JKQTMathTextVerticalOrientation _verticalOrientation=MTVOFirstLine); - virtual ~JKQTMathTextVerticalListNode() override; - /** \copydoc JKQTMathTextNode::getTypeName() */ - virtual QString getTypeName() const override; - /** \copydoc JKQTMathTextNode::draw() */ - virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; - /** \copydoc JKQTMathTextNode::toHtml() */ - virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; - /** \brief add a child node */ - void addChild(JKQTMathTextNode* n); - /** \copydoc JKQTMathTextMultiChildNode::getChildren() */ - virtual QList getChildren() override; - /** \copydoc JKQTMathTextMultiChildNode::childCount() */ - virtual int childCount() const override; - /** \copydoc JKQTMathTextMultiChildNode::clearChildren() */ - virtual void clearChildren(bool deleteChildren=true) override; - /** \copydoc JKQTMathTextMultiChildNode::deleteChild() */ - virtual void deleteChild(int i) override; - /** \copydoc JKQTMathTextMultiChildNode::getChild() */ - virtual JKQTMathTextNode* getChild(int i) override; - /** \copydoc JKQTMathTextMultiChildNode::getChild() */ - virtual const JKQTMathTextNode* getChild(int i) const override; - /** \copydoc JKQTMathTextMultiChildNode::getChild() */ - virtual JKQTMathTextNode* replaceChild(int i, JKQTMathTextNode* newChild) override; - /** \copydoc alignment */ - JKQTMathTextHorizontalAlignment getAlignment() const; - /** \copydoc verticalOrientation */ - JKQTMathTextVerticalOrientation getVerticalOrientation() const; - /** \copydoc lineSpacingFactor */ - double getLineSpacingFactor() const; - /** \copydoc spacingMode */ - JKQTMathTextLineSpacingMode getSpacingMode() const; - /** \copydoc alignment */ - void setAlignment(JKQTMathTextHorizontalAlignment value) ; - /** \copydoc verticalOrientation */ - void setVerticalOrientation(JKQTMathTextVerticalOrientation value) ; - /** \copydoc lineSpacingFactor */ - void setLineSpacingFactor(double value); - /** \copydoc spacingMode */ - void setSpacingMode(JKQTMathTextLineSpacingMode value) ; - protected: - /** \copydoc JKQTMathTextNode::getSizeInternal() */ - virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; - - /** \brief describes the layout of the whole node */ - struct LayoutInfo: public JKQTMathTextNodeSize { - LayoutInfo(); - LayoutInfo(const LayoutInfo& other); - LayoutInfo(const JKQTMathTextNodeSize& other); - LayoutInfo& operator=(const LayoutInfo& other); - LayoutInfo& operator=(const JKQTMathTextNodeSize& other); - /** \brief drawing position for each line */ - QList X; - }; - /** \brief calclates the layout of the whole block/node */ - LayoutInfo calcLayout(QPainter& painter, JKQTMathTextEnvironment currentEv) const; - - /** \brief list of child nodes, each representing one line */ - QList nodes; - /** \brief alignment scheme used to lay out all lines - * - * \image html jkqtmathtext_horizontalalignment.png - */ - JKQTMathTextHorizontalAlignment alignment; - /** \brief spacing of the separate lines, as factor of the default line-spacing [Default: 1]. - * - * This property can be used to move the lines closer together or farther apart. - * - * \image html jkqtmathtext_verticallist.png - */ - double lineSpacingFactor; - /** \brief vertical orientation of the baseline of the whole block (with respect to the single lines) - * - * \image html jkqtmathtext_verticalorientation.png - */ - JKQTMathTextVerticalOrientation verticalOrientation; - /** \brief defines how the layout algorithm (see calcLayout() ) lays out the single lines */ - JKQTMathTextLineSpacingMode spacingMode; - - - - private: - /** \brief internal implementation of clearChildren() that is non-virtual, so can be used in the destructor */ - void clearChildrenImpl(bool deleteChildren); -}; - +#include "jkqtmathtext/nodes/jkqtmathtextverticallistnode.h" +#include "jkqtmathtext/nodes/jkqtmathtexthorizontallistnode.h" #endif // JKQTMATHTEXTLISTNODE_H diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextmatrixnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextmatrixnode.cpp index d096a2d52c..e55be969c8 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextmatrixnode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtextmatrixnode.cpp @@ -20,6 +20,7 @@ #include "jkqtmathtext/nodes/jkqtmathtextmatrixnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextnoopnode.h" #include "jkqtmathtext/jkqtmathtexttools.h" #include "jkqtmathtext/jkqtmathtext.h" #include "jkqtcommon/jkqtpcodestructuring.h" @@ -315,9 +316,9 @@ JKQTMathTextMatrixNode::LayoutInfo JKQTMathTextMatrixNode::calcLayout(QPainter & { LayoutInfo l; - const QFontMetricsF fm(currentEv.getFont(parentMathText), painter.device()); JKQTMathTextEnvironment ev1=currentEv; + const QFontMetricsF fm(ev1.getFont(parentMathText), painter.device()); const double strikepos=fm.strikeOutPos(); const double xwidth=fm.boundingRect("x").width(); const double lw=fm.lineWidth()*1.5; @@ -347,13 +348,17 @@ JKQTMathTextMatrixNode::LayoutInfo JKQTMathTextMatrixNode::calcLayout(QPainter & l.colwidth[j]=qMax(l.colwidth[j], cs.width); l.rowascent[i]=qMax(l.rowascent[i], cs.baselineHeight); rowdescent[i]=qMax(rowdescent[i], cs.getDescent()); + JKQTMathTextModifyEnvironmentNodeMixIn* modEnvNode=dynamic_cast(children[i].at(j)); + if (modEnvNode) { + modEnvNode->modifyEnvironment(ev1); + } } l.rowheight[i]=l.rowascent[i]+rowdescent[i]; } - l.overallHeight=(lines-1)*YSeparation+l.topPadding+l.bottomPadding; - l.width=(columns-1)*XSeparation+l.leftPadding+l.rightPadding; + l.overallHeight=static_cast(lines-1)*YSeparation+l.topPadding+l.bottomPadding; + l.width=static_cast(columns-1)*XSeparation+l.leftPadding+l.rightPadding; for (int i=0; idraw(painter, xx+xoffset, yy, ev1); xx=xx+l.colwidth[j]+XSeparation; if (i==0 && j(children[i].at(j)); + if (modEnvNode) { + modEnvNode->modifyEnvironment(ev1); + } + } if (i) + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + +#include "jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/jkqtmathtext.h" +#include "jkqtcommon/jkqtpcodestructuring.h" +#include "jkqtcommon/jkqtpstringtools.h" +#include +#include +#include +#include +#include +#include +#include + + + + + +JKQTMathTextModifiedTextPropsInstructionNode::JKQTMathTextModifiedTextPropsInstructionNode(JKQTMathText* _parent, const QString& name, JKQTMathTextNode* child, const QStringList& parameters): + JKQTMathTextInstruction1Node(_parent, name, child, parameters) +{ + fillInstructions(); +} + +JKQTMathTextModifiedTextPropsInstructionNode::~JKQTMathTextModifiedTextPropsInstructionNode() { +} + + +QString JKQTMathTextModifiedTextPropsInstructionNode::getTypeName() const +{ + return QLatin1String("JKQTMathTextModifiedTextPropsInstructionNode(")+instructionName+")"; +} + +JKQTMathTextNodeSize JKQTMathTextModifiedTextPropsInstructionNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const { + fillInstructions(); + JKQTMathTextEnvironment ev=currentEv; + + executeInstruction(ev); + + return getChild()->getSize(painter, ev); +} + +double JKQTMathTextModifiedTextPropsInstructionNode::draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const { + fillInstructions(); + doDrawBoxes(painter, x, y, currentEv); + JKQTMathTextEnvironment ev=currentEv; + + executeInstruction(ev); + //std::cout<<" MODNODE: "<draw(painter, x, y, ev); +} + +bool JKQTMathTextModifiedTextPropsInstructionNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const { + JKQTMathTextEnvironment ev=currentEv; + fillInstructions(); + executeInstruction(ev); + + return getChild()->toHtml(html, ev, defaultEv); +} + +bool JKQTMathTextModifiedTextPropsInstructionNode::supportsInstructionName(const QString &instructionName) +{ + fillInstructions(); + return instructions.contains(instructionName); +} + +size_t JKQTMathTextModifiedTextPropsInstructionNode::countParametersOfInstruction(const QString &instructionName) +{ + fillInstructions(); + if (instructions.contains(instructionName)) return instructions[instructionName].NParams; + return 0; +} + +void JKQTMathTextModifiedTextPropsInstructionNode::modifyInMathEnvironment(const QString &instructionName, bool &insideMath, bool& insideMathTextStyle, const QStringList& params) +{ + fillInstructions(); + if (instructions.contains(instructionName)) { + JKQTMathTextEnvironment ev; + ev.insideMath=insideMath; + ev.insideMathUseTextStyle=insideMathTextStyle; + instructions[instructionName].modifier(ev, params); + insideMath=ev.insideMath; + insideMathTextStyle=ev.insideMathUseTextStyle; + } +} + + +void JKQTMathTextModifiedTextPropsInstructionNode::executeInstruction(JKQTMathTextEnvironment &ev) const +{ + fillInstructions(); + instructions.value(getInstructionName(), InstructionProperties()).modifier(ev, getParameters()); +} + +QHash JKQTMathTextModifiedTextPropsInstructionNode::instructions; + +void JKQTMathTextModifiedTextPropsInstructionNode::fillInstructions() +{ + + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.bold=false; + ev.insideMathForceDigitsUpright=true; + ev.italic=false; + ev.underlined=false; + ev.overline=false; + ev.strike=false; + ev.font=MTEroman; + }, 0); + instructions["textnormal"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.bold=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["textbf"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.bold=true; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathbf"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.italic=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["textit"] = i; + instructions["mathit"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.italic=!ev.italic; + }, 0); + instructions["emph"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.italic=false; + }, 0); + instructions["textup"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& parameters) { + ev.color=jkqtp_String2QColor(parameters.value(0, ev.color.name())); + }, 1); + instructions["textcolor"] = i; + instructions["mathcolor"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& parameters) { + ev.customFontName=parameters.value(0, ""); + ev.font=MTECustomFont; + }, 1); + instructions["userfont"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.beginMathMode(); + }, 0); + instructions["ensuremath"] = i; + instructions["equation"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.capitalization=QFont::SmallCaps; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["textsc"] = i; + instructions["mathsc"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.capitalization=QFont::AllUppercase; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["uppercase"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.capitalization=QFont::AllLowercase; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["lowercase"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.underlined=true; + }, 0); + instructions["ul"] = i; + instructions["underlined"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.overline=true; + }, 0); + instructions["ol"] = i; + instructions["overlined"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.strike=true; + }, 0); + instructions["strike"]= i; + instructions["st"]= i; + instructions["sout"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEroman; + ev.italic=false; + }, 0); + instructions["textrm"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEroman; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathrm"] = i; + instructions["unit"] = i; + instructions["operatorname"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.bold=true; + ev.italic=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathbfit"] = i; + instructions["textbfit"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.endMathMode(); + ev.font=JKQTMathTextEnvironmentFont::MTEroman; + }, 0); + instructions["text"] = i; + instructions["mbox"] = i; + instructions["ensuretext"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEroman; + ev.italic=false; + ev.bold=true; + }, 0); + instructions["mat"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathcal"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; + }, 0); + instructions["textcal"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; + ev.italic=false; + ev.bold=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathbfcal"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; + ev.bold=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["textfcal"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; + }, 0); + instructions["textfrak"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathfrak"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; + ev.bold=true; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathbffrak"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; + ev.bold=true; + }, 0); + instructions["textbffrak"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEblackboard; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["textbb"] = i; + instructions["mathbb"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; + }, 0); + instructions["texttt"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathtt"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; + ev.bold=true; + }, 0); + instructions["textbftt"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; + ev.italic=false; + ev.bold=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathbftt"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEsans; + }, 0); + instructions["textsf"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEsans; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathsf"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEsans; + ev.italic=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["textitsf"] = i; + instructions["mathitsf"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEscript; + }, 0); + instructions["textscript"] = i; + instructions["textscr"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEscript; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathscript"] = i; + instructions["mathscr"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEscript; + ev.bold=true; + }, 0); + instructions["textbfscript"] = i; + instructions["textbfscr"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.font=JKQTMathTextEnvironmentFont::MTEscript; + ev.bold=true; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["mathbfscript"] = i; + instructions["mathbfscr"]= i; + } + + + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.fontSize=ev.fontSize*1.2; + }, 0); + instructions["bigsize"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.fontSize=ev.fontSize*1.85; + }, 0); + instructions["Bigsize"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.fontSize=ev.fontSize*2.4; + }, 0); + instructions["biggsize"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/) { + ev.fontSize=ev.fontSize*3.1; + }, 0); + instructions["Biggsize"]= i; + } +} + +JKQTMathTextModifiedTextPropsInstructionNode::InstructionProperties::InstructionProperties(): + NParams(0), + modifier([](JKQTMathTextEnvironment&, const QStringList&) {}) +{ + +} + +JKQTMathTextModifiedTextPropsInstructionNode::InstructionProperties::InstructionProperties(const ModifyEnvironmentFunctor &_modifier, size_t _NParams): + NParams(_NParams), + modifier(_modifier) +{ + +} + + + +JKQTMathTextModifiedEnvironmentInstructionNode::JKQTMathTextModifiedEnvironmentInstructionNode(JKQTMathText *parent_, const QString &name_, const QStringList ¶meters_): + JKQTMathTextNonDrawingBaseNode(parent_), JKQTMathTextModifyEnvironmentNodeMixIn(), + instructionName(name_), + parameters(parameters_) +{ + fillInstructions(); +} + +JKQTMathTextModifiedEnvironmentInstructionNode::~JKQTMathTextModifiedEnvironmentInstructionNode() +{ + +} + +QString JKQTMathTextModifiedEnvironmentInstructionNode::getTypeName() const +{ + return "MTModifyEnvironmentInstructionNode"; +} + +const QString &JKQTMathTextModifiedEnvironmentInstructionNode::getInstructionName() const +{ + return instructionName; +} + +const QStringList &JKQTMathTextModifiedEnvironmentInstructionNode::getParameters() const +{ + return parameters; +} + +void JKQTMathTextModifiedEnvironmentInstructionNode::modifyEnvironment(JKQTMathTextEnvironment ¤tEv) const +{ + fillInstructions(); + instructions.value(getInstructionName(), InstructionProperties()).modifier(currentEv, getParameters(), parentMathText); +} + +bool JKQTMathTextModifiedEnvironmentInstructionNode::supportsInstructionName(const QString &instructionName) +{ + fillInstructions(); + return instructions.contains(instructionName); +} + +size_t JKQTMathTextModifiedEnvironmentInstructionNode::countParametersOfInstruction(const QString &instructionName) +{ + fillInstructions(); + if (instructions.contains(instructionName)) return instructions[instructionName].NParams; + return 0; +} + +void JKQTMathTextModifiedEnvironmentInstructionNode::modifyInMathTextStyleEnvironment(const QString &instructionName, bool &insideMathTextStyle, JKQTMathText* parentMathText, const QStringList ¶ms) +{ + fillInstructions(); + if (instructions.contains(instructionName)) { + JKQTMathTextEnvironment ev; + ev.insideMathUseTextStyle=insideMathTextStyle; + instructions[instructionName].modifier(ev, params, parentMathText); + insideMathTextStyle=ev.insideMathUseTextStyle; + } +} + +QHash JKQTMathTextModifiedEnvironmentInstructionNode::instructions; + +void JKQTMathTextModifiedEnvironmentInstructionNode::fillInstructions() +{ + + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.bold=false; + ev.insideMathForceDigitsUpright=true; + ev.italic=false; + ev.underlined=false; + ev.overline=false; + ev.strike=false; + ev.font=MTEroman; + ev.fontSize=parentMathText->getFontSize(); + ev.capitalization=QFont::MixedCase; + ev.color=parentMathText->getFontColor(); + }, 0); + instructions["normalfont"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.bold=false; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["md"] = i; + instructions["mdseries"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.bold=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["bf"] = i; + instructions["bfseries"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.italic=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["it"] = i; + instructions["itshape"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["up"] = i; + instructions["upshape"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.italic=!ev.italic; + }, 0); + instructions["em"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& parameters, const JKQTMathText* parentMathText) { + ev.color=jkqtp_String2QColor(parameters.value(0, ev.color.name())); + }, 1); + instructions["color"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& parameters, const JKQTMathText* parentMathText) { + ev.customFontName=parameters.value(0, ""); + ev.font=MTECustomFont; + }, 1); + instructions["setfont"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.capitalization=QFont::SmallCaps; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["sc"] = i; + instructions["scshape"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEroman; + ev.italic=false; + }, 0); + instructions["rm"] = i; + instructions["rmfamily"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.bold=true; + ev.italic=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["bfit"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; + }, 0); + instructions["cal"] = i; + instructions["calfamily"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEcaligraphic; + ev.bold=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["bbfcal"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; + }, 0); + instructions["frak"] = i; + instructions["frakfamily"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEfraktur; + ev.bold=true; + }, 0); + instructions["bffrak"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEblackboard; + ev.italic=false; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["bb"] = i; + instructions["bbfamily"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; + }, 0); + instructions["tt"] = i; + instructions["ttfamily"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEtypewriter; + ev.bold=true; + }, 0); + instructions["bftt"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEsans; + }, 0); + instructions["sf"] = i; + instructions["sffamily"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEsans; + ev.italic=true; + ev.insideMathForceDigitsUpright=false; + }, 0); + instructions["itsf"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEscript; + }, 0); + instructions["script"] = i; + instructions["scr"] = i; + instructions["scriptseries"] = i; + instructions["scrseries"] = i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.font=JKQTMathTextEnvironmentFont::MTEscript; + ev.bold=true; + }, 0); + instructions["bfscript"] = i; + instructions["bfscr"] = i; + } + + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize(); + ev.insideMathUseTextStyle=false; + }, 0); + instructions["displaystyle"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize(); + ev.insideMathUseTextStyle=true; + }, 0); + instructions["textstyle"]= i; + } + + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*0.75; + ev.insideMathUseTextStyle=true; + }, 0); + instructions["scriptstyle"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*0.5; + ev.insideMathUseTextStyle=true; + }, 0); + instructions["scriptscriptstyle"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*6.0/11.0; + }, 0); + instructions["tiny"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*7.0/11.0; + }, 0); + instructions["ssmall"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*8.0/11.0; + }, 0); + instructions["scriptsize"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*9.0/11.0; + }, 0); + instructions["footnotesize"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*10.0/11.0; + }, 0); + instructions["small"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*11.0/11.0; + }, 0); + instructions["normalsize"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*12.0/11.0; + }, 0); + instructions["large"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*14.4/11.0; + }, 0); + instructions["Large"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*17.28/11.0; + }, 0); + instructions["LARGE"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*20.74/11.0; + }, 0); + instructions["huge"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& /*parameters*/, const JKQTMathText* parentMathText) { + ev.fontSize=parentMathText->getFontSize()*24.88/11.0; + }, 0); + instructions["Huge"]= i; + } + { + InstructionProperties i([](JKQTMathTextEnvironment& ev, const QStringList& parameters, const JKQTMathText* parentMathText) { + ev.fontSize=parameters.value(0, QString::number(ev.fontSize)).toDouble(); + ev.fontSizeUnit=JKQTMathTextEnvironment::POINTS; + }, 1); + instructions["userfontsize"]= i; + instructions["fontsize"]= i; + } + + +} + +JKQTMathTextModifiedEnvironmentInstructionNode::InstructionProperties::InstructionProperties(): + NParams(0), + modifier([](JKQTMathTextEnvironment&, const QStringList&, const JKQTMathText*) {}) +{ + +} + +JKQTMathTextModifiedEnvironmentInstructionNode::InstructionProperties::InstructionProperties(const ModifyEnvironmentFunctor &_modifier, size_t _NParams): + NParams(_NParams), + modifier(_modifier) +{ + +} diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.h new file mode 100644 index 0000000000..00a7d772fa --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtextmodifyenvironmentnode.h @@ -0,0 +1,170 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + with contributions from: Razi Alavizadeh + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + + +#ifndef JKQTMATHTEXTMODIFYTEXTPROPSINSTRUCTIONNODE_H +#define JKQTMATHTEXTMODIFYTEXTPROPSINSTRUCTIONNODE_H +#include "jkqtmathtext/jkqtmathtext_imexport.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/nodes/jkqtmathtextnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextinstructionnode.h" +#include +#include + +class JKQTMathText; // forward +// JKQTMATHTEXT_LIB_EXPORT + +/** \brief subclass representing an instruction node which modifies the current + * font (as defined in JKQTMathTextEnvironment), for it's child node, + * i.e. it represents instructions like \c \\textbf{...}, \c \\ul{underlinedText}, ... + * \ingroup jkqtmathtext_items + * + * \note Instructions that modify the text for any further nodes WITHIN the + * current block are represented by JKQTMathTextModifiedEnvironmentInstructionNode + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextModifiedTextPropsInstructionNode: public JKQTMathTextInstruction1Node { + public: + explicit JKQTMathTextModifiedTextPropsInstructionNode(JKQTMathText* parent, const QString& name, JKQTMathTextNode* child, const QStringList& parameters=QStringList()); + virtual ~JKQTMathTextModifiedTextPropsInstructionNode() override; + /** \copydoc JKQTMathTextNode::getTypeName() */ + virtual QString getTypeName() const override; + /** \copydoc JKQTMathTextNode::draw() */ + virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; + /** \copydoc JKQTMathTextNode::toHtml() */ + virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; + + /** \brief returns true, if the given \a instructionName can be represented by this node + * \see instructions + */ + static bool supportsInstructionName(const QString& instructionName); + /** \brief returns the number of additional string parameters, required for the given \a instructionName + * \see instructions + */ + static size_t countParametersOfInstruction(const QString& instructionName); + /** \brief sets \a insideMath to \c true if inside the node is to be parsed in math mode and \c false else + * \see instructions + */ + static void modifyInMathEnvironment(const QString& instructionName, bool& insideMath, bool &insideMathTextStyle, const QStringList ¶ms=QStringList()); + + protected: + /** \copydoc JKQTMathTextNode::getSizeInternal() */ + virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; + /** \brief defines the implementation of an instruction represented by JKQTMathTextModifiedTextPropsInstructionNode */ + struct InstructionProperties { + /** \brief this functor implements the instruction */ + typedef std::function ModifyEnvironmentFunctor; + /** \brief default constructor, creates a NOP-instruction that does nothing */ + InstructionProperties(); + /** \brief constructor which gets a functor \a _modifier and a number of required parameters \a _NParams */ + InstructionProperties(const ModifyEnvironmentFunctor& _modifier, size_t _NParams=0); + /** \brief number of parameters for this node */ + size_t NParams; + /** \brief functor that modifies a JKQTMathTextEnvironment */ + ModifyEnvironmentFunctor modifier; + }; + + /** \brief fills instructions + * + * \note this is the customization point for new instructions! + */ + static void fillInstructions(); + /** \brief defines all implemented instructions in this node */ + static QHash instructions; + /** \brief executes the instruction on \a ev */ + void executeInstruction(JKQTMathTextEnvironment& ev) const; +}; + + + +/** \brief subclass representing an instruction node which modify the + * current JKQTMathTextEnvironment, in the current block. This + * implements functions like \c \\bf or \c \\color{COL} + * \ingroup jkqtmathtext_items + * + * \see JKQTMathTextModifyEnvironmentNodeMixIn + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextModifiedEnvironmentInstructionNode: public JKQTMathTextNonDrawingBaseNode, public JKQTMathTextModifyEnvironmentNodeMixIn { + public: + explicit JKQTMathTextModifiedEnvironmentInstructionNode(JKQTMathText* parent_, const QString& instructionName_, const QStringList& parameters_=QStringList()); + virtual ~JKQTMathTextModifiedEnvironmentInstructionNode() override; + /** \copydoc JKQTMathTextNode::getTypeName() */ + virtual QString getTypeName() const override; + /** \copydoc instructionName */ + const QString& getInstructionName() const; + /** \copydoc parameters */ + const QStringList& getParameters() const; + /** \copydoc JKQTMathTextModifyEnvironmentNodeMixIn::modifyEnvironment() */ + virtual void modifyEnvironment(JKQTMathTextEnvironment& currentEv) const override; + + /** \brief returns true, if the given \a instructionName can be represented by this node + * \see instructions + */ + static bool supportsInstructionName(const QString& instructionName); + /** \brief returns the number of additional string parameters, required for the given \a instructionName + * \see instructions + */ + static size_t countParametersOfInstruction(const QString& instructionName); + /** \brief sets \a insideMathTextStyle to \c true if textstyle is set inside math + * \see instructions + */ + static void modifyInMathTextStyleEnvironment(const QString& instructionName, bool &insideMathTextStyle, JKQTMathText *parentMathText, const QStringList ¶ms=QStringList()); + protected: + /** \brief instruction name */ + QString instructionName; + /** \brief additional string-parameters */ + QStringList parameters; + /** \brief defines the implementation of an instruction represented by JKQTMathTextModifiedTextPropsInstructionNode */ + struct InstructionProperties { + /** \brief this functor implements the instruction */ + typedef std::function ModifyEnvironmentFunctor; + /** \brief default constructor, creates a NOP-instruction that does nothing */ + InstructionProperties(); + /** \brief constructor which gets a functor \a _modifier and a number of required parameters \a _NParams */ + InstructionProperties(const ModifyEnvironmentFunctor& _modifier, size_t _NParams=0); + /** \brief number of parameters for this node */ + size_t NParams; + /** \brief functor that modifies a JKQTMathTextEnvironment */ + ModifyEnvironmentFunctor modifier; + }; + + /** \brief fills instructions + * + * \note this is the customization point for new instructions! + */ + static void fillInstructions(); + /** \brief defines all implemented instructions in this node */ + static QHash instructions; +}; + + + + +#endif // JKQTMATHTEXTMODIFYTEXTPROPSINSTRUCTIONNODE_H + + + + + + + + + diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextnode.cpp index d6360c1f36..f14d222200 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextnode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtextnode.cpp @@ -374,33 +374,35 @@ void JKQTMathTextMultiChildNode::setDrawBoxes(bool draw) } -JKQTMathTextNoopNode::JKQTMathTextNoopNode(JKQTMathText *parent): + + + + + + + +JKQTMathTextNonDrawingBaseNode::JKQTMathTextNonDrawingBaseNode(JKQTMathText *parent): JKQTMathTextNode(parent) { } -JKQTMathTextNoopNode::~JKQTMathTextNoopNode() +JKQTMathTextNonDrawingBaseNode::~JKQTMathTextNonDrawingBaseNode() { } -QString JKQTMathTextNoopNode::getTypeName() const -{ - return "MTNoopNode"; -} - -bool JKQTMathTextNoopNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const -{ - return true; -} - -double JKQTMathTextNoopNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv) const +double JKQTMathTextNonDrawingBaseNode::draw(QPainter &/*painter*/, double x, double /*y*/, JKQTMathTextEnvironment /*currentEv*/) const { return x; } -JKQTMathTextNodeSize JKQTMathTextNoopNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv) const +bool JKQTMathTextNonDrawingBaseNode::toHtml(QString &/*html*/, JKQTMathTextEnvironment /*currentEv*/, JKQTMathTextEnvironment /*defaultEv*/) const +{ + return true; +} + +JKQTMathTextNodeSize JKQTMathTextNonDrawingBaseNode::getSizeInternal(QPainter &/*painter*/, JKQTMathTextEnvironment /*currentEv*/) const { return JKQTMathTextNodeSize(); } diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextnode.h index 7ee94ba9dd..f01ba419e4 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextnode.h +++ b/lib/jkqtmathtext/nodes/jkqtmathtextnode.h @@ -282,23 +282,47 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextDualChildNode: public JKQTMathTextMult -/** \brief subclass representing a node that outputs nothing +/** \brief base class for all derived classes that do not draw anything * \ingroup jkqtmathtext_items * + * This class finalizes draw() with no drawing actions and and getSizeInternal(), which + * return a size 0. */ -class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextNoopNode: public JKQTMathTextNode { +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextNonDrawingBaseNode: public JKQTMathTextNode { public: - explicit JKQTMathTextNoopNode(JKQTMathText* parent); - virtual ~JKQTMathTextNoopNode() override; - /** \copydoc JKQTMathTextNode::getTypeName() */ - virtual QString getTypeName() const override; - /** \copydoc JKQTMathTextNode::toHtml() */ - virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; + explicit JKQTMathTextNonDrawingBaseNode(JKQTMathText* parent); + virtual ~JKQTMathTextNonDrawingBaseNode() override; /** \copydoc JKQTMathTextNode::draw() */ - virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; + virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override final; + /** \copydoc JKQTMathTextNode::toHtml() */ + virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override final; protected: /** \copydoc JKQTMathTextNode::getSizeInternal() */ - virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; + virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override final; }; + + +/** \brief mixin extending a node that does not produce any output, + * but provides a function modifyEnvironment() that modifies the current + * JKQTMathTextEnvironment. Deriving classes are used to represent + * instructions like \c \\bf or \c \\color{...} that alter the text + * formatting for all further nodes in the current block. + * \ingroup jkqtmathtext_items + * + * Classes derived from this require a parent node that executes the additional method + * modifyEnvironment(). In the context of JKQTMathText, this is done by JKQTMathTextHorizontalListNode . + * Therefor the effect of the node end with the last nod in the parent list node. + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextModifyEnvironmentNodeMixIn { + public: + inline virtual ~JKQTMathTextModifyEnvironmentNodeMixIn() {}; + /** \brief modifies the fiven JKQTMathTextEnvironment \a currrentEv */ + virtual void modifyEnvironment(JKQTMathTextEnvironment& currentEv) const=0; + protected: + +}; + + + #endif // JKQTMATHTEXTNODE_H diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.cpp new file mode 100644 index 0000000000..7665151689 --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.cpp @@ -0,0 +1,81 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + +#include "jkqtmathtext/nodes/jkqtmathtextnoopnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextnode.h" +#include "jkqtmathtext/jkqtmathtext.h" + + + +JKQTMathTextNoopNode::JKQTMathTextNoopNode(JKQTMathText *parent): + JKQTMathTextNonDrawingBaseNode(parent) +{ + +} + +JKQTMathTextNoopNode::~JKQTMathTextNoopNode() +{ + +} + +QString JKQTMathTextNoopNode::getTypeName() const +{ + return "MTNoopNode"; +} + + + + + + + + + +JKQTMathTextBlockNode::JKQTMathTextBlockNode(JKQTMathTextNode *_child, JKQTMathText *parent): + JKQTMathTextSingleChildNode(_child, parent) +{ + +} + +JKQTMathTextBlockNode::~JKQTMathTextBlockNode() +{ + +} + +QString JKQTMathTextBlockNode::getTypeName() const +{ + return "MTBlockNode"; +} + +double JKQTMathTextBlockNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv) const +{ + return child->draw(painter, x, y, currentEv); +} + +bool JKQTMathTextBlockNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const +{ + return child->toHtml(html, currentEv, defaultEv); +} + +JKQTMathTextNodeSize JKQTMathTextBlockNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv) const +{ + return child->getSize(painter, currentEv); +} diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.h new file mode 100644 index 0000000000..22ab204502 --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtextnoopnode.h @@ -0,0 +1,82 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + with contributions from: Razi Alavizadeh + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + + +#ifndef JKQTMATHTEXTNOOPNODE_H +#define JKQTMATHTEXTNOOPNODE_H +#include "jkqtmathtext/jkqtmathtext_imexport.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/nodes/jkqtmathtextnode.h" +#include + +class JKQTMathText; // forward + + +/** \brief subclass representing a node that outputs nothing + * \ingroup jkqtmathtext_items + * + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextNoopNode: public JKQTMathTextNonDrawingBaseNode { + public: + explicit JKQTMathTextNoopNode(JKQTMathText* parent); + virtual ~JKQTMathTextNoopNode() override; + /** \copydoc JKQTMathTextNode::getTypeName() */ + virtual QString getTypeName() const override; + protected: + +}; + + +/** \brief subclass representing a \c {...} block + * \ingroup jkqtmathtext_items + * + * This is necessray becaus JKQTMathtextHorizontalListNode + * implements JKQTMathTextModifyEnvironmentNodeMixIn, but a + * \c {...} block does not hand on its modified JKQTMathTextEnvironment. + * + * This node simply hands on all calls to its child. + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextBlockNode: public JKQTMathTextSingleChildNode { + public: + explicit JKQTMathTextBlockNode(JKQTMathTextNode *_child, JKQTMathText* parent); + virtual ~JKQTMathTextBlockNode() override; + /** \copydoc JKQTMathTextNode::getTypeName() */ + virtual QString getTypeName() const override; + /** \copydoc JKQTMathTextNode::draw() */ + virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; + /** \copydoc JKQTMathTextNode::toHtml() */ + virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; + protected: + /** \copydoc JKQTMathTextNode::getSizeInternal() */ + virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; + +}; +#endif // JKQTMATHTEXTNOOPNODE_H + + + + + + + + + diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextsymbolnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextsymbolnode.cpp index e706dae7a0..5f6661e195 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextsymbolnode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtextsymbolnode.cpp @@ -432,6 +432,12 @@ JKQTMathTextSymbolNode::SymbolFullProps JKQTMathTextSymbolNode::UnicodeSymbol(co return SymbolFullProps(MTFEUnicode, SymbolProps(symbol, _flags, _fontScalingFactor, _yShiftFactor)); } +JKQTMathTextSymbolNode::SymbolFullProps JKQTMathTextSymbolNode::UprightSymbolStd(const QString &symbol) +{ + QString html=symbol; + return UprightSymbolStd(symbol, html); +} + JKQTMathTextSymbolNode::SymbolFullProps JKQTMathTextSymbolNode::UnicodeSymbol(const QString &symbol, const QString &html) { return SymbolFullProps(MTFEUnicode, SymbolProps(symbol), html); @@ -447,6 +453,13 @@ JKQTMathTextSymbolNode::SymbolFullProps JKQTMathTextSymbolNode::UprightSymbolStd return SymbolFullProps(MTFEStandard, SymbolProps(symbol, ItalicOff), html, ItalicOff); } +JKQTMathTextSymbolNode::SymbolFullProps JKQTMathTextSymbolNode::UprightSymbolUnicode(const QString &symbol) +{ + QString html=symbol; + return UprightSymbolUnicode(symbol, html); + +} + JKQTMathTextSymbolNode::SymbolFullProps JKQTMathTextSymbolNode::UprightSymbolUnicode(const QString &symbol, const QString &html) { return SymbolFullProps(MTFEUnicode, SymbolProps(symbol, ItalicOff), html, ItalicOff); @@ -529,14 +542,14 @@ void JKQTMathTextSymbolNode::fillSymbolTables() symbols["backslash"]=SimpleTextSymbol("\\"); symbols["benzene"]=UprightSymbolUnicode(QChar(0x232C)); symbols["benzenr"]=UprightSymbolUnicode(QChar(0x23E3)); - symbols["blacksquare"]=UprightSymbolUnicode(QChar(0x220E)).addHtml("□"); + symbols["blacksquare"]=UprightSymbolUnicode(QChar(0x220E)).addUprightHtml("□"); { auto s=UprightSymbolUnicode(QChar(0x231E)); symbols["blcorner"]=s; symbols["llcorner"]=s; } { auto s=UprightSymbolUnicode(QChar(0x231F)); symbols["brcorner"]=s; symbols["lrcorner"]=s; } { auto s=UprightSymbolUnicode(QChar(0x2022)).addUprightHtml("•").addUprightWinSymbol(QChar(0xB7)); symbols["bullet"]=s; symbols["textbullet"]=s; } - symbols["cdots"]=UprightSymbolUnicode(QChar(0x22EF)).addHtml("···").addStd(QString(3, QChar(0xB7))); + symbols["cdots"]=UprightSymbolUnicode(QChar(0x22EF)).addUprightHtml("···").addUprightStd(QString(3, QChar(0xB7))); { auto s=UnicodeSymbol(QChar(0x2103)).addUprightStd("°C").addUprightHtml("°C"); symbols["celsius"]=s; symbols["degC"]=s; symbols["degreeCelsius"]=s; } symbols["ell"]=UprightSymbolUnicode(QChar(0x2113), "ℓ"); @@ -584,13 +597,13 @@ void JKQTMathTextSymbolNode::fillSymbolTables() symbols["hbar"]=UprightSymbolUnicode(QChar(0x210F)).addUprightHtml("ℏ").addStd("h", ItalicOn|DrawLeftHBar).addGlobalFlags(SubscriptCorrection); symbols["hexagon"]=UprightSymbolUnicode(QChar(0x2394)); symbols["ii"] = SymbolFullProps(SymbolProps("i", Upright|BoldOff), "i", Upright|BoldOff); - symbols["infty"]=UnicodeSymbol(QChar(0x221E)).addHtml("∞").addWinSymbol(QChar(0xA5)).addStd("8", RotateSymbol90); + symbols["infty"]=UprightSymbolUnicode(QChar(0x221E)).addUprightHtml("∞").addUprightWinSymbol(QChar(0xA5)).addUprightStd("8", RotateSymbol90); symbols["langle"]=UprightSymbolUnicode(QChar(0x2329)).addWinSymbol(QChar(0xE1)); - symbols["lceil"]=UprightSymbolUnicode(QChar(0x2308)).addHtml("⌈").addWinSymbol(QChar(0xE9)); - symbols["lfloor"]=UprightSymbolUnicode(QChar(0x230A)).addHtml("⌊").addWinSymbol(QChar(0xEB)); + symbols["lceil"]=UprightSymbolUnicode(QChar(0x2308)).addUprightHtml("⌈").addUprightWinSymbol(QChar(0xE9)); + symbols["lfloor"]=UprightSymbolUnicode(QChar(0x230A)).addUprightHtml("⌊").addUprightWinSymbol(QChar(0xEB)); symbols["lightning"]=UnicodeSymbol(QChar(0x21AF)); symbols["male"]=UnicodeSymbol(QChar(0x2642)).addHtml("♂"); - symbols["measuredangle"]=UprightSymbolUnicode(QChar(0x2221)).addHtml("∡"); + symbols["measuredangle"]=UprightSymbolUnicode(QChar(0x2221)).addUprightHtml("∡"); symbols["micro"] = SimpleTextSymbol(QChar(0xB5), "µ"); symbols["ohm"]=UprightSymbolUnicode(QChar(0x2126)).addUprightHtml("Ω").addUprightWinSymbol(QChar(0x57)); symbols["partial"]=UprightSymbolUnicode(QChar(0x2202)).addUprightHtml("∂").addUprightWinSymbol(QChar(0xB6)); @@ -601,14 +614,14 @@ void JKQTMathTextSymbolNode::fillSymbolTables() symbols["prime"]=UnicodeSymbol(QChar(0x2032)).addHtml("′").addStd("'"); symbols["arcminute"]=UnicodeSymbol(QChar(0x2032)).addHtml("′").addStd("'"); symbols["arcsecond"]=UnicodeSymbol(QChar(0x2033)).addHtml("&dprime;").addStd("'"); - symbols["rangle"]=UprightSymbolUnicode(QChar(0x232A)).addWinSymbol(QChar(0xF1)); - symbols["rceil"]=UprightSymbolUnicode(QChar(0x2309)).addHtml("⌉").addWinSymbol(QChar(0xF9)); + symbols["rangle"]=UprightSymbolUnicode(QChar(0x232A)).addUprightWinSymbol(QChar(0xF1)); + symbols["rceil"]=UprightSymbolUnicode(QChar(0x2309)).addUprightHtml("⌉").addUprightWinSymbol(QChar(0xF9)); { auto s=SimpleTextSymbol(QChar(0xAE), "®"); symbols["registered"]=s; symbols["textregistered"]=s; symbols["circledR"]=s; } - symbols["rfloor"]=UprightSymbolUnicode(QChar(0x230B)).addHtml("⌋").addWinSymbol(QChar(0xFB)); - symbols["rightangle"]=UprightSymbolUnicode(QChar(0x221F)).addHtml("∟"); - symbols["smile"]=UprightSymbolUnicode(QChar(0x2323)).addHtml("⌣"); - symbols["sphericalangle"]=UprightSymbolUnicode(QChar(0x2222)).addHtml("∢"); + symbols["rfloor"]=UprightSymbolUnicode(QChar(0x230B)).addUprightHtml("⌋").addUprightWinSymbol(QChar(0xFB)); + symbols["rightangle"]=UprightSymbolUnicode(QChar(0x221F)).addUprightHtml("∟"); + symbols["smile"]=UprightSymbolUnicode(QChar(0x2323)).addUprightHtml("⌣"); + symbols["sphericalangle"]=UprightSymbolUnicode(QChar(0x2222)).addUprightHtml("∢"); symbols["star"]=UprightSymbolUnicode(QChar(0x22C6)); symbols["tcohm"]=UnicodeSymbol(QChar(0x2126)); { auto s=UnicodeSymbol(QChar(0x2014), "⹀"); diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextsymbolnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextsymbolnode.h index f56a34c7ef..c67f0a6301 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtextsymbolnode.h +++ b/lib/jkqtmathtext/nodes/jkqtmathtextsymbolnode.h @@ -65,6 +65,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSymbolNode: public JKQTMathTextNode { virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; /** \copydoc JKQTMathTextNode::toHtml() */ virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; + /** \copydoc symbolName */ QString getSymbolName() const; /** \brief return type for getSymbolSize(), extends JKQTMathTextNodeSize with information about x-correction for sub- and superscript */ @@ -91,7 +92,7 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSymbolNode: public JKQTMathTextNode { static bool hasSymbol(const QString& symbolName); /** \brief return a list of all defined symbols */ static QStringList getSymbols(); - /** \brief checks whether the given symbol name codes for an instruction that has SymbolFullProps::SubSuperscriptBelowAboveSymbol , i.e. JKQTMathTextNode::isSubSuperscriptAboveBelowNode() \c ==true */ + /** \brief checks whether the given symbol name codes for an instruction that has SymbolFullProps::SubSuperscriptBelowAboveSymbol , does not neccessarily return the same value as JKQTMathTextNode::isSubSuperscriptAboveBelowNode() */ static bool isSubSuperscriptBelowAboveSymbol(const QString& symbolName); /** \brief checks whether the given symbol has global flags SymbolFullProps::ExtendWidthInMathmode or SymbolFullProps::SmallExtendWidthInMathmode defined */ static bool isExtendedWidthSymbol(const QString& symbolName); @@ -283,9 +284,13 @@ class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextSymbolNode: public JKQTMathTextNode { /** \brief constructs a SymbolProps for a symbol with encoding in UnicodeFull-fonts a */ static SymbolFullProps UnicodeSymbol(const QString& symbol, SymbolFlags _flags=AsOutside, double _fontScalingFactor=1.0, double _yShiftFactor=0.0); /** \brief constructs a SymbolProps for a symbol with encoding in Standard-fonts a */ - static SymbolFullProps UprightSymbolStd(const QString& symbol, const QString& html=QString()); + static SymbolFullProps UprightSymbolStd(const QString& symbol); /** \brief constructs a SymbolProps for a symbol with encoding in UnicodeFull-fonts a */ - static SymbolFullProps UprightSymbolUnicode(const QString& symbol, const QString& html=QString()); + static SymbolFullProps UprightSymbolUnicode(const QString& symbol); + /** \brief constructs a SymbolProps for a symbol with encoding in Standard-fonts a */ + static SymbolFullProps UprightSymbolStd(const QString& symbol, const QString& html); + /** \brief constructs a SymbolProps for a symbol with encoding in UnicodeFull-fonts a */ + static SymbolFullProps UprightSymbolUnicode(const QString& symbol, const QString& html); /** \brief constructs a SymbolProps for a math-operator symbol like \c \\pm ... in unicode-full-encoding, i.e. ItalicOff, BoldOff, ExtendWidthInMathmode */ static SymbolFullProps MathOperatorSymbolUnicode(const QString& unicode); /** \brief constructs a SymbolProps for a narrow math-operator symbol like \c \\pm ... in unicode-full-encoding, i.e. ItalicOff, BoldOff, SmallExtendWidthInMathmode */ diff --git a/lib/jkqtmathtext/nodes/jkqtmathtexttextnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtexttextnode.cpp index 574b2eae22..002fc9741c 100644 --- a/lib/jkqtmathtext/nodes/jkqtmathtexttextnode.cpp +++ b/lib/jkqtmathtext/nodes/jkqtmathtexttextnode.cpp @@ -381,210 +381,6 @@ QString JKQTMathTextTextNode::textTransform(const QString &text, const JKQTMathT - - - - -JKQTMathTextVerbatimNode::JKQTMathTextVerbatimNode(JKQTMathText *_parent, const QString& _text, bool visibleWhitespace_, JKQTMathTextHorizontalAlignment _alignment, double _linespacingFactor, JKQTMathTextVerticalOrientation _verticalOrientation, size_t tabSize_): - JKQTMathTextTextBaseNode(_parent, _text), - alignment(_alignment), - lineSpacingFactor(_linespacingFactor), - verticalOrientation(_verticalOrientation), - visibleWhitespace(visibleWhitespace_), - tabSize(tabSize_) -{ - -} - -QString JKQTMathTextVerbatimNode::getTypeName() const -{ - return QLatin1String("JKQTMathTextVerbatimNode"); -} - -JKQTMathTextHorizontalAlignment JKQTMathTextVerbatimNode::getAlignment() const -{ - return alignment; -} - -JKQTMathTextVerticalOrientation JKQTMathTextVerbatimNode::getVerticalOrientation() const -{ - return verticalOrientation; -} - -double JKQTMathTextVerbatimNode::getLineSpacingFactor() const -{ - return lineSpacingFactor; -} - -bool JKQTMathTextVerbatimNode::getVisibleWhitespace() const -{ - return visibleWhitespace; -} - -size_t JKQTMathTextVerbatimNode::getTabSize() const -{ - return tabSize; -} - -double JKQTMathTextVerbatimNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv) const -{ - transformEnvironment(currentEv); - const LayoutInfo l=calcLayout(painter, currentEv); - doDrawBoxes(painter, x, y, l); - QFont f=currentEv.getFont(parentMathText); - f.setStyleStrategy(QFont::PreferDefault); - f.setFixedPitch(true); - painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); - painter.setFont(f); - for (int i=0; i0; - html+=currentEv.toHtmlStart(defaultEv, parentMathText); - if (isMultiLine) { - if (alignment==MTHALeft) { - html+="
    "; - } else if (alignment==MTHACentered) { - html+="
    "; - } else if (alignment==MTHARight) { - html+="
    "; - } - } - html+="
    ";
    -    html+=textTransform(text, currentEv).toHtmlEscaped();
    -    html+="
    "; - if (isMultiLine) html+="
    "; - html+=currentEv.toHtmlAfter(defaultEv, parentMathText); - return true; -} - -JKQTMathTextNodeSize JKQTMathTextVerbatimNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv) const -{ - transformEnvironment(currentEv); - return calcLayout(painter, currentEv); -} - -void JKQTMathTextVerbatimNode::transformEnvironment(JKQTMathTextEnvironment ¤tEv) const -{ - currentEv.font=MTEtypewriter; -} - -JKQTMathTextVerbatimNode::LayoutInfo JKQTMathTextVerbatimNode::calcLayout(QPainter &painter, const JKQTMathTextEnvironment& currentEv) const -{ - LayoutInfo l; - QFont f=currentEv.getFont(parentMathText); - f.setStyleStrategy(QFont::PreferDefault); - f.setFixedPitch(true); - const QFontMetricsF fm(f); - const double linespacing=fm.lineSpacing()*lineSpacingFactor; - const double fleading=fm.leading(); - const double synLeading=fm.lineWidth(); - const double lineLeading=((fabs(fleading)>1e-6)?fleading:synLeading)*lineSpacingFactor; - - if (text.size()<=0) { - return l; - } - l.lines=textTransform(text, currentEv).split('\n'); - - // from now on we have at least one child node!!! - - QList widths, heights, ascents, descents, strikeouts; - double heightSum=0; - QList ysFromFirstLine; // y-position of each line, where the first line is always at y=0 (i.e. ysFromFirstLine[0]==0) - double y=0; - for (int i=0; i0) { - const double deltaLine=qMax(linespacing, descents.last()+lineLeading+fm.ascent()); - heightSum=heightSum+deltaLine; - y=y+deltaLine; - } - widths< X; - }; - /** \brief calclates the layout of the whole block/node - * - * \note This function does NOT call transformEnvironment(); - * it has to be called before calling this! - */ - LayoutInfo calcLayout(QPainter& painter, const JKQTMathTextEnvironment& currentEv) const; - /** \brief transforms the \a text before sizing/drawing (may e.g. exchange special letters for other unicode symbols etc.) */ - virtual QString textTransform(const QString& text, const JKQTMathTextEnvironment& currentEv) const override; -}; - - #endif // JKQTMATHTEXTTEXTNODE_H diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextverbatimnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextverbatimnode.cpp new file mode 100644 index 0000000000..f52354ea29 --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtextverbatimnode.cpp @@ -0,0 +1,239 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + +#include "jkqtmathtext/nodes/jkqtmathtextverbatimnode.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/nodes/jkqtmathtextnode.h" +#include "jkqtmathtext/jkqtmathtext.h" +#include "jkqtcommon/jkqtpcodestructuring.h" +#include "jkqtcommon/jkqtpstringtools.h" +#include +#include +#include +#include +#include +#include +#include + + + + + + +JKQTMathTextVerbatimNode::JKQTMathTextVerbatimNode(JKQTMathText *_parent, const QString& _text, bool visibleWhitespace_, JKQTMathTextHorizontalAlignment _alignment, double _linespacingFactor, JKQTMathTextVerticalOrientation _verticalOrientation, size_t tabSize_): + JKQTMathTextTextBaseNode(_parent, _text), + alignment(_alignment), + lineSpacingFactor(_linespacingFactor), + verticalOrientation(_verticalOrientation), + visibleWhitespace(visibleWhitespace_), + tabSize(tabSize_) +{ + +} + +QString JKQTMathTextVerbatimNode::getTypeName() const +{ + return QLatin1String("JKQTMathTextVerbatimNode"); +} + +JKQTMathTextHorizontalAlignment JKQTMathTextVerbatimNode::getAlignment() const +{ + return alignment; +} + +JKQTMathTextVerticalOrientation JKQTMathTextVerbatimNode::getVerticalOrientation() const +{ + return verticalOrientation; +} + +double JKQTMathTextVerbatimNode::getLineSpacingFactor() const +{ + return lineSpacingFactor; +} + +bool JKQTMathTextVerbatimNode::getVisibleWhitespace() const +{ + return visibleWhitespace; +} + +size_t JKQTMathTextVerbatimNode::getTabSize() const +{ + return tabSize; +} + +double JKQTMathTextVerbatimNode::draw(QPainter &painter, double x, double y, JKQTMathTextEnvironment currentEv) const +{ + transformEnvironment(currentEv); + const LayoutInfo l=calcLayout(painter, currentEv); + doDrawBoxes(painter, x, y, l); + QFont f=currentEv.getFont(parentMathText); + f.setStyleStrategy(QFont::PreferDefault); + f.setFixedPitch(true); + painter.save(); auto __finalpaint=JKQTPFinally([&painter]() {painter.restore();}); + painter.setFont(f); + for (int i=0; i0; + html+=currentEv.toHtmlStart(defaultEv, parentMathText); + if (isMultiLine) { + if (alignment==MTHALeft) { + html+="
    "; + } else if (alignment==MTHACentered) { + html+="
    "; + } else if (alignment==MTHARight) { + html+="
    "; + } + } + html+="
    ";
    +    html+=textTransform(text, currentEv).toHtmlEscaped();
    +    html+="
    "; + if (isMultiLine) html+="
    "; + html+=currentEv.toHtmlAfter(defaultEv, parentMathText); + return true; +} + +JKQTMathTextNodeSize JKQTMathTextVerbatimNode::getSizeInternal(QPainter &painter, JKQTMathTextEnvironment currentEv) const +{ + transformEnvironment(currentEv); + return calcLayout(painter, currentEv); +} + +void JKQTMathTextVerbatimNode::transformEnvironment(JKQTMathTextEnvironment ¤tEv) const +{ + currentEv.font=MTEtypewriter; +} + +JKQTMathTextVerbatimNode::LayoutInfo JKQTMathTextVerbatimNode::calcLayout(QPainter &painter, const JKQTMathTextEnvironment& currentEv) const +{ + LayoutInfo l; + QFont f=currentEv.getFont(parentMathText); + f.setStyleStrategy(QFont::PreferDefault); + f.setFixedPitch(true); + const QFontMetricsF fm(f); + const double linespacing=fm.lineSpacing()*lineSpacingFactor; + const double fleading=fm.leading(); + const double synLeading=fm.lineWidth(); + const double lineLeading=((fabs(fleading)>1e-6)?fleading:synLeading)*lineSpacingFactor; + + if (text.size()<=0) { + return l; + } + l.lines=textTransform(text, currentEv).split('\n'); + + // from now on we have at least one child node!!! + + QList widths, heights, ascents, descents, strikeouts; + double heightSum=0; + QList ysFromFirstLine; // y-position of each line, where the first line is always at y=0 (i.e. ysFromFirstLine[0]==0) + double y=0; + for (int i=0; i0) { + const double deltaLine=qMax(linespacing, descents.last()+lineLeading+fm.ascent()); + heightSum=heightSum+deltaLine; + y=y+deltaLine; + } + widths<) + with contributions from: Razi Alavizadeh + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + + +#ifndef JKQTMATHTEXTVERBATIMNODE_H +#define JKQTMATHTEXTVERBATIMNODE_H +#include "jkqtmathtext/jkqtmathtext_imexport.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/nodes/jkqtmathtextnode.h" +#include "jkqtmathtext/nodes/jkqtmathtexttextnode.h" +#include + +class JKQTMathText; // forward +// JKQTMATHTEXT_LIB_EXPORT + + + +/** \brief subclass representing a verbatim (plain-text) node with support for line-breaks in the syntax tree + * \ingroup jkqtmathtext_items + * + * The layout of the lines can left-aligned, right-aligned or centered. + * + * \image html jkqtmathtext_verticallist.png + * + * \image html jkqtmathtext_verticalalignment.png + * + * \image html jkqtmathtext_horizontalalignment.png + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextVerbatimNode: public JKQTMathTextTextBaseNode { + public: + explicit JKQTMathTextVerbatimNode(JKQTMathText* parent, const QString& text, bool visibleWhitespace=false, JKQTMathTextHorizontalAlignment _alignment=MTHALeft, double _linespacingFactor=1.0, JKQTMathTextVerticalOrientation _verticalOrientation=MTVOFirstLine, size_t tabSize_=4); + /** \copydoc JKQTMathTextNode::getTypeName() */ + virtual QString getTypeName() const override; + /** \copydoc alignment */ + JKQTMathTextHorizontalAlignment getAlignment() const; + /** \copydoc verticalOrientation */ + JKQTMathTextVerticalOrientation getVerticalOrientation() const; + /** \copydoc lineSpacingFactor */ + double getLineSpacingFactor() const; + /** \copydoc visibleWhitespace */ + bool getVisibleWhitespace() const; + /** \copydoc tabSize */ + size_t getTabSize() const; + /** \copydoc JKQTMathTextNode::draw() */ + virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; + /** \copydoc JKQTMathTextNode::toHtml() */ + virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; + protected: + /** \brief alignment scheme used to lay out all lines + * + * \image html jkqtmathtext_horizontalalignment.png + */ + JKQTMathTextHorizontalAlignment alignment; + /** \brief spacing of the separate lines, as factor of the default line-spacing [Default: 1]. + * + * This property can be used to move the lines closer together or farther apart. + * + * \image html jkqtmathtext_verticallist.png + */ + double lineSpacingFactor; + /** \brief vertical orientation of the baseline of the whole block (with respect to the single lines) + * + * \image html jkqtmathtext_verticalorientation.png + */ + JKQTMathTextVerticalOrientation verticalOrientation; + /** \brief when \c true, whitespaces are displayed with a visible character */ + bool visibleWhitespace; + /** \brief number of whitespaces, each tab character stands for */ + size_t tabSize; + + /** \copydoc JKQTMathTextNode::getSizeInternal() */ + virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; + /** \brief sets all necessary settings in \a currentEv for drawing this node */ + virtual void transformEnvironment(JKQTMathTextEnvironment& currentEv) const; + + /** \brief describes the layout of the whole node */ + struct LayoutInfo: public JKQTMathTextNodeSize { + LayoutInfo(); + /** \brief the text from JKQTMathTextVerbatimNode::text, split into lines */ + QStringList lines; + /** \brief drawing position for each line */ + QList X; + }; + /** \brief calclates the layout of the whole block/node + * + * \note This function does NOT call transformEnvironment(); + * it has to be called before calling this! + */ + LayoutInfo calcLayout(QPainter& painter, const JKQTMathTextEnvironment& currentEv) const; + /** \brief transforms the \a text before sizing/drawing (may e.g. exchange special letters for other unicode symbols etc.) */ + virtual QString textTransform(const QString& text, const JKQTMathTextEnvironment& currentEv) const override; +}; + + +#endif // JKQTMATHTEXTVERBATIMNODE_H + + + + + + + + + diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextverticallistnode.cpp b/lib/jkqtmathtext/nodes/jkqtmathtextverticallistnode.cpp new file mode 100644 index 0000000000..acef7541ec --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtextverticallistnode.cpp @@ -0,0 +1,312 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + +#include "jkqtmathtext/nodes/jkqtmathtextverticallistnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextsymbolnode.h" +#include "jkqtmathtext/nodes/jkqtmathtextbracenode.h" +#include "jkqtmathtext/nodes/jkqtmathtextsubsupernode.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/jkqtmathtext.h" +#include "jkqtcommon/jkqtpcodestructuring.h" +#include "jkqtcommon/jkqtpstringtools.h" +#include +#include +#include +#include +#include +#include +#include + + +JKQTMathTextVerticalListNode::JKQTMathTextVerticalListNode(JKQTMathText *_parent, JKQTMathTextHorizontalAlignment _alignment, double _linespacingFactor, JKQTMathTextLineSpacingMode spacingMode_, JKQTMathTextVerticalOrientation _verticalOrientation): + JKQTMathTextMultiChildNode(_parent), + alignment(_alignment), + lineSpacingFactor(_linespacingFactor), + verticalOrientation(_verticalOrientation), + spacingMode(spacingMode_) +{ + nodes.clear(); + // these operations cause sub/sup script to be typeset over/under the operator, not right besides! +} + +JKQTMathTextVerticalListNode::~JKQTMathTextVerticalListNode() { + clearChildrenImpl(true); +} + +QString JKQTMathTextVerticalListNode::getTypeName() const +{ + return "MTVerticalListNode"; +} + +JKQTMathTextNodeSize JKQTMathTextVerticalListNode::getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const { + return calcLayout(painter, currentEv); +} + +JKQTMathTextVerticalListNode::LayoutInfo JKQTMathTextVerticalListNode::calcLayout(QPainter &painter, JKQTMathTextEnvironment ev) const +{ + JKQTMathTextEnvironment currentEv=ev; + LayoutInfo l; + + if (nodes.size()<=0) { + return l; + } + + // from now on we have at least one child node!!! + + QList widths, heights, ascents, descents, strikeouts; + double heightSum=0; + QList ysFromFirstLine; // y-position of each line, where the first line is always at y=0 (i.e. ysFromFirstLine[0]==0) + double y=0; + for (int i=0; i1e-6)?fleading:synLeading)*lineSpacingFactor; + + const JKQTMathTextNodeSize loc=nodes[i]->getSize(painter, currentEv); + + if (i==0) { + heightSum=loc.baselineHeight; + } else if (i>0) { + double deltaLine=0; + if (spacingMode==MTSMMinimalSpacing) { + deltaLine=descents.last()+lineLeading+loc.baselineHeight; + } else if (spacingMode==MTSMDefaultSpacing) { + deltaLine=qMax(linespacing, descents.last()+lineLeading+loc.baselineHeight); + } + heightSum=heightSum+deltaLine; + y=y+deltaLine; + } + widths<(nodes[i]); + if (modEnvNode) { + modEnvNode->modifyEnvironment(currentEv); + } + + } + heightSum+=descents.last(); + + l.overallHeight=heightSum; + double y0=0; + if (verticalOrientation==MTVOTop) { + l.baselineHeight=0; + l.strikeoutPos=0; + y0=ascents.first(); + } else if (verticalOrientation==MTVOFirstLine) { + l.baselineHeight=ascents.first(); + l.strikeoutPos=strikeouts.first(); + y0=0; + } else if (verticalOrientation==MTVOCentered) { + l.baselineHeight=heightSum/2.0; + l.strikeoutPos=heightSum/4.0; + y0=-heightSum/2.0+ascents.first(); + } else if (verticalOrientation==MTVOLastLine) { + l.baselineHeight=heightSum-descents.last(); + l.strikeoutPos=strikeouts.last(); + y0=-(heightSum-ascents.first()-descents.last()); + } else if (verticalOrientation==MTVOBottom) { + l.baselineHeight=heightSum; + l.strikeoutPos=0; + y0=-(heightSum-ascents.first()); + } + for (int i=0; idraw(painter, x+l.X.at(i).x(), y+l.X.at(i).y(), currentEv); + JKQTMathTextModifyEnvironmentNodeMixIn* modEnvNode=dynamic_cast(nodes[i]); + if (modEnvNode) { + modEnvNode->modifyEnvironment(currentEv); + } + } + return x+l.width; +} + +void JKQTMathTextVerticalListNode::addChild(JKQTMathTextNode *n) { + n->setParentNode(this); + nodes.append(n); +} + +bool JKQTMathTextVerticalListNode::toHtml(QString &html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const { + bool ok=true; + if (alignment==MTHALeft) { + html+="
    "; + } else if (alignment==MTHACentered) { + html+="
    "; + } else if (alignment==MTHARight) { + html+="
    "; + } + for (int i=0; itoHtml(h, currentEv, defaultEv); + if (i==0) html=html+h; + else html=html+"
    "+h; + JKQTMathTextModifyEnvironmentNodeMixIn* modEnvNode=dynamic_cast(nodes[i]); + if (modEnvNode) { + modEnvNode->modifyEnvironment(currentEv); + } + } + html+="
    "; + return ok; +} + +QList JKQTMathTextVerticalListNode::getChildren() { + return this->nodes; +} + + +int JKQTMathTextVerticalListNode::childCount() const +{ + return nodes.size(); +} + + +void JKQTMathTextVerticalListNode::clearChildrenImpl(bool deleteChildren) +{ + if (deleteChildren) { + for (int i=0; i=0 && isetParentNode(this); + return c; +} + +JKQTMathTextHorizontalAlignment JKQTMathTextVerticalListNode::getAlignment() const +{ + return alignment; +} + +JKQTMathTextVerticalOrientation JKQTMathTextVerticalListNode::getVerticalOrientation() const +{ + return verticalOrientation; +} + +double JKQTMathTextVerticalListNode::getLineSpacingFactor() const +{ + return lineSpacingFactor; +} + +JKQTMathTextLineSpacingMode JKQTMathTextVerticalListNode::getSpacingMode() const +{ + return spacingMode; +} + +void JKQTMathTextVerticalListNode::setAlignment(JKQTMathTextHorizontalAlignment value) +{ + alignment=value; +} + +void JKQTMathTextVerticalListNode::setVerticalOrientation(JKQTMathTextVerticalOrientation value) +{ + verticalOrientation=value; +} + +void JKQTMathTextVerticalListNode::setLineSpacingFactor(double value) +{ + lineSpacingFactor=value; +} + +void JKQTMathTextVerticalListNode::setSpacingMode(JKQTMathTextLineSpacingMode value) +{ + spacingMode=value; +} + +JKQTMathTextVerticalListNode::LayoutInfo::LayoutInfo(): + JKQTMathTextNodeSize(), X() +{} + + + +JKQTMathTextVerticalListNode::LayoutInfo::LayoutInfo(const JKQTMathTextNodeSize &other): + JKQTMathTextNodeSize(other), + X() +{ + +} + +JKQTMathTextVerticalListNode::LayoutInfo &JKQTMathTextVerticalListNode::LayoutInfo::operator=(const JKQTMathTextNodeSize &other) +{ + JKQTMathTextNodeSize::operator=(other); + X.clear(); + return *this; +} + +JKQTMathTextVerticalListNode::LayoutInfo &JKQTMathTextVerticalListNode::LayoutInfo::operator=(const LayoutInfo &other) +{ + JKQTMathTextNodeSize::operator=(dynamic_cast(other)); + X=other.X; + return *this; +} + +JKQTMathTextVerticalListNode::LayoutInfo::LayoutInfo(const LayoutInfo &other): + JKQTMathTextNodeSize(dynamic_cast(other)), + X(other.X) +{ + +} diff --git a/lib/jkqtmathtext/nodes/jkqtmathtextverticallistnode.h b/lib/jkqtmathtext/nodes/jkqtmathtextverticallistnode.h new file mode 100644 index 0000000000..46091a6901 --- /dev/null +++ b/lib/jkqtmathtext/nodes/jkqtmathtextverticallistnode.h @@ -0,0 +1,150 @@ +/* + Copyright (c) 2008-2022 Jan W. Krieger () + with contributions from: Razi Alavizadeh + + + + This software is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License (LGPL) as published by + the Free Software Foundation, either version 2.1 of the License, or + (at your option) any later version. + + This program 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 Lesser General Public License (LGPL) for more details. + + You should have received a copy of the GNU Lesser General Public License (LGPL) + along with this program. If not, see . +*/ + + + + +#ifndef JKQTMATHTEXTVERTCALLISTNODE_H +#define JKQTMATHTEXTVERTCALLISTNODE_H +#include "jkqtmathtext/jkqtmathtext_imexport.h" +#include "jkqtmathtext/jkqtmathtexttools.h" +#include "jkqtmathtext/nodes/jkqtmathtextnode.h" +#include +#include + +class JKQTMathText; // forward +// JKQTMATHTEXT_LIB_EXPORT + + +/** \brief subclass representing a list of nodes in the syntax tree, layed out vertically + * \ingroup jkqtmathtext_items + * + * Each child can be thought of as a line, so this node represents a list of lines. + * The layout of the lines can left-aligned, right-aligned or centered. + * + * \image html jkqtmathtext_verticallist.png + * + * \image html jkqtmathtext_verticalalignment.png + * + * \image html jkqtmathtext_horizontalalignment.png + * + * \see JKQTMathTextHorizontalListNode + */ +class JKQTMATHTEXT_LIB_EXPORT JKQTMathTextVerticalListNode: public JKQTMathTextMultiChildNode { + public: + + explicit JKQTMathTextVerticalListNode(JKQTMathText* parent, JKQTMathTextHorizontalAlignment _alignment=MTHACentered, double _linespacingFactor=1.0, JKQTMathTextLineSpacingMode spacingMode_=MTSMDefaultSpacing, JKQTMathTextVerticalOrientation _verticalOrientation=MTVOFirstLine); + virtual ~JKQTMathTextVerticalListNode() override; + /** \copydoc JKQTMathTextNode::getTypeName() */ + virtual QString getTypeName() const override; + /** \copydoc JKQTMathTextNode::draw() */ + virtual double draw(QPainter& painter, double x, double y, JKQTMathTextEnvironment currentEv) const override; + /** \copydoc JKQTMathTextNode::toHtml() */ + virtual bool toHtml(QString& html, JKQTMathTextEnvironment currentEv, JKQTMathTextEnvironment defaultEv) const override; + /** \brief add a child node */ + void addChild(JKQTMathTextNode* n); + /** \copydoc JKQTMathTextMultiChildNode::getChildren() */ + virtual QList getChildren() override; + /** \copydoc JKQTMathTextMultiChildNode::childCount() */ + virtual int childCount() const override; + /** \copydoc JKQTMathTextMultiChildNode::clearChildren() */ + virtual void clearChildren(bool deleteChildren=true) override; + /** \copydoc JKQTMathTextMultiChildNode::deleteChild() */ + virtual void deleteChild(int i) override; + /** \copydoc JKQTMathTextMultiChildNode::getChild() */ + virtual JKQTMathTextNode* getChild(int i) override; + /** \copydoc JKQTMathTextMultiChildNode::getChild() */ + virtual const JKQTMathTextNode* getChild(int i) const override; + /** \copydoc JKQTMathTextMultiChildNode::getChild() */ + virtual JKQTMathTextNode* replaceChild(int i, JKQTMathTextNode* newChild) override; + /** \copydoc alignment */ + JKQTMathTextHorizontalAlignment getAlignment() const; + /** \copydoc verticalOrientation */ + JKQTMathTextVerticalOrientation getVerticalOrientation() const; + /** \copydoc lineSpacingFactor */ + double getLineSpacingFactor() const; + /** \copydoc spacingMode */ + JKQTMathTextLineSpacingMode getSpacingMode() const; + /** \copydoc alignment */ + void setAlignment(JKQTMathTextHorizontalAlignment value) ; + /** \copydoc verticalOrientation */ + void setVerticalOrientation(JKQTMathTextVerticalOrientation value) ; + /** \copydoc lineSpacingFactor */ + void setLineSpacingFactor(double value); + /** \copydoc spacingMode */ + void setSpacingMode(JKQTMathTextLineSpacingMode value) ; + protected: + /** \copydoc JKQTMathTextNode::getSizeInternal() */ + virtual JKQTMathTextNodeSize getSizeInternal(QPainter& painter, JKQTMathTextEnvironment currentEv) const override; + + /** \brief describes the layout of the whole node */ + struct LayoutInfo: public JKQTMathTextNodeSize { + LayoutInfo(); + LayoutInfo(const LayoutInfo& other); + LayoutInfo(const JKQTMathTextNodeSize& other); + LayoutInfo& operator=(const LayoutInfo& other); + LayoutInfo& operator=(const JKQTMathTextNodeSize& other); + /** \brief drawing position for each line */ + QList X; + }; + /** \brief calclates the layout of the whole block/node */ + LayoutInfo calcLayout(QPainter& painter, JKQTMathTextEnvironment currentEv) const; + + /** \brief list of child nodes, each representing one line */ + QList nodes; + /** \brief alignment scheme used to lay out all lines + * + * \image html jkqtmathtext_horizontalalignment.png + */ + JKQTMathTextHorizontalAlignment alignment; + /** \brief spacing of the separate lines, as factor of the default line-spacing [Default: 1]. + * + * This property can be used to move the lines closer together or farther apart. + * + * \image html jkqtmathtext_verticallist.png + */ + double lineSpacingFactor; + /** \brief vertical orientation of the baseline of the whole block (with respect to the single lines) + * + * \image html jkqtmathtext_verticalorientation.png + */ + JKQTMathTextVerticalOrientation verticalOrientation; + /** \brief defines how the layout algorithm (see calcLayout() ) lays out the single lines */ + JKQTMathTextLineSpacingMode spacingMode; + + + + private: + /** \brief internal implementation of clearChildren() that is non-virtual, so can be used in the destructor */ + void clearChildrenImpl(bool deleteChildren); +}; + + + +#endif // JKQTMATHTEXTVERTCALLISTNODE_H + + + + + + + + +