Skip to content
This repository has been archived by the owner on Sep 18, 2023. It is now read-only.

Commit

Permalink
Merge pull request #26 from deanblackborough/v0.90-take-2
Browse files Browse the repository at this point in the history
V0.90 take 2
  • Loading branch information
deanblackborough authored Jun 6, 2017
2 parents 10ffb9d + ca81960 commit 226548f
Show file tree
Hide file tree
Showing 7 changed files with 73 additions and 13 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@

Full changelog for PHP Quill Renderer

## v0.90 - 2017-06-06

* Added support for paragraph breaks, converts double newlines from quill insert into a new p tag, the
feature is not yet bulletproof, I need to take another look at my parser.

## v0.80.1 - 2017-04-26

* Composer autoload definition updated.
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,6 @@ Image | `<img>`
* Markdown support
* Lists (Bullets and Ordered)
* Formatting options (justification etc.)
* Improved newline and paragraph support
* Remaining toolbar options
* Missing tests (options)

Expand Down
14 changes: 13 additions & 1 deletion example/index.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,23 @@
require_once '../src/Parser/Parse.php';
require_once '../src/Parser/Html.php';

$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."}]}';
$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."}]}';
$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"}]}';
$deltas = '{"ops":[{"insert":"Lorem ipsum dolor sit amet.\n\nLorem ipsum dolor sit amet."}]}';

try {
$quill = new \DBlackborough\Quill\Render($deltas, 'HTML');
echo $quill->render();
} catch (\Exception $e) {
echo $e->getMessage();
}


/*$parser = new \DBlackborough\Quill\Parser\Html();
$parser->load($deltas);
$parser->parse();
var_dump($parser->content());
$renderer = new \DBlackborough\Quill\Renderer\Html($parser->content());
echo $renderer->render();*/
49 changes: 42 additions & 7 deletions src/Parser/Html.php
Original file line number Diff line number Diff line change
Expand Up @@ -199,14 +199,17 @@ private function splitDeltas()

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

foreach (explode("\n\n", $delta['insert']) as $match) {
if (strlen(trim($match)) > 0) {
$this->deltas[] = array('insert' => str_replace("\n", '', $match));
}
foreach (explode("\n\n", $delta['insert']) as $k => $match) {
$new_delta = [
'insert' => str_replace("\n", '', $match),
'break' => true
];

$this->deltas[] = $new_delta;
}
} else {
if (array_key_exists('insert', $delta) === true) {
Expand All @@ -230,9 +233,13 @@ private function assignTags()

$this->content[$i] = array(
'content' => null,
'tags' => array()
'tags' => array(),
);

if (array_key_exists('break', $insert) === true) {
$this->content[$i]['break'] = true;
}

$tags = array();
$has_tags = false;

Expand Down Expand Up @@ -323,9 +330,35 @@ private function openParagraphs()
}
}

/**
* Convert breaks into new paragraphs
*
* @return void
*/
private function convertBreaks()
{
foreach ($this->content as $i => $content) {
if (array_key_exists('break', $content) === true) {
foreach ($content['tags'] as $tag) {

if (count($content['tags']) === 1) {
if ($tag['open'] === null && $tag['close'] === '</' . $this->options['block']['tag'] . '>') {
$this->content[$i]['tags'][0]['open'] = '<' . $this->options['block']['tag'] . '>';
}
if ($tag['open'] === '<' . $this->options['block']['tag'] . '>' && $tag['close'] === null) {
$this->content[$i]['tags'][0]['close'] = '</' . $this->options['block']['tag'] . '>';
}
}
}
}
}
}

/**
* Loops through the deltas object and generate the contents array
*
* @todo Not keen on the close and remove methods, need to go through logic and try to remove need for them
*
* @return boolean
*/
public function parse()
Expand All @@ -344,6 +377,8 @@ public function parse()

$this->lastItemClosed();

$this->convertBreaks();

return true;
} else {
return false;
Expand Down
9 changes: 9 additions & 0 deletions tests/BlockTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
final class BlockTest extends \PHPUnit\Framework\TestCase
{
private $deltas_simple_string = '{"ops":[{"insert":"Lorem ipsum dolor sit amet"}]}';
private $deltas_paragraph_split = '{"ops":[{"insert":"Lorem ipsum dolor sit amet.\n\nLorem ipsum dolor sit amet."}]}';
private $deltas_missing_quote = '{"ops":[{"insert":"Lorem ipsum dolor sit amet}]}';

public function testValidDeltasSimpleString()
Expand Down Expand Up @@ -38,4 +39,12 @@ public function testOutputSimpleString()
$quill = new \DBlackborough\Quill\Render($this->deltas_simple_string);
$this->assertEquals($expected, $quill->render());
}

public function testOutputParagraphSplit()
{
$expected = '<p>Lorem ipsum dolor sit amet.</p><p>Lorem ipsum dolor sit amet.</p>';

$quill = new \DBlackborough\Quill\Render($this->deltas_paragraph_split);
$this->assertEquals($expected, $quill->render());
}
}
2 changes: 1 addition & 1 deletion tests/MultipleAttributesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
*/
final class MultipleAttributesTest extends \PHPUnit\Framework\TestCase
{
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."}]}';
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."}]}';

public function testValidDeltasMultipleAttributes()
{
Expand Down
6 changes: 3 additions & 3 deletions tests/SingleAttributesTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ final class SingleAttributesTest extends \PHPUnit\Framework\TestCase
{
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."}]}';
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."}]}';
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"}]}';
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"}]}';
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."}]}';
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"}]}';
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"}]}';
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."}]}';
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."}]}';
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."}]}';

public function testValidDeltasBold()
Expand Down

0 comments on commit 226548f

Please sign in to comment.