3575 Commits

Author SHA1 Message Date
Thibaut Cuvelier
8f820d7ccb MathML: stop stretching all delimiters.
No form? Reference: https://w3c.github.io/mathml-core/#dfn-form. The MathML processor is smart enough to determine whether the delimiter is prefix or postfix.

No stretchy/symmetric/fence in all cases? Reference: https://w3c.github.io/mathml-core/#algorithm-for-determining-the-properties-of-an-embellished-operator and https://w3c.github.io/mathml-core/#operator-dictionary-human (example entry: U+0028). Delimiters have the right properties by default.
2024-03-11 01:40:16 +01:00
Thibaut Cuvelier
be03d69946 MathML: don't output delimiters in InsetMathBinom and
InsetMathDelim if the delimiter is a space.
2024-03-11 01:30:48 +01:00
Thibaut Cuvelier
9e6b810b37 Extract vert, langle, rangle in MathExtern like parentheses and brackets.
This patch is part of a series that aims at solving https://www.lyx.org/trac/ticket/12891. It is an excerpt of the patch that lynx published at https://www.lyx.org/trac/ticket/12270.
2024-03-11 01:22:12 +01:00
Thibaut Cuvelier
b1a4eb118c Improve const correctness. 2024-03-11 01:15:53 +01:00
Thibaut Cuvelier
93444892c5 Memorise whether delims are extracted from MathExtern.
This patch is part of a series that aims at solving https://www.lyx.org/trac/ticket/12891. It should not change any output.
2024-03-11 01:10:15 +01:00
Thibaut Cuvelier
1680eaf5f0 Reduce code duplication. 2024-03-10 16:58:45 +01:00
Thibaut Cuvelier
011c3d73c0 MathML: consider ordinary and alphabetical characters as identifiers instead of operators.
The goal is to consider all Greek letters as identifiers instead of operators.

Solves: https://www.lyx.org/trac/ticket/12948.
2024-03-09 20:59:12 +01:00
Thibaut Cuvelier
1b11dfeca5 Simplify a loop with a for-each.
These loops were brought by C++11. The next step could be using std::any_of.
2024-03-09 20:46:54 +01:00
Jean-Marc Lasgouttes
765c380a5b Pass strings as reference
Spotted by coverity.
2024-01-12 14:34:45 +01:00
Udi-Fogiel
9ebc7d9512 Amend 7441172d
colswitch was checking for oldstyle instead of normalcolor
to see if we need \normalcolor, which lead to appearence
of \color{none} in some cases, but "none" is not a known
color.
2023-12-29 20:10:50 +01:00
Jean-Marc Lasgouttes
94118b865e Disable properly math inset locking
It is not clear whether this feature was once documented and used (it
would have been 20 years ago).

It is mostly disable now, but there was a remaining bit that is
annoying now.

I'll try to restore this later.
2023-12-08 15:32:21 +01:00
Jean-Marc Lasgouttes
a635e461a1 Remove code that has been dead for almost 20 years 2023-11-30 10:07:44 +01:00
Enrico Forestieri
ee19d67524 Amend 58103cf2
- Do not clear the initial selection to allow consecutive changes
  (this is in line with the behavior in texted)
- Make the color changes last so that the underline is the right color
- Allow to operate on selections that span multiple cells in a grid
- Use \boldsymbol instead of \mathbf to make everything bold
2023-11-17 19:03:46 +01:00
Enrico Forestieri
039de52ad9 Amend 58103cf2
The \underbar macro is a text mode macro that can also be used
in math mode. However, when inserting it in mathed, LyX helpfully
wraps it in a \text inset. One can dissolve such text inset and
the macro would appear in math mode without any problem. But the
output routine thinks that the user is shooting itself in the
foot and tries to protect him by wrapping \underbar in the
\lyxmathsym macro, whose definition is normally added to the
preamble when an unicode character is used in math mode.

Of course, this is not the case for \underbar and a compile
error arises. The easier solution is to simply add lyxmathsym as
a requirement for \underbar in lib/symbols, but this means
that the definition of \lyxmathsym would be added even when not
necessary (because in the validation routine we miss the info
about the current mode). The correct solution is acknowledging
the dual nature of \underbar as a text-mode macro that can also
be used in math mode. Luckily the correct solution is almost as
easy as the easier one and is what is done in this commit.
2023-11-09 00:21:21 +01:00
Enrico Forestieri
bdaad03a45 Do not accumulate underline changes
If an element is underlined in mathed by using the text properties
dialog, the changes accumulate. So, for example, to change a single
underline to a double one, one would need removing the previous
underline first. This commit allows using the text properties
dialog and simply replace an underline type with another one.

However, this works only if the underlined element is not included
in some other inset. For example, given "\uline{\text{abc}}",
selecting the 'b' and choosing a double underline produces
"\uline{\text{a\uuline{b}c}}". But, given "\text{\uline{abc}}", and
operating as before produces "\text{\uline{a}\uuline{b}\uline{c}}".
2023-11-08 09:17:38 +01:00
Enrico Forestieri
ea30f1feb1 Amend 58103cf2
Give a variable a more meaningful name and fix a typo.
2023-11-08 08:56:40 +01:00
Enrico Forestieri
f8f2355445 Silence compiler warning 2023-11-06 21:03:23 +01:00
Enrico Forestieri
9d95147528 Amend 58103cf2
Correct file name.
2023-11-06 18:46:22 +01:00
Enrico Forestieri
58103cf214 Allow using the text properties dialog in mathed
Until now only the color of the text could be changed by using
the text properties dialog. This commit allows changing all
other properties except for strikethrough. It is possible to
also add underlining with the limitation that the changes
accumulate. This requires other work but I think that underlining
and strikethrough are not so important in mathed and can be
refined at a later time.

Fixes #12958
2023-11-06 18:04:44 +01:00
Enrico Forestieri
75a08df529 Inherit outer font in text-in-math environments
Some text-in-math environments such as \text, \mbox, \fbox, and
\makebox, inherit the outer text font. This commit reflects this
in the on-screen representation.

Fixes #12950.
2023-11-02 17:54:02 +01:00
Enrico Forestieri
e0e1350b7e Revert "Inherit outer font in text-in-math environments"
This reverts commit d72b9b0238bd33197f0cea4a36d90d78d1cbc666.

Unfortunately, the font taken into account is the font at the
current cursor position rather than the font of the corresponding
math inset.
2023-11-02 01:59:54 +01:00
Enrico Forestieri
d72b9b0238 Inherit outer font in text-in-math environments
The text-in-math environments such as \text, \mbox, \fbox, \makebox
and so on, inherit the outer text font. This commit reflects this
in the on-screen representation.

Fixes #12950.
2023-11-01 22:21:49 +01:00
Pavel Sanda
28f81d1be5 Revert "MathML: don't output delimiters in InsetMathBinom and InsetMathDelim if the delimiter is a space."
This reverts commit be44cb85165, see #12891.
2023-10-27 21:18:45 +02:00
Jean-Marc Lasgouttes
99ecdd6ceb Fixup 65cb9fa4: avoid extra spacing when selecting math
This was happening whenever a selection started/ended after a fraction
inset.
2023-10-18 12:30:55 +02:00
Jean-Marc Lasgouttes
ff7696f184 Do not use Color_selectionmath when selection is gone
It might happen that the selection goes away without recomputing
metrics (for example with char-forward). The added test is a bit of a
band-aid for this situation. A better solution would be to understand
better when metrics computation is triggered in mathed.
2023-10-12 11:30:47 +02:00
Jean-Marc Lasgouttes
174dc2c8be Use Color_selectionmath as needed for multi-cell selection in math
This is complementary to partial selection implemented at 65cb9fa4.
2023-10-12 11:30:47 +02:00
Thibaut Cuvelier
be44cb8516 MathML: don't output delimiters in InsetMathBinom and InsetMathDelim if the delimiter is a space. 2023-10-11 20:37:38 +02:00
Juergen Spitzmueller
5cb53606b6 Introduce color_selectionmath
To have a distinctive color for selected math which works in both modes

Also, link color_selectionmath with QPalette::HighlightedText, so we
won't need to special-case on lyxrc.use_system_colors any longer
2023-10-04 13:10:07 +02:00
Jean-Marc Lasgouttes
65cb9fa4df Use Color_selectiontext as needed for partial selection in math
Currently, selected math hull insets use Color_selectiontext when
system colors are in use. This commit implements the same behavior
for partial selection.

This is done by introducing two element types (BEGIN_SEL and END_SEL)
to MathRow.
2023-10-03 12:51:11 +02:00
Jean-Marc Lasgouttes
9156712895 Make sure that caret width is not null in mathed
The same test exists in texted.

Fixes bug #12904.
2023-09-24 13:07:55 +02:00
Jean-Marc Lasgouttes
94c6d45b74 When drawing macro names, enforce LtR direction
Add a Direction parameter to the Painter::text methods that take a
FontInfo parameter.

In drawStrRed and drawStrBlack, force the direction to LtR.

Fixes bug #12905.
2023-09-22 12:41:44 +02:00
Alexander Dunlap
ca3004fc67 Assign equation numbers in updateBuffer instead of
addToToc so that they can be used in updateToc to
assign label cross-refs
2023-08-24 21:14:53 -04:00
Richard Kimberly Heck
89a479f60d Fix bug #12797.
Use plaintext to give some display of equations in TOC.
2023-08-24 21:05:50 -04:00
Enrico Forestieri
4fa0fbe5bf Use utf8 strings for previewed labels when possible
Fixes bug #12842.
2023-08-10 18:34:17 +02:00
Richard Kimberly Heck
7fb3773e60 Fix up 04fc48d790. 2023-07-29 13:53:59 -04:00
Pavel Sanda
56d9b713c7 Save translators time, already used on different places. 2023-07-27 23:24:11 +02:00
Thibaut Cuvelier
98d1b04160 Before this patch, each character within InsetMathClass was output separately, without understanding their meaning, using the default text output (with [] around each character). This commit changes the behaviour to skip the InsetMathClass during the MathML output. This effectively renders the inset useless for MathML (instead of controlling spacing), as expected, because the MathML processor is supposed to handle the spacing itself.
Another implementation would have been to use the lspace and rspace attributes in MathML, but they require to give the exact spacing before and after the operator instead of relying on rules like TeX.

For instance, `$a\mathbin{+}b$` resulted in this MathML output before the patch:

```
<math xmlns='http://www.w3.org/1998/Math/MathML'>
<mrow>
 <mi>a</mi><!--  -->
 <mi>[mathbin [char + mathalpha]]</mi>
 <mi>b</mi>
</mrow>
</math>
```

For comparison, this was the output with LyX 2.3.7

```
<math xmlns="http://www.w3.org/1998/Math/MathML">
 <mrow>
  <mrow><mi>a</mi><!--  -->
   <mi>[mathbin [char + mathalpha]]
   </mi><mi>b</mi>
  </mrow>
 </mrow></math>
 ```

 After this patch, it looks like:

 ```
 <math xmlns='http://www.w3.org/1998/Math/MathML'>
 <mstyle class='math'>
  <mrow>
   <mi>a</mi>
   <mo>+</mo>
   <mi>b</mi>
  </mrow>
 </mstyle>
 </math>
 ```
2023-07-27 01:22:30 -04:00
Alexander Dunlap
c609e9cbcf Display equation/theorem numbers in insert cross reference dialog.
Fixes bug #11466,
2023-07-26 13:35:42 -04:00
Jean-Marc Lasgouttes
0f7404392c Fix issues with inset-dissolve in mathed
* do not try to dissolve a macro template inset (avoids a crash)
* disable inset-dissolve when an argument is given
* when triggered by the AtPoint mechanism, make sur to dissolve the
  right inset.

Fixes bug #12562.
2023-07-23 17:39:39 +02:00
Jean-Marc Lasgouttes
62d61e7655 Revert "Fix crash when dissolving a top level math inset"
The code was too convoluted and actually wrong (the -1 should have been -2).

This reverts commit c75522bbb7a0044f2370ced294a27738d47935ea.
2023-07-23 17:38:47 +02:00
Juergen Spitzmueller
999b95398d THINSPACE is nonbreakable (i.e., 0x202f, not 0x2009) 2023-07-17 17:14:50 +02:00
Jean-Marc Lasgouttes
d8e509e5eb Cleanup and (maybe) speedup InsetMathChar::mathClass
Profiling with hotspot show that it counts for more than it should and
indeed using support::contains is a overkill here. I like the new code
better anyway.

I would be surprised to see that it makes a big difference, though.
2023-07-15 23:29:24 +02:00
Jean-Marc Lasgouttes
4bbd4a45e7 Fix display of a math hull inset in a tight inset
This is a kind of hack. This allows InsetMathHull to state that it
needs some elbow room beyond its width, in order to fit the numbering
and/or the left margin (with left alignment), which are outside of the
inset itself.

To this end, InsetMathHull::metrics() sets a value in
MetricsInfo::extrawidth and this value is recorded later in the
corresponding row element's `extra' field.

The code could be reorganized to be simpler, in particular by
computing metrics in tokenizeRow, or after tokenizeRow. However the
choice here is to produce a simple patch, fit for 2.4.0.

Fixes bug #12320.
2023-07-14 17:17:23 +02:00
Enrico Forestieri
befe2da495 Honor pending spaces in InsetMathChar::write
The InsetMathChar::write() method directly accesses the otexrowstream
underlying the TeXMathStream class for writing a character, thus
shortcircuiting the mechanism that allows to separate a macro from the
following material. It has to do so because directly writing a char_type
would cause printing its numerical value instead of the corresponding
unicode character in systems where char_type is typedef'd to uint32_t.

This problem has been uncovered by [7441172d/lyxgit] because each atom
of a mathed cell was being separately written to the output instead of
using the lyx::write() method in MathExtern.cpp that simply converts
everything to a docstring. As InsetMathChar::write() is the only method
bypassing the TeXMathStream machanism, it is simpler teaching it to
honor the pending space instead of modifying the code in InsetMathColor.

This commit amends 7441172d.
2023-06-28 21:17:26 +02:00
Scott Kostyshak
eac460e438 Remove the mathed "BUGS" file (#3493)
Jürgen cleaned up the previous contents of this "BUGS" file. What
was left (before the rm in this commit) had been written in 2001 at
2dd1a460, and it is not clear if it is still relevant.
2023-06-15 05:15:32 -04:00
Richard Kimberly Heck
0c69a5eab2 Fix bug #12796 2023-06-12 19:38:40 -04:00
Enrico Forestieri
c33f2f50a0 Do not output LaTeX for a macro if the LaTeX part is empty. 2023-06-11 12:55:51 -04:00
Jean-Marc Lasgouttes
f7afcc31fe Fix undo with cell-plit
This function modifies several cells.

Fixes bug #12746.
2023-04-21 14:42:51 +02:00
Juergen Spitzmueller
a15bc829d1 Do not load mathrsfs if unicode-math is required (#12734)
The latter provides \mathscr and the packages clash
2023-04-15 12:35:22 +02:00
Juergen Spitzmueller
e9c8b10c1d Do not forceLTR math with Xe/Lua (part of #12731) 2023-04-10 08:24:46 +02:00