You are here

function smarty_block_textformat in Quiz 6.5

Same name and namespace in other branches
  1. 6.6 includes/moodle/lib/smarty/plugins/block.textformat.php \smarty_block_textformat()

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)

Parameters

array: <pre> Params: style: string (email) indent: integer (0) wrap: integer (80) wrap_char string ("\n") indent_char: string (" ") wrap_boundary: boolean (true) </pre>

string contents of the block:

Smarty clever simulation of a method:

Return value

string string $content re-formatted

File

includes/moodle/lib/smarty/plugins/block.textformat.php, line 30

Code

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;
}