summaryrefslogtreecommitdiff
path: root/libs/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'libs/plugins')
-rw-r--r--libs/plugins/block.textformat.php11
-rw-r--r--libs/plugins/modifier.mb_wordwrap.php75
-rw-r--r--libs/plugins/modifiercompiler.wordwrap.php16
-rw-r--r--libs/plugins/shared.mb_wordwrap.php75
4 files changed, 84 insertions, 93 deletions
diff --git a/libs/plugins/block.textformat.php b/libs/plugins/block.textformat.php
index 5bdf62db..1e5c0fef 100644
--- a/libs/plugins/block.textformat.php
+++ b/libs/plugins/block.textformat.php
@@ -35,12 +35,15 @@
*/
function smarty_block_textformat($params, $content, $template, &$repeat)
{
+ static $mb_wordwrap_loaded = false;
if (is_null($content)) {
return;
}
- if (!isset($template->smarty->_cache[ '_required_smw' ])) {
- require_once(SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php');
- $template->smarty->_cache[ '_required_smw' ] = true;
+ if (Smarty::$_MBSTRING && !$mb_wordwrap_loaded) {
+ if (!is_callable('smarty_modifier_mb_wordwrap')) {
+ require_once(SMARTY_PLUGINS_DIR . 'modifier.mb_wordwrap.php');
+ }
+ $mb_wordwrap_loaded = true;
}
$style = null;
@@ -98,7 +101,7 @@ function smarty_block_textformat($params, $content, $template, &$repeat)
}
// wordwrap sentences
if (Smarty::$_MBSTRING) {
- $_paragraph = smarty_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
+ $_paragraph = smarty_modifier_mb_wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
} else {
$_paragraph = wordwrap($_paragraph, $wrap - $indent, $wrap_char, $wrap_cut);
}
diff --git a/libs/plugins/modifier.mb_wordwrap.php b/libs/plugins/modifier.mb_wordwrap.php
new file mode 100644
index 00000000..9da3017a
--- /dev/null
+++ b/libs/plugins/modifier.mb_wordwrap.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Smarty plugin
+ *
+ * @package Smarty
+ * @subpackage PluginsModifier
+ */
+/**
+ * Smarty wordwrap modifier plugin
+ * Type: modifier<br>
+ * Name: mb_wordwrap<br>
+ * Purpose: Wrap a string to a given number of characters
+ *
+
+ * @link http://php.net/manual/en/function.wordwrap.php for similarity
+ *
+ * @param string $str the string to wrap
+ * @param int $width the width of the output
+ * @param string $break the character used to break the line
+ * @param boolean $cut ignored parameter, just for the sake of
+ *
+ * @return string wrapped string
+ * @author Rodney Rehm
+ */
+function smarty_modifier_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
+{
+ // break words into tokens using white space as a delimiter
+ $tokens = preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, -1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
+ $length = 0;
+ $t = '';
+ $_previous = false;
+ $_space = false;
+
+ foreach ($tokens as $_token) {
+ $token_length = mb_strlen($_token, Smarty::$_CHARSET);
+ $_tokens = array($_token);
+ if ($token_length > $width) {
+ if ($cut) {
+ $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER,
+ $_token,
+ -1,
+ PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
+ }
+ }
+
+ foreach ($_tokens as $token) {
+ $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token);
+ $token_length = mb_strlen($token, Smarty::$_CHARSET);
+ $length += $token_length;
+
+ if ($length > $width) {
+ // remove space before inserted break
+ if ($_previous) {
+ $t = mb_substr($t, 0, -1, Smarty::$_CHARSET);
+ }
+
+ if (!$_space) {
+ // add the break before the token
+ if (!empty($t)) {
+ $t .= $break;
+ }
+ $length = $token_length;
+ }
+ } else if ($token === "\n") {
+ // hard break must reset counters
+ $length = 0;
+ }
+ $_previous = $_space;
+ // add the token
+ $t .= $token;
+ }
+ }
+
+ return $t;
+}
diff --git a/libs/plugins/modifiercompiler.wordwrap.php b/libs/plugins/modifiercompiler.wordwrap.php
index 91849738..f518d14a 100644
--- a/libs/plugins/modifiercompiler.wordwrap.php
+++ b/libs/plugins/modifiercompiler.wordwrap.php
@@ -20,7 +20,7 @@
*
* @return string with compiled code
*/
-function smarty_modifiercompiler_wordwrap($params, $compiler)
+function smarty_modifiercompiler_wordwrap($params, Smarty_Internal_TemplateCompilerBase $compiler)
{
if (!isset($params[ 1 ])) {
$params[ 1 ] = 80;
@@ -33,19 +33,7 @@ function smarty_modifiercompiler_wordwrap($params, $compiler)
}
$function = 'wordwrap';
if (Smarty::$_MBSTRING) {
- if ($compiler->template->caching && ($compiler->tag_nocache | $compiler->nocache)) {
- $compiler->parent_compiler->template->compiled->required_plugins[ 'nocache' ][ 'wordwrap' ][ 'modifier' ][ 'file' ] =
- SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
- $compiler->template->required_plugins[ 'nocache' ][ 'wordwrap' ][ 'modifier' ][ 'function' ] =
- 'smarty_mb_wordwrap';
- } else {
- $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'wordwrap' ][ 'modifier' ][ 'file' ] =
- SMARTY_PLUGINS_DIR . 'shared.mb_wordwrap.php';
- $compiler->parent_compiler->template->compiled->required_plugins[ 'compiled' ][ 'wordwrap' ][ 'modifier' ][ 'function' ] =
- 'smarty_mb_wordwrap';
- }
- $function = 'smarty_mb_wordwrap';
+ $function = $compiler->getPlugin('mb_wordwrap','modifier');
}
-
return $function . '(' . $params[ 0 ] . ',' . $params[ 1 ] . ',' . $params[ 2 ] . ',' . $params[ 3 ] . ')';
}
diff --git a/libs/plugins/shared.mb_wordwrap.php b/libs/plugins/shared.mb_wordwrap.php
deleted file mode 100644
index 21632a1c..00000000
--- a/libs/plugins/shared.mb_wordwrap.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/**
- * Smarty shared plugin
- *
- * @package Smarty
- * @subpackage PluginsShared
- */
-
-if (!function_exists('smarty_mb_wordwrap')) {
-
- /**
- * Wrap a string to a given number of characters
- *
- * @link http://php.net/manual/en/function.wordwrap.php for similarity
- *
- * @param string $str the string to wrap
- * @param int $width the width of the output
- * @param string $break the character used to break the line
- * @param boolean $cut ignored parameter, just for the sake of
- *
- * @return string wrapped string
- * @author Rodney Rehm
- */
- function smarty_mb_wordwrap($str, $width = 75, $break = "\n", $cut = false)
- {
- // break words into tokens using white space as a delimiter
- $tokens =
- preg_split('!(\s)!S' . Smarty::$_UTF8_MODIFIER, $str, - 1, PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
- $length = 0;
- $t = '';
- $_previous = false;
- $_space = false;
-
- foreach ($tokens as $_token) {
- $token_length = mb_strlen($_token, Smarty::$_CHARSET);
- $_tokens = array($_token);
- if ($token_length > $width) {
- if ($cut) {
- $_tokens = preg_split('!(.{' . $width . '})!S' . Smarty::$_UTF8_MODIFIER, $_token, - 1,
- PREG_SPLIT_NO_EMPTY + PREG_SPLIT_DELIM_CAPTURE);
- }
- }
-
- foreach ($_tokens as $token) {
- $_space = !!preg_match('!^\s$!S' . Smarty::$_UTF8_MODIFIER, $token);
- $token_length = mb_strlen($token, Smarty::$_CHARSET);
- $length += $token_length;
-
- if ($length > $width) {
- // remove space before inserted break
- if ($_previous) {
- $t = mb_substr($t, 0, - 1, Smarty::$_CHARSET);
- }
-
- if (!$_space) {
- // add the break before the token
- if (!empty($t)) {
- $t .= $break;
- }
- $length = $token_length;
- }
- } elseif ($token == "\n") {
- // hard break must reset counters
- $_previous = 0;
- $length = 0;
- }
- $_previous = $_space;
- // add the token
- $t .= $token;
- }
- }
-
- return $t;
- }
-}