Techno-magis

PHP et MathML

2013年12月30日(月曜日)

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 :

コード:

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 :

コード:

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)

カテゴリ:
Zéflingによって、 2013/12/30 14:43:03
213回を読んだ。0件のコメントが投稿されています。

コメントなし

下のフォームにメッセージを書き込んで下さい。

コメントを書き込む