You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					104 lines
				
				2.8 KiB
			
		
		
			
		
	
	
					104 lines
				
				2.8 KiB
			|   
											1 year ago
										 | <?php | ||
|  | /** | ||
|  |  * Smarty plugin | ||
|  |  * @package Smarty | ||
|  |  * @subpackage plugins | ||
|  |  */ | ||
|  | 
 | ||
|  | /** | ||
|  |  * Smarty {textformat}{/textformat} block plugin | ||
|  |  * | ||
|  |  * Type:     block function<br> | ||
|  |  * Name:     textformat<br> | ||
|  |  * Purpose:  format text a certain way with preset styles | ||
|  |  *           or custom wrap/indent settings<br> | ||
|  |  * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} | ||
|  |  *       (Smarty online manual) | ||
|  |  * @param array | ||
|  |  * <pre> | ||
|  |  * Params:   style: string (email) | ||
|  |  *           indent: integer (0) | ||
|  |  *           wrap: integer (80) | ||
|  |  *           wrap_char string ("\n") | ||
|  |  *           indent_char: string (" ") | ||
|  |  *           wrap_boundary: boolean (true) | ||
|  |  * </pre> | ||
|  |  * @author Monte Ohrt <monte at ohrt dot com> | ||
|  |  * @param string contents of the block | ||
|  |  * @param Smarty clever simulation of a method | ||
|  |  * @return string string $content re-formatted | ||
|  |  */ | ||
|  | function smarty_block_textformat($params, $content, &$smarty) | ||
|  | { | ||
|  |     if (is_null($content)) { | ||
|  |         return; | ||
|  |     } | ||
|  | 
 | ||
|  |     $style = null; | ||
|  |     $indent = 0; | ||
|  |     $indent_first = 0; | ||
|  |     $indent_char = ' '; | ||
|  |     $wrap = 80; | ||
|  |     $wrap_char = "\n"; | ||
|  |     $wrap_cut = false; | ||
|  |     $assign = null; | ||
|  |      | ||
|  |     foreach ($params as $_key => $_val) { | ||
|  |         switch ($_key) { | ||
|  |             case 'style': | ||
|  |             case 'indent_char': | ||
|  |             case 'wrap_char': | ||
|  |             case 'assign': | ||
|  |                 $$_key = (string)$_val; | ||
|  |                 break; | ||
|  | 
 | ||
|  |             case 'indent': | ||
|  |             case 'indent_first': | ||
|  |             case 'wrap': | ||
|  |                 $$_key = (int)$_val; | ||
|  |                 break; | ||
|  | 
 | ||
|  |             case 'wrap_cut': | ||
|  |                 $$_key = (bool)$_val; | ||
|  |                 break; | ||
|  | 
 | ||
|  |             default: | ||
|  |                 $smarty->trigger_error("textformat: unknown attribute '$_key'"); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     if ($style == 'email') { | ||
|  |         $wrap = 72; | ||
|  |     } | ||
|  | 
 | ||
|  |     // split into paragraphs | ||
|  |     $_paragraphs = preg_split('![\r\n][\r\n]!',$content); | ||
|  |     $_output = ''; | ||
|  | 
 | ||
|  |     for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) { | ||
|  |         if ($_paragraphs[$_x] == '') { | ||
|  |             continue; | ||
|  |         } | ||
|  |         // convert mult. spaces & special chars to single space | ||
|  |         $_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]); | ||
|  |         // indent first line | ||
|  |         if($indent_first > 0) { | ||
|  |             $_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x]; | ||
|  |         } | ||
|  |         // wordwrap sentences | ||
|  |         $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); | ||
|  |         // indent lines | ||
|  |         if($indent > 0) { | ||
|  |             $_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]); | ||
|  |         } | ||
|  |     } | ||
|  |     $_output = implode($wrap_char . $wrap_char, $_paragraphs); | ||
|  | 
 | ||
|  |     return $assign ? $smarty->assign($assign, $_output) : $_output; | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | /* vim: set expandtab: */ | ||
|  | 
 | ||
|  | ?> |