Merge pull request #1107 from TeckniX/patch-1

Added autoParagraph functionality to 2.4 Branch
This commit is contained in:
Mark 2013-03-28 03:30:15 -07:00
commit 42ea6895b2
2 changed files with 77 additions and 0 deletions

View file

@ -334,4 +334,58 @@ class TextHelperTest extends CakeTestCase {
$this->assertEquals($expected, $result);
}
/**
* testAutoParagraph method
*
* @return void
*/
public function testAutoParagraph() {
$text = 'This is a test text';
$expected = <<<TEXT
<p>This is a test text</p>
TEXT;
$result = $this->Text->autoParagraph($text);
$text = 'This is a <br/> <BR> test text';
$expected = <<<TEXT
<p>This is a </p>
<p> test text</p>
TEXT;
$result = $this->Text->autoParagraph($text);
$this->assertEquals($expected, $result);
$result = $this->Text->autoParagraph($text);
$text = 'This is a <BR id="test"/><br class="test"> test text';
$expected = <<<TEXT
<p>This is a </p>
<p> test text</p>
TEXT;
$result = $this->Text->autoParagraph($text);
$this->assertEquals($expected, $result);
$text = <<<TEXT
This is a test text.
This is a line return.
TEXT;
$expected = <<<TEXT
<p>This is a test text.<br />
This is a line return.</p>
TEXT;
$result = $this->Text->autoParagraph($text);
$this->assertEquals($expected, $result);
$text = <<<TEXT
This is a test text.
This is a new line.
TEXT;
$expected = <<<TEXT
<p>This is a test text.</p>
<p>This is a new line.</p>
TEXT;
$result = $this->Text->autoParagraph($text);
$this->assertEquals($expected, $result);
}
}

View file

@ -228,6 +228,29 @@ class TextHelper extends AppHelper {
return $this->_engine->highlight($text, $phrase, $options);
}
/**
* Formats paragraphs around given text for all line breaks
* <br /> added for single line return
* <p> added for double line return
*
* @param string $text Text
* @return string The text with proper <p> and <br /> tags
* @link http://book.cakephp.org/2.0/en/core-libraries/helpers/text.html#TextHelper::autoParagraph
*/
public function autoParagraph($text) {
if (trim($text) !== '') {
$text = preg_replace('|<br[^>]*>\s*<br[^>]*>|i', "\n\n", $text . "\n");
$text = preg_replace("/\n\n+/", "\n\n", str_replace(array("\r\n", "\r"), "\n", $text));
$texts = preg_split('/\n\s*\n/', $text, -1, PREG_SPLIT_NO_EMPTY);
$text = '';
foreach ($texts as $txt) {
$text .= '<p>' . nl2br(trim($txt, "\n")) . "</p>\n";
}
$text = preg_replace('|<p>\s*</p>|', '', $text);
}
return $text;
}
/**
* @see String::stripLinks()
*