Commits

Lynn Rees committed cc52915

- use extend

Comments (0)

Files changed (34)

 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="con" path="org.eclipse.xtend.XTEND_CONTAINER"/>
+	<classpathentry kind="src" path="xtend-gen"/>
 	<classpathentry kind="src" path="scripts"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/freeplane"/>

bin/org/hardknots/wikd/wikdnode/.WikdNode.java._trace

Binary file added.

bin/org/hardknots/wikd/wikdnode/WikdNode.xtend

+package org.hardknots.wikd.wikdnode
+
+import java.net.URI
+import org.apache.commons.lang.WordUtils
+import org.freeplane.features.link.LinkController
+import org.freeplane.features.link.mindmapmode.MLinkController
+import org.freeplane.features.map.NodeModel
+import org.freeplane.features.map.mindmapmode.MMapController
+import org.freeplane.features.mode.Controller
+import org.freeplane.features.text.mindmapmode.MTextController
+
+import static org.freeplane.core.resources.ResourceController.*
+
+import static extension org.apache.commons.lang.StringUtils.*
+import static extension org.freeplane.core.util.HtmlUtils.*
+
+class WikdNode {
+
+  val static firstSplit = resourceController.getBooleanProperty('wikd_first_split')
+
+  def private static getCurrentControl() {
+    Controller.currentController
+  }
+
+  def private static getMMControl() {
+    Controller.currentModeController.mapController as MMapController
+  }
+
+  def private static getMTextControl() {
+    MTextController.controller
+  }
+
+  def private static getSelecteds(Controller c) {
+    c.selection.orderedSelection
+  }
+
+  def private static getPlain(NodeModel node) {
+    node.text.htmlToPlain
+  }
+
+  def static capitalizePlain() {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(plain.toLowerCase.capitalize))
+    ]
+  }
+
+  def static stripPlain(String mark) {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(plain.replaceFirst(mark, "")))
+    ]
+  }
+
+  def static capitalizeAllPlain() {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(WordUtils.capitalizeFully(plain.toLowerCase)))
+    ]
+  }
+
+  def static joinPlain(String mark) {
+    val c = currentControl
+    val m = MMControl
+    val selected = c.selection.selected
+    MTextControl.setNodeText(selected,
+      c.selecteds.filter [
+        it != selected && parent != selected
+      ].toList.toArray.map [
+        val n = it as NodeModel
+        val here = trim(n.plain)
+        n.getChildren.forEach[f|m.insertNode(f, selected)]
+        m.deleteNode(n)
+        here
+      ].join(mark)
+    )
+    c.selection.selectAsTheOnlyOneSelected(selected)
+  }
+
+  def static deleteLinks() {
+    val m = LinkController.controller as MLinkController
+    currentControl.selecteds.forEach[m.setLink(it, null as URI, false)]
+  }
+
+  def static lowerPlain() {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(plain.toLowerCase))
+    ]
+  }
+
+  def static splitPlain(String mark) {
+    val MTextController mtext = MTextControl
+    val MMapController m = MMControl
+    currentControl.selecteds.forEach [
+      var flag = true
+      for (txt : plain.split(mark)) {
+        if (flag) {
+          if (!firstSplit) {
+            m.insertNode(new NodeModel(trim(txt), map), it)
+          }
+          mtext.setNodeText(it, trim(txt))
+          flag = false
+        } else {
+          m.insertNode(new NodeModel(trim(txt), map), it)
+        }
+      }
+    ]
+  }
+
+  def static upperPlain() {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(plain.toUpperCase))
+    ]
+  }
+
+}

scripts/caseQuickEdit.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+
+node.text = ui.showInputDialog(node.delegate, 'Enter change...', node.plainText)

scripts/caseQuickReplace.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+
+text = ui.showInputDialog(node.delegate, 'Enter replacement text...', '')
+
+c.selecteds.each {
+	it.text = text
+}

scripts/convertAttrToChild.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+def child, attrs
+
+c.selecteds.each {
+	attrs = it.attributes
+	attrs.names.eachWithIndex { an, idx ->
+		child = it.createChild(idx)
+		if (an == 'note') {
+			child.note = attrs.get(an)
+		} else {
+			child.object = an
+		}
+		child.details = attrs.get(idx)
+	}
+	it.attributes.clear()
+}

scripts/convertChildToAttr.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+c.selecteds.toList().each {
+	it.children.toList().eachWithIndex { nc, idx ->
+		if (nc.details) {
+			it.attributes.add(nc.plainText, htmlUtils.htmlToPlain(nc.details.string))
+		} else if (nc.link) {
+			it.attributes.add(nc.plainText, nc.link)
+		}
+		if (nc.note) {
+			it['note'] = nc.note
+		}
+		nc.delete()
+	}
+}
+

scripts/convertChildToDetail.groovy

+c.selecteds.toArray().each {
+	it.parent.details = it.text
+	it.delete()
+}

scripts/convertChildToNote.groovy

+c.selecteds.toArray().each {
+	it.parent.note = it.text
+	it.delete()
+}

scripts/convertChildToParent.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+def parent
+def wipe = []
+
+c.selecteds.toList().each {
+  parent = it.parent
+  parent.text = it.text
+  wipe.add(it)
+}
+
+wipe.toList().each { it.delete() }
+
+c.select(parent)

scripts/convertDetailToChild.groovy

+c.selecteds.each {
+	if (it.details) {
+		it.createChild(it.details.string)
+		it.details = null
+	}
+}

scripts/convertNoteToChild.groovy

+c.selecteds.each {
+	if (it.note) {
+		it.createChild(it.note.string)
+		it.note = null
+	}
+}

scripts/convertParentToChild.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+def child
+
+c.selecteds.toList().every { child = it.createChild(it.text) }
+
+c.select(child)

scripts/covertToGrandparent.groovy

+futureSelects = []
+c.selecteds.toArray().each {
+    gp = it.parent.parent
+    chiln = it
+    chiln.moveTo(gp)
+	futureSelects.add(it)
+}
+c.selectMultipleNodes(futureSelects)

scripts/cvrtAttr2Child.groovy

-// @CacheScriptContent(true)
-// @ExecutionModes({ON_SINGLE_NODE})
-def child, attrs
-
-c.selecteds.each {
-	attrs = it.attributes
-	attrs.names.eachWithIndex { an, idx ->
-		child = it.createChild(idx)
-		if (an == 'note') {
-			child.note = attrs.get(an)
-		} else {
-			child.object = an
-		}
-		child.details = attrs.get(idx)
-	}
-	it.attributes.clear()
-}

scripts/cvrtChild2Attr.groovy

-// @CacheScriptContent(true)
-// @ExecutionModes({ON_SINGLE_NODE})
-c.selecteds.toList().each {
-	it.children.toList().eachWithIndex { nc, idx ->
-		if (nc.details) {
-			it.attributes.add(nc.plainText, htmlUtils.htmlToPlain(nc.details.string))
-		} else if (nc.link) {
-			it.attributes.add(nc.plainText, nc.link)
-		}
-		if (nc.note) {
-			it['note'] = nc.note
-		}
-		nc.delete()
-	}
-}
-

scripts/cvrtChild2Detail.groovy

-c.selecteds.each {
-	it.parent.details = it.text
-	it.delete()
-}

scripts/cvrtChild2Note.groovy

-c.selecteds.each {
-	it.parent.note = it.text
-	it.delete()
-}

scripts/cvrtChild2Parent.groovy

-// @CacheScriptContent(true)
-// @ExecutionModes({ON_SINGLE_NODE})
-def parent
-def wipe = []
-
-c.selecteds.toList().each {
-  parent = it.parent
-  parent.text = it.text
-  wipe.add(it)
-}
-
-wipe.toList().each { it.delete() }
-
-c.select(parent)

scripts/cvrtDetail2Child.groovy

-c.selecteds.each {
-	if (it.details) {
-		it.createChild(it.details.string)
-		it.details = null
-	}
-}

scripts/cvrtNote2Child.groovy

-c.selecteds.each {
-	if (it.note) {
-		it.createChild(it.note.string)
-		it.note = null
-	}
-}

scripts/cvrtParent2Child.groovy

-// @CacheScriptContent(true)
-// @ExecutionModes({ON_SINGLE_NODE})
-def child
-
-c.selecteds.toList().every { child = it.createChild(it.text) }
-
-c.select(child)

scripts/joinAppendChars.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+
+appnd = ui.showInputDialog(node.delegate, 'Characters to append to node texts...', '')
+
+if (appnd != null) {
+  c.selecteds.toArray().each { it.text = [it.text, appnd].join('') }
+}
+

scripts/joinCopyUnder.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+
+first = c.selecteds.first()
+rest = c.selecteds.tail()
+
+rest.each {
+	it.appendBranch(first)
+}

scripts/joinCutUnder.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+
+first = c.selecteds.first()
+rest = c.selecteds.tail()
+
+rest.each {
+	it.appendBranch(first)
+}
+
+first.delete()

scripts/joinNoChar.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+
+import org.hardknots.wikd.wikdnode.WikdNode
+
+WikdNode.joinPlain('')

scripts/joinPrependChars.groovy

+// @CacheScriptContent(true)
+// @ExecutionModes({ON_SINGLE_NODE})
+
+ppnd = ui.showInputDialog(node.delegate, 'Characters to prepend to node text', '')
+
+if (ppnd != null) {
+  c.selecteds.toArray().each {it.text = [ppnd, it.text].join('')}
+}

scripts/org/hardknots/wikd/wikdnode/WikdNode.java

-package org.hardknots.wikd.wikdnode;
-
-import java.net.URI;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.apache.commons.lang.WordUtils;
-import org.freeplane.core.resources.ResourceController;
-import org.freeplane.core.util.HtmlUtils;
-import org.freeplane.features.link.LinkController;
-import org.freeplane.features.link.mindmapmode.MLinkController;
-import org.freeplane.features.map.NodeModel;
-import org.freeplane.features.map.mindmapmode.MMapController;
-import org.freeplane.features.mode.Controller;
-import org.freeplane.features.text.mindmapmode.MTextController;
-
-public class WikdNode {
-
-	private static Boolean firstSplit = ResourceController
-			.getResourceController().getBooleanProperty("wikd_first_split");
-
-	private static Controller getCurrentControl() {
-		return Controller.getCurrentController();
-	}
-
-	private static MMapController getMMControl() {
-		return (MMapController) Controller.getCurrentModeController().getMapController();
-	}
-
-	private static MTextController getMTextControl() {
-		return MTextController.getController();
-	}
-
-	private static List<NodeModel> getSelecteds(Controller c) {
-		return c.getSelection().getOrderedSelection();
-	}
-
-	private static String getPlain(NodeModel node) {
-		return HtmlUtils.htmlToPlain(node.getText());
-	}
-
-	private static String trim(String text) {
-		return StringUtils.trim(text);
-	}
-
-	public static void capitalizePlain() {
-		final MTextController mtext = getMTextControl();
-		for (NodeModel n : getSelecteds(getCurrentControl())) {
-			mtext.setNodeText(
-				n, trim(StringUtils.capitalize(getPlain(n).toLowerCase()))
-			);
-		}
-	}
-
-	public static void stripPlain(String mark) {
-		final MTextController mtext = getMTextControl();
-		for (NodeModel n : getSelecteds(getCurrentControl()))
-			mtext.setNodeText(n, trim(getPlain(n).replaceFirst(mark, "")));
-	}
-
-	public static void capitalizeAllPlain() {
-		final MTextController mtext = getMTextControl();
-		for (NodeModel n : getSelecteds(getCurrentControl())) {
-			mtext.setNodeText(
-				n, trim(WordUtils.capitalizeFully(getPlain(n).toLowerCase()))
-			);
-		}
-	}
-
-	public static void joinPlain(String mark) {
-		List<String> collect = new LinkedList<String>();
-		final Controller c = getCurrentControl();
-		final MMapController m = getMMControl();
-		final NodeModel selected = c.getSelection().getSelected();
-		for (Object i : getSelecteds(c).toArray()) {
-			final NodeModel n = (NodeModel) i;
-			collect.add(trim(getPlain(n)));
-			if (n != selected) {
-				for (final NodeModel child : n.getChildren())
-					m.insertNode(child, selected);
-				m.deleteNode(n);
-			}
-		}
-		getMTextControl().setNodeText(
-			selected, trim(StringUtils.join(collect.toArray(), mark))
-		);
-		c.getSelection().selectAsTheOnlyOneSelected(selected);
-	}
-
-	public static void deleteLinks() {
-		MLinkController m = (MLinkController) LinkController.getController();
-		for (NodeModel n : getSelecteds(getCurrentControl()))
-			m.setLink(n, (URI) null, false);
-	}
-
-	public static void lowerPlain() {
-		final MTextController mtext = getMTextControl();
-		for (NodeModel n : getSelecteds(getCurrentControl()))
-			mtext.setNodeText(n, trim(getPlain(n).toLowerCase()));
-	}
-
-	public static void splitPlain(String mark) {
-		final MTextController mtext = getMTextControl();
-		final MMapController m = getMMControl();
-		for (NodeModel n : getSelecteds(getCurrentControl())) {
-			Boolean flag = true;
-			for (String txt : getPlain(n).split(mark)) {
-				if (flag) {
-					if (!firstSplit)
-						m.insertNode(new NodeModel(trim(txt), n.getMap()), n);
-					mtext.setNodeText(n, trim(txt));
-					flag = false;
-				} else {
-					m.insertNode(new NodeModel(trim(txt), n.getMap()), n);
-				}
-			}
-		}
-	}
-
-	public static void upperPlain() {
-		final MTextController mtext = getMTextControl();
-		for (NodeModel n : getSelecteds(getCurrentControl()))
-			mtext.setNodeText(n, trim(getPlain(n).toUpperCase()));
-	}
-
-}

scripts/org/hardknots/wikd/wikdnode/WikdNode.xtend

+package org.hardknots.wikd.wikdnode
+
+import java.net.URI
+import org.apache.commons.lang.WordUtils
+import org.freeplane.features.link.LinkController
+import org.freeplane.features.link.mindmapmode.MLinkController
+import org.freeplane.features.map.NodeModel
+import org.freeplane.features.map.mindmapmode.MMapController
+import org.freeplane.features.mode.Controller
+import org.freeplane.features.text.mindmapmode.MTextController
+
+import static org.freeplane.core.resources.ResourceController.*
+
+import static extension org.apache.commons.lang.StringUtils.*
+import static extension org.freeplane.core.util.HtmlUtils.*
+
+class WikdNode {
+
+  val static firstSplit = resourceController.getBooleanProperty('wikd_first_split')
+
+  def private static getCurrentControl() {
+    Controller.currentController
+  }
+
+  def private static getMMControl() {
+    Controller.currentModeController.mapController as MMapController
+  }
+
+  def private static getMTextControl() {
+    MTextController.controller
+  }
+
+  def private static getSelecteds(Controller c) {
+    c.selection.orderedSelection
+  }
+
+  def private static getPlain(NodeModel node) {
+    node.text.htmlToPlain
+  }
+
+  def static capitalizePlain() {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(plain.toLowerCase.capitalize))
+    ]
+  }
+
+  def static stripPlain(String mark) {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(plain.replaceFirst(mark, "")))
+    ]
+  }
+
+  def static capitalizeAllPlain() {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(WordUtils.capitalizeFully(plain.toLowerCase)))
+    ]
+  }
+
+  def static joinPlain(String mark) {
+    val c = currentControl
+    val m = MMControl
+    val selected = c.selection.selected
+    MTextControl.setNodeText(selected,
+      c.selecteds.filter [
+        it != selected && parent != selected
+      ].toList.toArray.map [
+        val n = it as NodeModel
+        val here = trim(n.plain)
+        n.getChildren.forEach[f|m.insertNode(f, selected)]
+        m.deleteNode(n)
+        here
+      ].join(mark)
+    )
+    c.selection.selectAsTheOnlyOneSelected(selected)
+  }
+
+  def static deleteLinks() {
+    val m = LinkController.controller as MLinkController
+    currentControl.selecteds.forEach[m.setLink(it, null as URI, false)]
+  }
+
+  def static lowerPlain() {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(plain.toLowerCase))
+    ]
+  }
+
+  def static splitPlain(String mark) {
+    val MTextController mtext = MTextControl
+    val MMapController m = MMControl
+    currentControl.selecteds.forEach [
+      var flag = true
+      for (txt : plain.split(mark)) {
+        if (flag) {
+          if (!firstSplit) {
+            m.insertNode(new NodeModel(trim(txt), map), it)
+          }
+          mtext.setNodeText(it, trim(txt))
+          flag = false
+        } else {
+          m.insertNode(new NodeModel(trim(txt), map), it)
+        }
+      }
+    ]
+  }
+
+  def static upperPlain() {
+    val mtext = MTextControl
+    currentControl.selecteds.forEach [
+      mtext.setNodeText(it, trim(plain.toUpperCase))
+    ]
+  }
+
+}
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<jardesc>
+    <jar path="wikdNode/jars/wikd.jar"/>
+    <options buildIfNeeded="true" compress="true" descriptionLocation="/wikdNode/wikd.jardesc" exportErrors="true" exportWarnings="true" includeDirectoryEntries="false" overwrite="true" saveDescription="true" storeRefactorings="false" useSourceFolders="false"/>
+    <storedRefactorings deprecationInfo="true" structuralOnly="false"/>
+    <selectedProjects/>
+    <manifest generateManifest="true" manifestLocation="" manifestVersion="1.0" reuseManifest="false" saveManifest="false" usesManifest="true">
+        <sealing sealJar="false">
+            <packagesToSeal/>
+            <packagesToUnSeal/>
+        </sealing>
+    </manifest>
+    <selectedElements exportClassFiles="true" exportJavaFiles="false" exportOutputFolder="false">
+        <file path="/wikdNode/scripts/.DS_Store"/>
+        <javaElement handleIdentifier="=wikdNode/scripts&lt;org.hardknots.wikd.wikdnode"/>
+    </selectedElements>
+</jardesc>
 <map version="freeplane 1.2.0">
 <!--To view this file, download free mind mapping software Freeplane from http://freeplane.sourceforge.net -->
-<node TEXT="wikdNode" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1364327472039" BACKGROUND_COLOR="#97c7dc" LINK="https://bitbucket.org/lcrees/wikdnode/">
+<node TEXT="wikdNode" FOLDED="false" ID="ID_1723255651" CREATED="1283093380553" MODIFIED="1388813437295" BACKGROUND_COLOR="#97c7dc" LINK="https://bitbucket.org/lcrees/wikdnode/">
 <font SIZE="16" BOLD="true" ITALIC="true"/>
 <hook NAME="MapStyle">
     <properties show_icon_for_attributes="true" show_note_icons="true"/>
 </stylenode>
 </map_styles>
 </hook>
-<hook NAME="AutomaticEdgeColor" COUNTER="7"/>
+<hook NAME="AutomaticEdgeColor" COUNTER="8"/>
 <attribute_layout NAME_WIDTH="103" VALUE_WIDTH="103"/>
 <attribute NAME="name" VALUE="wikdNode"/>
-<attribute NAME="version" VALUE="v0.7.7" OBJECT="org.freeplane.features.format.FormattedObject|v0.7.7|number:decimal:#0.####"/>
+<attribute NAME="version" VALUE="v0.7.14" OBJECT="org.freeplane.features.format.FormattedObject|v0.7.14|number:decimal:#0.####"/>
 <attribute NAME="author" VALUE="L. C. Rees"/>
 <attribute NAME="freeplaneVersionFrom" VALUE="1.2.15"/>
 <attribute NAME="freeplaneVersionTo" VALUE=""/>
         name: The name of the add-on, normally a technically one (no spaces, no special characters except _.-).
       </li>
       <li>
-        author: Author's name(s) and (optionally) email adresses.
+        author: Author's name(s) and (optionally) email address.
       </li>
       <li>
         version: Since it's difficult to protect numbers like 1.0 from Freeplane's number parser it's advised to prepend a 'v' to the number, e.g. 'v1.0'.
 
 </richcontent>
 <hook NAME="FlexibleLayout" VALUE="CHILDREN"/>
-<node TEXT="description" FOLDED="true" POSITION="left" ID="ID_143630176" CREATED="1357715826843" MODIFIED="1364327418267">
+<node TEXT="description" FOLDED="true" POSITION="left" ID="ID_143630176" CREATED="1357715826843" MODIFIED="1388813237360">
 <edge COLOR="#ff0000"/>
 <richcontent TYPE="NOTE">
 
       Description would be awkward to edit as an attribute.
     </p>
     <p>
-      So you have to put the add-on description as a child of the <i>'description'</i>&#160;node.
+      So you have to put the add-on description as a child of the <i>'description'</i> node.
     </p>
     <p>
       To translate the description you have to define a translation for the key 'addons.${name}.description'.
 <attribute_layout NAME_WIDTH="100" VALUE_WIDTH="100"/>
 </node>
 </node>
-<node TEXT="changes" FOLDED="true" POSITION="left" ID="ID_1790870178" CREATED="1357715826877" MODIFIED="1364327418268">
+<node TEXT="changes" FOLDED="true" POSITION="left" ID="ID_1790870178" CREATED="1357715826877" MODIFIED="1388813237362">
 <edge COLOR="#0000ff"/>
 <richcontent TYPE="NOTE">
 
 <node TEXT="convert child node to parent note" ID="ID_715500628" CREATED="1362699882173" MODIFIED="1362699882173"/>
 </node>
 </node>
-<node TEXT="license" FOLDED="true" POSITION="left" ID="ID_1348143779" CREATED="1357715826886" MODIFIED="1364327418271">
+<node TEXT="license" FOLDED="true" POSITION="left" ID="ID_1348143779" CREATED="1357715826886" MODIFIED="1388813237364">
 <edge COLOR="#00ff00"/>
 <richcontent TYPE="NOTE">
 
       
     </p>
     <p>
-      The License text has to be entered as a child of the <i>'license'</i>&#160;node, either as plain text or as HTML.
+      The License text has to be entered as a child of the <i>license</i> node, either as plain text or as HTML.
     </p>
   </body>
 </html>
 <attribute_layout NAME_WIDTH="100" VALUE_WIDTH="100"/>
 </node>
 </node>
-<node TEXT="preferences.xml" FOLDED="true" POSITION="left" ID="ID_1772733941" CREATED="1357715826946" MODIFIED="1364327418273">
+<node TEXT="preferences.xml" FOLDED="true" POSITION="left" ID="ID_1772733941" CREATED="1357715826946" MODIFIED="1388813237367">
 <edge COLOR="#ff00ff"/>
 <richcontent TYPE="NOTE">
 
   </head>
   <body>
     <p>
-      <font face="SansSerif, sans-serif" color="#000000">The child node contains the add-on configuration as an extension to mindmapmodemenu.xml (in Tools-&gt;Preferences-&gt;Add-ons). </font>
+      <font color="#000000" face="SansSerif, sans-serif">The child node contains the add-on configuration as an extension to <b><i>mindmapmodemenu.xml</i></b> (in Tools &#8594; Preferences &#8594; Add-ons).</font>
     </p>
     <p>
-      <font face="SansSerif, sans-serif" color="#000000">Every property in the configuration should receive a default value in <i>default.properties</i>&#160;node.</font>
+      <font color="#000000" face="SansSerif, sans-serif">Every property in the configuration should receive a default value in <i>default.properties</i> node.</font>
     </p>
   </body>
 </html>
 <attribute_layout NAME_WIDTH="100" VALUE_WIDTH="100"/>
 </node>
 </node>
-<node TEXT="default.properties" POSITION="left" ID="ID_1954124232" CREATED="1357715826968" MODIFIED="1364327418275">
+<node TEXT="default.properties" POSITION="left" ID="ID_1954124232" CREATED="1357715826968" MODIFIED="1388813237369">
 <edge COLOR="#00ffff"/>
 <richcontent TYPE="NOTE">
 
 <attribute_layout NAME_WIDTH="72" VALUE_WIDTH="72"/>
 <attribute NAME="wikd_first_split" VALUE="false"/>
 </node>
-<node TEXT="translations" POSITION="left" ID="ID_1430168348" CREATED="1357715826977" MODIFIED="1364327418278">
+<node TEXT="translations" POSITION="left" ID="ID_1430168348" CREATED="1357715826977" MODIFIED="1388813237371">
 <edge COLOR="#ffff00"/>
 <richcontent TYPE="NOTE">
 
 
 </richcontent>
 <attribute_layout NAME_WIDTH="100" VALUE_WIDTH="100"/>
-<node TEXT="en" ID="ID_1245393964" CREATED="1357715826986" MODIFIED="1362734033478">
+<node TEXT="en" ID="ID_1245393964" CREATED="1357715826986" MODIFIED="1388774501270">
 <attribute_layout NAME_WIDTH="130" VALUE_WIDTH="246"/>
 <attribute NAME="addons.${name}" VALUE="wikdNode"/>
 <attribute NAME="wikdConvert" VALUE="Convert..."/>
 <attribute NAME="wikdDelete" VALUE="Delete..."/>
 <attribute NAME="wikdJoin" VALUE="Join..."/>
 <attribute NAME="wikdSplit" VALUE="Split..."/>
+<attribute NAME="wikd.joinNoChars" VALUE="Join with no character"/>
 <attribute NAME="wikd.caseCapitalize" VALUE="To capitalized"/>
 <attribute NAME="wikd.caseCapitalizeAll" VALUE="To all capitalized"/>
 <attribute NAME="wikd.caseUpper" VALUE="To upper"/>
 <attribute NAME="OptionPanel.separator.wikd" VALUE="wikdNode"/>
 <attribute NAME="OptionPanel.wikd_first_split" VALUE="Keep first split as parent"/>
 </node>
-<node TEXT="de" ID="ID_726128733" CREATED="1357715826986" MODIFIED="1362734190061">
-<attribute_layout NAME_WIDTH="130" VALUE_WIDTH="224"/>
-<attribute NAME="addons.${name}" VALUE="wikdNode"/>
-<attribute NAME="wikdConvert" VALUE="Konvertieren"/>
-<attribute NAME="wikdCase" VALUE="&#xc4;ndern Sie Gro&#xdf;-und Kleinschreibung"/>
-<attribute NAME="wikdDelete" VALUE="l&#xf6;schen"/>
-<attribute NAME="wikdJoin" VALUE="Beitreten"/>
-<attribute NAME="wikdSplit" VALUE="Gespalten"/>
-<attribute NAME="wikd.caseCapitalize" VALUE="Anfangsbuchst. gro&#xdf;"/>
-<attribute NAME="wikd.caseCapitalizeAll" VALUE="Alle Anfangsbuchst. gro&#xdf;"/>
-<attribute NAME="wikd.caseUpper" VALUE="In Gro&#xdf;buchstaben"/>
-<attribute NAME="wikd.caseLower" VALUE="Um Kleinbuchstaben"/>
-<attribute NAME="wikd.cvrtParent2Child" VALUE="Kopieren Sie auf das Kind"/>
-<attribute NAME="wikd.cvrtChild2Parent" VALUE="Ersetze Elternknoten"/>
-<attribute NAME="wikd.cvrtChild2Attr" VALUE="Kinder um die Attribute"/>
-<attribute NAME="wikd.cvrtAttr2Child" VALUE="Attribute f&#xfc;r Kinder"/>
-<attribute NAME="wikd.cvrtNote2Child" VALUE="Hinweis auf das Kind"/>
-<attribute NAME="wikd.cvrtChild2Note" VALUE="Child to note"/>
-<attribute NAME="wikd.cvrtDetail2Child" VALUE="&#xdc;bergeordnetes Details zum Kind"/>
-<attribute NAME="wikd.cvrtChild2Detail" VALUE="Kind an &#xfc;bergeordnete Details"/>
-<attribute NAME="wikd.joinPeriod" VALUE="Verbinden mit Punkt"/>
-<attribute NAME="wikd.joinComma" VALUE="Verbinden mit Komma"/>
-<attribute NAME="wikd.joinSpace" VALUE="Verbinden mit Leerzeichen"/>
-<attribute NAME="wikd.joinChars" VALUE="Verbinden mit..."/>
-<attribute NAME="wikd.splitBeforeChars" VALUE="Teilen vor..."/>
-<attribute NAME="wikd.splitBeforeRegex" VALUE="Teilen vor regul&#xe4;ren Ausdruck..."/>
-<attribute NAME="wikd.splitAfterChars" VALUE="Teilen nach..."/>
-<attribute NAME="wikd.splitAfterRegex" VALUE="Teilen nach regul&#xe4;ren Ausdruck..."/>
-<attribute NAME="wikd.splitPeriod" VALUE="Trennen an Punkten"/>
-<attribute NAME="wikd.splitComma" VALUE="Trennen an Kommas"/>
-<attribute NAME="wikd.splitSpace" VALUE="Trennen an Leerzeichen"/>
-<attribute NAME="wikd.splitChars" VALUE="Trennen an..."/>
-<attribute NAME="wikd.splitRegex" VALUE="Trennen an regul&#xe4;ren Ausdruck..."/>
-<attribute NAME="wikd.deleteLastChars" VALUE="Entferne letzte Zeichen..."/>
-<attribute NAME="wikd.deleteLastRegex" VALUE="Entferne letzte Zeichen mit regul&#xe4;ren Ausdruck..."/>
-<attribute NAME="wikd.deleteFirstChars" VALUE="Entferne erste Zeichen..."/>
-<attribute NAME="wikd.deleteFirstRegex" VALUE="Entferne erste Zeichen mit regul&#xe4;ren Ausdruck..."/>
-<attribute NAME="wikd.deleteLinks" VALUE="Entferne Links"/>
-<attribute NAME="OptionPanel.separator.wikd" VALUE="wikdNode"/>
-<attribute NAME="OptionPanel.wikd_first_split" VALUE="Halten erste Spaltung als Elternknoten"/>
 </node>
-</node>
-<node TEXT="deinstall" POSITION="left" ID="ID_1844997656" CREATED="1357715826998" MODIFIED="1364327454901">
-<edge COLOR="#7c0000"/>
-<richcontent TYPE="NOTE">
-
-<html>
-  <head>
-    
-  </head>
-  <body>
-    <p>
-      List of files and/or directories to remove on deinstall
-    </p>
-  </body>
-</html>
-
-</richcontent>
-<attribute_layout NAME_WIDTH="30" VALUE_WIDTH="269"/>
-<attribute NAME="delete" VALUE="${installationbase}/addons/${name}.script.xml"/>
-<attribute NAME="delete" VALUE="${installationbase}/resources/images/wikdNode.png"/>
-<attribute NAME="delete" VALUE="${installationbase}/resources/images/wikdNode-icon.png"/>
-<attribute NAME="delete" VALUE="${installationbase}/resources/images/wikdNode-screenshot-1.png"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/capitalize.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/capitalizeAll.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/upperCase.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/lowerCase.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/makeChild.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/replaceParent.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/joinPeriod.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/joinComma.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/joinSpace.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/joinChars.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitBeforeChars.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitPeriod.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitComma.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitSpace.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitChars.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/deleteLastChars.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/deleteFirstChars.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/attrsToChildren.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitBeforeRegex.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/deleteLastRegex.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/deleteFirstRegex.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitRegex.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/childrenToAttrs.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/deleteLinks.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitAfterChars.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/splitAfterRegex.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/noteToChild.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/childToDetail.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/detailToChild.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/childToNote.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/caseCapitalize.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/caseCapitalizeAll.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/caseUpper.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/caseLower.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/cvrtChild2Attr.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/cvrtChild2Parent.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/cvrtChild2Note.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/cvrtChild2Detail.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/cvrtParent2Child.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/cvrtAttr2Child.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/cvrtNote2Child.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/scripts/cvrtDetail2Child.groovy"/>
-<attribute NAME="delete" VALUE="${installationbase}/jars/wikdnode.jar"/>
-</node>
-<node TEXT="scripts" POSITION="right" ID="ID_1324856264" CREATED="1357715827025" MODIFIED="1364327418288">
+<node TEXT="scripts" POSITION="right" ID="ID_1324856264" CREATED="1357715827025" MODIFIED="1388813237383">
 <edge COLOR="#00007c"/>
 <richcontent TYPE="NOTE">
 
     
   </head>
   <body>
-    <p>
-      An add-on may contain multiple scripts. The node text defines the script name (e.g. inserInlineImage.groovy). The name has to end with .groovy and may only consist of letters and digits. The script properties have to be configured via attributes:
-    </p>
+    An add-on may contain multiple scripts. Each node's text defines the script name (e.g. <b><i>insertInlineImage.groovy</i></b>). This name has to end with <b><i>.groovy</i></b> and may only contain letters and digits. The script's properties have to be configured by setting the following attributes:
+
     <p>
       
     </p>
     <p>
-      * menuLocation: &lt;locationkey&gt;
+      <b>menuLocation</b> &lt;<i>locationkey</i>&gt;
     </p>
+    <ul>
+      <li>
+        Defines where the menu location.
+      </li>
+      <li>
+        See <b><i>mindmapmodemenu.xml</i></b> for how the menu locations look like.
+      </li>
+      <li>
+        This attribute is <font color="#ff0033"><b>mandatory</b></font>.
+      </li>
+    </ul>
     <p>
-      &#160;&#160;&#160;- Defines where the menu location.
+      <b>menuTitleKey </b>&lt;<i>key</i>&gt;
     </p>
-    <p>
-      &#160;&#160;&#160;-&#160;See mindmapmodemenu.xml for how the menu locations look like.
-    </p>
-    <p>
-      &#160;&#160;&#160;- http://freeplane.bzr.sf.net/bzr/freeplane/freeplane_program/trunk/annotate/head%3A/freeplane/resources/xml/mindmapmodemenu.xml
-    </p>
-    <p>
-      &#160;&#160;&#160;- This attribute is mandatory
-    </p>
+    <ul>
+      <li>
+        The menu item title will be looked up under the translation key &lt;<i>key</i>&gt; (don't forget to define its translation).
+      </li>
+      <li>
+        This attribute is <font color="#ff0033"><b>mandatory</b></font>.
+      </li>
+    </ul>
     <p>
       
     </p>
     <p>
-      * menuTitleKey: &lt;key&gt;
+      <b>executionMode</b> &lt;<i>mode</i>&gt;
     </p>
-    <p>
-      &#160;&#160;&#160;- The menu item title will be looked up under the translation key &lt;key&gt; - don't forget to define its translation.
-    </p>
-    <p>
-      &#160;&#160;&#160;- This attribute is mandatory
-    </p>
+    <ul>
+      <li>
+        Execution mode as described in the <a href="http://freeplane.sourceforge.net/wiki/index.php/Scripting">Freeplane wiki</a>.
+      </li>
+      <li>
+        <b>ON_SINGLE_NODE</b>: Execute the script once. The <b><i>node</i></b> variable is set to the selected node.
+      </li>
+      <li>
+        <b>ON_SELECTED_NODE</b>: Execute the script <b><i>n</i></b> times for <b><i>n</i></b> selected nodes, once for each node.
+      </li>
+      <li>
+        <b>ON_SELECTED_NODE_RECURSIVELY</b>: Execute the script on every selected node and recursively on all of its children.
+      </li>
+      <li>
+        When in doubt, use <b>ON_SINGLE_NODE</b>.
+      </li>
+      <li>
+        This attribute is <font color="#ff0033"><b>mandatory</b></font>.
+      </li>
+    </ul>
     <p>
       
     </p>
     <p>
-      * executionMode: &lt;mode&gt;
+      <b>keyboardShortcut</b> &lt;<i>shortcut</i>&gt;
     </p>
-    <p>
-      &#160;&#160;&#160;- The execution mode as described in the Freeplane wiki (http://freeplane.sourceforge.net/wiki/index.php/Scripting)
-    </p>
-    <p>
-      &#160;&#160;&#160;- ON_SINGLE_NODE: Execute the script once. The <i>node</i>&#160;variable is set to the selected node.
-    </p>
-    <p>
-      &#160;&#160;&#160;- ON_SELECTED_NODE: Execute the script n times for n selected nodes, once for each node.
-    </p>
-    <p>
-      &#160;&#160;&#160;- ON_SELECTED_NODE_RECURSIVELY: Execute the script on every selected node and recursively on all of its children.
-    </p>
-    <p>
-      &#160;&#160;&#160;- In doubt use ON_SINGLE_NODE.
-    </p>
-    <p>
-      &#160;&#160;&#160;- This attribute is mandatory
-    </p>
+    <ul>
+      <li>
+        Keyboard combination (accelerator) for this script (e.g. <b><i>control alt I</i></b>).
+      </li>
+      <li>
+        Use lowercase letters for modifiers and uppercase for letters.
+      </li>
+      <li>
+        Don't use <b><i>+</i></b> signs.
+      </li>
+      <li>
+        Available key names are listed at <a href="http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/KeyEvent.html#VK_0">http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/KeyEvent.html#VK_0</a> (In that list, only entries with a <b><i>VK_</i></b> prefix count. Leave out the <b><i>VK_ </i></b>prefix in the shortcut definition.)
+      </li>
+      <li>
+        This attribute is <b>optional</b>.
+      </li>
+    </ul>
     <p>
       
     </p>
     <p>
-      * keyboardShortcut: &lt;shortcut&gt;
+      These are the permission attributes for each script.
     </p>
-    <p>
-      &#160;&#160;&#160;- Optional: keyboard combination / accelerator for this script, e.g. control alt I
-    </p>
-    <p>
-      &#160;&#160;&#160;- Use lowercase letters for modifiers and uppercase for letters. Use no + signs.
-    </p>
-    <p>
-      &#160;&#160;&#160;- The available key names are listed at http://download.oracle.com/javase/1.4.2/docs/api/java/awt/event/KeyEvent.html#VK_0
-    </p>
-    <p>
-      &#160;&#160;&#160;&#160;&#160;In the list only entries with a 'VK_' prefix count. Omit the prefix in the shortcut definition.
-    </p>
-    <p>
-      
-    </p>
-    <p>
-      * Permissions&#160;that the script(s) require, each either false or true:
-    </p>
-    <p>
-      &#160;&#160;&#160;- execute_scripts_without_asking
-    </p>
-    <p>
-      &#160;&#160;&#160;- execute_scripts_without_file_restriction: permission to read files
-    </p>
-    <p>
-      &#160;&#160;&#160;- execute_scripts_without_write_restriction: permission to create/change/delete files
-    </p>
-    <p>
-      &#160;&#160;&#160;- execute_scripts_without_exec_restriction: permission to execute other programs
-    </p>
-    <p>
-      &#160;&#160;&#160;- execute_scripts_without_network_restriction: permission to access the network
-    </p>
-    <p>
-      &#160;&#160;Notes:
-    </p>
-    <p>
-      &#160;&#160;- The set of permissions is fixed.
-    </p>
-    <p>
-      &#160;&#160;- Don't change the attribute names, don't omit one.
-    </p>
-    <p>
-      &#160;&#160;- Set the values either to true or to false
-    </p>
-    <p>
-      &#160;&#160;- In any case set execute_scripts_without_asking to true unless you want to annoy users.
-    </p>
+    <ul>
+      <li>
+        <b>execute_scripts_without_asking:</b> permission to run without asking for permission
+      </li>
+      <li>
+        <b>execute_scripts_without_file_restriction: </b>permission to read files
+      </li>
+      <li>
+        <b>execute_scripts_without_write_restriction: </b>permission to create/change/delete files
+      </li>
+      <li>
+        <b>execute_scripts_without_exec_restriction: </b>permission to execute other programs
+      </li>
+      <li>
+        <b>execute_scripts_without_network_restriction: </b>permission to access the network
+      </li>
+      <li>
+        This set of permissions is fixed.
+      </li>
+      <li>
+        Don't change any permission attribute's name.
+      </li>
+      <li>
+        Don't leave out any permission attribute's name.
+      </li>
+      <li>
+        Set each value to either <b><i>true</i></b> or <b><i>false</i></b>:
+      </li>
+      <li>
+        <b>set execute_scripts_without_asking</b> to <b><i>true</i></b> unless you want to annoy users.
+      </li>
+      <li>
+        This attribute is <font color="#ff0033"><b>mandatory</b></font>.
+      </li>
+    </ul>
   </body>
 </html>
 
 </richcontent>
 <attribute_layout NAME_WIDTH="100" VALUE_WIDTH="100"/>
-<node TEXT="caseCapitalize.groovy" ID="ID_1501046977" CREATED="1357794199593" MODIFIED="1362733463031">
+<node TEXT="caseQuickEdit.groovy" ID="ID_260063025" CREATED="1388813177944" MODIFIED="1388813415322">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="Quick Edit"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/format/wikdCase"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="ctrl meta Q"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ff66cc" SHAPE="RECT"/>
+</node>
+<node TEXT="caseQuickReplace.groovy" ID="ID_1267463249" CREATED="1388813177944" MODIFIED="1388813415329">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="Quick Replace"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/format/wikdCase"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="ctrl alt Q"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ff66cc" SHAPE="RECT"/>
+</node>
+<node TEXT="caseLower.groovy" ID="ID_1207751289" CREATED="1357794244507" MODIFIED="1388810200357">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.caseLower"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/format/wikdCase"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta L"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#99ffff" SHAPE="RECT"/>
+</node>
+<node TEXT="caseUpper.groovy" ID="ID_575754475" CREATED="1357794217131" MODIFIED="1388810200359">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.caseUpper"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/format/wikdCase"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta U"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#99ffff" SHAPE="RECT"/>
+</node>
+<node TEXT="caseCapitalize.groovy" ID="ID_1501046977" CREATED="1357794199593" MODIFIED="1388810168899">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
 <attribute NAME="menuTitleKey" VALUE="wikd.caseCapitalize"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/format/wikdCase"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#00cc66" SHAPE="RECT"/>
 </node>
-<node TEXT="caseCapitalizeAll.groovy" ID="ID_1766457930" CREATED="1357794199593" MODIFIED="1362733470294">
+<node TEXT="caseCapitalizeAll.groovy" ID="ID_1766457930" CREATED="1357794199593" MODIFIED="1388810168900">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
 <attribute NAME="menuTitleKey" VALUE="wikd.caseCapitalizeAll"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/format/wikdCase"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#00cc66" SHAPE="RECT"/>
 </node>
-<node TEXT="caseUpper.groovy" ID="ID_575754475" CREATED="1357794217131" MODIFIED="1362733480763">
+<node TEXT="convertAttrToChild.groovy" ID="ID_1847929515" CREATED="1358814771203" MODIFIED="1388810833976">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.caseUpper"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/format/wikdCase"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.cvrtAttr2Child"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
 <attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta U"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt A"/>
 <attribute NAME="execute_scripts_without_asking" VALUE="true"/>
 <attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#cc6600" SHAPE="RECT"/>
 </node>
-<node TEXT="caseLower.groovy" ID="ID_1207751289" CREATED="1357794244507" MODIFIED="1362733491249">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.caseLower"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/format/wikdCase"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta L"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="cvrtChild2Attr.groovy" ID="ID_391503611" CREATED="1358815336477" MODIFIED="1362733639874">
+<node TEXT="convertChildToAttr.groovy" ID="ID_391503611" CREATED="1358815336477" MODIFIED="1388810843862">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
 <attribute NAME="menuTitleKey" VALUE="wikd.cvrtChild2Attr"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#cc6600" SHAPE="RECT"/>
 </node>
-<node TEXT="cvrtChild2Parent.groovy" ID="ID_916231873" CREATED="1357803701257" MODIFIED="1362733654027">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.cvrtChild2Parent"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta M"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="cvrtChild2Note.groovy" ID="ID_530481661" CREATED="1362698402259" MODIFIED="1362733663898">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.cvrtChild2Note"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta N"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="cvrtChild2Detail.groovy" ID="ID_1077953010" CREATED="1362698402258" MODIFIED="1362734241326">
+<node TEXT="convertChildToDetail.groovy" ID="ID_1077953010" CREATED="1362698402258" MODIFIED="1388810812549">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
 <attribute NAME="menuTitleKey" VALUE="wikd.cvrtChild2Detail"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
 <font BOLD="false"/>
+<cloud COLOR="#66ccff" SHAPE="RECT"/>
 </node>
-<node TEXT="cvrtParent2Child.groovy" ID="ID_202355907" CREATED="1357803016822" MODIFIED="1362733683067">
+<node TEXT="convertDetailToChild.groovy" ID="ID_436412664" CREATED="1362698402259" MODIFIED="1388810820623">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.cvrtDetail2Child"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt X"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#66ccff" SHAPE="RECT"/>
+</node>
+<node TEXT="convertChildToNote.groovy" ID="ID_530481661" CREATED="1362698402259" MODIFIED="1388810788572">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.cvrtChild2Note"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta N"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#33ffcc" SHAPE="RECT"/>
+</node>
+<node TEXT="convertNoteToChild.groovy" ID="ID_1236612243" CREATED="1362698402250" MODIFIED="1388810766284">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.cvrtNote2Child"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt N"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#33ffcc" SHAPE="RECT"/>
+</node>
+<node TEXT="convertParentToChild.groovy" ID="ID_202355907" CREATED="1357803016822" MODIFIED="1388810757299">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
 <attribute NAME="menuTitleKey" VALUE="wikd.cvrtParent2Child"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#9999ff" SHAPE="RECT"/>
 </node>
-<node TEXT="cvrtAttr2Child.groovy" ID="ID_1847929515" CREATED="1358814771203" MODIFIED="1362733692980">
+<node TEXT="convertChildToParent.groovy" ID="ID_916231873" CREATED="1357803701257" MODIFIED="1388810741857">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.cvrtAttr2Child"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.cvrtChild2Parent"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
 <attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt A"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta M"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#9999ff" SHAPE="RECT"/>
+</node>
+<node TEXT="covertToGrandparent.groovy" ID="ID_825764875" CREATED="1388784638814" MODIFIED="1388811170074">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="All up one"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="alt P"/>
 <attribute NAME="execute_scripts_without_asking" VALUE="true"/>
 <attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
 </node>
-<node TEXT="cvrtNote2Child.groovy" ID="ID_1236612243" CREATED="1362698402250" MODIFIED="1362733701541">
+<node TEXT="deleteFirstChars.groovy" ID="ID_906915767" CREATED="1357718540957" MODIFIED="1388809998762">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.cvrtNote2Child"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.deleteFirstChars"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdDelete"/>
 <attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt N"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt T"/>
 <attribute NAME="execute_scripts_without_asking" VALUE="true"/>
 <attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#00cc66" SHAPE="RECT"/>
 </node>
-<node TEXT="cvrtDetail2Child.groovy" ID="ID_436412664" CREATED="1362698402259" MODIFIED="1362734231991">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.cvrtDetail2Child"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdConvert"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt X"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="joinPeriod.groovy" ID="ID_1416066303" CREATED="1357718506311" MODIFIED="1359873017980">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.joinPeriod"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta PERIOD"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="joinComma.groovy" ID="ID_426652560" CREATED="1357718540951" MODIFIED="1359873012332">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.joinComma"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta COMMA"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="joinSpace.groovy" ID="ID_737637147" CREATED="1357718569572" MODIFIED="1359873009510">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.joinSpace"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta SPACE"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="joinChars.groovy" ID="ID_326406537" CREATED="1357718596648" MODIFIED="1359873005453">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.joinChars"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta J"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitBeforeChars.groovy" ID="ID_1144065633" CREATED="1357718569574" MODIFIED="1359872997414">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitBeforeChars"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta S"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitBeforeRegex.groovy" ID="ID_1071316054" CREATED="1358814771204" MODIFIED="1359872994368">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitBeforeRegex"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control meta R"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitAfterChars.groovy" ID="ID_1831941505" CREATED="1359702100939" MODIFIED="1359873031023">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitAfterChars"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="alt meta S"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitAfterRegex.groovy" ID="ID_102192877" CREATED="1359702100940" MODIFIED="1359873033115">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitAfterRegex"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="alt meta R"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitChars.groovy" ID="ID_409172412" CREATED="1357718596650" MODIFIED="1359873036879">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitChars"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt S"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitRegex.groovy" ID="ID_1758323236" CREATED="1358814771207" MODIFIED="1359873039787">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitRegex"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt R"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitPeriod.groovy" ID="ID_262871351" CREATED="1357718506317" MODIFIED="1359873042874">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitPeriod"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt PERIOD"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitComma.groovy" ID="ID_502099692" CREATED="1357718540955" MODIFIED="1359873050181">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitComma"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt COMMA"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="splitSpace.groovy" ID="ID_1089160930" CREATED="1357718569576" MODIFIED="1359873053857">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.splitSpace"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt SPACE"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="deleteLastChars.groovy" ID="ID_153687606" CREATED="1357718506319" MODIFIED="1358028490223">
+<node TEXT="deleteLastChars.groovy" ID="ID_153687606" CREATED="1357718506319" MODIFIED="1388809998764">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
 <attribute NAME="menuTitleKey" VALUE="wikd.deleteLastChars"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdDelete"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#00cc66" SHAPE="RECT"/>
 </node>
-<node TEXT="deleteLastRegex.groovy" ID="ID_1376612866" CREATED="1358814771205" MODIFIED="1358815206937">
+<node TEXT="deleteFirstRegex.groovy" ID="ID_215172454" CREATED="1358814771206" MODIFIED="1388810277582">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.deleteLastRegex"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.deleteFirstRegex"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdDelete"/>
 <attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="shift control T"/>
+<attribute NAME="keyboardShortcut" VALUE="ctrl alt W"/>
 <attribute NAME="execute_scripts_without_asking" VALUE="true"/>
 <attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ffff66" SHAPE="RECT"/>
 </node>
-<node TEXT="deleteFirstChars.groovy" ID="ID_906915767" CREATED="1357718540957" MODIFIED="1358028490225">
+<node TEXT="deleteLastRegex.groovy" ID="ID_1376612866" CREATED="1358814771205" MODIFIED="1388810292329">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.deleteFirstChars"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.deleteLastRegex"/>
 <attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdDelete"/>
 <attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="control alt T"/>
+<attribute NAME="keyboardShortcut" VALUE="ctrl meta W"/>
 <attribute NAME="execute_scripts_without_asking" VALUE="true"/>
 <attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
 <attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
-</node>
-<node TEXT="deleteFirstRegex.groovy" ID="ID_215172454" CREATED="1358814771206" MODIFIED="1358815193820">
-<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
-<attribute NAME="menuTitleKey" VALUE="wikd.deleteFirstRegex"/>
-<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdDelete"/>
-<attribute NAME="executionMode" VALUE="on_single_node"/>
-<attribute NAME="keyboardShortcut" VALUE="shift alt T"/>
-<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
-<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
-<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
-<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ffff66" SHAPE="RECT"/>
 </node>
 <node TEXT="deleteLinks.groovy" ID="ID_295547185" CREATED="1358815388593" MODIFIED="1358822600870">
 <attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
 <attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
 <attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
 </node>
+<node TEXT="joinAppendChars.groovy" ID="ID_1788412203" CREATED="1388792515339" MODIFIED="1388809952645">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="Append characters to node"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="ctrl meta G"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ccff99" SHAPE="RECT"/>
 </node>
-<node TEXT="zips" POSITION="right" ID="ID_269135974" CREATED="1357715827053" MODIFIED="1364327418299">
+<node TEXT="joinPrependChars.groovy" ID="ID_682961590" CREATED="1388792515333" MODIFIED="1388809952646">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="Prepend characters to node"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="ctrl alt G"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ccff99" SHAPE="RECT"/>
+</node>
+<node TEXT="joinComma.groovy" ID="ID_426652560" CREATED="1357718540951" MODIFIED="1388809885228">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.joinComma"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta COMMA"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#cccc00" SHAPE="RECT"/>
+</node>
+<node TEXT="splitComma.groovy" ID="ID_502099692" CREATED="1357718540955" MODIFIED="1388809885229">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitComma"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt COMMA"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#cccc00" SHAPE="RECT"/>
+</node>
+<node TEXT="joinCopyUnder.groovy" ID="ID_1635536657" CREATED="1388776357464" MODIFIED="1388810705173">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="Copy under..."/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="ctrl meta V"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ff66cc" SHAPE="RECT"/>
+</node>
+<node TEXT="joinCutUnder.groovy" ID="ID_487205545" CREATED="1388777087427" MODIFIED="1388810701631">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="Cut and paste under "/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="ctrl alt V"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ff66cc" SHAPE="RECT"/>
+</node>
+<node TEXT="joinChars.groovy" ID="ID_326406537" CREATED="1357718596648" MODIFIED="1388810678433">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.joinChars"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt J"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#cccccc" SHAPE="RECT"/>
+</node>
+<node TEXT="joinNoChar.groovy" ID="ID_250771741" CREATED="1388774300392" MODIFIED="1388810675862">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.joinNoChars"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta J"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#cccccc" SHAPE="RECT"/>
+</node>
+<node TEXT="joinPeriod.groovy" ID="ID_1416066303" CREATED="1357718506311" MODIFIED="1388809862311">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.joinPeriod"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta PERIOD"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#9999ff" SHAPE="RECT"/>
+</node>
+<node TEXT="splitPeriod.groovy" ID="ID_262871351" CREATED="1357718506317" MODIFIED="1388809862314">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitPeriod"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt PERIOD"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#9999ff" SHAPE="RECT"/>
+</node>
+<node TEXT="joinSpace.groovy" ID="ID_737637147" CREATED="1357718569572" MODIFIED="1388809841981">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.joinSpace"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdJoin"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta SPACE"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#66ffcc" SHAPE="RECT"/>
+<edge COLOR="#00007c"/>
+</node>
+<node TEXT="splitSpace.groovy" ID="ID_1089160930" CREATED="1357718569576" MODIFIED="1388809841982">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitSpace"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt SPACE"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<edge COLOR="#00007c"/>
+<cloud COLOR="#66ffcc" SHAPE="RECT"/>
+</node>
+<node TEXT="splitAfterChars.groovy" ID="ID_1831941505" CREATED="1359702100939" MODIFIED="1388810063845">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitAfterChars"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="alt meta S"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ff6666" SHAPE="RECT"/>
+</node>
+<node TEXT="splitBeforeChars.groovy" ID="ID_1144065633" CREATED="1357718569574" MODIFIED="1388810063846">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitBeforeChars"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta S"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ff6666" SHAPE="RECT"/>
+</node>
+<node TEXT="splitChars.groovy" ID="ID_409172412" CREATED="1357718596650" MODIFIED="1388811009777">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitChars"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt S"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#ff6666" SHAPE="RECT"/>
+</node>
+<node TEXT="splitAfterRegex.groovy" ID="ID_102192877" CREATED="1359702100940" MODIFIED="1388810081877">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitAfterRegex"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="alt meta R"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#33ff33" SHAPE="RECT"/>
+</node>
+<node TEXT="splitBeforeRegex.groovy" ID="ID_1071316054" CREATED="1358814771204" MODIFIED="1388810081877">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitBeforeRegex"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control meta R"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#33ff33" SHAPE="RECT"/>
+</node>
+<node TEXT="splitRegex.groovy" ID="ID_1758323236" CREATED="1358814771207" MODIFIED="1388811015312">
+<attribute_layout NAME_WIDTH="206" VALUE_WIDTH="206"/>
+<attribute NAME="menuTitleKey" VALUE="wikd.splitRegex"/>
+<attribute NAME="menuLocation" VALUE="/menu_bar/edit/wikdSplit"/>
+<attribute NAME="executionMode" VALUE="on_single_node"/>
+<attribute NAME="keyboardShortcut" VALUE="control alt R"/>
+<attribute NAME="execute_scripts_without_asking" VALUE="true"/>
+<attribute NAME="execute_scripts_without_file_restriction" VALUE="true"/>
+<attribute NAME="execute_scripts_without_write_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_exec_restriction" VALUE="false"/>
+<attribute NAME="execute_scripts_without_network_restriction" VALUE="false"/>
+<cloud COLOR="#33ff33" SHAPE="RECT"/>
+</node>
+</node>
+<node TEXT="zips" POSITION="right" ID="ID_269135974" CREATED="1357715827053" MODIFIED="1388813237613">
 <edge COLOR="#007c00"/>
 <attribute_layout NAME_WIDTH="100" VALUE_WIDTH="100"/>
 <richcontent TYPE="NOTE">
   </head>
   <body>
     <p>
-      An add-on may contain any number of nodes containing zip files.
+      An add-on may contain any number of nodes containing ZIP files.
     </p>
     <p>
       
     </p>
     <p>
-      &#160;- The immediate child nodes contain a description of the zip. The devtools script releaseAddOn.groovy allows automatic zip creation if the name of this node matches a directory in the current directory.
+      - The immediate child nodes contain a description of the ZIP. The devtools script <i>releaseAddOn.groovy</i> allows automatic ZIP creation if the name of this node matches a directory in the current directory.
     </p>
     <p>
       
     </p>
     <p>
-      &#160;- The child nodes of these nodes contain the actual zip files.
+      - The child nodes of these nodes contain the actual ZIP files.
     </p>
     <p>
       
     </p>
     <p>
-      &#160;- Any zip file will be extracted in the &lt;installationbase&gt;. Currently, &lt;installationbase&gt; is always Freeplane's &lt;userhome&gt;, e.g. ~/.freeplane/1.2.
+      - Any ZIP file will be extracted in &lt;installationbase&gt;. Currently, &lt;installationbase&gt; is always Freeplane's &lt;userhome&gt;, e.g. ~/.freeplane/1.2.
     </p>
     <p>
       
     </p>
     <p>
-      &#160;- The files will be processed in the sequence as seen in the map.
+      - The files will be processed in the sequence as seen in the map.
     </p>
     <p>
       
     </p>
     <p>
-      &#160;- Zip files must be uploaded into the map via the script <i>Tools-&gt;Scripts-&gt;Insert Binary</i>&#160;since they have to be (base64) encoded as simple strings.
+      - ZIP files must be loaded into the map via the script <i>Tools-&gt;Scripts-&gt;Insert Binary</i> since they have to be (base64) encoded as simple strings.
     </p>
   </body>
 </html>
 
 </richcontent>
 </node>
-<node TEXT="images" POSITION="right" ID="ID_112966804" CREATED="1357715827065" MODIFIED="1364327418302">
+<node TEXT="images" POSITION="right" ID="ID_112966804" CREATED="1357715827065" MODIFIED="1388813237617">
 <edge COLOR="#7c007c"/>
 <richcontent TYPE="NOTE">
 
   </head>
   <body>
     <p>
-      An add-on may define any number of images as child nodes of the images node. The actual image data has to be placed as base64 encoded binary data into the text of a subnode.
-    </p>
-    <p>
-      The images are saved to the <i>${installationbase}/resources/images</i>&#160;directory.
+      An add-on may define any number of images as child nodes of the <b><i>images</i></b> node.
     </p>
     <p>
       
     </p>
     <p>
+      Images are saved to the <b><i>${installationbase}/resources/images</i></b> directory.
+    </p>
+    <p>
       The following images should be present:
     </p>
     <ul>
       <li>
-        <i>${name}-icon.png</i>, like <i>oldicons-theme-icon.png</i>. This will be used in the app-on overview.
+        <i>${name}-icon.png</i>, like <i>oldicons-theme-icon.png</i>. This will be used in the add-on overview.
       </li>
       <li>
-        <i>${name}-screenshot-1.png</i>, like <i>oldicons-theme-screenshot-1.png</i>. This will be used in the app-on details dialog. Further images can be included but they are not used yet.
+        <i>${name}-screenshot-1.png</i>, like <i>oldicons-theme-screenshot-1.png</i>. This will be used in the add-on details dialog. Further images can be included but they are not used yet.
       </li>
     </ul>
     <p>
-      Images can be added automatically by releaseAddOn.groovy or must be uploaded into the map via the script <i>Tools-&gt;Scripts-&gt;Insert Binary</i>&#160;since they have to be (base64) encoded as simple strings.
+      Images can be added automatically with <b><i>releaseAddOn.groovy</i></b> or loaded into the map with <b><i>Tools &#8594; Scripts &#8594; Insert Binary</i></b>. The actual image data has to be placed as BASE64 encoded binary data into the text of a subnode.
     </p>
   </body>
 </html>
 <attribute_layout NAME_WIDTH="100" VALUE_WIDTH="100"/>
 </node>
 </node>
-<node TEXT="jars" POSITION="right" ID="ID_239916738" CREATED="1364327418304" MODIFIED="1364327418307">
+<node TEXT="jars" POSITION="right" ID="ID_239916738" CREATED="1364327418304" MODIFIED="1388813237621">
 <edge COLOR="#7c0000"/>
 <richcontent TYPE="NOTE">
 
   </head>
   <body>
     <p>
-      An add-on may define any number of jars as child nodes of the jars node. The actual jar data has to be placed as base64 encoded binary data into the text of a subnode.
-    </p>
-    <p>
-      The jars are saved to the <i>${installationbase}/jars</i>&#160;directory.
+      An add-on may define any number of jars as child nodes of the <b><i>jars</i></b> node.
     </p>
     <p>
       
     </p>
     <p>
-      Jars can be added automatically by releaseAddOn.groovy or must be uploaded into the map via the script <i>Tools-&gt;Scripts-&gt;Insert Binary</i>&#160;since they have to be (base64) encoded as simple strings.
+      Jars are saved to the <b><i>${installationbase}/jars</i></b> directory.
+    </p>
+    <p>
+      
+    </p>
+    <p>
+      Jars can be added automatically with <b><i>releaseAddOn.groovy</i></b> or loaded into the map with <b><i>Tools &#8594; Scripts &#8594; Insert Binary</i></b>. The jar's data has to be placed as BASE64 encoded binary data into the text of a subnode.
     </p>
   </body>
 </html>
 <attribute_layout NAME_WIDTH="100" VALUE_WIDTH="100"/>
 </node>
 </node>
+<node TEXT="uninstall" POSITION="left" ID="ID_884173942" CREATED="1388774359388" MODIFIED="1388813525024">
+<edge COLOR="#00007c"/>
+<richcontent TYPE="NOTE">
+
+<html>
+  <head>
+    
+  </head>
+  <body>