PageRenderTime 46ms CodeModel.GetById 12ms RepoModel.GetById 1ms app.codeStats 0ms

/bundles/plugins-trunk/XInsert/xinsert.html

#
HTML | 505 lines | 321 code | 110 blank | 74 comment | 0 complexity | e84c4fd8f0b61932fddae22b576a1cd3 MD5 | raw file
Possible License(s): BSD-3-Clause, AGPL-1.0, Apache-2.0, LGPL-2.0, LGPL-3.0, GPL-2.0, CC-BY-SA-3.0, LGPL-2.1, GPL-3.0, MPL-2.0-no-copyleft-exception, IPL-1.0
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta name="generator" content="HTML Tidy, see www.w3.org">
  5. <title>XInsert Plugin</title>
  6. <style type="text/css">
  7. <!--
  8. .syntax0 {}
  9. .syntax1 {
  10. color: #990033;
  11. }
  12. .syntax2 {
  13. color: #990033;
  14. font-style: italic;
  15. }
  16. .syntax3 {
  17. color: #650099;
  18. }
  19. .syntax4 {
  20. color: #650099;
  21. font-weight: bold;
  22. }
  23. .syntax5 {
  24. color: #3366ff;
  25. font-weight: bold;
  26. }
  27. .syntax6 {
  28. color: #000000;
  29. font-weight: bold;
  30. }
  31. .syntax7 {
  32. color: #0033ff;
  33. }
  34. .syntax8 {
  35. color: #009600;
  36. }
  37. .syntax9 {
  38. color: #990033;
  39. }
  40. .syntax10 {
  41. color: #5e5e5e;
  42. font-weight: bold;
  43. }
  44. .syntax11 {
  45. color: #000000;
  46. font-weight: bold;
  47. }
  48. .syntax12 {
  49. color: #009191;
  50. }
  51. .syntax13 {
  52. color: #ff0000;
  53. font-weight: bold;
  54. }
  55. .gutter {
  56. background: #ffffff;
  57. color: #8080c0;
  58. width: 2em
  59. }
  60. .gutterH {
  61. background: #ffffff;
  62. color: #000000;
  63. }
  64. -->
  65. </style>
  66. </head>
  67. <body>
  68. <table style="background:#ccccff" border="0" width="100%" cellspacing="0" cellpadding="0">
  69. <tr width="100%">
  70. <td><h1>XInsert Plugin</h1></td>
  71. <td align="right">
  72. <font size="-1">By Dominic Stolerman and Romain Guy<br>
  73. <i>dstolerman@jedit.org and guy.romain@bigfoot.com</i></font>
  74. </td>
  75. </tr>
  76. </table>
  77. <hr>
  78. <h2>Introduction</h2>
  79. <p>XInsert is a plugin that will insert a section of code/text
  80. from a library into the current buffer, using a graphical tree
  81. view. It also has the ability to run simple scripts in a native
  82. format as well as BeanShell scripts.</p>
  83. <p>XInsert started off as an adition to/part of the Jext text
  84. editor written by Romain Guy. It was then modified to form a
  85. plugin for jEdit by Romain as version 1.0.</p>
  86. <p>Since then it has evolved into a plugin that is has a much
  87. higher level of integration with jEdit through the work of
  88. Dominic Stolerman.</p>
  89. <p>Actions for easy navigation and inserting with the keyboard were
  90. added by Martin Raspe (hertzhaft@biblhertz.it). He added
  91. node references and re-styled the code. Martin is the current
  92. maintainer of the plugin.</p>
  93. <h2>Inserting clips</h2>
  94. <p>XInsert clips can be added in two ways: Either double click on
  95. the desired item in the expanded branch, or select the desired
  96. item in the tree and hit Enter or Space while the XInsert pane is
  97. focused. For convenience two actions were added that can be bound to keystroke
  98. combinations using the Utilities/Global Options/Shortcuts menu (A+F12).</p>
  99. <ul>
  100. <li><b>Focus XInsert</b> - focuses the XInsert pane, allowing
  101. tree navigation by keyboard. Recommended shortcut:
  102. CS-Insert.</li>
  103. <li><b>Insert Selected Item</b> - Inserts the currently selected
  104. item from the XInsert tree. Multiple inserts of the
  105. same item are possible without having to re-enter the XInsert
  106. pane. This action works even if the XInsert pane is not visible
  107. or focused (it must be docked, though). Recommended shortcut: C-Insert
  108. (if you don't use this key combination for pasting from the clipboard).</li>
  109. </ul>
  110. <p>This way you have to remember just one keyboard shortcut to insert an item
  111. or run a macro. Bring the XInsert pane into focus, then navigate
  112. to the desired clip using the arrow keys. Press Enter or Space to reset the
  113. focus to the text area and insert the item. The selected item can be inserted
  114. over again using another keyboard shortcut.</p>
  115. <h2>XInsert Files</h2>
  116. <p>Some XInsert files are supplied with XInsert, these include
  117. Java, HTML, JavaScript and SSI inserts. These catagories appear
  118. in the tree view by default but can be turned off using the
  119. plugin options dialog box.Also all files with the name
  120. *.insert.xml are loaded from the directory specified in the
  121. plugin options. The default directory is .jedit/XInsert, although
  122. this can be changed from the plugin settings dialog.</p>
  123. <p><b>For settings set in the plugin options to take effect the
  124. reload button on the tree view must be pressed</b></p>
  125. <h2>Options</h2>
  126. <h3>From the Plugin Options--&gt;XInsert Dialog:</h3>
  127. <p><b>Display Default Inserts</b> - Enable/Disable displaying the
  128. inserts in the jar file. Pressing "None" will hide them all
  129. without losing your current settings.</p>
  130. <p><b>Inserts directory</b> - The directory that will be searched
  131. for additional insert files.</p>
  132. <p><b>Global Variables</b> - Variables that will be used
  133. throughout all of XInsert. I recomend you set these variables:
  134. author, email webaddress</p>
  135. <h3>On the XInsert Dialog</h3>
  136. <p><b>Carriage Return</b> - If selected will add a new line after
  137. all inserts.</p>
  138. <p><b>Execute Scripts</b> - If selected will cause all inserts
  139. with the <code>script</code> attribute to be executed. If it is
  140. not selected script source will be inserted.</p>
  141. <h2>XInsert File Format</h2>
  142. <pre><font color="#000000"><font color="#0099ff"><strong>&lt;?</strong></font><font color="#0099ff"><strong>xml</strong></font><font color="#0099ff"><strong> </strong></font><font color="#0099ff"><strong>version=</strong></font><font color="#0099ff"><strong> </strong></font><font color="#0099ff"><strong>&quot;1.0&quot;</strong></font><font color="#0099ff"><strong> </strong></font><font color="#0099ff"><strong>encoding=</strong></font><font color="#0099ff"><strong> </strong></font><font color="#0099ff"><strong>&quot;ISO-8859-1&quot;?</strong></font><font color="#0099ff"><strong>&gt;</strong></font>
  143. <font color="#009966"><strong>&lt;!</strong></font><font color="#009966"><strong>DOCTYPE</strong></font><font color="#009966"><strong> </strong></font><font color="#009966"><strong>xinsert</strong></font><font color="#009966"><strong> </strong></font><font color="#009966"><strong>SYSTEM</strong></font><font color="#009966"><strong> </strong></font><font color="#ff00cc">&quot;</font><font color="#ff00cc">jeditresource:/XInsert.jar!/xinsert.dtd</font><font color="#ff00cc">&quot;</font><font color="#009966"><strong>&gt;</strong></font>
  144. <font color="#0000ff">&lt;</font><font color="#0000ff">xinsert</font><font color="#0000ff">&gt;</font>
  145. <font color="#0000ff">&lt;</font><font color="#0000ff">menu</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">[menu</font><font color="#ff00cc"> </font><font color="#ff00cc">name]</font><font color="#ff00cc">&quot;</font><font color="#0000ff">&gt;</font>
  146. <font color="#0000ff">&lt;</font><font color="#0000ff">variable</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">foo</font><font color="#ff00cc">&quot;</font><font color="#0000ff"> </font><font color="#0000ff">value</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">bar</font><font color="#ff00cc">&quot;</font><font color="#0000ff">/</font><font color="#0000ff">&gt;</font>
  147. <font color="#0000ff">&lt;</font><font color="#0000ff">item</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">[Item</font><font color="#ff00cc"> </font><font color="#ff00cc">name]</font><font color="#ff00cc">&quot;</font><font color="#0000ff">&gt;</font>[contents]<font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">item</font><font color="#0000ff">&gt;</font>
  148. <font color="#0000ff">&lt;</font><font color="#0000ff">item</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">foo</font><font color="#ff00cc"> </font><font color="#ff00cc">value</font><font color="#ff00cc">&quot;</font><font color="#0000ff">&gt;</font>$foo<font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">item</font><font color="#0000ff">&gt;</font>
  149. <font color="#0000ff">&lt;</font><font color="#0000ff">item</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">[script</font><font color="#ff00cc"> </font><font color="#ff00cc">name]</font><font color="#ff00cc">&quot;</font><font color="#0000ff"> </font><font color="#0000ff">type</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">xinsert_script</font><font color="#ff00cc">&quot;</font><font color="#0000ff">&gt;</font>[contents]<font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">item</font><font color="#0000ff">&gt;</font>
  150. <font color="#0000ff">&lt;</font><font color="#0000ff">item</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">[macro</font><font color="#ff00cc"> </font><font color="#ff00cc">name]</font><font color="#ff00cc">&quot;</font><font color="#0000ff"> </font><font color="#0000ff">type</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">macro</font><font color="#ff00cc">&quot;</font><font color="#0000ff">&gt;</font>[contents]<font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">item</font><font color="#0000ff">&gt;</font>
  151. <font color="#0000ff">&lt;</font><font color="#0000ff">item</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">[macro</font><font color="#ff00cc"> </font><font color="#ff00cc">file</font><font color="#ff00cc"> </font><font color="#ff00cc">name]</font><font color="#ff00cc">&quot;</font><font color="#0000ff"> </font><font color="#0000ff">type</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">named_macro</font><font color="#ff00cc">&quot;</font><font color="#0000ff">&gt;</font>[file_name]<font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">item</font><font color="#0000ff">&gt;</font>
  152. <font color="#0000ff">&lt;</font><font color="#0000ff">menu</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">sub</font><font color="#ff00cc">&quot;</font><font color="#0000ff">&gt;</font>
  153. <font color="#0000ff">&lt;</font><font color="#0000ff">variable</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">foo</font><font color="#ff00cc">&quot;</font><font color="#0000ff"> </font><font color="#0000ff">value</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">bar2</font><font color="#ff00cc">&quot;</font><font color="#0000ff">/</font><font color="#0000ff">&gt;</font>
  154. <font color="#0000ff">&lt;</font><font color="#0000ff">item</font><font color="#0000ff"> </font><font color="#0000ff">name</font><font color="#0000ff">=</font><font color="#ff00cc">&quot;</font><font color="#ff00cc">foo</font><font color="#ff00cc"> </font><font color="#ff00cc">value</font><font color="#ff00cc">&quot;</font><font color="#0000ff">&gt;</font>$foo<font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">item</font><font color="#0000ff">&gt;</font>
  155. <font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">menu</font><font color="#0000ff">&gt;</font>
  156. <font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">menu</font><font color="#0000ff">&gt;</font>
  157. <font color="#0000ff">&lt;</font><font color="#0000ff">/</font><font color="#0000ff">xinsert</font><font color="#0000ff">&gt;</font>
  158. </font></pre>
  159. <p>XInsert files can have more than one <code>&lt;menu&gt;</code>
  160. tag per file, can have <code>&lt;item&gt;</code> tags in the
  161. <code>&lt;menu&gt;</code> tag. Unlimited nesting of
  162. <code>&lt;menu&gt;</code> tags is supported.</p>
  163. <p>Menu tags can also contain "variable" tags. When variables are
  164. substituted into the insert the closest variable tag in the tree
  165. hierachy is used.</p>
  166. <p>Item tags can have one of five types (specified with the type
  167. attribute):</p>
  168. <dl compact>
  169. <dt>text (default)</dt>
  170. <dd>The text is inserted normally, with variable replacement etc.</dd>
  171. <dt>macro</dt>
  172. <dd>The content is run as a BeanShell macro script.</dd>
  173. <dt>named_macro</dt>
  174. <dd>The content is the name of a file that is run as a BeanShell script.</dd>
  175. <dt>xinsert_script</dt>
  176. <dd>The content is treated as an <a href="#script">xinsert script</a>.</dd>
  177. <dt>action</dt>
  178. <dd>The content is treated as the name of a jEdit action.</dd>
  179. <dt>reference</dt>
  180. <dd>The content is a path to another entry in the XInsert tree. It is constructed by
  181. concatenating the node names with slashes. The tree root is represented by "/".
  182. Example: "/Java/Javadoc/author". In this way you can reference a single item from plusieurs
  183. places in the hierarchy. Chained or circular references are detected and do not work.
  184. </dd>
  185. </dl>
  186. <p>When a named_macro item is encountered, XInsert searches for
  187. the script file using the following protocol:</p>
  188. <blockquote>
  189. <p>1.&nbsp; If the file name has no extension, XInsert adds the
  190. conventional BeanShell extension ".bsh";</p>
  191. <p>2.&nbsp; If the full path name is not specified, XInsert
  192. treats the file name as a relative path specification and looks
  193. for the file in (a) the current working directory, (b) the
  194. "macros" subdirectory of the jEdit home directory and (c) the
  195. "macros" subdirectory of the jEdit user settings directory.</p>
  196. </blockquote>
  197. <p>If you make your own XInsert files, or if you copy the default
  198. data files contained in the .jar file to the "Inserts Directory"
  199. specified in the "Options" dialog, you can add the following
  200. macro item to allow for easy editing of an XInsert file within
  201. jEdit:</p>
  202. <pre>
  203. <span class="gutter">&nbsp;1:</span> <span class="syntax11">&lt;</span>item name="Open XInsert file" type="macro"&gt;
  204. <span class="gutter">&nbsp;2:</span> jEdit.openFile(view,
  205. <span class="gutter">&nbsp;3:</span> jEdit.getProperty("xinsert.inserts-directory")
  206. <span class="gutter">&nbsp;4:</span> + File.separator
  207. <span class="gutter">&nbsp;5:</span> + "foo.insert.xml");
  208. <span class="gutter">&nbsp;6:</span> <span class="syntax11">&lt;/</span>item&gt;
  209. </pre>
  210. <p>After making any changes to the file, save it within jEdit and
  211. press the reload button on the XInsert tree view.&nbsp; The
  212. changes will be immediately available.</p>
  213. <p>As the XInsert files are xml the item contents and names must
  214. not contain &lt; or &amp; symbols, but the HTML codescan be used,
  215. <code>&amp;lt;,&amp;amp;</code>. Some special characters can be
  216. used in the <code>ITEM_CONTENTS</code></p>
  217. <dl>
  218. <dt>\n</dt>
  219. <dd>Inserts a new line.</dd>
  220. <dt>\t</dt>
  221. <dd>Inserts a tab (or spaces) of length set in the buffer
  222. options.</dd>
  223. <dt>|</dt>
  224. <dd>Positions the cursor at this point, or inserts any text
  225. selected at this point. If text is selected but there is no |
  226. character then the selected text is replaced.</dd>
  227. <dt>||</dt>
  228. <dd>Inserts a | character.</dd>
  229. <dt>\$</dt>
  230. <dd>Inserts a $ character.</dd>
  231. <dt>$foo</dt>
  232. <dd>Inserts the variable neamed foo.</dd>
  233. <dd>
  234. <p>There are also some special variables:</p>
  235. <dl compact>
  236. <dt>$path</dt>
  237. <dd>The path of the current buffer.</dd>
  238. <dt>$filename</dt>
  239. <dd>The filname of the current buffer.</dd>
  240. <dt>$date</dt>
  241. <dd>The current date.</dd>
  242. <dt>$time</dt>
  243. <dd>The current time.</dd>
  244. <dt>$datetime</dt>
  245. <dd>The current date and time.</dd>
  246. <dt>$selected</dt>
  247. <dd>The currently selected text in the buffer.</dd>
  248. </dl>
  249. </dd>
  250. </dl>
  251. <h2>XInsert Scripts</h2>
  252. <p>XInsert has a built-in scripting language designed to add
  253. certain functionality to text inserts such as showing dialog
  254. boxes for inputs. It is not designed as a complete scripting
  255. language.</p>
  256. <p>All text in an &lt;item&gt; of type "xinsert_script" will be inserted
  257. into the active buffer, except for embedded commands. Commands are just run,
  258. their results are not inserted into the buffer.</p>
  259. <p>Commands are surrounded by curly braces. The opening brace
  260. must be followed immediately by a "$", "@", "%", or "!", otherwise the text
  261. is inserted literally. If you need to use a closing brace
  262. inside a command, escape it with a backslash.
  263. If all you want is to execute a command without inserting any
  264. additional text, be sure to leave no space between the &lt;item&gt; tags
  265. and the braces.</p>
  266. <p>Note that all the commands are run in the order that
  267. they appear in the script. This means you must set any variables
  268. before you attempt to use them.</p>
  269. <p>For more help with XInsert scripts look at the scripts used in
  270. the built-in insert files in
  271. $jEditHome/jars/xinsert/net/sourceforge/jedit/xinsert</p>
  272. <h3>Insert Variable <code>{$.....}</code></h3>
  273. <blockquote>
  274. <p>This command inserts variables similar to just
  275. <code>$[variable name]</code> in a plain text insert.</p>
  276. <p>This command has three forms:<br>
  277. <code>{$$[variable name]}</code> - the variable value is
  278. inserted if found. Otherwise $[variable name] is inserted.<br>
  279. <code>{$=[variable name]}</code> - the variable value is
  280. inserted if found. Otherwise nothing is inserted.<br>
  281. <code>{$?[variable name]}</code> - the variable value is
  282. inserted if found. Otherwise a dialog box is displayed, prompting the
  283. user to enter a value.</p>
  284. </blockquote>
  285. <h3>Set Variable <code>{%.....}</code></h3>
  286. <blockquote>
  287. <p>This is used to set a variable valid for the &lt;item&gt; it
  288. is in. The general syntax is {%[variable name] ..... }. There are
  289. two main variations:</p>
  290. <p><code>{%[name] %set [value]}</code> - sets the variable to the
  291. variable [name] to [value].</p>
  292. <p>The other variation shows a prompt box to the user:<br>
  293. <code>{%[name] [list]}</code> - where [list] is a list of terms
  294. in double quotes. The order and number of terms is important.</p>
  295. <blockquote>
  296. <table width="95%" border="1" cellspacing="0" cellpadding="0">
  297. <tr>
  298. <td width="19%"><b>No Of Terms</b></td>
  299. <td width="81%"><b>Effect</b></td>
  300. </tr>
  301. <tr>
  302. <td width="19%">none</td>
  303. <td width="81%">Dialog box with default message shown</td>
  304. </tr>
  305. <tr>
  306. <td width="19%">one</td>
  307. <td width="81%">The term is used as a message to show the user
  308. (e.g "Enter email address:"). The first term is always used for
  309. this purpose if present.</td>
  310. </tr>
  311. <tr>
  312. <td width="19%">two</td>
  313. <td width="81%">The second term is used as a default value in the
  314. dialog box<br>
  315. (e.g. "Enter email address:" "dds26@cam.ac.uk")</td>
  316. </tr>
  317. <tr>
  318. <td width="19%">more than two</td>
  319. <td width="81%">
  320. <p>A dialog box with a choice of values is shown.<br>
  321. (e.g. "Enter email address:" "dds26@cam.ac.uk"
  322. "another@email.com" "another email")<br>
  323. If after the last term there is a "?" then the user will be
  324. allowed to enter thier own value as well.<br>
  325. (e.g. "Enter email address:" "dds26@cam.ac.uk"
  326. "another@email.com" "another email" ?)</p>
  327. </td>
  328. </tr>
  329. </table>
  330. </blockquote>
  331. </blockquote>
  332. <h3>Run BeanShell Macro Command
  333. <code>{@.....}</code></h1>
  334. <blockquote>
  335. <p>This runs the content of the braces as a BeanShell macro command.
  336. <code>{@ jEdit.getAction("plugin-manager").invoke(view) }</code>
  337. Multiple commands can be put into a single pair of braces, separated
  338. by semicolons, or chained, e.g.:
  339. <code>{@ buffer.setMode("xml") }{@ textArea.setCaretPosition(0) }</code></p>
  340. <p>Note that as the commands are run in order you can use a macro
  341. command that will modify text inserted before it but not after
  342. it.</p>
  343. </blockquote>
  344. <h3>Run Java Method Command
  345. <code>{!.....}</code></h3>
  346. <blockquote>
  347. <p>This will run any <b>public static</b> java function in a
  348. class that is in the classpath when jEdit is run. If the function
  349. returns a string it will be inserted into the buffer. This
  350. command allows the scripts to become as complicated as you may
  351. wish, by writing the action you wish the script to perform in
  352. Java, using all the features of Java, then calling it from
  353. XInsert.</p>
  354. <p>e.g:<br>
  355. <code>{!com.mypackage.MyClass.MyMethod()}</code> will invoke the
  356. method <i>MyMethod()</i> in class
  357. <i>com.mypackage.MyClass</i>.<br>
  358. <code>{!com.mypackage.MyClass.MyMethod([some text})}</code> will
  359. invoke the method <i>MyMethod(String arg)</i> in class
  360. <i>com.mypackage.MyClass</i> where the argument is [some
  361. text].</p>
  362. </blockquote>
  363. <h2>Feedback</h2>
  364. <ul>
  365. <li>For bug reports use the Sourceforge Bug Tracker -
  366. <a href="http://www.sourceforge.net/bugs/?group_id=588">http://www.sourceforge.net/bugs/?group_id=588</a>,
  367. </li>
  368. <li>or email the current maintainer Martin Raspe
  369. (hertzhaft@biblhertz.it),
  370. </li>
  371. <li>or jEdit-users mailing-list
  372. &lt;jedit-users@lists.sourceforge.net&gt;,
  373. </li>
  374. <li>or jEdit-devel mailing.list
  375. &lt;jedit-devel@lists.sourceforge.net&gt;.
  376. </li>
  377. </ul>
  378. </body>
  379. </html>