*/
class NPF
{
- static $heading_subtype = [];
+ private static $heading_subtype = [];
/**
* Convert BBCode into NPF (Tumblr Neue Post Format)
* @param integer $uri_id
* @return array NPF
*/
- static public function fromBBCode(string $bbcode, int $uri_id): array
+ public static function fromBBCode(string $bbcode, int $uri_id): array
{
$bbcode = self::prepareBody($bbcode);
}
$doc = new DOMDocument();
+
$doc->formatOutput = true;
if (!@$doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'))) {
return [];
* @param DOMDocument $doc
* @return void
*/
- static function setHeadingSubStyles(DOMDocument $doc)
+ private static function setHeadingSubStyles(DOMDocument $doc)
{
self::$heading_subtype = [];
foreach (['h1', 'h2', 'h3', 'h4', 'h5', 'h6'] as $element) {
* @param string $bbcode
* @return string
*/
- static private function prepareBody(string $bbcode): string
+ private static function prepareBody(string $bbcode): string
{
$shared = BBCode::fetchShareAttributes($bbcode);
if (!empty($shared)) {
do {
$oldbbcode = $bbcode;
- $bbcode = str_replace(["\n\n\n"], ["\n\n"], $bbcode);
+ $bbcode = str_replace(["\n\n\n"], ["\n\n"], $bbcode);
} while ($oldbbcode != $bbcode);
return trim($bbcode);
* @param array $formatting
* @return array
*/
- static private function routeChildren(DOMElement $element, int $uri_id, bool $parse_structure, array $callstack, array $npf = [], string $text = '', array $formatting = []): array
+ private static function routeChildren(DOMElement $element, int $uri_id, bool $parse_structure, array $callstack, array $npf = [], string $text = '', array $formatting = []): array
{
if ($parse_structure && $text) {
list($npf, $text, $formatting) = self::addBlock($text, $formatting, $npf, $callstack);
}
$callstack[] = $element->nodeName;
- $level = self::getLevelByCallstack($callstack);
+ $level = self::getLevelByCallstack($callstack);
foreach ($element->childNodes as $child) {
switch ($child->nodeName) {
case 'strong':
list($npf, $text, $formatting) = self::addFormatting($child, $uri_id, 'bold', $callstack, $npf, $text, $formatting);
break;
-
+
case 'i':
case 'em':
list($npf, $text, $formatting) = self::addFormatting($child, $uri_id, 'italic', $callstack, $npf, $text, $formatting);
break;
-
+
case 's':
list($npf, $text, $formatting) = self::addFormatting($child, $uri_id, 'strikethrough', $callstack, $npf, $text, $formatting);
break;
$text .= "\n";
}
break;
-
+
case '#text':
$text .= $child->textContent;
break;
case 'video':
$npf = self::addMediaBlock($child, $uri_id, $level, $npf);
break;
-
+
default:
list($npf, $text, $formatting) = self::routeChildren($child, $uri_id, true, $callstack, $npf, $text, $formatting);
break;
* @param array $callstack
* @return integer
*/
- static private function getLevelByCallstack(array $callstack): int
+ private static function getLevelByCallstack(array $callstack): int
{
$level = 0;
foreach ($callstack as $entry) {
* @param string $text
* @return string
*/
- static private function getSubTypeByCallstack(array $callstack, string $text): string
+ private static function getSubTypeByCallstack(array $callstack, string $text): string
{
$subtype = '';
foreach ($callstack as $entry) {
case 'h1':
$subtype = self::$heading_subtype[$entry];
break;
-
+
case 'h2':
$subtype = self::$heading_subtype[$entry];
break;
-
+
case 'h3':
$subtype = self::$heading_subtype[$entry];
break;
-
+
case 'h4':
$subtype = self::$heading_subtype[$entry];
break;
-
+
case 'h5':
$subtype = self::$heading_subtype[$entry];
break;
-
+
case 'h6':
$subtype = self::$heading_subtype[$entry];
break;
-
- case 'blockquote':
+
+ case 'blockquote':
$subtype = mb_strlen($text) < 100 ? 'quote' : 'indented';
break;
* @param array $formatting
* @return array
*/
- static private function addFormatting(DOMElement $element, int $uri_id, string $type, array $callstack, array $npf, string $text, array $formatting): array
+ private static function addFormatting(DOMElement $element, int $uri_id, string $type, array $callstack, array $npf, string $text, array $formatting): array
{
$start = mb_strlen($text);
+
list($npf, $text, $formatting) = self::routeChildren($element, $uri_id, false, $callstack, $npf, $text, $formatting);
if (!empty($type)) {
* @param array $formatting
* @return array
*/
- static private function addInlineLink(DOMElement $element, int $uri_id, array $callstack, array $npf, string $text, array $formatting): array
+ private static function addInlineLink(DOMElement $element, int $uri_id, array $callstack, array $npf, string $text, array $formatting): array
{
$start = mb_strlen($text);
+
list($npf, $text, $formatting) = self::routeChildren($element, $uri_id, false, $callstack, $npf, $text, $formatting);
$attributes = [];
* @param array $callstack
* @return array
*/
- static private function addBlock(string $text, array $formatting, array $npf, array $callstack): array
+ private static function addBlock(string $text, array $formatting, array $npf, array $callstack): array
{
$block = [
- 'type' => 'text',
- 'subtype' => '',
- 'text' => $text,
+ 'type' => 'text',
+ 'subtype' => '',
+ 'text' => $text,
];
if (!empty($formatting)) {
}
$npf[] = $block;
- $text = '';
- $formatting = [];
- return [$npf, $text, $formatting];
+ return [$npf, '', []];
}
/**
* @param array $block
* @return array
*/
- static private function addPoster(array $media, array $block): array
+ private static function addPoster(array $media, array $block): array
{
$poster = [];
if (!empty($media['preview'])) {
* @param array $npf
* @return array
*/
- static private function addLinkBlockForUriId(int $uri_id, int $level, array $npf): array
+ private static function addLinkBlockForUriId(int $uri_id, int $level, array $npf): array
{
foreach (Post\Media::getByURIId($uri_id, [Post\Media::HTML]) as $link) {
$host = parse_url($link['url'], PHP_URL_HOST);
* @param array $npf
* @return array
*/
- static private function addImageBlock(DOMElement $element, int $uri_id, int $level, array $npf): array
+ private static function addImageBlock(DOMElement $element, int $uri_id, int $level, array $npf): array
{
$attributes = [];
foreach ($element->attributes as $key => $attribute) {
* @param array $npf
* @return array
*/
- static private function addMediaBlock(DOMElement $element, int $uri_id, int $level, array $npf): array
+ private static function addMediaBlock(DOMElement $element, int $uri_id, int $level, array $npf): array
{
$attributes = [];
foreach ($element->attributes as $key => $attribute) {
switch ($media['type']) {
case Post\Media::AUDIO:
$block = [
- 'type' => 'audio',
+ 'type' => 'audio',
'media' => [
'type' => $media['mimetype'],
'url' => $media['url'],
case Post\Media::VIDEO:
$block = [
- 'type' => 'video',
+ 'type' => 'video',
'media' => [
'type' => $media['mimetype'],
'url' => $media['url'],
}
} else {
$block = [
- 'type' => 'text',
- 'text' => $element->textContent,
+ 'type' => 'text',
+ 'text' => $element->textContent,
'formatting' => [
[
'start' => 0,