From b837adde3c3502117884675c996a860ba5ba7e6a Mon Sep 17 00:00:00 2001 From: Stephan Brunker Date: Sun, 26 Nov 2017 01:19:59 +0100 Subject: [PATCH] Changed behavior between body and extended part of article. The body part now has never a whiteline at the bottom, the extended part has one at the top if it begins with a newline or the body ends with a newline. --- .../serendipity_event_nl2br.php | 93 +++++++++++-------- 1 file changed, 55 insertions(+), 38 deletions(-) diff --git a/plugins/serendipity_event_nl2br/serendipity_event_nl2br.php b/plugins/serendipity_event_nl2br/serendipity_event_nl2br.php index 78548a60..29ad482f 100644 --- a/plugins/serendipity_event_nl2br/serendipity_event_nl2br.php +++ b/plugins/serendipity_event_nl2br/serendipity_event_nl2br.php @@ -269,7 +269,16 @@ class serendipity_event_nl2br extends serendipity_event $element = $temp['element']; if ($p_tags) { - $eventData[$element] = $this->nl2p($eventData[$element]); + $text = $eventData[$element]; + if (!empty($text)) { + //Standardize line endings to Unix + $text = str_replace(array("\r\n", "\r"), "\n", $text); + if ($element == 'body' && isset($eventData['extended'])) { + //move newlines from body to extended + $eventData['extended'] = str_repeat("\n",strspn($text,"\n",-1)) . $eventData['extended']; + } + $eventData[$element] = $this->nl2p($text, $element); + } } else if ($isolate) { $eventData[$element] = $this->isolate($eventData[$element], '~[<\[](' . implode('|', $isolate) . ').*?[>\]].*?[<\[]/\1[>\]]~si'); $eventData[$element] = nl2br($eventData[$element]); @@ -316,11 +325,21 @@ class serendipity_event_nl2br extends serendipity_event /* nl2br plugin start */ -p.whiteline { +p.whitelinebottom { margin-top: 0em; margin-bottom: 1em; } +p.whitelinetop { + margin-top: 1em; + margin-bottom: 0em; +} + +p.whitelinetopbottom { + margin-top: 1em; + margin-bottom: 1em; +} + p.break { margin-top: 0em; margin-bottom: 0em; @@ -371,56 +390,54 @@ p.break { /** * Insert

0) { - if ($insert) { - $i = $this->next_nl_block($i, $text); - if ($i == 0) { - //prevent replacing of first character - break; - } - if ($whiteline == true) { - $text[$i] = '

' . $big_p; - } else { - $text[$i] = '

' . $small_p; - } - $whiteline = false; - $insert = false; + //search next /n enclosing text, starting at $i-1 + $i = $this->next_nl_block($i, $text); + if ($i == 0) { //no newlines left + break; + } elseif ($whiteline == true) { + $text[$i] = '

' . $big_p; } else { - if ($text[$i-1] === "\n") { - //newline is follower of a newline - $whiteline = true; - } - $insert = true; + $text[$i] = '

' . $small_p; + } + //look ahead for next paragraph class + if ($text[$i-1] === "\n") { + $whiteline = true; + $i--; + } else { + $whiteline = false; } } - if ($whiteline) { + if ($whiteline && $startnl) { + $start_tag = '

'; + } elseif ($startnl) { + $start_tag = '

'; + } elseif ($whiteline) { $start_tag = $big_p; } else { $start_tag = $small_p; @@ -447,7 +464,7 @@ p.break { if (is_array($text)) { $text = implode($text); } - return str_replace(array('

','

', '

'),"", $text); + return str_replace(array('

','

','

','

','

'),"", $text); } function purge_p($text) @@ -583,4 +600,4 @@ p.break { } /* vim: set sts=4 ts=4 expandtab : */ -?> \ No newline at end of file +?>