From dd6719738936be31cdaa1758ca86d5eb14dcab3d Mon Sep 17 00:00:00 2001
From: Barry Mieny tags
var $block_elements = 'address|blockquote|div|dl|fieldset|form|h\d|hr|noscript|object|ol|p|pre|script|table|ul';
-
+
// Elements that should not have and and $1 {@HC1}' then replace {@HC1} \{@HC'.$i.'\}) \{@HC'.$i.'\}(\s* *?]>) /' => '$1', // )+#' => ' \W* )+/' => ' ',
-
+
// Clean up stray paragraph tags that appear before block level elements
'# tags
- // starting immediately after \n/" => ">\n ",
-
+
// Similarly, there might be cases where a closing
tags within them.
var $skip_elements = 'p|pre|ol|ul|dl|object|table|h\d';
-
+
// Tags we want the parser to completely ignore when splitting the string.
var $inline_elements = 'a|abbr|acronym|b|bdo|big|br|button|cite|code|del|dfn|em|i|img|ins|input|label|map|kbd|q|samp|select|small|span|strong|sub|sup|textarea|tt|var';
-
+
// array of block level elements that require inner content to be within another block level element
var $inner_block_required = array('blockquote');
-
+
// the last block element parsed
var $last_block_element = '';
-
+
// whether or not to protect quotes within { curly braces }
var $protect_braced_quotes = FALSE;
-
+
/**
* Nothing to do here...
*
@@ -56,11 +56,11 @@ class CI_Typography {
* Auto Typography
*
* This function converts text, making it typographically correct:
- * - Converts double spaces into paragraphs.
- * - Converts single line breaks into
tags
- * - Converts single and double quotes into correctly facing curly quote entities.
- * - Converts three dots into ellipsis.
- * - Converts double dashes into em-dashes.
+ * - Converts double spaces into paragraphs.
+ * - Converts single line breaks into
tags
+ * - Converts single and double quotes into correctly facing curly quote entities.
+ * - Converts three dots into ellipsis.
+ * - Converts double dashes into em-dashes.
* - Converts two spaces into entities
*
* @access public
@@ -78,15 +78,15 @@ class CI_Typography {
// Standardize Newlines to make matching easier
if (strpos($str, "\r") !== FALSE)
{
- $str = str_replace(array("\r\n", "\r"), "\n", $str);
+ $str = str_replace(array("\r\n", "\r"), "\n", $str);
}
-
+
// Reduce line breaks. If there are more than two consecutive linebreaks
// we'll compress them down to a maximum of two since there's no benefit to more.
if ($reduce_linebreaks === TRUE)
{
$str = preg_replace("/\n\n+/", "\n\n", $str);
- }
+ }
// HTML comment tags don't conform to patterns of normal tags, so pull them out separately, only if needed
$html_comments = array();
@@ -101,50 +101,50 @@ class CI_Typography {
}
}
}
-
+
// match and yank tags if they exist. It's cheaper to do this separately since most content will
// not contain
tags, and it keeps the PCRE patterns below simpler and faster
if (strpos($str, '
.*?
#si", array($this, '_protect_characters'), $str);
}
-
+
// Convert quotes within tags to temporary markers.
$str = preg_replace_callback("#<.+?>#si", array($this, '_protect_characters'), $str);
// Do the same with braces if necessary
if ($this->protect_braced_quotes === TRUE)
{
- $str = preg_replace_callback("#\{.+?\}#si", array($this, '_protect_characters'), $str);
+ $str = preg_replace_callback("#\{.+?\}#si", array($this, '_protect_characters'), $str);
}
-
- // 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
+
+ // 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 bracket < temporarily to: {@TAG}
$str = preg_replace("#<(/*)(".$this->inline_elements.")([ >])#i", "{@TAG}\\1\\2\\3", $str);
// Split the string at every tag. This expression creates an array with this prototype:
- //
- // [array]
- // {
- // [0] = tags and a few other things.
if (preg_match("#<(/*)(".$this->block_elements.").*?>#", $chunk, $match))
@@ -153,7 +153,7 @@ class CI_Typography {
{
$process = ($match[1] == '/') ? TRUE : FALSE;
}
-
+
if ($match[1] == '')
{
$this->last_block_element = $match[2];
@@ -162,32 +162,32 @@ class CI_Typography {
$str .= $chunk;
continue;
}
-
+
if ($process == FALSE)
{
$str .= $chunk;
continue;
}
-
+
// Force a newline to make sure end tags get processed by _format_newlines()
if ($current_chunk == $total_chunks)
{
- $chunk .= "\n";
+ $chunk .= "\n";
}
-
+
// Convert Newlines into
tags
$str .= $this->_format_newlines($chunk);
}
-
+
// No opening block level tag? Add it if needed.
if ( ! preg_match("/^\s*<(?:".$this->block_elements.")/i", $str))
{
$str = preg_replace("/^(.*?)<(".$this->block_elements.")/i", '
'; } - + return preg_replace(array_keys($table), $table, $str); } - + // -------------------------------------------------------------------- - + /** * Format Characters * @@ -264,10 +264,10 @@ class CI_Typography { function format_characters($str) { static $table; - + if ( ! isset($table)) { - $table = array( + $table = array( // nested smart quotes, opening and closing // note that rules for grammar (English) allow only for two levels deep // and that single quotes are _supposed_ to always be on the outside @@ -313,7 +313,7 @@ class CI_Typography { return preg_replace(array_keys($table), $table, $str); } - + // -------------------------------------------------------------------- /** @@ -324,25 +324,25 @@ class CI_Typography { * @access public * @param string * @return string - */ + */ function _format_newlines($str) { if ($str == '') { return $str; } - + if (strpos($str, "\n") === FALSE && ! in_array($this->last_block_element, $this->inner_block_required)) { return $str; } - + // Convert two consecutive newlines to paragraphs $str = str_replace("\n\n", "\n\n
", $str);
-
+
// Convert single spaces to
tags
$str = preg_replace("/([^\n])(\n)([^\n])/", "\\1
\\2\\3", $str);
-
+
// Wrap the whole enchilada in enclosing paragraphs
if ($str != "\n")
{
@@ -355,19 +355,19 @@ class CI_Typography {
// Remove empty paragraphs if they are on the first line, as this
// is a potential unintended consequence of the previous code
$str = preg_replace("/
<\/p>(.*)/", "\\1", $str, 1); - + return $str; } - + // ------------------------------------------------------------------------ - + /** * Protect Characters * * Protects special characters from being formatted later * We don't want quotes converted within tags so we'll temporarily convert them to {@DQ} and {@SQ} - * and we don't want double dashes converted to emdash entities, so they are marked with {@DD} - * likewise double spaces are converted to {@NBS} to prevent entity conversion + * and we don't want double dashes converted to emdash entities, so they are marked with {@DD} + * likewise double spaces are converted to {@NBS} to prevent entity conversion * * @access public * @param array @@ -379,19 +379,19 @@ class CI_Typography { } // -------------------------------------------------------------------- - + /** * Convert newlines to HTML line breaks except within PRE tags * * @access public * @param string * @return string - */ + */ function nl2br_except_pre($str) { $ex = explode("pre>",$str); $ct = count($ex); - + $newstr = ""; for ($i = 0; $i < $ct; $i++) { @@ -403,14 +403,14 @@ class CI_Typography { { $newstr .= $ex[$i]; } - + if ($ct - 1 != $i) $newstr .= "pre>"; } - + return $newstr; } - + } // END Typography Class -- cgit v1.2.3-24-g4f1b