387 lines
9.7 KiB
HTML
387 lines
9.7 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<title>GT::Plugins - a plugin interface for Gossamer Threads products.</title>
|
|
<link rev="made" href="mailto:root@penguin.office.gossamer-threads.com" />
|
|
|
|
<style type="text/css">
|
|
/* $MVD$:fontset("Untitled Font Set 1","ARIEL","HELVETICA","HELV","SANSERIF") */
|
|
/* $MVD$:fontset("Arial","Arial") */
|
|
/* $MVD$:fontset("Arial Black","Arial Black") */
|
|
/* $MVD$:fontset("Algerian","Algerian") */
|
|
|
|
|
|
body {
|
|
background-color: white;
|
|
font-family: Verdana, Arial, sans-serif;
|
|
font-size: small;
|
|
color: black;
|
|
}
|
|
|
|
|
|
p {
|
|
background-color : white;
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
h1 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-weight : bold;
|
|
font-size : medium;
|
|
background-color : white;
|
|
color : maroon;
|
|
}
|
|
|
|
|
|
h2 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : medium;
|
|
font-weight : bold;
|
|
color : blue;
|
|
background-color : white;
|
|
}
|
|
|
|
|
|
h3 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-weight : bold;
|
|
font-size : medium;
|
|
color : black;
|
|
background-color : white;
|
|
}
|
|
|
|
|
|
h4 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-weight : bold;
|
|
font-size : small;
|
|
color : maroon;
|
|
background-color : white;
|
|
}
|
|
|
|
|
|
h5 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-weight : bold;
|
|
font-size : small;
|
|
color : blue;
|
|
background-color : white;
|
|
}
|
|
|
|
|
|
h6 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-weight : bold;
|
|
font-size : small;
|
|
color : black;
|
|
background-color : white;
|
|
}
|
|
|
|
|
|
ul {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
ol {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
dl {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
li {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
th {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
td {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
dl {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
dd {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
dt {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
code {
|
|
font-family : Courier;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
|
|
pre {
|
|
font-family : Courier;
|
|
font-size : small;
|
|
color : black;
|
|
}
|
|
|
|
.mvd-H1 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-weight : bold;
|
|
font-size : 14.0pt;
|
|
background-color : transparent;
|
|
background-image : none;
|
|
color : maroon;
|
|
}
|
|
|
|
|
|
.mvd-H2 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : 12.0pt;
|
|
color : blue;
|
|
}
|
|
|
|
|
|
p.indent {
|
|
font-family : "Verdana, Arial, sans-serif";
|
|
list-style-type : circle;
|
|
list-style-position : inside;
|
|
color : black;
|
|
margin-left : 16.0pt;
|
|
}
|
|
|
|
|
|
.mvd-P-indent {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
list-style-type : circle;
|
|
list-style-position : inside;
|
|
color : black;
|
|
margin-left : 16.0pt;
|
|
}
|
|
|
|
|
|
pre.programlisting {
|
|
font-size : 9.0pt;
|
|
list-style-type : disc;
|
|
margin-left : 16.0pt;
|
|
margin-top : -14.0pt;
|
|
}
|
|
|
|
|
|
.mvd-PRE-programlisting {
|
|
font-size : 9.0pt;
|
|
list-style-type : disc;
|
|
margin-left : 16.0pt;
|
|
margin-top : -14.0pt;
|
|
}
|
|
|
|
|
|
.mvd-PRE {
|
|
font-size : 9.0pt;
|
|
}
|
|
|
|
|
|
p.note {
|
|
margin-left : 28.0pt;
|
|
}
|
|
|
|
|
|
.mvd-P-note {
|
|
margin-left : 28.0pt;
|
|
}
|
|
|
|
|
|
.mvd-H4 {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-weight : normal;
|
|
font-size : 9.0pt;
|
|
color : black;
|
|
margin-left : 6.0pt;
|
|
margin-top : -14.0pt;
|
|
}
|
|
|
|
|
|
.mvd-P {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
font-size : 10.0pt;
|
|
color : black;
|
|
}
|
|
|
|
.mvd-BODY {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
background-color : white;
|
|
}
|
|
|
|
|
|
p.indentnobullet {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
list-style-type : none;
|
|
}
|
|
|
|
|
|
.mvd-P-indentnobullet {
|
|
font-family : Verdana, Arial, sans-serif;
|
|
list-style-type : none;
|
|
}
|
|
</style>
|
|
|
|
|
|
</head>
|
|
|
|
<body style="background-color: white">
|
|
|
|
<p><a name="__index__"></a></p>
|
|
<!-- INDEX BEGIN -->
|
|
|
|
<ul>
|
|
|
|
<li><a href="#name">NAME</a></li>
|
|
<li><a href="#synopsis">SYNOPSIS</a></li>
|
|
<li><a href="#description">DESCRIPTION</a></li>
|
|
<li><a href="#see_also">SEE ALSO</a></li>
|
|
<li><a href="#copyright">COPYRIGHT</a></li>
|
|
<li><a href="#version">VERSION</a></li>
|
|
</ul>
|
|
<!-- INDEX END -->
|
|
|
|
<hr />
|
|
<p>
|
|
</p>
|
|
<h1><a name="name">NAME</a></h1>
|
|
<p>GT::Plugins - a plugin interface for Gossamer Threads products.</p>
|
|
<p>
|
|
</p>
|
|
<hr />
|
|
<h1><a name="synopsis">SYNOPSIS</a></h1>
|
|
<pre>
|
|
use GT::Plugins;
|
|
$PLUGIN = GT::Plugins->new('/path/to/plugin/dir');</pre>
|
|
<pre>
|
|
$PLUGIN->dispatch(hook_name => \&code_ref => @args);
|
|
$PLUGIN->dispatch_method(hook_name => $self => method => @args);</pre>
|
|
<p>Old style, now deprecated in favour of the object approach above:</p>
|
|
<pre>
|
|
use GT::Plugins;</pre>
|
|
<pre>
|
|
GT::Plugins->dispatch('/path/to/plugin/dir', hook_name => \&code_ref => @args);
|
|
GT::Plugins->dispatch_method('/path/to/plugin/dir', hook_name => $self => method => @args);</pre>
|
|
<p>
|
|
</p>
|
|
<hr />
|
|
<h1><a name="description">DESCRIPTION</a></h1>
|
|
<p>The plugin module supports two modes of use. The first mode involves creating
|
|
and using a GT::Plugins object upon which plugin dispatch methods may be called
|
|
to provide hooks. The second does not use the object, but instead uses class
|
|
methods with an extra argument of the plugin path preceding the other
|
|
-><code>dispatch()</code> arguments.</p>
|
|
<p>Of the two approaches, the object approach is recommended as it is a) faster,
|
|
and b) requires much less value duplication as the plugin directory needs to be
|
|
specified only once. The old, class-method-based plugin interface should be
|
|
considered deprecated, and all new code should attempt to use the object-based
|
|
system.</p>
|
|
<p>A dispatch with each of the two interfaces work as follows, with differences in
|
|
interfaces as noted:</p>
|
|
<ol>
|
|
<li></li>
|
|
Loads the plugin config file. The actual file access and evaluation will be
|
|
cached, but a small amount of extra overhead is required on each dispatch.
|
|
This only applies to the deprecated class-method dispatch interface - the
|
|
preferred object interface loads the configuration file only once.
|
|
<p></p>
|
|
<li></li>
|
|
Runs any 'PRE' hooks registered in the config file. When using ->dispatch(),
|
|
each hook is passed the <code>@args</code> arguments passed into ->dispatch. When using
|
|
->dispatch_method(), both the object ($self) and arguments (@args) are passed
|
|
to the hook.
|
|
<p>Each plugin hook then has the ability to abort further plugins if desired by
|
|
calling <code>$PLUGIN->action(STOP)</code> (or <code>GT::Plugins->action(STOP)</code> for
|
|
the non-OO interface). STOP is exported by default from the GT::Plugins
|
|
module. Performing a STOP will skip both any further 'PRE' hooks and the
|
|
original function/method, and will use the hook's return value instead of the
|
|
real code's return value.</p>
|
|
<p>The current behaviour of 'PRE' hooks ignores the return value of any 'PRE' hook
|
|
that does not perform a STOP, however this behaviour <strong>may</strong> change to use the
|
|
return value as the arguments to the next PRE hook or actual code called. As
|
|
such, it is strongly recommended to return @_ from any 'PRE' hooks.</p>
|
|
<p></p>
|
|
<li></li>
|
|
Assuming <code>->action(STOP)</code> has not been called, the method
|
|
(->dispatch_method) or code reference (->dispatch) will be called, and its
|
|
return value stored.
|
|
<p></p>
|
|
<li></li>
|
|
Any registered 'POST' hooks registered in the config file will be run. When
|
|
using ->dispatch(), the list-context return value of the main code run (or, if
|
|
a 'PRE' hook called STOP, the return value of that 'PRE' hook) will be passed
|
|
in. When using ->dispatch_method(), the object is additionally passed in as
|
|
the first argument.
|
|
<p>The list returned by the 'POST' hook will be used as arguments for any
|
|
subsequent 'POST' hooks and as the final result returned by the -><code>dispatch()</code> or
|
|
-><code>dispatch_method()</code> call. There is one exception to this - for
|
|
-><code>dispatch_method()</code> 'POST' hooks, if the first argument of the return value is
|
|
the object, it will be removed; this is done to prevent a build-up of excess
|
|
objects at the beginning of the 'POST' hook arguments/return values due to
|
|
'POST' hooks simply returning @_ unaltered.</p>
|
|
<p></p>
|
|
<li></li>
|
|
The return value of the final 'POST' hook, or, when no post hooks are
|
|
configured, of the actual code, is returned as the result of the -><code>dispatch()</code>
|
|
call.
|
|
<p></p></ol>
|
|
<p>
|
|
</p>
|
|
<hr />
|
|
<h1><a name="see_also">SEE ALSO</a></h1>
|
|
<p>Also included as part of the plugin system are some modules for web based tools
|
|
to manage plugins:</p>
|
|
<p><a href="glist.cgi?do=admin_gtdoc&topic=/GT/Plugins/Manager.html">the GT::Plugins::Manager manpage</a> - Add, remove and edit plugin files.</p>
|
|
<p><a href="glist.cgi?do=admin_gtdoc&topic=/GT/Plugins/Wizard.html">the GT::Plugins::Wizard manpage</a> - Create shell plugins.</p>
|
|
<p><a href="glist.cgi?do=admin_gtdoc&topic=/GT/Plugins/Installer.html">the GT::Plugins::Installer manpage</a> - Used in installing plugins.</p>
|
|
<p>
|
|
</p>
|
|
<hr />
|
|
<h1><a name="copyright">COPYRIGHT</a></h1>
|
|
<p>Copyright (c) 2005 Gossamer Threads Inc. All Rights Reserved.
|
|
<a href="http://www.gossamer-threads.com/">http://www.gossamer-threads.com/</a></p>
|
|
<p>
|
|
</p>
|
|
<hr />
|
|
<h1><a name="version">VERSION</a></h1>
|
|
<p>Revision: $Id: Plugins.pm,v 1.55 2005/04/01 00:16:51 brewt Exp $</p>
|
|
|
|
</body>
|
|
|
|
</html>
|