Bifurcation depuis
spip / spip
15316 validations de retard le dépôt en amont.
-
esj a rédigé
Amélioration de [8179]: dans l'espace privé comme dans le public (i.e. les squelettes), on profite de la mise en cache de l'analyse des DTD pour aller y chercher la definition des entites html et ainsi contourner le bug de SAX de manière totalement fiable. En cas de Doctype indisponible (squelettes perso ou plugin, pour la distrib standard elle y est toujours) on continue à utiliser html2unicode (à qui il manque les entites dfinies dans xhmt_symbol.ent). A noter que SAX ne considère pas comme des entités les 4 cas particuliers notoires (amp lt gt quot) lorsqu'ils sont dans un attribut; c'est insuffisant mais ça suffit à contourner le bug proprement.
esj a rédigéAmélioration de [8179]: dans l'espace privé comme dans le public (i.e. les squelettes), on profite de la mise en cache de l'analyse des DTD pour aller y chercher la definition des entites html et ainsi contourner le bug de SAX de manière totalement fiable. En cas de Doctype indisponible (squelettes perso ou plugin, pour la distrib standard elle y est toujours) on continue à utiliser html2unicode (à qui il manque les entites dfinies dans xhmt_symbol.ent). A noter que SAX ne considère pas comme des entités les 4 cas particuliers notoires (amp lt gt quot) lorsqu'ils sont dans un attribut; c'est insuffisant mais ça suffit à contourner le bug proprement.
indenter_xml.php 1,90 Kio
<?php
/***************************************************************************\
* SPIP, Systeme de publication pour l'internet *
* *
* Copyright (c) 2001-2007 *
* Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James *
* *
* Ce programme est un logiciel libre distribue sous licence GNU/GPL. *
* Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. *
\***************************************************************************/
if (!defined("_ECRIRE_INC_VERSION")) return;
include_spip('inc/sax');
class IndenteurXML {
// http://doc.spip.org/@debutElement
function debutElement($phraseur, $name, $attrs)
{ xml_debutElement($phraseur, $name, $attrs);}
// http://doc.spip.org/@finElement
function finElement($phraseur, $name)
{ xml_finElement($phraseur, $name);}
// http://doc.spip.org/@textElement
function textElement($phraseur, $data)
{ xml_textElement($phraseur, $data);}
// http://doc.spip.org/@PiElement
function PiElement($phraseur, $target, $data)
{ xml_PiElement($phraseur, $target, $data);}
// http://doc.spip.org/@defautElement
function defautElement($phraseur, $data)
{ xml_defautElement($phraseur, $data);}
// http://doc.spip.org/@phraserTout
function phraserTout($phraseur, $data)
{
xml_parsestring($phraseur, $data);
return !$this->err ? $this->res : join('<br />', $this->err) . '<br />';
}
var $depth = "";
var $res = "";
var $err = array();
var $contenu = array();
var $ouvrant = array();
var $reperes = array();
}
// http://doc.spip.org/@inc_indenter_xml_dist
function inc_indenter_xml_dist($page, $apply=false)
{
$sax = charger_fonction('sax', 'inc');
return $sax($page, $apply, $GLOBALS['phraseur_xml'] = new IndenteurXML());
}
?>