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

Commit ca81960

Browse files
Paragraph support
* Added support for paragraphs
1 parent 2681958 commit ca81960

File tree

5 files changed

+61
-10
lines changed

5 files changed

+61
-10
lines changed

Diff for: 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.

Diff for: 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

Diff for: 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();*/

Diff for: 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;

Diff for: 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. "},{"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
{

0 commit comments

Comments
 (0)