Accueil > Nouvelles > Java, JavaFx, OpenJFX et MathML (2) ?

Java, JavaFx, OpenJFX et MathML (2) ?

Comment écrire des formules mathématiques avec Java, JavaFX ou OpenJFX ?

lundi 11 juin 2018, par ScientificWare

Puisque la situation restait bloquée par rapport au support de MathML sous JavaFX / OpenJFX, j’avais décidé de régler ce problème par moi-même.

Depuis l’envoi en avril 2018 d’un rapport de bug sur le dépôt d’OpenJFX, le chantier a bien évolué. Après quelques semaines de travail, j’ai pu identifier le bug et le corriger.

  • La tâche était d’autant plus ardue que je suis programmeur Java et pas C++.
  • Or le navigateur Web embarqué dans JavaFX / OpenJFX est basé sur WebKit le moteur faisant tourner le navigateur Safari d’Apple. Webkit est écrit en C++.
  • Donc l’ensemble est un code Java enveloppant une partie C++. La relation se fait par deux API JNI et JNA qui permettent à ces deux univers de communiquer entre eux.

Le compte rendu de mon travail est visible sur le dépôt GitHub de JavaFX / OpenJFX.

Voici l’affichage après la correction du bug

Et l’affichage avant que le bug soit corrigé.

Il reste des problèmes d’affichage mais le support de MathML devient utilisable.
Les problèmes restants sont plus liés à la philosophie d’affichage de certains caractères aux comportements particuliers, comme les parenthèses, le radical, ...

  • L’édition des formules est possible comme tout texte de l’éditeur mais l’implémentation ne sait pas gérer les spécificités des marqueurs mathématiques. ScientificPad le logiciel que je développe en parallèle est bien plus avancé sur ce point.
  • Je n’aime pas le bricolage effectué par l’ensemble des logiciels supportant l’affichage mathématique.
  • de TeX en passant par LaTeX, WebKit, FireFox, ... ils procèdent tous selon l’approche adoptée par Donald Knuth. Cette solution pouvait se comprendre à une époque où les ressources des ordinateurs étaient limitées. Ce n’est plus le cas actuellement. Manipuler des courbes de Bézier n’est pas un problème.
  • Tous ont donc choisi d’utiliser la technologie passant par l’assemblage des polices de caractères qui, en l’état actuel de leur spécifications, ne sont adaptées à cette utilisation. Cette méthode conduit à une instabilité liée à l’implémentation des ces caractères spéciaux. L’assemblage nécessite une bonne précision du dessin des glyphes ainsi que de leurs positionnements.
  • F. Wang d’Igalia avait bien proposé dans le cadre du projet Harfbuzz de simplifier la tâche des programmeurs mais le leader de ce projet Behdad Esfahbod n’a pas retenu sa proposition.
  • D’autre part toutes les polices ne possèdent pas de glyphes pour les caractères mathématiques. Chaque créateur de police peut se limiter au support des caractères qu’il veut. Je pourrais très bien créer une police n’affichant que la lettre « a » et ne pas proposer d’autres caractères ! Cette police limiterait de fait l’écriture que l’on pourrait faire avec. C’est la même chose avec les mathématiques, les lettres de l’alphabet ne suffisent pas à elles-seules pour l’écriture des textes mathématiques. Il faut également que la police comprenne l’alphabet grec, le signe de multiplication « × » et d’autres comme le signe de sommation « ∑ », le signe d’integration « ∫ », les noms d’ensemble de nombre comme l’ensemble des nombres « ℝ » et celui des nombres complexes « ℂ » et bien d’autres encore ...
  • L’approche moderne devrait être plus dans l’implémentation de MetaFont du même Ronald Knuth. Java (avec l’API Swing), JavaFX / OpenJFX permettent de réaliser ce
    type d’approche et c’est dans ce sens que je travaille sur ScientificPad / FXFont.

Portfolio