1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeaunamespace ComboStrap\Xml; 4*04fd306cSNickeau 5*04fd306cSNickeau 6*04fd306cSNickeauuse ComboStrap\ExceptionBadSyntax; 7*04fd306cSNickeau 8*04fd306cSNickeau 9*04fd306cSNickeau/** 10*04fd306cSNickeau * Class HtmlUtility 11*04fd306cSNickeau * Static HTML utility 12*04fd306cSNickeau * 13*04fd306cSNickeau * On HTML as string, if you want to work on HTML as XML, see the {@link XmlSystems} class 14*04fd306cSNickeau * 15*04fd306cSNickeau * @package ComboStrap 16*04fd306cSNickeau * 17*04fd306cSNickeau * This class is based on {@link XmlDocument} 18*04fd306cSNickeau * 19*04fd306cSNickeau */ 20*04fd306cSNickeauclass XhtmlUtility 21*04fd306cSNickeau{ 22*04fd306cSNickeau 23*04fd306cSNickeau 24*04fd306cSNickeau /** 25*04fd306cSNickeau * Return a diff 26*04fd306cSNickeau * @param string $left 27*04fd306cSNickeau * @param string $right 28*04fd306cSNickeau * @param bool $xhtml 29*04fd306cSNickeau * @param null $excludedAttributes 30*04fd306cSNickeau * @return string 31*04fd306cSNickeau * DOMDocument supports formatted XML while SimpleXMLElement does not. 32*04fd306cSNickeau * @throws ExceptionBadSyntax 33*04fd306cSNickeau */ 34*04fd306cSNickeau public static function diffMarkup(string $left, string $right, $xhtml = true, $excludedAttributes = null): string 35*04fd306cSNickeau { 36*04fd306cSNickeau if (empty($right)) { 37*04fd306cSNickeau throw new \RuntimeException("The right text should not be empty"); 38*04fd306cSNickeau } 39*04fd306cSNickeau if (empty($left)) { 40*04fd306cSNickeau throw new \RuntimeException("The left text should not be empty"); 41*04fd306cSNickeau } 42*04fd306cSNickeau $loading = XmlDocument::XML_TYPE; 43*04fd306cSNickeau if (!$xhtml) { 44*04fd306cSNickeau $loading = XmlDocument::HTML_TYPE; 45*04fd306cSNickeau } 46*04fd306cSNickeau $leftDocument = (new XmlDocument($left, $loading))->getDomDocument(); 47*04fd306cSNickeau $rightDocument = (new XmlDocument($right, $loading))->getDomDocument(); 48*04fd306cSNickeau 49*04fd306cSNickeau $error = ""; 50*04fd306cSNickeau XmlSystems::diffNode( 51*04fd306cSNickeau $leftDocument, 52*04fd306cSNickeau $rightDocument, 53*04fd306cSNickeau $error, 54*04fd306cSNickeau $excludedAttributes 55*04fd306cSNickeau ); 56*04fd306cSNickeau 57*04fd306cSNickeau return $error; 58*04fd306cSNickeau 59*04fd306cSNickeau } 60*04fd306cSNickeau 61*04fd306cSNickeau /** 62*04fd306cSNickeau * @param $text 63*04fd306cSNickeau * @return int the number of lines estimated 64*04fd306cSNickeau */ 65*04fd306cSNickeau public static function countLines($text) 66*04fd306cSNickeau { 67*04fd306cSNickeau return count(preg_split("/<\/p>|<\/h[1-9]{1}>|<br|<\/tr>|<\/li>|<hr>|<\/pre>/", $text)) - 1; 68*04fd306cSNickeau } 69*04fd306cSNickeau 70*04fd306cSNickeau 71*04fd306cSNickeau /** 72*04fd306cSNickeau * @throws ExceptionBadSyntax 73*04fd306cSNickeau */ 74*04fd306cSNickeau public static function normalize($htmlText) 75*04fd306cSNickeau { 76*04fd306cSNickeau if (empty($htmlText)) { 77*04fd306cSNickeau throw new \RuntimeException("The text should not be empty"); 78*04fd306cSNickeau } 79*04fd306cSNickeau $xmlDoc = new XmlDocument($htmlText, XmlDocument::HTML_TYPE); 80*04fd306cSNickeau return $xmlDoc->toXmlNormalized(); 81*04fd306cSNickeau } 82*04fd306cSNickeau 83*04fd306cSNickeau 84*04fd306cSNickeau 85*04fd306cSNickeau 86*04fd306cSNickeau} 87