/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 = "$tag>"; - - if ($tag=="bq") { - $cite = checkRefs($cite); - $cite = ($cite!='') ? ' cite="'.$cite.'"' : ''; - $start = "\t\n\t\t"; - } - - return "$start$atts>$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$tag>"; -} - -// ------------------------------------------------------------- -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.'\n\t
'.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