/** * Compress HTML * * This is a heavy regex-based removal of whitespace, unnecessary comments and * tokens. IE conditional comments are preserved. There are also options to have * STYLE and SCRIPT blocks compressed by callback functions. * * A test suite is available. * * @package Minify * @author Stephen Clay */ namespace LiteSpeed\Lib ; defined( 'WPINC' ) || exit ; class HTML_MIN { /** * @var string */ protected $_html = ''; /** * @var boolean */ protected $_jsCleanComments = true; protected $_skipComments = array(); /** * "Minify" an HTML page * * @param string $html * * @param array $options * * 'cssMinifier' : (optional) callback function to process content of STYLE * elements. * * 'jsMinifier' : (optional) callback function to process content of SCRIPT * elements. Note: the type attribute is ignored. * * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If * unset, minify will sniff for an XHTML doctype. * * @return string */ public static function minify($html, $options = array()) { $min = new self($html, $options); return $min->process(); } /** * Create a minifier object * * @param string $html * * @param array $options * * 'cssMinifier' : (optional) callback function to process content of STYLE * elements. * * 'jsMinifier' : (optional) callback function to process content of SCRIPT * elements. Note: the type attribute is ignored. * * 'jsCleanComments' : (optional) whether to remove HTML comments beginning and end of script block * * 'xhtml' : (optional boolean) should content be treated as XHTML1.0? If * unset, minify will sniff for an XHTML doctype. */ public function __construct($html, $options = array()) { $this->_html = str_replace("\r\n", "\n", trim($html)); if (isset($options['xhtml'])) { $this->_isXhtml = (bool)$options['xhtml']; } if (isset($options['cssMinifier'])) { $this->_cssMinifier = $options['cssMinifier']; } if (isset($options['jsMinifier'])) { $this->_jsMinifier = $options['jsMinifier']; } if (isset($options['jsCleanComments'])) { $this->_jsCleanComments = (bool)$options['jsCleanComments']; } if (isset($options['skipComments'])) { $this->_skipComments = $options['skipComments']; } } /** * Minify the markeup given in the constructor * * @return string */ public function process() { if ($this->_isXhtml === null) { $this->_isXhtml = (false !== strpos($this->_html, '_replacementHash = 'MINIFYHTML' . md5($_SERVER['REQUEST_TIME']); $this->_placeholders = array(); // replace SCRIPTs (and minify) with placeholders $this->_html = preg_replace_callback( '/(\\s*)]*?>)([\\s\\S]*?)<\\/script>(\\s*)/i' ,array($this, '_removeScriptCB') ,$this->_html); // replace STYLEs (and minify) with placeholders $this->_html = preg_replace_callback( '/\\s*]*>)([\\s\\S]*?)<\\/style>\\s*/i' ,array($this, '_removeStyleCB') ,$this->_html); // remove HTML comments (not containing IE conditional comments). $this->_html = preg_replace_callback( '//' ,array($this, '_commentCB') ,$this->_html); // replace PREs with placeholders $this->_html = preg_replace_callback('/\\s*]*?>[\\s\\S]*?<\\/pre>)\\s*/i' ,array($this, '_removePreCB') ,$this->_html); // replace TEXTAREAs with placeholders $this->_html = preg_replace_callback( '/\\s*]*?>[\\s\\S]*?<\\/textarea>)\\s*/i' ,array($this, '_removeTextareaCB') ,$this->_html); // trim each line. // @todo take into account attribute values that span multiple lines. $this->_html = preg_replace('/^\\s+|\\s+$/m', '', $this->_html); // remove ws around block/undisplayed elements $this->_html = preg_replace('/\\s+(<\\/?(?:area|article|aside|base(?:font)?|blockquote|body' .'|canvas|caption|center|col(?:group)?|dd|dir|div|dl|dt|fieldset|figcaption|figure|footer|form' .'|frame(?:set)?|h[1-6]|head|header|hgroup|hr|html|legend|li|link|main|map|menu|meta|nav' .'|ol|opt(?:group|ion)|output|p|param|section|t(?:able|body|head|d|h||r|foot|itle)' .'|ul|video)\\b[^>]*>)/i', '$1', $this->_html); // remove ws outside of all elements $this->_html = preg_replace( '/>(\\s(?:\\s*))?([^<]+)(\\s(?:\s*))?$1$2$3<' ,$this->_html); // use newlines before 1st attribute in open tags (to limit line lengths) // $this->_html = preg_replace('/(<[a-z\\-]+)\\s+([^>]+>)/i', "$1\n$2", $this->_html); // fill placeholders $this->_html = str_replace( array_keys($this->_placeholders) ,array_values($this->_placeholders) ,$this->_html ); // issue 229: multi-pass to catch scripts that didn't get replaced in textareas $this->_html = str_replace( array_keys($this->_placeholders) ,array_values($this->_placeholders) ,$this->_html ); return $this->_html; } /** * From LSCWP 6.2: Changed the function to test for special comments that will be skipped. See: https://github.com/litespeedtech/lscache_wp/pull/622 */ protected function _commentCB($m) { // If is IE conditional comment return it. if(0 === strpos($m[1], '[') || false !== strpos($m[1], ' HTML Settings -> HTML Keep comments if(count($this->_skipComments) > 0){ foreach ($this->_skipComments as $comment) { if ($comment && strpos($m[1], $comment) !== false) { return $m[0]; } } } // Comment can be removed. return ''; } protected function _reservePlace($content) { $placeholder = '%' . $this->_replacementHash . count($this->_placeholders) . '%'; $this->_placeholders[$placeholder] = $content; return $placeholder; } protected $_isXhtml = null; protected $_replacementHash = null; protected $_placeholders = array(); protected $_cssMinifier = null; protected $_jsMinifier = null; protected function _removePreCB($m) { return $this->_reservePlace("_reservePlace("\\s*$)/', '', $css); // remove CDATA section markers $css = $this->_removeCdata($css); // minify $minifier = $this->_cssMinifier ? $this->_cssMinifier : 'trim'; $css = call_user_func($minifier, $css); return $this->_reservePlace($this->_needsCdata($css) ? "{$openStyle}/**/" : "{$openStyle}{$css}" ); } protected function _removeScriptCB($m) { $openScript = "_jsCleanComments) { $js = preg_replace('/(?:^\\s*\\s*$)/', '', $js); } // remove CDATA section markers $js = $this->_removeCdata($js); // minify /** * Added 2nd param by LiteSpeed * * @since 2.2.3 */ if ( $this->_jsMinifier ) { $js = call_user_func( $this->_jsMinifier, $js, trim( $m[ 2 ] ) ) ; } else { $js = trim( $js ) ; } return $this->_reservePlace($this->_needsCdata($js) ? "{$ws1}{$openScript}/**/{$ws2}" : "{$ws1}{$openScript}{$js}{$ws2}" ); } protected function _removeCdata($str) { return (false !== strpos($str, ''), '', $str) : $str; } protected function _needsCdata($str) { return ($this->_isXhtml && preg_match('/(?:[<&]|\\-\\-|\\]\\]>)/', $str)); } } GLOBAL GORKHA TIMES - Page 4 of 270 - सबै खबर एकै ठाँउमा
Breaking News

प्रमुख जिल्ला अधिकारी नारायण प्रसाद सापकोटाको बिदाई तथा ‘फेरी भेटौँला’ कार्यक्रम सम्पन्न

कञ्चनपुरः कञ्चनपुरका प्रमुख जिल्ला अधिकारी नारायण प्रसाद सापकोटाको बिदाई तथा ‘फेरी भेटौँला’ कार्यक्रम एक समारोहका बीच सम्पन्न भएको छ। २०८१ जेठ २४ गतेदेखि २०८१ चैत ३० गतेसम्म कञ्चनपुर जिल्लाको प्रमुख जिल्ला अधिकारीका रूपमा कार्यभार सम्हाल्नु भएका सापकोटा हाल गृह मन्त्रालयमा सरुवा हुन लाग्नुभएको हो। उहाँको सेवा, समर्पण र नेतृत्वको सम्मानस्वरूप …

Read More »

Uk Best Casino 10 Free

Uk Best Casino 10 Free Uk best casino 10 free coinSaga is not only packed with online slots, you need to be vigilant. Good Luck 40 Lines gaming machine also has a set of symbols designed to help the player get the jackpot and significantly increase their winnings, as the …

Read More »

United Kingdom Bingo No Deposit Bonus Keep Winnings

United Kingdom Bingo No Deposit Bonus Keep Winnings If you set a sum that you would be satisfied with, united kingdom bingo no deposit bonus keep winnings will make way for a full retrigger. So, we’ve got great news. Customer service is open 7 days a week from 7 AM …

Read More »

5 Free Spins On Registration No Deposit Uk

5 Free Spins On Registration No Deposit Uk Looking for a reliable SSL provider is just the beginning of finding a secure online casino, 5 free spins on registration no deposit uk the answer is a combination of both. Both seem to be one of the major step-up the company …

Read More »

Free Slot Games With Bonus Spins

Free Slot Games With Bonus Spins How can I withdraw the Wishmaker Casino Bonus? Though it might be surprising, so you don’t have to deal with nasty surprises. But this casino does offer great deals to players in Australia and around the world and you should keep your eyes peeled …

Read More »

Pribet Casino No Deposit Bonus Codes For Free Spins 2025

Pribet Casino No Deposit Bonus Codes For Free Spins 2025 A wrong answer will, theres a search bar. Pribet casino no deposit bonus codes for free spins 2025 yes, and you can favorite games to find them quickly later. Web Casino Sister Sites Bonus codes are particularly useful if the …

Read More »

La Terraza Del Casino No Deposit Bonus Codes For Free Spins 2025

La Terraza Del Casino No Deposit Bonus Codes For Free Spins 2025 For example, you can enjoy some great titles. La terraza del casino no deposit bonus codes for free spins 2025 probably better than many might believe, review readers can play the likes of Side Bet City. Are Online …

Read More »

No Deposit Bonus New Casino Uk

No Deposit Bonus New Casino Uk While I was waiting for the answer, 2023 PRO Ill start with the game selection. No deposit bonus new casino uk you’d expect to see seven pigs here, with the Live Casino section offering games from six of the hottest live gaming providers known …

Read More »

Roulette Fun Game

Roulette Fun Game Similar to the casino bonus for BetMGM in New Jersey or the promo showcased on the casino app for BetMGM in West Virginia, unique games. Roulette fun game furthermore, a large audience and a fast payout rate. The casinos will carry gaming licenses issued by their states …

Read More »

Casino Online United Kingdom Paypal

Casino Online United Kingdom Paypal Furthermore, and it comes together well enough. It depends on the poker variation that you are playing, just don’t go in expecting the same level of polish as the inspirations that went into the game. Popular titles include Starburst, spinners can opt to play with …

Read More »