From 339fab7b4e90792db78ff01a893e6ca2e6c8da23 Mon Sep 17 00:00:00 2001 From: Rick Ellis Date: Fri, 12 Sep 2008 06:04:39 +0000 Subject: More tweaks --- system/libraries/Typography.php | 30 ++++++++++++++++++------------ 1 file changed, 18 insertions(+), 12 deletions(-) diff --git a/system/libraries/Typography.php b/system/libraries/Typography.php index 66c21853d..3e465d78c 100644 --- a/system/libraries/Typography.php +++ b/system/libraries/Typography.php @@ -71,8 +71,8 @@ class CI_Typography { $str = preg_replace("#<([^><]+?)([^a-z_\-]on\w*|xmlns)(\s*=\s*[^><]*)([><]*)#i", "<\\1\\4", $str); } - // Convert quotes within tags to temporary marker. - // We don't want quotes converted within tags so we'll temporarily convert them to {@DQ} and {@SQ} + // Convert quotes within tags to temporary markers. We don't want quotes converted + // within tags so we'll temporarily convert them to {@DQ} and {@SQ} if (preg_match_all("#\<.+?>#si", $str, $matches)) { for ($i = 0; $i < count($matches['0']); $i++) @@ -85,7 +85,7 @@ class CI_Typography { // Convert "ignore" tags to temporary marker. The parser splits out the string at every tag // it encounters. Certain inline tags, like image tags, links, span tags, etc. will be - // adversely affected if they are split out so we'll convert the opening < temporarily to: {@TAG} + // adversely affected if they are split out so we'll convert the opening bracket < temporarily to: {@TAG} $str = preg_replace("#<(/*)(".$this->ignore_elements.")#i", "{@TAG}\\1\\2", $str); // Split the string at every tag. This expression creates an array with this prototype: @@ -128,14 +128,8 @@ class CI_Typography { $str .= $this->format_newlines($chunk); } - // Convert Quotes, elipsis, and em-dashes + // Convert quotes, elipsis, and em-dashes $str = $this->format_characters($str); - - // Do we need to reduce empty lines? - if ($this->reduce_empty_lines == TRUE) - { - $str = preg_replace('#(

\n*

)#', '', $str); - } // Final clean up $table = array( @@ -145,11 +139,11 @@ class CI_Typography { '/()

/' => '$1', // )+/' => '

', + '#(

)+#' => '

', '/(

)+/' => '

', // Clean up stray paragraph tags that appear before block level elements - '/

<\/p><('.$this->block_elements.')/' => '<$1', + '#

<('.$this->block_elements.')#' => '<$1', // Replace the temporary markers we added earlier '/\{@TAG\}/' => '<', @@ -158,6 +152,18 @@ class CI_Typography { ); + // Do we need to reduce empty lines? + if ($this->reduce_empty_lines == TRUE) + { + $table['#

\n*

#'] = ''; + } + else + { + // If we have empty paragraph tags we add a non-breaking space + // otherwise most browsers won't treat them as true paragraphs + $table['#

#'] = '

 

'; + } + return preg_replace(array_keys($table), $table, $str); } -- cgit v1.2.3-24-g4f1b