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.
		
		
		
		
		
			
		
			
				
					
					
						
							103 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							103 lines
						
					
					
						
							2.8 KiB
						
					
					
				
								<?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: */
							 | 
						|
								
							 | 
						|
								?>
							 | 
						|
								
							 |