diff --git a/wp-content/plugins/textile1.php b/wp-content/plugins/textile1.php new file mode 100644 index 0000000000..fa8c330241 --- /dev/null +++ b/wp-content/plugins/textile1.php @@ -0,0 +1,390 @@ +Dean Allen's Humane Web Text Generator, also known as Textile. If you use this plugin you should disable Textile 2 and Markdown, as they don't play well together. +Author: Dean Allen +Author URI: http://www.textism.com/?wp +*/ + +/* + +This is Textile +A Humane Web Text Generator + +Version 1.0 +21 Feb, 2003 + +Copyright (c) 2003, Dean Allen, www.textism.com +All rights reserved. + +_______ +LICENSE + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name Textile nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +*/ + + + function textile($text) { + $text = stripslashes($text); + + $text = preg_replace("/&(?![#a-zA-Z0-9]+;)/","x%x%",$text); + + if (function_exists('mb_encode_numericentity')) { + $text = encode_high($text); + } else { + $text = htmlentities($text,ENT_NOQUOTES,"utf-8"); + } + + $text = str_replace(array(">", "<", "&"), array(">", "<", "&"), $text); + + $text = str_replace("\r\n", "\n", $text); + + $text = str_replace("\t", "", $text); + + $text = preg_split("/\n/",$text); + foreach($text as $line){ + $line = trim($line); + $lineout[] = $line; + } + + $text = implode("\n",$lineout); + + $text = preg_replace('/(^|\s)==(.*)==(\s|$)?/msU','$1$2$3',$text); + + $text = preg_replace('/!([^\s\(=]+)\s?(?:\(([^\)]+)\))?!(\s)?/mU','$2$3',$text); + + $text = preg_replace('/():(\S+)(\s)/U','$1$3',$text); + + $text = preg_replace( + '/ + ([\s[{(]|[[:punct:]])? # 1 optional space or brackets before + " # starting " + ([^"\(]+) # 2 text of link + \s? # opt space + (?:\(([^\(]*)\))? # 3 opt title attribute in parenths + ": # dividing ": + (\S+\b) # 4 suppose this is the url + (\/)? # 5 opt trailing slash + ([^[:alnum:]\/;]*) # 6 opt punctuation after the url + (\s|$) # 7 either white space or end of string + /x', + '$1$2$6$7',$text); + + $qtags = array( + '\*\*'=>'b', + '\*'=>'strong', + '\?\?'=>'cite', + '-'=>'del', + '\+'=>'ins', + '~'=>'sub', + '@'=>'code'); + + foreach($qtags as $f=>$r){ + $text = preg_replace( + '/(^|\s|>)'.$f.'\b(.+)\b([[:punct:]]*)'.$f.'([[:punct:]]{0,2})(\s|$)?/mU', + '$1<'.$r.'>$2$3$4$5', + $text); + } + + $text = preg_replace('/(^|\s)__(.*)__([[:punct:]]{0,2})(\s|$)?/mU','$1$2$3$4',$text); + $text = preg_replace('/(^|\s)_(.*)_([[:punct:]]{0,2})(\s|$)?/mU','$1$2$3$4',$text); + + $text = preg_replace('/\^(.*)\^/mU','$1',$text); + + $text = preg_replace('/"$/',"\" ", $text); + $glyph_search = array( + '/([^\s[{(>])?\'(?(1)|(?=\s|s\b))/', # single closing + '/\'/', # single opening + '/([^\s[{(])?"(?(1)|(?=\s))/', # double closing + '/"/', # double opening + '/\b( )?\.{3}/', # ellipsis + '/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/', # 3+ uppercase acronym + '/(^|[^"][>\s])([A-Z][A-Z0-9 ]{2,})([^$1', # 3+ uppercase acronym + '$1$2$3', # 3+ uppercase caps + '—', # em dash + ' – ', # en dash + '$1×$2', # dimension sign + '™', # trademark + '®', # registered + '©'); # copyright + + $codepre = false; + + if(!preg_match("/<.*>/",$text)){ + $text = preg_replace($glyph_search,$glyph_replace,$text); + } else { + + $text = preg_split("/(<.*>)/U",$text,-1,PREG_SPLIT_DELIM_CAPTURE); + foreach($text as $line){ + + # matches are off if we're between ,
 etc.
+				if(preg_match('/<(code|pre|kbd|notextile)>/i',$line)){$codepre = true; }
+				if(preg_match('/<\/(code|pre|kbd|notextile)>/i',$line)){$codepre = false; }
+
+				if(!preg_match("/<.*>/",$line) && $codepre == false){
+					$line = preg_replace($glyph_search,$glyph_replace,$line);
+				}
+
+				# convert htmlspecial if between 
+				if ($codepre == true){
+					$line = htmlspecialchars($line,ENT_NOQUOTES,"UTF-8");
+					$line = str_replace("<pre>","
",$line);
+					$line = str_replace("<code>","",$line);
+					$line = str_replace("<notextile>","",$line);
+					$line = str_replace("<kbd>","",$line);
+				}
+
+				# each line gets pushed to a new array
+			$glyph_out[] = $line;
+		}
+			# $text is now the new array, cast to a string
+		$text = implode('',$glyph_out);
+	}
+
+	$text = preg_replace("/(\S)(_*)([[:punct:]]*) *\n([^#*\s])/", "$1$2$3
$4", $text); + + $text = str_replace("l>
", "l>\n", $text); + + $text = preg_split("/\n/",$text); + + array_push($text," "); + + $list = ''; + $pre = false; + + $block_find = array( + '/^\s?\*\s(.*)/', # bulleted list * + '/^\s?#\s(.*)/', # numeric list # + '/^bq\. (.*)/', # blockquote bq. + '/^h(\d)\(([[:alnum:]]+)\)\.\s(.*)/', # header hn(class). w/ css class + '/^h(\d)\. (.*)/', # plain header hn. + '/^p\(([[:alnum:]]+)\)\.\s(.*)/', # para p(class). w/ css class + '/^p\. (.*)/i', # plain paragraph + '/^([^\t ]+.*)/i' # remaining plain paragraph + ); + + $block_replace = array( + "\t\t
  • $1
  • ", + "\t\t\t
  • $1
  • ", + "\t
    $1
    ", + "\t$3$4", + "\t$2$3", + "\t

    $2

    $3", + "\t

    $1

    ", + "\t

    $1

    $2" + ); + + foreach($text as $line){ + + if(preg_match('/
    /i',$line)){$pre = true; }
    +
    +			if ($pre == false){
    +				$line = preg_replace($block_find,$block_replace,$line);
    +			}
    +
    +			if ($pre == true){
    +				$line = str_replace("
    ","\n",$line); + } + if(preg_match('/<\/pre>/i',$line)){$pre = false; } + + if ($list == '' && preg_match('/^\t\t
  • /',$line)){ + $list = "ul"; + $line = preg_replace('/^(\t\t
  • .*)/',"\t
      \n$1",$line); + + } else if ($list == '' && preg_match('/^\t\t\t
    • /',$line)){ + $list = "ol"; + $line = preg_replace('/^\t(\t\t
    • .*)/',"\t
        \n$1",$line); + + # at the end of a ul + } else if ($list == 'ul' && !preg_match('/^\t\t
      1. /',$line)){ + $list = ''; + $line = preg_replace('/^(.*)$/',"\t
    \n$1",$line); + + # at the end of a ol + } else if ($list == 'ol' && !preg_match('/^\t\t\t
  • /',$line)){ + $list = ''; + $line = preg_replace('/^(.*)$/',"\t\n$1",$line); + } + + $block_out[] = $line; + } + $text = implode("\n",$block_out); + $text = preg_replace('/<\/?notextile>/', "",$text); + $text = str_replace("x%x%","&",$text); + $text = str_replace("
    ","
    \n",$text); + return $text; +} + +function callback_url($text,$title='',$url) { + $out = 'a href="'.$url.'"'; + $out.=($title!='')?' title="'.$title.'"':''; + $out.='>$text'; + return $out; + } + + + +function textile_popup_help($name,$helpvar,$windowW,$windowH) { + $out = $name; + $out .= ' ?
    '; + print $out; +} + + +function encode_high($text) { + $cmap = cmap(); + return mb_encode_numericentity($text, $cmap, "UTF-8"); +} + + +function decode_high($text) { + $cmap = cmap(); + return mb_decode_numericentity($text, $cmap, "UTF-8"); +} + + +function cmap() { + + $f = 0xffff; + + $cmap = array( + 160, 255, 0, $f, + 402, 402, 0, $f, + 913, 929, 0, $f, + 931, 937, 0, $f, + 945, 969, 0, $f, + 977, 978, 0, $f, + 982, 982, 0, $f, + 8226, 8226, 0, $f, + 8230, 8230, 0, $f, + 8242, 8243, 0, $f, + 8254, 8254, 0, $f, + 8260, 8260, 0, $f, + 8465, 8465, 0, $f, + 8472, 8472, 0, $f, + 8476, 8476, 0, $f, + 8482, 8482, 0, $f, + 8501, 8501, 0, $f, + 8592, 8596, 0, $f, + 8629, 8629, 0, $f, + 8656, 8660, 0, $f, + 8704, 8704, 0, $f, + 8706, 8707, 0, $f, + 8709, 8709, 0, $f, + 8711, 8713, 0, $f, + 8715, 8715, 0, $f, + 8719, 8719, 0, $f, + 8721, 8722, 0, $f, + 8727, 8727, 0, $f, + 8730, 8730, 0, $f, + 8733, 8734, 0, $f, + 8736, 8736, 0, $f, + 8743, 8747, 0, $f, + 8756, 8756, 0, $f, + 8764, 8764, 0, $f, + 8773, 8773, 0, $f, + 8776, 8776, 0, $f, + 8800, 8801, 0, $f, + 8804, 8805, 0, $f, + 8834, 8836, 0, $f, + 8838, 8839, 0, $f, + 8853, 8853, 0, $f, + 8855, 8855, 0, $f, + 8869, 8869, 0, $f, + 8901, 8901, 0, $f, + 8968, 8971, 0, $f, + 9001, 9002, 0, $f, + 9674, 9674, 0, $f, + 9824, 9824, 0, $f, + 9827, 9827, 0, $f, + 9829, 9830, 0, $f, + 338, 339, 0, $f, + 352, 353, 0, $f, + 376, 376, 0, $f, + 710, 710, 0, $f, + 732, 732, 0, $f, + 8194, 8195, 0, $f, + 8201, 8201, 0, $f, + 8204, 8207, 0, $f, + 8211, 8212, 0, $f, + 8216, 8218, 0, $f, + 8218, 8218, 0, $f, + 8220, 8222, 0, $f, + 8224, 8225, 0, $f, + 8240, 8240, 0, $f, + 8249, 8250, 0, $f, + 8364, 8364, 0, $f + ); + + return $cmap; +} + + +function linkit($text,$title,$url){ + $url = preg_replace("/&(?!amp;)/","&",$url); + $out = ''; + + return $out; +} + +// And now for the filters +remove_filter('the_content', 'wpautop'); +remove_filter('the_excerpt', 'wpautop'); +remove_filter('comment_text', 'wpautop'); + +remove_filter('the_content', 'wptexturize'); +remove_filter('the_excerpt', 'wptexturize'); +remove_filter('comment_text', 'wptexturize'); + +add_filter('the_content', 'textile', 6); +add_filter('the_excerpt', 'textile', 6); +add_filter('comment_text', 'textile', 6); + +?> \ No newline at end of file diff --git a/wp-content/plugins/textile2.php b/wp-content/plugins/textile2.php new file mode 100644 index 0000000000..a96c8e5554 --- /dev/null +++ b/wp-content/plugins/textile2.php @@ -0,0 +1,782 @@ +Dean Allen's Humane Web Text Generator, also known as Textile. Version 2 adds a lot of flexibility that makes it almost a HTML meta-language. As a cost, it's slower. If you use this plugin you should disable Textile 1 and Markdown, as they don't play well together. +Author: Dean Allen +Author URI: http://www.textism.com/?wp +*/ + +/* + +This is Textile +A Humane Web Text Generator + +Version 2.0 beta +8 July, 2003 + +Copyright (c) 2003, Dean Allen, www.textism.com +All rights reserved. + +_______ +LICENSE + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the name Textile nor the names of its contributors may be used to + endorse or promote products derived from this software without specific + prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. +*/ + +$hlgn = "(?:\<(?!>)|(?|\<\>|\=|[()]+)"; +$vlgn = "[\-^~]"; +$clas = "(?:\([^)]+\))"; +$lnge = "(?:\[[^]]+\])"; +$styl = "(?:\{[^}]+\})"; +$cspn = "(?:\\\\\d+)"; +$rspn = "(?:\/\d+)"; +$textile_a = "(?:$hlgn?$vlgn?|$vlgn?$hlgn?)"; +$textile_s = "(?:$cspn?$rspn?|$rspn?$cspn?)"; +$textile_c = "(?:$clas?$styl?$lnge?|$styl?$lnge?$clas?|$lnge?$styl?$clas?)"; +$pnct = '[\!"#\$%&\'()\*\+,\-\./:;<=>\?@\[\\\]\^_`{\|}\~]'; + +function textile($text,$lite='') { + + if (get_magic_quotes_gpc()==1) + $text = stripslashes($text); + + $text = incomingEntities($text); + $text = encodeEntities($text); + $text = fixEntities($text); + $text = cleanWhiteSpace($text); + + $text = getRefs($text); + + $text = noTextile($text); + $text = image($text); + $text = links($text); + $text = span($text); + $text = superscript($text); + $text = footnoteRef($text); + $text = code($text); + $text = glyphs($text); + $text = retrieve($text); + + if ($lite=='') { + $text = lists($text); + $text = table($text); + $text = block($text); + } + + /* clean up */ + $text = preg_replace('/<\/?notextile>/', "",$text); + + /* turn the temp char back to an ampersand entity */ + $text = str_replace("x%x%","&",$text); + + $text = str_replace("
    ","
    \n",$text); + + return trim($text); +} + +function pba($in,$element="") // "parse block attributes" +{ + global $hlgn,$vlgn,$clas,$styl,$cspn,$rspn,$textile_a,$textile_s,$textile_c; + + $style=''; $class=''; $language=''; $colspan=''; $rowspan=''; $id=''; $atts=''; + + if (!empty($in)) { + $matched = $in; + if($element=='td'){ + if(preg_match("/\\\\(\d+)/",$matched,$csp)) $colspan=$csp[1]; + if(preg_match("/\/(\d+)/",$matched,$rsp)) $rowspan=$rsp[1]; + + if (preg_match("/($vlgn)/",$matched,$vert)) + $style[] = "vertical-align:".vAlign($vert[1]).";"; + } + + if(preg_match("/\{([^}]*)\}/",$matched,$sty)) { + $style[]=$sty[1].';'; + $matched = str_replace($sty[0],'',$matched); + } + + if(preg_match("/\[([^)]+)\]/U",$matched,$lng)) { + $language=$lng[1]; + $matched = str_replace($lng[0],'',$matched); + } + + if(preg_match("/\(([^()]+)\)/U",$matched,$cls)) { + $class=$cls[1]; + $matched = str_replace($cls[0],'',$matched); + } + + if(preg_match("/([(]+)/",$matched,$pl)) { + $style[] = "padding-left:".strlen($pl[1])."em;"; + $matched = str_replace($pl[0],'',$matched); + } + if(preg_match("/([)]+)/",$matched,$pr)) { + dump($pr); + $style[] = "padding-right:".strlen($pr[1])."em;"; + $matched = str_replace($pr[0],'',$matched); + } + + if (preg_match("/($hlgn)/",$matched,$horiz)) + $style[] = "text-align:".hAlign($horiz[1]).";"; + + if (preg_match("/^(.*)#(.*)$/",$class,$ids)) { + $id = $ids[2]; + $class = $ids[1]; + } + + if($style) $atts.=' style="'.join("",$style).'"'; + if($class) $atts.=' class="'.$class.'"'; + if($language) $atts.=' lang="'.$language.'"'; + if($id) $atts.=' id="'.$id.'"'; + if($colspan) $atts.=' colspan="'.$colspan.'"'; + if($rowspan) $atts.=' rowspan="'.$rowspan.'"'; + + return $atts; + } else { + return ''; + } +} + +// ------------------------------------------------------------- +function table($text) +{ + global $textile_a,$textile_c,$textile_s; + $text = $text."\n\n"; + return preg_replace_callback("/^(?:table(_?$textile_s$textile_a$textile_c)\. ?\n)?^($textile_a$textile_c\.? ?\|.*\|)\n\n/smU", + "fTable",$text); +} + +// ------------------------------------------------------------- +function fTable($matches) +{ + global $textile_s,$textile_a,$textile_c; + $tatts = pba($matches[1],'table'); + + foreach(preg_split("/\|$/m",$matches[2],-1,PREG_SPLIT_NO_EMPTY) as $row){ + if (preg_match("/^($textile_a$textile_c\. )(.*)/m",$row,$rmtch)) { + $ratts = pba($rmtch[1],'tr'); + $row = $rmtch[2]; + } else $ratts = ''; + + foreach(explode("|",$row) as $cell){ + $ctyp = "d"; + if (preg_match("/^_/",$cell)) $ctyp = "h"; + if (preg_match("/^(_?$textile_s$textile_a$textile_c\. )(.*)/",$cell,$cmtch)) { + $catts = pba($cmtch[1],'td'); + $cell = $cmtch[2]; + } else $catts = ''; + + if(trim($cell)!='') + $cells[] = "\t\t\t$cell"; + } + $rows[] = "\t\t\n".join("\n",$cells)."\n\t\t"; + unset($cells,$catts); + } + return "\t\n".join("\n",$rows)."\n\t\n\n"; +} + + +// ------------------------------------------------------------- +function lists($text) +{ + global $textile_a,$textile_c; + return preg_replace_callback("/^([#*]+$textile_c .*)$(?![^#*])/smU","fList",$text); +} + +// ------------------------------------------------------------- +function fList($m) +{ + global $textile_a,$textile_c; + $text = explode("\n",$m[0]); + foreach($text as $line){ + $nextline = next($text); + if(preg_match("/^([#*]+)($textile_a$textile_c) (.*)$/s",$line,$m)) { + list(,$tl,$atts,$content) = $m; + $nl = preg_replace("/^([#*]+)\s.*/","$1",$nextline); + if(!isset($lists[$tl])){ + $lists[$tl] = true; + $atts = pba($atts); + $line = "\t<".lT($tl)."l$atts>\n\t
  • ".$content; + } else { + $line = "\t\t
  • ".$content; + } + + if ($nl===$tl){ + $line .= "
  • "; + } elseif($nl=="*" or $nl=="#") { + $line .= "\n\t\n\t"; + unset($lists[$tl]); + } + if (!$nl) { + foreach($lists as $k=>$v){ + $line .= "\n\t"; + unset($lists[$k]); + } + } + } + $out[] = $line; + } + return join("\n",$out); +} + +// ------------------------------------------------------------- +function lT($in) +{ + return preg_match("/^#+/",$in) ? 'o' : 'u'; +} + +// ------------------------------------------------------------- +function block($text) +{ + global $textile_a,$textile_c; + + $pre = false; + $find = array('bq','h[1-6]','fn\d+','p'); + + $text = preg_replace("/(.+)\n(?![#*\s|])/", + "$1
    ", $text); + + $text = explode("\n",$text); + array_push($text," "); + + foreach($text as $line) { + if (preg_match('/
    /i',$line)) { $pre = true; }
    +		foreach($find as $tag){
    +			$line = ($pre==false)
    +			?    preg_replace_callback("/^($tag)($textile_a$textile_c)\.(?::(\S+))? (.*)$/",
    +					"fBlock",$line)
    +			:    $line;
    +		}
    +
    +		$line = preg_replace('/^(?!\t|<\/?pre|<\/?code|$| )(.*)/',"\t

    $1

    ",$line); + + $line=($pre==true) ? str_replace("
    ","\n",$line):$line; + if (preg_match('/<\/pre>/i',$line)) { $pre = false; } + + $out[] = $line; + } + return join("\n",$out); +} + +// ------------------------------------------------------------- +function fBlock($m) +{ +# dump($m); + list(,$tag,$atts,$cite,$content) = $m; + + $atts = pba($atts); + + if(preg_match("/fn(\d+)/",$tag,$fns)){ + $tag = 'p'; + $atts.= ' id="fn'.$fns[1].'"'; + $content = ''.$fns[1].' '.$content; + } + + $start = "\t<$tag"; + $end = ""; + + if ($tag=="bq") { + $cite = checkRefs($cite); + $cite = ($cite!='') ? ' cite="'.$cite.'"' : ''; + $start = "\t\n\t\t$content$end"; +} + + +// ------------------------------------------------------------- +function span($text) +{ + global $textile_c,$pnct; + $qtags = array('\*\*','\*','\?\?','-','__','_','%','\+','~'); + + foreach($qtags as $f) { + $text = preg_replace_callback( + "/(?<=^|\s|\>|[[:punct:]]|[{(\[]) + ($f) + ($textile_c) + (?::(\S+))? + (\w.+\w) + ([[:punct:]]*) + $f + (?=[])}]|[[:punct:]]+|\s|$) + /xmU","fSpan",$text); + } + return $text; +} + +// ------------------------------------------------------------- +function fSpan($m) +{ +# dump($m); + global $textile_c; + $qtags = array( + '*' => 'b', + '**' => 'strong', + '??' => 'cite', + '_' => 'em', + '__' => 'i', + '-' => 'del', + '%' => 'span', + '+' => 'ins', + '~' => 'sub'); + + list(,$tag,$atts,$cite,$content,$end) = $m; + $tag = $qtags[$tag]; + $atts = pba($atts); + $atts.= ($cite!='') ? 'cite="'.$cite.'"' : ''; + + return "<$tag$atts>$content$end"; +} + +// ------------------------------------------------------------- +function links($text) +{ + global $textile_c; + return preg_replace_callback('/ + ([\s[{(]|[[:punct:]])? # $pre + " # start + ('.$textile_c.') # $atts + ([^"]+) # $text + \s? + (?:\(([^)]+)\)(?="))? # $title + ": + (\S+\b) # $url + (\/)? # $slash + ([^\w\/;]*) # $post + (?=\s|$) + /Ux',"fLink",$text); +} + +// ------------------------------------------------------------- +function fLink($m) +{ + list(,$pre,$atts,$text,$title,$url,$slash,$post) = $m; + + $url = checkRefs($url); + + $atts = pba($atts); + $atts.= ($title!='') ? ' title="'.$title.'"' : ''; + + $atts = ($atts!='') ? shelve($atts) : ''; + + return $pre.''.$text.''.$post; + +} + +// ------------------------------------------------------------- +function getRefs($text) +{ + return preg_replace_callback("/(?<=^|\s)\[(.+)\]((?:http:\/\/|\/)\S+)(?=\s|$)/U", + "refs",$text); +} + +// ------------------------------------------------------------- +function refs($m) +{ + list(,$flag,$url) = $m; + $GLOBALS['urlrefs'][$flag] = $url; + return ''; +} + +// ------------------------------------------------------------- +function checkRefs($text) +{ + global $urlrefs; + return (isset($urlrefs[$text])) ? $urlrefs[$text] : $text; +} + +// ------------------------------------------------------------- +function image($text) +{ + global $textile_c; + return preg_replace_callback("/ + \! # opening + (\<|\=|\>)? # optional alignment atts + ($textile_c) # optional style,class atts + (?:\. )? # optional dot-space + ([^\s(!]+) # presume this is the src + \s? # optional space + (?:\(([^\)]+)\))? # optional title + \! # closing + (?::(\S+))? # optional href + (?=\s|$) # lookahead: space or end of string + /Ux","fImage",$text); +} + +// ------------------------------------------------------------- +function fImage($m) +{ + list(,$algn,$atts,$url) = $m; + $atts = pba($atts); + $atts.= ($algn!='') ? ' align="'.iAlign($algn).'"' : ''; + $atts.= (isset($m[4])) ? ' title="'.$m[4].'"' : ''; + $size = @getimagesize($url); + if($size) $atts.= " $size[3]"; + + $href = (isset($m[5])) ? checkRefs($m[5]) : ''; + $url = checkRefs($url); + + $out = ''; + $out.= ($href!='') ? '' : ''; + $out.= ''; + $out.= ($href!='') ? '' : ''; + + return $out; +} + +// ------------------------------------------------------------- +function code($text) +{ + global $pnct; + return preg_replace_callback("/ + (?:^|(?<=[\s\(])|([[{])) # 1 open bracket? + @ # opening + (?:\|(\w+)\|)? # 2 language + (.+) # 3 code + @ # closing + (?:$|([\]}])| + (?=[[:punct:]]{1,2}| + \s)) # 4 closing bracket? + /Ux","fCode",$text); +} + +// ------------------------------------------------------------- +function fCode($m) +{ + list(,$before,$lang,$code,$after) = $m; + $lang = ($lang!='') ? ' language="'.$lang.'"' : ''; + return $before.''.detextile($code).'
    '.$after; +} + +// ------------------------------------------------------------- +function shelve($val) +{ + $GLOBALS['shelf'][] = $val; + return ' <'.count($GLOBALS['shelf']).'>'; +} + +// ------------------------------------------------------------- +function retrieve($text) +{ + global $shelf; + $i = 0; + if(is_array($shelf)) { + foreach($shelf as $r){ + $i++; + $text = str_replace("<$i>",$r,$text); + } + } + return $text; +} + +// ------------------------------------------------------------- +function incomingEntities($text) +{ + /* turn any incoming ampersands into a dummy character for now. + This uses a negative lookahead for alphanumerics followed by a semicolon, + implying an incoming html entity, to be skipped */ + + return preg_replace("/&(?![a-z]+;|#[0-9]+;)/i","x%x%",$text); +} + +// ------------------------------------------------------------- +function encodeEntities($text) +{ + /* Convert high and low ascii to entities. If multibyte string functions are + available (on by default in php 4.3+), we convert using unicode mapping as + defined in the function encode_high(). If not, we use php's nasty + built-in htmlentities() */ + + return (function_exists('mb_encode_numericentity')) + ? encode_high($text) + : htmlentities($text,ENT_NOQUOTES,"utf-8"); +} + +// ------------------------------------------------------------- +function fixEntities($text) +{ + /* de-entify any remaining angle brackets or ampersands */ + return str_replace(array(">", "<", "&"), + array(">", "<", "&"), $text); +} + +// ------------------------------------------------------------- +function cleanWhiteSpace($text) +{ + $out = str_replace(array("\r\n","\t"), array("\n",''), $text); + $out = preg_replace("/\n{3,}/","\n\n",$out); + $out = preg_replace("/\n *\n/","\n\n",$out); + $out = preg_replace('/"$/',"\" ", $out); + return $out; +} + +// ------------------------------------------------------------- +function noTextile($text) +{ + return preg_replace('/(^|\s)==(.*)==(\s|$)?/msU', + '$1$2$3',$text); +} + +// ------------------------------------------------------------- +function superscript($text) +{ + return preg_replace('/\^(.*)\^/mU','$1',$text); +} + +// ------------------------------------------------------------- +function footnoteRef($text) +{ + return preg_replace('/\b\[([0-9]+)\](\s)?/U', + '$1$2',$text); +} + +// ------------------------------------------------------------- +function glyphs($text) +{ + // fix: hackish + $text = preg_replace('/"\z/',"\" ", $text); + + $glyph_search = array( + '/([^\s[{(>])?\'(?(1)|(?=\s|s\b|[[:punct:]]))/', // single closing + '/\'/', // single opening + '/([^\s[{(>])?"(?(1)|(?=\s|[[:punct:]]))/', // double closing + '/"/', // double opening + '/\b( )?\.{3}/', // ellipsis + '/\b([A-Z][A-Z0-9]{2,})\b(?:[(]([^)]*)[)])/', // 3+ uppercase acronym + '/(^|[^"][>\s])([A-Z][A-Z0-9 ]{2,})([^$1', // 3+ uppercase acronym + '$1$2$3', // 3+ uppercase caps + '—', // em dash + ' – ', // en dash + '$1×$2', // dimension sign + '™', // trademark + '®', // registered + '©'); // copyright + + +$codepre = false; + /* if no html, do a simple search and replace... */ +if (!preg_match("/<.*>/",$text)) { + $text = preg_replace($glyph_search,$glyph_replace,$text); + return $text; +} else { + $text = preg_split("/(<.*>)/U",$text,-1,PREG_SPLIT_DELIM_CAPTURE); + foreach($text as $line) { + $offtags = ('code|pre|kbd|notextile'); + + /* matches are off if we're between ,
     etc. */
    +			if (preg_match('/<('.$offtags.')>/i',$line)) $codepre = true;
    +			if (preg_match('/<\/('.$offtags.')>/i',$line)) $codepre = false;
    +
    +			if (!preg_match("/<.*>/",$line) && $codepre == false) {
    +				$line = preg_replace($glyph_search,$glyph_replace,$line);
    +			}
    +
    +				/* do htmlspecial if between  */
    +			if ($codepre == true) {
    +				$line = htmlspecialchars($line,ENT_NOQUOTES,"UTF-8");
    +				$line = preg_replace('/<(\/?'.$offtags.')>/',"<$1>",$line);
    +			}
    +
    +		$glyph_out[] = $line;
    +	}
    +	return join('',$glyph_out);
    +}
    +}
    +
    +// -------------------------------------------------------------
    +function iAlign($in)
    +{
    +	$vals = array(
    +		'<'=>'left',
    +		'='=>'center',
    +		'>'=>'right');
    +	return (isset($vals[$in])) ? $vals[$in] : '';
    +}
    +
    +// -------------------------------------------------------------
    +function hAlign($in)
    +{
    +	$vals = array(
    +		'<'=>'left',
    +		'='=>'center',
    +		'>'=>'right',
    +		'<>'=>'justify');
    +	return (isset($vals[$in])) ? $vals[$in] : '';
    +}
    +
    +// -------------------------------------------------------------
    +function vAlign($in)
    +{
    +	$vals = array(
    +		'^'=>'top',
    +		'-'=>'middle',
    +		'~'=>'bottom');
    +	return (isset($vals[$in])) ? $vals[$in] : '';
    +}
    +
    +// -------------------------------------------------------------
    +function encode_high($text,$charset="UTF-8")
    +{
    +	$cmap = cmap();
    +	return mb_encode_numericentity($text, $cmap, $charset);
    +}
    +
    +// -------------------------------------------------------------
    +function decode_high($text,$charset="UTF-8")
    +{
    +	$cmap = cmap();
    +	return mb_decode_numericentity($text, $cmap, $charset);
    +}
    +
    +// -------------------------------------------------------------
    +function cmap()
    +{
    +	$f = 0xffff;
    +	$cmap = array(
    +	 160,  255,  0, $f,
    +	 402,  402,  0, $f,
    +	 913,  929,  0, $f,
    +	 931,  937,  0, $f,
    +	 945,  969,  0, $f,
    +	 977,  978,  0, $f,
    +	 982,  982,  0, $f,
    +	 8226, 8226, 0, $f,
    +	 8230, 8230, 0, $f,
    +	 8242, 8243, 0, $f,
    +	 8254, 8254, 0, $f,
    +	 8260, 8260, 0, $f,
    +	 8465, 8465, 0, $f,
    +	 8472, 8472, 0, $f,
    +	 8476, 8476, 0, $f,
    +	 8482, 8482, 0, $f,
    +	 8501, 8501, 0, $f,
    +	 8592, 8596, 0, $f,
    +	 8629, 8629, 0, $f,
    +	 8656, 8660, 0, $f,
    +	 8704, 8704, 0, $f,
    +	 8706, 8707, 0, $f,
    +	 8709, 8709, 0, $f,
    +	 8711, 8713, 0, $f,
    +	 8715, 8715, 0, $f,
    +	 8719, 8719, 0, $f,
    +	 8721, 8722, 0, $f,
    +	 8727, 8727, 0, $f,
    +	 8730, 8730, 0, $f,
    +	 8733, 8734, 0, $f,
    +	 8736, 8736, 0, $f,
    +	 8743, 8747, 0, $f,
    +	 8756, 8756, 0, $f,
    +	 8764, 8764, 0, $f,
    +	 8773, 8773, 0, $f,
    +	 8776, 8776, 0, $f,
    +	 8800, 8801, 0, $f,
    +	 8804, 8805, 0, $f,
    +	 8834, 8836, 0, $f,
    +	 8838, 8839, 0, $f,
    +	 8853, 8853, 0, $f,
    +	 8855, 8855, 0, $f,
    +	 8869, 8869, 0, $f,
    +	 8901, 8901, 0, $f,
    +	 8968, 8971, 0, $f,
    +	 9001, 9002, 0, $f,
    +	 9674, 9674, 0, $f,
    +	 9824, 9824, 0, $f,
    +	 9827, 9827, 0, $f,
    +	 9829, 9830, 0, $f,
    +	 338,  339,  0, $f,
    +	 352,  353,  0, $f,
    +	 376,  376,  0, $f,
    +	 710,  710,  0, $f,
    +	 732,  732,  0, $f,
    +	 8194, 8195, 0, $f,
    +	 8201, 8201, 0, $f,
    +	 8204, 8207, 0, $f,
    +	 8211, 8212, 0, $f,
    +	 8216, 8218, 0, $f,
    +	 8218, 8218, 0, $f,
    +	 8220, 8222, 0, $f,
    +	 8224, 8225, 0, $f,
    +	 8240, 8240, 0, $f,
    +	 8249, 8250, 0, $f,
    +	 8364, 8364, 0, $f);
    +	return $cmap;
    +}
    +
    +
    +// -------------------------------------------------------------
    +    function textile_popup_help($name,$helpvar,$windowW,$windowH) {
    +        return ' '.$name.'
    '; + + return $out; + } + + function txtgps($thing) + { + if (isset($_POST[$thing])){ + if (get_magic_quotes_gpc()==1){ + return stripslashes($_POST[$thing]); + } else { + return $_POST[$thing]; + } + } else { + return ''; + } + } + +// WordPress users. If you want to change what is textiled, do so here! +// Default filters we don't want because of Textile 2 +remove_filter('the_content', 'wpautop'); +remove_filter('the_excerpt', 'wpautop'); +remove_filter('comment_text', 'wpautop'); + +remove_filter('the_content', 'wptexturize'); +remove_filter('the_excerpt', 'wptexturize'); +remove_filter('comment_text', 'wptexturize'); + +add_filter('the_content', 'textile', 6); +add_filter('the_excerpt', 'textile', 6); +add_filter('comment_text', 'textile', 6); + +?> \ No newline at end of file