* * wrap : maximum line length * * wrap_char : the character(s) to use to break the line * * wrap_cut : if true, the words that are longer than $wrap are cut instead of overflowing * * indent : amount of $indent_char to insert before every line * * indent_char : character(s) to insert before every line * * indent_first : amount of additional $indent_char to insert before the first line of each paragraphs * * style : some predefined formatting styles that set up every required variables, can be "email" or "html" * * assign : if set, the formatted text is assigned to that variable instead of being output * * This software is provided 'as-is', without any express or implied warranty. * In no event will the authors be held liable for any damages arising from the use of this software. * * @author Jordi Boggiano * @copyright Copyright (c) 2008, Jordi Boggiano * @license http://dwoo.org/LICENSE Modified BSD License * @link http://dwoo.org/ * @version 1.0.0 * @date 2008-10-23 * @package Dwoo */ class Dwoo_Plugin_textformat extends Dwoo_Block_Plugin { protected $wrap; protected $wrapChar; protected $wrapCut; protected $indent; protected $indChar; protected $indFirst; protected $assign; public function init($wrap=80, $wrap_char="\r\n", $wrap_cut=false, $indent=0, $indent_char=" ", $indent_first=0, $style="", $assign="") { if ($indent_char === 'tab') { $indent_char = "\t"; } switch($style) { case 'email': $wrap = 72; $indent_first = 0; break; case 'html': $wrap_char = '
'; $indent_char = $indent_char == "\t" ? '    ':' '; break; } $this->wrap = (int) $wrap; $this->wrapChar = (string) $wrap_char; $this->wrapCut = (bool) $wrap_cut; $this->indent = (int) $indent; $this->indChar = (string) $indent_char; $this->indFirst = (int) $indent_first + $this->indent; $this->assign = (string) $assign; } public function process() { // gets paragraphs $pgs = explode("\n", str_replace(array("\r\n", "\r"), "\n", $this->buffer)); while (list($i,) = each($pgs)) { if (empty($pgs[$i])) { continue; } // removes line breaks and extensive white space $pgs[$i] = preg_replace(array('#\s+#', '#^\s*(.+?)\s*$#m'), array(' ', '$1'), str_replace("\n", '', $pgs[$i])); // wordwraps + indents lines $pgs[$i] = str_repeat($this->indChar, $this->indFirst) . wordwrap( $pgs[$i], max($this->wrap - $this->indent, 1), $this->wrapChar . str_repeat($this->indChar, $this->indent), $this->wrapCut ); } if ($this->assign !== '') { $this->dwoo->assignInScope(implode($this->wrapChar . $this->wrapChar, $pgs), $this->assign); } else { return implode($this->wrapChar . $this->wrapChar, $pgs); } } }