none
authorPeterThoeny <PeterThoeny>
Fri, 12 Dec 2003 08:39:37 +0000 (08:39 +0000)
committerPeterThoeny <PeterThoeny>
Fri, 12 Dec 2003 08:39:37 +0000 (08:39 +0000)
TWiki/EditTablePlugin.mdwn [new file with mode: 0644]
TWiki/RenderListPlugin.mdwn
TWiki/SlideShowPlugin.mdwn [new file with mode: 0644]
TWiki/SmiliesPlugin.mdwn [new file with mode: 0644]
TWiki/SpreadSheetPlugin.mdwn [new file with mode: 0644]
TWiki/TWikiPlugins.mdwn
TWiki/TWikiPreferences.mdwn

diff --git a/TWiki/EditTablePlugin.mdwn b/TWiki/EditTablePlugin.mdwn
new file mode 100644 (file)
index 0000000..29c44de
--- /dev/null
@@ -0,0 +1,288 @@
+# <a name="Edit Table Plugin"></a> Edit Table Plugin
+
+This plugin allows you to edit TWiki tables using edit fields and drop down boxes. Tables have an **[ Edit table ]** button if preceeded by an `%EDITTABLE{...}%` variable. Each column can be a text field, a drop down box or a row number. Multiple tables per topic can be editable, but only one at a time canbe edited.
+
+## <a name="%TOPIC% Global Settings"></a> %TOPIC% Global Settings
+
+Plugin settings are stored as preferences variables. To reference a plugin setting write <code>**%&lt;plugin&gt;\_&lt;setting&gt;%**</code>, for example, <code>**%INTERWIKIPLUGIN\_SHORTDESCRIPTION%**</code>
+
+- One line description, shown in the [[TextFormattingRules]] topic:
+  - Set SHORTDESCRIPTION = Edit TWiki tables using edit fields and drop down boxes.
+
+- Set DEBUG to 1 to get debug messages in `data/debug.txt`. Default: `0`
+  - Set DEBUG = 0
+
+## <a name="Per Table Settings"></a> Per Table Settings
+
+Add a `%EDITTABLE{...}%` variable just before an existing table to make it editable, or add the variable anywhere in a topic to start a new table. Parameters:
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> Parameter </strong></th>
+    <th bgcolor="#99CCCC"><strong> Comment </strong></th>
+    <th bgcolor="#99CCCC"><strong> Default </strong></th>
+  </tr>
+  <tr>
+    <td><code>header</code></td>
+    <td> Enable static header if <code>"on"</code>, e.g. disable editing of the first row;<br /> Else specify the header format of a new table like <code>"|*Food*|*Drink*|"</code>. </td>
+    <td> (no header) </td>
+  </tr>
+  <tr>
+    <td><code>format</code></td>
+    <td> The format of one row when editing the table. A cell can be a text input field, a drop down box, a fixed label, or a row number. Cell definitions: <table cellpadding="0" cellspacing="0">
+        <tr>
+          <td valign="top">-Text input field (1 line): </td>
+          <td><code>| text, &lt;size&gt;, &lt;initial value&gt; |</code></td>
+        </tr>
+        <tr>
+          <td valign="top">-Textarea input field: </td>
+          <td><code>| textarea, &lt;rows&gt;x&lt;columns&gt;, &lt;initial value&gt; |</code></td>
+        </tr>
+        <tr>
+          <td valign="top">- Drop down box: </td>
+          <td><code>| select, &lt;size&gt;, &lt;option 1&gt;, &lt;option 2&gt;, etc |</code></td>
+        </tr>
+        <tr>
+          <td valign="top">- Fixed label: </td>
+          <td><code>| label, 0, &lt;label text&gt; |</code></td>
+        </tr>
+        <tr>
+          <td valign="top">- Row number: </td>
+          <td><code>| row, &lt;offset&gt; |</code></td>
+        </tr>
+        <tr>
+          <td valign="top">- Date: </td>
+          <td><code>| date, &lt;sizet&gt; |</code></td>
+        </tr>
+      </table>
+    </td>
+    <td><code>"text, 16"</code> for all cells </td>
+  </tr>
+  <tr>
+    <td><code>changerows</code></td>
+    <td> Rows can be added and removed if <code>"on"</code>;<br /> Rows can be added but not removed if <code>"add"</code></td>
+    <td><code>"on"</code></td>
+  </tr>
+  <tr>
+    <td><code>include</code></td>
+    <td> Other topic defining the EDITTABLE parameters. The first %EDITTABLE% in the topic is used. This is useful if you have many topics with the same table format and you want to update the format in one place. </td>
+    <td> (none) </td>
+  </tr>
+  <tr>
+    <td><code>helptopic</code></td>
+    <td> Topic name containing help text shown below the table when editing a table. The %STARTINCLUDE% and %STOPINCLUDE% variables can be used in the topic to specify what is shown. </td>
+    <td> (no help text) </td>
+  </tr>
+</table>
+
+**_Note:_** By default, variables in `<initial value>` (of text input field) and `<label text>` (of fixed label) get expanded when a new row is added. This can be used for example to add a timestamp to a label. You can escape characters if you do not want that:
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> Text: </strong></th>
+    <th bgcolor="#99CCCC"><strong> To Escape: </strong></th>
+  </tr>
+  <tr>
+    <td><code>$quot</code></td>
+    <td> Double quote (<code>"</code>). Alternatively write <code>\"</code> to escape it </td>
+  </tr>
+  <tr>
+    <td><code>$percnt</code></td>
+    <td> Percent sign (<code>%</code>) </td>
+  </tr>
+  <tr>
+    <td><code>$dollar</code></td>
+    <td> Dollar sign (<code>$</code>) </td>
+  </tr>
+  <tr>
+    <td><code>$nop</code> or <code>$nop()</code></td>
+    <td> Is a "no operation" </td>
+  </tr>
+</table>
+
+## <a name="Examples"></a> Examples
+
+Line before table: `%EDITTABLE{ header="|*Nr*|*Text field sandbox*|*Drop down sandbox*|*Timestamp*|" format="| row, -1 | text, 20, init | select, 1, one, two, three, four | label, 0, %SERVERTIME{"$day $mon $year $hour:$min"}% |" changerows="on" }%` <a name="edittable1"></a>
+
+<div>
+  <form action="http://www.dementia.org/twiki/viewauth#edittable1" method="post" name="edittable1"><input name="ettablenr" type="hidden" value="1" /> <input name="etedit" type="hidden" value="on" /><table border="1" cellpadding="0" cellspacing="0">
+      <tr>
+        <th bgcolor="#99CCCC"><strong> Nr </strong></th>
+        <th bgcolor="#99CCCC"><strong> Text field sandbox </strong></th>
+        <th bgcolor="#99CCCC"><strong> Drop down sandbox </strong></th>
+        <th bgcolor="#99CCCC"><strong> Timestamp </strong></th>
+      </tr>
+      <tr>
+        <td> 1 </td>
+        <td> hello table </td>
+        <td> one </td>
+        <td> 26 Jun 2002 12:30 </td>
+      </tr>
+      <tr>
+        <td> 2 </td>
+        <td>   </td>
+        <td> two </td>
+        <td> 27 Jun 2002 12:40 </td>
+      </tr>
+    </table><input name="etrows" type="hidden" value="3" /> <input type="submit" value="Edit table" /></form>
+</div>
+
+If this plugin is installed you will see an **[ Edit table ]** button above; when you click on it you get this form:
+
+<form>
+  <table border="1" cellpadding="0" cellspacing="1">
+    <tr>
+      <th bgcolor="#99CCCC"> Nr </th>
+      <th bgcolor="#99CCCC"> Text field sandbox </th>
+      <th bgcolor="#99CCCC"> Drop down sandbox </th>
+      <th bgcolor="#99CCCC"> Timestamp </th>
+    </tr>
+    <tr>
+      <td bgcolor="#FFFFFF"> 1<input name="etcell2x1" type="hidden" value="1" /></td>
+      <td bgcolor="#FFFFFF"><input name="etcell2x2" size="20" type="text" value="hello table" /></td>
+      <td bgcolor="#FFFFFF"><select name="etcell2x3" size="1"><option selected>one</option>
+          <option>two</option>
+          <option>three</option>
+          <option>four</option></select></td>
+      <td bgcolor="#FFFFFF"> 26 Jun 2002 12:30<input name="etcell2x4" type="hidden" value="26 Jun 2002 12:30" /></td>
+    </tr>
+    <tr>
+      <td bgcolor="#FFFF99"> 2<input name="etcell3x1" type="hidden" value="2" /></td>
+      <td bgcolor="#FFFF99"><input name="etcell3x2" size="20" type="text" value="" /></td>
+      <td bgcolor="#FFFF99"><select name="etcell3x3" size="1"><option>one</option>
+          <option selected>two</option>
+          <option>three</option>
+          <option>four</option></select></td>
+      <td bgcolor="#FFFF99"> 27 Jun 2002 12:40<input name="etcell3x4" type="hidden" value="27 Jun 2002 12:40" /></td>
+    </tr>
+  </table><input name="etsave" onclick="return(false);" type="submit" value="Save table" /> <input name="etqsave" onclick="return(false);" type="submit" value="Quietsave" /> <input name="etaddrow" onclick="return(false);" type="submit" value="Add row" /> <input name="etdelrow" onclick="return(false);" type="submit" value="Delete last row" /> <input name="etcancel" onclick="return(false);" type="submit" value="Cancel" /> (demo only, these buttons do not work) </form>
+
+## <a name="Limitations and Known Issues"></a> Limitations and Known Issues
+
+- This Plugin does not support TWiki table formatting like Multi-span cells (e.g. `| ... ||`) and cell justification (e.g. `|  centered  |   right |`).
+- There is a performance issue when editing a large table, say, with more then 50 rows.
+- The Plugin fails if the table is at the very end of the topic (without a new line) Always ensure there is a newline after the table
+- Variables like `%ATTACHURL%` get expanded unless they are in a label.
+- %RED% **Warning:** %ENDCOLOR% This plugin uses undocumented functions to read, save and lock a topic. The plugin will likely break in a future TWiki release.
+- You cannot put two %EDITTABLE% statements on the same line in the source.
+- You can include %-vars now in select values, by quoting them with &lt;nop&gt;, as in %&lt;nop&gt;X% for %X%, say for instance: <br />`select,1,%<nop>X%,%<nop>Y%`
+- `date` field type for the `format` parameter adds a button popping a javascript calendar to choose the date on browsers supporting it. It uses the nice **Mishoo DHTML calendar** at <http://dynarch.com/mishoo/calendar.epl>, that should be included in Cairo release, or see TWiki:Codev/JavaScriptDatePickerForForm for installing it on Beijing Release
+
+## <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
+
+- Download the ZIP file from the Plugin web (see below)
+- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> File: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+  </tr>
+  <tr>
+    <td><code><b>data/TWiki/%TOPIC%.txt</b></code></td>
+    <td> Plugin topic </td>
+  </tr>
+  <tr>
+    <td><code><b>data/TWiki/%TOPIC%.txt,v</b></code></td>
+    <td> Plugin topic repository </td>
+  </tr>
+  <tr>
+    <td><code><b>lib/TWiki/Plugins/%TOPIC%.pm</b></code></td>
+    <td> Plugin Perl module </td>
+  </tr>
+</table>
+- The plugin depends on the `viewauth` script to authenticate the user. As described in [[TWikiAccessControl]], copy the `view` script to `viewauth` (or better, create a symbolic link) and add `viewauth` to the list of authenticated scripts in the `.htaccess` file.
+- Test if the plugin is correctly installed:
+  - Check above example if there is an **[ Edit table ]** button below the table in above example
+  - Click on **[ Edit table ]**, make changes and save the table
+
+## <a name="Plugin Info"></a> Plugin Info
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <td align="right"> Plugin Author: </td>
+    <td>[[TWiki/PeterThoeny]]</td>
+  </tr>
+  <tr>
+    <td align="right"> Plugin Version: </td>
+    <td> 16 Oct 2003 </td>
+  </tr>
+  <tr>
+    <td align="right"> Change History: </td>
+    <td>  </td>
+  </tr>
+  <tr>
+    <td align="right"> 16 Oct 2003: </td>
+    <td> small typo fixed (garbled if ---+ header on top) </td>
+  </tr>
+  <tr>
+    <td align="right"> 15 Oct 2003: </td>
+    <td> new date field type with javascript calendar - CN </td>
+  </tr>
+  <tr>
+    <td align="right"> 14 Oct 2003: </td>
+    <td> docfix: the documentation page was an old one - CN </td>
+  </tr>
+  <tr>
+    <td align="right"> 13 Oct 2003: </td>
+    <td> bugfix: %-vars in select were resetted to first on add/del row - CN </td>
+  </tr>
+  <tr>
+    <td align="right"> 18 Sep 2003: </td>
+    <td><strong>incompatibility:</strong> changed default of <code>changerows</code> to =on=<br /> support for %-vars, Quietsave for saving without notification, all other fixes in Dev topic integrated - CN </td>
+  </tr>
+  <tr>
+    <td align="right"> 08 Nov 2002: </td>
+    <td> Prevent variable expansion in label text; added escape characters </td>
+  </tr>
+  <tr>
+    <td align="right"> 27 Jun 2002: </td>
+    <td> New <code>helptopic</code> parameter </td>
+  </tr>
+  <tr>
+    <td align="right"> 26 Jun 2002: </td>
+    <td> Support for variables in included EDITTABLE parameters; fixed problem with HTML in cells </td>
+  </tr>
+  <tr>
+    <td align="right"> 21 May 2002: </td>
+    <td> Added fixed label format; new <code>changerows="add"</code> parameter </td>
+  </tr>
+  <tr>
+    <td align="right"> 27 Apr 2002: </td>
+    <td> Fixed bug where text after a double quote in a cell disappeared </td>
+  </tr>
+  <tr>
+    <td align="right"> 18 Apr 2002: </td>
+    <td> Fixed bug where table was breaking when pasting multiple lines into an edit field using Netscape on Unix </td>
+  </tr>
+  <tr>
+    <td align="right"> 08 Apr 2002: </td>
+    <td> Check for change permission and edit lock of topic </td>
+  </tr>
+  <tr>
+    <td align="right"> 05 Apr 2002: </td>
+    <td> Initial version </td>
+  </tr>
+  <tr>
+    <td align="right"> CPAN Dependencies: </td>
+    <td> none </td>
+  </tr>
+  <tr>
+    <td align="right"> Other Dependencies: </td>
+    <td> none </td>
+  </tr>
+  <tr>
+    <td align="right"> Perl Version: </td>
+    <td> 5.0 </td>
+  </tr>
+  <tr>
+    <td align="right"> Plugin Home: </td>
+    <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
+  </tr>
+  <tr>
+    <td align="right"> Feedback: </td>
+    <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
+  </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
+
+-- [[PeterThoeny]] - 08 Nov 2002
index cd8deaf..b224b05 100644 (file)
@@ -4,8 +4,22 @@ Render bullet lists in a variety of formats
 
 ## <a name="Syntax Rules"></a> Syntax Rules
 
-- Put a `%RENDERLIST{ theme="name" }%` or simply `%RENDERLIST{"name"}%` before any bullet list
+- Place a `%RENDERLIST{ <parameters> }%` before any bullet list
   - The lists can be handcrafted, generated by another Plugin, a `%TOC%`, or the result of a [[FormattedSearch]]
+- Supported parameters: <table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <td><code>"name"</code> or%BR% <code>theme="name"</code></td>
+    <td> Select a rendering theme </td>
+  </tr>
+  <tr>
+    <td><code>focus="any text"</code></td>
+    <td> Focus list on a bullet with specified text </td>
+  </tr>
+  <tr>
+    <td><code>depth="2"</code></td>
+    <td> Remove bullets with an indent greater then the depth. The depth is relative to the highlighted bullet in case <code>focus</code> is specified </td>
+  </tr>
+</table>
 - Rendering themes can be defined by `<name>_THEME` Plugin settings
   - Each theme is defined by a comma separated list containing the render type and parameters required by that render type
   - There are different render types; this initial Plugin version has **tree** and **icon** render types
@@ -14,6 +28,11 @@ Render bullet lists in a variety of formats
 - Format of the **icon** render type:
   - `Set <name>_THEME = icon, <0/1 flag to suppress/show lines of first level>, <icon width>, <icon height>, <spacer graph>, <T-line graph>, <I-line graph>, <L-line graph>, <icon image>`
   - To define new Icon themes, attach images to this Plugin topic and set the parameters accordingly
+- Focus bullet list:
+  - Search bullet list for text. If a bullet is found:
+    1. Highlight text and remove `[[][]]` links on bullet where text is found
+    2. Reduce bullet list to show only its parents and children
+  - This is useful to maintain one large bullet list with links to team pages, representing the organization of a company. Each team page can INCLUDE the bullet list with focus set to itself.
 
 ## <a name="Examples"></a> Examples
 
@@ -43,55 +62,73 @@ Render bullet lists in a variety of formats
       <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_udr.gif" width="16" /></td>
-          <td colspan="3" valign="top"><nobr> one </nobr></td>
+          <td valign="top"><nobr> one </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_udr.gif" width="16" /></td>
-          <td colspan="2" valign="top"><nobr> one.a </nobr></td>
+          <td valign="top"><nobr> one.a </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr> one.a.x </nobr></td>
+          <td valign="top"><nobr> one.a.x </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
-          <td colspan="2" valign="top"><nobr> one.b </nobr></td>
+          <td valign="top"><nobr> one.b </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_udr.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr> one.b.x </nobr></td>
+          <td valign="top"><nobr> one.b.x </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr> continue </nobr></td>
+          <td valign="top"><nobr> continue </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr> one.b.y </nobr></td>
+          <td valign="top"><nobr> one.b.y </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr> continue </nobr></td>
+          <td valign="top"><nobr> continue </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_udr.gif" width="16" /></td>
-          <td colspan="3" valign="top"><nobr> two </nobr></td>
+          <td valign="top"><nobr> two </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
-          <td colspan="3" valign="top"><nobr> three </nobr></td>
+          <td valign="top"><nobr> three </nobr></td>
         </tr>
       </table>
       <p>
@@ -139,55 +176,73 @@ Render bullet lists in a variety of formats
       <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
-          <td colspan="3" valign="top"><nobr>  one </nobr></td>
+          <td valign="top"><nobr>  one </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_udr.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
-          <td colspan="2" valign="top"><nobr>  one.a </nobr></td>
+          <td valign="top"><nobr>  one.a </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr>  one.a.x </nobr></td>
+          <td valign="top"><nobr>  one.a.x </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
-          <td colspan="2" valign="top"><nobr>  one.b </nobr></td>
+          <td valign="top"><nobr>  one.b </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_udr.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr>  one.b.x </nobr></td>
+          <td valign="top"><nobr>  one.b.x </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr>  continue </nobr></td>
+          <td valign="top"><nobr>  continue </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr>  one.b.y </nobr></td>
+          <td valign="top"><nobr>  one.b.y </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
-          <td colspan="1" valign="top"><nobr>  continue </nobr></td>
+          <td valign="top"><nobr>  continue </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
-          <td colspan="3" valign="top"><nobr>  two </nobr></td>
+          <td valign="top"><nobr>  two </nobr></td>
         </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
         <tr>
           <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
-          <td colspan="3" valign="top"><nobr>  three </nobr></td>
+          <td valign="top"><nobr>  three </nobr></td>
         </tr>
       </table>
       <p>
@@ -215,6 +270,93 @@ Render bullet lists in a variety of formats
       </p>
     </td>
   </tr>
+  <tr>
+    <td bgcolor="#EEEEEE" valign="top"><pre>
+%RENDERLIST{ "org" focus="one.b" }%
+       * one
+               * one.a
+                       * one.a.x
+               * one.b
+                       * one.b.x
+                         continue
+                       * one.b.y
+                         continue
+       * two
+       * three
+</pre></td>
+    <td bgcolor="#EEEEEE" valign="top">
+      <p>
+      </p>
+      <table border="0" cellpadding="0" cellspacing="0">
+        <tr>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
+          <td valign="top"><nobr>  one </nobr></td>
+        </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
+        <tr>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
+          <td valign="top"><nobr>  <b> one.b </b> </nobr></td>
+        </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
+        <tr>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_udr.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
+          <td valign="top"><nobr>  one.b.x </nobr></td>
+        </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
+        <tr>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ud.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
+          <td valign="top"><nobr>  continue </nobr></td>
+        </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
+        <tr>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/dot_ur.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/home.gif" width="16" /></td>
+          <td valign="top"><nobr>  one.b.y </nobr></td>
+        </tr>
+      </table>
+      <table border="0" cellpadding="0" cellspacing="0">
+        <tr>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
+          <td valign="top"><img alt="" border="0" height="16" src="http://www.dementia.org/twiki//view/empty.gif" width="16" /></td>
+          <td valign="top"><nobr>  continue </nobr></td>
+        </tr>
+      </table>
+      <p>
+      </p>
+    </td>
+    <td bgcolor="#EEEEEE" valign="top">
+      <p> %RENDERLIST{ "org" focus="one.b" }% </p>
+      <ul>
+        <li> one <ul>
+            <li> one.a <ul>
+                <li> one.a.x </li>
+              </ul>
+            </li>
+            <li> one.b <ul>
+                <li> one.b.x continue </li>
+                <li> one.b.y continue </li>
+              </ul>
+            </li>
+          </ul>
+        </li>
+        <li> two </li>
+        <li> three </li>
+      </ul>
+      <p>
+      </p>
+    </td>
+  </tr>
 </table>
 
 ## <a name="%TOPIC% Settings"></a> %TOPIC% Settings
@@ -273,13 +415,17 @@ Plugin settings are stored as preferences variables. To reference a plugin setti
   </tr>
   <tr>
     <td align="right"> Plugin Version: </td>
-    <td> 05 Dec 2003 (V1.010) </td>
+    <td> 11 Dec 2003 (V1.020) </td>
   </tr>
   <tr>
     <td align="right"> Change History: </td>
     <td>  </td>
   </tr>
   <tr>
+    <td align="right"> 11 Dec 2003: </td>
+    <td> Added <code>focus</code> and <code>depth</code> parameters </td>
+  </tr>
+  <tr>
     <td align="right"> 05 Dec 2003: </td>
     <td> Fixed rendering issue with IE, added EMAIL_THEME </td>
   </tr>
@@ -311,4 +457,4 @@ Plugin settings are stored as preferences variables. To reference a plugin setti
 
 **_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]], TWiki:Plugins/TreePlugin
 
--- TWiki:Main/PeterThoeny - 05 Dec 2003
+-- TWiki:Main/PeterThoeny - 11 Dec 2003
diff --git a/TWiki/SlideShowPlugin.mdwn b/TWiki/SlideShowPlugin.mdwn
new file mode 100644 (file)
index 0000000..bed61c9
--- /dev/null
@@ -0,0 +1,275 @@
+# <a name="Slide Show Plugin"></a><a name=" Slide Show Plugin"></a> Slide Show Plugin
+
+This Plugin converts a topic with headings into a slide show.
+
+<div>
+  <ul>
+    <li><a href="#Introduction"> Introduction</a></li>
+    <li><a href="#Syntax Rules"> Syntax Rules</a><ul>
+        <li><a href="#How to Create a Slide Show"> How to Create a Slide Show</a></li>
+        <li><a href="#How to Create Your own Slide Tem"> How to Create Your own Slide Template</a></li>
+      </ul>
+    </li>
+    <li><a href="#Example"> Example</a><ul>
+        <li><a href="#Slide 1: Silly Sample Slide Show"> Slide 1: Silly Sample Slide Show</a></li>
+        <li><a href="#Slide 2: Agenda"> Slide 2: Agenda</a></li>
+        <li><a href="#Slide 3: Silly Introduction"> Slide 3: Silly Introduction</a><ul>
+            <li><a href="#Comments"> Comments</a></li>
+          </ul>
+        </li>
+        <li><a href="#Slide 4: Silly Feature"> Slide 4: Silly Feature</a></li>
+        <li><a href="#Slide 5: Silly Conclusion"> Slide 5: Silly Conclusion</a></li>
+      </ul>
+    </li>
+    <li><a href="#%TOPIC% Global Settings"> %TOPIC% Global Settings</a></li>
+    <li><a href="#Default Slide Template"> Default Slide Template</a></li>
+    <li><a href="#Plugin Installation Instructions"> Plugin Installation Instructions</a></li>
+    <li><a href="#Plugin Info"> Plugin Info</a></li>
+  </ul>
+</div>
+
+## <a name="Introduction"></a> Introduction
+
+There is already a defacto standard for presentations, why this Plugin? This Plugin makes sense for organizations that do already have lots of content in TWiki: It is easy to create a web based presentation that contains many links to related content. The Plugin does not try to compete with the bells and whistles of the other presentation program, but the markup of TWiki and other Plugins like TWiki:Plugins/ChartPlugin, TWiki:Plugins/GaugePlugin, TWiki:Plugins/SpreadSheetPlugin, TWiki:Plugins/TWikiDrawPlugin can be used to create an appealing presentation.
+
+Any topic with headings can be converted into a slide show. Each slide starts with a `"---++"` heading. There are two modes to view a topic:
+
+- Normal topic view mode: Headings and text is shown in the usual TWiki rendering, representing the outline of the slide show. This mode is useful to print handouts.
+- Presentation mode: Each heading with text is shown as a slide; the format is based on a slide template. Navigation buttons are added to go to the "First", "Previous", and "Next" slide. Slide navigation is quick because it is done with anchor jumps to the same page.
+
+You can start the presentation by clicking on the "Start presentation" button.
+
+## <a name="Syntax Rules"></a> Syntax Rules
+
+### <a name="How to Create a Slide Show"></a> How to Create a Slide Show
+
+- Start with `%SLIDESHOWSTART%`
+  - Use the optional `template` parameter to specify your own slide template topic, e.g. `%SLIDESHOWSTART{ template="MyOwnSlideTemplate" }%`
+- Create the slides. Start each slide with a `"---++"` heading and add text like paragraphs, bullets, tables and images.
+  - **_Hint:_** Make sure to keep each slide short enough so that you do not need to scroll to see all text of a slide during the presentation.
+  - **_Note:_** You can use any heading level you like, but use the same for all slides.
+- End your slide show with `%SLIDESHOWEND%`
+
+### <a name="How to Create Your own Slide Tem"></a> How to Create Your own Slide Template
+
+To create your own template topic, copy the "Default Slide Template" section below into your own slide template topic and customize it to your needs. It can be activated as the default template in the Plugin's `TEMPLATE` setting, or per slide show with the `%SLIDESHOWSTART{ template="MyOwnSlideTemplate" }%` setting.
+
+- Use an HTML table that defines a slide. For example, create one row for the slide title, another one for the slide text.
+- These keywords can be used: <table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> Keyword </strong></th>
+    <th bgcolor="#99CCCC"><strong> What it means </strong></th>
+  </tr>
+  <tr>
+    <td><code>%SLIDETITLE%</code></td>
+    <td> The heading of the slide </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDETEXT%</code></td>
+    <td> The text of the slide </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDENUM%</code></td>
+    <td> The current slide number </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDEMAX%</code></td>
+    <td> The last slide number </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDENAV%</code></td>
+    <td> The navigation buttons for "First", "Previous", "Next" slide </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDENAVALL%</code></td>
+    <td> The navigation buttons for "First", "Previous", "Next", "Last" slide </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDENAVFIRST%</code></td>
+    <td> The navigation button for "First slide" </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDENAVPREV%</code></td>
+    <td> The navigation button for "Previous slide" </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDENAVNEXT%</code></td>
+    <td> The navigation button for "Next slide" </td>
+  </tr>
+  <tr>
+    <td><code>%SLIDENAVLAST%</code></td>
+    <td> The navigation button for "Last slide" </td>
+  </tr>
+</table>
+- Only text between `%STARTINCLUDE%` and `%STOPINCLUDE%` is used for the template.
+
+## <a name="Example"></a> Example
+
+This is a short example of a slide show. You should see a "Start presentation" button if this Plugin is installed:
+
+<a name="StartPresentation"></a> <span>[[Main/WebHome?slideshow=on;skin=print#GoSlide1]]</span>
+
+### <a name="Slide 1: Silly Sample Slide Show"></a> Slide 1: Silly Sample Slide Show
+
+%BR%
+
+<center> By TWiki:Main/PeterThoeny <p> San Jose, 17 Nov 2002 </p>
+</center>
+
+### <a name="Slide 2: Agenda"></a> Slide 2: Agenda
+
+- Silly Introduction
+- Silly Feature
+- Silly Conclusion
+
+### <a name="Slide 3: Silly Introduction"></a> Slide 3: Silly Introduction
+
+- why foo bar
+- blah blah
+
+#### <a name="Comments"></a> Comments
+
+- This text is not shown in the slide if HIDECOMMENTS is set to on.
+
+### <a name="Slide 4: Silly Feature"></a> Slide 4: Silly Feature
+
+- it's foo bar
+- more foo bar
+
+### <a name="Slide 5: Silly Conclusion"></a> Slide 5: Silly Conclusion
+
+- foo is bar
+- bar is foo
+
+This text is not part of the slide show
+
+## <a name="%TOPIC% Global Settings"></a> %TOPIC% Global Settings
+
+Plugin settings are stored as preferences variables. To reference a plugin setting write <code>**%&lt;plugin&gt;\_&lt;setting&gt;%**</code>, i.e. <code>**%SLIDESHOWPLUGIN\_SHORTDESCRIPTION%**</code>
+
+- One line description, is shown in the [[TextFormattingRules]] topic:
+  - Set SHORTDESCRIPTION = Create web based presentations based on topics with headings.
+
+- Debug plugin: (See output in `data/debug.txt`)
+  - Set DEBUG = 0
+
+- Default template for slides:
+  - Set TEMPLATE = [[SlideShowPlugin]]
+
+- Hide text starting with a `---+++ Comments` heading:
+  - Set HIDECOMMENTS = on
+
+## <a name="Default Slide Template"></a> Default Slide Template
+
+The part between the rulers defines the default format of a slide:
+
+----
+
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr bgcolor="#003399">
+    <td valign="middle" width="2%"><img alt="TWiki Slide Show" border="0" src="http://www.dementia.org/twiki//view/%WEB%/SlideShowPlugin/logo.gif" /> </td>
+    <td valign="middle"><font color="#FFFFFF" size="+3">%SLIDETITLE%</font></td>
+    <td align="right" valign="middle"> %SLIDENAVNEXT% </td>
+  </tr>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" width="100%">
+  <tr bgcolor="#FFFF99">
+    <td width="1"><img alt="" height="480" src="http://www.dementia.org/twiki//view/%WEB%/SlideShowPlugin/clearpixel.gif" width="1" /></td>
+    <td valign="top" width="719"> %BR% <font color="#003399" size="+2"> %SLIDETEXT% </font></td>
+  </tr>
+</table>
+<table border="0" cellpadding="0" cellspacing="0" width="100%">
+  <tr bgcolor="#FFFFCC">
+    <td valign="middle"> %SLIDENAVALL% </td>
+    <td align="right" valign="middle"><font color="#666666" size="-1">Slide %SLIDENUM% of %SLIDEMAX%</font></td>
+    <td align="right" valign="middle"><font color="#666666" size="-2"> COPYRIGHT © 2010 by the contributing authors </font></td>
+  </tr>
+</table>
+
+----
+
+## <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
+
+**_Note:_** You do not need to install anything on the browser to use this plugin. The following instructions are for the administrator who installs the plugin on the server where TWiki is running.
+
+- Download the ZIP file from the Plugin web (see below)
+- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> File: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+  </tr>
+  <tr>
+    <td><code><b>data/TWiki/%TOPIC%.txt</b></code></td>
+    <td> Plugin topic </td>
+  </tr>
+  <tr>
+    <td><code><b>data/TWiki/%TOPIC%.txt,v</b></code></td>
+    <td> Plugin topic repository </td>
+  </tr>
+  <tr>
+    <td><code><b>lib/TWiki/Plugins/%TOPIC%.pm</b></code></td>
+    <td> Plugin Perl module </td>
+  </tr>
+  <tr>
+    <td><code><b>pub/TWiki/*.gif</b></code></td>
+    <td> Various button image files </td>
+  </tr>
+</table>
+- Test above example if the installation was successful.
+
+## <a name="Plugin Info"></a> Plugin Info
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <td align="right"> Plugin Author: </td>
+    <td> TWiki:Main/PeterThoeny </td>
+  </tr>
+  <tr>
+    <td align="right"> Plugin Version: </td>
+    <td> 24 Dec 2002 (V1.003) </td>
+  </tr>
+  <tr>
+    <td align="right"> Change History: </td>
+    <td>  </td>
+  </tr>
+  <tr>
+    <td align="right"> 14 Dec 2002: </td>
+    <td> Added <code>%SLIDENAVALL%</code> template keyword; added HIDECOMMENTS setting </td>
+  </tr>
+  <tr>
+    <td align="right"> 23 Nov 2002: </td>
+    <td> Added <code>%SLIDENAVLAST%</code> template keyword; using print Skin for presentation mode </td>
+  </tr>
+  <tr>
+    <td align="right"> 19 Nov 2002: </td>
+    <td> Added "Start presentation" and "End presentation" buttons; added <code>%SLIDENAVFIRST%</code>, <code>%SLIDENAVPREV%</code>, <code>%SLIDENAVNEXT%</code> template keywords </td>
+  </tr>
+  <tr>
+    <td align="right"> 17 Nov 2002: </td>
+    <td> Initial version </td>
+  </tr>
+  <tr>
+    <td align="right"> CPAN Dependencies: </td>
+    <td> none </td>
+  </tr>
+  <tr>
+    <td align="right"> Other Dependencies: </td>
+    <td> none </td>
+  </tr>
+  <tr>
+    <td align="right"> Perl Version: </td>
+    <td> 5.005 </td>
+  </tr>
+  <tr>
+    <td align="right"> Plugin Home: </td>
+    <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
+  </tr>
+  <tr>
+    <td align="right"> Feedback: </td>
+    <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
+  </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
+
+-- [[PeterThoeny]] - 14 Dec 2002
diff --git a/TWiki/SmiliesPlugin.mdwn b/TWiki/SmiliesPlugin.mdwn
new file mode 100644 (file)
index 0000000..d63d382
--- /dev/null
@@ -0,0 +1,208 @@
+# <a name="The Smilies Plugin"></a> The Smilies Plugin
+
+Smilies are common in e-mail messages and bulletin board posts. They are used to convey an emotion, such as a smile :-) or a frown :-( . This plugin automatically converts certain smilies to a nice small icon.
+
+Here is the list of smilies supported by this plugin. To add others, attach new icons to this topic and tweak the table below.
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> You type </strong></th>
+    <th bgcolor="#99CCCC"><strong> You see </strong></th>
+    <th bgcolor="#99CCCC"><strong> Emotion </strong></th>
+  </tr>
+  <tr>
+    <td> :-) </td>
+    <td><img alt="smile.gif" src="http://www.dementia.org/twiki//view/smile.gif" /></td>
+    <td> "smile" </td>
+  </tr>
+  <tr>
+    <td> :) </td>
+    <td><img alt="smile.gif" src="http://www.dementia.org/twiki//view/smile.gif" /></td>
+    <td> "smile" </td>
+  </tr>
+  <tr>
+    <td> 8-) </td>
+    <td><img alt="cool.gif" src="http://www.dementia.org/twiki//view/cool.gif" /></td>
+    <td> "cool!" </td>
+  </tr>
+  <tr>
+    <td> :cool: </td>
+    <td><img alt="cool.gif" src="http://www.dementia.org/twiki//view/cool.gif" /></td>
+    <td> "cool!" </td>
+  </tr>
+  <tr>
+    <td> :-I </td>
+    <td><img alt="indifferent.gif" src="http://www.dementia.org/twiki//view/indifferent.gif" /></td>
+    <td> "indifferent" </td>
+  </tr>
+  <tr>
+    <td> :( </td>
+    <td><img alt="frown.gif" src="http://www.dementia.org/twiki//view/frown.gif" /></td>
+    <td> "frown" </td>
+  </tr>
+  <tr>
+    <td> :-( </td>
+    <td><img alt="frown.gif" src="http://www.dementia.org/twiki//view/frown.gif" /></td>
+    <td> "frown" </td>
+  </tr>
+  <tr>
+    <td> :o </td>
+    <td><img alt="redface.gif" src="http://www.dementia.org/twiki//view/redface.gif" /></td>
+    <td> "embarrassment" </td>
+  </tr>
+  <tr>
+    <td> :D </td>
+    <td><img alt="biggrin.gif" src="http://www.dementia.org/twiki//view/biggrin.gif" /></td>
+    <td> "big grin" </td>
+  </tr>
+  <tr>
+    <td> :-D </td>
+    <td><img alt="biggrin.gif" src="http://www.dementia.org/twiki//view/biggrin.gif" /></td>
+    <td> "big grin" </td>
+  </tr>
+  <tr>
+    <td> ;) </td>
+    <td><img alt="wink.gif" src="http://www.dementia.org/twiki//view/wink.gif" /></td>
+    <td> "wink" </td>
+  </tr>
+  <tr>
+    <td> ;-) </td>
+    <td><img alt="wink.gif" src="http://www.dementia.org/twiki//view/wink.gif" /></td>
+    <td> "wink" </td>
+  </tr>
+  <tr>
+    <td> :p </td>
+    <td><img alt="tongue.gif" src="http://www.dementia.org/twiki//view/tongue.gif" /></td>
+    <td> "razz (stick out tongue)" </td>
+  </tr>
+  <tr>
+    <td> :rolleyes: </td>
+    <td><img alt="rolleyes.gif" src="http://www.dementia.org/twiki//view/rolleyes.gif" /></td>
+    <td> "roll eyes (sarcastic)" </td>
+  </tr>
+  <tr>
+    <td> :mad: </td>
+    <td><img alt="mad.gif" src="http://www.dementia.org/twiki//view/mad.gif" /></td>
+    <td> "mad!" </td>
+  </tr>
+  <tr>
+    <td> :eek: </td>
+    <td><img alt="eek.gif" src="http://www.dementia.org/twiki//view/eek.gif" /></td>
+    <td> "eek!" </td>
+  </tr>
+  <tr>
+    <td> :confused: </td>
+    <td><img alt="confused.gif" src="http://www.dementia.org/twiki//view/confused.gif" /></td>
+    <td> "confused" </td>
+  </tr>
+</table>
+
+## <a name="%TOPIC% Global Settings"></a> %TOPIC% Global Settings
+
+Plugin settings are stored as preferences variables. To reference a plugin setting write <code>**%&lt;plugin&gt;\_&lt;setting&gt;%**</code>, for example, <code>**%INTERWIKIPLUGIN\_SHORTDESCRIPTION%**</code>
+
+- One line description, shown in the [[TextFormattingRules]] topic:
+  - Set SHORTDESCRIPTION = Render smilies as icons, like ` :-)` for :-) or ` :cool:` for :cool:
+
+- Set DEBUG to 1 to get debug messages in `data/debug.txt`. Default: `0`
+  - Set DEBUG = 0
+
+- The name of the topic containig your Smilies. Default: <code>**%WEB%.SmiliesPlugin**</code>
+  - #Set TOPIC = [[SmiliesPlugin]]
+
+- The way the _emoticon_ is displayed. You can use <code>**$emoticon**</code> (e.g. `:D`), <code>**$url**</code> (e.g. `%ATTACHURL%/biggrin.gif`) and <code>**$tooltip**</code> (e.g. `"big grin"`). Default: <code>**&lt;img src="$url" alt="$tooltip" /&gt;**</code>
+
+          * #Set FORMAT = <img src="$url" alt="$emoticon" />
+
+## <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
+
+- Download the ZIP file from the Plugin web (see below)
+- Unzip <code>**%TOPIC%.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> File: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+  </tr>
+  <tr>
+    <td><code><b>data/TWiki/%TOPIC%.txt</b></code></td>
+    <td> Plugin topic </td>
+  </tr>
+  <tr>
+    <td><code><b>data/TWiki/%TOPIC%.txt,v</b></code></td>
+    <td> Plugin topic repository </td>
+  </tr>
+  <tr>
+    <td><code><b>lib/TWiki/Plugins/%TOPIC%.pm</b></code></td>
+    <td> Plugin Perl module </td>
+  </tr>
+  <tr>
+    <td><code><b>pub/TWiki/%TOPIC%/*.gif</b></code></td>
+    <td> Plugin icon files </td>
+  </tr>
+</table>
+- Test if the plugin is correctly installed:
+  - You will see a series of icons on next line: <br /> :-) :) :cool: :( :o :D ;) :p :rolleyes: :mad: :eek: :confused:
+
+## <a name="Plugin Info"></a> Plugin Info
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <td align="right"> Plugin Author: </td>
+    <td>[[TWiki/AndreaSterbini]]</td>
+  </tr>
+  <tr>
+    <td align="right"> Plugin Version: </td>
+    <td> 26 Feb 2003 </td>
+  </tr>
+  <tr>
+    <td align="right"> Change History: </td>
+    <td>  </td>
+  </tr>
+  <tr>
+    <td align="right"> 26 Feb 2003: </td>
+    <td> Added "indifferent" smilie </td>
+  </tr>
+  <tr>
+    <td align="right"> 20 Oct 2002: </td>
+    <td> Fixed STDERR warning for non-initialized Plugin </td>
+  </tr>
+  <tr>
+    <td align="right"> 20 Apr 2002: </td>
+    <td> Improved performance; removed non-standard Plugin API dependencies; added standard plugin topic content -- [[TWiki/PeterThoeny]]</td>
+  </tr>
+  <tr>
+    <td align="right"> 23 Nov 2001: </td>
+    <td> Added TOPIC and FORMAT setting </td>
+  </tr>
+  <tr>
+    <td align="right"> 10 Jun 2001: </td>
+    <td> Packaged into ZIP </td>
+  </tr>
+  <tr>
+    <td align="right"> 28 Feb 2001: </td>
+    <td> Initial version </td>
+  </tr>
+  <tr>
+    <td align="right"> CPAN Dependencies: </td>
+    <td> none </td>
+  </tr>
+  <tr>
+    <td align="right"> Other Dependencies: </td>
+    <td> none </td>
+  </tr>
+  <tr>
+    <td align="right"> Perl Version: </td>
+    <td> 5.0 </td>
+  </tr>
+  <tr>
+    <td align="right"> Plugin Home: </td>
+    <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
+  </tr>
+  <tr>
+    <td align="right"> Feedback: </td>
+    <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
+  </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
+
+-- [[AndreaSterbini]] - 28 Dec 2000 <br /> -- [[PeterThoeny]] - 26 Feb 2003
diff --git a/TWiki/SpreadSheetPlugin.mdwn b/TWiki/SpreadSheetPlugin.mdwn
new file mode 100644 (file)
index 0000000..3203e6a
--- /dev/null
@@ -0,0 +1,448 @@
+# <a name="TWiki Spreadsheet Plugin"></a> TWiki Spreadsheet Plugin
+
+This Plugin adds speadsheet capabilities to %WIKITOOLNAME% topics. Formulas like <code>**%CALC\{"$INT(7/3)"\}%**</code> are evaluated at page view time. They can be placed in table cells and outside of tables.
+
+Example:
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> Region: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Sales: </strong></th>
+  </tr>
+  <tr>
+    <td> Northeast </td>
+    <td align="right"> 320 </td>
+  </tr>
+  <tr>
+    <td> Northwest </td>
+    <td align="right"> 580 </td>
+  </tr>
+  <tr>
+    <td> South </td>
+    <td align="right"> 240 </td>
+  </tr>
+  <tr>
+    <td> Europe </td>
+    <td align="right"> 610 </td>
+  </tr>
+  <tr>
+    <td> Asia </td>
+    <td align="right"> 220 </td>
+  </tr>
+  <tr>
+    <td> Total: </td>
+    <td align="right"> 1970 </td>
+  </tr>
+</table>
+
+The formula next to "Total" is <code>**%CALC\{"$SUM( $ABOVE() )"\}%**</code>. <br /> (you see the formula instead of the sum in case the Plugin is not installed or not enabled.)
+
+## <a name="Syntax Rules"></a> Syntax Rules
+
+- The formula in the <code>**%CALC\{"formula"\}%**</code> variable can contain built-in functions
+- Built-in function are of format <code>**$FUNCNAME(parameter)%**</code>
+- Built-in functions may be nested, e.g. <code>**%CALC\{"$SUM( R2:C$COL(0)..R$ROW(-1):C$COL(0) )"\}%**</code>
+- The function parameter can be text; a mathematical formula; a cell address; or a range of cell addresses
+- Multiple parameters form a list; they are separated by a comma, followed by optional space, e.g. <code>**%CALC\{"$SUM( 3, 5, 7 )"\}%**</code>
+- A table cell can be addressed as <code>**R1:C1**</code>. Table address matrix: <table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <td><code><b>R1:C1</b></code></td>
+    <td><code><b>R1:C2</b></code></td>
+    <td><code><b>R1:C3</b></code></td>
+    <td><code><b>R1:C4</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>R2:C1</b></code></td>
+    <td><code><b>R2:C2</b></code></td>
+    <td><code><b>R2:C3</b></code></td>
+    <td><code><b>R2:C4</b></code></td>
+  </tr>
+</table>
+- A table cell range is defined by two cell addresses separated by <code>**".."**</code>, e.g. "row 1 through 20, column 3" is: <code>**R1:C3..R20:C3**</code>
+- Lists can refer to values and/or table cell ranges, e.g. <code>**%CALC\{"$SUM( 3, 5, $T(R1:C7), R1:C11..R1:C15 )"\}%**</code>
+- Formulae can only reference cells in the current or preceeding row of the current table; they may not reference cells below the current table row
+- Formulae can also be placed outside of tables; they can reference cells in the preceeding table
+
+## <a name="Built-in Functions"></a> Built-in Functions
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> Function </strong></th>
+    <th bgcolor="#99CCCC"><strong> Description </strong></th>
+  </tr>
+  <tr>
+    <td><code><b>"$ABOVE()"</b></code></td>
+    <td> The address range of cells above the current cell </td>
+  </tr>
+  <tr>
+    <td><code><b>"$AVERAGE(list)"</b></code></td>
+    <td> The average of the content of a range of cells. Example: To get the average of column 5 excluding the title row, write in the last row: <code><b>%CALC{"$AVERAGE( R2:C5..R$ROW(-1):C5 )"}%</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$CHAR(number)"</b></code></td>
+    <td> The ASCII character represented by number. Example: <code><b>%CALC{"$CHAR(97)"}%</b></code> returns <code><b>a</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$CODE(text)"</b></code></td>
+    <td> The ASCII numeric value of the first character in text. Example: <code><b>%CALC{"$CODE(abc)"}%</b></code> returns <code><b>97</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$COLUMN(offset)"</b></code></td>
+    <td> The current column number with an optional offset </td>
+  </tr>
+  <tr>
+    <td><code><b>"$COUNTITEMS(list)"</b></code></td>
+    <td> The count of individual items in a list. Example: To count the items of all cells above the current cell, write <code><b>%CALC{"$COUNTITEMS( $ABOVE() )"}%</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$COUNTSTR(list, str)"</b></code></td>
+    <td> Counts the number of cells in a list equal to a given string (if str is specified), or counts the number of non empty cells in a list. Example: To count the number of non empty cells above the current cell, write <code><b>%CALC{"$COUNTSTR( $ABOVE() )"}%</b></code>; to count the number of cells equal to <code><b>DONE</b></code>, write <code><b>%CALC{"$COUNTSTR( $ABOVE(), DONE )"}%</b></code>; </td>
+  </tr>
+  <tr>
+    <td><code><b>"$DEF(list)"</b></code></td>
+    <td> Returns the first list item or cell reference that is not empty. Example: <code><b>%CALC{"$DEF( R1:C1..R1:C3 )"}%</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$EVAL(formula)"</b></code></td>
+    <td> Evaluates a simple formula. Only addition, substraction, multiplication, division and modulus of numbers are supported. Any nesting is permitted. Example: <code><b>%CALC{"$EVAL( (5 * 3) / 2 + 1.1 )"}%</b></code> returns <code><b>8.6</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$EXACT(text1, text2)"</b></code></td>
+    <td> Compares two text strings and returns <code><b>1</b></code> if they are exactly the same, or <code><b>0</b></code> if not. Example: <code><b>%CALC{"$EXACT( foo, Foo )"}%</b></code> returns <code><b>0</b></code>; <code><b>%CALC{"$EXACT( foo, $LOWER(Foo) )"}%</b></code> returns <code><b>1</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$FIND(search_string, text, start_index)"</b></code></td>
+    <td> Finds one text string <code>search_string</code>, within another text string <code>text</code>, and returns the number of the starting position of <code>search_string</code>, from the first character of <code>text</code>. This search is case sensitive and is not a regular expression search; use <code>$SEARCH()</code> for regular expression searching. Starting position is 1; an empty string is returned if nothing is matched. Examples: %BR% <code><b>%CALC{"$FIND(f, fluffy)"}%</b></code> returns <code><b>1</b></code> %BR% <code><b>%CALC{"$FIND(f, fluffy, 2)"}%</b></code> returns <code><b>4</b></code> %BR% <code><b>%CALC{"$FIND(@, fluffy, 1)"}%</b></code> returns an empty string </td>
+  </tr>
+  <tr>
+    <td><code><b>"$FORMAT(type, prec, number)"</b></code></td>
+    <td> Formats a number to a certain type and precision. Types with examples:<br />  - <code><b>%CALC{"$FORMAT( COMMA, 2, 12345.6789 )"}%</b></code> returns <code><b>12,345.68</b></code><br />  - <code><b>%CALC{"$FORMAT( DOLLAR, 2, 12345.67 )"}%</b></code> returns <code><b>$12,345.68</b></code><br />  - <code><b>%CALC{"$FORMAT( NUMBER, 1, 12345.67 )"}%</b></code> returns <code><b>12345.7</b></code><br />  - <code><b>%CALC{"$FORMAT( PERCENT, 1, 0.1234567 )"}%</b></code> returns <code><b>12.3%</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$FORMATTIME( serial, text )"</b></code></td>
+    <td> Convert a serialized date into a date string; the following variables in text are expanded: <code>$second</code> (seconds, 00..59); <code>$minute</code> (minutes, 00..59); <code>$hour</code> (hours, 00..23); <code>$day</code> (day of month, 01..31); <code>$month</code> (month, 01..12); <code>$mon</code> (month in text format, Jan..Dec); <code>$year</code> (4 digit year, 1999); <code>$ye</code> (2 digit year, 99), <code>$wd</code> (day number of the week, 1 for Sunday, 2 for Monday, etc), <code>$wday</code> (day of the week, Sun..Sat), <code>$weekday</code> (day of the week, Sunday..Saturday), <code>$yearday</code> (day of the year, 1..365, or 1..366 in leap years). Date is assumed to be server time; add <code>GMT</code> to indicate Greenwich time zone. See also <code>$TIME()</code>, <code>$TODAY()</code>, <code>$FORMATGMTIME()</code>, <code>$TIMEDIFF()</code>. Example: <code><b>%CALC{"$FORMATTIME( 0, $year/$month/$day GMT )"}%</b></code> returns <code><b>1970/01/01 GMT</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$FORMATGMTIME( serial, text )"</b></code></td>
+    <td> Convert a serialized date into a date string in Greenwich time zone. Same variables expansion as in <code>$FORMATTIME()</code>. Example: <code><b>%CALC{"$FORMATGMTIME( 1041379200, $day $mon $year )"}%</b></code> returns <code><b>01 Jan 2003</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$GET(name)"</b></code></td>
+    <td> Get the value of a previously set variable. Specify the variable name (alphanumeric characters and underscores). An empty string is returned if the variable does not exist. Use <code>$SET()</code> to set a variable first. Unlike table ranges, variables live for the time of the page view and persist across tables, i.e. you can use it to summarize results across several tables. See also <code>$SET()</code>. Example: <code><b>%CALC{"$GET( my_total )"}%</b></code> returns the value of the <code>my_total</code> variable </td>
+  </tr>
+  <tr>
+    <td><code><b>"$IF(condition, value if true, value if 0)"</b></code></td>
+    <td> Returns one value if a condition is met, and another value if not. The condition can be a number (where <code><b>0</b></code> means condition not met), or two numbers with a comparison operator <code><b>&lt;</b></code> (less then), <code><b>&lt;=</b></code> (less then or equal), <code><b>==</b></code> (equal), <code><b>!=</b></code> (not equal), <code><b>&gt;=</b></code> (greater then or equal), <code><b>&gt;=</b></code> (greater then). Example: <code><b>%CALC{"$IF( $T(R1:C5) &gt; 1000, Over Budget, OK )"}%</b></code> returns <code><b>Over Budget</b></code> if value in R1:C5 is over 1000, <code><b>OK</b></code> if not </td>
+  </tr>
+  <tr>
+    <td><code><b>"$INT(formula)"</b></code></td>
+    <td> Evaluates a simple formula and rounds the result down to the nearest integer. Example: <code><b>%CALC{"$INT( 10 / 4 )"}%</b></code> returns <code><b>2</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$LEFT()"</b></code></td>
+    <td> The address range of cells to the left of the current cell </td>
+  </tr>
+  <tr>
+    <td><code><b>"$LENGTH(text)"</b></code></td>
+    <td> The length in bytes of text. Example: <code><b>%CALC{"$LENGTH(abcd)"}%</b></code> returns <code><b>4</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$LOWER(text)"</b></code></td>
+    <td> The lower case string of a text. Example: <code><b>%CALC{"$LOWER( $T(R1:C5) )"}%</b></code> returns the lower case string of the text in cell <code><b>R1:C5</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$MAX(list)"</b></code></td>
+    <td> The biggest value of a list or range of cells. Example: To find the biggest number to the left of the current cell, write: <code><b>%CALC{"$MAX( $LEFT() )"}%</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$MEDIAN(list)"</b></code></td>
+    <td> The median of a list or range of cells. Example: <code><b>%CALC{"$MEDIAN( 3, 9, 4, 5 )"}%</b></code> returns <code><b>4.5</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$MIN(list)"</b></code></td>
+    <td> The smallest value of a list or range of cells. Example: <code><b>%CALC{"$MIN( 15, 3, 28 )"}%</b></code> returns <code><b>3</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$MULT(list)"</b></code></td>
+    <td> The product of a list or range of cells. Example: to calculate the product of the cells to the left of the current one use <code><b>%CALC{"$MULT($LEFT())"}%</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$NOP(text)"</b></code></td>
+    <td> A no-operation. Allows one to defy the order of Plugin execution. For example, it will allow preprossing to be done before <code>%SEARCH{}%</code> is evaluated. Use <code>$per</code> to escape '%'. </td>
+  </tr>
+  <tr>
+    <td><code><b>"$REPLACE(text, start_num, num_chars, new_text)"</b></code></td>
+    <td> Replaces part of text string <code>text</code>, based on the starting position <code>start_num</code>, and the number of characters to replace <code>num_chars</code>. The characters are replaced with <code>new_text</code>. Starting position is 1; use a negative <code>start_num</code> to count from the end of the text. See also <code>$SUBSTITUTE()</code>, <code>$TRANSLATE()</code>. Example: %BR% <code><b>%CALC{"$REPLACE(abcdefghijk,6,5,*)"}%</b></code> returns <code><b>abcde*k</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$RIGHT()"</b></code></td>
+    <td> The address range of cells to the right of the current cell </td>
+  </tr>
+  <tr>
+    <td><code><b>"$ROUND(formula)"</b></code></td>
+    <td> Evaluates a simple formula and rounds the result up or down to the nearest integer. Example: <code><b>%CALC{"$INT( 10 / 6 )"}%</b></code> returns <code><b>2</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$ROW(offset)"</b></code></td>
+    <td> The current row number with an offset. Example: To get the number of rows excluding table heading ( first row) and summary row (last row you are in), write: <code><b>%CALC{"$ROW(-2)"}%</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$SEARCH(search_string, text, start_index)"</b></code></td>
+    <td> Finds one text string <code>search_string</code>, within another text string <code>text</code>, and returns the number of the starting position of <code>search_string</code>, from the first character of <code>text</code>. This search a [[TWiki/RegularExpression]] search; use <code>$FIND()</code> for non-regular expression searching. Starting position is 1; an empty string is returned if nothing is matched. Examples: %BR% <code><b>%CALC{"$SEARCH([uy], fluffy)"}%</b></code> returns <code><b>3</b></code> %BR% <code><b>%CALC{"$SEARCH([uy], fluffy, 3)"}%</b></code> returns <code><b>6</b></code> %BR% <code><b>%CALC{"$SEARCH([abc], fluffy,)"}%</b></code> returns an empty string </td>
+  </tr>
+  <tr>
+    <td><code><b>"$SET(name, value)"</b></code></td>
+    <td> Set a variable for later use. Specify the variable name (alphanumeric characters and underscores) and the value. The value may contain a formula; formulas are evaluated before the variable assignment. This function returns no output. Use <code>$GET()</code> to retrieve variables. Unlike table ranges, variables live for the time of the page view and persist across tables, i.e. you can use it to summarize results across several tables. See also <code>$GET()</code>. Example: <code><b>%CALC{"$SET( my_total, $SUM($ABOVE()) )"}%</b></code> sets the <code>my_total</code> variable to the sum of all table cells located above the current cell and returns an empty string </td>
+  </tr>
+  <tr>
+    <td><code><b>"$SUBSTITUTE(text, old, new, instance, option)"</b></code></td>
+    <td> Substitutes <code>new</code> text for <code>old</code> text in a <code>text</code> string. <code>instance</code> specifies which occurance of <code>old</code> you want to replace. If you specify <code>instance</code>, only that instance is replaced. Otherwise, every occurance is changed to the new text. A literal search is performed by default; a [[TWiki/RegularExpression]] search if the <code>option</code> is set to <code><b>r</b></code>. See also <code>$REPLACE()</code>, <code>$TRANSLATE()</code>. Examples: %BR% <code><b>%CALC{"$SUBSTITUTE(Good morning, morning, day)"}%</b></code> returns <code><b>Good day</b></code> %BR% <code><b>%CALC{"$SUBSTITUTE(Q2-2002,2,3)"}%</b></code> returns <code><b>Q3-3003</b></code> %BR% <code><b>%CALC{"$SUBSTITUTE(Q2-2002,2,3,3)"}%</b></code> returns <code><b>Q2-2003</b></code> %BR% <code><b>%CALC{"$SUBSTITUTE(abc123def,[0-9],9,,r)"}%</b></code> returns <code><b>abc999def</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$SUM(list)"</b></code></td>
+    <td> The sum of a list or range of cells. Example: To sum up column 5 excluding the title row, write: <code><b>%CALC{"$SUM( R2:C5..R$ROW(-1):C5 )"}%</b></code> in the last row; or simply <code><b>%CALC{"$SUM( $ABOVE() )"}%</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$SUMDAYS(list)"</b></code></td>
+    <td> The total number of days in a list or range of cells containing numbers of hours, days or weeks. The default unit is days; units are indicated by a <code><b>h</b></code>, <code><b>hours</b></code>, <code><b>d</b></code>, <code><b>days</b></code>, <code><b>w</b></code>, <code><b>weeks</b></code> suffix. One week is assumed to have 5 working days, one day 8 hours. Example: <code><b>%CALC{"$SUMDAYS( 2w, 1, 2d, 4h )"}%</b></code> returns <code><b>13.5</b></code>, the evaluation of <code>(2*5 + 1 + 2 + 4/8)</code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$SUMPRODUCT(list, list, ...)"</b></code></td>
+    <td> The scalar product on ranges of cells. Example: <code><b>%CALC{"$SUM( R2:C1..R4:C1, R2:C5..R4:C5 )"}%</b></code> evaluates and returns <code><b>($T(R2:C1) * $T(R2:C5) + $T(R3:C1) * $T(R3:C5) + $T(R4:C1) * $T(R4:C5))</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$T(address)"</b></code></td>
+    <td> The content of a cell. Example: <code><b>%CALC{"$T(R1:C5)"}%</b></code> returns the text in cell <code><b>R1:C5</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$TRANSLATE(text, from, to)"</b></code></td>
+    <td> Translate text from a set of characters to another set, one character by one. The <code>text</code> may contain commas; the last two comma separated parameters are required. For <code>from</code> and <code>to</code> parameters, you can write <code>$comma</code> to escape comma, <code>$sp</code> to escape space. See also <code>$REPLACE()</code>, <code>$SUBSTITUTE()</code>. Examples: %BR% <code><b>%CALC{"$TRANSLATE(boom,bm,cl)"}%</b></code> returns <code><b>cool</b></code> %BR% <code><b>%CALC{"$TRANSLATE(one, two,$comma,;)"}%</b></code> returns <code><b>one; two</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$TIME(text)"</b></code></td>
+    <td> Converts a date string into a serialized date number (seconds since the Epoch, e.g. midnight, 01 Jan 1970). Current time is taken if the date string is empty. Supported date formats: <code>31 Dec 2009</code>; <code>31 Dec 2009 GMT</code>; <code>31 Dec 09</code>; <code>31-Dec-2009</code>; <code>31/Dec/2009</code>; <code>2009/12/31</code>; <code>2009-12-31</code>; <code>2009/12/31</code>; <code>2009/12/31 23:59</code>; <code>2009/12/31 - 23:59</code>; <code>2009-12-31-23-59</code>; <code>2009/12/31 - 23:59:59</code>; <code>2009.12.31.23.59.59</code>. Date is assumed to be server time; add <code>GMT</code> to indicate Greenwich time zone. See also <code>$TODAY()</code>, <code>$FORMATTIME()</code>, <code>$FORMATGMTIME()</code>, <code>$TIMEDIFF()</code>. Example: <code><b>%CALC{"$TIME( 2003/10/14 GMT )"}%</b></code> returns <code><b>1066089600</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$TIMEADD( serial, value, unit )"</b></code></td>
+    <td> Add a value to a serialized date. The unit is seconds if not specified; unit can be <code>second</code>, <code>minute</code>, <code>hour</code>, <code>day</code>, <code>week</code>, <code>month</code>, <code>year</code>. Note: An approximation is used for month and year calculations. See also <code>$TIME()</code>, <code>$TIMEDIFF()</code>, <code>$TODAY()</code>, <code>$FORMATTIME()</code>. Example: <code><b>%CALC{"$TIMEADD( $TIME(), 2, week )"}%</b></code> returns the serialized date two weeks from now </td>
+  </tr>
+  <tr>
+    <td><code><b>"$TIMEDIFF( serial_1, serial_2, unit )"</b></code></td>
+    <td> Time difference between two serialized dates. The unit is seconds if not specified; unit can be specified as in <code>$TIMEADD()</code>. Note: An approximation is used for month and year calculations. Use <code>$FORMAT()</code> or <code>$INT()</code> to format real numbers. See also <code>$TIME()</code>, <code>$TIMEADD()</code>, <code>$TODAY()</code>, <code>$FORMATTIME()</code>. Example: <code><b>%CALC{"$TIMEDIFF( $TIME(), $EVAL($TIME()+90), minute )"}%</b></code> returns <code><b>1.5</b></code></td>
+  </tr>
+  <tr>
+    <td><code><b>"$TODAY()"</b></code></td>
+    <td> Get the serialized date of today at midnight GMT. The related <code>$TIME()</code> returns the serialized date of today at the current time, e.g. it includes the number of seconds since midnight GMT. See also <code>$FORMATTIME()</code>, <code>$FORMATGMTIME()</code>, <code>$TIMEDIFF()</code>. Example: <code><b>%CALC{"$TODAY()"}%</b></code> returns the number of seconds since Epoch </td>
+  </tr>
+  <tr>
+    <td><code><b>"$TRIM(text)"</b></code></td>
+    <td> Removes all spaces from text except for single spaces between words. Example: <code><b>%CALC{"$TRIM( eat  spaces  )"}%</b></code> returns <code><b>eat spaces</b></code>. </td>
+  </tr>
+  <tr>
+    <td><code><b>"$UPPER(text)"</b></code></td>
+    <td> The upper case string of a text. Example: <code><b>%CALC{"$UPPER( $T(R1:C5) )"}%</b></code> returns the upper case string of the text in cell <code><b>R1:C5</b></code></td>
+  </tr>
+</table>
+
+## <a name="Bug Tracking Example"></a> Bug Tracking Example
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> Bug#: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Priority: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Subject: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Status: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Days to fix </strong></th>
+  </tr>
+  <tr>
+    <td> Bug:1231 </td>
+    <td> Low </td>
+    <td> File Open ... </td>
+    <td> Open </td>
+    <td align="right"> 3 </td>
+  </tr>
+  <tr>
+    <td> Bug:1232 </td>
+    <td> High </td>
+    <td> Memory Window ... </td>
+    <td> Fixed </td>
+    <td align="right"> 2 </td>
+  </tr>
+  <tr>
+    <td> Bug:1233 </td>
+    <td> Medium </td>
+    <td> Usability issue ... </td>
+    <td> Assigned </td>
+    <td align="right"> 5 </td>
+  </tr>
+  <tr>
+    <td> Bug:1234 </td>
+    <td> High </td>
+    <td> No arrange ... </td>
+    <td> Fixed </td>
+    <td align="right"> 1 </td>
+  </tr>
+  <tr>
+    <td> Total: 4 </td>
+    <td> High: 2<br /> Low: 1<br /> Medium: 1 </td>
+    <td> . </td>
+    <td> Assigned: 1<br /> Fixed: 2<br /> Open: 1 </td>
+    <td align="right"> Total: 11 </td>
+  </tr>
+</table>
+
+The last row is defined as:
+
+    | Total: %CALC{"$ROW(-2)"}% \
+      | %CALC{"$COUNTITEMS( R2:C$COLUMN()..R$ROW(-1):C$COLUMN() )"}% | . \
+      | %CALC{"$COUNTITEMS( R2:C$COLUMN()..R$ROW(-1):C$COLUMN() )"}% \
+      |  Total: %CALC{"$SUM( R2:C$COLUMN()..R$ROW(-1):C$COLUMN() )"}% |
+
+Above table is created manually. Another Plugin could build the table dynamically, e.g. by pulling data out of a bug tracking system. The Spreadsheet Plugin can be used to display table data statistics.
+
+## <a name="%TOPIC% Settings"></a> %TOPIC% Settings
+
+Plugin settings are stored as preferences variables. To reference a plugin setting write <code>**%&lt;plugin&gt;\_&lt;setting&gt;%**</code>, i.e. <code>**%SPREADSHEETPLUGIN\_SHORTDESCRIPTION%**</code>
+
+- One line description, is shown in the [[TextFormattingRules]] topic:
+  - Set SHORTDESCRIPTION = Add spreadsheet calculation like `"$SUM( $ABOVE() )"` to tables located in %WIKITOOLNAME% topics.
+
+- Debug plugin: (See output in `data/debug.txt`)
+  - Set DEBUG = 0
+
+- Do not handle `%CALC{}%` tag in included topic while including topic: (default: 1)
+  - Set SKIPINCLUDE = 1
+
+## <a name="Plugin Installation Instructions"></a> Plugin Installation Instructions
+
+**_Note:_** You do not need to install anything on the browser to use this plugin. Below installation instructions are for the administrator who needs to install this plugin on the TWiki server.
+
+- Download the ZIP file from the %TOPIC% home
+- Unzip <code>**SpreadSheetPlugin.zip**</code> in your twiki installation directory. Content: <table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <th bgcolor="#99CCCC"><strong> File: </strong></th>
+    <th bgcolor="#99CCCC"><strong> Description: </strong></th>
+  </tr>
+  <tr>
+    <td><code><b>data/TWiki/%TOPIC%.txt</b></code></td>
+    <td> Plugin topic </td>
+  </tr>
+  <tr>
+    <td><code><b>data/TWiki/%TOPIC%.txt,v</b></code></td>
+    <td> Plugin topic repository </td>
+  </tr>
+  <tr>
+    <td><code><b>lib/TWiki/Plugins/%TOPIC%.pm</b></code></td>
+    <td> Plugin Perl module </td>
+  </tr>
+</table>
+- Test if the "Total" in the first table in this topic is correct.
+
+## <a name="Plugin Info"></a> Plugin Info
+
+<table border="1" cellpadding="0" cellspacing="0">
+  <tr>
+    <td align="right"> Plugin Author: </td>
+    <td> TWiki:Main/PeterThoeny </td>
+  </tr>
+  <tr>
+    <td align="right"> Plugin Version: </td>
+    <td> 24 Oct 2003 </td>
+  </tr>
+  <tr>
+    <td align="right"> Change History: </td>
+    <td>  </td>
+  </tr>
+  <tr>
+    <td align="right"> 24 Oct 2003: </td>
+    <td> Added $SET(), $GET(), $MEDIAN(); added $SUMPRODUCT(), inspired by TWiki:Main/RobertWithrow; added $SUMDAYS(), contributed by TWiki:Main/SvenDowideit </td>
+  </tr>
+  <tr>
+    <td align="right"> 21 Oct 2003: </td>
+    <td> Added support for lists <code>(1, 2, 3)</code> and lists of table ranges <code>(R1:C1..R1:C5, R3:C1..R3:C5)</code> for all functions that accept a table range; added $TIMEADD(); in $TIMEDIFF() added week unit; in $FORMATTIME() changed $weekday to $wd and added $wday and $weekday </td>
+  </tr>
+  <tr>
+    <td align="right"> 14 Oct 2003: </td>
+    <td> Added $TIME(), $TODAY(), $FORMATTIME(), $FORMATGMTIME(), $TIMEDIFF() </td>
+  </tr>
+  <tr>
+    <td align="right"> 13 Oct 2003: </td>
+    <td> Added $MULT(), contributed by TWiki:Main/GerritJanBaarda </td>
+  </tr>
+  <tr>
+    <td align="right"> 30 Jul 2003: </td>
+    <td> Added $TRANSLATE() </td>
+  </tr>
+  <tr>
+    <td align="right"> 19 Jul 2003: </td>
+    <td> Added $FIND(), $NOP(), $REPLACE(), $SEARCH(), $SUBSTITUTE(), contributed by TWiki:Main/PaulineCheung </td>
+  </tr>
+  <tr>
+    <td align="right"> 19 Apr 2003: </td>
+    <td> Added $COUNTSTR(), $EXACT(), $IF(), $ROUND(), $TRIM(); added $FORMAT(), contributed by TWiki:Main/JimStraus; support <code>%</code> modulus operator in $EVAL, $INT, and $ROUND; fixed bug in $DEF </td>
+  </tr>
+  <tr>
+    <td align="right"> 07 Jun 2002: </td>
+    <td> Added $DEF(), contributed by TWiki:Main/MartinFuzzey; allow values with HTML formatting like <code>&lt;u&gt;102&lt;/u&gt;</code>, suggested by TWiki:Main/GladeDiviney; added SKIPINCLUDE setting </td>
+  </tr>
+  <tr>
+    <td align="right"> 12 Mar 2002: </td>
+    <td> Support for multiple functions per nesting level </td>
+  </tr>
+  <tr>
+    <td align="right"> 15 Jan 2002: </td>
+    <td> Added $CHAR(), $CODE() and $LENGTH() </td>
+  </tr>
+  <tr>
+    <td align="right"> 12 Nov 2001: </td>
+    <td> Added $RIGHT() </td>
+  </tr>
+  <tr>
+    <td align="right"> 12 Aug 2001: </td>
+    <td> Fixed bug of disappearing multi-column cells </td>
+  </tr>
+  <tr>
+    <td align="right"> 19 Jul 2001: </td>
+    <td> Fixed incorrect $SUM calculation of cell with value <code>0</code></td>
+  </tr>
+  <tr>
+    <td align="right"> 14 Jul 2001: </td>
+    <td> Changed to plug &amp; play </td>
+  </tr>
+  <tr>
+    <td align="right"> 01 Jun 2001: </td>
+    <td> Fixed insecure dependencies for $MIN and $MAX </td>
+  </tr>
+  <tr>
+    <td align="right"> 16 Apr 2001: </td>
+    <td> Fixed div by 0 bug in $AVERAGE </td>
+  </tr>
+  <tr>
+    <td align="right"> 17 Mar 2001: </td>
+    <td> Initial version </td>
+  </tr>
+  <tr>
+    <td align="right"> CPAN Dependencies: </td>
+    <td> none </td>
+  </tr>
+  <tr>
+    <td align="right"> Other Dependencies: </td>
+    <td> none </td>
+  </tr>
+  <tr>
+    <td align="right"> Perl Version: </td>
+    <td> 5.000 and up </td>
+  </tr>
+  <tr>
+    <td align="right"> Plugin Home: </td>
+    <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%</a></td>
+  </tr>
+  <tr>
+    <td align="right"> Feedback: </td>
+    <td><a href="http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev" target="_top">http://TWiki.org/cgi-bin/view/Plugins/%TOPIC%Dev</a></td>
+  </tr>
+</table>
+
+**_Related Topics:_** [[TWikiPreferences]], [[TWikiPlugins]]
+
+-- TWiki:Main/PeterThoeny - 24 Oct 2003
index 6001306..c18ca6b 100644 (file)
@@ -5,7 +5,7 @@
         <li><a href="#Preinstalled Plugins"> Preinstalled Plugins</a></li>
         <li><a href="#Installing Plugins"> Installing Plugins</a><ul>
             <li><a href="#On-Site Pretesting"> On-Site Pretesting</a></li>
-            <li><a href="#A Note on Performance"> A Note on Performance</a></li>
+            <li><a href="#A Note on Plugin Performance"> A Note on Plugin Performance</a></li>
           </ul>
         </li>
         <li><a href="#Managing Plugins"> Managing Plugins</a><ul>
@@ -16,6 +16,7 @@
         <li><a href="#The TWiki Plugin API"> The TWiki Plugin API</a><ul>
             <li><a href="#Available Core Functions"> Available Core Functions</a></li>
             <li><a href="#Predefined Hooks"> Predefined Hooks</a></li>
+            <li><a href="#Hints on Writing Fast Plugins"> Hints on Writing Fast Plugins</a></li>
             <li><a href="#Plugin Version Detection"> Plugin Version Detection</a></li>
           </ul>
         </li>
@@ -49,13 +50,17 @@ Everything to do with TWiki Plugins - demos, new releases, downloads, developmen
 
 ## <a name="Preinstalled Plugins"></a> Preinstalled Plugins
 
-TWiki comes with three Plugins as part of the standard installation.
+TWiki comes with a set of Plugins as part of the standard installation.
 
-- **[[DefaultPlugin]]** optionally handles some legacy variables from older versions of TWiki. You can control this option from [[TWikiPreferences]]. (Perl programmers can also [[add rules|Main/WebHome#DefaultPluginAlt]] for simple custom processing.)
-
-- **[[EmptyPlugin]]** is a fully functional module, minus active code; it does nothing and serves as a template for new Plugin development.
-
-- **[[InterwikiPlugin]]** is preinstalled but can be disabled or removed. Use it for shorthand linking to remote sites, ex: `TWiki:Plugins` expands to TWiki:Plugins on TWiki.org. You can edit the predefined set of of Wiki-related sites, and add your own.
+- [[DefaultPlugin]]: Optionally handles some legacy variables from older versions of TWiki. You can control this option from [[TWikiPreferences]]. (Perl programmers can also [[add rules|Main/WebHome#DefaultPluginAlt]] for simple custom processing.)
+- [[EmptyPlugin]]: Is a fully functional module, minus active code; it does nothing and serves as a template for new Plugin development.
+- [[InterwikiPlugin]]: Use it for shorthand linking to remote sites, ex: `TWiki:Plugins` expands to TWiki:Plugins on TWiki.org. You can edit the predefined set of of Wiki-related sites, and add your own.
+- [[EditTablePlugin]]: %EDITTABLEPLUGIN\_SHORTDESCRIPTION%
+- [[RenderListPlugin]]: %RENDERLISTPLUGIN\_SHORTDESCRIPTION%
+- [[SlideShowPlugin]]: %SLIDESHOWPLUGIN\_SHORTDESCRIPTION%
+- [[SmiliesPlugin]]: %SMILIESPLUGIN\_SHORTDESCRIPTION%
+- [[SpreadSheetPlugin]]: %SPREADSHEETPLUGIN\_SHORTDESCRIPTION%
+- [[TablePlugin]]: %TABLEPLUGIN\_SHORTDESCRIPTION%
 
 <a name="InstallPlugin"></a>
 
@@ -91,9 +96,9 @@ To test new Plugins on your installation before making them public, you may want
 
 - **Method 2:** List the Plugin being tested in the `DISABLEDPLUGINS` variable in [[TWikiPreferences]]. Redefine the `DISABLEDPLUGINS` variable in the `Sandbox` web and do the testing there.
 
-### <a name="A Note on Performance"></a> A Note on Performance
+### <a name="A Note on Plugin Performance"></a> A Note on Plugin Performance
 
-The performance of the system depends on the number of Plugins installed and on the Plugin implementation. Some Plugins impose no measurable performance decrease, some do. For example, `outsidePREHandler` is an expensive callback function, or a Plugin might use many Perl libraries that needs to be initialized with each page view (unless you run mod\_perl). It is recommended to measure the performance with and without a new Plugin. Example for Unix:%BR% `time wget -qO /dev/null http://www.dementia.org/twiki//view/TWiki/AbcPlugin`
+The performance of the system depends on the number of Plugins installed and on the Plugin implementation. Some Plugins impose no measurable performance decrease, some do. For example, `outsidePREHandler` is an expensive callback function, or a Plugin might use many Perl libraries that need to be initialized with each page view (unless you run mod\_perl). It is recommended to measure the performance with and without a new Plugin. Example for Unix:%BR% `time wget -qO /dev/null http://www.dementia.org/twiki//view/TWiki/AbcPlugin`
 
 In case you need to install an "expensive" Plugin and you need its functionality only in one web you can place the Plugin topic into that web. TWiki will initialize the Plugin only if the Plugin topic is found (which won't be the case for other webs.)
 
@@ -162,6 +167,20 @@ In addition to TWiki core functions, Plugins can use **predefined hooks**, or **
 - All but the initPlugin are disabled. To enable a call back, remove `DISABLE_` from the function name.
 - For best performance, enable only the functions you really need. NOTE: `outsidePREHandler` and `insidePREHandler` are particularly expensive.
 
+Most Plugins use either the `commonTagsHandler` or `startRenderingHandler` for rendering tasks:
+
+- `commonTagsHandler:` Use it to expand `%XYZPLUGIN%` and `%XYZPLUGIN{...}%` variables
+- `startRenderingHandler:` Use it for your own rendering rules or to overload TWiki's internal rendering like `[[links]]`
+
+TWiki:Codev/StepByStepRenderingOrder helps you decide which rendering handler to use.
+
+### <a name="Hints on Writing Fast Plugins"></a> Hints on Writing Fast Plugins
+
+- Delay the Plugin initialization to the actual function which is handling the tag. This way all the expensive initialization is done only when needed.
+- For example, use an `eval` block like:%BR% `eval { require IPC::Run }` %BR% `return "<font color=\"red\">SamplePlugin: Can't load required modules ($@)</font>" if $@;`
+- You could return errors as strings to show what happened
+- You can use a flag to avoid running the initialization twice
+
 ### <a name="Plugin Version Detection"></a> Plugin Version Detection
 
 To eliminate the incompatibility problems bound to arise from active open Plugin development, a Plugin versioning system and an API `GetVersion` detection routine are provided for automatic compatibility checking.
@@ -269,4 +288,4 @@ You can release your tested, packaged Plugin to the TWiki community through the
 2. **Attach** the distribution zip file to the topic, ex: `MyFirstPlugin.zip`
 3. **Link** from the doc page to a new, blank page named after the Plugin, and ending in `Dev`, ex: `MyFirstPluginDev`. This is the discussion page for future development. (User support for Plugins is handled in TWiki:Support.)
 
--- [[AndreaSterbini]] - 29 May 2001 <br /> -- [[PeterThoeny]] - 29 Jan 2003 <br /> -- [[MikeMannix]] - 03 Dec 2001
+-- [[AndreaSterbini]] - 29 May 2001 <br /> -- [[PeterThoeny]] - 11 Dec 2003 <br /> -- [[MikeMannix]] - 03 Dec 2001
index 296ef72..e81f523 100644 (file)
@@ -134,7 +134,7 @@ The following are **_site-level_** settings that affect all users in all webs on
 ## <a name="Plugins Settings"></a> Plugins Settings
 
 - [[TWikiPlugins]] configuration: All plugin modules that exist in the `lib/TWiki/Plugins` directory are activated automatically unless disabled by DISABLEDPLUGINS. You can optionally list the installed plugins in INSTALLEDPLUGINS. This is useful to define the sequence of plugin execution, or to specify other webs then the TWiki web for the plugin topics. Specify plugins as a comma separated list of topics.
-  - Set INSTALLEDPLUGINS = [[DefaultPlugin]]
+  - Set INSTALLEDPLUGINS = [[DefaultPlugin]], [[SpreadSheetPlugin]]
   - Set DISABLEDPLUGINS = [[EmptyPlugin]]
   - Currently activated plugins: [[SpreadSheetPlugin]], [[CommentPlugin]], [[EditTablePlugin]], [[InterwikiPlugin]], [[PreferencesPlugin]], [[SlideShowPlugin]], [[SmiliesPlugin]], [[TablePlugin]], [[TwistyPlugin]]
   - %T% **NOTE:** You can enable/disable all plugins with the <code>**$disableAllPlugins**</code> flag in the <code>**lib/TWiki.cfg**</code> file.