From ebbdca90affa6e30a06ac7a604dad58e0cc599a2 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Wed, 8 Dec 2010 08:52:27 +0000 Subject: [PATCH] Reports : Report de r16556. Le find_in_path pour la DTD locale introduit par r15963 n'etait pas assez general car contraint en amont par le prefixe 'prive' Report de r16558 Accepter dans une DTD un element a contenu totalement vide (meme pas EMPTY explicite). Report r16560. Creer le repertoire de cache des DTD (source et compilee) en debut d'analyse, dans le cas d'une DTD locale qu'on ne recopie pas, l'ecriture du cache echoue s'il n'est pas la (Eric). --- ecrire/xml/analyser_dtd.php | 12 +++++++----- ecrire/xml/sax.php | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/ecrire/xml/analyser_dtd.php b/ecrire/xml/analyser_dtd.php index 6b570e1a85..4c114a8f78 100644 --- a/ecrire/xml/analyser_dtd.php +++ b/ecrire/xml/analyser_dtd.php @@ -25,8 +25,7 @@ function charger_dtd($grammaire, $avail, $rotlvl) if (lire_fichier($file, $r)) { if ($avail == 'SYSTEM') { - $src = find_in_path($grammaire); - if (!$src OR filemtime($file) < filemtime($src)) + if (!$grammaire OR filemtime($file) < filemtime($grammaire)) $r = false; } } @@ -81,10 +80,13 @@ function compilerRegle($val) // http://doc.spip.org/@analyser_dtd function analyser_dtd($loc, $avail, &$dtc) { + // creer le repertoire de cache si ce n'est fait + // (utile aussi pour le resultat de la compil) + $file = sous_repertoire(_DIR_CACHE_XML); + // si DTD locale, ignorer ce repertoire pour le moment if ($avail == 'SYSTEM') $file = find_in_path($loc); else { - $file = sous_repertoire(_DIR_CACHE_XML); $file .= preg_replace('/[^\w.]/','_', $loc); } @@ -249,7 +251,7 @@ function analyser_dtd_entity($dtd, &$dtc, $grammaire) // http://doc.spip.org/@analyser_dtd_element function analyser_dtd_element($dtd, &$dtc, $grammaire) { - if (!preg_match('/^<!ELEMENT\s+(\S+)\s+([^>]*)>\s*(.*)$/s', $dtd, $m)) + if (!preg_match('/^<!ELEMENT\s+([^>%\s]+)([^>]*)>\s*(.*)$/s', $dtd, $m)) return -3; list(,$nom, $contenu, $dtd) = $m; @@ -261,7 +263,7 @@ function analyser_dtd_element($dtd, &$dtc, $grammaire) } $filles = array(); $contenu = expanserEntite($contenu, $dtc->macros); - $val = compilerRegle($contenu); + $val = $contenu ? compilerRegle($contenu) : '(EMPTY )'; if ($val == '(EMPTY )') $dtc->regles[$nom] = 'EMPTY'; elseif ($val == '(ANY )') diff --git a/ecrire/xml/sax.php b/ecrire/xml/sax.php index a608b489cc..ada8fe531a 100644 --- a/ecrire/xml/sax.php +++ b/ecrire/xml/sax.php @@ -248,7 +248,7 @@ function analyser_doctype($data) $pico); else { $dtd = $topelement . '.dtd'; - $f = _DIR_RACINE . 'prive/' . $dtd; + $f = find_in_path($dtd); if (file_exists($f)) return array('', $topelement, 'SYSTEM', $f, $dtd, $pico); } -- GitLab