Commit graph

223 commits

Author SHA1 Message Date
physikerwelt 775fec5450
Treat \operatorname as a valid operator for limits
* Extend logic for checking for valid operators
* Add tests

Bug: T365170
Change-Id: I4d3762e3258c78ac5fae8b923f12aabcd2175f3d
2024-11-06 23:04:13 +01:00
physikerwelt 63b47f21ef
Add mathfraktur rendering for chrome
Chrome and similar browsers do not support the
mathvariant attribute that can be used to change
math fonts conveniently. Like for mathcal there is
a table that can be used to translate from latin
to mathfraktur chars.

Bug: T378433
Change-Id: Id8c3e121ed104ba3f08329b4151a7e3bec699754
2024-10-29 11:30:51 +01:00
physikerwelt dab5364b31
Use cell based table rendering
* Add hline search in matrix construction:
** This avoids a second scan later for the cost of some
   memory overhead
* Parse | in array column specification
* Add CSS based table lines as done by TMML, cf.
https://github.com/w3c/mathml-core/issues/245

Bug: T377167
Change-Id: I6e29b47b1731638ea9b06de3006ce2834e4f0c68
2024-10-29 05:48:34 +01:00
Andre Klapper 5c6bc704a2 Use explicit nullable type on parameter arguments (for PHP 8.4)
Implicitly marking parameter $... as nullable is deprecated in PHP
8.4. The explicit nullable type must be used instead.

Bug: T376276
Change-Id: Idcd0b50c1c01a33c4cabeed3e31828f77c3f6443
2024-10-26 15:15:30 +02:00
Umherirrender 7038c68f13 Use namespaced classes
Changes to the use statements done automatically via script
Addition of missing use statement done manually

Change-Id: I4cf7903b9700e6366bdf349f99ffd4a04da0c087
2024-10-20 09:27:34 +02:00
jenkins-bot 9c9c20e09e Merge "Use munder instead of msub for large operators" 2024-10-16 12:38:21 +00:00
jenkins-bot 188d13ca64 Merge "Squash literals in operatornames" 2024-10-16 12:18:09 +00:00
jenkins-bot 3c4141423e Merge "Add missing apply after operatorname" 2024-10-16 11:32:32 +00:00
jenkins-bot b236403991 Merge "Use the same formatting for align as MathJax" 2024-10-16 08:56:42 +00:00
physikerwelt 87632766e0 Squash literals in operatornames
Chains of single letter mi elements are rendered with no
space but one mi element with multiple letters gets
space. For example, the operator log will be translated
to <mi>log</mi> rather than <mi>l</mi><mi>o</mi><mi>g</mi>
as done by wikitexvc.

* Squash literals into single element, iff they don't
contain commands

Following the implementation of the literal rendering
it seems that all literals with special behaviour have
a command.

Bug: T375861
Change-Id: I97adf5f5132180503cbeb59d32fdb8d45b08aaa7
2024-10-14 16:02:17 +00:00
physikerwelt 9a27d92c09 Add missing apply after operatorname
* Reapply the logic of \log rendering to \operatorname
* Deduplicate applyFunctionDetection

Note this still does not solve the rendering problem for
operator names with more than one letter as these generate
mrow elements with single letters. Those are not rendered
with space in FF.

Bug: T375861
Change-Id: I913d865b49d5894a63c8b9d244768f9bb1df4e28
2024-10-14 16:01:56 +00:00
physikerwelt 87f0315812
Use the same formatting for align as MathJax
* Copy the default mtable attributes from MathJax
* Adjust the test

Bug: T348791
Bug: T375317
Change-Id: I274577e320056c1ac3a1f74cbc61941184afd61e
2024-10-14 17:59:19 +02:00
physikerwelt ec44827976
Use munder instead of msub for large operators
* Add new class to identify what a (large) operator is
* Add some IDE hints about what methods exist in texutil
* Add tests for operators in display and block style

Bug: T375907
Change-Id: If734f194cd8fa30efaf6d8c8d89f85e3e1c96276
2024-10-13 21:13:56 +02:00
physikerwelt 602043027d
Implement basic column info parsing
* For each letter l c or r that is found in the
  column spec the respective mtable alignment
  information is passed
* if the align information is given externally
  the info will still be ignored

Bug: T376838
Change-Id: I3113f933502df2109b066959e4d001736dbae6e6
2024-10-13 00:55:57 +02:00
physikerwelt ca10252923
Add \| to list of special operators
Bug: T376546
Change-Id: Ibf57c995c2381fea095600c31ce6432a1e8fd4fd
2024-10-05 23:00:34 +02:00
physikerwelt 0e9d89b03c
Fix: Add missing latex length units
Reorder according to
http://latexref.xyz/Units-of-length.html

Bug: T375295
Change-Id: Iab54bcd3f91e0e473c34869418a1e587c2518c0c
2024-09-27 14:00:44 +02:00
physikerwelt ff1536d1f9
Ignore length specifications after linebreaks
In LaTeX line breaks in matrix elements
have an optional argument that controls
the vertical spacing between the current
and the next line. For example,

{\begin{aligned}a\\[6pt] b\end{aligned}}

generates a 6pt space.

This was never implemented and ignored by
mathoid.
The native MathML implementation is unaware
of the optional argument and just prints it
to the next line.

* This commit ignores the input on the grammar
side.

Bug: T375295
Change-Id: I08996129beca9ad852d23f28d7136c982707aea1
2024-09-22 20:22:52 +02:00
physikerwelt c9f7d9131f
Simplify parsing of mediawiki_function_names
Just convert mediawiki_function_names to the respective \operatorname construct.

Bug: T375274
Change-Id: Ie374524dbdf6a753063172fb88e6f60e91b9212e
2024-09-21 00:57:23 +02:00
physikerwelt db81c96062
Fix heuristic that adds bold-italic
As indicated in the comment the code intents
to add "additional italic mathvariant
when bold already". However, effectively it
always added an additional -italic when
any mathvariant was given.

* Only add '-italic' if mathvariant is 'bold'

Bug: T375244
Change-Id: Iafb375753a98ff41c3d076819288345a9e2efb0c
2024-09-20 08:59:27 +02:00
jenkins-bot 3652e8697e Merge "Make native MathML rendering default" 2024-09-17 10:46:54 +00:00
physikerwelt 8cce9d88c1
Make native MathML rendering default
* Add native to default valid modes.
* Remove old Mathoid mode from the default valid modes.
* Set native as the default choice, replacing Mathoid.
* Adjust fallback mechanism.

Bug: T373705
Change-Id: Ie6412623577e3f954c1302417d1b1b667f88863e
2024-09-17 11:21:03 +02:00
thiemowmde cd4ce78d31 Make use of actual @dataProviders in tests
Instead of manually crafted $this->testCase properties.

Also make use of the dedicated PHPUnit feature to mark as test as
passed. While assertTrue( true ) is a very common hack it can be
confusing.

Change-Id: Ic071bf561929c2a79537111bee18631865f91366
2024-08-31 11:49:04 +00:00
Umherirrender 419ce56d27 Add missing documentation to class properties
Add doc-typehints to class properties found by the PropertyDocumentation
sniff to improve the documentation and to remove the exclusion of the
sniff.
The activated sniff avoids that new code is missing doc-typehints or
real-typehints.

Change-Id: Id7fcfd086cdbb3f040091e1d1a81472e7a524091
2024-08-31 11:48:46 +00:00
Umherirrender 3e37c4e5a0 tests: Remove unused class properties from AllText
Change-Id: Id1864671a653777d6957593eddf65398eaad183b
2024-08-25 14:19:37 +02:00
thiemowmde 10e2e17bb1 Remove unused return values from MMLTestUtil
Just removing unused code that never did anything. Note this is only
in a test. As long as all tests still succeed this can't really cause
any problems, I believe.

Change-Id: I272803353eed9de0ecf98c55b75710df16da2c44
2024-08-12 08:50:22 +02:00
jenkins-bot e4ece5aa8c Merge "Add MathJax rendering option" 2024-06-06 15:13:38 +00:00
Moritz Schubotz (physikerwelt) f534146597
Implement hline support for matrix
In MathML outer table boarders are represented with the
notation attribute of an menclose element. The inner
boarders are represented by the rowlines attribute
of the mtable element. The rowline element accepts
a space seperated list of row boarders. In LaTeX
the bottom line is represented by a new matrix row
that only contains \hline.

This change discover \hline elements in matrix cells
and then determines if it is in the first or last line.
When it is in the last line, the line is removed to avoid
an empty <mtr /> in the output.

Bug: T366417
Change-Id: I196e0d14a183a63696363f9e3006cf65571dc56c
2024-06-03 19:15:43 +02:00
Moritz Schubotz (physikerwelt) 5fa3d6bfe5 Clean matrix arguments
Originally the parse tree was a binary tree, from that
time matrix element were put into that data structure.
This was partially undone, but not full which leads to some artifacts
in matrix cells.

One of the problem is that due to the binary parse
tree structure the postprocessing did not correctly
identfy \limits.

This change changes reduces nesting from matrix, and regards
matrix instances as two-dimensional TexArrays.

Bug: T362344
Change-Id: I66a31a09f204709a51d6b5c9ecefc083f7ee2d6d
2024-06-03 09:25:15 +00:00
jenkins-bot 024cdbb00f Merge "Make TexArray iterable" 2024-05-27 13:18:29 +00:00
Moritz Schubotz (physikerwelt) 9c13fd1ccd
Make TexArray iterable
TexArray is an array of tex nodes. To improve
readability and type hinting we make TexArray
iterable.

Change-Id: I5b9b2ca63400400bc399c08445ff911f8e20a0d1
2024-05-27 09:54:44 +02:00
Moritz Schubotz (physikerwelt) c0ac8ee0e7
Extend BaseParsing test coverage
Change-Id: I4e8ff663e1516bcdeb6133bb12391ad48b056367
2024-05-26 22:37:07 +02:00
Moritz Schubotz (physikerwelt) 277663b822 Add MathJax rendering option
When collecting user feedback regarding the native
rendering option on the German Wikipedia (T346795)
it became apparent that some power users aim for bigger
and bolder fonts and a more LaTeX-like layout.
MathML, however, aims to format math as an integral part
of the text with uniform fonts and spacing.

To match both user needs, this patch adds a new rendering
option that uses client-side MathJax (without a need for
restbase or mathoid).

* Adjust MathJax`s loader to be compatible with the mw loader
* Add new rendering mode
* Copy MathJax source to resource module as foreign repo

Bug: T354136
Change-Id: I1ecf9c77fefc3b0f717107d81979276023f6cb84
2024-05-24 03:30:05 +00:00
Moritz Schubotz (physikerwelt) a102a4ed52
Remove curly
To reduce the complexity of the parse tree we remove the curly
element which is used for grouping in TeX. Instead, we use
use an attribute which defines if the group is put into curly
brackets or not. The functionality of the curly element
is transferred to the TexArray which was the only possible
child of the curly element before. To ease the transition,
we add a special constructor to TexArray.

We could not measure any performance implications of this change.

Bug: T333973
Change-Id: Idcb58694022831113bdc437576bb9f48658fff2f
2024-04-09 11:36:34 +02:00
Moritz Schubotz (physikerwelt) 5f4cfc47bc Update test references
The LaTeXML reference variant seems to be generated
with a slightly different version than before

Bug: T354057
Change-Id: I3d51dc06664120a1c7f9a933d7328210b7c6817f
2024-04-08 17:14:44 +00:00
Moritz Schubotz (physikerwelt) 0f11a20d8f
Conditionally skip tests that depend on Wikibase
While investigating the dependency between
Math and Wikibase, it turned out there was
a hard dependency in the test code.

This change makes the availability of the Wikibase
Extension optional and conditionally skips tests.

Bug: T362027
Change-Id: I9401d7d4a3277b6923dcd81f411ac5a08f1242d2
2024-04-08 14:46:09 +02:00
Moritz Schubotz (physikerwelt) f3acb95ed4 Enable more tests
Change-Id: Ic260221963a83ddd9208f00e170609a5be537898
2024-04-06 11:20:03 +00:00
Moritz Schubotz (physikerwelt) 69e111c91f
Skip tests if testfiles are missing
Instead of failing tests, we skip tests if the reuqired files
are not there

Change-Id: If107bea4efb35d08597f6274ffee45f6e951bc38
2024-04-03 20:45:20 +02:00
Moritz Schubotz (physikerwelt) 8c4a60f08f Replace _s with -s in i18n math mode strings
Bug: T360176
Change-Id: Ibcadd60428d61afb34700455d4c2550f7e24cc43
2024-03-15 17:27:56 +00:00
Reedy 9ad81e9471 Fix casing of MediaWiki
Change-Id: Iaf9d68db0889620303ee01b9460dcfa9b9016c0f
2024-03-12 15:38:20 +00:00
Umherirrender 555ed8e29f build: Fix line indents
Change-Id: If3be1b7575a1570e425847f559821e7408e5ec24
2024-03-10 22:46:31 +01:00
Umherirrender 457b953dd0 build: Upgrade mediawiki/mediawiki-codesniffer to v43.0.0
Excluded Generic.WhiteSpace.ScopeIndent as
it impact many lines in switch/case syntax

Also disable BraceNotOnOwnLine due to T347440

Change-Id: Ia0c8072da9b7bff6a4010d3fb70cb0e576cdf98a
2024-03-10 22:16:48 +01:00
Umherirrender 0cefcd5d77 tests: Mock LoggerInterface to expect that a warning is thrown
Expecting E_ERROR and E_USER_ERROR is deprecated and will no longer be
possible in PHPUnit 10.

Bug: T342110
Change-Id: I713460ef62f1dbdf1332916965e833e7f9074e3c
2024-02-24 20:16:31 +01:00
Moritz Schubotz (physikerwelt) f5b83c720c
Pass font options in underOver
Following the same argument as for accents,
font options should also be passed in underOver
constructs.

* Pass options
* Add test
* In I6924d712db6852f99d7896b1f11cfbd22851d757
  curly learned to encapsulate its output in a
  mrow. Thus, the if-clause is no longer needed.

Bug: T352609
Change-Id: I6dd3303d9b5ef9ae32ad33c91a4cc1bbdad46109
2024-01-29 17:11:10 +01:00
Moritz Schubotz (physikerwelt) d270a9aa80
Pass font options in accents
Accents such as \widetilde did not pass
their font options to their child element.

* Pass options
* Add test
* In I6924d712db6852f99d7896b1f11cfbd22851d757
  curly learned to encapsulate its output in a
  mrow. Thus, the if-clause is no longer needed.

Bug: T352609
Change-Id: I81ecda09d017c73a4593ae36c630426229c7559f
2024-01-27 18:12:03 +01:00
Moritz Schubotz (physikerwelt) 57dbaeda39
Add over_operators group
instead of testing if an operator starts
with the letter \o we keep an explicit
dictonary of operators which should
be rendered using mover instead of
msub.

Bug: T352699
Change-Id: I916acf2f71d747a31a882fecfccac832436ea991
2024-01-24 16:49:29 +01:00
ni1313 fbe057dc55 Add test for \overarc
Manually add test for \overarc to TexUtil-Ref.json

Bug: T354057
Change-Id: I249c89f9f7a2f336268393f61d428fbc09ee82f2
2024-01-17 16:29:36 +00:00
jenkins-bot 3a2011c3b7 Merge "Fix missing argument passing in DQ and FQ" 2024-01-06 21:43:41 +00:00
jenkins-bot 6ca717d31d Merge "Improve operator recognition heuristic" 2024-01-06 21:24:06 +00:00
Umherirrender b97ef597e0 Use namespaced classes
Changes to the use statements done automatically via script
Addition of missing use statement done manually

Change-Id: I8fad94b215664fb77acf8cd8140232271d2c2837
2024-01-06 16:30:26 +01:00
Moritz Schubotz (physikerwelt) a512710cf0
Improve operator recognition heuristic
In TeX display math mode \sum_a^b is rendered as
munderover, however \alpha_a^b is redndered as
msubsup.

This changes improves the heuristics to differentiate
between munderover operators such as sum prod and
other macros such as alpha, beta ...

Bug: T352697
Change-Id: I5a993e379791edeb3623171265e5be2651ee1359
2024-01-03 00:17:47 +01:00