private function doreplacetag($tag)
 {
     $out = array();
     $child = array();
     $last_root = 0;
     $diff = 0;
     $oldlen = 0;
     $newlen = 0;
     $out = array_reverse($this->out_arr);
     $lastlevel = 0;
     //print_r($out);
     foreach ($out as $key => $item) {
         $idx = !empty($item['attr'][0]) ? 1 : 0;
         $cfgtag = $this->template_tag[$tag][$idx];
         $calcLen = $item['innerLen'] + $diff;
         $innerText = substr($this->html, $item['innerPos'], $calcLen);
         $left = preg_replace("/\\%attr1\\%/si", $item['attr'][0], $cfgtag['begin']);
         for ($i = 1; $i < count($item['attr']) - 1; $i++) {
             $regex = "/\\%attr{$i}\\%/si";
             $left = preg_replace($regex, $item['attr'][$i], $left);
         }
         switch ($tag) {
             case 'list':
                 $inner = preg_replace("#<br>|<br />#si", "", $innerText);
                 $inner = $this->process_list_items($inner);
                 break;
             case 'quote':
                 $inner = $innerText;
                 break;
             case 'code':
                 $inner = preg_replace("#<br>|<br />#si", "", $innerText);
                 // for geshi highlighter
                 if (preg_match('/' . $this->highlight_lang . '/usi', $item['attr'][0])) {
                     $inner = Highlighter::parse($inner, $item['attr'][0]);
                     $inner = preg_replace("#\r?\n#si", "", $inner);
                 }
                 break;
             case 'chk':
                 $chk_arr = preg_split("/[^\\d]+/si", trim($item['attr'][0]));
                 $chk_list = implode("|", $chk_arr);
                 //Kohana::$log->add(Log::INFO,$chk_list." ".trim($item['attr'][0]));
                 $inner = preg_replace("#<br>|<br />#si", "", $innerText);
                 $inner = preg_replace("/\\b({$chk_list})\\b/si", "<span style=\"background-color:orange;\">\$1</span>", $inner);
                 break;
             default:
                 $inner = $innerText;
         }
         //$right = (!empty($item['attr'])) ? $cfgtag['altPos'] : $cfgtag['fPos'] ;
         $right = preg_replace("/\\%attr1\\%/si", $item['attr'][0], $cfgtag['end']);
         for ($i = 1; $i < count($item['attr']) - 1; $i++) {
             $regex = "/\\%attr{$i}\\%/si";
             $right = preg_replace($regex, $item['attr'][$i], $right);
         }
         $newstr = $left . $inner . $right;
         $newlen = strlen($newstr);
         $oldlen = $calcLen + strlen($item['tagLeft']) + strlen($item['tagRight']);
         $this->html = substr_replace($this->html, $newstr, $item['pos'], $oldlen);
         $lastlevel = $item['level'];
         $diff_flag = $lastlevel > 1;
         $diff = $diff_flag ? $diff + ($newlen - $oldlen) : 0;
     }
 }