Techno-magis

PHP et MathML

Lundi 30 Décembre 2013

J'avais besoin de MathML pour un petit truc, donc j'ai décidé d'intégrer un module PHP. Le souci a été de trouver un truc simple. Il existe bien MathJax, mais ça part du principe que ce n'est pas au client de bosser pour ce genre de chose. Je ne nie pas que l'outil est super puissant, permettant un rendu adapté au navigateur : MathML, HTML ou SVG à partir d'un rendu LaTeX ou MathML. D'ailleurs, je trouve qu'il est plus intéressant de l'utiliser à partir d'un rendu MathML pour les navigateurs ne supportant pas MathML, mais je trouve la bibliothèque vraiment très lourde.

Bref, préférant chercher quelque chose de plutôt léger qui créer un rendu MathML avec une syntaxe assez simple, j'ai trouvé ASCII MathML plus accessible (syntaxe). Mais même problème, il s'agit d'un rendu JavaScript. Heureusement, il existe un portage PHP, qui visiblement n'aime pas trop PHP 5.5... ou plutôt qui comporte une erreur qui n'est plus pardonnée par ce dernier. J'ai donc débuggé le module avec une syntaxe légèrement corrigée. Je le passe en version 2.1 pour marquer le changement.

Télécharger :
- ASCIIMathPHP-2.1.cfg.php
- ASCIIMathPHP-2.1.class.php

ou encore sur :
- Gitlab

Si vous avez des corrections, merci de me les signaler. Le module n'étant pas mise à jour depuis des lustres, je pense qu'il doit être stable.

Pour l'utiliser, c'est simple :

CODE :

require 'ASCIIMathPHP-2.1.class.php';
require 'ASCIIMathPHP-2.1.cfg.php';
 
$ascii_math = new ASCIIMathPHP($symbol_arr, $chaine);
$ascii_math->genMathML();
$rendu = $ascii_math->getMathML();

En mode POO :

CODE :

require_once 'ASCIIMathPHP-2.1.class.php';
 
class Text_2_MathAscii {
 
	/** See : ASCIIMathPHP-2.1.cfg.php */
	private static $symbol_arr = null;
 
	public $source_text = '';
	public $mathML = '';
 
	public function __construct ($source) {
		$this->source_text = $source;
 
		if (self::$symbol_arr == null) {
			require_once('ASCIIMathPHP-2.1.cfg.php');
			self::$symbol_arr = $symbol_arr;
		}
 
		$ascii_math = new ASCIIMathPHP(self::$symbol_arr, $text);
		$ascii_math->genMathML();
		$this->mathML = $ascii_math->getMathML();
	}
}

Exemple de rendu :
"sum_(i=1)^n i^3=((n(n+1))/2)^2" donne i = 1 n i 3 = ( n ( n +1 ) 2 ) 2 (ne fonctionne que sur Firefox et Safari)

Catégories :
Par Zéfling, le 30/12/2013 à 14:43:03
Le billet a été lue 350 fois, avec 0 commentaire publié.
👍 0 👎 0

Aucun commentaire

Écrivez le votre ci-dessous.

Écrire un commentaire