cvs: smarty /libs Smarty_Compiler.class.php

"Messju Mohr" <[email protected]>
Newsgroups gmane.comp.php.cvs.smarty
Message-ID <cvsmessju1062431646@cvsserver>
messju		Mon Sep  1 11:54:06 2003 EDT

  Modified files:              
    /smarty/libs	Smarty_Compiler.class.php 
  Log:
  the weekly fix for {strip} :)
  
  
Index: smarty/libs/Smarty_Compiler.class.php
diff -u smarty/libs/Smarty_Compiler.class.php:1.278 smarty/libs/Smarty_Compiler.class.php:1.279
--- smarty/libs/Smarty_Compiler.class.php:1.278	Wed Aug 27 04:54:25 2003
+++ smarty/libs/Smarty_Compiler.class.php	Mon Sep  1 11:54:05 2003
@@ -39,7 +39,7 @@
  * @package Smarty
  */
 
-/* $Id: Smarty_Compiler.class.php,v 1.278 2003/08/27 08:54:25 messju Exp $ */
+/* $Id: Smarty_Compiler.class.php,v 1.279 2003/09/01 15:54:05 messju Exp $ */
 
 /**
  * Template compiling class
@@ -89,6 +89,9 @@
     var $_cache_paths_file      =   null;
     var $_cache_paths           =   null;
 
+    var $_strip_depth           =   0;
+    var $_trailing_lf           =   "\n";
+
     /**#@-*/
 	/**
 	 * The class constructor.
@@ -333,17 +336,7 @@
         /* Reformat data between 'strip' and '/strip' tags, removing spaces, tabs and newlines. */
         if (preg_match_all("!{$ldq}strip{$rdq}.*?{$ldq}/strip{$rdq}!s", $compiled_content, $_match)) {
             $strip_tags = $_match[0];
-            $_strip_search = array(
-                '%([^\\\\]\?>)\n%', // remove newlines after PHP close tags
-                "!{$ldq}/?strip{$rdq}|\s+$|^\s+!m", // remove leading/trailing space chars
-                '%[\r\n]+%m', // remove CRs and newlines
-                '%([^\\\\]\?>)%'); // replace newlines after PHP close tags
-            $_strip_replace = array(
-                '\\1',
-                '',
-                '',
-                '\\1' . "\n");
-            $strip_tags_modified = preg_replace($_strip_search, $_strip_replace, $strip_tags);
+            $strip_tags_modified = preg_replace("!{$ldq}/?strip{$rdq}|\s+\$|^\s+!m", '', $strip_tags);
             for ($i = 0, $for_max = count($strip_tags); $i < $for_max; $i++)
                 $compiled_content = preg_replace("!{$ldq}strip{$rdq}.*?{$ldq}/strip{$rdq}!s",
                                                   $this->quote_replace($strip_tags_modified[$i]),
@@ -440,7 +433,7 @@
 			if(isset($_tag_attrs['assign'])) {
 				return "<?php \$this->assign('" . $this->_dequote($_tag_attrs['assign']) . "', $_return ); ?>\n";  
 			} elseif ($this->_output_type == 'php') {
-            	return "<?php echo $_return; ?>\n";
+            	return "<?php echo $_return; ?>" . $this->_trailing_lf;
 			} else {
 				// static
 				return $_return;
@@ -514,11 +507,17 @@
 
             case 'strip':
             case '/strip':
+                if ($tag_command{0}=='/')
+                    $this->_strip_depth--;
+                else
+                    $this->_strip_depth++;
+                $this->_trailing_lf = ($this->_strip_depth>0) ? '' : "\n";
                 return $this->left_delimiter.$tag_command.$this->right_delimiter;
+
             case 'literal':
                 list (,$literal_block) = each($this->_literal_blocks);
                 $this->_current_line_no += substr_count($literal_block, "\n");
-                return "<?php echo '".str_replace("'", "\'", str_replace("\\", "\\\\", $literal_block))."'; ?>\n";
+                return "<?php echo '".str_replace("'", "\'", str_replace("\\", "\\\\", $literal_block))."'; ?>" . $this->_trailing_lf;
 
             case 'php':
                 if ($this->security && !$this->security_settings['PHP_TAGS']) {
@@ -722,7 +721,7 @@
         
 		if($_return != '') {
             $_return =  '<?php ' . $_cacheable_state . $_cache_attrs . 'echo ' . $_return . ';'
-                . $this->_pop_cacheable_state('function', $tag_command) . "?>\n";
+                . $this->_pop_cacheable_state('function', $tag_command) . "?>" . $this->_trailing_lf;
 		}
         
 		return $_return; 
@@ -775,6 +774,7 @@
 
         $prefix = '';
         $postfix = '';
+        $newline = '';
 		if(!is_object($this->_reg_objects[$object][0])) {
 			$this->_trigger_fatal_error("registered '$object' is not an object");
 		} elseif(!empty($this->_reg_objects[$object][1]) && !in_array($obj_comp, $this->_reg_objects[$object][1])) {
@@ -812,12 +812,13 @@
                 $output = "\$this->assign('" . $this->_dequote($_assign_var) ."',  $return);";
             } else {
                 $output = 'echo ' . $return . ';';
+                $newline = $this->_trailing_lf;
             }
         } else {
             $output = '';
         }
 
-        return '<?php ' . $prefix . $output . $postfix . "?>\n";
+        return '<?php ' . $prefix . $output . $postfix . "?>" . $newline;
     }
 
 	/**
@@ -851,7 +852,7 @@
 
 		$_params = "array('args' => array(".implode(', ', (array)$arg_list)."))";
 		
-        return "<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.run_insert_handler.php');\necho smarty_core_run_insert_handler($_params, \$this); ?>\n";
+        return "<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.run_insert_handler.php');\necho smarty_core_run_insert_handler($_params, \$this); ?>" . $this->_trailing_lf;
     }
 
 	/**
@@ -934,7 +935,7 @@
 
     	$_params = "array('smarty_file' => " . $attrs['file'] . ", 'smarty_assign' => '$assign_var', 'smarty_once' => $once_var, 'smarty_include_vars' => array(".implode(',', (array)$arg_list)."))";
 		
-		return "<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.smarty_include_php.php');\nsmarty_core_smarty_include_php($_params, \$this); ?>\n";
+		return "<?php require_once(SMARTY_DIR . 'core' . DIRECTORY_SEPARATOR . 'core.smarty_include_php.php');\nsmarty_core_smarty_include_php($_params, \$this); ?>" . $this->_trailing_lf;
     }
 	
 

-- 
Smarty CVS Mailing List (http://cvs.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.