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); // first array element is always empty - remove array_shift($lines); // get each footnote's number ($n) and content ($s) from the array ... while (($n = array_shift($lines)) && ($s = array_shift($lines))) { // ... and add it to the result string $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); ?>