Skip to content
This repository was archived by the owner on Nov 16, 2022. It is now read-only.

Commit 226548f

Browse files
Merge pull request deanblackborough#26 from deanblackborough/v0.90-take-2
V0.90 take 2
2 parents 10ffb9d + ca81960 commit 226548f

File tree

7 files changed

+73
-13
lines changed

7 files changed

+73
-13
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33

44
Full changelog for PHP Quill Renderer
55

6+
## v0.90 - 2017-06-06
7+
8+
* Added support for paragraph breaks, converts double newlines from quill insert into a new p tag, the
9+
feature is not yet bulletproof, I need to take another look at my parser.
10+
611
## v0.80.1 - 2017-04-26
712

813
* Composer autoload definition updated.

README.md

-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,6 @@ Image | `<img>`
6666
* Markdown support
6767
* Lists (Bullets and Ordered)
6868
* Formatting options (justification etc.)
69-
* Improved newline and paragraph support
7069
* Remaining toolbar options
7170
* Missing tests (options)
7271

example/index.php

+13-1
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,23 @@
66
require_once '../src/Parser/Parse.php';
77
require_once '../src/Parser/Html.php';
88

9-
$deltas = '{"ops":[{"insert":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed efficitur nibh tempor augue lobortis, nec eleifend velit venenatis. Nullam fringilla dui eget lectus mattis tincidunt. \nDonec sollicitudin, lacus sed luctus ultricies, "},{"attributes":{"strike":true,"italic":true},"insert":"quam sapien "},{"attributes":{"strike":true},"insert":"sollicitudin"},{"insert":" quam, nec auctor eros felis elementum quam. Fusce vel mollis enim. \n\n"},{"attributes":{"bold":true},"insert":"Sed ac augue tincidunt,"},{"insert":" cursus urna a, tempus ipsum. Donec pretium fermentum erat a "},{"attributes":{"underline":true},"insert":"elementum"},{"insert":". In est odio, mattis sed dignissim sed, porta ac nisl. Nunc et tellus imperdiet turpis placerat tristique nec quis justo. Aenean nisi libero, auctor a laoreet sed, fermentum vel massa.\n\nEtiam ultricies leo eget purus tempor dapibus. Integer ac sapien eros. Suspendisse convallis ex."}]}';
9+
$deltas = '{"ops":[{"insert":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed efficitur nibh tempor augue lobortis, nec eleifend velit venenatis. Nullam fringilla dui eget lectus mattis tincidunt. \nDonec sollicitudin, lacus sed luctus ultricies, "},{"attributes":{"strike":true,"italic":true},"insert":"quam sapien "},{"attributes":{"strike":true},"insert":"sollicitudin"},{"insert":" quam, nec auctor eros felis elementum quam. Fusce vel mollis enim. "},{"attributes":{"bold":true},"insert":"Sed ac augue tincidunt,"},{"insert":" cursus urna a, tempus ipsum. Donec pretium fermentum erat a "},{"attributes":{"underline":true},"insert":"elementum"},{"insert":". In est odio, mattis sed dignissim sed, porta ac nisl. Nunc et tellus imperdiet turpis placerat tristique nec quis justo. Aenean nisi libero, auctor a laoreet sed, fermentum vel massa. \n\nEtiam ultricies leo eget purus tempor dapibus. Integer ac sapien eros. Suspendisse convallis ex."}]}';
10+
$deltas = '{"ops":[{"insert":"This is a heading"},{"attributes":{"header":2},"insert":"\n"},{"insert":"\nNow some normal text.\n\nNow another heading"},{"attributes":{"header":1},"insert":"\n"}]}';
11+
$deltas = '{"ops":[{"insert":"Lorem ipsum dolor sit amet.\n\nLorem ipsum dolor sit amet."}]}';
1012

1113
try {
1214
$quill = new \DBlackborough\Quill\Render($deltas, 'HTML');
1315
echo $quill->render();
1416
} catch (\Exception $e) {
1517
echo $e->getMessage();
1618
}
19+
20+
21+
/*$parser = new \DBlackborough\Quill\Parser\Html();
22+
$parser->load($deltas);
23+
$parser->parse();
24+
25+
var_dump($parser->content());
26+
27+
$renderer = new \DBlackborough\Quill\Renderer\Html($parser->content());
28+
echo $renderer->render();*/

src/Parser/Html.php

+42-7
Original file line numberDiff line numberDiff line change
@@ -199,14 +199,17 @@ private function splitDeltas()
199199

200200
foreach ($deltas as $delta) {
201201
if (array_key_exists('insert', $delta) === true &&
202-
array_key_exists('attributes', $delta) === false &&
202+
//array_key_exists('attributes', $delta) === false && @todo Why did I add this?
203203
is_array($delta['insert']) === false &&
204-
preg_match("/[\n]{2}/", $delta['insert']) !== 0) {
204+
preg_match("/[\n]{2,}/", $delta['insert']) !== 0) {
205205

206-
foreach (explode("\n\n", $delta['insert']) as $match) {
207-
if (strlen(trim($match)) > 0) {
208-
$this->deltas[] = array('insert' => str_replace("\n", '', $match));
209-
}
206+
foreach (explode("\n\n", $delta['insert']) as $k => $match) {
207+
$new_delta = [
208+
'insert' => str_replace("\n", '', $match),
209+
'break' => true
210+
];
211+
212+
$this->deltas[] = $new_delta;
210213
}
211214
} else {
212215
if (array_key_exists('insert', $delta) === true) {
@@ -230,9 +233,13 @@ private function assignTags()
230233

231234
$this->content[$i] = array(
232235
'content' => null,
233-
'tags' => array()
236+
'tags' => array(),
234237
);
235238

239+
if (array_key_exists('break', $insert) === true) {
240+
$this->content[$i]['break'] = true;
241+
}
242+
236243
$tags = array();
237244
$has_tags = false;
238245

@@ -323,9 +330,35 @@ private function openParagraphs()
323330
}
324331
}
325332

333+
/**
334+
* Convert breaks into new paragraphs
335+
*
336+
* @return void
337+
*/
338+
private function convertBreaks()
339+
{
340+
foreach ($this->content as $i => $content) {
341+
if (array_key_exists('break', $content) === true) {
342+
foreach ($content['tags'] as $tag) {
343+
344+
if (count($content['tags']) === 1) {
345+
if ($tag['open'] === null && $tag['close'] === '</' . $this->options['block']['tag'] . '>') {
346+
$this->content[$i]['tags'][0]['open'] = '<' . $this->options['block']['tag'] . '>';
347+
}
348+
if ($tag['open'] === '<' . $this->options['block']['tag'] . '>' && $tag['close'] === null) {
349+
$this->content[$i]['tags'][0]['close'] = '</' . $this->options['block']['tag'] . '>';
350+
}
351+
}
352+
}
353+
}
354+
}
355+
}
356+
326357
/**
327358
* Loops through the deltas object and generate the contents array
328359
*
360+
* @todo Not keen on the close and remove methods, need to go through logic and try to remove need for them
361+
*
329362
* @return boolean
330363
*/
331364
public function parse()
@@ -344,6 +377,8 @@ public function parse()
344377

345378
$this->lastItemClosed();
346379

380+
$this->convertBreaks();
381+
347382
return true;
348383
} else {
349384
return false;

tests/BlockTest.php

+9
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
final class BlockTest extends \PHPUnit\Framework\TestCase
1010
{
1111
private $deltas_simple_string = '{"ops":[{"insert":"Lorem ipsum dolor sit amet"}]}';
12+
private $deltas_paragraph_split = '{"ops":[{"insert":"Lorem ipsum dolor sit amet.\n\nLorem ipsum dolor sit amet."}]}';
1213
private $deltas_missing_quote = '{"ops":[{"insert":"Lorem ipsum dolor sit amet}]}';
1314

1415
public function testValidDeltasSimpleString()
@@ -38,4 +39,12 @@ public function testOutputSimpleString()
3839
$quill = new \DBlackborough\Quill\Render($this->deltas_simple_string);
3940
$this->assertEquals($expected, $quill->render());
4041
}
42+
43+
public function testOutputParagraphSplit()
44+
{
45+
$expected = '<p>Lorem ipsum dolor sit amet.</p><p>Lorem ipsum dolor sit amet.</p>';
46+
47+
$quill = new \DBlackborough\Quill\Render($this->deltas_paragraph_split);
48+
$this->assertEquals($expected, $quill->render());
49+
}
4150
}

tests/MultipleAttributesTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*/
1212
final class MultipleAttributesTest extends \PHPUnit\Framework\TestCase
1313
{
14-
private $deltas_multiple_attributes = '{"ops":[{"insert":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed efficitur nibh tempor augue lobortis, nec eleifend velit venenatis. Nullam fringilla dui eget lectus mattis tincidunt. \nDonec sollicitudin, lacus sed luctus ultricies, "},{"attributes":{"strike":true,"italic":true},"insert":"quam sapien "},{"attributes":{"strike":true},"insert":"sollicitudin"},{"insert":" quam, nec auctor eros felis elementum quam. Fusce vel mollis enim. \n\n"},{"attributes":{"bold":true},"insert":"Sed ac augue tincidunt,"},{"insert":" cursus urna a, tempus ipsum. Donec pretium fermentum erat a "},{"attributes":{"underline":true},"insert":"elementum"},{"insert":". In est odio, mattis sed dignissim sed, porta ac nisl. Nunc et tellus imperdiet turpis placerat tristique nec quis justo. Aenean nisi libero, auctor a laoreet sed, fermentum vel massa. \n\nEtiam ultricies leo eget purus tempor dapibus. Integer ac sapien eros. Suspendisse convallis ex."}]}';
14+
private $deltas_multiple_attributes = '{"ops":[{"insert":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed efficitur nibh tempor augue lobortis, nec eleifend velit venenatis. Nullam fringilla dui eget lectus mattis tincidunt. \nDonec sollicitudin, lacus sed luctus ultricies, "},{"attributes":{"strike":true,"italic":true},"insert":"quam sapien "},{"attributes":{"strike":true},"insert":"sollicitudin"},{"insert":" quam, nec auctor eros felis elementum quam. Fusce vel mollis enim. "},{"attributes":{"bold":true},"insert":"Sed ac augue tincidunt,"},{"insert":" cursus urna a, tempus ipsum. Donec pretium fermentum erat a "},{"attributes":{"underline":true},"insert":"elementum"},{"insert":". In est odio, mattis sed dignissim sed, porta ac nisl. Nunc et tellus imperdiet turpis placerat tristique nec quis justo. Aenean nisi libero, auctor a laoreet sed, fermentum vel massa. Etiam ultricies leo eget purus tempor dapibus. Integer ac sapien eros. Suspendisse convallis ex."}]}';
1515

1616
public function testValidDeltasMultipleAttributes()
1717
{

tests/SingleAttributesTest.php

+3-3
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ final class SingleAttributesTest extends \PHPUnit\Framework\TestCase
1313
{
1414
private $deltas_bold = '{"ops":[{"insert":"Lorem ipsum dolor sit amet "},{"attributes":{"bold":true},"insert":"sollicitudin"},{"insert":" quam, nec auctor eros felis elementum quam. Fusce vel mollis enim."}]}';
1515
private $deltas_italic = '{"ops":[{"insert":"Lorem ipsum dolor sit amet "},{"attributes":{"italic":true},"insert":"sollicitudin"},{"insert":" quam, nec auctor eros felis elementum quam. Fusce vel mollis enim."}]}';
16-
private $deltas_link = '{"ops":[{"insert":"Lorem ipsum dolor sit amet, "},{"attributes":{"link":"http://www.example.com"},"insert":"consectetur"},{"insert":" adipiscing elit. In sed efficitur enim. Suspendisse mattis purus id odio varius suscipit. Nunc posuere fermentum blandit. \n\nIn vitae eros nec mauris dignissim porttitor. Morbi a tempus tellus. Mauris quis velit sapien. "},{"attributes":{"link":"http://www.example.com"},"insert":"Etiam "},{"insert":"sit amet enim venenatis, eleifend lectus ac, ultricies orci. Sed tristique laoreet mi nec imperdiet. Vivamus non dui diam. Aliquam erat eros, dignissim in quam id.\n"}]}';
16+
private $deltas_link = '{"ops":[{"insert":"Lorem ipsum dolor sit amet, "},{"attributes":{"link":"http://www.example.com"},"insert":"consectetur"},{"insert":" adipiscing elit. In sed efficitur enim. Suspendisse mattis purus id odio varius suscipit. Nunc posuere fermentum blandit. \nIn vitae eros nec mauris dignissim porttitor. Morbi a tempus tellus. Mauris quis velit sapien. "},{"attributes":{"link":"http://www.example.com"},"insert":"Etiam "},{"insert":"sit amet enim venenatis, eleifend lectus ac, ultricies orci. Sed tristique laoreet mi nec imperdiet. Vivamus non dui diam. Aliquam erat eros, dignissim in quam id.\n"}]}';
1717
private $deltas_strike = '{"ops":[{"insert":"Lorem ipsum dolor sit amet "},{"attributes":{"strike":true},"insert":"sollicitudin"},{"insert":" quam, nec auctor eros felis elementum quam. Fusce vel mollis enim."}]}';
18-
private $deltas_subscript = '{"ops":[{"insert":"Lorem ipsum dolor sit"},{"attributes":{"script":"sub"},"insert":"x"},{"insert":" amet, consectetur adipiscing elit. Pellentesque at elit dapibus risus molestie rhoncus dapibus eu nulla. Vestibulum at eros id augue cursus egestas.\n"}]}';
19-
private $deltas_superscript = '{"ops":[{"insert":"Lorem ipsum dolor sit"},{"attributes":{"script":"super"},"insert":"x"},{"insert":" amet, consectetur adipiscing elit. Pellentesque at elit dapibus risus molestie rhoncus dapibus eu nulla. Vestibulum at eros id augue cursus egestas.\n"}]}';
18+
private $deltas_subscript = '{"ops":[{"insert":"Lorem ipsum dolor sit"},{"attributes":{"script":"sub"},"insert":"x"},{"insert":" amet, consectetur adipiscing elit. Pellentesque at elit dapibus risus molestie rhoncus dapibus eu nulla. Vestibulum at eros id augue cursus egestas."}]}';
19+
private $deltas_superscript = '{"ops":[{"insert":"Lorem ipsum dolor sit"},{"attributes":{"script":"super"},"insert":"x"},{"insert":" amet, consectetur adipiscing elit. Pellentesque at elit dapibus risus molestie rhoncus dapibus eu nulla. Vestibulum at eros id augue cursus egestas."}]}';
2020
private $deltas_underline = '{"ops":[{"insert":"Lorem ipsum dolor sit amet "},{"attributes":{"underline":true},"insert":"sollicitudin"},{"insert":" quam, nec auctor eros felis elementum quam. Fusce vel mollis enim."}]}';
2121

2222
public function testValidDeltasBold()

0 commit comments

Comments
 (0)