id = $id; } function note($n,$s) { $id=$this->id; $this->refs = true; return '
  • '.trim($s). " ^top". '
  • '; } function footnotes($matches) { $str = '

    Footnotes

      '; $lines = preg_split('|\[([0-9]+)\]|', $matches[1], -1, PREG_SPLIT_DELIM_CAPTURE); array_shift($lines); while ((list (,$n) = each($lines)) && (list (,$s) = each($lines))) $str .=$this->note($n, $s); $str .= '
    '; return $str; } function references($matches) { $n = $matches[1]; $id = $this->id; $href_rel = "{$id}-rel-{$n}"; $href_note = "{$id}-fn-{$n}"; return "{$n}"; } function headings($matches) { $i = 7-strlen($matches[1]); return "{$matches[2]}"; } } function plugin_footnotes_filter($text) { global $smarty; $footnotes_obj = new footnotes_class($id = $smarty->get_template_vars('id')); // *STRONG* emphasis $text = preg_replace('|(?\w)|xs', '$1', $text); // _emphasis_ (italic) $text = preg_replace('|(?\w)|xs', '$1', $text); // heading /* $text = preg_replace_callback( '(?\w)|xs' //'/\n(#{1,6})([^#]+)# * /', array(&$footnotes_obj, 'headings'), $text); */ $text = preg_replace_callback('|\n'. preg_quote(FOOTNOTES_START) .'\s*(.*)|sm', array(&$footnotes_obj, 'footnotes'), $text); // no [footnotes] references at the bottom of the page: stops if (!$footnotes_obj->refs) return $text; $text = preg_replace_callback('|\[([0-9]+)\]|', array(&$footnotes_obj, 'references'), $text); return $text; } add_filter('the_content', 'plugin_footnotes_filter', 0); ?>