%[^#^]','/\\[\\^#\\^\\]/e',"FTNassembledFootnotes()"); Markup('[^#ref','inline','/\\[\\^#([^\ ]+?)\\^\\]/e',"FTNfootnoteReference('$1')"); Markup('[^#defsWA','>[^#ref','/\\[\\^#([^\ ]+?) (.*?)\\^\\]/e',"FTNfootnoteText('$1', '$2')"); Markup('[^defsWo','>[^#defsWA','/\\[\\^([^#].*?)\\^\\]/e',"FTNfootnoteText('', '$1')"); //Markup('\footnote','inline','/\\\\footnote\\{(.*?)\\}/e',"FTNfootnoteText('', '$1')"); $FTNrefCounter = 1; $FTNrefAnchorCounterMapping = array(); function FTNfootnoteReference($refAnchor) { global $FTNrefCounter, $FTNrefAnchorCounterMapping; if (!isset($FTNrefAnchorCounterMapping[$refAnchor])) { $displayedAnchor = $FTNrefCounter; $FTNrefAnchorCounterMapping[$refAnchor] = $FTNrefCounter; $FTNrefCounter += 1; } else { $displayedAnchor = $FTNrefAnchorCounterMapping[$refAnchor]; } return Keep("$displayedAnchor"); } function FTNfootnoteText($refAnchor, $footnoteText) { global $FTNrefCounter, $FTNrefAnchorCounterMapping, $FTNfootnoteTexts; $footnoteText = str_replace("\\\"", "\"", $footnoteText); if ($refAnchor == '') $refAnchor = "xxxxxxxxx$FTNrefCounter"; // internal use only $FTNfootnoteTexts[$refAnchor] = $footnoteText; if (!isset($FTNrefAnchorCounterMapping[$refAnchor])) { return FTNfootnoteReference($refAnchor); } return ''; } function FTNassembledFootnotes() { global $FTNrefAnchorCounterMapping, $FTNfootnoteTexts; $res = array(); /* $res[] = "
    "; foreach($FTNrefAnchorCounterMapping as $anchor => $count) { if (!isset($FTNfootnoteTexts[$anchor])) { $text = "Warning: Footnote '$anchor' referenced but not defined."; } else { $text = $FTNfootnoteTexts[$anchor]; } $res[] = "
  1. ^ $text
  2. "; } $res[] = "
"; */ foreach($FTNrefAnchorCounterMapping as $anchor => $count) { if (!isset($FTNfootnoteTexts[$anchor])) { $text = "Warning: Footnote '$anchor' referenced but not defined."; } else { $text = $FTNfootnoteTexts[$anchor]; } $res[] = "$count $text

"; //$res[] = "$count. $text"; } /* $res=array(); foreach($FTNfootnoteTexts as $anchor => $text) { $res[] = "$anchor => $text

"; } */ return Keep(implode("\n", $res)); } function FTNlatexAssembledFootnotes() { return Keep("


\n") . FTNassembledFootnotes(); }