Subversion Repositories Sites.tela-botanica.org

Rev

Rev 609 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
7 david 1
<?php
2
 
3
/***************************************************************************\
4
 *  SPIP, Systeme de publication pour l'internet                           *
5
 *                                                                         *
6
 *  Copyright (c) 2001-2005                                                *
7
 *  Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James  *
8
 *                                                                         *
9
 *  Ce programme est un logiciel libre distribue sous licence GNU/GPL.     *
10
 *  Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne.   *
11
\***************************************************************************/
12
 
13
 
14
//
15
// Ce fichier ne sera execute qu'une fois
16
if (defined("_ECRIRE_INC_MATH")) return;
17
define("_ECRIRE_INC_MATH", "1");
18
 
19
//
20
// Gestion du raccourci <math>...</math> en client-serveur
21
//
22
 
23
function image_math($tex) {
24
	global $traiter_math;
25
	switch ($traiter_math) {
26
		// Attention: mathml desactiv'e pour l'instant
27
		case 'mathml':
28
			$ext = '.xhtml';
29
			$server = $GLOBALS['mathml_server'];
30
			break;
31
		default:
32
			$ext = '.png';
33
			$server = $GLOBALS['tex_server'];
34
			break;
35
	}
36
 
37
	// Regarder dans le repertoire local des images TeX et blocs MathML
38
 
39
	if (!@is_dir(_DIR_TeX))
40
		@mkdir (_DIR_TeX, 0777);
41
	$fichier = _DIR_TeX .md5(trim($tex)).$ext;
42
 
43
 
44
	if (!@file_exists($fichier)) {
45
		// Aller chercher l'image sur le serveur
46
		if ($server) {
47
			spip_log($url = $server.'?'.urlencode($tex));
48
			include_ecrire('inc_sites.php3');
49
			if ($image = recuperer_page($url)) {
50
				if ($f = @fopen($fichier, 'w')) {
51
					@fwrite($f, $image);
52
					@fclose($f);
53
				}
54
			}
55
		}
56
	}
57
 
58
 
59
	// Composer la reponse selon presence ou non de l'image
60
	$tex = entites_html($tex);
61
	if (@file_exists($fichier)) {
62
 
63
		// MathML
64
		if ($traiter_math == 'mathml') {
65
			return join(file("$fichier"),"");
66
		}
67
 
68
		// TeX
69
		else {
70
			list(,,,$size) = @getimagesize($fichier);
71
			$alt = "alt=\"$tex\" title=\"$tex\"";
72
			return "<img src=\"$fichier\" style=\"vertical-align:middle;\" $size $alt />";
73
		}
74
 
75
	}
76
	else // pas de fichier
77
		return "<tt><span class='spip_code' dir='ltr'>$tex</span></tt>";
78
 
79
}
80
 
81
 
82
// Fonction appelee par propre() s'il repere un mode <math>
83
function traiter_math($letexte, &$les_echap, &$num_echap, $source) {
84
 
85
	$texte_a_voir = $letexte;
86
	while (($debut = strpos($texte_a_voir, "<math>")) !== false) {
87
		if (!$fin = strpos($texte_a_voir,"</math>"))
88
			$fin = strlen($texte_a_voir);
89
 
90
		$texte_debut = substr($texte_a_voir, 0, $debut);
91
		$texte_milieu = substr($texte_a_voir,
92
			$debut+strlen("<math>"), $fin-$debut-strlen("<math>"));
93
		$texte_fin = substr($texte_a_voir,
94
			$fin+strlen("</math>"), strlen($texte_a_voir));
95
 
96
		while((ereg("[$][$]([^$]+)[$][$]",$texte_milieu, $regs))) {
97
			$num_echap++;
98
			$les_echap[$num_echap] = "\n<p class=\"spip\" style=\"text-align: center;\">".image_math($regs[1])."</p>\n";
99
			$pos = strpos($texte_milieu, $regs[0]);
100
			$texte_milieu = substr($texte_milieu,0,$pos)."@@SPIP_$source$num_echap@@"
101
				.substr($texte_milieu,$pos+strlen($regs[0]));
102
		}
103
		while((ereg("[$]([^$]+)[$]",$texte_milieu, $regs))) {
104
			$num_echap++;
105
			$les_echap[$num_echap] = image_math($regs[1]);
106
			$pos = strpos($texte_milieu, $regs[0]);
107
			$texte_milieu = substr($texte_milieu,0,$pos)."@@SPIP_$source$num_echap@@"
108
				.substr($texte_milieu,$pos+strlen($regs[0]));
109
		}
110
 
111
		$texte_a_voir = $texte_debut.$texte_milieu.$texte_fin;
112
	}
113
	return $texte_a_voir;
114
}
115
 
116
?>