function wg_bt_tag($input, $args, $parser, $frame) { // debug levels: tag, lookup if (isset($args["debug"])) { $args["debug"] = bt_str($args["debug"]); ob_start(); if ($args["debug"] == "tag") { $r = bt_tag($input, $args); } elseif ($args["debug"] == "lookup") { $r = bt_l_tag(bt_tag($input, $args), $args); } else { $r = bt_r_tag(bt_l_tag(bt_tag($input, $args), $args), $args); } var_dump($r); return ob_get_clean(); } else { // 1. bt_tag: build bib array from bibtex // 2. bt_l_tag: lookup and pick referred entries from bt_tag // 3. bt_r_tag: render the result return bt_r_tag(bt_l_tag(bt_tag($input, $args), $args), $args); } }
function bt_l_tag($barr = NULL, $args = NULL) { global $wgBibtechBib; global $wgBibtechRoot; global $wgBibtechSortBy; // in ref mode the lookup table will be used $mode = "ref"; if (isset($args["mode"])) { $mode = bt_str($args["mode"]); } $lbarr = array(); if ($barr == NULL) { return NULL; } if (!isset($args["bib"])) { $bib = $wgBibtechRoot; } else { $bib = bt_str($args["bib"]); } if (!isset($wgBibtechBib[$bib]) && $mode != "list") { return NULL; } // list mode if ($mode == "list") { if (isset($args["sortby"])) { $wgBibtechSortBy = bt_str($args["sortby"]); } uasort($barr, "bt_cmp"); return $barr; } // reference mode // bc is the bibliography counter $bc = $wgBibtechBib[$bib]["bc"]; foreach ($wgBibtechBib[$bib]["ckeys"] as $ckey => $val) { if (!isset($barr[$ckey])) { $lbarr[$ckey] = array("type" => "missing", "ckey" => $ckey); } else { $lbarr[$ckey] = $barr[$ckey]; } // build up lookup bib $val["bc"] = $bc; $lbarr[$ckey] = array_merge($lbarr[$ckey], $val); } // end foe return $lbarr; }
function bt_r_frm($tag, $arr = NULL, $url = NULL) { $tag = bt_str($tag); $str = $arr[$tag]; // custom formatting $ffunc = "bt_r_frm_" . $tag; if (function_exists($ffunc)) { $str = call_user_func_array($ffunc, array($str)); } if ($url != NULL) { $str = '<a class="external" target="_new" href="' . $url . '">' . $str . '</a>'; } return '<span class="bibtech_' . $tag . '">' . $str . '</span>'; }