From 6a8baee840a7ba4687246477516548d1d2e135d1 Mon Sep 17 00:00:00 2001 From: "Committo,Ergo:sum" <esj@rezo.net> Date: Sat, 16 Dec 2006 15:52:04 +0000 Subject: [PATCH] =?UTF-8?q?Avec=20la=20DTD=20en=20cache,=20la=20validation?= =?UTF-8?q?=20est=20une=20petite=20t=C3=A2che.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/inc/validateur.php | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/ecrire/inc/validateur.php b/ecrire/inc/validateur.php index 6afaa827bf..e9fb7f3031 100644 --- a/ecrire/inc/validateur.php +++ b/ecrire/inc/validateur.php @@ -19,17 +19,28 @@ define('_REGEXP_DOCTYPE', // http://doc.spip.org/@inc_validateur_dist function inc_validateur_dist($data) { - global $phraseur_xml; + global $phraseur_xml; if (!preg_match(_REGEXP_DOCTYPE, $data, $r)) return array(); list(,$ns, $type, $s, $nom, $s2, $grammaire) = $r; - include_spip('inc/distant'); - $dtd = recuperer_page($grammaire); + $dtd = ''; + $file = _DIR_CACHE . preg_replace('/[\W.]/','_', $grammaire); + + if (@is_readable($file)) { + lire_fichier($file, $dtd); + } else { + include_spip('inc/distant'); + // il faudrait verifier que $type=PUBLIC, et sinon agir + if ($dtd = recuperer_page($grammaire)) + ecrire_fichier($file, $dtd); + else spip_log("DTD $grammaire inaccessible"); + } $res = array(); + // on ignore les entites publiques. A ameliorer a terme if (preg_match_all('/<!ENTITY\s+%\s+([.\w]+)\s+"([^"]*)"\s*>/', $dtd, $r, PREG_SET_ORDER)) { foreach($r as $m) { @@ -66,6 +77,7 @@ function inc_validateur_dist($data) } } $phraseur_xml->attributs = $res; + spip_log("DTD: " . count($phraseur_xml->entites) . ' entites, ' . count($phraseur_xml->elements) . ' elements'); } // http://doc.spip.org/@expanserEntite -- GitLab