PEEL Shopping
Open source ecommerce : PEEL Shopping
outputfilter.trimwhitespace.php
Go to the documentation of this file.
1 <?php
21 {
22  $store = array();
23  $_store = 0;
24  $_offset = 0;
25 
26  // Unify Line-Breaks to \n
27  $source = preg_replace("/\015\012|\015|\012/", "\n", $source);
28 
29  // capture Internet Explorer Conditional Comments
30  if (preg_match_all('#<!--\[[^\]]+\]>.*?<!\[[^\]]+\]-->#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
31  foreach ($matches as $match) {
32  $store[] = $match[0][0];
33  $_length = strlen($match[0][0]);
34  $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
35  $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
36 
37  $_offset += $_length - strlen($replace);
38  $_store++;
39  }
40  }
41 
42  // Strip all HTML-Comments
43  // yes, even the ones in <script> - see http://stackoverflow.com/a/808850/515124
44  $source = preg_replace( '#<!--.*?-->#ms', '', $source );
45 
46  // capture html elements not to be messed with
47  $_offset = 0;
48  if (preg_match_all('#<(script|pre|textarea)[^>]*>.*?</\\1>#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
49  foreach ($matches as $match) {
50  $store[] = $match[0][0];
51  $_length = strlen($match[0][0]);
52  $replace = '@!@SMARTY:' . $_store . ':SMARTY@!@';
53  $source = substr_replace($source, $replace, $match[0][1] - $_offset, $_length);
54 
55  $_offset += $_length - strlen($replace);
56  $_store++;
57  }
58  }
59 
60  $expressions = array(
61  // replace multiple spaces between tags by a single space
62  // can't remove them entirely, becaue that might break poorly implemented CSS display:inline-block elements
63  '#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',
64  // remove spaces between attributes (but not in attribute values!)
65  '#(([a-z0-9]\s*=\s*(["\'])[^\3]*?\3)|<[a-z0-9_]+)\s+([a-z/>])#is' => '\1 \4',
66  // note: for some very weird reason trim() seems to remove spaces inside attributes.
67  // maybe a \0 byte or something is interfering?
68  '#^\s+<#Ss' => '<',
69  '#>\s+$#Ss' => '>',
70  );
71 
72  $source = preg_replace( array_keys($expressions), array_values($expressions), $source );
73  // note: for some very weird reason trim() seems to remove spaces inside attributes.
74  // maybe a \0 byte or something is interfering?
75  // $source = trim( $source );
76 
77  // capture html elements not to be messed with
78  $_offset = 0;
79  if (preg_match_all('#@!@SMARTY:([0-9]+):SMARTY@!@#is', $source, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)) {
80  foreach ($matches as $match) {
81  $store[] = $match[0][0];
82  $_length = strlen($match[0][0]);
83  $replace = array_shift($store);
84  $source = substr_replace($source, $replace, $match[0][1] + $_offset, $_length);
85 
86  $_offset += strlen($replace) - $_length;
87  $_store++;
88  }
89  }
90 
91  return $source;
92 }
93 
94 ?>
smarty_outputfilter_trimwhitespace($source, Smarty_Internal_Template $smarty)
Smarty trimwhitespace outputfilter plugin.
$match
Definition: search.php:86

This documentation for Open ecommerce PEEL Shopping and PEEL.fr has been generated by Doxygen on Thu Oct 15 2015 14:41:16 - Peel ecommerce is a product of Agence web Advisto SAS. All rights reserved.