Mercurial > epgrec.yaz
comparison Smarty/plugins/block.textformat.php @ 1:f5a9f0eb4858
deleted: LICENSE.ja
author | Sushi-k <epgrec@park.mda.or.jp> |
---|---|
date | Wed, 08 Jul 2009 11:44:50 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:96312e6ab8d4 | 1:f5a9f0eb4858 |
---|---|
1 <?php | |
2 /** | |
3 * Smarty plugin | |
4 * @package Smarty | |
5 * @subpackage plugins | |
6 */ | |
7 | |
8 /** | |
9 * Smarty {textformat}{/textformat} block plugin | |
10 * | |
11 * Type: block function<br> | |
12 * Name: textformat<br> | |
13 * Purpose: format text a certain way with preset styles | |
14 * or custom wrap/indent settings<br> | |
15 * @link http://smarty.php.net/manual/en/language.function.textformat.php {textformat} | |
16 * (Smarty online manual) | |
17 * @param array | |
18 * <pre> | |
19 * Params: style: string (email) | |
20 * indent: integer (0) | |
21 * wrap: integer (80) | |
22 * wrap_char string ("\n") | |
23 * indent_char: string (" ") | |
24 * wrap_boundary: boolean (true) | |
25 * </pre> | |
26 * @author Monte Ohrt <monte at ohrt dot com> | |
27 * @param string contents of the block | |
28 * @param Smarty clever simulation of a method | |
29 * @return string string $content re-formatted | |
30 */ | |
31 function smarty_block_textformat($params, $content, &$smarty) | |
32 { | |
33 if (is_null($content)) { | |
34 return; | |
35 } | |
36 | |
37 $style = null; | |
38 $indent = 0; | |
39 $indent_first = 0; | |
40 $indent_char = ' '; | |
41 $wrap = 80; | |
42 $wrap_char = "\n"; | |
43 $wrap_cut = false; | |
44 $assign = null; | |
45 | |
46 foreach ($params as $_key => $_val) { | |
47 switch ($_key) { | |
48 case 'style': | |
49 case 'indent_char': | |
50 case 'wrap_char': | |
51 case 'assign': | |
52 $$_key = (string)$_val; | |
53 break; | |
54 | |
55 case 'indent': | |
56 case 'indent_first': | |
57 case 'wrap': | |
58 $$_key = (int)$_val; | |
59 break; | |
60 | |
61 case 'wrap_cut': | |
62 $$_key = (bool)$_val; | |
63 break; | |
64 | |
65 default: | |
66 $smarty->trigger_error("textformat: unknown attribute '$_key'"); | |
67 } | |
68 } | |
69 | |
70 if ($style == 'email') { | |
71 $wrap = 72; | |
72 } | |
73 | |
74 // split into paragraphs | |
75 $_paragraphs = preg_split('![\r\n][\r\n]!',$content); | |
76 $_output = ''; | |
77 | |
78 for($_x = 0, $_y = count($_paragraphs); $_x < $_y; $_x++) { | |
79 if ($_paragraphs[$_x] == '') { | |
80 continue; | |
81 } | |
82 // convert mult. spaces & special chars to single space | |
83 $_paragraphs[$_x] = preg_replace(array('!\s+!','!(^\s+)|(\s+$)!'), array(' ',''), $_paragraphs[$_x]); | |
84 // indent first line | |
85 if($indent_first > 0) { | |
86 $_paragraphs[$_x] = str_repeat($indent_char, $indent_first) . $_paragraphs[$_x]; | |
87 } | |
88 // wordwrap sentences | |
89 $_paragraphs[$_x] = wordwrap($_paragraphs[$_x], $wrap - $indent, $wrap_char, $wrap_cut); | |
90 // indent lines | |
91 if($indent > 0) { | |
92 $_paragraphs[$_x] = preg_replace('!^!m', str_repeat($indent_char, $indent), $_paragraphs[$_x]); | |
93 } | |
94 } | |
95 $_output = implode($wrap_char . $wrap_char, $_paragraphs); | |
96 | |
97 return $assign ? $smarty->assign($assign, $_output) : $_output; | |
98 | |
99 } | |
100 | |
101 /* vim: set expandtab: */ | |
102 | |
103 ?> |