📄 textile.php
字号:
foreach($text as $line) { $offtags = ('code|pre|kbd|notextile'); /* matches are off if we're between <code>, <pre> 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 <code> */ if ($codepre == true) { $line = htmlspecialchars($line,ENT_NOQUOTES,"UTF-8"); $line = preg_replace('/<(\/?'.$offtags.')>/',"<$1>",$line); } $glyph_out[] = $line; } return join('',$glyph_out); } }// ------------------------------------------------------------- function textile_iAlign($in) { $vals = array( '<'=>'left', '='=>'center', '>'=>'right'); return (isset($vals[$in])) ? $vals[$in] : ''; }// ------------------------------------------------------------- function textile_hAlign($in) { $vals = array( '<'=>'left', '='=>'center', '>'=>'right', '<>'=>'justify'); return (isset($vals[$in])) ? $vals[$in] : ''; }// ------------------------------------------------------------- function textile_vAlign($in) { $vals = array( '^'=>'top', '-'=>'middle', '~'=>'bottom'); return (isset($vals[$in])) ? $vals[$in] : ''; }// ------------------------------------------------------------- function textile_encode_high($text,$charset="UTF-8") { $cmap = textile_cmap(); return mb_encode_numericentity($text, $cmap, $charset); }// ------------------------------------------------------------- function textile_decode_high($text,$charset="UTF-8") { $cmap = textile_cmap(); return mb_decode_numericentity($text, $cmap, $charset); }// ------------------------------------------------------------- function textile_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 ' <a target="_blank" href="http://www.textpattern.com/help/?item='.$helpvar.'" onclick="window.open(this.href, \'popupwindow\', \'width='.$windowW.',height='.$windowH.',scrollbars,resizable\'); return false;">'.$name.'</a><br />'; return $out; }// ------------------------------------------------------------- function textile_txtgps($thing) { if (isset($_POST[$thing])){ if (get_magic_quotes_gpc()==1){ return stripslashes($_POST[$thing]); } else { return $_POST[$thing]; } } else { return ''; } }// -------------------------------------------------------------// The following functions are used to detextile html, a process// still in development.// ------------------------------------------------------------- function textile_detextile($text) { $text = preg_replace("/<br \/>\s*/","\n",$text); $oktags = array('p','ol','ul','li','i','b','em','strong','span','a','h[1-6]', 'table','tr','td','u','del','sup','sub','blockquote'); foreach($oktags as $tag){ $text = preg_replace_callback("/\t*<(".$tag.")\s*([^>]*)>(.*)<\/\\1>/Usi", "textile_processTag",$text); } $glyphs = array( '’'=>'\'', # single closing '‘'=>'\'', # single opening '”'=>'"', # double closing '“'=>'"', # double opening '—'=>'--', # em dash '–'=>' - ', # en dash '×' =>'x', # dimension sign '™'=>'(TM)', # trademark '®' =>'(R)', # registered '©' =>'(C)', # copyright '…'=>'...' # ellipsis ); foreach($glyphs as $f=>$r){ $text = str_replace($f,$r,$text); } $list = false; $text = preg_split("/(<.*>)/U",$text,-1,PREG_SPLIT_DELIM_CAPTURE); foreach($text as $line){ if ($list == false && preg_match('/<ol/',$line)){ $line = ""; $list = "o"; } else if (preg_match('/<\/ol/',$line)){ $line = ""; $list = false; } else if ($list == false && preg_match('/<ul/',$line)){ $line = ""; $list = "u"; } else if (preg_match('/<\/ul/',$line)){ $line = ""; $list = false; } else if ($list == 'o'){ $line = preg_replace('/<li.*>/U','# ', $line); } else if ($list == 'u'){ $line = preg_replace('/<li.*>/U','* ', $line); } $glyph_out[] = $line; } $text = implode('',$glyph_out); $text = preg_replace('/^\t* *p\. /m','',$text); return textile_decode_high($text); }// ------------------------------------------------------------- function textile_processTag($matches) { list($all,$tag,$atts,$content) = $matches; $a = textile_splat($atts);# dump($tag); dump($content); dump($a); $phr = array( 'em'=>'_', 'i'=>'__', 'b'=>'**', 'strong'=>'*', 'cite'=>'??', 'del'=>'-', 'ins'=>'+', 'sup'=>'^', 'sub'=>'~', 'span'=>'%'); $blk = array('p','h1','h2','h3','h4','h5','h6'); if(isset($phr[$tag])) { return $phr[$tag].textile_sci($a).$content.$phr[$tag]; } elseif($tag=='blockquote') { return 'bq.'.textile_sci($a).' '.$content; } elseif(in_array($tag,$blk)) { return $tag.textile_sci($a).'. '.$content; } elseif ($tag=='a') { $t = textile_filterAtts($a,array('href','title')); $out = '"'.$content; $out.= (isset($t['title'])) ? ' ('.$t['title'].')' : ''; $out.= '":'.$t['href']; return $out; } else { return $all; } }// ------------------------------------------------------------- function textile_filterAtts($atts,$ok) { foreach($atts as $a) { if(in_array($a['name'],$ok)) { if($a['att']!='') { $out[$a['name']] = $a['att']; } } }# dump($out); return $out; }// ------------------------------------------------------------- function textile_sci($a) { $out = ''; foreach($a as $t){ $out.= ($t['name']=='class') ? '(='.$t['att'].')' : ''; $out.= ($t['name']=='id') ? '[='.$t['att'].']' : ''; $out.= ($t['name']=='style') ? '{='.$t['att'].'}' : ''; $out.= ($t['name']=='cite') ? ':'.$t['att'] : ''; } return $out; }// ------------------------------------------------------------- function textile_splat($attr) // returns attributes as an array { $arr = array(); $atnm = ''; $mode = 0; while (strlen($attr) != 0){ $ok = 0; switch ($mode) { case 0: // name if (preg_match('/^([a-z]+)/i', $attr, $match)) { $atnm = $match[1]; $ok = $mode = 1; $attr = preg_replace('/^[a-z]+/i', '', $attr); } break; case 1: // = if (preg_match('/^\s*=\s*/', $attr)) { $ok = 1; $mode = 2; $attr = preg_replace('/^\s*=\s*/', '', $attr); break; } if (preg_match('/^\s+/', $attr)) { $ok = 1; $mode = 0; $arr[] = array('name'=>$atnm,'whole'=>$atnm,'att'=>$atnm); $attr = preg_replace('/^\s+/', '', $attr); } break; case 2: // value if (preg_match('/^("[^"]*")(\s+|$)/', $attr, $match)) { $arr[]=array('name' =>$atnm,'whole'=>$atnm.'='.$match[1], 'att'=>str_replace('"','',$match[1])); $ok = 1; $mode = 0; $attr = preg_replace('/^"[^"]*"(\s+|$)/', '', $attr); break; } if (preg_match("/^('[^']*')(\s+|$)/", $attr, $match)) { $arr[]=array('name' =>$atnm,'whole'=>$atnm.'='.$match[1], 'att'=>str_replace("'",'',$match[1])); $ok = 1; $mode = 0; $attr = preg_replace("/^'[^']*'(\s+|$)/", '', $attr); break; } if (preg_match("/^(\w+)(\s+|$)/", $attr, $match)) { $arr[]= array('name'=>$atnm,'whole'=>$atnm.'="'.$match[1].'"', 'att'=>$match[1]); $ok = 1; $mode = 0; $attr = preg_replace("/^\w+(\s+|$)/", '', $attr); } break; } if ($ok == 0){ $attr = preg_replace('/^\S*\s*/', '', $attr); $mode = 0; } } if ($mode == 1) $arr[] = array ('name'=>$atnm,'whole'=>$atnm.'="'.$atnm.'"','att'=>$atnm); return $arr; }?>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -