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); ?>