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