4 The so called "mpi" plugins (== markup plugin interface), can be
5 invoked from inside WikiPages using following syntax:
7 <?plugin PluginName option1=attribute ... ?>
8 <?plugin-link ToThisPlugin ?>
10 The plugins (mpi_*.php) are loaded on demand from the plugins/mpi/
11 directory. This behaviour can however be disabled by defining the
12 _MPI_DEMANDLOAD constant to 0 - but then you had to load the wanted
13 mpi plugins together with include("plugins/mpi/mpi.php") yourself
14 and beforehand (from config.php or so).
17 define("EWIKI_MPI_DEMANDLOAD", 1);
18 define("EWIKI_MPI_AUTOLOAD_DIR", dirname(__FILE__));
20 define("EWIKI_MPI_FILE_PREFIX", "mpi_"); # better do not change
21 define("EWIKI_MPI_FILE_POSTFIX", ".php");
22 define("EWIKI_MPI_MARKUP_REGEX", "/<\\??(plugin:|e?wiki:|mpi:|plugin(?:-link|-form|-doc|-input|)\s)\s*(.*?)\\??>/i");
26 #-- register at ewiki pluginterface
27 //$ewiki_plugins["format_source"][] = "ewiki_mpi_fixsyntax";
28 $ewiki_plugins["action"]["mpi"] = "ewiki_mpi_action";
29 $ewiki_plugins["format_block"]["mpi"][] = "ewiki_mpi_call";
30 $ewiki_config["format_block"]["mpi"] = array("<?plugin", "?>", false, 0x0020);
35 #-- changes old plugin call syntax to new one (finally disabled with R1.02b)
36 function ewiki_mpi_fixsyntax(&$src) {
37 $src = preg_replace('/<plugin(.+?)\?>/s', '<?plugin\\1?>', $src);
39 $uu = $ewiki_config["format_block"]["mpi"]; // give all other
40 unset($ewiki_config["format_block"]["mpi"]); // block plugins
41 $ewiki_config["format_block"]["mpi"] = $uu; // precedence
46 #-- called from inside ewiki_format() engine
47 function ewiki_mpi_call(&$str, &$in, &$iii, &$s) {
49 global $ewiki_plugins;
51 #-- split out $mpi-action
54 $mpi_action = substr(strtolower(strtok($str, " :\n\t\f\r")), 1);
55 $str = ltrim(strtok("\000"));
57 switch ($mpi_action) {
66 #-- split mpi plugin name from arguments
67 $mpi_name = trim(strtok($str, " \n\t\f\r"));
68 $str = strtok("\000");
72 $mpi_args["_"] = $str;
73 ewiki_stripentities($mpi_args["_"]);
74 if (preg_match_all('/(\w+)="(.+)(?<![\\\\])"|(\w+)=([^\s]+)|([^\s"=]+)/', $mpi_args["_"], $uu)) {
76 foreach ($uu[5] as $i=>$d) {
81 elseif ($uu[$f=1][$i] || $uu[$f=3][$i]) {
82 $mpi_args[$uu[$f][$i]] = stripslashes($uu[$f+1][$i]);
86 isset($mpi_args["id"])
87 or ($mpi_args["id"] = $mpi_args[0])
88 or ($mpi_args["id"] = $mpi_args["page"]);
92 if ($action == "link") {
93 $str = '<a href="' . ewiki_script("mpi", $name, $args) . '">' . $name . '</a>';
94 $iii[$in][1] = 0x0010|0x0020; # InlineBlock+ScanForWikiWords
97 $str = ewiki_mpi_exec($mpi_action, $mpi_name, $mpi_args, $iii, $s);
103 function ewiki_mpi_exec($action, $rname, &$args, &$iii, &$s) {
105 global $ewiki_plugins, $ewiki_t, $ewiki_config;
107 #-- select plugin function
108 $name = strtolower($rname);
109 $pf = $ewiki_plugins["mpi"][$name];
112 if (!function_exists($pf) && EWIKI_MPI_DEMANDLOAD) {
114 $mpi_file = EWIKI_MPI_AUTOLOAD_DIR . "/" . EWIKI_MPI_FILE_PREFIX
115 . $name . EWIKI_MPI_FILE_POSTFIX;
116 @include_once($mpi_file);
118 $pf = $ewiki_plugins["mpi"][$name];
122 if (function_exists($pf)) {
123 return($pf($action, $args, $iii, $s));
126 return("<!-- referenced mpi '$rname' not available -->");
133 function ewiki_mpi_action($id, $data, $action) {
134 global $ewiki_plugins;
135 return(ewiki_mpi_exec("html", $id, $_REQUEST, $uu, $uu));