This page describes some of the internal workings of PmWiki by explaining how some of the functions in pmwiki.php work. For a more brief list/overview on functions useful to for instance cookbook writers, see Cookbook:Functions. You might also want to look at the latest CVS version of pmwiki.php.
Put PmWiki standard functions here with brief explanations (per Pm email). Overly-documented functions get their own page (where possible). BenWilson August 02, 2005, at 02:15 PM
 FmtPageName($fmt, $pagename)
Returns 
$fmt, with $variable and internationalisation substitutions performed, under the assumption that the current page is 
pagename. See 
PmWiki.Variables for an (incomplete) list of available variables, 
PmWiki.Internationalizations for internationalisation.
This is one of the major functions in PmWiki, see PmWiki.FmtPageName for
lots of details.
 Markup($name, $when, $pattern, $replace)
Adds a new markup to the conversion table.  Described in greater detail at PmWiki.CustomMarkup.
This function is used to insert translation rules into the PmWiki's
translation engine. The arguments to Markup() are all strings, where:
$name-  The string names the rule that is inserted. It must be   unique (?? and is used partially controls the order in which the   rules are applied).
 
What happens if the name isn't unique??
$when-  This string is used to primarily control when   a rule is to be applied. See ??? for more details on the order of rules.
 $pattern-  This string is a regular expression that is used by the translation   engine to look for occurences of this rule in the markup source.
 $replace-  This string will replace the matched text when a match   occurs.
 
Also see: PmWiki.CustomMarkup and Cookbook:Functions#Markup
 MarkupToHTML($pagename, $str)
 Converts the string 
$str containing PmWiki markup into the corresponding HTML code, assuming the current page is 
$pagename.
Also see: Cookbook:Functions#MarkupToHTML
 mkdirp($dir)
The function mkdirp($dir) creates a directory, $dir, if it doesn't
already exist, including any parent directories that might be needed.  For
each directory created, it checks that the permissions on the directory are
sufficient to allow PmWiki scripts to read and write files in that
directory.  This includes checking for restrictions imposed by PHP's
safe_mode setting.  If mkdirp() is unable to successfully create a
read/write directory, mkdirp() aborts with an error message telling the
administrator the steps to take to either create $dir manually or give
PmWiki sufficient permissions to be able to do it.
Code of mkdirp() taken from version  pmwiki-2.0.beta55 (current is pmwiki-2.0.13):
## mkdirp creates a directory and its parents as needed, and sets
## permissions accordingly.
function mkdirp($dir) {
  global $ScriptUrl;
  if (file_exists($dir)) return;
  if (!file_exists(dirname($dir))) mkdirp(dirname($dir));
  if (mkdir($dir, 0777)) {
    fixperms($dir);
    if (@touch("$dir/xxx")) { unlink("$dir/xxx"); return; }
    rmdir($dir);
  }
  $parent = realpath(dirname($dir));
  $perms = decoct(fileperms($parent) & 03777);
  $msg = "PmWiki needs to have a writable <tt>$dir/</tt> directory
    before it can continue.  You can create the directory manually
    by executing the following commands on your server:
    <pre>    mkdir $parent/$dir\n    chmod 777 $parent/$dir</pre>
    Then, <a href='$ScriptUrl'>reload this page</a>.";
  $safemode = ini_get('safe_mode');
  if (!$safemode) $msg .= "<br /><br />Or, for a slightly more
    secure installation, try executing <pre>    chmod 2777 $parent</pre>
    on your server and following <a target='_blank' href='$ScriptUrl'>
    this link</a>.  Afterwards you can restore the permissions to
    their current setting by executing <pre>    chmod $perms $parent</pre>.";
  Abort($msg);
}