Browse Source

Added autoParagraph to TextHelper with proper test cases and made it non-static

Loki 13 years ago
parent
commit
d260f4a5b3

+ 54 - 0
lib/Cake/Test/Case/View/Helper/TextHelperTest.php

@@ -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);
+	}
+
 }

+ 23 - 0
lib/Cake/View/Helper/TextHelper.php

@@ -229,6 +229,29 @@ class TextHelper extends AppHelper {
 	}
 
 /**
+ * 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()
  *
  * @param string $text Text