[SCM] jedit - Java plugin-based editor for programmers branch, upstream, updated. upstream/4.5.2+dfsg-1-g44424bf

Gabriele Giacone 1o5g4r8o at gmail.com
Sat Jun 16 13:07:56 UTC 2012


The following commit has been merged in the upstream branch:
commit 44424bf38d4e22673f060365de6cd83b9827a6c3
Author: Gabriele Giacone <1o5g4r8o at gmail.com>
Date:   Sat Jun 16 09:35:16 2012 +0000

    Imported Upstream version 5.0~pre1+dfsg

diff --git a/.idea/libraries/Test_Dependencies.xml b/.idea/libraries/Test_Dependencies.xml
new file mode 100644
index 0000000..8cef71f
--- /dev/null
+++ b/.idea/libraries/Test_Dependencies.xml
@@ -0,0 +1,15 @@
+<component name="libraryTable">
+  <library name="Test Dependencies">
+    <CLASSES>
+      <root url="file://$PROJECT_DIR$/lib/test" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="file://$PROJECT_DIR$/lib/javadoc" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="file://$PROJECT_DIR$/lib/sources" />
+    </SOURCES>
+    <jarDirectory url="file://$PROJECT_DIR$/lib/test" recursive="false" />
+    <jarDirectory url="file://$PROJECT_DIR$/lib/sources" recursive="false" type="SOURCES" />
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/runConfigurations/Unit_Tests.xml b/.idea/runConfigurations/Unit_Tests.xml
new file mode 100644
index 0000000..00143b8
--- /dev/null
+++ b/.idea/runConfigurations/Unit_Tests.xml
@@ -0,0 +1,42 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="Unit Tests" type="JUnit" factoryName="JUnit">
+    <extension name="coverage" enabled="false" merge="false" runner="idea">
+      <pattern>
+        <option name="PATTERN" value="org.*" />
+        <option name="ENABLED" value="true" />
+      </pattern>
+    </extension>
+    <module name="jEdit" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="PACKAGE_NAME" value="org.gjt.sp.jedit.io" />
+    <option name="MAIN_CLASS_NAME" value="" />
+    <option name="METHOD_NAME" value="" />
+    <option name="TEST_OBJECT" value="directory" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <option name="TEST_SEARCH_SCOPE">
+      <value defaultName="wholeProject" />
+    </option>
+    <envs />
+    <dir value="$PROJECT_DIR$/test" />
+    <patterns />
+    <RunnerSettings RunnerId="Debug">
+      <option name="DEBUG_PORT" value="38835" />
+      <option name="TRANSPORT" value="0" />
+      <option name="LOCAL" value="true" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="JProfiler">
+      <option name="WINDOW" value="false" />
+      <option name="JVMPI" value="false" />
+      <option name="INTERPRETED" value="false" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Debug" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.idea/runConfigurations/Unit_Tests__Code_Coverage_.xml b/.idea/runConfigurations/Unit_Tests__Code_Coverage_.xml
new file mode 100644
index 0000000..7a823f9
--- /dev/null
+++ b/.idea/runConfigurations/Unit_Tests__Code_Coverage_.xml
@@ -0,0 +1,42 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="Unit Tests (Code Coverage)" type="JUnit" factoryName="JUnit">
+    <extension name="coverage" enabled="true" merge="false" runner="idea">
+      <pattern>
+        <option name="PATTERN" value="org.*" />
+        <option name="ENABLED" value="true" />
+      </pattern>
+    </extension>
+    <module name="jEdit" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="PACKAGE_NAME" value="org.gjt.sp.jedit.io" />
+    <option name="MAIN_CLASS_NAME" value="" />
+    <option name="METHOD_NAME" value="" />
+    <option name="TEST_OBJECT" value="directory" />
+    <option name="VM_PARAMETERS" value="" />
+    <option name="PARAMETERS" value="" />
+    <option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <option name="TEST_SEARCH_SCOPE">
+      <value defaultName="wholeProject" />
+    </option>
+    <envs />
+    <dir value="$PROJECT_DIR$/test" />
+    <patterns />
+    <RunnerSettings RunnerId="Debug">
+      <option name="DEBUG_PORT" value="38377" />
+      <option name="TRANSPORT" value="0" />
+      <option name="LOCAL" value="true" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="JProfiler">
+      <option name="WINDOW" value="false" />
+      <option name="JVMPI" value="false" />
+      <option name="INTERPRETED" value="false" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Debug" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method />
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.idea/runConfigurations/jEdit__Background_Mode_.xml b/.idea/runConfigurations/jEdit__Background_Mode_.xml
new file mode 100644
index 0000000..ce05c5f
--- /dev/null
+++ b/.idea/runConfigurations/jEdit__Background_Mode_.xml
@@ -0,0 +1,28 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="jEdit (Background Mode)" type="Application" factoryName="Application">
+    <log_file path="$PROJECT_DIR$/build/settings/activity.log" checked="false" skipped="true" show_all="false" alias="Activity Log" />
+    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
+    <option name="MAIN_CLASS_NAME" value="org.gjt.sp.jedit.jEdit" />
+    <option name="VM_PARAMETERS" value="-Xmx192M -Djedit.home=$PROJECT_DIR$" />
+    <option name="PROGRAM_PARAMETERS" value="-settings="$PROJECT_DIR$/build/settings" -background" />
+    <option name="WORKING_DIRECTORY" value="" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="jEdit" />
+    <envs />
+    <RunnerSettings RunnerId="JProfiler">
+      <option name="WINDOW" value="false" />
+      <option name="JVMPI" value="false" />
+      <option name="INTERPRETED" value="false" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="AntTarget" enabled="false" antfile="file://$PROJECT_DIR$/build.xml" target="build" />
+      <option name="Run Ant target" value="true" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.idea/runConfigurations/jEdit__Code_Coverage_.xml b/.idea/runConfigurations/jEdit__Code_Coverage_.xml
new file mode 100644
index 0000000..72dde6d
--- /dev/null
+++ b/.idea/runConfigurations/jEdit__Code_Coverage_.xml
@@ -0,0 +1,33 @@
+<component name="ProjectRunConfigurationManager">
+  <configuration default="false" name="jEdit (Code Coverage)" type="Application" factoryName="Application">
+    <log_file path="$PROJECT_DIR$/build/settings/activity.log" checked="false" skipped="true" show_all="false" alias="Activity Log" />
+    <extension name="coverage" enabled="true" merge="false" runner="idea">
+      <pattern>
+        <option name="PATTERN" value="org.*" />
+        <option name="ENABLED" value="true" />
+      </pattern>
+    </extension>
+    <option name="MAIN_CLASS_NAME" value="org.gjt.sp.jedit.jEdit" />
+    <option name="VM_PARAMETERS" value="-Xmx192M -Djedit.home=$PROJECT_DIR$" />
+    <option name="PROGRAM_PARAMETERS" value="-settings="$PROJECT_DIR$/build/settings"" />
+    <option name="WORKING_DIRECTORY" value="" />
+    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
+    <option name="ALTERNATIVE_JRE_PATH" value="" />
+    <option name="ENABLE_SWING_INSPECTOR" value="false" />
+    <option name="ENV_VARIABLES" />
+    <option name="PASS_PARENT_ENVS" value="true" />
+    <module name="jEdit" />
+    <envs />
+    <RunnerSettings RunnerId="JProfiler">
+      <option name="WINDOW" value="false" />
+      <option name="JVMPI" value="false" />
+      <option name="INTERPRETED" value="false" />
+    </RunnerSettings>
+    <RunnerSettings RunnerId="Run" />
+    <ConfigurationWrapper RunnerId="Run" />
+    <method>
+      <option name="AntTarget" enabled="false" antfile="file://$PROJECT_DIR$/build.xml" target="build" />
+      <option name="Run Ant target" value="true" />
+    </method>
+  </configuration>
+</component>
\ No newline at end of file
diff --git a/.idea/runConfigurations/jEdit__background_mode_.xml b/.idea/runConfigurations/jEdit__background_mode_.xml
deleted file mode 100644
index 43e932c..0000000
--- a/.idea/runConfigurations/jEdit__background_mode_.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="jEdit (background mode)" type="Application" factoryName="Application">
-    <log_file path="$PROJECT_DIR$/build/settings/activity.log" checked="false" skipped="true" show_all="false" alias="Activity Log" />
-    <extension name="coverage" enabled="false" merge="false" sample_coverage="true" runner="idea" />
-    <option name="MAIN_CLASS_NAME" value="org.gjt.sp.jedit.jEdit" />
-    <option name="VM_PARAMETERS" value="-Xmx192M -Djedit.home=$PROJECT_DIR$" />
-    <option name="PROGRAM_PARAMETERS" value="-settings="$PROJECT_DIR$/build/settings" -background" />
-    <option name="WORKING_DIRECTORY" value="" />
-    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-    <option name="ALTERNATIVE_JRE_PATH" value="" />
-    <option name="ENABLE_SWING_INSPECTOR" value="false" />
-    <option name="ENV_VARIABLES" />
-    <option name="PASS_PARENT_ENVS" value="true" />
-    <module name="jEdit" />
-    <envs />
-    <RunnerSettings RunnerId="JProfiler">
-      <option name="WINDOW" value="false" />
-      <option name="JVMPI" value="false" />
-      <option name="INTERPRETED" value="false" />
-    </RunnerSettings>
-    <RunnerSettings RunnerId="Run" />
-    <ConfigurationWrapper RunnerId="Run" />
-    <method>
-      <option name="AntTarget" enabled="false" antfile="file://$PROJECT_DIR$/build.xml" target="build" />
-      <option name="Run Ant target" value="true" />
-    </method>
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/.idea/runConfigurations/jEdit__code_coverage_.xml b/.idea/runConfigurations/jEdit__code_coverage_.xml
deleted file mode 100644
index 234ebbd..0000000
--- a/.idea/runConfigurations/jEdit__code_coverage_.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<component name="ProjectRunConfigurationManager">
-  <configuration default="false" name="jEdit (code coverage)" type="Application" factoryName="Application">
-    <log_file path="$PROJECT_DIR$/build/settings/activity.log" checked="false" skipped="true" show_all="false" alias="Activity Log" />
-    <extension name="coverage" enabled="true" merge="false" runner="idea">
-      <pattern>
-        <option name="PATTERN" value="org.*" />
-        <option name="ENABLED" value="true" />
-      </pattern>
-    </extension>
-    <option name="MAIN_CLASS_NAME" value="org.gjt.sp.jedit.jEdit" />
-    <option name="VM_PARAMETERS" value="-Xmx192M -Djedit.home=$PROJECT_DIR$" />
-    <option name="PROGRAM_PARAMETERS" value="-settings="$PROJECT_DIR$/build/settings"" />
-    <option name="WORKING_DIRECTORY" value="" />
-    <option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
-    <option name="ALTERNATIVE_JRE_PATH" value="" />
-    <option name="ENABLE_SWING_INSPECTOR" value="false" />
-    <option name="ENV_VARIABLES" />
-    <option name="PASS_PARENT_ENVS" value="true" />
-    <module name="jEdit" />
-    <envs />
-    <RunnerSettings RunnerId="JProfiler">
-      <option name="WINDOW" value="false" />
-      <option name="JVMPI" value="false" />
-      <option name="INTERPRETED" value="false" />
-    </RunnerSettings>
-    <RunnerSettings RunnerId="Run" />
-    <ConfigurationWrapper RunnerId="Run" />
-    <method>
-      <option name="AntTarget" enabled="false" antfile="file://$PROJECT_DIR$/build.xml" target="build" />
-      <option name="Run Ant target" value="true" />
-    </method>
-  </configuration>
-</component>
\ No newline at end of file
diff --git a/README.SRC.txt b/README.SRC.txt
index 3e092ba..ef03ff6 100644
--- a/README.SRC.txt
+++ b/README.SRC.txt
@@ -8,8 +8,7 @@ General jEdit documentation can be found in the 'doc' directory.
  For all tasks:
 
   - Apache Ant. Get it from <http://ant.apache.org>.
-    1.8 or newer has to be used.
-    1.8.1 cannot be used due to a classloading bug in the <xslt> task.
+    1.8.2 or newer has to be used.
   - The Ant Optional package. This is included in the download from ants website,
     as well as the AntPlugin from the Plugin Manager,
     but not in some default installs on various *nix systems.
@@ -72,6 +71,9 @@ General jEdit documentation can be found in the 'doc' directory.
   If there isn't any, it builds it in front of execution.
   The debug listening for this JVM is enabled.
 
+ - test                    run unit tests
+  runs the available unit tests.
+
  - docs-html               generate HTML docs
   builds the online help in HTML-format in the build-folder, configured in build.properties.
 
diff --git a/build.xml b/build.xml
index 7bcae8a..680f5c3 100644
--- a/build.xml
+++ b/build.xml
@@ -68,14 +68,11 @@
 		unless="init.done">
 		<echo message="Buildfile for ${ant.project.name} (${ant.file})"
 		      level="info"/>
-		<fail message="Ant 1.8 or newer (1.8.1 excluded due to a bug) is needed for jEdit to build, please install it and rerun">
+		<fail message="Ant 1.8.2 or newer is needed for jEdit to build, please install it and rerun">
 			<condition>
-				<or>
-					<not>
-						<antversion atleast="1.8"/>
-					</not>
-					<antversion exactly="1.8.1"/>
-				</or>
+				<not>
+					<antversion atleast="1.8.2"/>
+				</not>
 			</condition>
 		</fail>
 		<fail message="The ant-optional package is needed for jEdit to build, please install it and rerun">
@@ -163,10 +160,10 @@
 			major = Integer.parseInt(build.substring(0,2));
 			minor = Integer.parseInt(build.substring(3,5));
 			beta = Integer.parseInt(build.substring(6,8));
-			bugfix = Integer.parseInt(build.substring(9,11));
+			micro = Integer.parseInt(build.substring(9,11));
 			version = major
 			          + "." + minor
-			          + (beta != 99 ? "pre" + beta : "." + bugfix);
+			          + (beta != 99 ? "pre" + beta : "." + micro);
 			project.setUserProperty("jedit.version", version);
 			project.setUserProperty("jedit.build.number", build);
 			project.setUserProperty("jedit.version.final", Boolean.toString(beta == 99));
@@ -232,11 +229,46 @@
 		       compiler="modern"
 		       encoding="UTF-8"
 		       includeAntRuntime="false">
+			<classpath id="classpath.compile">
+				<fileset dir="${lib.dir}/compile"
+					 includes="*.jar"/>
+			</classpath>
 			<include name="org/**"/>
 			<compilerarg line="${config.build.compilerarg}"/>
 		</javac>
 	</target>
 
+	<target name="compile-test"
+		depends="init,retrieve,compile">
+		<mkdir dir="${classes.dir}/test"/>
+		<depend srcDir="${basedir}/test"
+			destDir="${classes.dir}/test"
+			cache="${classes.dir}"/>
+		<dependset>
+			<srcfilelist files="build.xml"/>
+			<srcfilelist files="ivy.xml"/>
+			<targetfileset dir="${classes.dir}/test"/>
+		</dependset>
+		<javac srcdir="test"
+		       destdir="${classes.dir}/test"
+		       debug="true"
+		       debuglevel="${config.build.debuglevel}"
+		       nowarn="${config.build.nowarn}"
+		       deprecation="${config.build.deprecation}"
+		       source="${target.java.version}"
+		       target="${target.java.version}"
+		       compiler="modern"
+		       encoding="UTF-8"
+		       includeAntRuntime="false">
+			<classpath id="classpath.test">
+				<fileset dir="${lib.dir}/test"
+					 includes="*.jar"/>
+				<pathelement location="${classes.dir}/core"/>
+			</classpath>
+			<compilerarg line="${config.build.compilerarg}"/>
+		</javac>
+	</target>
+
 	<target name="prepare-textArea"
 		depends="init">
 		<delete includeemptydirs="true"
@@ -248,6 +280,7 @@
 		<copy todir="${textAreaPackage}/src">
 			<fileset dir="${basedir}">
 				<include name="modes/*"/>
+				<include name="keymaps/*"/>
 				<include name="org/gjt/sp/jedit/bsh/*"/>
 				<include name="org/gjt/sp/jedit/bsh/**/*"/>
 
@@ -349,10 +382,7 @@
 				<include name="org/gjt/sp/jedit/TextUtilities.java"/>
 				<include name="org/gjt/sp/jedit/actions.dtd"/>
 				<include name="org/gjt/sp/jedit/jedit.props"/>
-				<include name="org/gjt/sp/jedit/jedit_keys.props"/>
-
 				<include name="modes/*"/>
-
 				<include name="org/gjt/sp/util/Log*.java"/>
 				<include name="org/gjt/sp/util/IntegerArray.java"/>
 				<include name="org/gjt/sp/util/IOUtilities.java"/>
@@ -388,8 +418,32 @@
 		</javac>
 	</target>
 
+	<target name="test"
+		depends="init,retrieve,compile,compile-test"
+		description="run unit tests">
+		<delete dir="${build.dir}/test/raw-reports"/>
+		<mkdir dir="${build.dir}/test/raw-reports"/>
+		<junit printsummary="true"
+		       failureproperty="tests.failed"
+		       enabletestlistenerevents="true">
+			<classpath refid="classpath.test"/>
+			<classpath location="${classes.dir}/test"/>
+			<formatter type="xml"/>
+			<batchtest todir="${build.dir}/test/raw-reports">
+				<fileset dir="test"/>
+			</batchtest>
+		</junit>
+		<mkdir dir="${build.dir}/test/merged-reports"/>
+		<junitreport todir="${build.dir}/test/merged-reports">
+			<fileset dir="${build.dir}/test/raw-reports"/>
+			<report todir="${build.dir}/test/reports"/>
+		</junitreport>
+		<fail message="Unit test(s) failed! See reports at ${build.dir}/test/reports/index.html"
+		      if="tests.failed"/>
+	</target>
+
 	<target name="build"
-		depends="init,retrieve,setup,compile"
+		depends="init,retrieve,setup,compile,test"
 		description="build the jEdit JAR-file with full debug-information">
 		<mkdir dir="${jar.location}"/>
 		<jar destfile="${jar.location}/${jar.filename}"
@@ -408,10 +462,12 @@
 				<include name="org/gjt/sp/jedit/icons/**/*.gif"/>
 				<include name="org/gjt/sp/jedit/icons/**/*.jpg"/>
 				<include name="org/gjt/sp/jedit/icons/**/*.png"/>
+				<include name="org/jedit/localization/*.props"/>
 			</fileset>
 		</jar>
 		<copy todir="${jar.location}">
 			<fileset dir="${basedir}">
+				<include name="keymaps/**"/>
 				<include name="macros/**"/>
 				<include name="modes/**"/>
 				<include name="properties/**"/>
@@ -498,7 +554,7 @@
 		description="build the textArea JAR-file with full debug-information">
 		<mkdir dir="${jar.location}"/>
 		<jar destfile="${jar.location}/${ant.project.name}-textArea.jar"
-		     compress="false"
+		     compress="true"
 		     duplicate="fail"
 		     index="true">
 			<fileset dir="${textAreaPackage}/build/"/>
@@ -507,7 +563,7 @@
 				<include name="org/gjt/sp/jedit/syntax/xmode.dtd"/>
 				<include name="org/gjt/sp/jedit/actions.dtd"/>
 				<include name="org/gjt/sp/jedit/jedit.props"/>
-				<include name="org/gjt/sp/jedit/jedit_keys.props"/>
+				<include name="keymaps/*.props"/>
 				<include name="modes/*"/>
 			</fileset>
 			<manifest>
@@ -609,11 +665,11 @@
 	<target name="generate-doc-news"
 		depends="init,retrieve,setup,unpack-docbook-xsl">
 		<dependset.html>
-			<srcfileset dir="doc/news45"/>
-			<targetfileset dir="${jar.location}/doc/news45"/>
+			<srcfileset dir="doc/whatsnew"/>
+			<targetfileset dir="${jar.location}/doc/whatsnew"/>
 		</dependset.html>
 		<contrib:if>
-			<available file="${jar.location}/doc/news45/toc.xml"
+			<available file="${jar.location}/doc/whatsnew/toc.xml"
 				   type="file"/>
 			<contrib:then>
 				<echo message="News is up-to-date"
@@ -621,10 +677,10 @@
 			</contrib:then>
 			<contrib:else>
 				<xslt.doc style="doc/jedithtml.xsl"
-					  in="doc/news45/news.xml"
-					  out="${jar.location}/doc/news45/index.html">
+					  in="doc/whatsnew/news.xml"
+					  out="${jar.location}/doc/whatsnew/index.html">
 					<param name="base.dir"
-					       expression="${jar.location}/doc/news45/"/>
+					       expression="${jar.location}/doc/whatsnew/"/>
 				</xslt.doc>
 			</contrib:else>
 		</contrib:if>
@@ -701,7 +757,9 @@
 				       includeAntRuntime="true">
 					<compilerarg line="${config.build.compilerarg}"/>
 				</javac>
-				<javadoc sourcepath="${basedir}"
+				<javadoc
+					 locale="en"
+					 sourcepath="${basedir}"
 					 destdir="${classes.dir}/javadoc/api"
 					 packagenames="org.*"
 					 classpath="${classes.dir}/core"
@@ -711,15 +769,21 @@
 					 use="true"
 					 author="true"
 					 splitindex="true"
-					 locale="en"
-					 windowtitle="jEdit API"
+					 windowtitle="jEdit API Documentation"
 					 doctitle="jEdit API"
 					 failonerror="true"
-					 source="${target.java.version}">
-					<group title="jEdit"
-					       packages="org.gjt.sp*"/>
+					 source="${target.java.version}"
+					 encoding="UTF-8"
+					 docencoding="UTF-8"
+					 charset="UTF-8">
+					<group title="jEdit 5 API"
+					       packages="org.jedit.*"/>					       
+					<group title="jEdit 4 API"
+					       packages="org.gjt.*"/>
 					<group title="BeanShell"
 					       packages="org.gjt.sp.jedit.bsh*"/>
+					<tag name="todo" scope="all" description="To do:"/>
+					<tag name="example" scope="all" description="Example:"/>
 				</javadoc>
 			</contrib:else>
 		</contrib:if>
@@ -874,17 +938,20 @@
 		depends="init,setup,prepare-dist-files"
 		description="build the Java-installer">
 		<tar destfile="${dist.dir}/jedit-macros.tar.bz2"
+		     longfile="gnu"
 		     compression="bzip2">
 			<tarfileset id="jedit-macros"
 				    dir="${dist.dir}"
 				    includes="macros/**"/>
 		</tar>
 		<tar destfile="${dist.dir}/jedit-program.tar.bz2"
+		     longfile="gnu"
 		     compression="bzip2">
 			<tarfileset id="jedit-program"
 				    dir="${dist.dir}"
 				    includes="doc/**
 					      jars/**
+					      keymaps/**
 					      modes/**
 					      properties/**
 					      startup/**
@@ -893,29 +960,26 @@
 					      jars/MacOSX.jar"/>
 		</tar>
 		<tar destfile="${dist.dir}/jedit-windows.tar.bz2"
+		     longfile="gnu"
 		     compression="bzip2">
 			<tarfileset id="jedit-windows"
 				    dir="${dist.dir}"
 				    includes="jedit.exe"/>
 		</tar>
 		<tar destfile="${dist.dir}/jedit-mac.tar.bz2"
+		     longfile="gnu"
 		     compression="bzip2">
 			<tarfileset id="jedit-mac"
 				    dir="${dist.dir}"
 				    includes="jars/MacOSX.jar"/>
 		</tar>
 		<tar destfile="${dist.dir}/jedit-api.tar.bz2"
+		     longfile="gnu"
 		     compression="bzip2">
 			<tarfileset id="jedit-api"
 				    dir="${dist.dir}"
 				    includes="doc/api/**"/>
 		</tar>
-		<tar destfile="${dist.dir}/jedit-os2.tar.bz2"
-		     compression="bzip2">
-			<tarfileset id="jedit-os2"
-				    dir="${dist.dir}/classes/package-files/os2"
-				    includes="jedit.cmd"/>
-		</tar>
 		<antcall target="compile-installer">
 			<param name="config.build.debuglevel"
 			       value="lines,source"/>
@@ -952,10 +1016,6 @@
 				   disksizeproperty="jedit-api.disksize">
 			<fileset refid="jedit-api"/>
 		</mod:calculatesize>
-		<mod:calculatesize realsizeproperty="jedit-os2.realsize"
-				   disksizeproperty="jedit-os2.disksize">
-			<fileset refid="jedit-os2"/>
-		</mod:calculatesize>
 		<copy todir="${dist.dir}/classes/installer/installer"
 		      encoding="UTF-8"
 		      overwrite="true">
@@ -983,10 +1043,6 @@
 					value="${jedit-api.realsize}"/>
 				<filter token="jedit-api.disksize"
 					value="${jedit-api.disksize}"/>
-				<filter token="jedit-os2.realsize"
-					value="${jedit-os2.realsize}"/>
-				<filter token="jedit-os2.disksize"
-					value="${jedit-os2.disksize}"/>
 			</filterset>
 		</copy>
 		<jar destfile="${dist.dir}/${dist.jar.filename}"
@@ -1005,7 +1061,6 @@
 				    includes="jedit-api.tar.bz2
 					      jedit-mac.tar.bz2
 					      jedit-macros.tar.bz2
-					      jedit-os2.tar.bz2
 					      jedit-windows.tar.bz2
 					      jedit-program.tar.bz2"
 				    prefix="installer"/>
@@ -1040,6 +1095,7 @@
 		description="build the src-archive">
 		<mkdir dir="${dist.dir}"/>
 		<tar destfile="${dist.dir}/${src.archive.filename}"
+		     longfile="gnu"
 		     compression="bzip2">
 			<tarfileset dir="${basedir}"
 				    excludes="${config.lib.dir}/**
@@ -1128,6 +1184,7 @@
 			<javafileset dir="${dist.dir}"
 				     includes="doc/**
 					       jars/**
+					       keymaps/**
 					       macros/**
 					       modes/**
 					       properties/**
@@ -1197,15 +1254,18 @@
 			<contrib:else>
 				<tar destfile="${dist.dir}/jedit${jedit.version}-dist-mac-finish.tar.bz2"
 				     basedir="${basedir}"
+				     longfile="gnu"
 				     includes="build.xml
 					       ivy.xml
 					       ivysettings.xml
 					       icons/file.icns
 					       icons/icon.icns
+					       org/gjt/sp/jedit/jEdit.java
 					       ${config.dist.dir}/${jar.filename}
 					       ${config.dist.dir}/classes/jarbundler/**
 					       ${config.dist.dir}/doc/**
 					       ${config.dist.dir}/jars/**
+					       ${config.dist.dir}/keymaps/**
 					       ${config.dist.dir}/macros/**
 					       ${config.dist.dir}/modes/**
 					       ${config.dist.dir}/properties/**
@@ -1336,6 +1396,7 @@
 		depends="init,setup,prepare-dist-files"
 		description="build the Slackware Package">
 		<tar destfile="${dist.dir}/jedit-${jedit.version}-noarch-1sao.tgz"
+		     longfile="gnu"
 		     compression="gzip">
 			<tarfileset file="${basedir}"
 				    username="root"
@@ -1369,6 +1430,7 @@
 			<tarfileset dir="${dist.dir}"
 				    includes="doc/**
 					      jars/**
+					      keymaps/**
 					      macros/**
 					      modes/**
 					      properties/**
@@ -1507,6 +1569,7 @@
 					   classes/package-files/linux/jedit.1.gz
 					   doc/**
 					   jars/**
+					   keymaps/**
 					   macros/**
 					   modes/**
 					   properties/**
@@ -1564,6 +1627,7 @@
 				     fullpath="usr/share/jEdit/"/>
 			<datafileset dir="${dist.dir}"
 				     includes="doc/**
+					       keymaps/**
 					       macros/**
 					       modes/**
 					       properties/**
@@ -1887,6 +1951,7 @@ Press Return key to continue...
 			<contrib:else>
 				<tar destfile="${dist.dir}/jedit${jedit.version}-dist-win-finish.tar.bz2"
 				     basedir="${basedir}"
+				     longfile="gnu"
 				     includes="build.properties.sample
 					       build.xml
 					       ivy.xml
@@ -1894,12 +1959,14 @@ Press Return key to continue...
 					       icons/jedit.ico
 					       icons/WindowsInstallerSmallImage.bmp
 					       icons/WindowsInstallerImage.bmp
+					       org/gjt/sp/jedit/jEdit.java
 					       package-files/windows/win32installer.iss
 					       ${config.dist.dir}/jedit.exe
 					       ${config.dist.dir}/${jar.filename}
 					       ${config.dist.dir}/classes/package-files/windows/**
 					       ${config.dist.dir}/doc/**
 					       ${config.dist.dir}/jars/**
+					       ${config.dist.dir}/keymaps/**
 					       ${config.dist.dir}/macros/**
 					       ${config.dist.dir}/modes/**
 					       ${config.dist.dir}/properties/**
@@ -1942,6 +2009,7 @@ Press Return key to continue...
 							<filename name="macros/**"/>
 							<filename name="doc/**"/>
 							<filename name="jars/**"/>
+							<filename name="keymaps/**"/>
 							<filename name="modes/**"/>
 							<filename name="properties/**"/>
 							<filename name="startup/**"/>
diff --git a/doc/CHANGES.txt b/doc/CHANGES.txt
index e30eba6..2a47e6c 100644
--- a/doc/CHANGES.txt
+++ b/doc/CHANGES.txt
@@ -1,647 +1,368 @@
-jEdit 4.5 version history
-       (changes since jEdit 4.4.2)
+jEdit 5.0 version history
+       (changes since jEdit 4.5.2)
 :encoding=UTF-8:
 
-{{{ Version 4.5.2
+{{{ Version 5.0pre1
 
-Thanks to Björn "Vampire" Kautler, Alan Ezust, Jarek Czekalski, 
-and Matthieu Casanova for contributing to this release.
+Thanks to Björn "Vampire" Kautler, Nathan Gray, Evan Wright, Alan Ezust, Dale
+Anson, Matthieu Casanova, Olivier Pisano, Jimmy Chaw, peibl, Robert Schwenn,
+Martin Raspe, Max Funk, SPennington, Ingo Tomahogh, Jarek Czekalski, Jojaba,
+Stephen Blackheath, Milan ÄŒernil, Makarius, Chris Sullins, Peter C. Chapin,
+Thomas Meyer, Tom Power and Donovaly for contributing to this release.
 
-{{{ Bug Fixes
-
-- Fixed freezes on hypersearch with encoding errors.
-  (#3502585 Jarek Czekalski)
-
-- Fixed IO error when changing VFS Browser filter content
-  (#3502820 Matthieu Casanova)
-
-- Fixed NPE when opening View option pane for the first time on a fresh
-  installation (#3520577 Matthieu Casanova)
+{{{ Bug fixes
 
-- Fixed favorites menu actions (#3512250 Matthieu Casanova)
+- Fixed exception in dockable window system when loading a plugin using
+  jar libraries (#3532429 Matthieu Casanova)
 
-- Remove jar cache when unloading a plugin (#3514022 Matthieu Casanova)
+- The plugin description in install panel now supports html
+  (#3509183 Matthieu Casanova)
 
-}}}
-{{{ UI
+- The mirror "Plugin Central default" now works as auto selecting
+  mirror and is used by default. Previous default was hardcoded "switch"
+  (mirror.switch.ch) as workaround, but one could easily stuck on broken
+  "Plugin Central default" and got strange errors.
+  (#2913393, #3501210 - Kazutoshi Satoda)
 
-- Changed error list dialog size to a fixed size of 80x25 characters.
-  (Jarek Czekalski)
-
-}}}
-
-}}}
+- Avoided annoying behavior of electric keys that canceled obvious
+  manual indentation. Now they take effect only when the current level
+  of indentation is same with automatic indentation.
+  (#1936678, #2332140 Jarek Czekalski, Kazutoshi Satoda)
 
-{{{ Version 4.5.1
+- Fixed "Backup on every save" resets file permissions. Renaming of the file
+  was replaced with copying. (#1803073 Jarek Czekalski)
 
-Thanks to Björn "Vampire" Kautler, Matthieu Casanova, Kazutoshi Satoda,
-Alan Ezust, and Max Funk for contributing to this release.
+- Added backup of remote files, for example opened with FTP plugin.
+  (#1525654 Jarek Czekalski)
 
-{{{ Bug Fixes
+- Fixed NPE which was shown in place of a proper error message for empty
+  keyword elements in mode XML. (Kazutoshi Satoda)
 
-- Fixed memory leaks which happened when split panes or multiple views
-  are used. (Kazutoshi Satoda)
+- Cannot DnD betweeen PingPongLists (#3501020 Jarek Czekalski)
 
-- Fixed unreasonable slow down which could happen with complex syntax
-  rules and large files. (Kazutoshi Satoda)
+- Fixed macros at menu split are unaccessible (#3512853 Jarek Czekalski)
 
-- Fixed memory leaks which could climb to be observable with complex
-  syntax rules and large files. (Kazutoshi Satoda)
+- If the same plugin is installed in home and install folder, only the newest
+  is loaded. (#1848802 Matthieu Casanova)
 
-- Made basic edit operations aware of characters above BMP and combining
-  character sequences.
-  (SF.net bug #3040720 - Kazutoshi Satoda)
+- Fixed rectangular selection constructor (patch #3440310 peibl)
 
-- The Install/Update plugin dialog with progress bar should not show the
-  progression of installation in it's title (#3485497) (Matthieu Casanova)
+- When copying a file in VFSBrowser, if a file with the same name already exists
+  a suffix copy-n is added to avoid deleting the existing file
+  (#3470759 Matthieu Casanova)
 
-- If the plugin list was not already loaded, there is no reason to load it
-  because of a property change (#3485645) (Matthieu Casanova)
+- Fixed Ctrl + key not working in completion popup (Matthieu Casanova)
 
-- Fixed status bar widget editing (#3414671) (Matthieu Casanova)
+- Fixed copy of Hypersearch results adding \r in the clipboard
+  (#3142456 Matthieu Casanova)
 
-- Fixed text area corruption (strange exceptions and/or inconsistent
-  display) which could happen when multiple files are opened
-  simultaneously in a text area. This could also happen on some other
-  minor conditions. (SF.net bug #3442116 - Kazutoshi Satoda)
+- The Java based installer now correctly handles GNU style long filenames in
+  the installer package and thus does not corrupt the JavaDoc files anymore
+  (#2327520 Björn "Vampire" Kautler)
 
-- Wrong chars in auxiliary fonts (Max Funk - #3474765, 3474534)
+- Several message boxes were not being created on the EDT which would result in
+  tiny, non-resizable message boxes. (#3441535 Dale Anson)
 
 }}}
+{{{ API Changes
 
-}}}
-
-{{{ Version 4.5.0
-
-Thanks to Shlomy Reinstein, Alan Ezust, Jarek Czekalski, Michael Pradel, Evan
-Wright, Matthieu Casanova, Nathan Gray and Björn "Vampire" Kautler for
-contributing to this release.
-
-{{{ Bug Fixes
-
-- Inner class of FilteredListModel passes wrong "this" (patch# 3477759 - 
-  Michael Pradel)
-
-- Large file mode text description dialog (#3456370) (Matthieu Casanova)
-
-- VFS Browser was stuck if trying to browse a VFS that needed a session but the
-  session could not be opened (#3471386) (Matthieu Casanova)
-
-- Fixed Copy_Line macro that was copying one character of the next line
-  (#3454377) (Matthieu Casanova)
-
-- Fixed a NPE when trying to activate a plugin if one of it's dependencies is
-  missing (#2077205) (Matthieu Casanova)
-
-- When parsing buffer-local properties, there was a problem with escape
-  processing that prevented buffer-local properties to be read sometimes
-  (Bug #3438680 - Björn "Vampire" Kautler)
+- New method Debug.compDelay, for debugging purposes (Jarek Czekalski)
 
-- Building offline was prevented by a bug in Ivy, this is workarounded
-  now in the Ivy settings for jEdit. (Bug #3437212 - Björn "Vampire" Kautler)
+- Made EditBus.send uninterruptible, as it was before putting handling of
+  messages into EDT (r17139, to 4.4).
 
-- Fixed #3163058: middle mouse button paste doesn't respect gutter selection.
-  (Shlomy Reinstein)
+- New method ThreadUtilities.runInDispatchThreadNow() (Jarek Czekalski)
 
-- ":encoding=...:" was treated as buffer local property and caused
-  confusion about what encoding was used at loading/saving the buffer.
-  (SF.net patch #3434651 - Jarek Czekalski, for bug #1643580)
+- New VFS capability: NON_AWT_SESSION_CAP and a helper method
+  VFS.createVFSSessionSafe that frees the caller from entering the EDT
+  thread in most cases. All built-in filesystems have this capability set.
+  (Jarek Czekalski)
 
-- Fixed #3434527: Jump to wrong line with folded target (Evan Wright)
+- The status bar widget service is now
+  org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory instead of
+  org.gjt.sp.jedit.gui.statusbar.StatusWidget (only the name in service.xml)
+  is modified, because the service class is a StatusWidgetFactory and not a
+  StatusWidget (#3521413 Matthieu Casanova)
 
-- \r (0x0A, CR) could be pasted from clipboard into buffer.
-  (Bug #3142456 - Matthieu Casanova)
+- New public constructor for org.gjt.sp.jedit.gui.ErrorListDialog
+  allowing for specifying custom urgency (priority). (Jarek Czekalski)
 
-- Added select all and select none buttons to PingPongList fixing a bug in
-  EncodingsOptionPane (#3434850) (Matthieu Casanova)
+- TextArea.isCaretVisible became public (patch #3518424 Makarius)
 
-- Fixed #3474515 - MiscUtilities.expandVariables does not expand ~ (Alan Ezust)
+- Fixed jedit exit procedure. Now all views are closed. Earlier only
+  the current view was properly closed. This may be important for plugins
+  that were workarounding the issue, as now they will get more
+  ViewUpdate.CLOSED messages. (Jarek Czekalski)
 
-}}}
-{{{ UI
+- The JEditEmbeddedTextArea and StandaloneTextArea do not create an empty
+  popup menu anymore.
+  To add a context menu in your JEditEmbeddedTextArea, please override
+  createPopupMenu(MouseEvent evt) as before, but also call
+  setRightClickPopupEnabled(true) in your constructor (Matthieu Casanova)
 
-- Changed menus to use Mac-specific symbols for accelerator keys when using OS X
-  and the native look & feel (SF.net patch #1950147 - Nathan Gray)
+- New jEdit.getCurrentLanguage() method that returns the language used  by jEdit
+  (Matthieu Casanova)
 
-}}}
-{{{ Miscellaneous
+- New method JEditBuffer.insert(int offset, CharSequence seq) to insert
+  text in a buffer. (Matthieu Casanova)
+
+- New constructors for CopyFileWorker:
+  CopyFileWorker(Component comp, VFSFile[] vfsFiles, String target)
+  CopyFileWorker(Component comp, VFSFile[] vfsFiles, String target,
+  			Behavior behavior)
+  CopyFileWorker(Component comp, File[] files, String target)
+  CopyFileWorker(Component comp, File[] files, String target, Behavior behavior)
+  to allow copy of multiple files at the same time (Matthieu Casanova)
+
+- New VFS.copy() methods:
+  copy(ProgressObserver progress, VFS sourceVFS, Object sourceSession,
+  	String sourcePath, VFS targetVFS, Object targetSession,
+  	String targetPath, Component comp, boolean canStop,
+  	boolean sendVFSUpdate)
+  copy(ProgressObserver progress, String sourcePath,String targetPath,
+  	Component comp, boolean canStop, boolean sendVFSUpdate)
+  (Matthieu Casanova)
 
-- Document jEdit's command line parameters into Activity Log 
-  (#2960844 - Alan Ezust)
+- New methods MiscUtilities.getCompleteBaseName() to return
+  the (complete) base names of a file (until the last .) and
+  and getBaseName(), to replace the badly named getFileNameNoExtension,
+  which is now deprecated (Matthieu Casanova, Alan Ezust)
 
-- Removed 192mb heap size limit from startup scripts.
-  Removed jedit.l4j.ini from Windows package files because no options were left.
-  NOTE:
-    Old jedit.l4j.ini won't be removed on upgrade. In that case, manual
-    removal will be required. Please look for jedit.l4j.ini in the
-    install directory after running the installer. If you found only
-    "-Xmx192M" in the file, you can remove it or the file itself.
+- TextUtilities.join() now accept Collection<?> instead of Collection<String>
+  (Matthieu Casanova)
 
-}}}
+- OperatingSystem.isOS2() method is removed since OS/2 cannot run jEdit since
+  many years (Matthieu Casanova)
+
+- OperatingSystem.isDOSDerived() is now deprecated since OS/2 do not exists
+  anymore Windows is the only DOS derived OS, so use OperatingSystem.isWindows()
+  instead (Matthieu Casanova)
+
+- Some undocumented but public members in class DisplayTokenHandler and
+  Chunk became private as they should be in the first place.
+    Specifically:
+      org.gjt.sp.jedit.syntax.DisplayTokenHandler
+        MAX_CHUNK_LEN
+        initChunk()  (* this was protected)
+      org.gjt.sp.jedit.syntax.Chunk
+        accessable
+        initialized
+        style
+        width
+        Chunk constructors
+        offsetToX() (non static)
+        xToOffset() (non static)
+        init()
+  (Kazutoshi Satoda)
 
 }}}
+{{{ Editing
 
-{{{ Version 4.5pre1
-
-Thanks to Björn "Vampire" Kautler, Matthieu Casanova, Alan Ezust, cy6erGn0m,
-Bad Sector, jclopes, Dale Anson, Anshal Shukla, Ryan Mott, Damien Radtke,
-Matthew Gilbert, Dennis Hotson, Kevin Hunter, encorejane, nherzing, Jeremy,
-Evan Wright, Shlomy Reinstein, glen117, kog13, Marcelo Vanzin, Anthony Keeley
-Eric Berry, and Eric Le Lay for contributing to this release.
-
-{{{ Bug fixes
-
-- Fixed jEdit starting when max heap size is too low to load Killring
-  (#1827853) (Matthieu Casanova)
-
-- Fix Checkbox Menu not working on OSX (#3155813 patch #3159277) (Evan Wright)
-
-- Fixed a class loading issue when no GUI (SplashScreen or TrayIcon) was shown
-  on startup. The effects were visible if the VoxSpell plugin was installed
-  and the Markdown plugin was tried to be used. (Björn "Vampire" Kautler)
-
-- When changing the Look and Feel on-the-fly, already shown JTrees with
-  explicitly set TreeCellRenderers were rendered wrongly, now they are robust
-  in regards to Look and Feel changes. (Björn "Vampire" Kautler)
-
-- Fixed plugin install panel : when the selected plugin had dependencies that
-  were not visible because of the filtered view, those dependencies were not
-  installed. Now the install panel will always show selected plugins so you can
-  know what will be installed (Matthieu Casanova)
+- Nsis mode: added sectiongroup and deprecated subsection.
+  (patch #3531776 Uwe - donovaly)
 
-- The selectionLength status bar widget is now updated when jEdit starts, and
-  says 0 instead of nothing if there is no selection (Matthieu Casanova)
+- Shellscript mode: changed electric keys to better fit current jEdit
+  capabilities in this area. (Jarek Czekalski)
 
-- Fixed the file properties dialog when the VFS has no rename capability
-  (Matthieu Casanova)
+- Made markers list selectable with keyboard. (patch #3509642 Tom Power)
 
-- Latex string literal fixed : when starting with `` the String literal can
-  now end with " or '' (#3152515 - patch #3162735 Evan Wright)
+- Ada mode improvements (patch #3523836 Peter C. Chapin,
+  request #2860105 Britt)
 
-- When jEdit is unable to autosave jEdit now logs a warning, but doesn't
-  pop an error dialog every 30 seconds (#3154842 - Matthieu Casanova)
+- Scala mode added (#3501401 Daniel Spiewak)
 
-- Made jedit.exe to find JDK, so that jEdit runs only with JDK (without
-  JRE) like 4.3.x and before. (SF.net bug #3134149 - Kazutoshi Satoda)
+- logs edit mode added (Matthieu Casanova)
 
-- Fix for tracker 3134215, restore previously opened files setting not being
-  considered when restoring split configuration. (#3134215 - Dale Anson)
+- Dart mode added (patch #3483431 Chris Sullins)
 
-- After using save-as action on a read-only buffer the new buffer is no longer
-  read-only (#3148102 - Matthieu Casanova)
+- Haskell mode: Removed the fixed 8 character indent and tab size
+  (patch #3470636)
 
-- Applied patch from Ryan Mott that fixes textarea scrolling left
-  automatically when selecting text at the end of a long line and trying to
-  scroll down if next lines are shorter. (#2841162, Matthieu Casanova)
+- Haskell mode: Added some GHC extensions: recursive do and arrow notation
+  (patch #3470637 Stephen Blackheath)
 
-- Applied suggestion from bug 3160310 to correctly set permissions on
-  symlinked files (Marcelo Vanzin)
+- New mxml.xml mode, and updates to ActionScript (patch #2913561 Chris Hill)
 
-- Fixed an exception that occurs when opening jEdit from command line
-  with some files to open as argument if a jEdit server is running
-  (#3173669 - Matthieu Casanova)
+- New metapost.xml mode (patch #1606258 Kondr)
 
-- Fixed wrong mode detection on drag and drop from GNOME Commander.
-  (#3374207 - Shlomy Reinstein)
+- Updated cobol.xml (patch #2654343 Markus Röhner)
 
-- Fixed deadlock (jEdit freeze) when multiple files are dragged into the text
-  area from file managers. (Shlomy Reinstein)
+- fortran90.xml: new Fortran90 edit mode (patch #2406563 Jonni Lehtiranta)
 
-- Fix for tracker 3034220, jEdit fails to load text-file under Mac OS X
-  (#3034220 - Evan Wright)
+- roff.xml: New ROFF/GROFF/TROFF edit mode
+  (patch #3081484 Kostas Michalopoulos, Robert Schwenn)
 
-}}}
-{{{ API Changes
+- nsis2.xml: Added Java/C style comments. (patch #2976473)
 
+- Ruby Edit Mode: Improved Symbol Highlighting
+  (patch #1918110 Ingo Tomahogh, Alan Ezust)
 
-- New method TextAreaPainter.getRenderingHints() expose the rendering
-  hints (patch #2973861) (Anthony Keeley)
+- "velocity_pure.xml" edit mode to replace older sgml-based velocity.xml.
+  Velocity keywords nested within markup tags incorrectly highlighted.
+  (patch #1285741 Robert Schwenn)
 
-- Added GUIUtilities.option() method to display a JOptionPane.option()
-  dialog (Matthieu Casanova)
+- Updated D edit mode (patch #3463009 Olivier Pisano)
 
-- Added a possibility to get the pure path from a VFS path without the
-  overhead of the VFS like usernames, passwords, hosts, archive files and
-  so on. VFS implementations should check whether they need to override
-  the new getFilePath method. (Björn "Vampire" Kautler)
+- Removed special highlight for object access and creation in php edit mode
+  (#2985508, #3151072 Matthieu Casanova)
 
-- Added EnhancedTreeCellRenderer to be used as Look and Feel change aware
-  alternative base class instead of DefaultTreeCellRenderer for custom
-  TreeCellRenderers. (Björn "Vampire" Kautler)
+- Major simplification of phpdoc to make it look more like javadoc
+  (#1803310, #3029383, #3316733 Matthieu Casanova)
 
-- Added TaskAdapter that is a default implementation of the TaskListener
-  (Matthieu Casanova)
+- Added some missing keywords to vrml2 edit mode (patch #3471586 Jimmy Chaw)
 
-- TaskManager.countTasks() returns the number of tasks in queue
-  (Matthieu Casanova)
+- Using no highlight or limited syntax highlight in large buffers now also
+  disables soft wrap (Matthieu Casanova)
 
-- New methods JEditBuffer.setContextInsensitive(boolean) and
-  JEditBuffer.GetContextInsensitive() to manage the new attribute
-  contextInsensitive of JEditBuffer. By default it is set by the
-  edit mode, but you can change it's value (careful, it can break
-  the syntax highlight of your buffer if you don't know what you do)
-  (Matthieu Casanova)
+- Using no highlight or limited syntax highlight in large buffers now disables
+  highlight of very long lines (Matthieu Casanova)
 
-- New method TextArea.getVisibleLineText(screenLine) and
-  TextArea.getVisibleLineSegment() that returns
-  the visible part of the given line (Matthieu Casanova)
+- Latex Indentation a nuisance (#3432974)
 
-- AbstractOptionPane.save() and AbstractOptionPane.init() are now
-  final as they should be since jEdit 4.2
+- Made it possible to disable automatic indentation by buffer or by edit
+  mode, and created a status widget to toggle the setting (Evan Wright)
 
-- API made public:
-  org.gjt.sp.jedit.browser.VFSFileNameField (Marcelo Vanzin)
+- Fix for tracker 2976661, script tag attributes not syntax highlighted.
+  (Dale Anson)
 
-- API made private:
-  FileVFS.modified
-  (Matthieu Casanova)
+- Fix for tracker 846913, jsp syntax highlighting for single line comments.
+  (Dale Anson)
 
-- Removed Deprecated apis :
-  EditPlugin.createMenuItems(Vector menuItems)
-  EditPlugin.createOptionPanes(OptionsDialog optionsDialog)
-  HistoryModel.clear()
-  JEditTextArea.getSelectionStart()
-  JEditTextArea.getSelectionStart(int line)
-  JEditTextArea.getSelectionStartLine()
-  JEditTextArea.setSelectionStart(int selectionStart)
-  JEditTextArea.getSelectionEnd()
-  JEditTextArea.getSelectionEnd(int line)
-  JEditTextArea.getSelectionEndLine()
-  JEditTextArea.setSelectionEnd(int selectionEnd)
-  JEditTextArea.select(int start, int end)
-  JEditTextArea.select(int start, int end, boolean doElectricScroll)
-  JEditTextArea.isSelectionRectangular()
-  TextAreaPainter.setAntiAliasEnabled(boolean isEnabled)
-  TextAreaPainter.isAntiAliasEnabled()
-  FoldHandler.SERVICE
-  Buffer.addBufferChangeListener(BufferChangeListener listener, int priority)
-  Buffer.putProperty(Object name, Object value)
-  Buffer.putBooleanProperty(String name, boolean value)
-  Buffer.markTokens(int lineIndex)
-  Buffer.TokenList
-  Buffer.getMarkersPath(VFS vfs)
-  Buffer.insertString(int offset, String str, AttributeSet attr)
-  Buffer.editSyntaxStyle(JEditTextArea textArea)
-  Buffer.addBufferChangeListener(BufferChangeListener listener)
-  Buffer.removeBufferChangeListener(BufferChangeListener listener)
-  Buffer.addBufferChangeListener(BufferChangeListener listener)
-  BufferChangeAdapter
-  BufferChangeListener
-  BufferIORequest.GZIP_MAGIC_1
-  BufferIORequest.GZIP_MAGIC_2
-  BufferIORequest.UTF8_MAGIC_1
-  BufferIORequest.UTF8_MAGIC_2
-  BufferIORequest.UTF8_MAGIC_3
-  BufferIORequest.UNICODE_MAGIC_1
-  BufferIORequest.UNICODE_MAGIC_2
-  BufferIORequest.XML_PI_LENGTH
-  JEditBuffer.indentLine(int lineIndex, boolean canIncreaseIndent,
-                         boolean canDecreaseIndent)
-  JEditBuffer.isElectricKey(char ch)
-  MiscUtilities.UTF_8_Y
-  MiscUtilities.getFileParent(String path)
-  MiscUtilities.getFileProtocol(String url)
-  MiscUtilities.moveFile(File source, File dest)
-  MiscUtilities.compareVersions(String v1, String v2)
-  MiscUtilities.quicksort(Object[] obj, Comparator compare)
-  MiscUtilities.quicksort(List list, Comparator compare)
-  MiscUtilities.copyStream(int bufferSize, ProgressObserver progress,
-                           InputStream in, OutputStream out, boolean canStop)
-  MiscUtilities.copyStream(ProgressObserver progress, InputStream in,
-                           OutputStream out, boolean canStop)
-  MiscUtilities.isBinary(Reader reader)
-  MiscUtilities.closeQuietly(InputStream in)
-  MiscUtilities.closeQuietly(OutputStream out)
-  MiscUtilities.createWhiteSpace(int len, int tabSize)
-  MiscUtilities.getLeadingWhiteSpaceWidth(String str, int tabSize)
-  MiscUtilities.getColorHexString(Color c)
-  Chunk.init(Segment seg, TabExpander expander, float x,
-             FontRenderContext fontRenderContext)
-  DisplayTokenHandler.init(SyntaxStyle[] styles,
-                           FontRenderContext fontRenderContext,
-                           TabExpander expander, List<Chunk> out,
-                           float wrapMargin)
-  DisplayTokenHandler.initChunk(Chunk chunk, Segment seg)
-  ParserRuleSet.getRules(char ch)
-  ParserRule.EXCLUDE_MATCH
-  ParserRule.NO_ESCAPE
-  ParserRule.next
-  ParserRule.createRegexpSequenceRule(char hashChar, int posMatch, String seq,
-                                      ParserRuleSet delegate, byte id,
-                                      boolean ignoreCase)
-  ParserRule.createRegexpEOLSpanRule(char hashChar, int posMatch, String seq,
-                                     ParserRuleSet delegate, byte id,
-                                     byte matchType, boolean ignoreCase)
-  PluginManagerProgress.setValue(int value)
-  BracketIndentRule.getBrackets(String line)
-  CloseBracketIndentRule.isMatch(String line)
-  RegexpIndentRule.isMatch(String line)
-  DockableLayout.setAlternateLayout()
-  GrabKeyDialog.toString(KeyEvent evt)
-  InputHandler.readNextChar(String code)
-  KeyEventTranslator.translateKeyEvent2(KeyEvent evt)
-  KeyEventTranslator.Key.isPhantom()
-  VFSBrowser.getFilenameFilter()
-  View.ABOVE_ACTION_BAR_LAYER
-  View.processKeyEvent(KeyEvent evt, int from, boolean global)
-  OperatingSystem.hasJava14()
-  OperatingSystem.hasJava15()
-  GUIUtilities.centerOnScreen(Window win)
-  GUIUtilities.loadStyles(String family, int size)
-  GUIUtilities.loadStyles(String family, int size, boolean color)
-  GUIUtilities.parseStyle(String str, String family, int size, boolean color)
-  GUIUtilities.parseColor(String name, Color defaultColor)
-  GUIUtilities.getColorHexString(Color c)
-  GUIUtilities.NEW_BUFFER_ICON
-  GUIUtilities.DIRTY_BUFFER_ICON
-  GUIUtilities.READ_ONLY_BUFFER_ICON
-  GUIUtilities.NORMAL_BUFFER_ICON
-  GUIUtilities.WINDOW_ICON
-  BeanShell.runScript(View view, String path, Reader in, boolean ownNamespace,
-                      boolean rethrowBshErrors)
-  BeanShell.runScript(View view, String path, boolean ownNamespace,
-                      boolean rethrowBshErrors)
-  BeanShell.eval(View view, String command, boolean rethrowBshErrors)
-  BeanShell.eval(View view, NameSpace namespace, String command,
-                 boolean rethrowBshErrors)
-  EditAction.getView(Component comp)
-  EditBus.getComponents()
-  JarClassLoader.getZipFile()
-  MiscUtilities.charsToEscapes(String str)
-  MiscUtilities.charsToEscapes(String str, String toEscape)
-  MiscUtilities.compareStrings(String str1, String str2, boolean ignoreCase)
-  MiscUtilities.StringCompare
-  MiscUtilities.StringICaseCompare
-  MiscUtilities.getLeadingWhiteSpace(String str)
-  MiscUtilities.getTrailingWhiteSpace(String str)
-  MiscUtilities.getVirtualWidth(Segment seg, int tabSize)
-  MiscUtilities.getOffsetOfVirtualColumn(Segment seg, int tabSize, int column,
-                                         int[] totalVirtualWidth)
-  MiscUtilities.createWhiteSpace(int len, int tabSize, int start)
-  MiscUtilities.globToRE(String glob)
-  MiscUtilities.quicksort(Vector vector, Compare compare)
-  MiscUtilities.quicksort(Vector vector, Comparator compare)
-  MiscUtilities.quicksort(Object[] obj, Compare compare)
-  MiscUtilities.Compare
-  MiscUtilities.MenuItemCompare
-  MiscUtilities.getEncodings()
-  MiscUtilities.parseXML(InputStream in, DefaultHandler handler)
-  MiscUtilities.findEntity(String systemId, String test, Class where)
-  MiscUtilities.charsToEntities(String str)
-  MiscUtilities.stringsEqual(String s1, String s2)
-  MiscUtilities.objectsEqual(Object o1, Object o2)
-  MiscUtilities.KB_FORMAT
-  MiscUtilities.MB_FORMAT
-  MiscUtilities.formatFileSize(long length)
-  SegmentCharSequence.SegmentCharSequence(Segment seg, boolean reverse)
-  PluginJar.getActions()
-  Registers.StringRegister
-  jEdit.getActionSetForAction(EditAction action)
-  jEdit.getActions()
-  jEdit.openFile(View view, String parent, String path, boolean readOnly,
-                 boolean newFile)
-  jEdit.openFile(View view, String parent, String path, boolean readOnly,
-                 boolean newFile, Hashtable props)
-  jEdit.createTextArea()
-  TextArea.getMarkLine()
-  VFS.DirectoryEntry
-  VFS.VFS(String name)
-  VFS.showBrowseDialog(Object[] session, Component comp)
-  VFS._listDirectory(Object session, String directory, Component comp)
-  VFS._getDirectoryEntry(Object session, String path, Component comp)
-  VFSManager.getVFSByName(String name)
-  VFSManager.registerVFS(String protocol, VFS vfs)
-  VFSManager.error(final Component comp, final String error,
-                   final Object[] args)
-  VFSManager.getFilesystems()
-  VFSFile.name
-  VFSFile.path
-  VFSFile.symlinkPath
-  VFSFile.deletePath
-  VFSFile.type
-  VFSFile.length
-  VFSFile.hidden
-  VFSFile.canRead
-  VFSFile.canWrite
-  ReadWriteLock
-  (Matthieu Casanova)
+- Updated css mode with new css 3 properties and values, tracker 3483390.
+  (Dale Anson)
 
-- Applied patch #2809978 to remove use of deprecated methods in jEdit's
-  textarea (#2809978 from Kevin Hunter, Matthieu Casanova)
+- Updated html mode to recognize new html 5 keywords, updated jsp mode to
+  delegate to html mode for html tags. (Dale Anson)
 
 }}}
-{{{ Editing
-
-- Added edit mode for vala language (patch #3407321) (kog13)
-
-- Improvement of filename glob for apacheconf mode to include more files
-  in the conf directories on Windows and Linux.
-  (part of Feature Request #2557712 - Björn "Vampire" Kautler)
-
-- Filename globs for matching edit modes now support specifying a full
-  path as glob with either "/" or "\" as path separator while "\" has
-  to be doubled as it is also the escape character for meta characters.
-  (Feature Request #2557712 - Björn "Vampire" Kautler)
-
-- Syntax for Macro Scheduler (#3085538) (glen117)
-
-- Additional mode for CPlex LP files (#3332052) (Kevin Hunter)
-
-- PowerShell mode update (#3316284) (Jeremy)
-
-- Fixed indentation in javacc edit mode that can fail if a token contains
-  "else" (Matthieu Casanova)
-
-- Updated java edit mode among other things it now highlight special chars
-  like \n \uXXXX unicode, \t, \r in string literal (Matthieu Casanova)
-
-- Factor Mode fix (#3100731 - Valeri Mytinski)
-
-- Added new keywords to C# edit mode (patch #3120746 from nherzing,
-  Matthieu Casanova)
-
-- New edit mode option: Elastic Tabstops. (Anshal Shukla + Shlomy Reinstein)
+{{{ UI
 
-- Applied patch from Matthew Gilbert to add ability to increase/decrease line
-  spacing in the text area. (#3023134, Dale Anson)
+- Made "Customize This Menu..." item in context menu optional.
+  (patch #3530786 Tom Power)
 
-- Added jflex edit mode (Matthieu Casanova)
+- File System Browser docked on left by default. (Alan Ezust)
 
-- Added lex/flex edit mode (Matthieu Casanova)
+- Suppressed output to standard error of encoding problems on opening
+  files, which affects also hypersearch encoding errors. These errors are
+  now displayed in a dialog, but not sent to error output.
+  (request #3517116 Jarek Czekalski)  
 
-- New mode for Oracle PL/SQL 11. (#3078863 - Diogo Kollross)
+- Reserve space for 4 digit in memory's status bar widget.
+  (patch #3518422 Makarius)
 
-- Haxe mode update (Dion Amago # 3123602)
+- The Windows installer and windows integration are now localized in french
+  (patch #3513215 Jojaba)
 
-- Updated erlang mode and associated *.hrl to erlang language
-  (patch #3042398 from jclopes, Matthieu Casanova)
+- The Error status bar widget now use a JEditEmbeddedTextArea instead of a
+  simple swing TextArea to display exceptions (Matthieu Casanova)
 
-- Added coffee edit mode (patch #3173375 from Dennis Hotson, Matthieu Casanova)
+- jEdit now supports localization. (Matthieu Casanova)
 
-- Added support for the newline character in electricKeys (Evan Wright)
+- Added french translation (Jojaba http://jojaba.free.fr)
 
-}}}
-{{{ UI
+- Added german translation (Robert Schwenn)
 
-- The IO Progress Monitor dockable panel is now included in Task Monitor Panel
-  (feature #3420671) (Matthieu Casanova)
+- Added czech translation (patch #3523511 Milan ÄŒernil)
 
-- Changes to the Look and Feel are now applied immediately without the need to
-  restart the application. (Björn "Vampire" Kautler)
+- Text Area option for Search System Fonts in Font substitution
+  (#3479585 Max Funk)
 
-- New VFS Browser action: "Open in desktop" (feature# 3406759) (Alan Ezust)
+- Dialog titles in file system browser
+  (patch #2968930, request #2807301 SPennington)
 
-- jEdit has now a systray icon. It can be replaced by implementing the
-  org.gjt.sp.jedit.gui.tray.JEditTrayIcon service (feature #1657143)
-  (Matthieu Casanova)
+- Standarized Buffer Switcher combo (#3408584, patch #3456572 Jarek Czekalski)
 
-- Ability to customize the browser context menu (feature #3354306)
+- If a Task is not cancellable, the cancel button of TaskMonitor is disabled
   (Matthieu Casanova)
 
-- New Status bar widget to monitor task manager. (feature #3316561)
-  (Matthieu Casanova)
+- Added Icons to the VFS Browser context menu (Matthieu Casanova)
 
-- Moved Default Line Separator Char from General to Encodings Option Pane.
+- Combined Global and Plugin options into a single pane, making Optional plugin
+	obsolete, fixing auto resize dialog issue.
+	(#3449498, request #3455602 Alan Ezust)
 
-- The Statusbar widget choice in global options has now a preview to see how
-  the status bar will look like (Matthieu Casanova)
+- jEdit is now always using continuous layout in JSplitPane (Matthieu Casanova)
 
-- A new status bar widget is added to show the last modified time of the current
-  buffer (feature request #1551454 - Matthieu Casanova)
+- Fixed keyboard handling of comboboxes in jedit's option panes.
+  (#3415064 Alan Ezust)
 
-- The Macros menu can now be splitted if there are too many macros or
-  macro folders (#3172647 - Matthieu Casanova)
+- Changed menus to use Mac-specific symbols for accelerator keys when using OS X
+  and the native look & feel (patch #1950147 Nathan Gray)
 
-- Updated ColorWellButton to use the dialog provided by JColorChooser rather
-  than creating its own dialog since the JColorChooser dialog is much richer.
-  (Dale Anson)
+- Added an option (on by default) to use the native Quartz renderer on
+  Mac OS X (Evan Wright)
 
-- Filter field in PluginManager InstallPanel (#2810926 - Olivier Chafik)
+- Fixed keyboard handling of drop-down menus in File System Browser.
+  (#1571578 Alan Ezust)
 
-- New View option: Floatable toolbars. (Alan Ezust)
+- Fixed "Use textarea colors" for dockables created in non-metal L&F.
+  (#1794400 Alan Ezust)
 
-- New TextArea Option: Choice of color ordering w/ subpixel antialiasing.
-  (#2989209 - Alan Ezust)
+- New option in Saving and Backup pane: Use File System Browser dir for
+  Save-As (#1591441 Alan Ezust)
 
-- In conjunction with the fix for tracker 3134215, added a new option to the
-  General options pane to let the user choose whether to restore the split
-  configuration. (Dale Anson)
+- RegisterViewer: set initial focus to registerList, added key bindings for
+  inserting content, clearing a register and leaving the registerList
+  (#3437779 Martin Raspe)
 
-- If jEdit doesn't have rights to save a buffer, the dialog doesn't display
-  an exception anymore, making the error message less dramatic.
-  (Matthieu Casanova)
+- RegisterViewer: close the floating window after inserting a clip, to make
+  behaviour consistent with Paste Previous window (#3478916 Jarek Czekalski)
+  
+- Show a preview of the window rather than a low-resolution icon when minimizing
+  on Mac OS X (#3529980 Evan Wright)
 
 }}}
 {{{ Miscellaneous
 
-- Optimize performances of HistoryModel (patch #3185856) (Evan Wright)
+- New FileOpenerService, Offered by FastOpen 2.5, SmartOpen 1.1.
+  Used by ErrorList 2.0 (#3481157 Alan Ezust)
 
-- Debian repository metadata is now generated during normal build procedure.
-  (Björn "Vampire" Kautler)
-
-- Ability to rename favorites. Renaming a favorite now only apply a label
-  on the favorite without modifying the target file (feature #3292159)
-  (Matthieu Casanova)
+- Macros folder can now be localized with properties
+  macros.folder.[foldername].label (Matthieu Casanova)
 
-- VFS Browser jobs now use the new Task api (Matthieu Casanova)
-
-- Global options now use properties to display options tree
-  (Matthieu Casanova)
+- Pasting a VFSFile as String dataflavor will now paste the full path instead of
+  the name of the file (Matthieu Casanova)
 
-- Update Java installer generated *nix launcher to be the same as the one in
-  the native *nix packages (Björn "Vampire" Kautler)
+- The EditingOptionPane has now an option to remember the user choice about
+  large file treatment (Matthieu Casanova)
 
-- Add some quotes and explicit variable markers to *nix launcher
+- OS/2 tasks were removed from the Java installer as OS/2 does not
+  have a working Java 6 implementation and probably never will have
   (Björn "Vampire" Kautler)
 
-- New property for the edit modes : contextInsensitive.
-  By default the value is false, but if set to true the color highlight of
-  a line of the buffer do not depends on the previous line. It works of course
-  only for modes that do not have multiline comments and no tokens that can be
-  on several lines (like literal in several languages)
-  This cause major performances improvement on buffers that use an edit mode
-  that is context insensitive.
-  The following modes are now context insensitive :
-  assembly-agc
-  assembly-ags
-  assembly-m68k
-  assembly-mcs51
-  assembly-parrot
-  assembly-r2000
-  assembly-x86
-  awk
-  cobol
-  csv
-  csv-commits
-  eiffel
-  foxpro
-  hex
-  htaccess
-  hxml
-  icon
-  ini
-  jmk
-  json
-  mqsc
-  outline
-  props
-  ptl
-  pvwave
-  rfc
-  rib
-  rpmspec
-  sip
-  splus
-  sqr
-  squidconf
-  svn-commit
-  text
-  vhdl
-  visualbasic
-  yab
-
-- When editing a big file, a dialog will suggest to disable syntax
-  highlight or make it context-insensitive so that jEdit remains fast
-  (Matthieu Casanova)
-
-- In mode syntax file, SPAN_REGEXP can now end with a regex
- (patch #3162735 from Evan Wright, Matthieu Casanova)
-
-- Dynamic softwrap. Now the softwrap margin is the minimum of the buffer wrap
-  guide and the max length displayable in the TextArea (patch #2846458 from
-  Suraj Kurapati, Matthieu Casanova)
+- jEdit support for keymaps (Matthieu Casanova)
 
-- Added an option to search for entire words (patch #2842461 from encorejane,
-  Matthieu Casanova)
+- User Settings directory migrated to %APPDATA%/jEdit on Windows
+  (#2510763 Alan Ezust)
 
-- Included the Windows launcher in the Java installer (Björn "Vampire" Kautler)
+- Added support for "Find Previous" when searching in multiple files
+  (Evan Wright)
 
-- Added a new menu item "New Macro" in Macros menu
-  (patch #2983607 from Damien Radtke, Matthieu Casanova)
+- Applied patch to Get_Class_Name macro from lxdyglt to find
+  classname for inner classes. (#3301598 Dale Anson)
 
-- In search and replace when replacing by a BeanShell snippet, it is now
-  possible to use multiple statements instead of only one statement. To do
-  that, enclose your code in braces
-  (patch #3002207 from cy6erGn0m, Matthieu Casanova)
-
-- Added a command line option "-nosplash" to avoid the splash screen
-  (Shlomy Reinstein).
+- Fixed some edge cases in the Make_Get_and_Set_Methods macro, properly handle
+  comments, multi-line variable declarations and multiple initializers.
+  (Dale Anson)
 
-- Minor optimization of TextAreaTransferHandler.canImport() method that
-  is called when dragging things on the textArea (Matthieu Casanova)
+- Soft wrap now works at non-whitespace line breaks within some natural
+  language texts; Japanese for example.
+  (patch #2483695 Kazutoshi Satoda)
 
-- Allow dragging files with data flavor type "text/uri-list" into jEdit. This
-  type is used by several file managers in Ubuntu. (Shlomy Reinstein)
+- Introduced glyph caching to lower CPU usage on text rendering and
+  line wrapping. (Kazutoshi Satoda)
 
-- Enhance System, Look&feel, jEdit properties macros
-  (r19599, bug #1593358, Eric Le Lay)
+- Changed calculation of wrap margin to be based on an average character
+  width instead of a width of a space which gave very narrow wrap margin
+  for proportional fonts. (Kazutoshi Satoda)
 
-- Disabled the search dialog pool by default on Mac OS X to avoid dialogs
-  showing up in the wrong Space (Evan Wright)
+- Updated Move Lines Up and Down macros to move whole lines regardless of
+  selection. (Dale Anson)
 
 }}}
 
 }}}
 
 jEdit buffer local properties:
-:folding=explicit:collapseFolds=2:maxLineLen=80:wrap=hard:tabsize=4:
+:maxLineLen=80:wrap=hard:autoIndent=simple:noTabs=true:indentSize=2:tabSize=2:
+:folding=explicit:collapseFolds=2:
diff --git a/doc/FAQ/faq-contrib.xml b/doc/FAQ/faq-contrib.xml
index 6077598..c07dd1a 100644
--- a/doc/FAQ/faq-contrib.xml
+++ b/doc/FAQ/faq-contrib.xml
@@ -1,43 +1,20 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <appendix id="appendix">
     <title>Contributors</title>
-
     <!-- jEdit buffer-local properties:                      -->
-
-    <!-- :indentSize=4:noTabs=false:maxLineLen=72:tabSize=4: -->
-
+    <!-- :indentSize=4:noTabs=false:maxLineLen=80:tabSize=4: -->
     <!-- :xml.root=faq.xml:                                  -->
-
     <!-- jEdit FAQ                                           -->
 
-    <!-- Copyright (C) 2003 John Gellene, Kris Kopicki       -->
-
     <para>Thanks to those who contributed both questions and answers, including
     the following:</para>
 
     <itemizedlist>
-        <listitem>
-            <para>Mike Dillon</para>
-        </listitem>
-
-        <listitem>
-            <para>Kris Kopicki</para>
-        </listitem>
-
-        <listitem>
-            <para>Slava Pestov</para>
-        </listitem>
-
-        <listitem>
-            <para>Frank Rocca</para>
-        </listitem>
-
-        <listitem>
-            <para>Maik Schreiber</para>
-        </listitem>
-
-        <listitem>
-            <para>Dominic Stolerman</para>
-        </listitem>
+        <listitem> <para>Mike Dillon</para></listitem>
+        <listitem><para>Kris Kopicki</para></listitem>
+        <listitem><para>Slava Pestov</para></listitem>
+        <listitem><para>Frank Rocca</para></listitem>
+        <listitem><para>Maik Schreiber</para></listitem>
+        <listitem><para>Dominic Stolerman</para></listitem>
     </itemizedlist>
-</appendix>
\ No newline at end of file
+</appendix>
diff --git a/doc/FAQ/faq-general.xml b/doc/FAQ/faq-general.xml
index 3543398..af0ffa0 100644
--- a/doc/FAQ/faq-general.xml
+++ b/doc/FAQ/faq-general.xml
@@ -2,7 +2,7 @@
 <section id="general">
     <title>General Questions</title>
     <!-- jEdit buffer-local properties:                      -->
-    <!-- :indentSize=4:noTabs=false:maxLineLen=72:tabSize=4: -->
+    <!-- :indentSize=4:noTabs=false:maxLineLen=80:tabSize=4: -->
     <!-- :xml.root=faq.xml:                                  -->
     <!-- jEdit FAQ                                           -->
     <para>This section deals with some background information, how to obtain the
diff --git a/doc/FAQ/faq-install.xml b/doc/FAQ/faq-install.xml
index e553057..e209607 100644
--- a/doc/FAQ/faq-install.xml
+++ b/doc/FAQ/faq-install.xml
@@ -2,7 +2,7 @@
 <section id="installation">
     <title>Installation Questions</title>
     <!-- jEdit buffer-local properties:                      -->
-    <!-- :indentSize=4:noTabs=false:maxLineLen=72:tabSize=4: -->
+    <!-- :indentSize=4:noTabs=false:maxLineLen=80:tabSize=4: -->
     <!-- :xml.root=faq.xml:                                  -->
     <!-- jEdit FAQ                                           -->
 
diff --git a/doc/FAQ/faq-intro.xml b/doc/FAQ/faq-intro.xml
index 6781a78..8ec3702 100644
--- a/doc/FAQ/faq-intro.xml
+++ b/doc/FAQ/faq-intro.xml
@@ -2,7 +2,7 @@
 <section id="intro">
     <title>Introduction</title>
     <!-- jEdit buffer-local properties:                      -->
-    <!-- :indentSize=4:noTabs=false:maxLineLen=72:tabSize=4: -->
+    <!-- :indentSize=4:noTabs=false:maxLineLen=80:tabSize=4: -->
     <!-- :xml.root=faq.xml:                                  -->
     <!-- jEdit FAQ                                           -->
     <para>This document explains many of the basic features of jEdit and
diff --git a/doc/FAQ/faq-legal.xml b/doc/FAQ/faq-legal.xml
deleted file mode 100644
index 9e0c549..0000000
--- a/doc/FAQ/faq-legal.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<appendix id="legal-notice">
-    <title>Legal Notice</title>
-    <!-- jEdit buffer-local properties:                      -->
-    <!-- :indentSize=4:noTabs=false:maxLineLen=72:tabSize=4: -->
-    <!-- :xml.root=faq.xml:                                  -->
-    <!-- jEdit FAQ                                           -->
-    <!-- Copyright (C) 2003 John Gellene, Kris Kopicki       -->
-    <!-- Copyright (C) 2006-2012 Alan Ezust				         -->
-
-    <para>Permission is granted to copy, distribute and/or modify this document
-    under the terms of the <ulink url="http://www.gnu.org/licenses/fdl.html">
-    GNU Free Documentation License</ulink>, Version 1.1 or any later version
-    published by the Free Software Foundation; with no <quote>Invariant
-    Sections</quote>, <quote>Front-Cover Texts</quote> or <quote>Back-Cover
-    Texts</quote>, each as defined in the license. A copy of the license is
-    contained in the file <filename>COPYING.DOC.txt</filename> included with
-    jEdit.</para>
-</appendix>
\ No newline at end of file
diff --git a/doc/FAQ/faq-macros.xml b/doc/FAQ/faq-macros.xml
index f592cb8..8269491 100644
--- a/doc/FAQ/faq-macros.xml
+++ b/doc/FAQ/faq-macros.xml
@@ -2,7 +2,7 @@
 <section id="macros">
     <title>Macros</title>
     <!-- jEdit buffer-local properties:                      -->
-    <!-- :indentSize=4:noTabs=false:maxLineLen=72:tabSize=4: -->
+    <!-- :indentSize=4:noTabs=false:maxLineLen=80:tabSize=4: -->
     <!-- :xml.root=faq.xml:                                  -->
     <!-- jEdit FAQ                                           -->
     <para>This section deals with questions on writing and running
@@ -22,7 +22,7 @@
                     will provide a similar interface to jEdit's plugin manager
                     for installing new macros. The plugin downloads the macros
                     from the jEdit Community site, so an internet connection is
-                    necessary.</para>
+                    necessary. It needs to be updated for jEdit 4.4. </para>
                 </answer>
             </qandaentry>
 
diff --git a/doc/FAQ/faq-plugins.xml b/doc/FAQ/faq-plugins.xml
index e04cc05..c593fe5 100644
--- a/doc/FAQ/faq-plugins.xml
+++ b/doc/FAQ/faq-plugins.xml
@@ -5,7 +5,6 @@
     <!-- :indentSize=4:noTabs=false:maxLineLen=80:tabSize=4: -->
     <!-- :xml.root=faq.xml:                                  -->
     <!-- jEdit FAQ                                           -->
-    <!-- Copyright (C) 2003 John Gellene, Kris Kopicki       -->
     <para>This section deals with questions concerning the use of jEdit's
     plugins. Plugins are applications that share jEdit's memory space and user
     interface and provide a wide variety of functions and services.</para>
@@ -107,20 +106,26 @@
                     <para>The SVNPlugin supports Subversion browsing, diffing
                     (via JDiff) and other common operations.</para>
                     <para>With *NIX (or cygwin), the Console plugin
-                    documentation has some ideas on how to use jEdit as the
-                    <literal>VISUAL</literal> editor when called from the
+                    documentation has some ideas on how to set jEdit as the
+                    <literal>VISUAL</literal> and <literal>EDITOR</literal> tool  when called from the
                     cvs/svn/hg command-line tools, all of which can be run from
                     the Console dockable.</para>
                     <para>The ProjectViewer plugin has some support for reading
-                    the "entries" in your working directory, and will use that as a filter for importing. CVS/SVN support is built-in, and p4, bzr, git, and hg are also supported via plugins. </para>
-                    <para>The P4Plugin adds Perforce support to ProjectViewer,
-                    and has some other advanced features for working with
-                    Perforce repositories.</para>
+                    the "entries" in your working directory, and will use that
+                    as a filter for importing. CVS support is built-in, and
+                    subversion, p4, bzr, git, and hg are supported via plugins.
+                    </para>
+                    <para>The P4Plugin and SvnPlugin both add extensions to the
+                    ProjectViewer tree, and have some other features for
+                    working with repositories.</para>
+                    <para><literal>SourceControl</literal> plugin has some
+                    features to work with Microsoft Visual SourceSafe.
+                    </para>
+                    <para> <literal>ClearCasePlugin</literal> is used with Rational ClearCase. </para>
                     <para>You can use jEdit as your default editor from WinCVS:
                     specify <userinput>jedit.exe</userinput> as your default
                     viewer and editor to automate the opening of file.</para>
-                    <para>GruntSpud and jEditCvs are not maintained, but do
-                    offer CVS support on jEdit 4.2final.</para>
+                    <para>GruntSpud and jEditCvs plugins are no longer supported. </para>
                 </answer>
             </qandaentry>
             <qandaentry>
diff --git a/doc/FAQ/faq-problems.xml b/doc/FAQ/faq-problems.xml
index dbbdabe..ac4c4b9 100644
--- a/doc/FAQ/faq-problems.xml
+++ b/doc/FAQ/faq-problems.xml
@@ -67,18 +67,15 @@
                     <bridgehead>But it worked before! It just stopped working
                     after an upgrade. What should I do?</bridgehead>
                     <para>If it used to work for an older version and no longer
-                    works, it could be that you have some old crud in your jEdit
-                    settings directory (<literal>$HOME/.jedit</literal>). You
-                    may want to try renaming the offending file/subdirectory to
-                    something else, and restarting jEdit with fresh settings.
-                    You can later copy the old settings back into the previous
-                    location if you find you are missing things. Many files in
-                    your settings directory directory are (or should be)
-                    human-readable/editable, so you are encouraged to examine
-                    them and see what is there. You can wipe out
-                    <literal>.jedit/jars-cache</literal> while jEdit is not
-                    actually running, and it will be rebuilt next time you start
-                    it.</para>
+                    works, it could be that you have some old crud (bad
+                    settings, unsupported plugins) in your jEdit
+                    settings directory (<literal>~/.jedit</literal> on Linux,
+                    <literal>%APPDATA%\jEdit</literal> on Windows, or
+                    <literal>~/Library/jEdit</literal> on MacOS).
+                    You may want to try renaming the offending directory
+                    to something else, and restarting jEdit with fresh settings.
+                    You can later copy things from your old settings back 
+                    if you find you are missing things. </para>
                     <para>If at this point you're still stuck, ask for help on
                     the jedit-users mailing list, the jEdit Community
                     <quote>Installation</quote> message board or on IRC. You're
@@ -121,25 +118,35 @@
                     prevent this?</para>
                 </question>
                 <answer>
+                	<para>The memory requirements of jEdit vary greatly
+                	depending on how many files are in use, and what plugins
+                	you are using. You can see how much it is using in the
+                	status bar. </para>
                     <para>One solution that often works is to set or increase
                     the allocation of memory to the heap for Java objects
                     created by the Java Virtual Machine in which jEdit is
-                    running. Add the command line option
-                    <userinput>-mxXXm</userinput> to the options passed to the
+                    running. Add a command line option
+                    <userinput>-Xmx640m</userinput> to the options passed to the
                     version of the Java application loader you are using (such
                     as <filename>java</filename>, <filename>java.exe</filename>
                     or <filename>javaw.exe</filename>). In place of the
-                    <userinput>XX</userinput> in the option, use a multiple of
-                    16 between 32 and 256. If you already are using the option,
-                    increase the numeric portion of the
-                    <userinput>-mxXXm</userinput> parameter in increments of
-                    64.</para>
+                    <userinput>640</userinput> in the option, use a number
+                    of megabytes you think is appropriate for the maximum heap
+                    size. If you already are using the option, try doubling it. 
+                    </para>
                     <para>If you are using the <userinput>-jar</userinput>
                     command line option with Java to run jEdit, remember that
                     the <userinput>-jar</userinput> parameter must be the last
                     Java option, followed immediately by the path to
                     <filename>jedit.jar</filename> and then any jEdit command
                     line options.</para>
+                    
+                    <para> On Windows, if you are using the <literal>jedit.exe</literal> launcher, you can add
+                    or change the JVM arguments by editing a file called <literal>jEdit.l4j.ini</literal> in the same directory
+                    as the <literal>jedit.exe</literal>. Place one 
+                    JVM argument (e.g. <literal>-Xmx512m</literal>) on each
+                    line by itself. </para> 
+                    
                     <para>If out of memory errors occur while running a build or
                     compilation operation from within jEdit, you can also have
                     the operation run in an external process rather than inside
@@ -241,6 +248,46 @@ view.unsplitCurrent();
 					</para>
                 </answer>
             </qandaentry>
+            
+			<qandaentry>
+                <question id="locks-up-or-hangs">
+                    <para>jEdit locks up or hangs while I'm doing lots of things!  </para>
+                    </question>
+                    <answer>
+                      <para> Sometimes, it can be due to a deadlock, or an
+                      infinite loop, or something else. You need to obtain a 
+                      <emphasis role="bold">thread dump</emphasis> from the time
+                      of hang, and attach that as a textfile to your bug report,
+                      explaining what you were doing at the time.
+                      </para>
+
+                      <para> One way to obtain a thread dump, is to run jEdit
+                      with <literal>java -jar jedit.jar</literal> from a command
+                      line shell <emphasis role="bold">in the foreground</emphasis>,
+                      wait for the hang or lockup, and type Ctrl+\ 
+                      (or Ctrl+Break on Windows) into the shell window. 
+                      You should see a thread dump printed immediately that will
+                      help diagnose the problem. 
+                      </para>
+
+                      <para>
+                      Another way to get a thread dump is to run jEdit as you
+                      normally would, then run 
+                      <ulink url="http://visualvm.java.net/">visualvm</ulink>.
+                      You can right click on the jEdit process from within
+                      visualvm and choose "thread dump". 
+                      </para>
+
+                    </answer>
+			</qandaentry>
+			<qandaentry>
+                <question id="too-many-shortcuts">
+                    <para>I can't remember all these multiple-key shortcuts! </para>
+                    </question>
+                    <answer>
+                      <para> Install ShortcutDisplay plugin for help. </para>
+                    </answer>
+			</qandaentry>
             <qandaentry>
                 <question id="general-slowstart">
                     <para>Why is jEdit so slow to start up?</para>
@@ -290,9 +337,8 @@ view.unsplitCurrent();
                 <answer>
                     <para>The plugin is missing a
                     <methodname>requestDefaultFocus()</methodname> method.
-                    Plugin updates will be available from time to time, or you
-                    can email the author of the plugin to let them know of the
-                    problem.</para>
+                    Check the jedit plugin bugs tracker to see if the ticket
+                    is already opened and you can open a ticket if it's not there. </para>
                 </answer>
             </qandaentry>
         </qandadiv>
diff --git a/doc/FAQ/faq-use.xml b/doc/FAQ/faq-use.xml
index ec09039..8002e63 100644
--- a/doc/FAQ/faq-use.xml
+++ b/doc/FAQ/faq-use.xml
@@ -565,87 +565,11 @@
                 </question>
 
                 <answer>
-                    <para>jEdit has it set up as a 2-key shortcut. In order to
-                    make Ctrl-E a one-key shortcut again, you first have to
-                    redefine all of the Ctrl-E prefix shortcuts to mean
-                    something else.</para>
-
-                    <para><literal>jedit_keys.props</literal> shows you all of
-                    the current keyboard bindings. As you can see, Ctrl-e is
-                    used for many things in jEdit. If you want to redefine it to
-                    be a single-key shortcut, first thing you need to do is
-                    decide on another Ctrl-key to use as a prefix, to redefine
-                    jEdit's fold features. I recommend using Ctrl-Q as the
-                    prefix, and if you want to use Ctrl-Q to quit, you have to
-                    hit Ctrl-Q twice. Cut and paste the below shortcuts into
-                    your own properties file.</para>
-
-                    <programlisting>
-# emacs end of line
-end.shortcut2=C+e
-# Ctrl-Q twice to quit
-exit.shortcut=C+q C+q
-# C+q is our new C+e prefix
-#{{{ C+q C+X
-
-# Unused: f, h, q, y
-copy-append.shortcut=C+q C+a
-search-in-open-buffers.shortcut=C+q C+b
-range-comment.shortcut=C+q C+c
-search-in-directory.shortcut=C+q C+d
-replace-and-find-next.shortcut=C+q C+g
-ignore-case.shortcut=C+q C+i
-scroll-to-current-line.shortcut=C+q C+j
-line-comment.shortcut=C+q C+k
-select-line-range.shortcut=C+q C+l
-add-marker.shortcut=C+q C+m
-center-caret.shortcut=C+q C+n
-open-path.shortcut=C+q C+o
-vertical-paste.shortcut=C+q C+p
-replace-in-selection.shortcut=C+q C+r
-save-all.shortcut=C+q C+s
-toggle-line-numbers.shortcut=C+q C+t
-cut-append.shortcut=C+q C+u
-paste-previous.shortcut=C+q C+v
-close-all.shortcut=C+q C+w
-regexp.shortcut=C+q C+x
-paste-deleted.shortcut=C+q C+y
-redo.shortcut=C+q C+z
-#}}}
-
-#{{{ C+q C+non-alpha
-left-docking-area.shortcut=C+q C+LEFT
-top-docking-area.shortcut=C+q C+UP
-right-docking-area.shortcut=C+q C+RIGHT
-bottom-docking-area.shortcut=C+q C+DOWN
-
-prev-marker.shortcut=C+q C+COMMA
-next-marker.shortcut=C+q C+PERIOD
-prev-bracket.shortcut=C+q C+OPEN_BRACKET
-next-bracket.shortcut=C+q C+CLOSE_BRACKET
-close-docking-area.shortcut=C+q C+BACK_QUOTE
-#}}}
-
-#{{{ C+q X
-# Unused: b e g h j k m o q t y z
-add-explicit-fold.shortcut=C+q a
-collapse-all-folds.shortcut=C+q c
-delete-paragraph.shortcut=C+q d
-format-paragraph.shortcut=C+q f
-find-previous.shortcut=C+q g
-invert-selection.shortcut=C+q i
-select-line.shortcut=C+q l
-narrow-to-fold.shortcut=C+q n n
-narrow-to-selection.shortcut=C+q n s
-select-paragraph.shortcut=C+q p
-remove-trailing-ws.shortcut=C+q r
-select-fold.shortcut=C+q s
-insert-literal.shortcut=C+q v
-select-word.shortcut=C+q w
-parent-fold.shortcut=C+q u
-expand-all-folds.shortcut=C+q x
-#}}}
-</programlisting>
+                    <para>Start with a keymap that does not contain any
+                    multiple-key shortcuts beginning with Ctrl-E, such as the
+                    "Emacs" Keymap which binds Ctrl-E
+                    to "smart end", and customize it by setting your own shortcuts to make it more like your flavor of emacs.
+                    </para>
                 </answer>
             </qandaentry>
 
@@ -655,7 +579,7 @@ expand-all-folds.shortcut=C+q x
                 </question>
 
                 <answer>
-                    <para>Check out <literal>macros/Emacs_Ctrl_K.bsh</literal>.
+                    <para>Check out <literal>macros/Editing/Emacs_Ctrl_K.bsh</literal>.
                     Bind it to Ctrl-k from the shortcuts option pane.</para>
                 </answer>
             </qandaentry>
@@ -681,12 +605,17 @@ expand-all-folds.shortcut=C+q x
             </qandaentry>
             <qandaentry>
                 <question id="antialiased-text-everywhere">
-                    <para>How can I get antialiased text everywhere? </para>
+                    <para>How can I get antialiased text everywhere, even dockables and menus? </para>
                 </question>
                 <answer>
                    <para>For the text area, go to <guimenuitem>Global Options - TextArea - Anti Aliased Smooth Text</guimenuitem>. </para>
                    <para>For the dockables, starting <command>java</command> with command line options <literal>"-Dawt.useSystemAAFontSettings=on" "-Dswing.aatext=true"</literal> will give you antialiased text everywhere else.
-                   You can add these options to the batch file or shell script line that starts jEdit.</para>
+                   You can add these options to the batch file or shell script line that starts jEdit. </para>
+                   <para> On Windows with the .exe launcher, you create a file called <literal>jedit.l4j.ini</literal> in the same directory as the .exe file, 
+                   and place one line for each java argument you want to pass. For example:
+                   <programlisting>-Dawt.useSystemAAFontSettings=on
+-Dswing.aatext=true</programlisting>
+                   </para>
 			    </answer>
             </qandaentry>
             <qandaentry>
diff --git a/doc/FAQ/faq.xml b/doc/FAQ/faq.xml
index 149a603..12a4b51 100644
--- a/doc/FAQ/faq.xml
+++ b/doc/FAQ/faq.xml
@@ -2,7 +2,6 @@
 <!-- jEdit buffer-local properties:                       -->
 <!-- :indentSize=1   -->
 <!-- jEdit FAQ                                            -->
-<!-- Changes required for posting on jEdit Community:     -->
 <!-- Command line for processing:                         -->
 <!--                                                      -->
 <!-- xsltproc -xinclude -output .\html\ faq.xsl faq.xml  -->
@@ -86,10 +85,10 @@
             </revision>
 
             <revision>
-                <revnumber>1.2</revnumber>
+                <revnumber>1.3</revnumber>
                 <date>2006,2011</date>
                 <author> <firstname>Alan </firstname> <surname>Ezust </surname></author>
-                <revremark>Updates for jEdit 4.3-4.5 releases</revremark>
+                <revremark>Updates for jEdit 4.3-5.0 releases</revremark>
             </revision>
         </revhistory>
 
diff --git a/doc/README.txt b/doc/README.txt
index 74ed292..adc4136 100644
--- a/doc/README.txt
+++ b/doc/README.txt
@@ -3,9 +3,8 @@ jEdit README
 * About jEdit
 
 jEdit is a cross platform programmer's text editor written in Java.
-
-jEdit 4.5 requires Java 2 version 1.6 or later.
-It will not run with earlier versions.
+jEdit requires Java 2 version 1.6 or later.
+It will not run with earlier versions of Java.
 
 jEdit comes with full online help; to read it, select 'jEdit Help' from
 jEdit's 'Help' menu or point your web browser to the file named
diff --git a/doc/TODO.txt b/doc/TODO.txt
index d246478..2757795 100644
--- a/doc/TODO.txt
+++ b/doc/TODO.txt
@@ -8,7 +8,6 @@ items if they are not out of date.
 splitting messes up last physical line in the newly created text area
 
 + text area:
-
   - click&drag breaks fast scroll
   - format: doesn't wrap right if selection starts in the middle of the
     line
diff --git a/doc/news45/news.xml b/doc/news45/news.xml
deleted file mode 100644
index a64082b..0000000
--- a/doc/news45/news.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<article id="whatsnewarticle"
-     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-     xmlns:xi="http://www.w3.org/2001/XInclude"
-     xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd'  >
-
-    <title> What's new in jEdit 4.5 </title>
-    <articleinfo>
-        <author>
-            <othername>The jEdit all-volunteer development team</othername>
-        </author>
-        <date> 2012 </date>
-    </articleinfo>
-
-    <para> Detailed changes can always be found in the <ulink url="../CHANGES.txt">Detailed Change Log</ulink>,
-    but here are some of the major features of this version. </para>
-    <itemizedlist>
-    <listitem><para> Performance improvements, as well as a "large file" mode
-    for handling extra large files. </para></listitem> 
-    <listitem><para> Edit using <ulink url="http://nickgravgaard.com/elastictabstops/">Elastic tabstops</ulink>,
-    set from Global Options - Editing, Buffer Options, or via buffer-local properties. </para></listitem>
-    <listitem><para> Lots of old deprecated APIs were removed. Some plugins may be broken as a result. </para></listitem>
-    <listitem><para> Choose color ordering for subpixel antialiasing (Global
-    Options - Text Area - Anti-Aliased Smoothed Text) (Feature #2989209). </para></listitem>
-    <listitem><para> Desktop System Tray icon to indicate when jEdit is running (Feature #1657143). </para></listitem>
-    <listitem><para> It is now possible to switch look and feel without
-    restarting jEdit. </para></listitem>
-    <listitem><para> It is possible to specify a <literal>FILE_NAME_GLOB</literal> for an edit mode based on the full
-    path (see entry for <literal>apacheconf</literal> mode in
-    <literal>modes/catalog</literal> for an example) (Feature #2557712). </para></listitem>
-    <listitem><para>File System Browser can now open files in desktop, using
-    desktop filename associations to launch another program. </para></listitem>
-    <listitem><para> Plugin Manager Enhancements, filter field, bugs fixed. </para></listitem>
-    </itemizedlist>
-
-<!-- :maxLineLen=80:wrap=hard: -->
-</article>
diff --git a/doc/release-procedure.txt b/doc/release-procedure.txt
index f378cae..19555a1 100644
--- a/doc/release-procedure.txt
+++ b/doc/release-procedure.txt
@@ -23,6 +23,8 @@ Release procedure of jEdit
   allowed on the branch.
     - Bumping up of the version number.
     - Changes under "doc" directory.
+    - Changes for translations under "org/jedit/localization" directory.
+      Note that jedit_en.props is not a translation.
     - Merging of reviewed changes from the trunk or a separate branch.
       See step 5 below for merging.
 
@@ -73,6 +75,14 @@ Release procedure of jEdit
   This means each fix is reviewed by at least two persons. This reduces
   possibility of unexpected breakages, and achieves the stability of the
   release branch.
+  
+  An exception to the above rule:
+  If a submitted merge request is not applied for a month,
+  the submitter may boost the priority of the entry to 6.
+  If 2 weeks pass since the submitter boosted the priority, he
+  is entitled to do the merge himself. This is the last resort as
+  it's always better to have a second eye on the fix. Only
+  non-questioned merge requests may be merged by the submitter.
 
   During this process, some more preview builds may be made periodically.
 
diff --git a/doc/releasing-jedit.txt b/doc/releasing-jedit.txt
index 294f956..98489fd 100644
--- a/doc/releasing-jedit.txt
+++ b/doc/releasing-jedit.txt
@@ -177,23 +177,23 @@ build = matcher.group(1);
 major = Integer.parseInt(build.substring(0,2));
 minor = Integer.parseInt(build.substring(3,5));
 beta = Integer.parseInt(build.substring(6,8));
-bugfix = Integer.parseInt(build.substring(9,11));
+micro = Integer.parseInt(build.substring(9,11));
 branch = major + "." + minor + ".x";
 tag = "jedit-"
       + major
       + "-" + minor
-      + (beta != 99 ? "-pre" + beta : "-" + bugfix);
+      + (beta != 99 ? "-pre" + beta : "-" + micro);
 version = major
           + "." + minor
-          + (beta != 99 ? "pre" + beta : "." + bugfix);
+          + (beta != 99 ? "pre" + beta : "." + micro);
 nextVersion = major
               + "." + minor
-              + (beta != 99 ? "pre" + (beta + 1) : "." + (bugfix + 1));
+              + (beta != 99 ? "pre" + (beta + 1) : "." + (micro + 1));
 nextBuild = String.format("%02d.%02d.%02d.%02d",
                           new Object[] { Integer.valueOf(major),
                                          Integer.valueOf(minor),
                                          Integer.valueOf(beta == 99 ? beta : beta + 1),
-                                         Integer.valueOf(beta == 99 ? bugfix + 1 : bugfix) });
+                                         Integer.valueOf(beta == 99 ? micro + 1 : micro) });
 sourceForgeUsername = Macros.input(view, "Your SourceForge Username?", "Vampire0");
 SearchAndReplace.setBeanShellReplace(false);
 SearchAndReplace.setIgnoreCase(false);
diff --git a/doc/tips/tip84.html b/doc/tips/tip84.html
index b3c6065..e353776 100644
--- a/doc/tips/tip84.html
+++ b/doc/tips/tip84.html
@@ -1,5 +1,8 @@
-<html><body>If you use a version control system, try the
-<b>Gruntspud</b> plugin (CVS), <b>SourceControl</b> (Perforce, Visual SourceSafe) or <b>ClearCase</b>.
-Plugins can
-be downloaded and installed from within jEdit using the plugin manager
-(<b>Plugins</b>><b>Plugin Manager</b>).</body></html>
+<html><body>
+<p> If you use a version control system, try the
+<b>SvnPlugin</b>, <b>P4Plugin</b>, or <b>ClearCasePlugin</b>. 
+Or the <b>GitPlugin</b>, <b>HgPlugin</b>, or <b>BzrPlugin</b> for that matter.
+There's even a plugin for Visual SourceSafe, <b>SourceControl</b>. 
+Plugins can be downloaded and installed from within jEdit using the plugin manager
+(<b>Plugins</b>><b>Plugin Manager</b>). </p>
+</body></html>
diff --git a/doc/users-guide/conventions.xml b/doc/users-guide/conventions.xml
index e22201d..3cd41dd 100644
--- a/doc/users-guide/conventions.xml
+++ b/doc/users-guide/conventions.xml
@@ -91,7 +91,9 @@
                     buttons) have a certain letter in their label underlined.
                     Pressing this letter in combination with the
                     <keycap>Alt</keycap> key activates the associated user
-                    interface widget. Note that this functionality is not
+                    interface widget. The "F10" key can also be pressed to put
+                    focus on the menu bar, it has the same functionality as the 
+                    Alt key in Windows. Note that this functionality is not
                     available on MacOS X with the <quote>MacOS Adaptive</quote>
                     look and feel. See <xref linkend="appearance-pane" /> for
                     information on changing the look and feel.</entry>
diff --git a/doc/users-guide/customizing.xml b/doc/users-guide/customizing.xml
index 3685b90..673ee3e 100644
--- a/doc/users-guide/customizing.xml
+++ b/doc/users-guide/customizing.xml
@@ -40,6 +40,11 @@
             </listitem>
 
             <listitem>
+                <para>The automatic indentation scheme
+                (see <xref linkend="autoindent" />)</para>
+            </listitem>
+
+            <listitem>
                 <para>The wrap mode and margin (see <xref
                 linkend="word-wrap" />)</para>
             </listitem>
@@ -89,21 +94,17 @@
                 <thead>
                     <row>
                         <entry>Property name</entry>
-
                         <entry>Description</entry>
                     </row>
                 </thead>
-
                 <tbody>
                     <row>
                         <entry><varname>collapseFolds</varname></entry>
-
                         <entry>Folds with a level of this or higher will be
                         collapsed when the buffer is opened. If set to zero, all
                         folds will be expanded initially. See <xref
                         linkend="folding" />.</entry>
                     </row>
-
                     <row>
                         <entry><varname>deepIndent</varname></entry>
 
@@ -111,10 +112,12 @@
                         expressions delimited by parentheses are aligned like
                         so: <programlisting>retVal.x = (int)(horizontalOffset
     + Chunk.offsetToX(info.chunks,
-                      offset));</programlisting> With this setting disabled, the
+                      offset));
+</programlisting> With this setting disabled, the
                         text would look like so: <programlisting>retVal.x = (int)(horizontalOffset
     + Chunk.offsetToX(info.chunks,
-    offset));</programlisting></entry>
+    offset));
+</programlisting></entry>
                     </row>
 
                     <row>
@@ -178,8 +181,9 @@
                         <entry><varname>wordBreakChars</varname></entry>
 
                         <entry>Characters, in addition to spaces and tabs, at
-                        which lines may be split when word wrapping. See <xref
-                        linkend="entering-text" />.</entry>
+                        which lines may be split when the word wrap mode is set
+                        to <quote>hard</quote>. See <xref linkend="word-wrap"
+                        />.</entry>
                     </row>
 
                     <row>
@@ -189,6 +193,15 @@
                         <quote>soft</quote>, or <quote>hard</quote>. See <xref
                         linkend="word-wrap" />.</entry>
                     </row>
+
+                    <row>
+                        <entry><varname>autoIndent</varname></entry>
+
+                        <entry>The automatic indentation scheme; one of
+                        <quote>none</quote>, <quote>full</quote>, or
+                        <quote>simple</quote>. See <xref linkend="autoindent" />.
+                        </entry>
+                    </row>
                 </tbody>
             </tgroup>
         </informaltable>
@@ -262,10 +275,10 @@
 
             <para>The <guibutton>Appearance</guibutton> pane can be used to
             change the appearance of user interface controls such as buttons,
-            labels and menus. It can also be used to change the docking
-            framework (the dockable window manager). The number of items
-            retained in history text fields can also be set here; see
-            <xref linkend="history" />.</para>
+            labels and menus. It can also be used to change the icon set, or 
+            look and feel, enable/disable the splash screen or
+            system tray, and other appearance tweaks. You can also set the number of items
+            retained in history text fields, see <xref linkend="history" />.</para>
 
         </section>
 
@@ -286,9 +299,13 @@
             docking locations for each of them. Another way to
             specify docking locations is to use the popup menus associated with each dockable window. </para>
 
-            <para> It is possible to configure jEdit to automatically load and/or save <emphasis role="bold">Docking Layouts</emphasis> (similar to eclipse perspectives) based on the edit mode of your current b uffer through the checkboxes in this pane. See <xref linkend="docking" />.
+            <para> It is possible to configure jEdit to automatically load and/or save <emphasis role="bold">Docking Layouts</emphasis> (similar to eclipse perspectives) based on the edit mode of your current buffer through the checkboxes in this pane. See <xref linkend="docking" />.
             </para>
 
+            <para> jEdit also supports alternate docking frameworks. If 
+            the appropriate plugins are installed (Currently only MyDoggy
+            is available), you can change docking frameworks from here. 
+            </para>
 
         </section>
 
@@ -304,7 +321,7 @@
 
             <para>The <literal>File name
             glob</literal> and <literal>First line glob</literal> text
-            fields let you specify a glob pattern that names and first lines of
+            fields let you specify a glob pattern that paths and first lines of
             buffers will be matched against to determine the edit mode. See
             <xref linkend="globs" /> for information about glob patterns.</para>
 
@@ -358,7 +375,8 @@
                 <literal>buffer-local-property</literal>:
                 detects same syntax described at <xref linkend="buffer-local" />
                 for property name "encoding". Note that unlike other buffer-local
-                properties, this one will not work unless it is at the top of the file.
+                properties, this one will not work unless it is at the top of the file,
+                and this appears in the list of encoding detectors.
               </para></listitem>
             </itemizedlist>
             Others can be defined in plugins as services and added to this
@@ -390,8 +408,9 @@
             <title>The Gutter Pane</title>
 
             <para>The <guibutton>Gutter</guibutton> option pane contains
-            settings to customize the appearance of the gutter. Some new options were added
-            to jEdit 4.3, including "show gutter", "minimal number of digits to reserve for line numbers",
+            settings to customize the appearance of the gutter. You can
+            customize values such as 
+            "minimal number of digits to reserve for line numbers",
             and "fold style".  See <xref linkend="overview" />.</para>
         </section>
 
@@ -406,15 +425,6 @@
 
         </section>
 
-        <section id="printing-pane">
-            <title>The Printing Pane</title>
-
-            <para>The <guibutton>Printing</guibutton> option pane contains
-            settings to control the appearance of printed output. Workarounds
-            that might be needed for your Java version to print correctly can
-            also be enabled here. See <xref linkend="printing" />.</para>
-        </section>
-
         <section id="pluginmgr-pane">
             <title>The Plugin Manager Pane</title>
 
@@ -424,6 +434,16 @@
             linkend="using-plugins" />.</para>
         </section>
 
+        
+        <section id="printing-pane">
+            <title>The Printing Pane</title>
+
+            <para>The <guibutton>Printing</guibutton> option pane contains
+            settings to control the appearance of printed output. Workarounds
+            that might be needed for your Java version to print correctly can
+            also be enabled here. See <xref linkend="printing" />.</para>
+        </section>
+
         <section id="firewall-pane">
             <title>The Proxy Servers Pane</title>
 
@@ -445,37 +465,62 @@
 
             <para>The <guibutton>Shortcuts</guibutton> option pane associates
             keyboard shortcuts with commands. Each command can have up to two
-            shortcuts associated with it.</para>
-
-            <para>The combo box at the top of the option pane selects the
-            command set to edit. Command sets include the set of all built-in
+            shortcuts associated with it, and each shortcut can be a single
+            or multiple key sequence. </para>
+
+            <para>jEdit 5 introduces a new feature known as "keymaps". Each keymap is
+            a named set of keyboard shortcut mappings.
+            Default keymaps are found in jEdit's <literal>keymaps</literal> folder,
+            and user customized keymaps are are stored in the
+            user settings' <literal>keymaps</literal> folder. </para>
+
+            <para> The top combobox allows you to <guilabel>Choose a Keymap</guilabel>,
+            or a set of shortcuts.
+            The "imported" keymap is automatically created and selected when jEdit needs
+            to initially create a "keymaps" user settings folder.
+            At this point, jEdit imports the existing shortcuts and places them into
+            "imported". This makes it easy to bring in shortcuts
+            from properties files that were customized with jEdit 4.5 or earlier. </para>
+
+            <para> If a keymap of the same name exists in the defaults and the user settings
+            directory, the user version is the one that is used in favor of the default.
+            To take an existing keymap and customize it, select it, click
+            <guibutton>duplicate</guibutton> and you will be asked for the name of the new
+            keymap. A copy of that keymap will be
+            saved in the user settings <literal>keymaps</literal> directory. At this point,
+            this keymap will be selected and will determine where new shortcut properties are
+            stored. To remove all customizations and restore a default keymap,
+            click <guibutton>reset</guibutton>. </para>
+
+            <para>The combo box below the keymap selector selects the
+            command set to edit. Command sets exist for the set of all built-in
             commands, the commands of each plugin, and the set of macros.</para>
 
             <para>To change a shortcut, click the appropriate table entry and
             press the keys you want associated with that command in the
             resulting dialog box. The dialog box will warn you if the shortcut
-            is already assigned.</para>
-
-            <bridgehead> 2-key shortcut prefixes </bridgehead>
-
-            <para> Some shortcuts, such as C+e, C+m, and C+r, are prefixes for two-keystroke shortcuts. Another  keystroke may be used as a prefix in a 2-key shortcut, so for example, C+x can be redefined as a prefix to make it more emacs-like, by mapping any other action to a C+x prefixed shortcut.</para>
-
-            <para> Conversely, emacs users will notice at first that C+e can not be mapped as a single key shortcut to go to the end of the line, unless all of the other actions that contain C+e prefixed shortcuts are remapped to other shortcuts first. After that, C+e can be bound to end-of-line. </para>
-
-            <para> The default shortcuts can be found in  <literal>jedit_keys.props</literal>. </para>
+            is already assigned. The properties will be saved in the currently selected
+            keymap.
+            </para>
 
         </section>
 
         <section id="status-bar-pane">
             <title>The Status Bar Pane</title>
 
-            <para>The <guibutton>Status Bar</guibutton>, its API, and its coprresponding option pane were redesigned in jEdit 4.3. Now, the pane contains settings to customize which widgets are in the status bar, their order, and what separators exist between them. Or, you can disable it completely, for regular and/or plain views. See <xref linkend="status-bar" />.</para>
+            <para>The <guibutton>Status Bar</guibutton>, its API, and its corresponding option
+            pane contains settings to customize
+            which widgets are in the status bar, their order, and what separators exist
+            between them. Or, you can disable it completely, for regular and/or plain views.
+            See <xref linkend="status-bar" />.</para>
 
             <para> From the <literal>Options</literal> tab, you can
             customize information about the caret display in the lower
             left corner. </para>
 
-            <para> Selecting the <literal>Widgets</literal> tab of this option pane shows you what widgets on the right, and their order. You can add or remove widgets and separators/labels here. </para>
+            <para> Selecting the <literal>Widgets</literal> tab of this option pane shows
+            you what widgets on the right, and their order. You can add or remove widgets
+            and separators/labels here. </para>
 
         </section>
 
@@ -492,8 +537,26 @@
             <title>The Text Area Pane</title>
 
             <para>The <guibutton>Text Area</guibutton> pane contains settings to
-            customize the appearance of the text area. See <xref
-            linkend="overview" />.</para>
+            customize the appearance of the text area. </para>
+            
+            <para>You can configure the <guibutton>Text Font</guibutton>,
+            antialias settings, colors, cursor style, highlight matching, and 
+            word-completion settings from here. </para>
+            
+            <para><guibutton>Fractional Font Metrics</guibutton> is an old option
+            that helps with certain versions of Java, but usually not in combination
+            with subpixel antialiasing. </para>
+            
+            <para><guibutton>Additional Fonts with font substitution</guibutton> if checked,
+            shows a list of <guibutton>Preferred fonts</guibutton>, as well as the following option.
+            Fonts added to this list will determine the order jEdit searches 
+            for glyphs that may be missing from your chosen 
+            <guibutton>Text Font</guibutton>. </para>
+            <para> If the 
+            <guibutton>Font Substitution: Search all system fonts</guibutton> option is checked, <emphasis>all of the installed fonts</emphasis> 
+            are searched for glyphs, after the preferred list is searched. If this option is checked, no fonts need to be added to preferred fonts list. 
+            You probably don't want to un-check either of these options unless you want to test a system with limited fonts. </para>
+
         </section>
 
         <section id="toolbar-pane">
@@ -536,8 +599,12 @@
         the settings directory still comes in handy in certain situations, for
         example when you want to copy jEdit settings between computers.</para>
 
-        <para>The location of the settings directory is system-specific; it is
-        printed to the activity log
+        <para>The location of the settings directory is system-specific
+        <footnote><para> On Linux, it is <literal>~/.jedit</literal>. 
+           On Windows, you will find it in <literal>%APPDATA%\jEdit</literal>. 
+           On the Mac, it is <literal>~/Library/jEdit</literal>. 
+        </para></footnote>.
+        It is printed to the activity log
         (<guimenu>Utilities</guimenu>><guisubmenu>Troubleshooting</guisubmenu>><guimenuitem>Activity
         Log</guimenuitem>). For example:</para>
 
@@ -639,7 +706,7 @@
 
             <listitem>
                 <para><filename>printspec</filename> - a binary file that stores
-                printing settings when running under Java 2 version 1.4.</para>
+                printing settings.</para>
             </listitem>
 
             <listitem>
@@ -685,8 +752,9 @@
             integer or boolean) by plugins at runtime.</para>
 
             <para>Do not edit this file while jEdit is running. If you do, it
-            is possible that your changes will be lost since jEdit writes to this
-            this file frequently.</para>
+            is possible that your changes (either your edits, or jEdit settings 
+            changes) may get lost. </para>
+            
         </section>
 
         <section id="sitepropertiesfiles">
diff --git a/doc/users-guide/files.xml b/doc/users-guide/files.xml
index b9851ef..c159593 100644
--- a/doc/users-guide/files.xml
+++ b/doc/users-guide/files.xml
@@ -285,8 +285,9 @@
 
         <para>Note that there is no general way to auto-detect the encoding used
         by a file, however jEdit supports "encoding detectors", of which there
-        are 4 in the core, and others can be provided by plugins through the
-        services api. From the encodings option pane <xref linkend="encodings-pane"/>, you can customize which
+        are some provided in the core, and others may be provided by plugins
+        through the services api. From the encodings option pane
+        <xref linkend="encodings-pane"/>, you can customize which
         ones are used, and the order they are tried. Here are some of the
         encoding detectors recognized by jEdit: </para>
 
@@ -325,7 +326,6 @@
                 </programlisting>
             </listitem>
 
-
         </itemizedlist>
 
         <para>The encoding that will be used to save the current buffer is shown
@@ -460,8 +460,6 @@
                 conventional letter-by-letter sort would have placed these two
                 files in the wrong order.</para>
             </tip>
-
-
         </section>
 
         <section>
diff --git a/doc/users-guide/history.xml b/doc/users-guide/history.xml
index a5252ea..60db284 100644
--- a/doc/users-guide/history.xml
+++ b/doc/users-guide/history.xml
@@ -1,11 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <appendix id="history">
     <title>History Text Fields</title>
-
     <!-- jEdit buffer-local properties: -->
-
     <!-- :indentSize=1:noTabs=true: -->
-
     <!-- :xml.root=users-guide.xml: -->
 
     <para>The text fields in many jEdit components, such as the file system
diff --git a/doc/users-guide/installing-modes.xml b/doc/users-guide/installing-modes.xml
index e027c9c..4b66e82 100644
--- a/doc/users-guide/installing-modes.xml
+++ b/doc/users-guide/installing-modes.xml
@@ -1,11 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <chapter id="installing-modes">
     <title>Installing Edit Modes</title>
-
     <!-- jEdit buffer-local properties: -->
-
     <!-- :indentSize=1:noTabs=true: -->
-
     <!-- :xml.root=users-guide.xml: -->
     <para>jEdit looks for edit modes in two locations; the
     <filename>modes</filename> subdirectory of the jEdit settings directory, and
@@ -55,7 +52,7 @@
         <listitem>
             <para><literal>FILE_NAME_GLOB</literal> - files whose names match
             this glob pattern will be opened in this edit mode.
-            This can also specify full paths, if the glob pattern contains a path separator character. <literal>FILE_NAME_GLOB</literal> can be specified in the <literal>modes/catalog</literal> file, or the mode file itself. See the <literal>FILE_NAME_GLOB</literal> for <literal>apacheconf.xml</literal> in <literal>modes/catalog</literal> for an example of full path filename globbing. 
+            This can also specify full paths, if the glob pattern contains a path separator character. <literal>FILE_NAME_GLOB</literal> can be specified in the <literal>modes/catalog</literal> file, or the mode file itself. See the <literal>FILE_NAME_GLOB</literal> for <literal>apacheconf.xml</literal> in <literal>modes/catalog</literal> for an example of full path filename globbing.
             </para>
         </listitem>
 
diff --git a/doc/users-guide/launcher-guide.xml b/doc/users-guide/launcher-guide.xml
index 1e78cb7..19e092c 100644
--- a/doc/users-guide/launcher-guide.xml
+++ b/doc/users-guide/launcher-guide.xml
@@ -3,11 +3,10 @@
 <appendix id="launcher-guide">
     <title>jEditLauncher for Windows</title>
     <!-- jEdit buffer-local properties:                           -->
-    <!-- :tabSize=2:indentSize=1:noTabs=true:maxLineLen=72:       -->
+    <!-- :tabSize=2:indentSize=1:noTabs=true:maxLineLen=80:       -->
     <!-- jEditLauncher 4.0 (R2) Quick Guide                       -->
     <!-- Copyright (C) 2001, 2002 John Gellene                    -->
-    <!-- $Id: launcher-guide.xml 16181 2009-09-08 19:26:57Z ezust $
--->
+
     <section id="launcher-intro">
         <title>Introduction</title>
 
diff --git a/doc/users-guide/macro-basics.xml b/doc/users-guide/macro-basics.xml
index ab53a4f..5de7dab 100644
--- a/doc/users-guide/macro-basics.xml
+++ b/doc/users-guide/macro-basics.xml
@@ -1,12 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <chapter id="macro-basics">
     <title>Macro Basics</title>
-    <!-- jEdit 4.0 Macro Guide, (C) 2001, 2002 John Gellene          -->
     <!-- jEdit buffer-local properties:                              -->
-    <!-- :indentSize=1:noTabs=yes:maxLineLen=72:tabSize=2:           -->
+    <!-- :indentSize=1:noTabs=yes:maxLineLen=80:tabSize=2:           -->
     <!-- :xml.root=users-guide.xml:                                  -->
     <!-- This file cover the introductory section of the macro guide -->
-    <!-- $Id: macro-basics.xml 16181 2009-09-08 19:26:57Z ezust $  -->
 
     <section id="beanshell-intro">
         <title>Introducing BeanShell</title>
diff --git a/doc/users-guide/macro-tips.xml b/doc/users-guide/macro-tips.xml
index 331978d..14b9ae7 100644
--- a/doc/users-guide/macro-tips.xml
+++ b/doc/users-guide/macro-tips.xml
@@ -1,25 +1,9 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <chapter id="macro-tips">
     <title>Macro Tips and Techniques</title>
-
-    <!-- jEdit 4.0 Macro Guide, (C) 2001, 2002 John Gellene       -->
-
-    <!-- Wed Jun 20 16:56:26 EDT 2001 @914 /Internet Time/        -->
-
-    <!--                                                          -->
-
-    <!-- jEdit buffer-local properties:                           -->
-
+    <!-- jEdit buffer-local properties:                             -->
     <!-- :indentSize=1:noTabs=yes:maxLineLen=0:wrap=soft:tabSize=2: -->
-
-    <!-- :xml.root=users-guide.xml:                               -->
-
-    <!--                                                          -->
-
-    <!-- This file covers the chapter "Macro tips and techniques" -->
-
-    <!-- $Id: macro-tips.xml 16181 2009-09-08 19:26:57Z ezust $
- -->
+    <!-- :xml.root=users-guide.xml:                                 -->
 
     <section id="macro-tips-input">
         <title>Getting Input for a Macro</title>
@@ -889,8 +873,9 @@ new Thread(r).start();</programlisting>
             activity log:</para>
 
             <informalexample>
-                <programlisting>Log.log(Log.DEBUG, BeanShell.class,
-    "counter = " + counter);</programlisting>
+            <programlisting>
+Log.log(Log.DEBUG, BeanShell.class, "counter = " + counter);
+            </programlisting>
             </informalexample>
 
             <para>The corresponding activity log entry might read as
diff --git a/doc/users-guide/plugin-implement.xml b/doc/users-guide/plugin-implement.xml
index 723af6c..6c46051 100644
--- a/doc/users-guide/plugin-implement.xml
+++ b/doc/users-guide/plugin-implement.xml
@@ -246,20 +246,24 @@
 # the presence of this property also tells jEdit the plugin is using the new API
 plugin.QuickNotepadPlugin.activate=defer
 
-# These two properties are required for all plugins
+# Even if you don't store additional files, this is a good idea to set:
+plugin.QuickNotepadPlugin.usePluginHome=true
+
+# Required for all plugins:
 plugin.QuickNotepadPlugin.name=QuickNotepad
 plugin.QuickNotepadPlugin.author=John Gellene
 
 # version number == jEdit version number
-plugin.QuickNotepadPlugin.version=4.4
+plugin.QuickNotepadPlugin.version=4.5
 
 # online help
 plugin.QuickNotepadPlugin.docs=index.html
 
-# we only have one dependency, jEdit 4.4.1
-plugin.QuickNotepadPlugin.depend.0=jedit 04.04.99.01
+# we only have one dependency, jEdit 4.5
+# See jEdit.getBuild() to understand version numbering scheme. 
+plugin.QuickNotepadPlugin.depend.0=jedit 4.05.99.00
 
-# plugin menu
+# quicknotepad's plugin menu - a list of actions or separators
 plugin.QuickNotepadPlugin.menu=quicknotepad \
 	- \
 	quicknotepad.choose-file \
@@ -354,12 +358,13 @@ backslash.property=A backslash can be inserted by writing \\.</programlisting>
         <informalexample>
             <programlisting># general plugin information
 plugin.QuickNotepadPlugin.activate=defer
+plugin.QuickNotepadPlugin.usePluginHome=true
 plugin.QuickNotepadPlugin.name=QuickNotepad
 plugin.QuickNotepadPlugin.author=John Gellene
-plugin.QuickNotepadPlugin.version=4.03
+plugin.QuickNotepadPlugin.version=4.5
 plugin.QuickNotepadPlugin.docs=QuickNotepad.html
-# depends on jEdit 4.4.1
-plugin.QuickNotepadPlugin.depend.0=jedit 04.04.99.01
+# depends on jEdit 4.5
+plugin.QuickNotepadPlugin.depend.0=jedit 04.05.99.00
 plugin.QuickNotepadPlugin.description=A demo jEdit plugin that provides a notepad dockable.
 plugin.QuickNotepadPlugin.longdescription=description.html
 </programlisting>
@@ -476,8 +481,7 @@ options.quicknotepad.filepath=</programlisting>
         closed, after it is closed, created, loaded, or saved. Each of these
         messages are described in further detail in the API docs.</para>
 
-        <para>As another example, The Navigator plugin monitors a newly added
-        (to jEdit 4.3) EBMessage of the kind <ulink
+        <para>As another example, The Navigator plugin monitors an EBMessage of the kind <ulink
         url="../api/org/gjt/sp/jedit/BufferChanging.html">BufferChanging</ulink>.
         The BufferChanging event provides Navigator enough advance notice to
         save the TextArea's caret just before the current EditPane changes its
@@ -704,20 +708,27 @@ else if(msg instanceof ViewUpdate) {
         <informalexample>
             <programlisting>
 <!DOCTYPE SERVICES SYSTEM "services.dtd">
-
 <SERVICES>
-        <SERVICE CLASS="sidekick.SideKickParser" NAME="xml">
-                new xml.parser.SAXParserImpl();
-        </SERVICE>
+    <SERVICE CLASS="sidekick.SideKickParser" NAME="html">
+        new sidekick.html.HtmlParser();
+    </SERVICE>
+  [...]
 </SERVICES>
+    
 </programlisting>
         </informalexample>
 
-        <para>The object it returns tells Sidekick how it can parse files of a
-        specific type. The API docs for SideKickParser indicate exactly which
-        methods must be implemented in a plugin which offers this service. It
-        should be enough information to let Sidekick, which has its own
-        dockable, display the tree information in its own view.</para>
+        <para> The value of the <literal>CLASS=</literal> should be a
+        base-class or interface of the object that is returned by
+        executing the beanshell factory method enclosed in the
+        <literal><SERVICE></literal> tag.
+        </para>
+
+        <para>In the case above, the returned object
+        tells Sidekick how it can parse files of a specific type (HTML).
+        The API docs for <literal>SideKickParser</literal>
+        should indicate precisely which methods must be implemented in a plugin
+        which offers this service. </para>
 
         <para>For more information about services, refer to the <ulink
         url="../api/org/gjt/sp/jedit/ServiceManager.html">ServiceManager</ulink>
@@ -1144,18 +1155,22 @@ else if(msg instanceof ViewUpdate) {
 
         <informalexample>
             <programlisting>
-<project name="QuickNotepad"
-         default="build">
-    <description>
-        This is an ant build.xml file for building the QuickNotepad plugin for jEdit.
-    </description>
-    <property name="user-doc.xml"
-          value="users-guide.xml" />
-    <property file="build.properties" />
-    <property file="../build.properties" />
-	<property name="build.support"
-			  value="../../../build-support" />
-    <import file="${build.support}/plugin-build.xml" />
+<project name="QuickNotepad" default="build">
+  <description>
+    This is an ant build.xml file for building the QuickNotepad plugin for jEdit.
+  </description>
+
+  <property file="build.properties"/>
+  <property file="../build.properties"/>
+  <property name="user-doc.xml" location = "users-guide.xml"/>
+  <import file="${build.support}/plugin-build.xml" />
+
+  <!-- Extra files that should be included in the jar -->
+  <selector id="packageFiles">
+    <or>
+        <filename name="*.txt" />
+    </or>
+  </selector>
 </project>
 </programlisting>
         </informalexample>
diff --git a/doc/users-guide/plugin-intro.xml b/doc/users-guide/plugin-intro.xml
index e16217a..f3a4d7f 100644
--- a/doc/users-guide/plugin-intro.xml
+++ b/doc/users-guide/plugin-intro.xml
@@ -3,10 +3,7 @@
     <title>Introducing the Plugin API</title>
     <!-- :indentSize=1:tabSize=2:noTabs=true:wrap=soft:maxLineLen=0:     -->
     <!-- :xml.root=users-guide.xml: -->
-    <!-- jEdit 4 Plugin Guide, (C) 2001, 2002 John Gellene      -->
     <!-- jEdit buffer-local properties:                         -->
-    <!-- This is the introduction of the jEdit 4 Plugin Guide -->
-    <!-- $Id: plugin-intro.xml 17179 2010-02-02 05:56:07Z ezust $ -->
 
     <indexterm>
         <primary>Plugin API</primary>
diff --git a/doc/users-guide/plugin-tips.xml b/doc/users-guide/plugin-tips.xml
index 914463d..3d67343 100644
--- a/doc/users-guide/plugin-tips.xml
+++ b/doc/users-guide/plugin-tips.xml
@@ -77,8 +77,8 @@
         For example, the QuickNotepad example should have lines like this:
         </para>
         <programlisting>
-        textarea.setBackground(jEdit.getColorProperty("view.bgColor", Color.WHITE);
-        textarea.setForeground(jEdit.getColorProperty("view.fgColor", Color.BLACK);
+        textarea.setBackground(jEdit.getColorProperty("view.bgColor", Color.WHITE));
+        textarea.setForeground(jEdit.getColorProperty("view.fgColor", Color.BLACK));
         </programlisting><para>
         This sets the foreground and background colors of QuickNotepad to be the same
         as those in the View.
diff --git a/doc/users-guide/regexps.xml b/doc/users-guide/regexps.xml
index 3e5af99..748e3e8 100644
--- a/doc/users-guide/regexps.xml
+++ b/doc/users-guide/regexps.xml
@@ -1,14 +1,11 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <appendix id="regexps">
     <title>Regular Expressions</title>
-
     <!-- jEdit buffer-local properties: -->
-
     <!-- :indentSize=1:noTabs=yes: -->
-
     <!-- :xml.root=users-guide.xml: -->
 
-    <para>jEdit 4.3pre5 and later uses regular expressions from <ulink
+    <para>jEdit uses regular expressions from <ulink
     url="http://download.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html">java.util.regex.Pattern</ulink>
     to implement inexact search and replace. Click there to see a complete
     reference guide to all supported meta-characters.</para>
@@ -19,7 +16,7 @@
     <note>
         <title>Inside XML files</title>
 
-        <para>Inside XML files (such as Jedit mode files), it is important that
+        <para>Inside XML files (such as jEdit mode files), it is important that
         you escape XML special characters, such as &, <, >, etc. You
         can use the XML plugin's "characters to entities" to perform this
         mapping.</para>
@@ -242,7 +239,7 @@
 
                 <para>There are some known issues with the
                 <literal>java.util.regex</literal> library, as it stands in
-                Sun's Java 1.5 and 1.6. In particular, it is possible to create
+                Sun's Java 1.6. In particular, it is possible to create
                 regular expressions that hang the JVM, or cause stack overflow
                 errors, which was not as easy to accomplish using the legacy
                 <literal>gnu.regexp</literal> library. If you find that
@@ -253,5 +250,4 @@
                 dialog.</para>
             </note>
 
-
 </appendix>
\ No newline at end of file
diff --git a/doc/users-guide/shortcuts.xml b/doc/users-guide/shortcuts.xml
index ab6c991..e621712 100644
--- a/doc/users-guide/shortcuts.xml
+++ b/doc/users-guide/shortcuts.xml
@@ -1,17 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <appendix id="shortcuts">
     <title>Keyboard Shortcuts</title>
-
+    <!-- This is for the default jEdit keymap. Do we really need this? -->
     <!-- jEdit buffer-local properties: -->
-
     <!-- :tabSize=1:indentSize=1:noTabs=true: -->
-
     <!-- :xml.root=users-guide.xml: -->
 
-    <para>This appendix documents the default set of keyboard shortcuts. They
-    can be customized to suit your taste in the <guibutton>Shortcuts</guibutton>
-    pane of the <guimenu>Utilities</guimenu>><guimenuitem>Global
-    Options</guimenuitem> dialog box; see <xref linkend="global-opts" />.</para>
+    <para>This appendix documents the "jEdit" keymap of keyboard shortcuts.
+    Keymaps can be created and customized to suit your taste in the
+    <guibutton>Shortcuts</guibutton> pane of the
+    <guimenu>Utilities</guimenu>><guimenuitem>Global Options</guimenuitem>
+    dialog box; see <xref linkend="shortcuts-pane" />.</para>
 
     <bridgehead>Files</bridgehead>
 
@@ -26,7 +25,6 @@
             <tbody>
                 <row>
                     <entry><keycap>C+n</keycap></entry>
-
                     <entry>New file.</entry>
                 </row>
 
diff --git a/doc/users-guide/source-edit.xml b/doc/users-guide/source-edit.xml
index 9b17dae..16d903e 100644
--- a/doc/users-guide/source-edit.xml
+++ b/doc/users-guide/source-edit.xml
@@ -1,11 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <chapter id="source-edit">
     <title>Editing Source Code</title>
-
     <!-- jEdit buffer-local properties: -->
-
     <!-- :tabSize=1:indentSize=1:noTabs=true:wrap=soft:maxLineLen=80: -->
-
     <!-- :xml.root=users-guide.xml: -->
 
     <section id="modes">
@@ -174,19 +171,19 @@
             current selection, or the entire buffer if nothing is
             selected.</para>
 	 </section>
-	
+
 	 <section id="elastic-tabstops">
             <title>Elastic Tabstops</title>
 
             <para>Elastic tabstops are an alternative way to handle tabstops.
-            Elastic tabstops differ from traditional fixed tabstops because 
-	     columns in lines above and below the "cell" that is being 
-            changed are always kept aligned. As the width of text before a tab 
-            character changes, the tabstops on adjacent lines are also 
+            Elastic tabstops differ from traditional fixed tabstops because
+	     columns in lines above and below the "cell" that is being
+            changed are always kept aligned. As the width of text before a tab
+            character changes, the tabstops on adjacent lines are also
             changed to fit the widest piece of text in that column. It provides
             certain explicit benefits like it saves time
-	     spent on arranging the code and works seemlessly with variable width 
-            fonts.But at the same time it can make the code look unorganized 
+	     spent on arranging the code and works seemlessly with variable width
+            fonts.But at the same time it can make the code look unorganized
             on editors that do not support elastic tabstops.</para>
 
             <para>This feature is known as <firstterm>elastic tabstops</firstterm>.
@@ -227,71 +224,155 @@
             <title>Automatic Indent</title>
 
             <para>The auto indent feature inserts the appropriate number of tabs
-            or spaces at the beginning of a line by looking at program
-            structure.</para>
-
-            <para>In the default configuration, pressing <keycap>ENTER</keycap>
-            will create a new line with the appropriate amount of indent
-            automatically, and pressing <keycap>TAB</keycap> at the beginning
-            of, or inside the leading whitespace of a line will insert the
-            appropriate amount of indentation. Pressing it again will insert a
-            tab character.</para>
-
-            <para>The behavior of the <keycap>ENTER</keycap> and
-            <keycap>TAB</keycap> keys can be configured in the
-            <guibutton>Shortcuts</guibutton> pane of the
+            or spaces at the beginning of a line. There are three different
+            indentation schemes to choose from: <quote>full</quote>,
+            <quote>simple</quote>, and <quote>none</quote>. The scheme can be
+            chosen on a global or per-edit mode basis using the
+            <guibutton>Editing</guibutton> pane of the
             <guimenu>Utilities</guimenu>><guimenuitem>Global
-            Options</guimenuitem> dialog. box, just as with any other key. The
-            <keycap>ENTER</keycap> key can be bound to one of the following, or
-            indeed any other command or macro:</para>
-
-            <itemizedlist>
-                <listitem>
-                    <para><guimenuitem>Insert Newline</guimenuitem>.</para>
-                </listitem>
-
-                <listitem>
-                    <para><guimenuitem>Insert Newline and Indent</guimenuitem>,
-                    which is the default.</para>
-                </listitem>
-            </itemizedlist>
-
-            <para>The <keycap>TAB</keycap> can be bound to one of the following,
-            or again, any other command or macro:</para>
-
-            <itemizedlist>
-                <listitem>
-                    <para><guimenuitem>Insert Tab</guimenuitem>.</para>
-                </listitem>
-
-                <listitem>
-                    <para><guimenuitem>Insert Tab or Indent</guimenuitem>, which
-                    is the default.</para>
-                </listitem>
-
-                <listitem>
-                    <para><guimenuitem>Indent Selected
-                    Lines</guimenuitem>.</para>
-                </listitem>
-            </itemizedlist>
-
-            <para>See <xref linkend="shortcuts-pane" /> for details.</para>
-
-            <para>Auto indent behavior is mode-specific. In most edit modes, the
-            indent of the previous line is simply copied over. However, in
-            C-like languages (C, C++, Java, JavaScript), curly brackets and
-            language statements are taken into account and indent is added and
-            removed as necessary.</para>
-
-            <para><guimenu>Edit</guimenu>><guisubmenu>Indent</guisubmenu>><guisubmenu>Indent
-            Selected Lines</guisubmenu> (shortcut: <keycap>C+i</keycap>) indents
-            all selected lines, or the current line if there is no
-            selection.</para>
-
-            <para>To insert a literal tab or newline without performing
-            indentation, prefix the tab or newline with <keycap>C+e v</keycap>.
-            For example, to create a new line without any indentation, type
-            <keycap>C+e v ENTER</keycap>.</para>
+            Options</guimenuitem> dialog. It can also be changed for a specific
+            buffer using the <guimenuitem>Buffer Options</guimenuitem> dialog,
+            or with a buffer-local property. (see <xref linkend="buffer-local"/>)
+            </para>
+
+            <section id="autoindent-full">
+                <title>Automatic Indent Scheme: full</title>
+                <para>
+                In this default scheme, the amount of indentation inserted is
+                mode-specific. In most edit modes, the indent of the previous
+                line is simply copied over. However, in C-like languages (C,
+                C++, Java, JavaScript), curly brackets and language statements
+                are taken into account and indent is added and removed as
+                necessary.
+                </para>
+                <para>
+                The automatic indentation can be triggered by: pressing
+                <keycap>ENTER</keycap> (this will by default only affect the
+                indentation of the new line), pressing <keycap>TAB</keycap> at
+                the beginning of, or inside the leading whitespace of a line,
+                entering one the bracket characters defined in the edit mode,
+                pressing one of the <varname>electricKeys</varname> for the
+                current edit mode (more details in
+                <xref linkend="mode-tag-props" />), or when causing a hard wrap
+                (see <xref linkend="word-wrap" />).
+                </para>
+                <para>No matter what automatic indentation scheme is currently
+                active, <guimenu>Edit</guimenu> >
+                <guisubmenu>Indent</guisubmenu> > <guisubmenu>Indent Selected
+                Lines</guisubmenu> (shortcut: <keycap>C+i</keycap>) indents all
+                selected lines, or the current line if there is no selection, as
+                if in the <quote>full</quote> scheme.</para>
+
+                <section id="electric-keys">
+                <title>Electric keys</title>
+                
+                <para>
+                Electric keys cause reapplying of the indentation rules to
+                the current line. Thanks to the electric keys the following
+                code fragments are indented properly on-line:</para>
+                <itemizedlist>
+                <listitem><para>
+                Java, C: brackets. If indenting brackets are defined for
+                the language, they are implicitly considered electric keys.
+                Thus a closing bracket is placed in its correct position
+                immediately after being typed.
+                </para></listitem>
+                <listitem><para>
+                Java, C: labels. Labels end with a colon and the colon is
+                included in electric keys for these languages. With
+                pressing the colon, the line is reindented and the labels
+                are indented a level to the left.
+                </para></listitem>
+                <listitem><para>
+                Basic: <literal>endif</literal>. Here <keycap>f</keycap>
+                letter is an electric key, that makes the line indented
+                to the left.
+                </para></listitem>
+                </itemizedlist>
+                <para>In jEdit 4 electric keys worked unconditionally.
+                As of jEdit 5 they trigger reindentation only if
+                the indentation of the line, before pressing a key,
+                is the same as jEdit would indent it using its rules.
+                This allows for specifying more electric keys in mode
+                files, because they don't cause unwanted indentation
+                like they did before. Electric keys including all letters
+                seem to be good solution for basic-like languages.</para>
+                </section>
+            </section>
+
+            <section id="autoindent-simple">
+                <title>Automatic Indent Scheme: simple</title>
+                <para>
+                In this simplified automatic-indentation scheme, only two
+                actions trigger an indentation: pressing <keycap>ENTER</keycap>,
+                or causing a hard wrap. Only the new line will be indented, and
+                the amount of indentation will be the same as the previously
+                line.</para>
+            </section>
+
+            <section id="autoindent-none">
+                <title>Automatic Indent Scheme: none</title>
+                <para>
+                In this automatic indentation scheme, no actions in the text
+                area will trigger a reindentation, and all lines start
+                completely unindented. </para>
+            </section>
+
+            <section id="autoindent-customizing">
+                <title>Further customization of automatic indentation</title>
+
+                <para>The behavior of the <keycap>ENTER</keycap> and
+                <keycap>TAB</keycap> keys can be configured in the
+                <guibutton>Shortcuts</guibutton> pane of the
+                <guimenu>Utilities</guimenu>><guimenuitem>Global
+                Options</guimenuitem> dialog. box, just as with any other key.
+                The <keycap>ENTER</keycap> key can be bound to one of the
+                following, or indeed any other command or macro:</para>
+
+                <itemizedlist>
+                    <listitem>
+                        <para><guimenuitem>Insert Newline</guimenuitem>.</para>
+                    </listitem>
+
+                    <listitem>
+                        <para><guimenuitem>Insert Newline and
+                        Indent</guimenuitem>, which is the default. This is
+                        equivalent to <guimenuitem>Insert Newline</guimenuitem>
+                        when using the indentation scheme <quote>none</quote>.
+                        </para>
+                    </listitem>
+                </itemizedlist>
+
+                <para>The <keycap>TAB</keycap> can be bound to one of the
+                following, or again, any other command or macro:</para>
+
+                <itemizedlist>
+                    <listitem>
+                        <para><guimenuitem>Insert Tab</guimenuitem>.</para>
+                    </listitem>
+
+                    <listitem>
+                        <para><guimenuitem>Insert Tab or Indent</guimenuitem>,
+                        which is the default. This is equivalent to
+                        <guimenuitem>Insert Tab</guimenuitem> when not using the
+                        <quote>full</quote> automatic indentation scheme.</para>
+                    </listitem>
+
+                    <listitem>
+                        <para><guimenuitem>Indent Selected Lines</guimenuitem>.
+                        This binding will not respect the selected auto
+                        indentation scheme.
+                        </para>
+                    </listitem>
+                </itemizedlist>
+
+                <para>See <xref linkend="shortcuts-pane" /> for details.</para>
+
+                <para>To insert a literal tab or newline without performing
+                indentation, prefix the tab or newline with <keycap>C+e
+                v</keycap>. For example, to create a new line without any
+                indentation, type <keycap>C+e v ENTER</keycap>.</para>
+            </section>
         </section>
     </section>
 
diff --git a/doc/users-guide/updating-modes.xml b/doc/users-guide/updating-modes.xml
index 1d70891..b0b6061 100644
--- a/doc/users-guide/updating-modes.xml
+++ b/doc/users-guide/updating-modes.xml
@@ -1,11 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <chapter id="updating-modes">
     <title>Updating Edit Modes</title>
-
     <!-- jEdit buffer-local properties: -->
-
     <!-- :indentSize=1:noTabs=true: -->
-
     <!-- :xml.root=users-guide.xml: -->
 
     <section id="currentmodeformat">
diff --git a/doc/users-guide/users-guide.xml b/doc/users-guide/users-guide.xml
index 5fcff42..95e55ce 100644
--- a/doc/users-guide/users-guide.xml
+++ b/doc/users-guide/users-guide.xml
@@ -2,34 +2,10 @@
 <!-- jEdit buffer-local properties: -->
 <!-- maxLineLen=0:wrap=soft:indentSize=1:noTabs=true: -->
 <!-- jEdit user's guide -->
-<!-- (C) 1999, 2004 Slava Pestov -->
-<!-- (C) 2001, 2002 John Gellene -->
-<!-- (C) 2005, 2011 Alan Ezust -->
 <book id="users-guide"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xi="http://www.w3.org/2001/XInclude"  xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd'>
     <bookinfo>
-        <title>jEdit 4.5 User's Guide</title>
-
-        <copyright>
-            <year>1999</year>
-            <year>2004</year>
-
-            <holder>Slava Pestov</holder>
-        </copyright>
-
-        <copyright>
-            <year>2001</year>
-            <year>2002</year>
-
-            <holder>John Gellene</holder>
-        </copyright>
-
-        <copyright>
-            <year>2005</year>
-            <year>2011</year>
-
-            <holder>Alan Ezust</holder>
-        </copyright>
+        <title>jEdit 5.0 User's Guide</title>
 
         <legalnotice>
             <title>Legal Notice</title>
@@ -43,6 +19,32 @@
             in the file <filename>COPYING.DOC.txt</filename> included with
             jEdit.</para>
         </legalnotice>
+        <author>
+           <othername> The jEdit all-volunteer developer team </othername>
+        </author>
+        
+        <revhistory>
+           <revision>
+                <revnumber>1.0 - 4.3</revnumber>
+                <date>1999-2004</date>
+                <author> <firstname>Slava</firstname> <surname>Pestov</surname> </author>
+                <revremark>Initial HTML document</revremark>
+            </revision>
+            
+            <revision>
+               <revnumber>3.2 - 4.1</revnumber>
+               <date>2001-2002</date>
+               <author> <firstname>John</firstname><surname>Gellene</surname> </author>
+               <revremark> Initial DocBook version. Initial versions of Plugin Guide and Macro Guide. </revremark>
+               </revision>
+            
+            <revision>
+              <revnumber>4.3 - 5.0</revnumber>
+              <date>2005-2012</date>
+              <author><firstname>Alan</firstname><surname>Ezust</surname></author>
+              <revremark> Maintainer. </revremark>
+            </revision>
+        </revhistory>
     </bookinfo>
 
     <part id="using-jedit-part">
@@ -108,8 +110,6 @@
             illustrate additional macro writing techniques. Finally, we discuss
             several tips and techniques for writing and debugging macros.</para>
 
-            <para>This part of the user's guide was written by John Gellene
-            <email>jgellene at nyc.rr.com</email>.</para>
         </partintro>
 
         <xi:include href="macro-basics.xml" />
@@ -131,9 +131,6 @@
             are not required to be a Java wizard. If you can write a useful
             application of any size in Java, you can write a plugin.</para>
 
-            <para>This part of the user's guide was originally written by John
-            Gellene. As of jEdit 4.3, it is maintained by Alan Ezust with help
-            from others in the jEdit core development team.</para>
         </partintro>
 
         <xi:include href="plugin-intro.xml" />
diff --git a/doc/users-guide/writing-modes.xml b/doc/users-guide/writing-modes.xml
index 90c9d12..80649c1 100644
--- a/doc/users-guide/writing-modes.xml
+++ b/doc/users-guide/writing-modes.xml
@@ -94,10 +94,12 @@
         <literal>VALUE</literal> attribute with the property's value.</para>
         <para>All buffer-local properties listed in <xref
         linkend="buffer-local" /> may be given values in edit modes.</para>
-	<para><literal>contextInsensitive</literal> - If true the property
-	indicate that a line can always be highlighted without taking care of
-	the previous line. If activated the syntax will be much faster.
-	</para>
+
+        <para><literal>contextInsensitive</literal> - If true, the property
+        indicates that a line can always be highlighted without taking care of
+        the previous line. If activated, the syntax parsing will be much faster.
+        </para>
+
         <para>The following mode properties specify commenting strings:</para>
         <itemizedlist>
             <listitem>
@@ -192,6 +194,29 @@
              the new line. To get this behavior, add the newline character to
              <literal>electricKeys</literal> in the xml-escaped form &#xA;
              </para></listitem>
+
+             <listitem><para><literal>ignoreWhitespace</literal>:
+             Ignore whitespace lines.
+             This property is on (<literal>true</literal>) by default.
+             Python language sets this to
+             <literal>false</literal> because of the special treatment
+             of whitespaces. Note this example:
+             <programlisting>def fun1:
+    a = 1
+    b = 2
+    
+def fun2:
+             </programlisting>
+             Pressing <keycap>C+i</keycap>
+             (<guimenuitem>Indent Lines</guimenuitem> command) on
+             the <literal>fun2</literal> line would usually indent this
+             line and make it even with the <literal>b = 2</literal> line.
+             But with switched off <literal>ignoreWhitespace</literal> setting
+             the line will stay the way it was indented manually.
+             <literal>ignoreWhitespace=false</literal> setting prevents
+             any forward indentation after a whitespace line.
+             </para></listitem>
+
         </itemizedlist>
         <para>Here is the complete <literal><PROPS></literal> tag for Java
         mode:</para>
diff --git a/doc/welcome.html b/doc/welcome.html
index abe9082..80ba472 100644
--- a/doc/welcome.html
+++ b/doc/welcome.html
@@ -4,7 +4,7 @@
 
 <center>
 <img src="jedit.png" width="128" height="128">
-<h2>Welcome to jEdit 4.5</h2>
+<h2>Welcome to jEdit 5</h2>
 </center>
 <p> Useful menu commands: </p>
 <ul>
diff --git a/doc/whatsnew/news.xml b/doc/whatsnew/news.xml
new file mode 100644
index 0000000..7ca1b40
--- /dev/null
+++ b/doc/whatsnew/news.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<article id="whatsnewarticle"
+     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+     xmlns:xi="http://www.w3.org/2001/XInclude"
+     xsi:noNamespaceSchemaLocation='http://www.docbook.org/xsd/4.4/docbook.xsd'>
+
+    <title> What's new in jEdit 5.0 </title>
+    <articleinfo>
+        <author>
+            <othername>The jEdit all-volunteer development team</othername>
+        </author>
+        <date> 2012 </date>
+    </articleinfo>
+
+
+    <para> Detailed changes can always be found in the <ulink
+    url="../CHANGES.txt">Detailed Change Log</ulink>,
+    but here are some of the major features of this version. </para>
+
+    <itemizedlist>
+    <listitem><para> Updated html/css edit modes with HTML5/CSS3 keywords.
+    </para></listitem>
+
+    <listitem><para> Localization - jEdit now supports switching
+    between default locale, French, German, Czech, and Japanese.
+    Some translations for those locales are provided, containing
+    common jEdit labels. It is also now possible to add new or contribute
+    to existing translation property files for jEdit core
+    as well as for plugins.
+    </para></listitem>
+
+    <listitem><para> Keymaps - named collections of shortcuts. Example keymaps
+    for Emacs, MacOS, Intellij and classic jEdit are provided, and users can
+    create or customize them.
+    </para></listitem>
+
+    <listitem><para> New Editing options: Disable or simplified automatic
+    indentation, and default response when opening a large file.
+    </para></listitem>
+
+    <listitem><para> Added a dozen new edit modes, updated a dozen more.
+    </para></listitem>
+
+    </itemizedlist>
+<!-- :maxLineLen=80:wrap=hard: -->
+</article>
diff --git a/doclet/GenerateTocXML.java b/doclet/GenerateTocXML.java
index 33f5c58..a38d811 100644
--- a/doclet/GenerateTocXML.java
+++ b/doclet/GenerateTocXML.java
@@ -40,7 +40,14 @@ public class GenerateTocXML
 		}
 		try
 		{
-			FileWriter out = new FileWriter(Standard.htmlDoclet.configuration().destDirName + OUT);
+			String destDirName = null;
+			for (String[] option : root.options()) {
+				if ("-d".equals(option[0].toLowerCase())) {
+					destDirName = option[1];
+					break;
+				}
+			}
+			FileWriter out = new FileWriter(new File(destDirName, OUT));
 			out.write(HEADER);
 
 			PackageDoc[] packages = root.specifiedPackages();
diff --git a/installer/InstallThread.java b/installer/InstallThread.java
index c5971ce..4a0da1d 100644
--- a/installer/InstallThread.java
+++ b/installer/InstallThread.java
@@ -12,9 +12,14 @@
  */
 package installer;
 
-import java.io.*;
+import java.io.BufferedInputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
 import java.util.Vector;
-import java.net.*;
 
 /*
  * The thread that performs installation.
@@ -38,11 +43,11 @@ public class InstallThread extends Thread
 	public void run()
 	{
 		progress.setMaximum(size * 1024);
-		
+
 		//return value ignored : already signalled in ServerKiller
 		progress.message("stopping any jEdit server");
 		ServerKiller.quitjEditServer();
-		
+
 		try
 		{
 			// install user-selected packages
@@ -98,15 +103,28 @@ public class InstallThread extends Thread
 		TarInputStream tarInput = new TarInputStream(
 			new CBZip2InputStream(in));
 		TarEntry entry;
+		String fileName = null;
 		while((entry = tarInput.getNextEntry()) != null)
 		{
 			if(entry.isDirectory())
+			{
+				fileName = null;
 				continue;
-			String fileName = entry.getName();
+			}
+			if (fileName == null)
+			{
+				fileName = entry.getName();
+				if (fileName.equals("././@LongLink"))
+				{
+					fileName = new BufferedReader(new InputStreamReader(tarInput)).readLine();
+					continue;
+				}
+			}
 			//System.err.println(fileName);
 			String outfile = installDir + File.separatorChar
 				+ fileName.replace('/',File.separatorChar);
 			installer.copy(tarInput,outfile,progress);
+			fileName = null;
 		}
 
 		tarInput.close();
diff --git a/installer/OperatingSystem.java b/installer/OperatingSystem.java
index 17b2c93..73c88e8 100644
--- a/installer/OperatingSystem.java
+++ b/installer/OperatingSystem.java
@@ -108,8 +108,6 @@ public abstract class OperatingSystem
 			String osName = System.getProperty("os.name");
 			if(osName.indexOf("Windows") != -1)
 				os = new Windows();
-			else if(osName.indexOf("OS/2") != -1)
-				os = new HalfAnOS();
 			else if(osName.indexOf("VMS") != -1)
 				os = new VMS();
 			else
@@ -355,14 +353,6 @@ public abstract class OperatingSystem
 		}
 	}
 
-	public static class HalfAnOS extends OperatingSystem
-	{
-		public String getInstallDirectory(String name, String version)
-		{
-			return "C:\\" + name + " " + version;
-		}
-	}
-
 	public static class VMS extends OperatingSystem
 	{
 		public String getInstallDirectory(String name, String version)
diff --git a/installer/done-HalfAnOS.html b/installer/done-HalfAnOS.html
deleted file mode 100644
index 405800e..0000000
--- a/installer/done-HalfAnOS.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html><body>
-
-jEdit has been installed successfully.<p>
-
-To start jEdit, run the <tt>jedit.cmd</tt> script located in the
-installation directory.
-
-</body></html>
diff --git a/installer/install.props b/installer/install.props
index 943dc40..7631dcd 100644
--- a/installer/install.props
+++ b/installer/install.props
@@ -23,7 +23,7 @@ ostask.unix-man.manpage=jedit.1
 # Each component must have a name, a size, and a 'fileset'. The fileset is the
 # name of a resource, relative to the root of the JAR, where the list of files
 # is stored, newline delimited
-comp.count=6
+comp.count=5
 
 comp.0.name=jEdit text editor
 comp.0.disk-size=@jedit-program.disksize@
@@ -52,12 +52,6 @@ comp.4.real-size=@jedit-mac.realsize@
 comp.4.fileset=jedit-mac
 comp.4.os=MacOS
 
-comp.5.name=OS/2 start script
-comp.5.disk-size=@jedit-os2.disksize@
-comp.5.real-size=@jedit-os2.realsize@
-comp.5.fileset=jedit-os2
-comp.5.os=HalfAnOS
-
 dir.null=Empty directory: will NOT be installed
 dir.not-empty=Target directory exists and is not empty
 dir.not-directory=Target is NOT a directory, can't install
diff --git a/ivy.xml b/ivy.xml
index e21e719..f2b8533 100644
--- a/ivy.xml
+++ b/ivy.xml
@@ -58,22 +58,31 @@
 
 	<dependencies defaultconf="compile;sources;javadoc">
 		<dependency org="ant-contrib" name="ant-contrib" rev="1.0b3" conf="ant-contrib"/>
+
+		<dependency org="junit" name="junit-dep" rev="4.10" conf="test;sources;javadoc"/>
+		<dependency org="org.hamcrest" name="hamcrest-library" rev="1.2.1" conf="test;sources;javadoc"/>
+
 		<dependency org="saxon" name="saxon" rev="6.5.3" conf="docbook"/>
 		<dependency org="net.sf.docbook" name="docbook-xsl" rev="1.76.1" conf="docbook">
 			<artifact name="docbook-xsl" e:classifier="resources" type="zip"/>
 		</dependency>
 		<dependency org="net.sf.docbook" name="docbook-xsl-saxon" rev="1.0.0" conf="docbook"/>
 		<dependency org="xerces" name="xercesImpl" rev="2.10.0" conf="docbook,jarbundler"/>
+
 		<dependency org="org.apache.xmlgraphics" name="fop" rev="1.0" conf="fop"/>
+
 		<dependency org="net.sf.launch4j" name="launch4j" rev="3.0.2" conf="launch4j">
 			<artifact name="launch4j" e:classifier="win32" type="zip"/>
 			<artifact name="launch4j" e:classifier="macosx" type="tgz"/>
 			<artifact name="launch4j" e:classifier="linux" type="tgz"/>
 		</dependency>
+
 		<dependency org="org.jedit.plugins" name="MacOSX" rev="1.2" conf="default-plugins"/>
-		<dependency org="org.jedit.plugins" name="QuickNotepad" rev="4.4" conf="default-plugins"/>
+		<dependency org="org.jedit.plugins" name="QuickNotepad" rev="5.0" conf="default-plugins"/>
+
 		<dependency org="bsf" name="bsf" rev="2.4.0" conf="scripting"/>
 		<dependency org="org.beanshell" name="bsh" rev="2.0b4" conf="scripting"/>
 		<dependency org="org.bouncycastle" name="bcpg-jdk16" rev="1.46" conf="scripting"/>
+		<dependency org="com.google.code.findbugs" name="jsr305" rev="2.0.0" conf="compile"/>
 	</dependencies>
 </ivy-module>
diff --git a/jEdit.iml b/jEdit.iml
index 124c6d1..29348ee 100644
--- a/jEdit.iml
+++ b/jEdit.iml
@@ -2,17 +2,20 @@
 <module relativePaths="true" type="JAVA_MODULE" version="4">
   <component name="NewModuleRootManager" inherit-compiler-output="false">
     <output url="file://$MODULE_DIR$/build/classes/core" />
-    <output-test url="file://$MODULE_DIR$/build/test-classes/core" />
+    <output-test url="file://$MODULE_DIR$/build/classes/test" />
     <exclude-output />
     <content url="file://$MODULE_DIR$">
       <sourceFolder url="file://$MODULE_DIR$/org" isTestSource="false" packagePrefix="org" />
+      <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" />
       <excludeFolder url="file://$MODULE_DIR$/build" />
       <excludeFolder url="file://$MODULE_DIR$/dist" />
       <excludeFolder url="file://$MODULE_DIR$/lib" />
       <excludeFolder url="file://$MODULE_DIR$/org/gjt/sp/jedit/bsh/commands" />
+      <excludeFolder url="file://$MODULE_DIR$/textarea" />
     </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" scope="TEST" name="Test Dependencies" level="project" />
   </component>
 </module>
 
diff --git a/keymaps/Emacs_keys.props b/keymaps/Emacs_keys.props
new file mode 100644
index 0000000..f780604
--- /dev/null
+++ b/keymaps/Emacs_keys.props
@@ -0,0 +1,256 @@
+#jEdit's keymap Emacs
+#Wed Dec 07 12:46:21 PST 2011
+action-bar.shortcut=C+ENTER
+activator.reloader.shortcut=CA+r
+backspace.shortcut=BACK_SPACE
+backspace-word.shortcut=C+BACK_SPACE
+buffer-options.shortcut=M+p
+buffertabs.toggle-vis.shortcut2=CA+t
+buffertabs.toggle-vis.shortcut=CS+t
+C/Include_Guard.shortcut=CA+i
+clear-register.shortcut=C+r C+l
+Clipboard/Cut_Lines.shortcut=C+m C+k
+closeall-except-active.shortcut=ESCAPE c
+close-buffer.shortcut=C+x c
+close-docking-area.shortcut=ESCAPE ESCAPE
+close-view.shortcut=C+x C+v
+collapse-all-folds.shortcut=CA+LEFT
+collapse-fold.shortcut=A+BACK_SPACE
+commando.ant.shortcut=C+F10
+commando-compile.shortcut=F9
+commando.make.shortcut=A+F10
+console-clear.shortcut=A+c A+c
+console.shell.BeanShell-show.shortcut=A+c b
+console.shell.JavaScript-show.shortcut=A+c j
+console.shell.Python-show.shortcut=A+c p
+console.shell.ssh-show.shortcut=A+c h
+console.shell.System-show.shortcut=A+c s
+console.shortcut=A+x
+copy-append-string-register.shortcut=C+r C+a
+copy.shortcut2=CS+c
+copy.shortcut=C+c
+copy-string-register.shortcut=C+r C+c
+cscopefinder-find-calling.shortcut=CS+r
+ctags-interface-change-db-settings.shortcut=C+F11
+ctags-interface-complete-from-db.shortcut=CS+SPACE
+ctags-interface-jump-to-tag.shortcut=CS+d
+ctags-interface-preview-toggle.shortcut=C+q C+t
+C/Toggle_Header_Source.shortcut2=CA+h
+C/Toggle_Header_Source.shortcut=A+h
+cut.shortcut2=C+x C+x
+cut.shortcut=C+w
+debugger-finish.shortcut=C+q F9
+debugger-gdb-output-toggle.shortcut=C+q g
+debugger-go.shortcut=C+q F5
+debugger-next.shortcut=C+q n
+debugger-program-output-toggle.shortcut=C+q o
+debugger-show-locals-toggle.shortcut=C+q l
+debugger-show-variables-toggle.shortcut=C+q v
+debugger-toggle-breakpoint.shortcut=C+F8
+debugger-until.shortcut=C+q F6
+debugger-watches-toggle.shortcut=C+q e
+delete-end-line.shortcut=CS+DELETE
+delete.shortcut2=C+d
+delete.shortcut=DELETE
+delete-start-line.shortcut=CS+BACK_SPACE
+delete-word-std.shortcut=C+DELETE
+document-end.shortcut=C+END
+document-end.shortcut2=ESCAPE >
+document-home.shortcut=C+HOME
+document-home.shortcut2=ESCAPE <
+Editing/Emacs_Ctrl-K.shortcut=C+k
+Editing/Emacs_Next_Line.shortcut=C+n
+Editing/Emacs_Previous_Line.shortcut=C+p
+Editing/Move_Lines_Down.shortcut=C+m C+d
+Editing/Move_Lines_Up.shortcut=C+m C+u
+end.shortcut=END
+error-list-next-error.shortcut=F4
+error-list-toggle.shortcut2=C+x e
+error-list-toggle.shortcut=CA+e
+exit.shortcut2=C+x C+c
+exit.shortcut=C+q C+q
+expand-abbrev.shortcut2=C+;
+expand-abbrev.shortcut=C+SEMICOLON
+expand-all-folds.shortcut2=CS+ENTER
+expand-all-folds.shortcut=CA+RIGHT
+expand-fold.shortcut=AS+ENTER
+expand-one-level.shortcut=A+ENTER
+fastopen.shortcut=C+x C+o
+Files/Send_Buffer_To_Next_Split.shortcut=C+x b
+find-next.shortcut=F3
+find-prev.shortcut=S+F3
+find.shortcut2=CS+f
+find.shortcut=C+r C+r
+format-paragraph.shortcut2=A+j
+combined-options.shortcut=A+o
+combined-options.shortcut2=C+F12
+goto-line.shortcut=C+g
+help.shortcut=F1
+home.shortcut=HOME
+hypersearch.shortcut=C+PERIOD
+indent.shortcut=C+x C+b
+insert-literal.shortcut=C+6
+insert-newline-indent.shortcut=ENTER
+insert-newline.shortcut=S+ENTER
+insert-tab-indent.shortcut=TAB
+insert-tab.shortcut=C+i
+Interface/Decrease_Font_Size.shortcut=C+SUBTRACT
+Interface/Increase_Font_Size.shortcut=C+ADD
+Interface/Reset_TextArea.shortcut=C+x C+r
+Interface/Splitpane_Grow.shortcut=C+x C+6
+javasidekick-insert-import.shortcut=AS+i
+jdiff.next-diff.shortcut=C+q C+n
+jdiff.prev-diff.shortcut=C+q C+p
+join-lines.shortcut=C+x C+j
+last-macro.shortuct=C+m C+l
+layout-load.shortcut=ESCAPE l
+layout-save.shortcut=ESCAPE s
+lucene.search-word-at-caret.shortcut=F6
+marker-set-manager-toggle.shortcut=C+m C+t
+markersets-jump-to-marker.shortcut=C+m C+g
+markersets-next-marker.shortcut=C+m C+n
+markersets-prev-marker.shortcut=C+m C+p
+markersets-toggle-marker.shortcut=C+m C+a
+match-bracket.shortcut2=C+m C+b
+match-bracket.shortcut=C+m C+m
+name.shortcut=A+2
+navigator.back.shortcut2=A+LEFT
+navigator.back.shortcut=A+KP_LEFT
+navigator.combinedList.shortcut=C+x C+LEFT
+navigator.forwardList.shortcut=C+x C+RIGHT
+navigator.forward.shortcut2=A+RIGHT
+navigator.forward.shortcut=A+KP_RIGHT
+navigator.gotoLine.shortcut=C+g
+new-file.shortcut=A+n
+new-plain-view.shortcut=CA+n
+new-view.shortcut2=CS+N
+new-view.shortcut=CS+n
+next-buffer.shortcut=C+PAGE_DOWN
+next-char.shortcut2=C+f
+next-char.shortcut=RIGHT
+next-fold.shortcut=C+m C+f
+next-line.shortcut=DOWN
+next-page.shortcut2=C+v
+next-page.shortcut=PAGE_DOWN
+next-paragraph.shortcut=C+DOWN
+next-textarea.shortcut2=C+x C+n
+next-textarea.shortcut=C+x n
+next-word-std.shortcut2=A+f
+next-word-std.shortcut=C+RIGHT
+open-file.shortcut=C+o
+overwrite.shortcut=INSERT
+paste.shortcut=C+y
+paste-string-register.shortcut=C+r C+v
+prev-buffer.shortcut=C+PAGE_UP
+prev-char.shortcut2=C+b
+prev-char.shortcut=LEFT
+prev-line.shortcut=UP
+prev-page.shortcut2=ESCAPE v
+prev-page.shortcut=PAGE_UP
+prev-paragraph.shortcut=C+UP
+prev-textarea.shortcut2=C+x C+p
+prev-textarea.shortcut=C+x p
+prev-word.shortcut=C+LEFT
+prev-word-std-after.shortcut=A+b
+print.shortcut=PRINTSCREEN
+projectviewer_jarmaker_dialog.shortcut=C+r C+j
+projectviewer_parent-group.shortcut=A+UP
+projectviewer_set-active.shortcut=A+DOWN
+projectviewer.shortcut2=A+p A+p
+projectviewer.shortcut=CA+p
+projectviewer-toggle.shortcut2=S+F2
+projectviewer_wrapper_search_project.shortcut=C+F6
+Properties/Create_Plugin_Announcement.shortcut2=C+q c
+Properties/Create_Plugin_Announcement.shortcut=A+BACK_QUOTE
+quick-search.shortcut2=C+BACK_SLASH
+quick-search.shortcut=A+,
+recent-buffer.shortcut=A+PAGE_UP
+recentbufferswitcher.shortcut=C+TAB
+record-macro.shortcut=C+m C+r
+redo.shortcut=CS+z
+reload.shortcut=F5
+save-as.shortcut=C+x C+w
+save.shortcut2=C+x C+BACK_SLASH
+save.shortcut=C+s
+scroll-and-center.shortcut=C+l
+scroll-down-line.shortcut=C+SLASH
+scroll-down-page.shortcut=A+SLASH
+scroll-up-line.shortcut=C+QUOTE
+scroll-up-page.shortcut=A+QUOTE
+select-all.shortcut=A+a
+select-block.shortcut=C+OPEN_BRACKET
+select-document-end.shortcut=CS+END
+select-document-home.shortcut=CS+HOME
+select-end.shortcut2=AS+x
+select-end.shortcut=S+END
+select-home.shortcut2=AS+z
+select-home.shortcut=S+HOME
+select-next-char.shortcut2=AS+l
+select-next-char.shortcut=S+RIGHT
+select-next-line.shortcut2=AS+k
+select-next-line.shortcut=S+DOWN
+select-next-page.shortcut2=AS+a
+select-next-page.shortcut=S+PAGE_DOWN
+select-next-paragraph.shortcut=CS+DOWN
+select-next-word-std.shortcut=CS+RIGHT
+select-none.shortcut=ESCAPE n
+select-prev-char.shortcut2=AS+j
+select-prev-char.shortcut=S+LEFT
+select-prev-line.shortcut=S+UP
+select-prev-page.shortcut2=AS+q
+select-prev-page.shortcut=S+PAGE_UP
+select-prev-paragraph.shortcut=CS+UP
+select-prev-word.shortcut=CS+LEFT
+set-view-title.shortcut=A+F2
+shift-left.shortcut2=S+TAB
+show-call-tree.shortcut=CS+t
+show-context-menu.shortcut=CONTEXT_MENU
+show-references.shortcut=CS+r
+sidekick-complete.shortcut=C+SPACE
+sidekick-next-asset.shortcut=C+j C+n
+sidekick.parser.ctags-switch.shortcut=A+s c
+sidekick.parser.java-switch.shortcut=A+s j
+sidekick.parser.outline-switch.shortcut=A+s o
+sidekick.parser.xml-switch.shortcut=A+s x
+sidekick-prev-asset.shortcut=C+j C+p
+sidekick-tree-toggle.shortcut2=C+F2
+sidekick-tree-toggle.shortcut=CA+s
+smart-end.shortcut=C+e
+smart-home.shortcut=C+a
+smart-open-dialog.shortcut=C+x C+o
+spell-check-selection.shortcut=F7
+split-horizontal.shortcut=C+2
+split-vertical.shortcut=C+3
+stop-recording.shortcut=C+m C+s
+tabs-to-spaces.shortcut=C+x C+t
+Text/Insert_Date.shortcut=A+d
+toggle-buffer-switcher.shortcut=ESCAPE s
+toggle-dock-areas.shortcut=F12
+toggle-dual-diff.shortcut=C+q d
+toggle-full-screen.shortcut=F11
+toggle-rect-select.shortcut=A+BACK_SLASH
+to-lower.shortcut2=A+l
+to-upper.shortcut2=A+u
+transpose-chars.shortcut=C+t
+undo.shortcut=C+z
+unsplit-current.shortcut=C+0
+unsplit.shortcut=C+1
+updater-update-default.shortcut=C+x C+u
+vertical-paste-string-register.shortcut=C+r C+p
+vfs.browser.delete.shortcut=DELETE
+vfs.browser.home.shortcut=~
+vfs.browser.new-directory.shortcut=INSERT
+vfs.browser.new-file.shortcut=C+n
+vfs.browser.next.shortcut=A+Right
+vfs.browser.previous.shortcut=A+Left
+vfs.browser.reload.shortcut=F5
+vfs.browser.rename.shortcut=F2
+vfs.browser.roots.shortcut=/
+vfs.browser.shortcut=CA+f
+vfs.browser.synchronize.shortcut=-
+vfs.browser.up.shortcut=A+Up
+xfind-prev.shortcut=C+q p
+xfind-replace-dialog.shortcut=C+r C+f
+xml-chars-to-entities.shortcut=C+x C+e
+xml-match-tag.shortcut2=CS+m
+xml-match-tag.shortcut=CS+M
diff --git a/keymaps/IntelliJ_keys.props b/keymaps/IntelliJ_keys.props
new file mode 100644
index 0000000..ede1785
--- /dev/null
+++ b/keymaps/IntelliJ_keys.props
@@ -0,0 +1,192 @@
+Editing/Mode_Switcher.shortcut=C+e m
+Editing/Move_Lines_Down.shortcut=CS+DOWN
+Editing/Move_Lines_Up.shortcut=CS+UP
+Text/Duplicate_Line.shortcut=C+d
+action-bar.shortcut=CS+a
+add-explicit-fold.shortcut=C+COMMA
+add-marker-shortcut.shortcut=C+F11
+add-marker.shortcut=F11
+backspace-word.shortcut=C+BACK_SPACE
+backspace.shortcut2=S+BACK_SPACE
+backspace.shortcut=BACK_SPACE
+bottom-docking-area.shortcut=C+e C+DOWN
+buffertabs.copy-path.shortcut=CS+c
+center-caret.shortcut=C+e C+n
+clear-register.shortcut=C+r C+l
+close-all.shortcut=C+e C+w
+close-buffer.shortcut=C+F4
+close-docking-area.shortcut=S+ESCAPE
+collapse-all-folds.shortcut=CS+SUBTRACT
+collapse-fold.shortcut=C+SUBTRACT
+complete-word.shortcut=C+SPACE
+copy-append-string-register.shortcut=C+r C+a
+copy-append.shortcut=C+e C+a
+copy-string-register.shortcut=C+r C+c
+copy.shortcut2=C+INSERT
+copy.shortcut=C+c
+cut-append-string-register.shortcut=C+r C+u
+cut-append.shortcut=C+e C+u
+cut-string-register.shortcut=C+r C+x
+cut.shortcut2=S+DELETE
+cut.shortcut=C+x
+delete-end-line.shortcut=CS+DELETE
+delete-line.shortcut=C+y
+delete-paragraph.shortcut=C+e d
+delete-start-line.shortcut=CS+BACK_SPACE
+delete-word.shortcut=C+DELETE
+delete.shortcut2=A+d
+delete.shortcut=DELETE
+document-end.shortcut=C+END
+document-home.shortcut=C+HOME
+end.shortcut2=A+x
+end.shortcut=END
+exit.shortcut=C+q
+expand-abbrev.shortcut=C+SEMICOLON
+expand-all-folds.shortcut2=CS+EQUALS
+expand-all-folds.shortcut=CS+ADD
+expand-fold.shortcut2=C+EQUALS
+expand-fold.shortcut=C+ADD
+expand-folds.shortcut=C+e ENTER
+expand-one-level.shortcut=A+ENTER
+find-next.shortcut2=C+l
+find-next.shortcut=F3
+find-prev.shortcut=S+F3
+find-previous.shortcut=C+e g
+find.shortcut2=A+F3
+find.shortcut=C+f
+focus-buffer-switcher.shortcut=A+BACK_QUOTE
+format-paragraph.shortcut=C+e f
+gatchan-highlight.shortcut=CS+F7
+global-options.shortcut=C+F12
+goto-line.shortcut=C+g
+help.shortcut=F1
+home.shortcut2=A+z
+home.shortcut=HOME
+hypersearch-results-toggle.shortcut=A+3
+hypersearch-word.shortcut=C+F3
+hypersearch.shortcut=C+PERIOD
+ignore-case.shortcut=C+e C+i
+indent-lines.shortcut2=CA+i
+indent-lines.shortcut=CA+l
+insert-literal.shortcut=C+e v
+insert-newline-indent.shortcut=ENTER
+insert-tab-indent.shortcut=TAB
+invert-selection.shortcut=C+e i
+join-lines.shortcut=CS+j
+last-macro.shortuct=C+m C+l
+left-docking-area.shortcut=C+e C+LEFT
+match-bracket.shortcut=C+CLOSE_BRACKET
+narrow-to-fold.shortcut=C+e n n
+narrow-to-selection.shortcut=C+e n s
+new-file-in-mode.shortcut=CS+n
+new-file.shortcut=C+n
+next-bracket.shortcut=C+e C+CLOSE_BRACKET
+next-buffer.shortcut=A+RIGHT
+next-char.shortcut2=A+l
+next-char.shortcut=RIGHT
+next-fold.shortcut=A+DOWN
+next-line.shortcut2=A+k
+next-line.shortcut=DOWN
+next-marker.shortcut=C+e C+PERIOD
+next-page.shortcut2=A+a
+next-page.shortcut=PAGE_DOWN
+next-paragraph.shortcut=C+DOWN
+next-textarea.shortcut=A+PAGE_DOWN
+next-word.shortcut=C+RIGHT
+open-file.shortcut=C+o
+open-path.shortcut=C+e C+o
+overwrite.shortcut=INSERT
+parent-fold.shortcut=C+e u
+paste-deleted.shortcut=C+e C+y
+paste-previous.shortcut=CS+v
+paste-string-register.shortcut=C+r C+v
+paste.shortcut2=S+INSERT
+paste.shortcut=C+v
+prev-bracket.shortcut=C+e C+OPEN_BRACKET
+prev-buffer.shortcut=A+LEFT
+prev-char.shortcut2=A+j
+prev-char.shortcut=LEFT
+prev-fold.shortcut=A+UP
+prev-line.shortcut2=A+i
+prev-line.shortcut=UP
+prev-marker.shortcut=C+e C+COMMA
+prev-page.shortcut2=A+q
+prev-page.shortcut=PAGE_UP
+prev-paragraph.shortcut=C+UP
+prev-textarea.shortcut=A+PAGE_UP
+prev-word.shortcut=C+LEFT
+print.shortcut=C+p
+quick-search-word.shortcut=A+COMMA
+range-comment.shortcut=C+e C+c
+recent-buffer.shortcut=C+BACK_QUOTE
+record-macro.shortcut=C+m C+r
+record-temp-macro.shortcut=C+m C+m
+redo.shortcut=CS+z
+regexp.shortcut=C+e C+x
+reload.shortcut=F5
+remove-trailing-ws.shortcut=C+e r
+replace-and-find-next.shortcut=C+e C+g
+replace-in-selection.shortcut=C+e C+r
+resplit.shortcut=C+4
+right-docking-area.shortcut=C+e C+RIGHT
+run-temp-macro.shortcut=C+m C+p
+save-all.shortcut=C+e C+s
+save.shortcut=C+s
+scroll-and-center=C+l
+scroll-down-line.shortcut=C+SLASH
+scroll-down-page.shortcut=A+SLASH
+scroll-to-current-line.shortcut=C+e C+j
+scroll-up-line.shortcut=C+QUOTE
+scroll-up-page.shortcut=A+QUOTE
+search-in-directory.shortcut=C+e C+d
+search-in-open-buffers.shortcut=C+e C+b
+select-all.shortcut=C+a
+select-block.shortcut=C+OPEN_BRACKET
+select-document-end.shortcut=CS+END
+select-document-home.shortcut=CS+HOME
+select-end.shortcut2=AS+x
+select-end.shortcut=S+END
+select-fold.shortcut=C+e s
+select-home.shortcut2=AS+z
+select-home.shortcut=S+HOME
+select-line-range.shortcut=C+e C+l
+select-line.shortcut=C+e l
+select-marker.shortcut=C+u
+select-next-char.shortcut2=AS+l
+select-next-char.shortcut=S+RIGHT
+select-next-line.shortcut2=AS+k
+select-next-line.shortcut=S+DOWN
+select-next-page.shortcut2=AS+a
+select-next-page.shortcut=S+PAGE_DOWN
+select-next-word.shortcut=CS+RIGHT
+select-none.shortcut=ESCAPE
+select-paragraph.shortcut=C+e p
+select-prev-char.shortcut2=AS+j
+select-prev-char.shortcut=S+LEFT
+select-prev-line.shortcut2=AS+i
+select-prev-line.shortcut=S+UP
+select-prev-page.shortcut2=AS+q
+select-prev-page.shortcut=S+PAGE_UP
+select-prev-word.shortcut=CS+LEFT
+select-word.shortcut=C+w
+shift-left.shortcut2=S+TAB
+show-context-menu.shortcut=CONTEXT_MENU
+split-horizontal.shortcut=C+2
+split-vertical.shortcut=C+3
+stop-recording.shortcut=C+m C+s
+swap-marker.shortcut=C+k
+toggle-dock-areas.shortcut=CS+F12
+toggle-line-comment.shortcut=C+DIVIDE
+toggle-line-numbers.shortcut=C+e C+t
+toggle-multi-select.shortcut=C+BACK_SLASH
+toggle-range-comment.shortcut=CS+DIVIDE
+toggle-rect-select.shortcut=CAS+INSERT
+top-docking-area.shortcut=C+e C+UP
+undo.shortcut2=A+BACK_SPACE
+undo.shortcut=C+z
+unsplit-current.shortcut=C+0
+unsplit.shortcut=C+1
+vertical-paste-string-register.shortcut=C+r C+p
+vertical-paste.shortcut=C+e C+p
+vfs.browser-toggle.shortcut=A+1
+view-markers.shortcut=S+F11
\ No newline at end of file
diff --git a/keymaps/Mac OS X_keys.props b/keymaps/Mac OS X_keys.props
new file mode 100644
index 0000000..a3f7293
--- /dev/null
+++ b/keymaps/Mac OS X_keys.props	
@@ -0,0 +1,190 @@
+action-bar.shortcut=C+ENTER
+add-explicit-fold.shortcut=MC+a
+add-marker-shortcut.shortcut=C+t
+add-marker.shortcut=C+m
+backspace-word.shortcut=C+BACK_SPACE
+backspace.shortcut=BACK_SPACE
+bottom-docking-area.shortcut=MC+DOWN
+center-caret.shortcut=AC+n
+clear-register.shortcut=C+r C+l
+close-all.shortcut=AMC+w
+close-buffer.shortcut=C+w
+close-docking-area.shortcut=AC+BACK_QUOTE
+closeall-bufferset.shortcut=AC+w
+closeall-except-active.shortcut=CS+w
+collapse-all-folds.shortcut=AS+BACK_SPACE
+collapse-fold.shortcut=A+BACK_SPACE
+complete-word.shortcut=C+b
+copy-append-string-register.shortcut=MC+c
+copy-append.shortcut=CS+c
+copy-string-register.shortcut=AC+c
+copy.shortcut2=C+INSERT
+copy.shortcut=C+c
+cut-append-string-register.shortcut=MC+x
+cut-append.shortcut=CS+x
+cut-string-register.shortcut=AC+x
+cut.shortcut2=S+DELETE
+cut.shortcut=C+x
+delete-end-line.shortcut=CS+DELETE
+delete-line.shortcut=C+d
+delete-start-line.shortcut=CS+BACK_SPACE
+delete-word.shortcut=C+DELETE
+delete.shortcut2=A+d
+delete.shortcut=DELETE
+document-end.shortcut=C+END
+document-home.shortcut=C+HOME
+end.shortcut2=C+RIGHT
+end.shortcut=END
+exit.shortcut=C+q
+expand-abbrev.shortcut=C+SEMICOLON
+expand-fold.shortcut=AS+ENTER
+expand-folds.shortcut=AC+ENTER
+expand-one-level.shortcut=A+ENTER
+find-next.shortcut=C+g
+find-prev.shortcut=CS+g
+find-previous.shortcut=C+e g
+find.shortcut=C+f
+focus-buffer-switcher.shortcut=A+BACK_QUOTE
+format-paragraph.shortcut=MC+f
+global-close-buffer.shortcut=MC+w
+global-options.shortcut=C+F12
+goto-line.shortcut=A+g
+goto-marker.shortcut=C+y
+help.shortcut=F1
+home.shortcut2=C+LEFT
+home.shortcut=HOME
+hypersearch-word.shortcut=A+PERIOD
+hypersearch.shortcut=C+PERIOD
+ignore-case.shortcut=AC+i
+indent-lines.shortcut=A+i
+insert-literal.shortcut=MC+v
+insert-newline-indent.shortcut=ENTER
+insert-tab-indent.shortcut=TAB
+invert-selection.shortcut=MC+i
+last-action.shortcut=AC+SPACE
+last-macro.shortuct=C+m C+l
+latextools-compile.shortcut=F6
+left-docking-area.shortcut=MC+LEFT
+line-comment.shortcut=AC+SLASH
+new-file-in-mode.shortcut=CS+n
+new-file.shortcut=C+n
+next-bracket.shortcut=AC+CLOSE_BRACKET
+next-buffer.shortcut=C+PAGE_DOWN
+next-char.shortcut2=A+l
+next-char.shortcut=RIGHT
+next-fold.shortcut=A+DOWN
+next-line.shortcut2=A+k
+next-line.shortcut=DOWN
+next-marker.shortcut=AC+PERIOD
+next-page.shortcut2=A+a
+next-page.shortcut=PAGE_DOWN
+next-paragraph.shortcut=C+DOWN
+next-textarea.shortcut=A+PAGE_DOWN
+next-word.shortcut=M+RIGHT
+open-file.shortcut=C+o
+open-path.shortcut=C+e C+o
+options.shortcuts.shortcut2=Alternative shortcut
+overwrite.shortcut=INSERT
+page-setup.shortcut=CS+p
+parent-fold.shortcut=MC+u
+paste-deleted.shortcut=AC+y
+paste-previous.shortcut=CS+v
+paste-string-register.shortcut=AC+v
+paste.shortcut2=S+INSERT
+paste.shortcut=C+v
+prev-bracket.shortcut=AC+OPEN_BRACKET
+prev-buffer.shortcut=C+PAGE_UP
+prev-char.shortcut2=A+j
+prev-char.shortcut=LEFT
+prev-fold.shortcut=A+UP
+prev-line.shortcut=UP
+prev-marker.shortcut=AC+COMMA
+prev-page.shortcut2=A+q
+prev-page.shortcut=PAGE_UP
+prev-paragraph.shortcut=C+UP
+prev-textarea.shortcut=A+PAGE_UP
+prev-word.shortcut=M+LEFT
+print.shortcut=C+p
+quick-search-word.shortcut=A+COMMA
+quick-search.shortcut=C+COMMA
+range-comment.shortcut=C+SLASH
+recent-buffer.shortcut=C+BACK_QUOTE
+record-macro.shortcut=AM+r
+record-temp-macro.shortcut=AM+m
+redo.shortcut=CS+z
+reload.shortcut=F5
+remove-trailing-ws.shortcut=MC+r
+replace-and-find-next.shortcut=CS+f
+replace-in-selection.shortcut=CS+r
+resplit.shortcut=C+4
+right-docking-area.shortcut=MC+RIGHT
+run-temp-macro.shortcut=AM+p
+save-all.shortcut=AC+s
+save-as.shortcut=CS+s
+save.shortcut=C+s
+scroll-and-center=C+l
+scroll-down-page.shortcut=A+SLASH
+scroll-to-current-line.shortcut=C+j
+scroll-up-line.shortcut=C+QUOTE
+scroll-up-page.shortcut=A+QUOTE
+search-in-directory.shortcut=CS+d
+search-in-open-buffers.shortcut=CS+b
+select-all.shortcut=C+a
+select-document-end.shortcut=CS+END
+select-document-home.shortcut=CS+HOME
+select-end.shortcut2=CS+RIGHT
+select-end.shortcut=S+END
+select-fold.shortcut=MC+s
+select-home.shortcut2=CS+LEFT
+select-home.shortcut=S+HOME
+select-line-range.shortcut=AC+l
+select-line.shortcut=MC+l
+select-marker.shortcut=C+u
+select-next-char.shortcut2=AS+l
+select-next-char.shortcut=S+RIGHT
+select-next-line.shortcut2=AS+k
+select-next-line.shortcut=S+DOWN
+select-next-page.shortcut2=AS+a
+select-next-page.shortcut=S+PAGE_DOWN
+select-next-paragraph.shortcut=CS+DOWN
+select-next-word.shortcut=MS+RIGHT
+select-none.shortcut=CS+a
+select-paragraph.shortcut=MC+p
+select-prev-char.shortcut2=AS+j
+select-prev-char.shortcut=S+LEFT
+select-prev-line.shortcut2=AS+i
+select-prev-line.shortcut=S+UP
+select-prev-page.shortcut2=AS+q
+select-prev-page.shortcut=S+PAGE_UP
+select-prev-paragraph.shortcut=CS+UP
+select-prev-word.shortcut=MS+LEFT
+shift-left.shortcut2=S+TAB
+shift-left.shortcut=C+OPEN_BRACKET
+shift-right.shortcut=C+CLOSE_BRACKET
+show-context-menu.shortcut=CONTEXT_MENU
+split-horizontal.shortcut=C+2
+split-vertical.shortcut=C+3
+stop-recording.shortcut=AM+s
+swap-marker.shortcut=C+k
+toggle-dock-areas.shortcut=F12
+toggle-full-screen.shortcut=F11
+toggle-line-numbers.shortcut=AC+t
+toggle-multi-select.shortcut=C+BACK_SLASH
+toggle-rect-select.shortcut=A+BACK_SLASH
+top-docking-area.shortcut=MC+UP
+undo.shortcut=C+z
+unsplit-current.shortcut=C+0
+unsplit.shortcut=C+1
+vertical-paste-string-register.shortcut=AM+v
+vertical-paste.shortcut=AC+p
+vfs.browser.delete.shortcut=DELETE
+vfs.browser.home.shortcut=~
+vfs.browser.new-directory.shortcut=INSERT
+vfs.browser.new-file.shortcut=C+n
+vfs.browser.next.shortcut=A+Right
+vfs.browser.previous.shortcut=A+Left
+vfs.browser.reload.shortcut=F5
+vfs.browser.rename.shortcut=F2
+vfs.browser.roots.shortcut=/
+vfs.browser.synchronize.shortcut=-
+vfs.browser.up.shortcut=A+Up
diff --git a/keymaps/jEdit_keys.props b/keymaps/jEdit_keys.props
new file mode 100644
index 0000000..ae5c067
--- /dev/null
+++ b/keymaps/jEdit_keys.props
@@ -0,0 +1,226 @@
+#{{{ Function keys
+help.shortcut=F1
+show-context-menu.shortcut=CONTEXT_MENU
+#}}}
+
+#{{{ C+X
+select-all.shortcut=C+a
+complete-word.shortcut=C+b
+copy.shortcut=C+c
+delete-line.shortcut=C+d
+# C+e is a prefix
+find.shortcut=C+f
+find-next.shortcut=F3
+# C+h is not usable on MacOS X
+indent-lines.shortcut=C+i
+join-lines.shortcut=C+j
+swap-marker.shortcut=C+k
+goto-line.shortcut=C+g
+# C+m is a prefix
+new-file.shortcut=C+n
+new-file-in-mode.shortcut=CS+n
+open-file.shortcut=C+o
+reload.shortcut=F5
+print.shortcut=C+p
+exit.shortcut=C+q
+# C+r is a prefix
+save.shortcut=C+s
+add-marker-shortcut.shortcut=C+t
+select-marker.shortcut=C+u
+paste.shortcut=C+v
+close-buffer.shortcut=C+w
+cut.shortcut=C+x
+goto-marker.shortcut=C+y
+undo.shortcut=C+z
+unsplit-current.shortcut=C+0
+unsplit.shortcut=C+1
+split-horizontal.shortcut=C+2
+split-vertical.shortcut=C+3
+resplit.shortcut=C+4
+#}}}
+
+#{{{ C+non-alpha
+delete-start-line.shortcut=CS+BACK_SPACE
+delete-end-line.shortcut=CS+DELETE
+prev-paragraph.shortcut=C+UP
+next-paragraph.shortcut=C+DOWN
+select-prev-paragraph.shortcut=CS+UP
+select-next-paragraph.shortcut=CS+DOWN
+backspace-word.shortcut=C+BACK_SPACE
+delete-word.shortcut=C+DELETE
+document-home.shortcut=C+HOME
+document-end.shortcut=C+END
+select-document-home.shortcut=CS+HOME
+select-document-end.shortcut=CS+END
+prev-word.shortcut=C+LEFT
+select-prev-word.shortcut=CS+LEFT
+next-word.shortcut=C+RIGHT
+select-next-word.shortcut=CS+RIGHT
+action-bar.shortcut=C+ENTER
+prev-buffer.shortcut=C+PAGE_UP
+next-buffer.shortcut=C+PAGE_DOWN
+last-action.shortcut=C+SPACE
+
+recent-buffer.shortcut=C+BACK_QUOTE
+select-block.shortcut=C+OPEN_BRACKET
+match-bracket.shortcut=C+CLOSE_BRACKET
+expand-abbrev.shortcut=C+SEMICOLON
+quick-search.shortcut=C+COMMA
+hypersearch.shortcut=C+PERIOD
+scroll-up-line.shortcut=C+QUOTE
+scroll-down-line.shortcut=C+SLASH
+toggle-multi-select.shortcut=C+BACK_SLASH
+#}}}
+
+#{{{ C+e C+X
+# Unused: f, h, q, y
+copy-append.shortcut=C+e C+a
+search-in-open-buffers.shortcut=C+e C+b
+range-comment.shortcut=C+e C+c
+search-in-directory.shortcut=C+e C+d
+replace-and-find-next.shortcut=C+e C+g
+ignore-case.shortcut=C+e C+i
+scroll-to-current-line.shortcut=C+e C+j
+line-comment.shortcut=C+e C+k
+select-line-range.shortcut=C+e C+l
+add-marker.shortcut=C+e C+m
+center-caret.shortcut=C+e C+n
+scroll-and-center=C+l
+open-path.shortcut=C+e C+o
+vertical-paste.shortcut=C+e C+p
+replace-in-selection.shortcut=C+e C+r
+save-all.shortcut=C+e C+s
+toggle-line-numbers.shortcut=C+e C+t
+cut-append.shortcut=C+e C+u
+paste-previous.shortcut=C+e C+v
+close-all.shortcut=C+e C+w
+regexp.shortcut=C+e C+x
+paste-deleted.shortcut=C+e C+y
+redo.shortcut=C+e C+z
+#}}}
+
+#{{{ C+e C+non-alpha
+left-docking-area.shortcut=C+e C+LEFT
+top-docking-area.shortcut=C+e C+UP
+right-docking-area.shortcut=C+e C+RIGHT
+bottom-docking-area.shortcut=C+e C+DOWN
+toggle-full-screen.shortcut=F11
+toggle-dock-areas.shortcut=F12
+combined-options.shortcut=A+o
+combined-options.shortcut2=C+F12
+prev-marker.shortcut=C+e C+COMMA
+next-marker.shortcut=C+e C+PERIOD
+prev-bracket.shortcut=C+e C+OPEN_BRACKET
+next-bracket.shortcut=C+e C+CLOSE_BRACKET
+close-docking-area.shortcut=C+e C+BACK_QUOTE
+#}}}
+
+#{{{ C+e X
+# Unused: b e g h j k m o q t y z
+add-explicit-fold.shortcut=C+e a
+collapse-all-folds.shortcut=C+e c
+delete-paragraph.shortcut=C+e d
+format-paragraph.shortcut=C+e f
+find-previous.shortcut=C+e g
+invert-selection.shortcut=C+e i
+select-line.shortcut=C+e l
+narrow-to-fold.shortcut=C+e n n
+narrow-to-selection.shortcut=C+e n s
+select-paragraph.shortcut=C+e p
+remove-trailing-ws.shortcut=C+e r
+select-fold.shortcut=C+e s
+insert-literal.shortcut=C+e v
+select-word.shortcut=C+e w
+parent-fold.shortcut=C+e u
+expand-all-folds.shortcut=C+e x
+#}}}
+
+#{{{ C+e non-alpha
+expand-folds.shortcut=C+e ENTER
+#}}}
+
+#{{{ C+m C+X
+record-temp-macro.shortcut=C+m C+m
+run-temp-macro.shortcut=C+m C+p
+record-macro.shortcut=C+m C+r
+stop-recording.shortcut=C+m C+s
+last-macro.shortuct=C+m C+l
+#}}}
+
+#{{{ C+r C+X
+copy-append-string-register.shortcut=C+r C+a
+copy-string-register.shortcut=C+r C+c
+clear-register.shortcut=C+r C+l
+vertical-paste-string-register.shortcut=C+r C+p
+cut-append-string-register.shortcut=C+r C+u
+paste-string-register.shortcut=C+r C+v
+cut-string-register.shortcut=C+r C+x
+#}}}
+
+#{{{ A+non-alpha
+prev-fold.shortcut=A+UP
+next-fold.shortcut=A+DOWN
+shift-left.shortcut=A+LEFT
+shift-right.shortcut=A+RIGHT
+collapse-fold.shortcut=A+BACK_SPACE
+expand-fold.shortcut=AS+ENTER
+expand-one-level.shortcut=A+ENTER
+quick-search-word.shortcut=A+COMMA
+hypersearch-word.shortcut=A+PERIOD
+scroll-up-page.shortcut=A+QUOTE
+scroll-down-page.shortcut=A+SLASH
+prev-textarea.shortcut=A+PAGE_UP
+next-textarea.shortcut=A+PAGE_DOWN
+
+focus-buffer-switcher.shortcut=A+BACK_QUOTE
+toggle-rect-select.shortcut=A+BACK_SLASH
+#}}}
+
+#{{{ Other keys
+shift-left.shortcut2=S+TAB
+select-none.shortcut=ESCAPE
+backspace.shortcut=BACK_SPACE
+delete.shortcut=DELETE
+overwrite.shortcut=INSERT
+home.shortcut=HOME
+end.shortcut=END
+select-home.shortcut=S+HOME
+select-end.shortcut=S+END
+prev-page.shortcut=PAGE_UP
+next-page.shortcut=PAGE_DOWN
+select-prev-page.shortcut=S+PAGE_UP
+select-next-page.shortcut=S+PAGE_DOWN
+prev-char.shortcut=LEFT
+select-prev-char.shortcut=S+LEFT
+next-char.shortcut=RIGHT
+select-next-char.shortcut=S+RIGHT
+prev-line.shortcut=UP
+select-prev-line.shortcut=S+UP
+next-line.shortcut=DOWN
+select-next-line.shortcut=S+DOWN
+insert-newline-indent.shortcut=ENTER
+insert-tab-indent.shortcut=TAB
+#}}}
+
+#{{{ Alternative shortcuts for frequently-used commands
+next-page.shortcut2=A+a
+select-next-page.shortcut2=AS+a
+delete.shortcut2=A+d
+prev-line.shortcut2=A+i
+select-prev-line.shortcut2=AS+i
+prev-char.shortcut2=A+j
+select-prev-char.shortcut2=AS+j
+next-line.shortcut2=A+k
+select-next-line.shortcut2=AS+k
+next-char.shortcut2=A+l
+select-next-char.shortcut2=AS+l
+prev-page.shortcut2=A+q
+select-prev-page.shortcut2=AS+q
+end.shortcut2=A+x
+select-end.shortcut2=AS+x
+home.shortcut2=A+z
+select-home.shortcut2=AS+z
+copy.shortcut2=C+INSERT
+paste.shortcut2=S+INSERT
+cut.shortcut2=S+DELETE
+#}}}
diff --git a/macros/C/Toggle_Header_Source.bsh b/macros/C/Toggle_Header_Source.bsh
index f9b26b7..f5ebe74 100644
--- a/macros/C/Toggle_Header_Source.bsh
+++ b/macros/C/Toggle_Header_Source.bsh
@@ -1,7 +1,7 @@
 /**
 	ToggleHeaderSource.bsh V1.5
 	by Alan Ezust
-	$Id: Toggle_Header_Source.bsh 19693 2011-07-22 16:00:31Z ezust $
+	$Id: Toggle_Header_Source.bsh 21514 2012-03-31 05:21:10Z ezust $
 
 	A jedit beanshell macro that toggles your current buffer
 	between the header file (.hh?) and the source file (.c(c|pp|xx)?).
@@ -19,11 +19,11 @@
 
 	New to 1.4: Instead of throwing an exception, treats
 	files with no extension as header files, and tries to
-	open .cpp file with same basename. Searches in 
+	open .cpp file with same basename. Searches in
 	current project for header/source files too.
 
-	New to 1.5: Supports multiple, default header extensions. 
-	
+	New to 1.5: Supports multiple, default header extensions.
+
 	This program is free software; you can redistribute it and/or
 	modify it under the terms of the GNU General Public License
 	as published by the Free Software Foundation; either version 2
@@ -44,19 +44,14 @@ import projectviewer.*;
 import projectviewer.vpt.*;
 import java.util.*;
 
-/* Set this property from the console beanshell to something else if cpp is not
-   your favorite extension. e.g.:
+/* Set these properties via the console beanshell to something else if cpp,h are not
+   your favorite extensions. e.g.:
    jEdit.setProperty("default.extension.c", "cc");
+   jEdit.setProperty("default.extension.h", "hh");
 */
-
 String defaultSourceExtension = jEdit.getProperty("default.extension.c", "cpp");
-
-/* jEdit.setProperty("default.extension.h", "hh"); */
-
 String defaultHeaderExtension = jEdit.getProperty("default.extension.h", "h");
-
 String[] sourceExtensions = new String[]{"cpp", "cxx", "cc", "c"};
-
 String[] headerExtensions = new String[]{"h", "hh", "hpp", "hxx"};
 
 /** Looks for an existing file in the current project, if ProjectViewer is
@@ -77,7 +72,7 @@ String findBufferInProject(String fileName) {
         if ((path.endsWith("\\" + fileName)) || (path.endsWith("/" + fileName)))
             return path;
     }
-    return null;		
+    return null;
 }
 
 /** Looks for an existing file in the same directory, or
@@ -137,7 +132,7 @@ String getSourceFile(String baseName)
     return baseName + "." + defaultSourceExtension;
 }
 
-String getHeaderFile(String baseName) 
+String getHeaderFile(String baseName)
 {
     int numExt = headerExtensions.length;
     for (int i=numExt-1; i>=0; --i)
@@ -147,11 +142,11 @@ String getHeaderFile(String baseName)
         String path = findBuffer(tryFile);
         if (path != null) return path;
     }
-    
+
     // Try no extension at all:
     String path = findBuffer(baseName);
     if (path != null) return path;
-    
+
     // Then try current project
     if (activeProjectExists())
         for (int i=numExt-1; i>=0; --i)
@@ -188,10 +183,10 @@ void toggleHeaderSource()
         if (isSourceFile(extension))
         {
             path = getHeaderFile(baseName);
-            if (path == null) 
+            if (path == null)
                 path = baseName + "." + defaultHeaderExtension;
         }
-        else 
+        else
         {
             path = getSourceFile(baseName);
         }
diff --git a/macros/Clipboard/Copy_Lines.bsh b/macros/Clipboard/Copy_Lines.bsh
index 7d6e5dd..a761615 100644
--- a/macros/Clipboard/Copy_Lines.bsh
+++ b/macros/Clipboard/Copy_Lines.bsh
@@ -5,7 +5,7 @@
 *
 * Copyright (C) 2003 Ollie Rutherfurd <oliver at jedit.org>
 *
-* $Id: Copy_Lines.bsh 20787 2012-01-14 01:51:43Z ezust $
+* $Id: Copy_Lines.bsh 20582 2011-12-08 21:26:00Z kpouer $
 */
 
 copyLines()
diff --git a/macros/Clipboard/Copy_Lines_Containing.bsh b/macros/Clipboard/Copy_Lines_Containing.bsh
index fc895d1..4d7b42e 100644
--- a/macros/Clipboard/Copy_Lines_Containing.bsh
+++ b/macros/Clipboard/Copy_Lines_Containing.bsh
@@ -4,11 +4,15 @@
  * 
  * Copyright (C) 2004 Ollie Rutherfurd <oliver at jedit.org>
  *
- * $Id: Copy_Lines_Containing.bsh 5098 2004-08-03 21:31:48Z orutherfurd $
+ * $Id: Copy_Lines_Containing.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+//Localization
+final static String CopyLinesContainingLabel = jEdit.getProperty("macro.rs.CopyLinesContaining.CopyLinesContaining.label", "Copy lines containing:");
+final static String LinesCopiedMessage = jEdit.getProperty("macro.rs.CopyLinesContaining.LinesCopied.message", "line(s) copied"); 
+ 
 copyLinesContaining(){
-	String text = Macros.input(view,"Copy lines containing:");
+	String text = Macros.input(view, CopyLinesContainingLabel);
 	if(text == null || "".equals(text))
 		return;
 	int count = 0;
@@ -22,7 +26,7 @@ copyLinesContaining(){
 	}
 	Registers.setRegister('$',buff.toString());
 	HistoryModel.getModel("clipboard").addItem(buff.toString());
-	view.getStatus().setMessageAndClear("" + count + " lines copied");
+	view.getStatus().setMessageAndClear(count + " " + LinesCopiedMessage);
 }
 
 copyLinesContaining();
diff --git a/macros/Clipboard/Cut_Lines_Containing.bsh b/macros/Clipboard/Cut_Lines_Containing.bsh
index ef3b983..6a6270d 100644
--- a/macros/Clipboard/Cut_Lines_Containing.bsh
+++ b/macros/Clipboard/Cut_Lines_Containing.bsh
@@ -4,11 +4,16 @@
  * 
  * Copyright (C) 2004 Ollie Rutherfurd <oliver at jedit.org>
  *
- * $Id: Cut_Lines_Containing.bsh 9126 2007-03-10 19:14:30Z Vampire0 $
+ * $Id: Cut_Lines_Containing.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+// Localization
+final static String CutLinesContainingLabel = jEdit.getProperty("macro.rs.CutLinesContaining.CutLinesContaining.label", "Cut lines containing:");
+final static String LinesCutMessage = jEdit.getProperty("macro.rs.CutLinesContaining.LinesCut.message", "line(s) cut");
+
+// Process 
 cutLinesContaining(){
-	String text = Macros.input(view,"Cut lines containing:");
+	String text = Macros.input(view, CutLinesContainingLabel);
 	if(text == null || "".equals(text))
 		return;
 	int count = 0;
@@ -27,7 +32,7 @@ cutLinesContaining(){
 	}
 	Registers.setRegister('$',buff.toString());
 	HistoryModel.getModel("clipboard").addItem(buff.toString());
-	view.getStatus().setMessageAndClear("" + count + " lines cut");
+	view.getStatus().setMessageAndClear(count + " " + LinesCutMessage);
 }
 
 if(buffer.isReadOnly())
diff --git a/macros/Editing/Duplicate_Lines_Above.bsh b/macros/Editing/Duplicate_Lines_Above.bsh
index df69600..5333ff5 100644
--- a/macros/Editing/Duplicate_Lines_Above.bsh
+++ b/macros/Editing/Duplicate_Lines_Above.bsh
@@ -22,17 +22,21 @@
  * Checked for jEdit 4.3 API
  *
  */
+ 
+//Localization
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
 
+// Process
 void duplicateLinesAbove()
 {
 	/*
-	 * Guard for readonly files becuase Buffer.insert()
+	 * Guard for readonly files because Buffer.insert()
 	 * ignores the flag
 	 *
 	 */
 	if(buffer.isReadOnly())
 	{
-		Macros.error(view, "This file is read only.");
+		Macros.error(view, NotEditableMessage);
 		return;
 	}
 
diff --git a/macros/Editing/Duplicate_Lines_Below.bsh b/macros/Editing/Duplicate_Lines_Below.bsh
index 9802fe7..21f29ca 100644
--- a/macros/Editing/Duplicate_Lines_Below.bsh
+++ b/macros/Editing/Duplicate_Lines_Below.bsh
@@ -25,6 +25,10 @@
  *
  */
 
+//Localization
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+
+// Process
 void duplicateLinesBelow()
 {
 	/*
@@ -34,7 +38,7 @@ void duplicateLinesBelow()
 	 */
 	if(buffer.isReadOnly())
 	{
-		Macros.error(view, "This file is read only.");
+		Macros.error(view, NotEditableMessage);
 		return;
 	}
 
diff --git a/macros/Editing/Go_to_Column.bsh b/macros/Editing/Go_to_Column.bsh
index 184c884..522cadd 100644
--- a/macros/Editing/Go_to_Column.bsh
+++ b/macros/Editing/Go_to_Column.bsh
@@ -5,15 +5,21 @@
  *
  * Copyright (C) 2003 Ollie Rutherfurd <oliver at rutherfurd.net>
  *
- * $Id: Go_to_Column.bsh 4995 2004-03-19 15:58:00Z spestov $
+ * $Id: Go_to_Column.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
+ 
+//Localization
+final static String ColumnBeforeLabel   = jEdit.getProperty("macro.rs.GoToColumn.ColumnBefore.label",  "Column (between 1 and");
+final static String ColumnAfterLabel   = jEdit.getProperty("macro.rs.GoToColumn.ColumnAfter.label",  "):");
+
+//Process
 goToColumn()
 {
 	line = textArea.getCaretLine();
 	len = textArea.getLineLength(line) + 1;
 	while(true)
 	{
-		col = Macros.input(view, "Column (between 1 and " + len + "):");
+		col = Macros.input(view, ColumnBeforeLabel + " " + len + " " + ColumnAfterLabel);
 		if(col == null)
 			return;
 		else
diff --git a/macros/Editing/Keywords_to_Upper_Case.bsh b/macros/Editing/Keywords_to_Upper_Case.bsh
index e4a74b2..c187fa0 100644
--- a/macros/Editing/Keywords_to_Upper_Case.bsh
+++ b/macros/Editing/Keywords_to_Upper_Case.bsh
@@ -1,6 +1,10 @@
 /**
  * Converts keyword token types to upper case.
  */
+ 
+//Localization
+final static String ConvertedKeywordsMessage   = jEdit.getProperty("macro.rs.KeywordsToUpperCase.ConvertedKeywords.message", "Converted Keywords to Upper Case"); 
+ 
 void keywords2upper(View view)
 {
 	// declarations run faster than doing Token.KEYWORDx comparison
@@ -40,7 +44,7 @@ void keywords2upper(View view)
 	//long t2 = System.currentTimeMillis();
 	//print("elapsed: " + (t2-t1));
 
-	view.getStatus().setMessageAndClear("Converted Keywords to Upper Case");
+	view.getStatus().setMessageAndClear(ConvertedKeywordsMessage);
 }
 
 keywords2upper(view);
diff --git a/macros/Editing/Mode_Switcher.bsh b/macros/Editing/Mode_Switcher.bsh
index 5a9e697..4286f54 100644
--- a/macros/Editing/Mode_Switcher.bsh
+++ b/macros/Editing/Mode_Switcher.bsh
@@ -31,14 +31,22 @@
  *  effort, and keypresses.
  *  It also has the benefit of auto-completion of mode names.
  * 
- * $Id: Mode_Switcher.bsh 5465 2006-06-21 13:04:43Z kpouer $
+ * $Id: Mode_Switcher.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
 import javax.swing.border.EmptyBorder;
 
+//Localization
+final static String MainDialogTitle = jEdit.getProperty("macro.rs.BufferModeSwitcher.MainDialog.title", "Buffer Mode Switcher");
+final static String EnterBufferModeLabel = jEdit.getProperty("macro.rs.BufferModeSwitcher.EnterBufferMode.label", "Enter buffer mode:");
+final static String ChangingBufferModeLabel = jEdit.getProperty("macro.rs.BufferModeSwitcher.ChangingBufferMode.label", "Changing mode of buffer");
+final static String ToLabel = jEdit.getProperty("macro.rs.BufferModeSwitcher.To.label", "to");
+final static String ModeLabel = jEdit.getProperty("macro.rs.BufferModeSwitcher.Mode.label", "Mode");
+final static String NotFoundLabel = jEdit.getProperty("macro.rs.BufferModeSwitcher.NotFound.label", "Not found");
+
 //class ModeSwitcherTextField extends JTextField
 void modeSwitcher() {
-	JDialog dialog = new JDialog(view, "Buffer Mode Switcher", true);
+	JDialog dialog = new JDialog(view, MainDialogTitle, true);
 	dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
 	JPanel content = new JPanel(new BorderLayout());
 	content.setBorder(new EmptyBorder(12,12,12,12));
@@ -128,7 +136,7 @@ void modeSwitcher() {
 		textfield.setSelectionStart(0);
 		textfield.setSelectionEnd(m.getName().length());
 	}
-	content.add(new JLabel("Enter buffer mode:"), BorderLayout.NORTH);
+	content.add(new JLabel(EnterBufferModeLabel), BorderLayout.NORTH);
 	content.add(textfield, BorderLayout.CENTER);
 	Vector v = new Vector();
 	
@@ -146,13 +154,13 @@ void modeSwitcher() {
 				buffer.setMode(m);
 				Log.log(Log.NOTICE,
 						  BeanShell.class,
-						  "Changing mode of buffer ["+
-							  buffer.getName()+"] to ["+
+						  ChangingBufferModeLabel+" ["+
+							  buffer.getName()+"] "+ToLabel+" ["+
 							  m.getName()+"]");
 			} else {
 				Log.log(Log.WARNING,
 						  BeanShell.class,
-						  "Mode ["+textfield.getText()+"] not found");
+						  ModeLabel+" ["+textfield.getText()+"] "+NotFoundLabel);
 			}
 			evt.consume();
 			dialog.dispose();
diff --git a/macros/Editing/Move_Lines_Down.bsh b/macros/Editing/Move_Lines_Down.bsh
index 3a533bf..54aace7 100644
--- a/macros/Editing/Move_Lines_Down.bsh
+++ b/macros/Editing/Move_Lines_Down.bsh
@@ -27,9 +27,13 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+//Localization
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+final static String NoMultipleSelectionError = jEdit.getProperty("macro.rs.MoveLines.NoMultipleSelection.error", "Line move does not work with multiple selection.");
+
 // check buffer read-only status
 if ( buffer.isReadOnly() ) {
-   Macros.error( view, "File is read only." );
+   Macros.error( view, NotEditableMessage );
    return ;
 }
 
@@ -48,7 +52,7 @@ Selection[] selections = textArea.getSelection();
 
 // this doesn't work right with multiple selection, so don't do anything
 if (selections.length > 1) {
-   Macros.error( view, "Line move does not work with multiple selection." );
+   Macros.error( view, NoMultipleSelectionError );
    return ;
 }
 
diff --git a/macros/Editing/Move_Lines_Up.bsh b/macros/Editing/Move_Lines_Up.bsh
index b3b0780..d6e8f83 100644
--- a/macros/Editing/Move_Lines_Up.bsh
+++ b/macros/Editing/Move_Lines_Up.bsh
@@ -27,9 +27,13 @@ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
 
+//Localization
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+final static String NoMultipleSelectionError = jEdit.getProperty("macro.rs.MoveLines.NoMultipleSelection.error", "Line move does not work with multiple selection.");
+
 // check buffer read-only status
 if ( buffer.isReadOnly() ) {
-   Macros.error( view, "File is read only." );
+   Macros.error( view, NotEditableMessage );
    return ;
 }
 
@@ -48,7 +52,7 @@ Selection[] selections = textArea.getSelection();
 
 // this doesn't work right with multiple selection, so don't do anything
 if (selections.length > 1) {
-   Macros.error( view, "Line move does not work with multiple selection." );
+   Macros.error( view, NoMultipleSelectionError );
    return ;
 }
 
diff --git a/macros/Files/Browse_Directory.bsh b/macros/Files/Browse_Directory.bsh
index 8ce45ba..48b1db1 100644
--- a/macros/Files/Browse_Directory.bsh
+++ b/macros/Files/Browse_Directory.bsh
@@ -18,15 +18,19 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Browse_Directory.bsh 3928 2001-12-01 05:48:48Z spestov $
+ * $Id: Browse_Directory.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  *
  * Checked for jEdit 4.0 API
  *
  */
 
+//Localization
+final static String DirectoryBrowseLabel = jEdit.getProperty("macro.rs.BrowseDirectory.DirectoryBrowse.label",  "Directory to browse:");
+
+// Process
 void browseDirectory()
 {
-	path = Macros.input(view,"Directory to browse:");
+	path = Macros.input(view, DirectoryBrowseLabel);
 	if(path != null)
 		VFSBrowser.browseDirectory(view,path);
 }
diff --git a/macros/Files/Buffer_Switcher.bsh b/macros/Files/Buffer_Switcher.bsh
index 327ac34..dbac577 100644
--- a/macros/Files/Buffer_Switcher.bsh
+++ b/macros/Files/Buffer_Switcher.bsh
@@ -35,11 +35,20 @@
  * ESCAPE: closes the dialog.
  * SPACE: switches to the selected buffer but does not close the dialog.
  *
- * $Id: Buffer_Switcher.bsh 5450 2006-06-20 09:08:13Z vampire0 $
+ * $Id: Buffer_Switcher.bsh 21769 2012-06-07 15:09:15Z k_satoda $
  */
 
 import javax.swing.border.EmptyBorder;
 
+//Localization
+final static String OpenBuffersLabel   = jEdit.getProperty("macro.rs.BufferSwitcher.OpenBuffers.label",  "open Buffers");
+final static String QuickHelpLabel   = jEdit.getProperty("macro.rs.BufferSwitcher.QuickHelp.label",  "[ENTER] Switch to; [SPACE] Switch to, keep dialog; [DEL] Close Buffer");
+final static String Help1Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help1.label",  "Help for Buffer Switcher macro:");
+final static String Help2Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help2.label",  "DELETE closes selected buffer.");
+final static String Help3Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help3.label",  "ENTER switches to selected buffer, closes dialog.");
+final static String Help4Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help4.label",  "ESCAPE closes dialog.");
+final static String Help5Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help5.label",  "SPACE switches to selected buffer, does not close dialog.");
+final static String Help6Label   = jEdit.getProperty("macro.rs.BufferSwitcher.Help6.label",  "NOTE: This dialog will only be displayed once");
 
 /*
 * Custom Cell Renderer which displays the buffer icons in the JList.
@@ -82,7 +91,6 @@ BufferCellRenderer()
 	return this;
 }	// }}}
 
-
 /*
 * BufferSwitcherDialog - Dialog allows one to switch between
 * open buffers (and/or close open buffers).
@@ -93,7 +101,7 @@ BufferSwitcherDialog(doModal, useCustomCellRenderer)
 	// {{{ create dialog
 	Buffer[] openBuffers = jEdit.getBuffers();
 	int numOpen = openBuffers.length;
-	dialog = new JDialog(view, "" + numOpen + " Open Buffers", doModal);
+	dialog = new JDialog(view, numOpen + " " + OpenBuffersLabel, doModal);
 	content = new JPanel(new BorderLayout());
 	content.setBorder(new EmptyBorder(12,12,12,12));
 	dialog.setContentPane(content);
@@ -104,7 +112,7 @@ BufferSwitcherDialog(doModal, useCustomCellRenderer)
 		bufferList.setCellRenderer(BufferCellRenderer());
 	content.add(new JScrollPane(bufferList), BorderLayout.CENTER);
 
-	content.add(new JLabel("[ENTER] Switch to; [SPACE] Switch to, keep dialog; [DEL] Close Buffer"), BorderLayout.NORTH);
+	content.add(new JLabel(QuickHelpLabel), BorderLayout.NORTH);
 
 	buttonPanel = new JPanel();
 	buttonPanel.setLayout(new BoxLayout(buttonPanel, 
@@ -230,12 +238,12 @@ useCustomCellRenderer = true;
 showHelp = jEdit.getProperty("macro.buffer_switcher.display-help","1");
 if(showHelp.equals("1"))
 {
-	Macros.message(view, "Help for Buffer Switcher macro:\n\n" 
-		+ "DELETE closes selected buffer.\n" 
-		+ "ENTER switches to selected buffer, closes dialog.\n" 
-		+ "ESCAPE closes dialog.\n"
-		+ "SPACE switches to selected buffer, does not close dialog.\n\n"
-		+ "NOTE: This dialog will only be displayed once.");
+	Macros.message(view, Help1Label + "\n\n" 
+		+ Help2Label + "\n"
+		+ Help3Label + "\n"
+		+ Help4Label + "\n"
+		+ Help5Label + "\n\n"
+		+ Help6Label);
 	jEdit.setProperty("macro.buffer_switcher.display-help","0");
 }
 // }}}
diff --git a/macros/Files/Delete_Current.bsh b/macros/Files/Delete_Current.bsh
index ddadfbd..43e9389 100644
--- a/macros/Files/Delete_Current.bsh
+++ b/macros/Files/Delete_Current.bsh
@@ -5,12 +5,16 @@
  *
  * Copyright (C) 2003-2004 Ollie Rutherfurd <oliver at rutherfurd.net>
  *
- * $Id: Delete_Current.bsh 4995 2004-03-19 15:58:00Z spestov $
+ * $Id: Delete_Current.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
 import javax.swing.SwingUtilities;
 import org.gjt.sp.jedit.io.*;
 
+//Localization
+final static String NotOnDiskError = jEdit.getProperty("macro.rs.DeleteCurrent.NotOnDisk.error", "Buffer doesn't exist on disk.");
+final static String DeleteNotSupportError = jEdit.getProperty("macro.rs.DeleteCurrent.DeleteNotSupport.error", "doesn't support deleting.");
+final static String DeletedMessage = jEdit.getProperty("macro.rs.DeleteCurrent.Deleted.message", "Deleted:");
 
 BufferStatusChecker(View view){
 	run(){
@@ -25,7 +29,7 @@ void deleteCurrentBuffer(View view){
 
 	// don't bother deleting new buffers (don't exist on disk)
 	if(buffer.isNewFile()){
-		Macros.error(view, "Buffer doesn't exist on disk.");
+		Macros.error(view, NotOnDiskError );
 		return;
 	}
 
@@ -37,7 +41,7 @@ void deleteCurrentBuffer(View view){
 		int res = caps & del;
 		if(res == 0){
 			Macros.error(view, "VFS " + vfs.getName() 
-						 + " doesn't support deleting.");
+						 + " " + DeleteNotSupportError);
 			return;
 		}
 	
@@ -45,7 +49,7 @@ void deleteCurrentBuffer(View view){
 		try{
 			session = vfs.createVFSSession(path,view);
 			if(vfs._delete(session,path,view)){
-				view.getStatus().setMessageAndClear("Deleted: " + path);
+				view.getStatus().setMessageAndClear(DeletedMessage + " " + path);
 			}
 			// invoke buffer status check
 			SwingUtilities.invokeLater(BufferStatusChecker(view));
diff --git a/macros/Files/Glob_Close.bsh b/macros/Files/Glob_Close.bsh
index 8176969..ba644a4 100644
--- a/macros/Files/Glob_Close.bsh
+++ b/macros/Files/Glob_Close.bsh
@@ -4,14 +4,19 @@
  *
  * Copyright (C) 2003-2004 Ollie Rutherfurd <oliver at rutherfurd.net>
  *
- * $Id: Glob_Close.bsh 12063 2008-03-02 06:58:51Z k_satoda $
+ * $Id: Glob_Close.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
 import java.util.regex.Pattern;
 
+//Localization
+final static String GlobPatternLabel = jEdit.getProperty("macro.rs.GlobClose.GlobPattern.label", "Glob Pattern:");
+final static String ErrorGlobPattern = jEdit.getProperty("macro.rs.GlobClose.ErrorGlobPattern.error", "Error in glob pattern:");
+	
+//Process
 void globClose(View view)
 {
-	String glob = Macros.input(view, "Glob Pattern:");
+	String glob = Macros.input(view, GlobPatternLabel);
 	if(glob == null || glob.length() == 0)
 		return;
 
@@ -22,7 +27,7 @@ void globClose(View view)
 	}
 	catch(Exception e)
 	{
-		Macros.error(view,"Error in glob pattern: " + e.toString());
+		Macros.error(view, ErrorGlobPattern + " " + e.toString());
 		return;
 	}
 
diff --git a/macros/Files/Next_Dirty_Buffer.bsh b/macros/Files/Next_Dirty_Buffer.bsh
index 9b7117d..419f8fb 100644
--- a/macros/Files/Next_Dirty_Buffer.bsh
+++ b/macros/Files/Next_Dirty_Buffer.bsh
@@ -5,9 +5,14 @@
  *
  * Copyright (C) 2002-2004 Ollie Rutherfurd <oliver at rutherfurd.net>
  *
- * $Id: Next_Dirty_Buffer.bsh 5450 2006-06-20 09:08:13Z vampire0 $
+ * $Id: Next_Dirty_Buffer.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+// Localization
+final static String NoOtherBufferDirtyMessage = jEdit.getProperty("macro.rs.NextDirtyBuffer.NoOtherBufferDirty.message", "No other buffers are dirty");
+final static String NoBufferDirtyMessage = jEdit.getProperty("macro.rs.NextDirtyBuffer.NoBufferDirty.message", "No buffers are dirty");
+
+// Process
 void nextDirtyBuffer(View view)
 {
 	Buffer current = view.getBuffer();
@@ -26,9 +31,9 @@ void nextDirtyBuffer(View view)
 	}
 	// if we get here, we didn't switch
 	if(current.isDirty())
-		view.getStatus().setMessageAndClear("No other buffers are dirty");
+		view.getStatus().setMessageAndClear(NoOtherBufferDirtyMessage);
 	else
-		view.getStatus().setMessageAndClear("No buffers are dirty");
+		view.getStatus().setMessageAndClear(NoBufferDirtyMessage);
 }
 
 nextDirtyBuffer(view);
diff --git a/macros/Files/Open_Path.bsh b/macros/Files/Open_Path.bsh
index 6fe0a2a..cf93cf3 100644
--- a/macros/Files/Open_Path.bsh
+++ b/macros/Files/Open_Path.bsh
@@ -17,15 +17,19 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Open_Path.bsh 3871 2001-11-06 17:15:01Z jgellene $
+ * $Id: Open_Path.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  *
  * Checked for jEdit 4.0 API
  *
  */
 
+// Localization
+final static String PathNameLabel = jEdit.getProperty("macro.rs.OpenPath.PathName.label", "Path name:");
+	
+//Process 
 void openPath()
 {
-	String path = Macros.input(view,"Path name:");
+	String path = Macros.input(view, PathNameLabel);
 	if(path != null)
 		jEdit.openFile(view,path);
 }
diff --git a/macros/Files/Toggle_ReadOnly.bsh b/macros/Files/Toggle_ReadOnly.bsh
index 57750d4..b66fb1b 100644
--- a/macros/Files/Toggle_ReadOnly.bsh
+++ b/macros/Files/Toggle_ReadOnly.bsh
@@ -18,11 +18,14 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Toggle_ReadOnly.bsh 4937 2003-12-22 04:14:55Z spestov $
+ * $Id: Toggle_ReadOnly.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
-
-
+// Localization
+final static String OnlyLocalFilesError = jEdit.getProperty("macro.rs.ToggleReadOnly.OnlyLocalFiles.error", "This macro only works on local files.");
+final static String OnlyWindowsUnixMacosError = jEdit.getProperty("macro.rs.ToggleReadOnly.OnlyWindowsUnixMacos.error", "This macro only works on Windows, Unix, & MacOS X.");
+	
+//Process
 CmdThread(cmd, view)
 {
 	run()
@@ -37,13 +40,12 @@ CmdThread(cmd, view)
 
 void ToggleReadOnly(view)
 {
-
-	buffer = view.getBuffer();
+    buffer = view.getBuffer();
 
 	// must be using file vfs
 	if(!buffer.getVFS().getName().equals("file"))
 	{
-		Macros.error(view, "This macro only works on local files.");
+		Macros.error(view, OnlyLocalFilesError);
 		return;
 	}
 
@@ -62,7 +64,7 @@ void ToggleReadOnly(view)
 	}
 	else
 	{
-		Macros.error(view, "This macro only works on Windows, Unix, & MacOS X.");
+		Macros.error(view, OnlyWindowsUnixMacosError);
 		return;
 	}
 
diff --git a/macros/Interface/Decrease_Font_Size.bsh b/macros/Interface/Decrease_Font_Size.bsh
index 3ff5c92..a7e3930 100644
--- a/macros/Interface/Decrease_Font_Size.bsh
+++ b/macros/Interface/Decrease_Font_Size.bsh
@@ -4,9 +4,13 @@
 *
 * Copyright (C) 2003 Ollie Rutherfurd <oliver at rutherfurd.net>
 *
-* $Id: Decrease_Font_Size.bsh 4937 2003-12-22 04:14:55Z spestov $
+* $Id: Decrease_Font_Size.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
 */
 
+//Localization
+final static String FontSizeMessage = jEdit.getProperty("macro.rs.ChangeFontSize.FontSize.message", "Font size now:");
+	
+//Process
 decreaseFontSize()
 {
 	FONT_SIZE = "view.fontsize";
@@ -18,7 +22,7 @@ decreaseFontSize()
 	jEdit.setIntegerProperty(CONSOLE_FONT_SIZE,size);
 	jEdit.propertiesChanged();
 	jEdit.saveSettings();
-	view.getStatus().setMessageAndClear("Font size now " + size);
+	view.getStatus().setMessageAndClear(FontSizeMessage + " " + size);
 }
 
 decreaseFontSize();
diff --git a/macros/Interface/Increase_Font_Size.bsh b/macros/Interface/Increase_Font_Size.bsh
index b530dac..c08d088 100644
--- a/macros/Interface/Increase_Font_Size.bsh
+++ b/macros/Interface/Increase_Font_Size.bsh
@@ -4,9 +4,13 @@
 *
 * Copyright (C) 2003 Ollie Rutherfurd <oliver at rutherfurd.net>
 *
-* $Id: Increase_Font_Size.bsh 4938 2003-12-23 02:15:05Z spestov $
+* $Id: Increase_Font_Size.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
 */
 
+//Localization
+final static String FontSizeMessage = jEdit.getProperty("macro.rs.ChangeFontSize.FontSize.message", "Font size now:");
+	
+//Process
 increaseFontSize()
 {
 	FONT_SIZE = "view.fontsize";
@@ -18,7 +22,7 @@ increaseFontSize()
 	jEdit.setIntegerProperty(CONSOLE_FONT_SIZE,size);
 	jEdit.propertiesChanged();
 	jEdit.saveSettings();
-	view.getStatus().setMessageAndClear("Font size now " + size);
+	view.getStatus().setMessageAndClear(FontSizeMessage + " " + size);
 }
 
 increaseFontSize();
diff --git a/macros/Java/Create_Constructor.bsh b/macros/Java/Create_Constructor.bsh
index 2ac2952..4c7b1c1 100644
--- a/macros/Java/Create_Constructor.bsh
+++ b/macros/Java/Create_Constructor.bsh
@@ -17,6 +17,11 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 */
 
+//Localization
+final static String UnevenNumberMessage = jEdit.getProperty("macro.rs.CreateConstructor.UnevenNumber.message", "Uneven number of type names and variables.");
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+    
+// Process
 boolean JAVA_MODE = buffer.getMode().getName().toLowerCase().equals("java");
 String UNDEFINED = "UNKNOWN_CLASS";
 
@@ -76,7 +81,7 @@ public String createJavaConstructor(String className, String[] typeNames, String
 {
   if(typeNames.length != variableNames.length)
   {
-    Macro.message(view, "Uneven number of type names and variables.");
+    Macro.message(view, UnevenNumberMessage);
     return "";
   }
   
@@ -109,7 +114,7 @@ public String createCppConstructor(String className, String[] typeNames, String[
 {
   if(typeNames.length != variableNames.length)
   {
-    Macro.message(view, "Uneven number of type names and variables.");
+    Macro.message(view, UnevenNumberMessage);
     return "";
   }
   
@@ -232,6 +237,6 @@ void parseSelection()
 }
 
 if( buffer.isReadOnly() )
-	Macros.error( view, "Buffer is read-only." );
+	Macros.error( view, NotEditableMessage );
 else
 	parseSelection();
diff --git a/macros/Java/Get_Class_Name.bsh b/macros/Java/Get_Class_Name.bsh
index c8ae859..1883058 100644
--- a/macros/Java/Get_Class_Name.bsh
+++ b/macros/Java/Get_Class_Name.bsh
@@ -5,14 +5,14 @@ selected text with the current class name.
 This macro walks though several steps in an attempt to guess the correct class
 name.
 
-First, it searches backwards for the nearest occurance of the keyword 'class,'
-so it should work for inner class definitions.  It does not, however, do any 
-fancy code parsing, so if you run this macro at any point after an inner class 
-definition, it will return the name of the inner class, not the parent class.
+First, it searches backwards for the nearest occurance of the keyword 'class,' 
+and check which class the target belongs to, so it works for inner class definitions.
+If you run this macro at any point after an inner class definition but belongs to a
+parent class, it will return the name of the parent class.
 
-If that fails, it attempts to guess the class name from the file name; i.e. it 
-would return "FooBar" if the buffer was named "FooBar.cc."  If this fails (if, 
-for example, the buffer is untitled), it returns an empty string.
+If that fails(out of any class boundary), it attempts to guess the class name from 
+the file name; i.e. it would return "FooBar" if the buffer was named "FooBar.cc."  
+If this fails (if, for example, the buffer is untitled), it returns an empty string.
 
 Copyright (C)  2004 Thomas Galvin - software at thomas-galvin.com
 
@@ -49,12 +49,38 @@ String getClassName()
   String text = textArea.getText();
   int index = text.lastIndexOf("class", selectionStart);
 
+  boolean flag = false;
+  // check which class the targetposition belongs to
   if(index != -1)
   {
+    flag = true;
+    index = selectionStart;
+    int tag = 0;
+    while(flag){
+	char check = text.charAt(index);
+	if(check == '}'){
+	    tag++;
+	}
+	if(check == '{'){
+	    tag--;
+	    if(tag == -1){
+		index = text.lastIndexOf("class", index);
+		break;
+	    }
+	}
+	index--;
+	// out of any classes' boundary
+	if(index == -1)
+	    flag = false;
+    }
+  }
+
+  if(flag)
+  {
     textArea.setCaretPosition(index);
     int lineNumber = textArea.getCaretLine();
     int lineEnd = textArea.getLineEndOffset(lineNumber);
-    String lineText = text.substring(index, lineEnd);
+    String lineText = text.substring(index, lineEnd);   
     
     StringTokenizer tokenizer = new StringTokenizer(lineText);
     tokenizer.nextToken(); //eat "class"
diff --git a/macros/Java/Get_Package_Name.bsh b/macros/Java/Get_Package_Name.bsh
index 418f54a..f48277c 100644
--- a/macros/Java/Get_Package_Name.bsh
+++ b/macros/Java/Get_Package_Name.bsh
@@ -22,12 +22,19 @@
  *
  * Based on code contributed by Richard Wan
  *
- * $Id: Get_Package_Name.bsh 4995 2004-03-19 15:58:00Z spestov $
+ * $Id: Get_Package_Name.bsh 21381 2012-03-15 20:02:15Z jojaba_67 $
  *
  * Checked for jEdit 4.0 API
  *
  */
 
+
+//Localization
+final static String NotWorking1Error = jEdit.getProperty("macro.rs.GetPackageName.NotWorking1.error", "This macro will not work when the Java interpreter");
+final static String NotWorking2Error = jEdit.getProperty("macro.rs.GetPackageName.NotWorking2.error", "loads jEdit with the '-jar' command line option.");
+final static String NotFindError = jEdit.getProperty("macro.rs.GetPackageName.NotFind.error", "Could not find a package name."); 
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+
 boolean testClassPath()
 {
 	classpath = System.getProperty("java.class.path");
@@ -92,21 +99,20 @@ String determinePackageName(String path)
 }
 
 if( buffer.isReadOnly() )
-	Macros.error( view, "Buffer is read-only." );
+	Macros.error( view, NotEditableMessage );
 else
 {
 	// main routine
 	if(!testClassPath())
 	{
-		Macros.error(view, "This macro will not work when the Java interpreter\n"
-			+ "loads jEdit with the '-jar' command line option.");
+		Macros.error(view, NotWorking1Error + "\n" + NotWorking2Error);
 	}
 	else
 	{
 		result = determinePackageName(buffer.getPath());
 		if(result == null)
 		{
-			Macros.error(view, "Could not find a package name.");
+			Macros.error(view, NotFindError);
 		}
 		else textArea.setSelectedText(result);
 	}
diff --git a/macros/Java/Java_File_Save.bsh b/macros/Java/Java_File_Save.bsh
index 507f555..875ed95 100644
--- a/macros/Java/Java_File_Save.bsh
+++ b/macros/Java/Java_File_Save.bsh
@@ -32,9 +32,11 @@
  *  08-Jun-04: If an infinite loop is hit (1000 iterations) in the comment
  *           : parsing, it now opens the default save dialog, rather than
  *           : just returning.
- * $Id: Java_File_Save.bsh 12063 2008-03-02 06:58:51Z k_satoda $
+ * $Id: Java_File_Save.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+//Localization
+final static String InfiniteLoopError = jEdit.getProperty("macro.rs.JavaFileSave.InfiniteLoop.error", "Infinite loop:");
 
 // Check this is a new file
 if (buffer.isNewFile() && buffer.getPath() != null)
@@ -67,7 +69,7 @@ if (buffer.isNewFile() && buffer.getPath() != null)
             count++;
             if (count==1000)
             {
-               Log.log(Log.ERROR,BeanShell.class,"Infinite loop:["+txt+"]");
+               Log.log(Log.ERROR,BeanShell.class,InfiniteLoopError+"["+txt+"]");
                buffer.save(view,null,true);
                return;
             }
diff --git a/macros/Java/Make_Get_and_Set_Methods.bsh b/macros/Java/Make_Get_and_Set_Methods.bsh
index 87d3012..d8b4f31 100644
--- a/macros/Java/Make_Get_and_Set_Methods.bsh
+++ b/macros/Java/Make_Get_and_Set_Methods.bsh
@@ -44,7 +44,14 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.
 */
 
-
+// Localization
+final static String DONE = jEdit.getProperty("macro.rs.MakeGetAndSetMethods.GenerateCode.label", "Generate Code");
+final static String CANCEL = jEdit.getProperty("common.cancel");
+final static String CreateGetMethodsLabel = jEdit.getProperty("macro.rs.MakeGetAndSetMethods.CreateGetMethods.label", "Create Get Methods");
+final static String CreateSetMethodsLabel = jEdit.getProperty("macro.rs.MakeGetAndSetMethods.CreateSetMethods.label", "Create Set Methods");
+final static String CreateGetandSetMethodsLabel = jEdit.getProperty("macro.rs.MakeGetAndSetMethods.CreateGetandSetMethods.label", "Create Get and Set Methods");
+    
+//Process
 boolean JAVA_MODE = buffer.getMode().getName().equals( "java" );
 
 // use line separator from current buffer
@@ -138,9 +145,7 @@ String createCppGetMethod( String className, String type, String variableName )
     if (type == null) {
         type = "";   
     }
-    System.out.println("7 " + className + ", " + type + ", " + variableName);
     String uppperVariable = Character.toUpperCase( variableName.charAt( 0 ) ) + variableName.substring( 1, variableName.length() );
-    System.out.println("8");
     String result =
         "/*" + LS +
         "function: get" + uppperVariable + "()" + LS +
@@ -177,119 +182,129 @@ String createCppSetMethod( String className, String type, String variableName )
 }
 
 void parseSelection() {
+    // offsets from start of buffer
     int selectionStart;
     int selectionEnd;
-    if(textArea.getSelection().length != 0){  // if there are selections exists
+    if (textArea.getSelection().length() == 0) {
+        // no selection, use current line
+        selectionStart = textArea.getLineStartOffset(textArea.getCaretLine());
+        selectionEnd = textArea.getLineEndOffset(textArea.getCaretLine());
+    }
+    else {
         selectionStart = textArea.getSelection(0).getStart();
         selectionEnd = textArea.getSelection(0).getEnd();
     }
-    else {		// if no selection
-        selectionStart = textArea.getCaretPosition();
-        selectionEnd = textArea.getCaretPosition();
-    }
-    textArea.setCaretPosition( selectionStart );
-    int startLine = textArea.getCaretLine();
-
-    textArea.setCaretPosition( selectionEnd );
-    int endLine = textArea.getCaretLine();
 
     StringBuffer code = new StringBuffer();
     String className = getClassName();
-
-    for ( int i = startLine; i <= endLine; i++ ) {
-        // parse each line for variable declaration
-        String lineText = textArea.getLineText( i );
-        if ( lineText != null && lineText.length() > 0 ) {
-            System.out.println("1");
-            // remove leading and trailing whitespace
-            lineText = lineText.trim();
-            if ( lineText.length() == 0 ) {
-                continue;   // nothing to do with this line
+    
+    // remove comments and blank lines
+    ArrayList lines = stripComments(buffer, selectionStart, selectionEnd);
+    if (lines.size() == 0) {
+        return;   
+    }
+    
+    // parse each line for variable declaration. Lines are already trimmed and
+    // have all comments removed.
+    for (int i = 0; i < lines.size(); i++) {
+        String lineText = lines.get(i);
+        
+        // combine lines up to next semi-colon into a single line
+        while(!lineText.endsWith(";") && i < lines.size()) {
+            lineText += lines.get(++i);   
+        }
+        
+        // ensure line contains at least two words, that is, a type
+        // and a variable name at minimum. This is a fairly lame check in that
+        // "public int" would qualify, but it does mean that I don't have to
+        // do so much bounds checking below.
+        if (!lineText.matches("\\S+\\s+[_A-Za-z0-9$]+.*?")) {
+            continue;   
+        }
+        
+        // remove semi-colon
+        if ( lineText.endsWith( ";" ) ) {
+            lineText = lineText.substring( 0, lineText.length() - 1 );
+        }
+        lineText = lineText.trim();
+        if ( lineText.length() == 0 ) {
+            continue;
+        }
+        
+        // list to hold variable names
+        ArrayList variables = new ArrayList();
+        
+        // the variable type
+        String type = "";
+        
+        // could have declaration like "int x, y = 6;", which is why there
+        // needs to be an array for the variable names
+        if ( lineText.indexOf( "," ) > 0 ) {
+            int comma = lineText.indexOf(",");
+            String front = lineText.substring(0, comma);        // everything before the first comma
+            if (front.indexOf("=") > 0) {
+                front = front.substring(0, front.indexOf("=")); // drop the initial value  
             }
-
-            // remove semi-colon
-            if ( lineText.endsWith( ";" ) ) {
-                lineText = lineText.substring( 0, lineText.length() - 1 );
+            front = front.trim();
+            String[] fronts = front.split("\\s+");
+            variables.add(fronts[fronts.length - 1]);           // last item in array is variable name
+            type = fronts[fronts.length - 2];                   // next to last item is type
+
+            String back = lineText.substring(comma + 1);        // everything after the first comma
+            String[] backs = back.split(",");
+            for (back : backs) {
+                back = back.trim();
+                String[] parts = back.split("\\s+");            // could have initializer with spaces
+                String var = extractVar(parts[0]);              // could have i=0, ie, no spaces
+                variables.add(var);   
             }
-            System.out.println("2");
-            // remove initial assignment if present
-            if ( lineText.indexOf( "=" ) > 0 ) {
-                lineText = lineText.substring( 0, lineText.indexOf( "=" ) );
+        }
+        else {
+            // just one variable declared, may be initialized
+            if (lineText.indexOf("=") > 0) {
+                lineText = lineText.substring(0, lineText.indexOf("="));    // drop the intial value
             }
-            System.out.println("3");
             lineText = lineText.trim();
-            if ( lineText.length() == 0 ) {
-                continue;
-            }
-            System.out.println("4");
-            // list to hold variable names
-            ArrayList variables = new ArrayList();
-
-            // could have declaration like int x, y; so split them out into the
-            // variables array
-            if ( lineText.indexOf( "," ) > 0 ) {
-                int index = lineText.indexOf( "," );                        // just after first variable name
-                String front = lineText.substring( 0, index );              // up to and including the first variable name
-                String back = lineText.substring( index );                  // remaining variable names
-                lineText = front.substring( 0, front.lastIndexOf( " " ) );  // adjust remaining line text, this contains the type
-                front = front.substring( front.lastIndexOf( " " ) ).trim(); // first variable name
-                String[] backs = back.split( "," );                         // remaining variable names
-                variables.add( front );                                     // add first variable name to the list
-                for ( String back : backs ) {                               // add remaining variable names to the list
-                    String maybe = back.trim();
-                    if ( maybe.length() > 0 ) {
-                        variables.add( maybe );
-                    }
+            String[] parts = lineText.split("\\s+");
+            variables.add(extractVar(parts[parts.length - 1])); // last item in array is variable name
+            type = parts[parts.length - 2];                     // next to last item is type
+        }
+        
+        type = type.trim();
+        
+        if (variables.size() == 0) {
+            continue;   
+        }
+        code.append( LS );
+
+        // create the get and set methods for each variable
+        for ( String variable : variables ) {
+            if ( createGetMethods ) {
+                String tmp = JAVA_MODE ? createJavaGetMethod( type, variable ) : createCppGetMethod( className, type, variable );
+                if ( tmp != null && tmp.length() > 0 ) {
+                    code.append( tmp ).append( LS );
                 }
             }
-            else {
-                // just one variable declared
-                String var = lineText.substring( lineText.lastIndexOf( " " ) ).trim();
-                variables.add( var );
-                lineText = lineText.substring( 0, lineText.lastIndexOf( " " ) ).trim();
-            }
-            System.out.println("5");
-            if ( lineText.trim().length() == 0 ) {
-                continue;       // no type declared for this variable
-            }
-
-            // get the variable type
-            String type = "";
-            if (lineText.lastIndexOf( " " ) > 0) {
-                type = lineText.substring( lineText.lastIndexOf( " " ) );
-            }
-            type = type.trim();
-            System.out.println("5.1");
-            
-            if ( variables.size() > 0 ) {
-                code.append( LS );
-            }
 
-            // create the get and set methods for each variable
-            for ( String variable : variables ) {
-                if ( createGetMethods ) {
-                    String tmp = JAVA_MODE ? createJavaGetMethod( type, variable ) : createCppGetMethod( className, type, variable );
-                    if ( tmp != null && tmp.length() > 0 ) {
-                        code.append( tmp ).append( LS );
-                    }
-                }
-
-                if ( createSetMethods && lineText.indexOf( "final " ) == -1 && lineText.indexOf( "const " ) == -1 ) {
-                    String tmp = JAVA_MODE ? createJavaSetMethod( type, variable ) : createCppSetMethod( className, type, variable );
-
-                    if ( tmp != null && tmp.compareTo( "" ) != 0 ) {
-                        code.append( LS ).append( tmp ).append( LS );
-                    }
+            if ( createSetMethods && lineText.indexOf( "final " ) == -1 && lineText.indexOf( "const " ) == -1 ) {
+                String tmp = JAVA_MODE ? createJavaSetMethod( type, variable ) : createCppSetMethod( className, type, variable );
+                if ( tmp != null && tmp.compareTo( "" ) != 0 ) {
+                    code.append( LS ).append( tmp ).append( LS );
                 }
             }
         }
     }
 
+    String toInsert = code.toString();
+    if (toInsert.trim().length() == 0) {
+        return;   
+    }
+    
     // move to the end of the selected text
     textArea.setCaretPosition( selectionEnd );
 
     // insert get/set methods
-    textArea.setSelectedText( code.toString() );
+    textArea.setSelectedText( toInsert );
 
     // select the inserted code and indent it
     textArea.setCaretPosition( selectionEnd );
@@ -297,12 +312,73 @@ void parseSelection() {
     textArea.indentSelectedLines();
 }
 
-void displayPrompt() {
-    String DONE = "Generate Code";
-    String CANCEL = "Cancel";
+import org.gjt.sp.jedit.syntax.*;
+
+// Given the buffer and start and end of the selection, remove comments and 
+// blank lines, then return a list of the remaining lines. The list contains 
+// the trimmed line text.
+ArrayList stripComments( Buffer buffer, int startOffset, int endOffset ) {
+    int firstLine = buffer.getLineOfOffset(startOffset);
+    
+    // the last line may not actually have anything selected, just the caret
+    // happens to be at the start of the line or include part of the whitespace
+    // at the start of the line. In this case, don't include the last line.
+    int lastLine = buffer.getLineOfOffset(endOffset);
+    String lastLineText = buffer.getText(buffer.getLineStartOffset(lastLine), endOffset - buffer.getLineStartOffset(lastLine));
+    if (lastLineText.trim().length() == 0) {
+        --lastLine;   
+    }
+    
+    ArrayList lines = new ArrayList();
+    DefaultTokenHandler tokenHandler = new DefaultTokenHandler();
+    StringBuilder lineBuffer = new StringBuilder();
+    
+    for ( int lineNum = firstLine; lineNum <= lastLine; lineNum++ ) {
+        int lineStart = buffer.getLineStartOffset(lineNum);
+        lineBuffer.delete(0, lineBuffer.length());
+
+        tokenHandler.init();
+        buffer.markTokens( lineNum, tokenHandler );
+        Token token = tokenHandler.getTokens();
+        
+        // skip comments
+        while(token.id != Token.END) {
+            if (token.id < Token.COMMENT1 || token.id > Token.COMMENT4) {
+                lineBuffer.append(buffer.getText(lineStart + token.offset, token.length));
+            }
+            token = token.next;   
+        }
+        
+        String line = lineBuffer.toString().trim();
+        
+        // skip blank lines
+        if (line.length() > 0) {
+            lines.add(line.trim());
+        }
+    }
+    return lines;
+} 
 
-    JCheckBox getCheckbox = new JCheckBox( "Create Get Methods", true );
-    JCheckBox setCheckbox = new JCheckBox( "Create Set Methods", true );
+boolean isWhitespace(Token token) {
+    String text = buffer.getText(token.offset, token.length);
+    return text.trim().length() == 0;
+}
+
+// given something line "a = 6", returns just the "a". 
+String extractVar(String var) {
+    if (var == null) {
+        return "";   
+    }
+    var = var.trim();
+    if (var.indexOf("=") > 0) {
+        var = var.substring(0, var.indexOf("=")).trim();
+    }
+    return var;
+}
+
+void displayPrompt() {
+    JCheckBox getCheckbox = new JCheckBox( CreateGetMethodsLabel, true );
+    JCheckBox setCheckbox = new JCheckBox( CreateSetMethodsLabel, true );
 
     JPanel checkBoxPanel = new JPanel(new BorderLayout());
     checkBoxPanel.setBorder(BorderFactory.createEmptyBorder(6, 6, 6, 6));
@@ -322,8 +398,7 @@ void displayPrompt() {
     mainPanel.add( checkBoxPanel, BorderLayout.NORTH );
     mainPanel.add( buttonPanel, BorderLayout.SOUTH );
 
-    String title = "Create Get and Set Methods";
-    JDialog dialog = new JDialog( view, title, false );
+    JDialog dialog = new JDialog( view, CreateGetandSetMethodsLabel, false );
     dialog.setContentPane( mainPanel );
 
     actionPerformed( ActionEvent e ) {
@@ -346,7 +421,9 @@ void displayPrompt() {
     createButton.requestFocus();
 }
 
+
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
 if ( buffer.isReadOnly() )
-    Macros.error( view, "Buffer is read-only." );
+    Macros.error( view, NotEditableMessage );
 else
     displayPrompt();
\ No newline at end of file
diff --git a/macros/Misc/Buffer_to_HyperSearch_Results.bsh b/macros/Misc/Buffer_to_HyperSearch_Results.bsh
index 9dcd92c..ac3a5c8 100644
--- a/macros/Misc/Buffer_to_HyperSearch_Results.bsh
+++ b/macros/Misc/Buffer_to_HyperSearch_Results.bsh
@@ -27,6 +27,9 @@ import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeModel;
 import java.util.regex.*;
 
+//Localization
+final static String WindowNotOpenError = jEdit.getProperty("macro.rs.HyperSearchResults.WindowNotOpen.error", "The 'HyperSearch Results' window is not open.");
+
 String escape(String s){
 	sb = new StringBuffer();
 	for (int i = 0; i < s.length(); i++)
@@ -51,10 +54,10 @@ addLastResultIfExists(){
 }
 
 writeHypersearchResultsToBuffer(View view){
-	hs = view.getDockableWindowManager().getDockableWindow("hypersearch-results");
+        hs = view.getDockableWindowManager().getDockableWindow("hypersearch-results");
 	if (hs == null)
 	{
-		Macros.error(view, "The 'HyperSearch Results' window is not open.");
+		Macros.error(view, WindowNotOpenError);
 		return;
 	}
 
@@ -156,4 +159,4 @@ setAccessibility(true);
 writeHypersearchResultsToBuffer(view);
 setAccessibility(false);
 
-// :wrap=none:collapseFolds=0:noTabs=false:lineSeparator=\n:maxLineLen=80:indentSize=4:deepIndent=false:folding=none:
+// :wrap=none:collapseFolds=0:noTabs=false:lineSeparator=\n:maxLineLen=120:indentSize=4:deepIndent=false:folding=none:
diff --git a/macros/Misc/Debug_BufferSets.bsh b/macros/Misc/Debug_BufferSets.bsh
index 929ac9a..f588ee2 100644
--- a/macros/Misc/Debug_BufferSets.bsh
+++ b/macros/Misc/Debug_BufferSets.bsh
@@ -20,18 +20,26 @@
 
 org.gjt.sp.jedit.bufferset.BufferSetManager bufferSetManager = jEdit.getBufferSetManager();
 
+ // Localisation
+final static String BuffersetDebuggingLabel = jEdit.getProperty("macro.rs.DebugBuffersets.BuffersetDebugging.label", "BUFFERSET DEBUGGING");
+final static String BufferCountLabel = jEdit.getProperty("macro.rs.DebugBuffersets.BufferCount.label", "BufferCount=");
+final static String BuffersetListLabel = jEdit.getProperty("macro.rs.DebugBuffersets.BufferList.label", "BUFFER LIST");
+final static String EndBufferListLabel = jEdit.getProperty("macro.rs.DebugBuffersets.EndBufferList.label", "END BUFFER LIST");
+final static String EditpaneListLabel = jEdit.getProperty("macro.rs.DebugBuffersets.EditpaneList.label", "EDITPANE LIST");
+final static String EndEditpaneListLabel = jEdit.getProperty("macro.rs.DebugBuffersets.EndEditpaneList.label", "END EDITPANE LIST");
 
-Log.log(Log.DEBUG, this, "------BUFFERSET DEBUGGING------");
-Log.log(Log.DEBUG, this, "------BufferCount="+jEdit.getBufferCount()+"------");
-Log.log(Log.DEBUG, this, "------BUFFER LIST------");
+// Process
+Log.log(Log.DEBUG, this, "------"+BuffersetDebuggingLabel+"------");
+Log.log(Log.DEBUG, this, "------"+BufferCountLabel+jEdit.getBufferCount()+"------");
+Log.log(Log.DEBUG, this, "------"+BuffersetListLabel+"------");
 Buffer[] buffers = jEdit.getBuffers();
 for (Buffer buffer:buffers)
 {
 	Log.log(Log.DEBUG, this, buffer);
 }
 
-Log.log(Log.DEBUG, this, "------END BUFFER LIST------");
-Log.log(Log.DEBUG, this, "------EDITPANE LIST------");
+Log.log(Log.DEBUG, this, "------"+EndBufferListLabel+"------");
+Log.log(Log.DEBUG, this, "------"+EditpaneListLabel+"------");
 jEdit.visit(new org.gjt.sp.jedit.visitors.JEditVisitorAdapter()
 			{
 			public void visit(EditPane editPane)
@@ -40,5 +48,5 @@ jEdit.visit(new org.gjt.sp.jedit.visitors.JEditVisitorAdapter()
 			}
 			});
 
-Log.log(Log.DEBUG, this, "------END EDITPANE LIST------");
+Log.log(Log.DEBUG, this, "------"+EndEditpaneListLabel+"------");
 
diff --git a/macros/Misc/Display_Abbreviations.bsh b/macros/Misc/Display_Abbreviations.bsh
index ebd3e7c..9e05cc7 100644
--- a/macros/Misc/Display_Abbreviations.bsh
+++ b/macros/Misc/Display_Abbreviations.bsh
@@ -19,7 +19,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Display_Abbreviations.bsh 19505 2011-04-13 13:40:38Z kpouer $
+ * $Id: Display_Abbreviations.bsh 21385 2012-03-15 21:31:40Z jojaba_67 $
  *
  * requires JDK 1.2, jEdit3.0
  *
@@ -53,6 +53,21 @@
 
 import javax.swing.table.*;
 
+//Localization
+final static String AbbreviationLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.Abbreviation.label", "Abbreviation");
+final static String ExpansionLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.Expansion.label", "Expansion");
+final static String AbbreviationSetLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.AbbreviationSet.label", "Abbreviation set:");
+final static String CloseLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.Close.label", "Close");
+final static String WriteSetLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.WriteSet.label", "Write set");
+final static String WriteAllLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.WriteAll.label", "Write all");
+final static String AbbreviationListLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.AbbreviationList.label", "Abbreviation list");
+final static String CallingWTTNBLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.CallingWTTNB.label", "calling writeTableToNewBuffer for");
+final static String SizeVectorLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.SizeVector.label", "size of vector =");
+final static String jEditAbbreviationTableLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.jEditAbbreviationTable.label", "jEdit Abbreviation Table");
+final static String AbbreviationSetLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.AbbreviationSet.label", "Abbreviation set:");
+final static String AbbreviationExpansionLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.AbbreviationExpansion.label", "Abbreviation    Expansion");
+final static String NoAbbreviationsLabel = jEdit.getProperty("macro.rs.DisplayAbbreviations.NoAbbreviations.label", "<< No abbreviations >>");
+
 /*
  * getActiveSets()
  * This returns an array with the names of the abbreviation sets
@@ -136,8 +151,8 @@ void showAbbrevs()
 		data = makeTableDataForMode(data, STARTING_SET);
 	}
 	Vector columnNames = new Vector(2);
-	columnNames.addElement(new String("Abbreviation"));
-	columnNames.addElement(new String("Expansion"));
+	columnNames.addElement(new String(AbbreviationLabel));
+	columnNames.addElement(new String(ExpansionLabel));
 	table = new JTable();
 	table.setModel(new DefaultTableModel(data, columnNames));
 	table.setRowSelectionAllowed(true);
@@ -160,12 +175,12 @@ void showAbbrevs()
 	combo.setPreferredSize(dim);
 	combo.setSelectedItem(STARTING_SET);
 	comboPanel = new JPanel(new FlowLayout());
-	comboPanel.add(new JLabel("Abbreviation set:"));
+	comboPanel.add(new JLabel(AbbreviationSetLabel));
 	comboPanel.add(combo);
 
-	close = new JButton("Close");
-	write_set = new JButton("Write set");
-	write_all = new JButton("Write all");
+	close = new JButton(CloseLabel);
+	write_set = new JButton(WriteSetLabel);
+	write_all = new JButton(WriteAllLabel);
 	buttonPanel = new JPanel(new FlowLayout());
 	buttonPanel.add(write_set);
 	buttonPanel.add(write_all);
@@ -268,7 +283,7 @@ void showAbbrevs()
 		return row;
 	}
 
-	title = "Abbreviation list";
+	title = AbbreviationListLabel;
 	dialog = new JDialog(view, title, false);
 	c = dialog.getContentPane();
 	c.add(tablePane, "Center");
@@ -288,9 +303,9 @@ void showAbbrevs()
 void writeTableToNewBuffer(Vector v, String setName)
 {
 	Log.log(Log.DEBUG, BeanShell.class,
-		"calling writeTableToNewBuffer for " + setName);
+		CallingWTTNBLabel + " " + setName);
 	writeHeader();
-	Log.log(Log.DEBUG, BeanShell.class, "size of vector = "
+	Log.log(Log.DEBUG, BeanShell.class, SizeVectorLabel + " "
 	 + String.valueOf(v.size()));
 	writeSet(v, setName);
 }
@@ -317,7 +332,7 @@ void writeAllToNewBuffer()
 void writeHeader()
 {
 	jEdit.newFile(view);
-	textArea.setSelectedText("jEdit Abbreviation Table\n\n");
+	textArea.setSelectedText(jEditAbbreviationTableLabel + "\n\n");
 }
 
 /*
@@ -326,10 +341,10 @@ void writeHeader()
  */
 void writeSet(Vector v, String setName)
 {
-	textArea.setSelectedText("Abbreviation set: " + setName + "\n");
-	textArea.setSelectedText("Abbreviation    Expansion\n\n");
+	textArea.setSelectedText(AbbreviationSetLabel + " " + setName + "\n");
+	textArea.setSelectedText(AbbreviationExpansionLabel + "\n\n");
 	if(v.size() == 0)
-		textArea.setSelectedText("<< No abbreviations >>\n");
+		textArea.setSelectedText(NoAbbreviationsLabel + "\n");
 	else for( int i = 0; i < v.size(); ++i)
 	{
 		StringBuffer sb = new StringBuffer(85);
diff --git a/macros/Misc/Display_Actions.bsh b/macros/Misc/Display_Actions.bsh
index acfd2ae..d6e5a9c 100644
--- a/macros/Misc/Display_Actions.bsh
+++ b/macros/Misc/Display_Actions.bsh
@@ -22,9 +22,15 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
+// Localization
+final static String jEditActionBar1Label = jEdit.getProperty("macro.rs.DisplayActions.jEditActionBar1.label", "The jEdit action bar can be opened via the Utilities menu and is usually");
+final static String jEditActionBar2Label = jEdit.getProperty("macro.rs.DisplayActions.jEditActionBar2.label", "assigned to the C+ENTER keyboard shortcut.");
+final static String NoLabelLabel = jEdit.getProperty("macro.rs.DisplayActions.NoLabel.label", "<no label>");
+
+//Process
 StringBuffer buf = new StringBuffer();
-buf.append("The jEdit action bar can be opened via the Utilities menu and is usually\n");
-buf.append("assigned to the C+ENTER keyboard shortcut.\n\n");
+buf.append(jEditActionBar1Label + "\n");
+buf.append(jEditActionBar2Label + "\n\n");
 
 actionSets = jEdit.getActionSets();
 Arrays.sort(actionSets,new StandardUtilities.StringCompare(true));
@@ -44,7 +50,7 @@ for(i = 0; i < actionSets.length; i++)
 			String name = actions[j];
 			String label = jEdit.getProperty(actions[j] + ".label");
 			if(label == null)
-				label = "<no label>";
+				label = NoLabelLabel;
 			else
 				label = GUIUtilities.prettifyMenuLabel(label);
 			buf.append(name + " : " + label + "\n");
diff --git a/macros/Misc/Display_Character_Code.bsh b/macros/Misc/Display_Character_Code.bsh
index 0c64dfb..7117536 100644
--- a/macros/Misc/Display_Character_Code.bsh
+++ b/macros/Misc/Display_Character_Code.bsh
@@ -4,9 +4,12 @@
  *
  * Copyright 2004 Ollie Rutherfurd <oliver at jedit.org>
  *
- * $Id: Display_Character_Code.bsh 5050 2004-05-24 19:24:56Z orutherfurd $
+ * $Id: Display_Character_Code.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+// Localization
+final static String CharacterAtCaretLabel = jEdit.getProperty("macro.rs.DisplayCharacterCode.CharacterAtCaret.label", "Character at caret:"); 
+ 
 void displayCharacterCode(View view)
 {
 	JEditTextArea textArea = view.getTextArea();
@@ -16,7 +19,7 @@ void displayCharacterCode(View view)
 	{
 		char c = buffer.getText(caret,1).charAt(0);
 		StringBuffer buf = new StringBuffer();
-		buf.append("Character at caret: ");
+		buf.append(CharacterAtCaretLabel + " ");
 		buf.append("int=").append((int)c).append(", ");
 		buf.append("hex=").append(Integer.toString((int)c,16));
 		view.getStatus().setMessageAndClear(buf.toString());
diff --git a/macros/Misc/Display_Shortcuts.bsh b/macros/Misc/Display_Shortcuts.bsh
index b11bdcc..ee16aff 100644
--- a/macros/Misc/Display_Shortcuts.bsh
+++ b/macros/Misc/Display_Shortcuts.bsh
@@ -52,6 +52,15 @@
 
 import javax.swing.table.*;
 
+// Localization
+final static String jEditShortcutTableLabel = jEdit.getProperty("macro.rs.DisplayShortcuts.jEditShortcutTable.label", "jEdit Keyboard Shortcut Table");
+final static String NameLabel = jEdit.getProperty("macro.rs.DisplayShortcuts.Name.label", "Name");
+final static String Shortcut1Label = jEdit.getProperty("macro.rs.DisplayShortcuts.Shortcut1.label", "Shortcut - 1");
+final static String Shortcut2Label = jEdit.getProperty("macro.rs.DisplayShortcuts.Shortcut2.label", "Shortcut - 2");
+final static String CloseLabel = jEdit.getProperty("macro.rs.DisplayShortcuts.Close.label", "Close");
+final static String WriteToBufferLabel = jEdit.getProperty("macro.rs.DisplayShortcuts.WriteToBuffer.label", "Write to buffer");
+final static String ShortcutListLabel = jEdit.getProperty("macro.rs.DisplayShortcuts.ShortcutList.label", "Keyboard shortcut list");
+
 /*
  * method for creating vectors of row data describing shortcuts.
  */
@@ -99,8 +108,8 @@ Vector makeRow(String name, String shortcut1, String shortcut2)
 void writeTableToNewBuffer(Vector v)
 {
 	jEdit.newFile(view);
-	textArea.setSelectedText("jEdit Keyboard Shortcut Table\n\n");
-	headings = makeRow("Name", "Shortcut - 1", "Shortcut - 2");
+	textArea.setSelectedText(jEditShortcutTableLabel + "\n\n");
+	headings = makeRow(NameLabel, Shortcut1Label, Shortcut2Label);
 	writeLine(headings);
 	textArea.setSelectedText("\n");
 	for(int i = 0; i < v.size(); ++i)
@@ -147,7 +156,7 @@ void showShortcuts(View view)
 	makeShortcutsVector(v);
 	Collections.sort(v, new StandardUtilities.StringCompare());
 
-	table = new JTable(v, makeRow( "Name", "Shortcut-1", "Shortcut-2"));
+	table = new JTable(v, makeRow( NameLabel, Shortcut1Label, Shortcut2Label));
 	table.getColumnModel().getColumn(0).setPreferredWidth(200);
 	table.setRowSelectionAllowed(true);
 	/* 	The next line prevents the table from being edited.
@@ -167,13 +176,13 @@ void showShortcuts(View view)
 	tablePane = new JScrollPane(table);
 	tablePane.setPreferredSize(new Dimension(450, 300));
 
-	close = new JButton("Close");
+	close = new JButton(CloseLabel);
 	close.addActionListener(this);
-	write = new JButton("Write to buffer");
+	write = new JButton(WriteToBufferLabel);
 	write.addActionListener(this);
 	void actionPerformed(e)
 	{
-		if(e.getSource().getText().equals("Close"))
+		if(e.getSource().getText().equals(CloseLabel))
 			dialog.hide();
 		else writeTableToNewBuffer(v);
 	}
@@ -181,7 +190,7 @@ void showShortcuts(View view)
 	buttonPanel.add(write);
 	buttonPanel.add(close);
 
-	title = "Keyboard shortcut list";
+	title = ShortcutListLabel;
 	dialog = new JDialog(view, title, false);
 	dialog.getContentPane().add(tablePane, "Center");
 	dialog.getContentPane().add(buttonPanel, "South");
diff --git a/macros/Misc/Hex_Convert.bsh b/macros/Misc/Hex_Convert.bsh
index ab1cdb9..6cfeaf6 100644
--- a/macros/Misc/Hex_Convert.bsh
+++ b/macros/Misc/Hex_Convert.bsh
@@ -19,9 +19,16 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Hex_Convert.bsh 5224 2005-06-08 22:33:27Z orutherfurd $
+ * $Id: Hex_Convert.bsh 21381 2012-03-15 20:02:15Z jojaba_67 $
  */
 
+// Localization
+final static String BeforeLabel = jEdit.getProperty("macro.rs.HexConvert.Before.label", "before:");
+final static String AfterLabel = jEdit.getProperty("macro.rs.HexConvert.After.label", "after:");
+final static String NotValidHexLabel = jEdit.getProperty("macro.rs.HexConvert.NotValidHex.label", "is not valid hex string.");
+final static String ByteToStringLabel = jEdit.getProperty("macro.rs.HexConvert.ByteToString.label", "Byte to String:");
+
+//Process 
 import java.io.*;
 import java.util.*;
 
@@ -51,8 +58,8 @@ void stringToByte(String target)
     byte[] string = target.getBytes();
 
     StringBuffer foo = new StringBuffer();
-    foo.append("before = " + target);
-    foo.append("\nafter = ");
+    foo.append(BeforeLabel + " " + target);
+    foo.append("\n" + AfterLabel + " ");
 
     int length = string.length;
 	for (int i = 0; i < length; i++)
@@ -80,11 +87,11 @@ void byteToString(String target)
 	}
 	catch(NumberFormatException nfe)
 	{
-		Macros.error(view, "" + target + " is not valid hex string.");
+		Macros.error(view, target + " " + NotValidHexLabel);
 	}
 }
 
-String target = Macros.input(view,"Byte to String:");
+String target = Macros.input(view,ByteToStringLabel);
 if(target != null)
 	byteToString(target);
 
diff --git a/macros/Misc/HyperSearch_Results_to_Buffer.bsh b/macros/Misc/HyperSearch_Results_to_Buffer.bsh
index 48c1233..d39b4c4 100644
--- a/macros/Misc/HyperSearch_Results_to_Buffer.bsh
+++ b/macros/Misc/HyperSearch_Results_to_Buffer.bsh
@@ -23,9 +23,13 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: HyperSearch_Results_to_Buffer.bsh 14007 2008-11-04 21:37:36Z shlomy $
+ * $Id: HyperSearch_Results_to_Buffer.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+//Localization
+final static String WindowNotOpenError = jEdit.getProperty("macro.rs.HyperSearchResults.WindowNotOpen.error", "The 'HyperSearch Results' window is not open.");
+final static String NoMatchError = jEdit.getProperty("macro.rs.HyperSearchResults.NotMatch.error", "No HyperSearch matches.");
+ 
 traverseTree(javax.swing.tree.DefaultMutableTreeNode node, StringBuffer results){
 	if (node.getUserObject() instanceof org.gjt.sp.jedit.search.HyperSearchFileNode)
 	{
@@ -46,17 +50,17 @@ traverseTree(javax.swing.tree.DefaultMutableTreeNode node, StringBuffer results)
 }
 
 writeHypersearchResultsToBuffer(View view){
-	hs = view.getDockableWindowManager().getDockableWindow("hypersearch-results");
+        hs = view.getDockableWindowManager().getDockableWindow("hypersearch-results");
 	if (hs == null)
 	{
-		Macros.error(view, "The 'HyperSearch Results' window is not open.");
+		Macros.error(view, WindowNotOpenError);
 		return;
 	}
 
 	root = hs.getTreeModel().getRoot();
 	if(root == null || root.getDepth() == 0)
 	{
-		Macros.error(view, "No HyperSearch matches.");
+		Macros.error(view, NoMatchError);
 		return;
 	}
 
diff --git a/macros/Misc/Make_Bug_Report.bsh b/macros/Misc/Make_Bug_Report.bsh
index 86bee2b..d26d548 100644
--- a/macros/Misc/Make_Bug_Report.bsh
+++ b/macros/Misc/Make_Bug_Report.bsh
@@ -20,12 +20,23 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Make_Bug_Report.bsh 3873 2001-11-06 17:57:35Z jgellene $
+ * $Id: Make_Bug_Report.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  *
  * Checked for jEdit 4.0 API
  *
  */
 
+// Localization
+final static String OpeningActivityLogError = jEdit.getProperty("macro.rs.MakeBugReport.OpeningActivityLog.error", "Error opening Activity Log.");
+final static String UsefulEntriesForReportLabel = jEdit.getProperty("macro.rs.MakeBugReport.UsefulEntriesForReport.label", "Activity log entries that might be useful in a bug report:\n\n.");
+final static String MessagejEditLabel = jEdit.getProperty("macro.rs.MakeBugReport.MessagejEdit.label", "[message] jEdit:");
+final static String NoticejEditLabel = jEdit.getProperty("macro.rs.MakeBugReport.NoticejEdit.label", "[notice] jEdit:");
+final static String NoticeJarClassLoaderLabel = jEdit.getProperty("macro.rs.MakeBugReport.NoticeJarClassLoader.label", "[notice] JARClassLoader:");
+final static String MessagejEditStartupCompleteLabel = jEdit.getProperty("macro.rs.MakeBugReport.MessagejEditStartupComplete.label", "[message] jEdit: Startup complete");
+final static String ErrorLabel = jEdit.getProperty("macro.rs.MakeBugReport.Error.label", "[error]");
+final static String ReadingActivityLogError = jEdit.getProperty("macro.rs.MakeBugReport.ReadingActivityLog.error", "Error reading Activity Log");
+
+// Process
 makeBugReport()
 {
 	Log.flushStream();
@@ -38,17 +49,17 @@ makeBugReport()
 	}
 	catch(IOException e)
 	{
-		Macros.error(view, "Error opening Activity Log.");
+		Macros.error(view, OpeningActivityLogError);
 		return;
 	}
 	report = new StringBuffer();
 
-	report.append("Activity log entries that might be useful in a bug report:\n\n");
+	report.append(UsefulEntriesForReportLabel);
 
 	lastError = new StringBuffer();
 	insideError = false;
 	startupDone = false;
-	activityLogHeaderLines = 9;
+	activityLogHeaderLines = 250;
 	try
 	{
 		for(i = 0; i < activityLogHeaderLines; ++i)
@@ -58,17 +69,17 @@ makeBugReport()
 		while((line = reader.readLine()) != null)
 		{
 			if(!startupDone &&
-				(line.startsWith("[message] jEdit:")
-					|| line.startsWith("[notice] jEdit:")
-					|| line.startsWith("[notice] JARClassLoader:")))
+				(line.startsWith(MessagejEditLabel)
+					|| line.startsWith(NoticejEditLabel)
+					|| line.startsWith(NoticeJarClassLoaderLabel)))
 			{
 				report.append(line).append('\n');
-				if(line.equals("[message] jEdit: Startup complete"))
+				if(line.equals(MessagejEditStartupCompleteLabel))
 				{
 					startupDone = true;
 				}
 			}
-			else if(line.startsWith("[error]"))
+			else if(line.startsWith(ErrorLabel))
 			{
 				if(!insideError)
 				{
@@ -84,7 +95,7 @@ makeBugReport()
 	}
 	catch(IOException e)
 	{
-		Macros.error(view, "Error reading Activity Log");
+		Macros.error(view, ReadingActivityLogError);
 	}
 
 	report.append(lastError.toString());
diff --git a/macros/Misc/Run_Script.bsh b/macros/Misc/Run_Script.bsh
index 8beb67a..f3aae69 100644
--- a/macros/Misc/Run_Script.bsh
+++ b/macros/Misc/Run_Script.bsh
@@ -21,17 +21,22 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Run_Script.bsh 16858 2010-01-07 01:45:03Z ezust $
+ * $Id: Run_Script.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+// Localization
+final static String SpecifyParametersForRunningLabel = jEdit.getProperty("macro.rs.RunScript.SpecifyParametersForRunning.label", "Specify parameters for running script under");
+final static String ScriptExecutionCancelledMessage = jEdit.getProperty("macro.rs.RunScript.ScriptExecutionCancelled.message", "Script execution was cancelled.");
+final static String FileNotScriptError = jEdit.getProperty("macro.rs.RunScript.FileNotScript.error", "The current file does not appear to be a script.");
 
+// Process
 void execScript(interpreter, command)
 {
 	params = Macros.input(view,
-		"Specify parameters for running script under " + interpreter);
+		SpecifyParametersForRunningLabel + " " + interpreter);
 	if(params == null)
 	{
-		Macros.message(view, "Script execution was cancelled.");
+		Macros.message(view, ScriptExecutionCancelledMessage);
 		return;
 	}
 	runInSystemShell(view, command + params);
@@ -102,7 +107,7 @@ void runScript()
 	}
 	else {
 		Macros.error(view,
-			"The current file does not appear to be a script.");
+			String FileNotScriptError);
 	}
 }
 
diff --git a/macros/Misc/Show_Threads.bsh b/macros/Misc/Show_Threads.bsh
index 11d1531..2f9f710 100644
--- a/macros/Misc/Show_Threads.bsh
+++ b/macros/Misc/Show_Threads.bsh
@@ -22,7 +22,7 @@
  * Version 1.0
  * requires JDK 1.1, jEdit3.1
  *
- * $Id: Show_Threads.bsh 4001 2002-01-31 05:35:49Z spestov $
+ * $Id: Show_Threads.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
 
@@ -30,7 +30,15 @@ import java.awt.event.*;
 import javax.swing.*;
 import javax.swing.tree.*;
 
+// Localization
+final static String DaemonLabel = jEdit.getProperty("macro.rs.ShowThreads.Daemon.label", "daemon");
+final static String PriorityLabel = jEdit.getProperty("macro.rs.ShowThreads.Priority.label", "prio");
+final static String NotStartedLabel = jEdit.getProperty("macro.rs.ShowThreads.NotStarted.label", "not started");
+final static String InterruptedLabel = jEdit.getProperty("macro.rs.ShowThreads.Interrupted.label", "interrupted");
+final static String CloseUpdateLabel = jEdit.getProperty("macro.rs.ShowThreads.CloseUpdate.label", "[Esc] Close      [U] Update");
+final static String CurrentThreadsLabel = jEdit.getProperty("macro.rs.ShowThreads.CurrentThreads.label", "Current Threads");
 
+// Process
 JFrame createThreadsFrame() {
 
 	void windowClosing(WindowEvent e) {
@@ -80,7 +88,7 @@ JFrame createThreadsFrame() {
 
 
 	DefaultMutableTreeNode createGroupNode(ThreadGroup g) {
-		node = new DefaultMutableTreeNode(g.getName() + (g.isDaemon() ? " (daemon)" : ""), true);
+		node = new DefaultMutableTreeNode(g.getName() + (g.isDaemon() ? " (" + DaemonLabel + ")" : ""), true);
 
 		groups = new ThreadGroup[g.activeGroupCount()];
 		count = g.enumerate(groups, false);
@@ -98,14 +106,14 @@ JFrame createThreadsFrame() {
 
 	String getDescription(Thread t) {
 		StringBuffer buf = new StringBuffer(t.getName());
-		buf.append(" (prio ");
+		buf.append(" (" + PriorityLabel + " ");
 		buf.append(t.getPriority());
 		if (!t.isAlive())
-			buf.append(", not started");
+			buf.append(", " + NotStartedLabel);
 		if (t.isDaemon())
-			buf.append(", daemon");
+			buf.append(", " + DaemonLabel);
 		if (t.isInterrupted())
-			buf.append(", interrupted");
+			buf.append(", " + InterruptedLabel);
 		buf.append(")");
 		return buf.toString();
 	}
@@ -116,9 +124,9 @@ JFrame createThreadsFrame() {
 	tree.addKeyListener(this);
 
 	stage = new JScrollPane(tree);
-	stage.setColumnHeaderView(new JLabel("[Esc] Close      [U] Update"));
+	stage.setColumnHeaderView(new JLabel(CloseUpdateLabel));
 
-	frame = new JFrame("Current Threads");
+	frame = new JFrame(CurrentThreadsLabel);
 	frame.setContentPane(stage);
 	frame.addWindowListener(this);
 	// set default size and position:
diff --git a/macros/Properties/Insert_Buffer_Properties.bsh b/macros/Properties/Insert_Buffer_Properties.bsh
index 9c6333a..2c19802 100644
--- a/macros/Properties/Insert_Buffer_Properties.bsh
+++ b/macros/Properties/Insert_Buffer_Properties.bsh
@@ -8,7 +8,7 @@
  *
  * Copyright (C) 2002, 2003 Ollie Rutherfurd <oliver at rutherfurd.net>
  *
- * BugFixed by Björn "Vampire" Kautler <Vampire0 at gmx.net>
+ * BugFixed by Björn "Vampire" Kautler <Vampire0 at gmx.net>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -24,7 +24,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Insert_Buffer_Properties.bsh 5265 2005-08-14 22:31:16Z spestov $
+ * $Id: Insert_Buffer_Properties.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
 import java.awt.BorderLayout;
@@ -42,6 +42,14 @@ import javax.swing.JScrollPane;
 import javax.swing.border.EmptyBorder;
 import org.gjt.sp.jedit.gui.JCheckBoxList;
 
+// Localization
+final static String InsertLocalPropertiesLabel = jEdit.getProperty("macro.rs.InsertBufferProperties.InsertLocalProperties.label", "Insert Buffer Local Properties");
+final static String PropertiesLabel = jEdit.getProperty("macro.rs.InsertBufferProperties.Properties.label", "Properties:");
+final static String InsertLabel = jEdit.getProperty("macro.rs.InsertBufferProperties.Insert.label", "Insert");
+final static String PROPERTY_COMMON_CANCEL = jEdit.getProperty("common.cancel");
+final static String MustBeIn10LinesMessage = jEdit.getProperty("macro.rs.InsertBufferProperties.MustBeIn10Lines.message", "Note: Buffer Local properties must in the first or last 10 lines of a buffer to be recognized by jEdit.");
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+
 BufferLocalPropertiesDialog(View view){
 
 	this.view = view;
@@ -71,11 +79,11 @@ BufferLocalPropertiesDialog(View view){
 		checkedProps.put(property,"checked");
 	}
 
-	dialog = new JDialog(view,"Insert Buffer Local Properties",true);
+	dialog = new JDialog(view,InsertLocalPropertiesLabel,true);
 	content = new JPanel(new BorderLayout());
 	content.setBorder(new EmptyBorder(10,10,10,10));
 	dialog.setContentPane(content);
-	content.add(new JLabel("Properties:"), BorderLayout.NORTH);
+	content.add(new JLabel(PropertiesLabel), BorderLayout.NORTH);
 
 	_entries = new Vector();
 	names = props.keys();
@@ -97,8 +105,8 @@ BufferLocalPropertiesDialog(View view){
 	buttons.setBorder(new EmptyBorder(12,50,0,50));
 	buttons.setLayout(new BoxLayout(buttons,BoxLayout.X_AXIS));
 	buttons.add(Box.createGlue());
-	insert = new JButton("Insert");
-	cancel = new JButton("Cancel");
+	insert = new JButton(InsertLabel);
+	cancel = new JButton(PROPERTY_COMMON_CANCEL);
 	insert.addActionListener(this);
 	cancel.addActionListener(this);
 	dialog.getRootPane().setDefaultButton(insert);
@@ -188,7 +196,7 @@ BufferLocalPropertiesDialog(View view){
 
 		line = view.getTextArea().getCaretLine();
 		if(line >= 10 && line < (buffer.getLineCount()-10))
-			Macros.message(view, "Note: Buffer Local properties must in the first or last 10 lines of a buffer to be recognized by jEdit.");
+			Macros.message(view, MustBeIn10LinesMessage);
 
 		dialog.dispose();
 	}
@@ -202,7 +210,7 @@ BufferLocalPropertiesDialog(View view){
 }
 
 if(buffer.isReadOnly())
-	Macros.error(view, "Buffer is read-only.");
+	Macros.error(view, NotEditableMessage);
 else
 	BufferLocalPropertiesDialog(view);
 
diff --git a/macros/Properties/Look_and_Feel_Properties.bsh b/macros/Properties/Look_and_Feel_Properties.bsh
index 01eb425..bc547fb 100644
--- a/macros/Properties/Look_and_Feel_Properties.bsh
+++ b/macros/Properties/Look_and_Feel_Properties.bsh
@@ -20,12 +20,15 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Look_and_Feel_Properties.bsh 19599 2011-06-19 15:14:10Z kerik-sf $
+ * $Id: Look_and_Feel_Properties.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  *
  * Checked for jEdit 4.0 API
  *
  */
+// Localization
+final static String ListingLabel = jEdit.getProperty("macro.rs.LookAndFeelProperties.Listing.label", "--listing look and feel property names--");
 
+// Process
 void lookAndFeelProperties()
 {
 	defaults = javax.swing.UIManager.getLookAndFeelDefaults();
@@ -38,7 +41,7 @@ void lookAndFeelProperties()
 		Object o = e.getValue();
 		p.put(s.toString(),o.toString());
 	}
-	p.store(sb,"--listing look and feel property names--");
+	p.store(sb,ListingLabel);
 	newbuf = jEdit.newFile(view);
 	newbuf.insert(0, sb.toString());
 }
diff --git a/macros/Properties/System_Properties.bsh b/macros/Properties/System_Properties.bsh
index 70d7de1..4570e15 100644
--- a/macros/Properties/System_Properties.bsh
+++ b/macros/Properties/System_Properties.bsh
@@ -20,18 +20,22 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: System_Properties.bsh 19599 2011-06-19 15:14:10Z kerik-sf $
+ * $Id: System_Properties.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  *
  * Checked for jEdit 4.0 API
  *
  */
 
+// Localization
+final static String SystemPropertiesLabel = jEdit.getProperty("macro.rs.SystemProperties.SystemProperties.label", "System Properties");
+  
+// Process
 systemProperties()
 {
 	props = System.getProperties();
 	sw = new StringWriter();
 	pw = new PrintWriter(sw);
-	props.store(pw,"System Properties");
+	props.store(pw,SystemPropertiesLabel);
 	jEdit.newFile(view);
 	textArea.setSelectedText(sw.toString());
 }
diff --git a/macros/Text/Add_Prefix_and_Suffix.bsh b/macros/Text/Add_Prefix_and_Suffix.bsh
index f192ef5..bcff9ff 100644
--- a/macros/Text/Add_Prefix_and_Suffix.bsh
+++ b/macros/Text/Add_Prefix_and_Suffix.bsh
@@ -21,7 +21,7 @@
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Add_Prefix_and_Suffix.bsh 9126 2007-03-10 19:14:30Z Vampire0 $
+ * $Id: Add_Prefix_and_Suffix.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  *
  * Notes on use:
  *
@@ -39,13 +39,21 @@
 // import statements
 import javax.swing.border.*;
 
+// Localization
+final static String MainDialogTitle = jEdit.getProperty("macro.rs.AddPrefixAndSuffix.MainDialog.title", "Add prefix and suffix to selected lines");
+final static String PrefixToAddLabel = jEdit.getProperty("macro.rs.AddPrefixAndSuffix.PrefixToAdd.label", "Prefix to add:");
+final static String SuffixToAddLabel = jEdit.getProperty("macro.rs.AddPrefixAndSuffix.SuffixToAdd.label", "Suffix to add:");
+final static String PROPERTY_COMMON_OK = jEdit.getProperty("common.ok");
+final static String PROPERTY_COMMON_CANCEL = jEdit.getProperty("common.cancel");
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+
 // main routine
 void prefixSuffixDialog(View view)
 {
 	this.view = view;
 
     // create dialog object and set its features
-    title = "Add prefix and suffix to selected lines";
+    title = MainDialogTitle;
     dialog = new JDialog(view, title, false);
     content = new JPanel(new BorderLayout());
     content.setBorder(new EmptyBorder(12, 12, 12, 12));
@@ -55,9 +63,9 @@ void prefixSuffixDialog(View view)
     // entry of the prefix and suffix text
     fieldPanel = new JPanel(new GridLayout(4, 1, 0, 6));
     prefixField = new HistoryTextField("macro.add-prefix");
-    prefixLabel = new JLabel("Prefix to add:");
+    prefixLabel = new JLabel(PrefixToAddLabel);
     suffixField = new HistoryTextField("macro.add-suffix");
-    suffixLabel = new JLabel("Suffix to add:");
+    suffixLabel = new JLabel(SuffixToAddLabel);
     fieldPanel.add(prefixLabel);
     fieldPanel.add(prefixField);
     fieldPanel.add(suffixLabel);
@@ -70,8 +78,8 @@ void prefixSuffixDialog(View view)
         BoxLayout.X_AXIS));
     buttonPanel.setBorder(new EmptyBorder(12, 50, 0, 50));
     buttonPanel.add(Box.createGlue());
-    ok = new JButton("OK");
-    cancel = new JButton("Cancel");
+    ok = new JButton(PROPERTY_COMMON_OK);
+    cancel = new JButton(PROPERTY_COMMON_CANCEL);
     ok.setPreferredSize(cancel.getPreferredSize());
     dialog.getRootPane().setDefaultButton(ok);
     buttonPanel.add(ok);
@@ -135,7 +143,7 @@ void prefixSuffixDialog(View view)
 // this single line of code is the script's main routine
 // it calls the methods and exits
 if(buffer.isReadOnly())
-	Macros.error(view, "Buffer is read-only.");
+	Macros.error(view, NotEditableMessage);
 else
 	prefixSuffixDialog(view);
 
diff --git a/macros/Text/Color_Picker.bsh b/macros/Text/Color_Picker.bsh
index cc2fa42..a557695 100644
--- a/macros/Text/Color_Picker.bsh
+++ b/macros/Text/Color_Picker.bsh
@@ -17,20 +17,25 @@
  * along with the jEdit application; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Color_Picker.bsh 19055 2010-11-29 19:15:07Z kerik-sf $
+ * $Id: Color_Picker.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+// Localization
+final static String ColorPickerLabel = jEdit.getProperty("macro.rs.ColorPicker.ColorPicker.label", "Color Picker");
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+
+// Process 
 selection = textArea.getSelectedText();
 if (selection != null)
     color = GUIUtilities.parseColor(selection);
 else
     color = null;
 
-color = JColorChooser.showDialog(view, "Color Picker", color);
+color = JColorChooser.showDialog(view, ColorPickerLabel, color);
 
 if (color != null){
 	if(buffer.isReadOnly())
-		Macros.error(view, "Buffer is read-only.");
+		Macros.error(view, NotEditableMessage);
 	else
 		textArea.setSelectedText(SyntaxUtilities.getColorHexString(color));
 }
diff --git a/macros/Text/Compose_Tag.bsh b/macros/Text/Compose_Tag.bsh
index 422a2ef..3cd22d8 100644
--- a/macros/Text/Compose_Tag.bsh
+++ b/macros/Text/Compose_Tag.bsh
@@ -1,3 +1,6 @@
+// Localization
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+
 void composeTag()
 {
 	caret = textArea.getCaretPosition();
@@ -19,7 +22,7 @@ void composeTag()
 }
 
 if(buffer.isReadOnly())
-	Macros.error(view, "Buffer is read-only.");
+	Macros.error(view, NotEditableMessage);
 else
 	composeTag();
 
diff --git a/macros/Text/Duplicate_Line.bsh b/macros/Text/Duplicate_Line.bsh
index 03593b6..962cee4 100644
--- a/macros/Text/Duplicate_Line.bsh
+++ b/macros/Text/Duplicate_Line.bsh
@@ -19,12 +19,15 @@
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
  *
- * $Id: Duplicate_Line.bsh 3866 2001-11-06 15:04:21Z jgellene $
+ * $Id: Duplicate_Line.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  *
  * Checked for jEdit 4.0 API
  *
  */
 
+// Localization
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+ 
 void duplicateLine()
 {
 	/*
@@ -34,7 +37,7 @@ void duplicateLine()
 	 */
 	if(buffer.isReadOnly())
 	{
-		Macros.error(view, "This file is read only.");
+		Macros.error(view, NotEditableMessage);
 		return;
 	}
 	line = textArea.getCaretLine();
diff --git a/macros/Text/Insert_Date.bsh b/macros/Text/Insert_Date.bsh
index f15cd43..64e3b12 100644
--- a/macros/Text/Insert_Date.bsh
+++ b/macros/Text/Insert_Date.bsh
@@ -19,7 +19,7 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Insert_Date.bsh 4988 2004-03-08 04:29:12Z spestov $
+ * $Id: Insert_Date.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
 // Inserts the current date and Internet Time at the caret position
@@ -29,6 +29,11 @@
 
 // Wed Jan 31 03:12:33 AKST 2001 @550 /Internet Time/
 
+// Localization
+final static String InternetTimeLabel = jEdit.getProperty("macro.rs.InsertDate.InternetTime.label", "Internet Time");
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable");
+
+// Process
 void insertDate()
 {
 	Calendar rightNow = Calendar.getInstance();
@@ -52,11 +57,11 @@ void insertDate()
 
 	// inserting date and internet time to textarea
 	textArea.setSelectedText(Calendar.getInstance().getTime().toString()
-		+ " @" + (int)swatch + " /Internet Time/");
+		+ " @" + (int)swatch + " /" + InternetTimeLabel + "/");
 }
 
 if(buffer.isReadOnly())
-	Macros.error(view, "Buffer is read-only.");
+	Macros.error(view, NotEditableMessage);
 else
 	insertDate();
 
diff --git a/macros/Text/Insert_Tag.bsh b/macros/Text/Insert_Tag.bsh
index 8a7923e..d51331d 100644
--- a/macros/Text/Insert_Tag.bsh
+++ b/macros/Text/Insert_Tag.bsh
@@ -20,9 +20,13 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Insert_Tag.bsh 18975 2010-11-16 11:36:56Z voituk $
+ * $Id: Insert_Tag.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
+// Localization
+final static String EnterNameTagLabel = jEdit.getProperty("macro.rs.InsertTag.EnterNameTag.label", "Enter name of tag:");
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable"); 
 
+// Process
 Map tagsTemplate = new TreeMap() {{
  	 put("br", 		"<br/>");
  	 put("hr", 		"<hr/>");
@@ -34,7 +38,7 @@ Map tagsTemplate = new TreeMap() {{
 void insertTag()
 {
 	
-	String tag = Macros.input(view, "Enter name of tag:");
+	String tag = Macros.input(view, EnterNameTagLabel);
 	if( tag == null || tag.length() == 0) return;
 	String text = textArea.getSelectedText();
 	if(text == null) text = "";
@@ -72,7 +76,7 @@ void insertTag()
 } 
 
 if(buffer.isReadOnly())
-	Macros.error(view, "Buffer is read-only.");
+	Macros.error(view, NotEditableMessage);
 else
 	insertTag();
 
diff --git a/macros/Text/Next_Char.bsh b/macros/Text/Next_Char.bsh
index ea819b6..22cab50 100644
--- a/macros/Text/Next_Char.bsh
+++ b/macros/Text/Next_Char.bsh
@@ -20,12 +20,16 @@
  * along with the jEdit program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  *
- * $Id: Next_Char.bsh 4988 2004-03-08 04:29:12Z spestov $
+ * $Id: Next_Char.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  *
  * Checked for jEdit 4.0 API
  *
  */
 
+ // Localization
+final static String EnterCharacterLabel = jEdit.getProperty("macro.rs.InsertTag.EnterCharacter.label", "Enter a character");
+
+// Process
 void nextChar()
 {
 	script = new StringBuffer(512);
@@ -38,7 +42,7 @@ void nextChar()
 	script.append( "if(__char__ != '\\n') ++match;"              );
 	script.append( "textArea.select(start, start + match - 1);}" );
 
-	view.getInputHandler().readNextChar("Enter a character",script.toString());
+	view.getInputHandler().readNextChar(EnterCharacterLabel,script.toString());
 }
 
 nextChar();
diff --git a/macros/Text/Reverse_Lines.bsh b/macros/Text/Reverse_Lines.bsh
index 27dba02..93d621c 100644
--- a/macros/Text/Reverse_Lines.bsh
+++ b/macros/Text/Reverse_Lines.bsh
@@ -9,9 +9,14 @@
  * :mode=beanshell:tabSize=4:indentSize=4:maxLineLen=0:noTabs=false:
  * :indentOnTab=true:indentOnEnter=true:folding=explicit:collapseFolds=1:
  *
- * $Id: Reverse_Lines.bsh 9126 2007-03-10 19:14:30Z Vampire0 $
+ * $Id: Reverse_Lines.bsh 21353 2012-03-14 09:46:51Z jojaba_67 $
  */
 
+// Localization
+final static String NotWorkingRectangularSelectionError = jEdit.getProperty("macro.rs.ReverseLines.NotWorkingRectangularSelection.error", "Sorry, this macro doesn't work with Rectangular Selections.");
+final static String NotEditableMessage = jEdit.getProperty("macro.rs.general.ErrorNotEditableDialog.message", "Buffer is not editable"); 
+
+// Process 
 void reverseLines(textArea)
 {
 	JEditBuffer buffer = textArea.getBuffer();
@@ -22,7 +27,7 @@ void reverseLines(textArea)
 	{
 		if(selections[i] instanceof Selection.Rect)
 		{
-			Macros.error(view, "Sorry, this macro doesn't work with Rectangular Selections.");
+			Macros.error(view, NotWorkingRectangularSelectionError);
 			return;
 		}
 	}
@@ -76,7 +81,7 @@ void reverseLines(textArea)
 }
 
 if(buffer.isReadOnly())
-	Macros.error(view, "Buffer is read-only.");
+	Macros.error(view, NotEditableMessage);
 else
 	reverseLines(textArea);
 
diff --git a/macros/Text/Single_Space_Buffer.bsh b/macros/Text/Single_Space_Buffer.bsh
index cf811e8..c038f1a 100644
--- a/macros/Text/Single_Space_Buffer.bsh
+++ b/macros/Text/Single_Space_Buffer.bsh
@@ -6,9 +6,15 @@
  *
  * Copyright (C) 2004 Ollie Rutherfurd <oliver at rutherfurd.net>
  *
- * $Id: Single_Space_Buffer.bsh 9126 2007-03-10 19:14:30Z Vampire0 $
+ * $Id: Single_Space_Buffer.bsh 21381 2012-03-15 20:02:15Z jojaba_67 $
  */
 
+// Localization
+final static String NotDoubleSpacedMessage = jEdit.getProperty("macro.rs.SingleSpaceBuffer.NotDoubleSpaced.message", "doesn't appear to be double-spaced:");
+final static String LineMessage = jEdit.getProperty("macro.rs.SingleSpaceBuffer.Line.message", "Line");
+final static String NotBlankMessage = jEdit.getProperty("macro.rs.SingleSpaceBuffer.NotBlank.message", "isn't blank."); 
+
+// Process
 void singleSpaceBuffer(View view)
 {
 	Buffer buffer = view.getBuffer();
@@ -22,8 +28,8 @@ void singleSpaceBuffer(View view)
 		else
 		{
 			StringBuffer msg = new StringBuffer();
-			msg.append(buffer.getPath() + " doesn't appear to be double-spaced:\n");
-			msg.append("Line " + (line + 1) + " isn't blank.");
+			msg.append(buffer.getPath() + " " + NotDoubleSpacedMessage + "\n");
+			msg.append(LineMessage + " " + (line + 1) + " " + NotBlankMessage);
 			Macros.error(view, msg.toString());
 			return;
 		}
diff --git a/misc/debug/bench_replace.bsh b/misc/debug/bench_replace.bsh
new file mode 100644
index 0000000..183766e
--- /dev/null
+++ b/misc/debug/bench_replace.bsh
@@ -0,0 +1,35 @@
+cLines = 2000;
+sLine = "insert into example a,b,c,d,e,f,g,h,i,h,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,e,f,g,h,i,h,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,a,b,c,d,e,f,g,h,i,h,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z values (1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0);";
+newBuffer = true;
+
+SearchAndReplace.setSearchString(",");
+SearchAndReplace.setReplaceString(", ");
+SearchAndReplace.setBeanShellReplace(false);
+SearchAndReplace.setWholeWord(false);
+SearchAndReplace.setIgnoreCase(false);
+SearchAndReplace.setRegexp(false);
+
+if (newBuffer) {
+  jEdit.newFile(view);
+  buffer = textArea.getBuffer();
+  sb = new StringBuilder();
+  for (i=0; i<cLines; i++) {
+    sb.append(sLine);
+    sb.append('\n');
+  }
+  buffer.insert(0, sb.toString());
+}
+
+SearchAndReplace.setSearchFileSet(new CurrentBufferSet());
+sig = new java.util.concurrent.CountDownLatch(1);
+nStop = nStart = 0;
+
+nStart = System.currentTimeMillis();
+SearchAndReplace.replaceAll(view);
+nStop = System.currentTimeMillis();
+
+buffer.writeLock();
+buffer.insert(0, "time elapsed: " + ((nStop-nStart)/1000.0) + " s , per line: " + ((nStop-nStart)/1.0/cLines) + " ms\n");
+buffer.writeUnlock();
+buffer.setDirty(false);
+textArea.setCaretPosition(0);
diff --git a/misc/debug/edit_bus_send_exploit.bsh b/misc/debug/edit_bus_send_exploit.bsh
new file mode 100644
index 0000000..80aadfe
--- /dev/null
+++ b/misc/debug/edit_bus_send_exploit.bsh
@@ -0,0 +1,42 @@
+import java.util.concurrent.CountDownLatch;
+
+signalStart = new CountDownLatch(1);
+signalSent = new CountDownLatch(1);
+
+class Handler implements EBComponent
+{
+  public void handleMessage(EBMessage message)
+  {
+    System.err.println("handling starts");
+    signalSent.countDown();
+    Thread.sleep(200);
+    // System.err.println(message.getClass().getName());
+    System.err.println("handling ends");
+  }
+}
+
+h = new Handler();
+EditBus.addToBus(h);
+
+th1 = new Thread(new Runnable() {
+  public void run()
+  {
+    signalStart.await();
+    System.err.println("th1 will send");
+    EditBus.send(new PropertiesChanged(null));
+    System.err.println("th1 after send");
+  }
+});
+th1.start();
+
+th2 = new Thread(new Runnable() {
+    public void run() {
+      signalSent.await();
+      th1.interrupt();
+      Thread.sleep(1000);
+      EditBus.removeFromBus(h);
+    }
+});
+th2.start();
+System.err.println("macro done");
+signalStart.countDown();
diff --git a/misc/debug/info.txt b/misc/debug/info.txt
new file mode 100644
index 0000000..2fa9508
--- /dev/null
+++ b/misc/debug/info.txt
@@ -0,0 +1 @@
+Debugging macros, snippets and patches.
\ No newline at end of file
diff --git a/misc/debug/show_timing.patch b/misc/debug/show_timing.patch
new file mode 100644
index 0000000..26e6041
--- /dev/null
+++ b/misc/debug/show_timing.patch
@@ -0,0 +1,46 @@
+Index: org/gjt/sp/jedit/search/SearchAndReplace.java
+===================================================================
+--- org/gjt/sp/jedit/search/SearchAndReplace.java	(Revision 21683)
++++ org/gjt/sp/jedit/search/SearchAndReplace.java	(Arbeitskopie)
+@@ -853,7 +853,24 @@
+ 	{
+ 		return replaceAll(view,false);
+ 	} //}}}
+-	
++
++	private static long mCount;
++	private static long mTime;
++	private static long mStart;
++	private static long mEnd;
++	private static final int mMod = 1;
++	private static void startMeasurement() {
++		mCount++;
++		mStart = System.nanoTime();
++	}
++	private static void stopMeasurement() {
++		mEnd = System.nanoTime();
++		mTime += mEnd-mStart;
++		if(mCount % mMod == 0) {
++			Log.log(Log.DEBUG,null,"Call= " + mCount + " Avg=" + mTime / mCount);
++		}
++	}
++
+ 	//{{{ replaceAll() method
+ 	/**
+ 	 * Replaces all occurrences of the search string with the replacement
+@@ -921,6 +938,7 @@
+ 				// an error occurs
+ 				int retVal = 0;
+ 
++				startMeasurement();
+ 				try
+ 				{
+ 					buffer.beginCompoundEdit();
+@@ -932,6 +950,7 @@
+ 				{
+ 					buffer.endCompoundEdit();
+ 				}
++				stopMeasurement();
+ 
+ 				if(retVal != 0)
+ 				{
diff --git a/misc/indentation_problems/01.cpp b/misc/indentation_problems/01.cpp
new file mode 100644
index 0000000..d20275c
--- /dev/null
+++ b/misc/indentation_problems/01.cpp
@@ -0,0 +1,12 @@
+void f() {
+  std
+}
+
+/*
+At the end of line 2 type ::
+At first : it should go left, at second : be back.
+*/
+
+void f() {
+  std::
+}
diff --git a/misc/indentation_problems/02.py b/misc/indentation_problems/02.py
new file mode 100644
index 0000000..ecb2859
--- /dev/null
+++ b/misc/indentation_problems/02.py
@@ -0,0 +1,9 @@
+if a:
+  if b:
+else
+
+# At the end of line 3 type :
+# "else" statement should stay.
+if a:
+  if b:
+else:
diff --git a/misc/indentation_problems/03.java b/misc/indentation_problems/03.java
new file mode 100644
index 0000000..1f12b10
--- /dev/null
+++ b/misc/indentation_problems/03.java
@@ -0,0 +1,9 @@
+if (true
+    && fun(a ? x 
+
+/*
+Adding : to the second line shouldn't reindent.
+*/
+
+if (true
+    && fun(a ? x :  
diff --git a/misc/indentation_problems/04.java b/misc/indentation_problems/04.java
new file mode 100644
index 0000000..7a3f72f
--- /dev/null
+++ b/misc/indentation_problems/04.java
@@ -0,0 +1,7 @@
+if (true
+    && s.equals("xxxx")) break;
+
+/*
+Inserting : inside the string or wrapping break in {} brackets should not
+reindent.
+*/
\ No newline at end of file
diff --git a/misc/indentation_problems/05.sh b/misc/indentation_problems/05.sh
new file mode 100644
index 0000000..9a5dc6e
--- /dev/null
+++ b/misc/indentation_problems/05.sh
@@ -0,0 +1,10 @@
+if a; then
+  f
+
+# In line 2 one is to type "find".
+# "fi" is a keyword defined in unindentThisLine property and
+# "i" is an electric key.
+# It should be indented as it is initially:
+
+if a; then
+  find
diff --git a/misc/indentation_problems/info.txt b/misc/indentation_problems/info.txt
new file mode 100644
index 0000000..8f5e8d2
--- /dev/null
+++ b/misc/indentation_problems/info.txt
@@ -0,0 +1,16 @@
+These are the test cases for indentation related issues.
+
+Electric keys testing:
+01.cpp - std::
+02.py - if if else
+03.java - if broken in 2 lines and "? :" expression
+04.java - : inside a string literal or bracketing a single statement
+05.sh - a function beginning with a keyword in basic-like languages
+
+Typical cases where automatic indentation should work on current line:
+java, c:
+  {} brackets, a label ending with ":", 
+python:
+  "else:" should be indented left
+bash:
+  "fi" should go left
diff --git a/misc/info.txt b/misc/info.txt
new file mode 100644
index 0000000..b0655f4
--- /dev/null
+++ b/misc/info.txt
@@ -0,0 +1,2 @@
+This is a directory for various files that are not to be compiled
+or included in the release.
\ No newline at end of file
diff --git a/modes/actionscript.xml b/modes/actionscript.xml
index 3d53a98..53eea00 100644
--- a/modes/actionscript.xml
+++ b/modes/actionscript.xml
@@ -21,25 +21,24 @@
 		<PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
 	</PROPS>
 
-	<RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">
+	<RULES ESCAPE="\" IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE">
 		<!-- whitespace: (space and tab) -->
 		<SPAN TYPE="COMMENT1">
 			<BEGIN>/*</BEGIN>
 			<END>*/</END>
 		</SPAN>
 
-		<SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
 			<BEGIN>"</BEGIN>
 			<END>"</END>
 		</SPAN>
 
-		<SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
 			<BEGIN>'</BEGIN>
 			<END>'</END>
 		</SPAN>
 
-		<MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
-		<SEQ TYPE="OPERATOR">)</SEQ>
+		<MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="CONTEXT">(</MARK_PREVIOUS>
 
 		<EOL_SPAN TYPE="COMMENT1">//</EOL_SPAN>
 		<SEQ TYPE="NULL">)</SEQ>
@@ -68,7 +67,7 @@
 		<SEQ TYPE="OPERATOR">]</SEQ>
 		<SEQ TYPE="OPERATOR">[</SEQ>
 		<SEQ TYPE="OPERATOR">?</SEQ>
-		<MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR"
+		<MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="CONTEXT"
 			AT_LINE_START="TRUE">:</MARK_PREVIOUS>
 		<SEQ TYPE="OPERATOR">:</SEQ>
 
@@ -106,6 +105,7 @@
 			<KEYWORD1>while</KEYWORD1>
 			<KEYWORD1>with</KEYWORD1>
 
+			<KEYWORD2>Bindable</KEYWORD2>
 			<!-- Built-in objects (good idea not to use these names!)-->
 			<KEYWORD3>Array</KEYWORD3>
 			<KEYWORD3>Boolean</KEYWORD3>
@@ -114,9 +114,11 @@
 			<KEYWORD3>Function</KEYWORD3>
 			<KEYWORD3>Key</KEYWORD3>
 			<KEYWORD3>MovieClip</KEYWORD3>
+			<KEYWORD3>Sprite</KEYWORD3>
 			<KEYWORD3>Math</KEYWORD3>
 			<KEYWORD3>Mouse</KEYWORD3>
 			<KEYWORD3>Number</KEYWORD3>
+			<KEYWORD3>uint</KEYWORD3>
 			<KEYWORD3>Object</KEYWORD3>
 			<KEYWORD3>Selection</KEYWORD3>
 			<KEYWORD3>Sound</KEYWORD3>
@@ -197,7 +199,7 @@
 			<LITERAL2>setInterval</LITERAL2>
 			<LITERAL2>setI</LITERAL2>
 			<KEYWORD3>MMExecute</KEYWORD3>
-
+			
 			 <!-- MovieCLip methods-->
 			<LITERAL2>attachMovie</LITERAL2>
 			<LITERAL2>createEmptyMovieClip</LITERAL2>
@@ -219,7 +221,7 @@
 			<LITERAL2>getTextSnapshot</LITERAL2>
 			<LITERAL2>getSWFVersion</LITERAL2>
 			<LITERAL2>getSWFVersion</LITERAL2>
-
+			
 			<!-- MovieCLip drawing methods  -->
 			<LITERAL2>beginFill</LITERAL2>
 			<LITERAL2>beginGradientFill</LITERAL2>
@@ -229,7 +231,7 @@
 			<LITERAL2>lineStyle</LITERAL2>
 			<LITERAL2>lineTo</LITERAL2>
 			<LITERAL2>moveTo</LITERAL2>
-
+			
 			<!-- MovieCLip properties  -->
 			<LITERAL2>enabled</LITERAL2>
 			<LITERAL2>focusEnabled</LITERAL2>
@@ -240,7 +242,7 @@
 			<LITERAL2>trackAsMenu</LITERAL2>
 			<LITERAL2>menu</LITERAL2>
 			<LITERAL2>useHandCursor</LITERAL2>
-
+			
 			<!-- MovieCLip Events  -->
 			<LITERAL2>onData</LITERAL2>
 			<LITERAL2>onDragOut</LITERAL2>
@@ -260,7 +262,7 @@
 			<LITERAL2>onRollOver</LITERAL2>
 			<LITERAL2>onSetFocus</LITERAL2>
 			<LITERAL2>onUnload</LITERAL2>
-
+			
 			<!-- MovieClipLoader class -->
 			<LITERAL2>MovieClipLoader</LITERAL2>
 			<LITERAL2>getProgress</LITERAL2>
@@ -271,11 +273,11 @@
 			<LITERAL2>onLoadProgress</LITERAL2>
 			<LITERAL2>onLoadStart</LITERAL2>
 			<LITERAL2>unloadClip</LITERAL2>
-
+			
 			<!-- PrintJob class -->
 			<LITERAL2>PrintJob</LITERAL2>
 			<LITERAL2>addPage</LITERAL2>
-
+			
 			<!-- Camera class -->
 			<LITERAL2>Camera</LITERAL2>
 			<LITERAL2>activityLevel</LITERAL2>
@@ -294,7 +296,7 @@
 			<LITERAL2>setMode</LITERAL2>
 			<LITERAL2>setMotionLevel</LITERAL2>
 			<LITERAL2>setQuality</LITERAL2>
-
+			
 			<!-- Microphone class -->
 			<LITERAL2>Microphone</LITERAL2>
 			<LITERAL2>gain</LITERAL2>
@@ -306,7 +308,7 @@
 			<LITERAL2>silenceLevel</LITERAL2>
 			<LITERAL2>silenceTimeout</LITERAL2>
 			<LITERAL2>useEchoSuppression</LITERAL2>
-
+			
 			<!-- ContextMenu Class -->
 			<LITERAL2>ContextMenu</LITERAL2>
 			<LITERAL2>builtInItems</LITERAL2>
@@ -318,17 +320,17 @@
 			<LITERAL2>ContextMenuItem</LITERAL2>
 			<LITERAL2>separatorBefore</LITERAL2>
 			<LITERAL2>visible</LITERAL2>
-
+			
 			<!-- Error class -->
 			<LITERAL2>Error</LITERAL2>
 			<LITERAL2>visible</LITERAL2>
 			<LITERAL2>message</LITERAL2>
-
+			
 			<!-- operators grenn-->
 			<KEYWORD1>instanceof</KEYWORD1>
 			<KEYWORD1>#endinitclip</KEYWORD1>
 			<KEYWORD1>#initclip</KEYWORD1>
-
+			
 			<!-- properties -->
 			<LITERAL2>_alpha</LITERAL2>
 			<LITERAL2>_currentframe</LITERAL2>
@@ -356,8 +358,8 @@
 			<LITERAL2>_level</LITERAL2>
 			<LITERAL2>_lockroot</LITERAL2>
 			<LITERAL2>_accProps</LITERAL2>
-
-
+			
+			
 			<!-- Array -->
 			<LITERAL2>sortOn</LITERAL2>
 			<LITERAL2>toString</LITERAL2>
@@ -371,13 +373,13 @@
 			<LITERAL2>pop</LITERAL2>
 			<LITERAL2>concat</LITERAL2>
 			<LITERAL2>unshift</LITERAL2>
-
+			
 			<!-- Arguments -->
 			<LITERAL2>arguments</LITERAL2>
 			<LITERAL2>callee</LITERAL2>
 			<LITERAL2>caller</LITERAL2>
 			<LITERAL2>valueOf</LITERAL2>
-
+			
 			<!-- Date Class -->
 			<LITERAL2>getDate</LITERAL2>
 			<LITERAL2>getDay</LITERAL2>
@@ -415,11 +417,11 @@
 			<LITERAL2>setUTCSeconds</LITERAL2>
 			<LITERAL2>setYear</LITERAL2>
 			<LITERAL2>UTC</LITERAL2>
-
+			
 			<!-- Function -->
 			<LITERAL2>_global</LITERAL2>
 			<LITERAL2>apply</LITERAL2>
-
+			
 			<!--  Math Class -->
 			<LITERAL2>abs</LITERAL2>
 			<LITERAL2>acos</LITERAL2>
@@ -438,7 +440,7 @@
 			<LITERAL2>sin</LITERAL2>
 			<LITERAL2>sqrt</LITERAL2>
 			<LITERAL2>tan</LITERAL2>
-
+			
 			<LITERAL2>E</LITERAL2>
 			<LITERAL2>LN2</LITERAL2>
 			<LITERAL2>LN10</LITERAL2>
@@ -447,19 +449,19 @@
 			<LITERAL2>PI</LITERAL2>
 			<LITERAL2>SQRT1_2</LITERAL2>
 			<LITERAL2>SQRT2</LITERAL2>
-
+			
 			<!-- Number -->
 			<LITERAL2>MAX_VALUE</LITERAL2>
 			<LITERAL2>MIN_VALUE</LITERAL2>
 			<LITERAL2>NEGATIVE_INFINITY</LITERAL2>
 			<LITERAL2>POSITIVE_INFINITY</LITERAL2>
-
+			
 			<!-- Object -->
 			<LITERAL2>addProperty</LITERAL2>
 			<LITERAL2>registerClass</LITERAL2>
 			<LITERAL2>unwatch</LITERAL2>
 			<LITERAL2>watch</LITERAL2>
-
+			
 			<!-- String -->
 			<LITERAL2>charAt</LITERAL2>
 			<LITERAL2>charCodeAt</LITERAL2>
@@ -471,13 +473,13 @@
 			<LITERAL2>substring</LITERAL2>
 			<LITERAL2>toLowerCase</LITERAL2>
 			<LITERAL2>toUpperCase</LITERAL2>
-
+			
 			<!-- Accessibility -->
 			<LITERAL2>Accessibility</LITERAL2>
 			<LITERAL2>isActive</LITERAL2>
 			<LITERAL2>updateProperties</LITERAL2>
-
-
+			              
+			
 			<!-- System capabilities Class-->
 			<LITERAL2>System</LITERAL2>
 			<LITERAL2>capabilities</LITERAL2>
@@ -512,13 +514,13 @@
 			<LITERAL2>version</LITERAL2>
 			<!-- System security Class -->
 			<LITERAL2>security</LITERAL2>
-
+			
 			<!-- Color Class -->
 			<LITERAL2>getRGB</LITERAL2>
 			<LITERAL2>getTransform</LITERAL2>
 			<LITERAL2>setRGB</LITERAL2>
 			<LITERAL2>setTransform</LITERAL2>
-
+			
 			<!-- Key Class -->
 			<LITERAL2>addListener</LITERAL2>
 			<LITERAL2>getAscii</LITERAL2>
@@ -544,12 +546,12 @@
 			<LITERAL2>SPACE</LITERAL2>
 			<LITERAL2>TAB</LITERAL2>
 			<LITERAL2>UP</LITERAL2>
-
+			
 			<!-- Mouse -->
 			<LITERAL2>hide</LITERAL2>
 			<LITERAL2>show</LITERAL2>
 			<LITERAL2>onMouseWheel</LITERAL2>
-
+			
 			<!-- Selection Class-->
 			<LITERAL2>getBeginIndex</LITERAL2>
 			<LITERAL2>getCaretIndex</LITERAL2>
@@ -557,14 +559,14 @@
 			<LITERAL2>getFocus</LITERAL2>
 			<LITERAL2>setFocus</LITERAL2>
 			<LITERAL2>setSelection</LITERAL2>
-
+			
 			<!-- SharedObject Class-->
 			<LITERAL2>SharedObject</LITERAL2>
 			<LITERAL2>data</LITERAL2>
 			<LITERAL2>flush</LITERAL2>
 			<LITERAL2>getLocal</LITERAL2>
 			<LITERAL2>getSize</LITERAL2>
-
+			
 			<!-- Sound Class -->
 			<LITERAL2>attachSound</LITERAL2>
 			<LITERAL2>getVolume</LITERAL2>
@@ -578,12 +580,12 @@
 			<LITERAL2>onSoundComplete</LITERAL2>
 			<LITERAL2>id3</LITERAL2>
 			<LITERAL2>onID3</LITERAL2>
-
+			
 			<!-- Video Class -->
 			<LITERAL2>Video</LITERAL2>
 			<LITERAL2>deblocking</LITERAL2>
 			<LITERAL2>smoothing</LITERAL2>
-
+			
 			<!--  Stage Class -->
 			<LITERAL2>Stage</LITERAL2>
 			<LITERAL2>align</LITERAL2>
@@ -592,7 +594,7 @@
 			<LITERAL2>showMenu</LITERAL2>
 			<LITERAL2>width</LITERAL2>
 			<LITERAL2>onResize</LITERAL2>
-
+			
 			<!-- TextField Class -->
 			<LITERAL2>getFontList</LITERAL2>
 			<LITERAL2>getNewTextFormat</LITERAL2>
@@ -629,7 +631,7 @@
 			<LITERAL2>TextField</LITERAL2>
 			<LITERAL2>mouseWheelEnabled</LITERAL2>
 			<LITERAL2>replaceText</LITERAL2>
-
+			
 			<!-- StyleSheet Class -->
 			<LITERAL2>StyleSheet</LITERAL2>
 			<LITERAL2>getStyle</LITERAL2>
@@ -637,7 +639,7 @@
 			<LITERAL2>parseCSS</LITERAL2>
 			<LITERAL2>setStyle</LITERAL2>
 			<LITERAL2>styleSheet</LITERAL2>
-
+			
 			<!-- TextFormat Class -->
 			<LITERAL2>TextFormat</LITERAL2>
 			<LITERAL2>getTextExtent</LITERAL2>
@@ -656,7 +658,7 @@
 			<LITERAL2>target</LITERAL2>
 			<LITERAL2>underline</LITERAL2>
 			<LITERAL2>url</LITERAL2>
-
+			
 			<!-- TextSnapshot object -->
 			<LITERAL2>TextSnapshot</LITERAL2>
 			<LITERAL2>findText</LITERAL2>
@@ -667,7 +669,7 @@
 			<LITERAL2>getText</LITERAL2>
 			<LITERAL2>setSelectColor</LITERAL2>
 			<LITERAL2>setSelected</LITERAL2>
-
+			
 			<!-- LoadVars Class-->
 			<LITERAL2>LoadVars</LITERAL2>
 			<LITERAL2>load</LITERAL2>
@@ -676,13 +678,13 @@
 			<LITERAL2>contentType</LITERAL2>
 			<LITERAL2>loaded</LITERAL2>
 			<LITERAL2>addRequestHeader</LITERAL2>
-
+			
 			<!-- LocalConnection Class-->
 			<LITERAL2>LocalConnection</LITERAL2>
 			<LITERAL2>allowDomain</LITERAL2>
 			<LITERAL2>allowInsecureDomain</LITERAL2>
 			<LITERAL2>domain</LITERAL2>
-
+			
 			<!-- XML Class -->
 			<LITERAL2>appendChild</LITERAL2>
 			<LITERAL2>cloneNode</LITERAL2>
@@ -711,7 +713,7 @@
 			<LITERAL2>onClose</LITERAL2>
 			<LITERAL2>onConnect</LITERAL2>
 			<LITERAL2>onXML</LITERAL2>
-
+			
 			<!-- CustomActions Class -->
 			<LITERAL2>CustomActions</LITERAL2>
 			<LITERAL2>onUpdate</LITERAL2>
@@ -719,10 +721,10 @@
 			<LITERAL2>list</LITERAL2>
 			<LITERAL2>install</LITERAL2>
 			<LITERAL2>get</LITERAL2>
-
+			
 			<!-- NetConnection Class -->
 			<LITERAL2>NetConnection</LITERAL2>
-
+			
 			<!-- NetStream Class-->
 			<LITERAL2>NetStream</LITERAL2>
 			<LITERAL2>bufferLength</LITERAL2>
@@ -733,7 +735,7 @@
 			<LITERAL2>seek</LITERAL2>
 			<LITERAL2>setBufferTime</LITERAL2>
 			<LITERAL2>time</LITERAL2>
-
+			
 			<!-- RecordSet Class -->
 			<LITERAL2>DataGlue</LITERAL2>
 			<LITERAL2>bindFormatFunction</LITERAL2>
@@ -764,7 +766,7 @@
 			<LITERAL2>setDeliveryMode</LITERAL2>
 			<LITERAL2>setField</LITERAL2>
 			<LITERAL2>sortItemsBy</LITERAL2>
-
+			
 			<!-- deprecated-->
 			<KEYWORD2>chr</KEYWORD2>
 			<KEYWORD2>mbchr</KEYWORD2>
@@ -773,12 +775,12 @@
 			<KEYWORD2>mbsubstring</KEYWORD2>
 			<KEYWORD2>ord</KEYWORD2>
 			<KEYWORD2>_highquality</KEYWORD2>
-
+			
 			<!-- END-->
-
+			
 			<!--ECMAScript keywords-->
-			<!-- Reserved for future use
-				(some are already used in some Javascript Engines)
+			<!-- Reserved for future use 
+				(some are already used in some Javascript Engines) 
 			-->
 			<KEYWORD1>abstract</KEYWORD1>
 			<KEYWORD3>boolean</KEYWORD3>
@@ -813,6 +815,7 @@
 			<KEYWORD1>protected</KEYWORD1>
 			<KEYWORD1>public</KEYWORD1>
 			<KEYWORD1>dynamic</KEYWORD1>
+			<KEYWORD1>override</KEYWORD1>
 
 			<KEYWORD3>short</KEYWORD3>
 			<KEYWORD1>static</KEYWORD1>
diff --git a/modes/ada.xml b/modes/ada.xml
index 9e35aa1..6e44c17 100644
--- a/modes/ada.xml
+++ b/modes/ada.xml
@@ -1,6 +1,26 @@
 <?xml version="1.0"?>
 <!DOCTYPE MODE SYSTEM "xmode.dtd">
 
+<!--
+
+This is a jedit mode file for Ada programming language.
+Copyright (C) 2012 Peter C. Chapin (pchapin at sf)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+-->
+
 <!-- TODO: Support based literals as numeric literals: 16#FF#
            Support numeric literals with an exponent: 1.0e2, 1e2. -->
 
@@ -17,6 +37,8 @@
 	</PROPS>
 
 	<RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">
+		<!-- SPARK annotation comments. -->
+		<EOL_SPAN TYPE="COMMENT2">--#</EOL_SPAN>
 		<!-- Normal comments. -->
 		<EOL_SPAN TYPE="COMMENT1">--</EOL_SPAN>
 
@@ -48,7 +70,8 @@
 		<SEQ TYPE="OPERATOR">**</SEQ>
 		<SEQ TYPE="OPERATOR">*</SEQ>
 
-        <!-- Predefined Attributes -->
+		<!-- Predefined Attributes -->
+		<!-- From Section K.2 "Language-Defined Attributes" in the Ada Reference Manual. -->
 		<SEQ TYPE="KEYWORD3">'access</SEQ>
 		<SEQ TYPE="KEYWORD3">'address</SEQ>
 		<SEQ TYPE="KEYWORD3">'adjacent</SEQ>
@@ -77,8 +100,10 @@
 		<SEQ TYPE="KEYWORD3">'floor</SEQ>
 		<SEQ TYPE="KEYWORD3">'fore</SEQ>
 		<SEQ TYPE="KEYWORD3">'fraction</SEQ>
+		<SEQ TYPE="KEYWORD3">'has_same_storage</SEQ>
 		<SEQ TYPE="KEYWORD3">'identity</SEQ>
 		<SEQ TYPE="KEYWORD3">'image</SEQ>
+		<SEQ TYPE="KEYWORD3">'class'input</SEQ>
 		<SEQ TYPE="KEYWORD3">'input</SEQ>
 		<SEQ TYPE="KEYWORD3">'last</SEQ>
 		<SEQ TYPE="KEYWORD3">'last_bit</SEQ>
@@ -93,23 +118,30 @@
         <SEQ TYPE="KEYWORD3">'machine_rounding</SEQ>
 		<SEQ TYPE="KEYWORD3">'machine_rounds</SEQ>
 		<SEQ TYPE="KEYWORD3">'max</SEQ>
+		<SEQ TYPE="KEYWORD3">'max_alignment_for_allocation</SEQ>
 		<SEQ TYPE="KEYWORD3">'max_size_in_storage_elements</SEQ>
 		<SEQ TYPE="KEYWORD3">'min</SEQ>
+		<SEQ TYPE="KEYWORD3">'mod</SEQ>
 		<SEQ TYPE="KEYWORD3">'model</SEQ>
 		<SEQ TYPE="KEYWORD3">'model_emin</SEQ>
 		<SEQ TYPE="KEYWORD3">'model_epsilon</SEQ>
 		<SEQ TYPE="KEYWORD3">'model_mantissa</SEQ>
 		<SEQ TYPE="KEYWORD3">'model_small</SEQ>
 		<SEQ TYPE="KEYWORD3">'modulus</SEQ>
+		<SEQ TYPE="KEYWORD3">'old</SEQ>
+		<SEQ TYPE="KEYWORD3">'class'output</SEQ>
 		<SEQ TYPE="KEYWORD3">'output</SEQ>
+		<SEQ TYPE="KEYWORD3">'overlaps_storage</SEQ>
 		<SEQ TYPE="KEYWORD3">'partition_id</SEQ>
 		<SEQ TYPE="KEYWORD3">'pos</SEQ>
 		<SEQ TYPE="KEYWORD3">'position</SEQ>
-        <SEQ TYPE="KEYWORD3">'priority</SEQ>
 		<SEQ TYPE="KEYWORD3">'pred</SEQ>
+		<SEQ TYPE="KEYWORD3">'priority</SEQ>
 		<SEQ TYPE="KEYWORD3">'range</SEQ>
+		<SEQ TYPE="KEYWORD3">'class'read</SEQ>
 		<SEQ TYPE="KEYWORD3">'read</SEQ>
 		<SEQ TYPE="KEYWORD3">'remainder</SEQ>
+		<SEQ TYPE="KEYWORD3">'result</SEQ>
 		<SEQ TYPE="KEYWORD3">'round</SEQ>
 		<SEQ TYPE="KEYWORD3">'rounding</SEQ>
 		<SEQ TYPE="KEYWORD3">'safe_first</SEQ>
@@ -139,60 +171,65 @@
         <SEQ TYPE="KEYWORD3">'wide_wide_image</SEQ>
         <SEQ TYPE="KEYWORD3">'wide_wide_value</SEQ>
         <SEQ TYPE="KEYWORD3">'wide_wide_width</SEQ>
+		<SEQ TYPE="KEYWORD3">'class'write</SEQ>
 		<SEQ TYPE="KEYWORD3">'write</SEQ>
         
         <!-- Predefined Pragmas -->
+        <!-- From Annex L of the Ada Reference Manual. -->
         <!-- One problem with this definition is that it requires exactly one
              space between the pragma keyword and the name of the pragma. -->
+        <SEQ TYPE="KEYWORD3">pragma all_calls_remote</SEQ>
         <SEQ TYPE="KEYWORD3">pragma assert</SEQ>
         <SEQ TYPE="KEYWORD3">pragma assertion_policy</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma asynchronous</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma atomic</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma atomic_components</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma attach_handler</SEQ>
         <SEQ TYPE="KEYWORD3">pragma controlled</SEQ>
         <SEQ TYPE="KEYWORD3">pragma convention</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma cpu</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma default_storage_pool</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma detect_blocking</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma discard_names</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma dispatching_domain</SEQ>
         <SEQ TYPE="KEYWORD3">pragma elaborate</SEQ>
         <SEQ TYPE="KEYWORD3">pragma elaborate_all</SEQ>
         <SEQ TYPE="KEYWORD3">pragma elaborate_body</SEQ>
         <SEQ TYPE="KEYWORD3">pragma export</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma inport</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma import</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma independent</SEQ>
+        <SEQ TYPE="KEYWORD3">pragam independent_components</SEQ>
         <SEQ TYPE="KEYWORD3">pragma inline</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma inspection_point</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma interrupt_handler</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma interrupt_priority</SEQ>
         <SEQ TYPE="KEYWORD3">pragma linker_options</SEQ>
         <SEQ TYPE="KEYWORD3">pragma list</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma locking_policy</SEQ>
         <SEQ TYPE="KEYWORD3">pragma no_return</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma normalize_scalars</SEQ>
         <SEQ TYPE="KEYWORD3">pragma optimize</SEQ>
         <SEQ TYPE="KEYWORD3">pragma pack</SEQ>
         <SEQ TYPE="KEYWORD3">pragma page</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma preelaborate</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma preelaborate_initialization</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma pure</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma restrictions</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma storage_size</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma suppress</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma unchecked_union</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma unsuppress</SEQ>
-        
-        <!-- The following pragmas are defined in the annexes -->
-        <SEQ TYPE="KEYWORD3">pragma all_calls_remote</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma asynchronous</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma atomic</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma atomic_components</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma attach_handler</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma detect_blocking</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma discard_names</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma inspection_point</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma interrupt_handler</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma interrupt_priority</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma locking_policy</SEQ>
-        <SEQ TYPE="KEYWORD3">pragma normalize_scalars</SEQ>
         <SEQ TYPE="KEYWORD3">pragma partition_elaboration_policy</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma preelaborate_initialization</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma preelaborate</SEQ>
         <SEQ TYPE="KEYWORD3">pragma priority</SEQ>
         <SEQ TYPE="KEYWORD3">pragma priority_specific_dispatching</SEQ>
         <SEQ TYPE="KEYWORD3">pragma profile</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma pure</SEQ>
         <SEQ TYPE="KEYWORD3">pragma queuing_policy</SEQ>
         <SEQ TYPE="KEYWORD3">pragma relative_deadline</SEQ>
         <SEQ TYPE="KEYWORD3">pragma remote_call_interface</SEQ>
         <SEQ TYPE="KEYWORD3">pragma remote_types</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma restrictions</SEQ>
         <SEQ TYPE="KEYWORD3">pragma reviewable</SEQ>
         <SEQ TYPE="KEYWORD3">pragma shared_passive</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma storage_size</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma suppress</SEQ>
         <SEQ TYPE="KEYWORD3">pragma task_dispatching_policy</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma unchecked_union</SEQ>
+        <SEQ TYPE="KEYWORD3">pragma unsuppress</SEQ>
         <SEQ TYPE="KEYWORD3">pragma volatile</SEQ>
         <SEQ TYPE="KEYWORD3">pragma volatile_components</SEQ>
 
@@ -265,6 +302,7 @@
             <KEYWORD2>reverse</KEYWORD2>
 			<KEYWORD2>select</KEYWORD2>
 			<KEYWORD2>separate</KEYWORD2>
+			<KEYWORD2>some</KEYWORD2>
 			<KEYWORD2>subtype</KEYWORD2>
             <KEYWORD2>synchronized</KEYWORD2>
 			<KEYWORD2>tagged</KEYWORD2>
@@ -279,15 +317,11 @@
 			<KEYWORD2>with</KEYWORD2>
 			<KEYWORD2>xor</KEYWORD2>
 
-			<!-- Attributes (see above) -->
-            
-            <!-- Pragmas (see above) -->
-
 			<!-- Literals -->
 			<LITERAL1>false</LITERAL1>
 			<LITERAL1>true</LITERAL1>
             
-			<!-- Common Pre-defined Types -->
+			<!-- Pre-defined types (in package Standard). -->
 			<LITERAL2>address</LITERAL2>
 			<LITERAL2>boolean</LITERAL2>
 			<LITERAL2>character</LITERAL2>
@@ -303,6 +337,13 @@
             <LITERAL2>wide_wide_character</LITERAL2>
             <LITERAL2>wide_string</LITERAL2>
             <LITERAL2>wide_wide_string</LITERAL2>
+
+      <!-- Pre-defined exceptions (in package Standard). -->
+      <LITERAL2>constraint_error</LITERAL2>
+      <LITERAL2>program_error</LITERAL2>
+      <LITERAL2>storage_error</LITERAL2>
+      <LITERAL2>tasking_error</LITERAL2>
+
 		</KEYWORDS>
 	</RULES>
 </MODE>
diff --git a/modes/avro.xml b/modes/avro.xml
new file mode 100644
index 0000000..cc26aea
--- /dev/null
+++ b/modes/avro.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0"?>
+<!-- http://avro.apache.org/ -->
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+<MODE>
+	<PROPS>
+		<PROPERTY NAME="commentStart" VALUE="/*" />
+		<PROPERTY NAME="commentEnd" VALUE="*/" />
+		<PROPERTY NAME="lineComment" VALUE="//" />
+		<PROPERTY NAME="wordBreakChars" VALUE=",=;*" />
+
+		<!-- Auto indent -->
+		<PROPERTY NAME="indentOpenBrackets" VALUE="{" />
+		<PROPERTY NAME="indentCloseBrackets" VALUE="}" />
+		<PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
+		<PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
+	</PROPS>
+
+	<RULES IGNORE_CASE="FALSE"
+	       HIGHLIGHT_DIGITS="TRUE"
+	       DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">
+
+		<!-- Silly comment -->
+		<SEQ TYPE="COMMENT1">/**/</SEQ>
+
+		<!-- C/C++ style comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN>/*</BEGIN>
+			<END>*/</END>
+		</SPAN>
+
+		<EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
+
+		<!-- Strings -->
+		<SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+
+		<!-- Annotations -->
+		<MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
+
+		<!-- Functions -->
+		<MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
+		<SEQ TYPE="OPERATOR">)</SEQ>
+
+		<!-- Operators / others. -->
+		<SEQ TYPE="OPERATOR">)</SEQ>
+		<SEQ TYPE="OPERATOR">(</SEQ>
+		<SEQ TYPE="OPERATOR">}</SEQ>
+		<SEQ TYPE="OPERATOR">{</SEQ>
+		<SEQ TYPE="OPERATOR">[</SEQ>
+		<SEQ TYPE="OPERATOR">]</SEQ>
+		<SEQ TYPE="OPERATOR"><</SEQ>
+		<SEQ TYPE="OPERATOR">></SEQ>
+
+		<!-- Reserved word escaping. -->
+		<SPAN TYPE="NULL" NO_LINE_BREAK="TRUE">
+			<BEGIN>`</BEGIN>
+			<END>`</END>
+		</SPAN>
+
+		<!-- Import statements. -->
+		<SEQ TYPE="KEYWORD2">import idl</SEQ>
+		<SEQ TYPE="KEYWORD2">import protocol</SEQ>
+		<SEQ TYPE="KEYWORD2">import schema</SEQ>
+
+		<KEYWORDS>
+			<KEYWORD2>throws</KEYWORD2>
+			<KEYWORD2>oneway</KEYWORD2>
+
+			<!-- Types. -->
+			<KEYWORD3>array</KEYWORD3>
+			<KEYWORD3>boolean</KEYWORD3>
+			<KEYWORD3>bytes</KEYWORD3>
+			<KEYWORD3>double</KEYWORD3>
+			<KEYWORD3>enum</KEYWORD3>
+			<KEYWORD3>error</KEYWORD3>
+			<KEYWORD3>fixed</KEYWORD3>
+			<KEYWORD3>float</KEYWORD3>
+			<KEYWORD3>int</KEYWORD3>
+			<KEYWORD3>long</KEYWORD3>
+			<KEYWORD2>map</KEYWORD2>
+			<KEYWORD3>protocol</KEYWORD3>
+			<KEYWORD3>record</KEYWORD3>
+			<KEYWORD3>string</KEYWORD3>
+			<KEYWORD3>union</KEYWORD3>
+			<KEYWORD3>void</KEYWORD3>
+
+			<!-- Constants. -->
+			<KEYWORD4>null</KEYWORD4>
+			<KEYWORD4>true</KEYWORD4>
+			<KEYWORD4>false</KEYWORD4>
+		</KEYWORDS>
+	</RULES>
+
+</MODE>
+
diff --git a/modes/catalog b/modes/catalog
index 980f9a6..5b897a1 100644
--- a/modes/catalog
+++ b/modes/catalog
@@ -16,8 +16,8 @@
 <MODE NAME="ada95"		FILE="ada95.xml" />
 
 <MODE NAME="ant"		FILE="ant.xml"
-				FILE_NAME_GLOB="*.xml"
-				FIRST_LINE_GLOB="<project*>" />
+				FILE_NAME_GLOB="*build.xml"
+				FIRST_LINE_GLOB="*<project*" />
 
 <MODE NAME="antlr"		FILE="antlr.xml"
 				FILE_NAME_GLOB="*.g" />
@@ -59,6 +59,9 @@
 <MODE NAME="assembly-x86"	FILE="assembly-x86.xml"
 				FILE_NAME_GLOB="*.asm" />
 
+<MODE NAME="avro"         FILE="avro.xml"
+      FILE_NAME_GLOB="*.avdl" />
+
 <MODE NAME="awk"		FILE="awk.xml"
 				FILE_NAME_GLOB="*.awk"
 				FIRST_LINE_GLOB="#!*awk*" />
@@ -106,7 +109,7 @@
 				FILE_NAME_GLOB="CMakeLists.txt"/>
 
 <MODE NAME="cobol"		FILE="cobol.xml"
-				FILE_NAME_GLOB="*.cbl" />
+				FILE_NAME_GLOB="*.{cbl,cob}" />
 
 <MODE NAME="coffeescript"	FILE="coffeescript.xml"
 				FILE_NAME_GLOB="*.coffee" />
@@ -135,6 +138,9 @@
 <MODE NAME="d"			FILE="d.xml"
 				FILE_NAME_GLOB="*.d" />
 
+<MODE NAME="dart"			FILE="dart.xml"
+				FILE_NAME_GLOB="*.dart" />
+
 <MODE NAME="django"		FILE="django.xml"/>
 
 <MODE NAME="dot"		FILE="dot.xml"
@@ -168,7 +174,10 @@
 				FILE_NAME_GLOB="*.f" />
 
 <MODE NAME="fortran"		FILE="fortran.xml"
-				FILE_NAME_GLOB="*.{for,fort,f77,f90}" />
+				FILE_NAME_GLOB="*.{for,fort,f77}" />
+
+<MODE NAME="fortran90"		FILE="fortran90.xml"
+				FILE_NAME_GLOB="*.{f90,f95,f03}" />
 
 <MODE NAME="foxpro"		FILE="foxpro.xml"
 				FILE_NAME_GLOB="*.prg" />
@@ -295,6 +304,9 @@
 <MODE NAME="literate-haskell"	FILE="literate-haskell.xml"
 				FILE_NAME_GLOB="*.lhs" />
 
+<MODE NAME="logs"		FILE="logs.xml"
+				FILE_NAME_GLOB="*.log" />
+
 <MODE NAME="logtalk"		FILE="logtalk.xml"
 				FILE_NAME_GLOB="*.lgt" />
 
@@ -318,6 +330,13 @@
 <MODE NAME="maven"		FILE="maven.xml"
 				FILE_NAME_GLOB="pom.xml"/>
 
+<MODE NAME="metapost"
+         FILE="mpost.xml"
+         FILE_NAME_GLOB="*.mp"/>
+
+<MODE NAME="mxml"		FILE="mxml.xml"
+				FILE_NAME_GLOB="*.mxml" />
+
 <MODE NAME="ml"			FILE="ml.xml"
 				FILE_NAME_GLOB="*.{sml,ml}" />
 
@@ -456,12 +475,19 @@
 <MODE NAME="rhtml"		FILE="rhtml.xml"
 				FILE_NAME_GLOB="*.{rhtml,html.erb}" />
 
+<MODE NAME="roff"
+        FILE="roff.xml"
+        FILE_NAME_GLOB="*.{1,2,3,4,5,6,7,8,9,me,ms,mm,mom,tmac}" />
+
 <MODE NAME="rpm-spec"		FILE="rpmspec.xml"
 				FILE_NAME_GLOB="*.spec" />
 
 <MODE NAME="rtf"		FILE="rtf.xml"
 				FILE_NAME_GLOB="*.rtf" />
 
+<MODE NAME="rakefile"   FILE="ruby.xml"
+				FILE_NAME_GLOB="*Rakefile" />
+
 <MODE NAME="ruby"		FILE="ruby.xml"
 				FILE_NAME_GLOB="*.{rb,rbw}"
 				FIRST_LINE_GLOB="#!*/*ruby*" />
@@ -478,6 +504,9 @@
 <MODE NAME="sas"		FILE="sas.xml"
 				FILE_NAME_GLOB="*.sas" />
 
+<MODE NAME="scala"  	FILE="scala.xml"
+    			FILE_NAME_GLOB="*.scala" />
+
 <MODE NAME="scheme"		FILE="scheme.xml"
 				FILE_NAME_GLOB="*.scm" />
 
@@ -571,14 +600,14 @@
 
 <MODE NAME="uscript"		FILE="uscript.xml"
 				FILE_NAME_GLOB="*.uc" />
-				
+
 <MODE NAME="vala"		FILE="vala.xml"
 				FILE_NAME_GLOB="*.vala" />
 
 <MODE NAME="vbscript"		FILE="vbscript.xml"
 				FILE_NAME_GLOB="*.{vbs,bas,cls}" />
 
-<MODE NAME="velocity"		FILE="velocity.xml"
+<MODE NAME="velocity"		FILE="velocity_pure.xml"
 				FILE_NAME_GLOB="*.vm" />
 
 <MODE NAME="verilog"		FILE="verilog.xml"
diff --git a/modes/cobol.xml b/modes/cobol.xml
index 2bf0e38..1fe9fab 100644
--- a/modes/cobol.xml
+++ b/modes/cobol.xml
@@ -1,1001 +1,1057 @@
 <?xml version="1.0"?>
+<!DOCTYPE MODE SYSTEM "xmode.dtd"><!-- COBOL mode, by Matthias M. Schneider, edit by M. Roehner
+
+ Change   Utilities - GlobalOptions... :jEdit:SyntaxHighlighting - COMMENT4:bgColor
+ (or insert in  properties:
+  view.style.comment4=color\:\#cc6600 bgColor\:\#f0f0f0
+ )
+ for "downlighting" comment columns
+
+Feature (bug?-):
+ - If a line is longer then 72 characters, only the commentary columns are downlighted.
+ - Can be disabled by deleting <IMPORT DELEGATE="CT2"/>.
+-->
 
-<!DOCTYPE MODE SYSTEM "xmode.dtd">
 
-<!-- COBOL mode, by Matthias M. Schneider -->
 <MODE>
-	<PROPS>
-		<PROPERTY NAME="contextInsensitive" VALUE="true"/>
-	</PROPS>
-	<RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">
-		<EOL_SPAN_REGEXP TYPE="COMMENT1" AT_LINE_START="TRUE">.{6}(\*|/)</EOL_SPAN_REGEXP>
-
-		<SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
-			<BEGIN>"</BEGIN>
-			<END>"</END>
-		</SPAN>
-		<SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
-			<BEGIN>'</BEGIN>
-			<END>'</END>
-		</SPAN>
-
-		<SEQ TYPE="OPERATOR"> = </SEQ>
-		<SEQ TYPE="OPERATOR"> >= </SEQ>
-		<SEQ TYPE="OPERATOR"> <= </SEQ>
-		<SEQ TYPE="OPERATOR"> + </SEQ>
-		<SEQ TYPE="OPERATOR"> - </SEQ>
-		<SEQ TYPE="OPERATOR"> / </SEQ>
-		<SEQ TYPE="OPERATOR"> * </SEQ>
-		<SEQ TYPE="OPERATOR"> ** </SEQ>
-		<SEQ TYPE="OPERATOR"> > </SEQ>
-		<SEQ TYPE="OPERATOR"> < </SEQ>
-		<SEQ TYPE="OPERATOR"> % </SEQ>
-		<SEQ TYPE="OPERATOR"> & </SEQ>
-		<SEQ TYPE="OPERATOR"> | </SEQ>
-		<SEQ TYPE="OPERATOR"> ^ </SEQ>
-		<SEQ TYPE="OPERATOR"> ~ </SEQ>
-
-		<SPAN TYPE="COMMENT2" NO_LINE_BREAK="FALSE">
-			<BEGIN>EXEC SQL</BEGIN>
-			<END>END-EXEC</END>
-		</SPAN>
-
-		<KEYWORDS>
-			<KEYWORD1>ACCEPT</KEYWORD1>
-			<KEYWORD1>ACCESS</KEYWORD1>
-			<KEYWORD1>ACTUAL</KEYWORD1>
-			<KEYWORD1>ADD</KEYWORD1>
-			<KEYWORD1>ADDRESS</KEYWORD1>
-			<KEYWORD1>ADVANCING</KEYWORD1>
-			<KEYWORD1>AFTER</KEYWORD1>
-			<KEYWORD1>ALL</KEYWORD1>
-			<KEYWORD1>ALPHABET</KEYWORD1>
-			<KEYWORD1>ALPHABETIC</KEYWORD1>
-			<KEYWORD1>ALPHABETIC-LOWER</KEYWORD1>
-			<KEYWORD1>ALPHABETIC-UPPER</KEYWORD1>
-			<KEYWORD1>ALPHANUMERIC</KEYWORD1>
-			<KEYWORD1>ALPHANUMERIC-EDITED</KEYWORD1>
-			<KEYWORD1>ALSO</KEYWORD1>
-			<KEYWORD1>ALTER</KEYWORD1>
-			<KEYWORD1>ALTERNATE</KEYWORD1>
-			<KEYWORD1>AND</KEYWORD1>
-			<KEYWORD1>ANY</KEYWORD1>
-			<KEYWORD1>API</KEYWORD1>
-			<KEYWORD1>APPLY</KEYWORD1>
-			<KEYWORD1>ARE</KEYWORD1>
-			<KEYWORD1>AREA</KEYWORD1>
-			<KEYWORD1>AREAS</KEYWORD1>
-			<KEYWORD1>ASCENDING</KEYWORD1>
-			<KEYWORD1>ASSIGN</KEYWORD1>
-			<KEYWORD1>AT</KEYWORD1>
-			<KEYWORD1>AUTHOR</KEYWORD1>
-			<KEYWORD1>AUTO</KEYWORD1>
-			<KEYWORD1>AUTO-SKIP</KEYWORD1>
-			<KEYWORD1>AUTOMATIC</KEYWORD1>
-
-			<KEYWORD1>BACKGROUND-COLOR</KEYWORD1>
-			<KEYWORD1>BACKGROUND-COLOUR</KEYWORD1>
-			<KEYWORD1>BACKWARD</KEYWORD1>
-			<KEYWORD1>BASIS</KEYWORD1>
-			<KEYWORD1>BEEP</KEYWORD1>
-			<KEYWORD1>BEFORE</KEYWORD1>
-			<KEYWORD1>BEGINNING</KEYWORD1>
-			<KEYWORD1>BELL</KEYWORD1>
-			<KEYWORD1>BINARY</KEYWORD1>
-			<KEYWORD1>BLANK</KEYWORD1>
-			<KEYWORD1>BLINK</KEYWORD1>
-			<KEYWORD1>BLOCK</KEYWORD1>
-			<KEYWORD1>BOTTOM</KEYWORD1>
-			<KEYWORD1>BY</KEYWORD1>
-
-			<KEYWORD1>C01</KEYWORD1>
-			<KEYWORD1>C02</KEYWORD1>
-			<KEYWORD1>C03</KEYWORD1>
-			<KEYWORD1>C04</KEYWORD1>
-			<KEYWORD1>C05</KEYWORD1>
-			<KEYWORD1>C06</KEYWORD1>
-			<KEYWORD1>C07</KEYWORD1>
-			<KEYWORD1>C08</KEYWORD1>
-			<KEYWORD1>C09</KEYWORD1>
-			<KEYWORD1>C10</KEYWORD1>
-			<KEYWORD1>C11</KEYWORD1>
-			<KEYWORD1>C12</KEYWORD1>
-			<KEYWORD1>CALL</KEYWORD1>
-			<KEYWORD1>CALL-CONVENTION</KEYWORD1>
-			<KEYWORD1>CANCEL</KEYWORD1>
-			<KEYWORD1>CBL</KEYWORD1>
-			<KEYWORD1>CD</KEYWORD1>
-			<KEYWORD1>CF</KEYWORD1>
-			<KEYWORD1>CH</KEYWORD1>
-			<KEYWORD1>CHAIN</KEYWORD1>
-			<KEYWORD1>CHAINING</KEYWORD1>
-			<KEYWORD1>CHANGED</KEYWORD1>
-			<KEYWORD1>CHARACTER</KEYWORD1>
-			<KEYWORD1>CHARACTERS</KEYWORD1>
-			<KEYWORD1>CLASS</KEYWORD1>
-			<KEYWORD1>CLOCK-UNITS</KEYWORD1>
-			<KEYWORD1>CLOSE</KEYWORD1>
-			<KEYWORD1>COBOL</KEYWORD1>
-			<KEYWORD1>CODE</KEYWORD1>
-			<KEYWORD1>CODE-SET</KEYWORD1>
-			<KEYWORD1>COL</KEYWORD1>
-			<KEYWORD1>COLLATING</KEYWORD1>
-			<KEYWORD1>COLUMN</KEYWORD1>
-			<KEYWORD1>COM-REG</KEYWORD1>
-			<KEYWORD1>COMMA</KEYWORD1>
-			<KEYWORD1>COMMIT</KEYWORD1>
-			<KEYWORD1>COMMON</KEYWORD1>
-			<KEYWORD1>COMMUNICATION</KEYWORD1>
-			<KEYWORD1>COMP</KEYWORD1>
-			<KEYWORD1>COMP-0</KEYWORD1>
-			<KEYWORD1>COMP-1</KEYWORD1>
-			<KEYWORD1>COMP-2</KEYWORD1>
-			<KEYWORD1>COMP-3</KEYWORD1>
-			<KEYWORD1>COMP-4</KEYWORD1>
-			<KEYWORD1>COMP-5</KEYWORD1>
-			<KEYWORD1>COMP-6</KEYWORD1>
-			<KEYWORD1>COMP-X</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL-0</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL-1</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL-2</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL-3</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL-4</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL-5</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL-6</KEYWORD1>
-			<KEYWORD1>COMPUTATIONAL-X</KEYWORD1>
-			<KEYWORD1>COMPUTE</KEYWORD1>
-			<KEYWORD1>CONFIGURATION</KEYWORD1>
-			<KEYWORD1>CONSOLE</KEYWORD1>
-			<KEYWORD1>CONTAINS</KEYWORD1>
-			<KEYWORD1>CONTENT</KEYWORD1>
-			<KEYWORD1>CONTINUE</KEYWORD1>
-			<KEYWORD1>CONTROL</KEYWORD1>
-			<KEYWORD1>CONTROLS</KEYWORD1>
-			<KEYWORD1>CONVERTING</KEYWORD1>
-			<KEYWORD1>COPY</KEYWORD1>
-			<KEYWORD1>CORE-INDEX</KEYWORD1>
-			<KEYWORD1>CORR</KEYWORD1>
-			<KEYWORD1>CORRESPONDING</KEYWORD1>
-			<KEYWORD1>COUNT</KEYWORD1>
-			<KEYWORD1>CRT</KEYWORD1>
-			<KEYWORD1>CRT-UNDER</KEYWORD1>
-			<KEYWORD1>CURRENCY</KEYWORD1>
-			<KEYWORD1>CURRENT-DATE</KEYWORD1>
-			<KEYWORD1>CURSOR</KEYWORD1>
-			<KEYWORD1>CYCLE</KEYWORD1>
-			<KEYWORD1>CYL-INDEX</KEYWORD1>
-			<KEYWORD1>CYL-OVERFLOW</KEYWORD1>
-
-			<KEYWORD1>DATA</KEYWORD1>
-			<KEYWORD1>DATE</KEYWORD1>
-			<KEYWORD1>DATE-COMPILED</KEYWORD1>
-			<KEYWORD1>DATE-WRITTEN</KEYWORD1>
-			<KEYWORD1>DAY</KEYWORD1>
-			<KEYWORD1>DAY-OF-WEEK</KEYWORD1>
-			<KEYWORD1>DBCS</KEYWORD1>
-			<KEYWORD1>DE</KEYWORD1>
-			<KEYWORD1>DEBUG</KEYWORD1>
-			<KEYWORD1>DEBUG-CONTENTS</KEYWORD1>
-			<KEYWORD1>DEBUG-ITEM</KEYWORD1>
-			<KEYWORD1>DEBUG-LINE</KEYWORD1>
-			<KEYWORD1>DEBUG-NAME</KEYWORD1>
-			<KEYWORD1>DEBUG-SUB-1</KEYWORD1>
-			<KEYWORD1>DEBUG-SUB-2</KEYWORD1>
-			<KEYWORD1>DEBUG-SUB-3</KEYWORD1>
-			<KEYWORD1>DEBUGGING</KEYWORD1>
-			<KEYWORD1>DECIMAL-POINT</KEYWORD1>
-			<KEYWORD1>DECLARATIVES</KEYWORD1>
-			<KEYWORD1>DELETE</KEYWORD1>
-			<KEYWORD1>DELIMITED</KEYWORD1>
-			<KEYWORD1>DELIMITER</KEYWORD1>
-			<KEYWORD1>DEPENDING</KEYWORD1>
-			<KEYWORD1>DESCENDING</KEYWORD1>
-			<KEYWORD1>DESTINATION</KEYWORD1>
-			<KEYWORD1>DETAIL</KEYWORD1>
-			<KEYWORD1>DISABLE</KEYWORD1>
-			<KEYWORD1>DISK</KEYWORD1>
-			<KEYWORD1>DISP</KEYWORD1>
-			<KEYWORD1>DISPLAY</KEYWORD1>
-			<KEYWORD1>DISPLAY-1</KEYWORD1>
-			<KEYWORD1>DISPLAY-ST</KEYWORD1>
-			<KEYWORD1>DIVIDE</KEYWORD1>
-			<KEYWORD1>DIVISION</KEYWORD1>
-			<KEYWORD1>DOWN</KEYWORD1>
-			<KEYWORD1>DUPLICATES</KEYWORD1>
-			<KEYWORD1>DYNAMIC</KEYWORD1>
-
-			<KEYWORD1>ECHO</KEYWORD1>
-			<KEYWORD1>EGCS</KEYWORD1>
-			<KEYWORD1>EGI</KEYWORD1>
-			<KEYWORD1>EJECT</KEYWORD1>
-			<KEYWORD1>ELSE</KEYWORD1>
-			<KEYWORD1>EMI</KEYWORD1>
-			<KEYWORD1>EMPTY-CHECK</KEYWORD1>
-			<KEYWORD1>ENABLE</KEYWORD1>
-			<KEYWORD1>END</KEYWORD1>
-			<KEYWORD1>END-ACCEPT</KEYWORD1>
-			<KEYWORD1>END-ADD</KEYWORD1>
-			<KEYWORD1>END-CALL</KEYWORD1>
-			<KEYWORD1>END-CHAIN</KEYWORD1>
-			<KEYWORD1>END-COMPUTE</KEYWORD1>
-			<KEYWORD1>END-DELETE</KEYWORD1>
-			<KEYWORD1>END-DISPLAY</KEYWORD1>
-			<KEYWORD1>END-DIVIDE</KEYWORD1>
-			<KEYWORD1>END-EVALUATE</KEYWORD1>
-			<KEYWORD1>END-IF</KEYWORD1>
-			<KEYWORD1>END-INVOKE</KEYWORD1>
-			<KEYWORD1>END-MULTIPLY</KEYWORD1>
-			<KEYWORD1>END-OF-PAGE</KEYWORD1>
-			<KEYWORD1>END-PERFORM</KEYWORD1>
-			<KEYWORD1>END-READ</KEYWORD1>
-			<KEYWORD1>END-RECEIVE</KEYWORD1>
-			<KEYWORD1>END-RETURN</KEYWORD1>
-			<KEYWORD1>END-REWRITE</KEYWORD1>
-			<KEYWORD1>END-SEARCH</KEYWORD1>
-			<KEYWORD1>END-START</KEYWORD1>
-			<KEYWORD1>END-STRING</KEYWORD1>
-			<KEYWORD1>END-SUBTRACT</KEYWORD1>
-			<KEYWORD1>END-UNSTRING</KEYWORD1>
-			<KEYWORD1>END-WRITE</KEYWORD1>
-			<KEYWORD1>ENDING</KEYWORD1>
-			<KEYWORD1>ENTER</KEYWORD1>
-			<KEYWORD1>ENTRY</KEYWORD1>
-			<KEYWORD1>ENVIRONMENT</KEYWORD1>
-			<KEYWORD1>EOL</KEYWORD1>
-			<KEYWORD1>EOP</KEYWORD1>
-			<KEYWORD1>EOS</KEYWORD1>
-			<KEYWORD1>EQUAL</KEYWORD1>
-			<KEYWORD1>EQUALS</KEYWORD1>
-			<KEYWORD1>ERASE</KEYWORD1>
-			<KEYWORD1>ERROR</KEYWORD1>
-			<KEYWORD1>ESCAPE</KEYWORD1>
-			<KEYWORD1>ESI</KEYWORD1>
-			<KEYWORD1>EVALUATE</KEYWORD1>
-			<KEYWORD1>EVERY</KEYWORD1>
-			<KEYWORD1>EXAMINE</KEYWORD1>
-			<KEYWORD1>EXCEEDS</KEYWORD1>
-			<KEYWORD1>EXCEPTION</KEYWORD1>
-			<KEYWORD1>EXCESS-3</KEYWORD1>
-			<KEYWORD1>EXCLUSIVE</KEYWORD1>
-			<KEYWORD1>EXEC</KEYWORD1>
-			<KEYWORD1>EXECUTE</KEYWORD1>
-			<KEYWORD1>EXHIBIT</KEYWORD1>
-			<KEYWORD1>EXIT</KEYWORD1>
-			<KEYWORD1>EXTEND</KEYWORD1>
-			<KEYWORD1>EXTENDED-SEARCH</KEYWORD1>
-			<KEYWORD1>EXTERNAL</KEYWORD1>
-
-			<KEYWORD1>FACTORY</KEYWORD1>
-			<KEYWORD1>FALSE</KEYWORD1>
-			<KEYWORD1>FD</KEYWORD1>
-			<KEYWORD1>FH-FCD</KEYWORD1>
-			<KEYWORD1>FH-KEYDEF</KEYWORD1>
-			<KEYWORD1>FILE</KEYWORD1>
-			<KEYWORD1>FILE-CONTROL</KEYWORD1>
-			<KEYWORD1>FILE-ID</KEYWORD1>
-			<KEYWORD1>FILE-LIMIT</KEYWORD1>
-			<KEYWORD1>FILE-LIMITS</KEYWORD1>
-			<KEYWORD1>FILLER</KEYWORD1>
-			<KEYWORD1>FINAL</KEYWORD1>
-			<KEYWORD1>FIRST</KEYWORD1>
-			<KEYWORD1>FIXED</KEYWORD1>
-			<KEYWORD1>FOOTING</KEYWORD1>
-			<KEYWORD1>FOR</KEYWORD1>
-			<KEYWORD1>FOREGROUND-COLOR</KEYWORD1>
-			<KEYWORD1>FOREGROUND-COLOUR</KEYWORD1>
-			<KEYWORD1>FROM</KEYWORD1>
-			<KEYWORD1>FULL</KEYWORD1>
-			<KEYWORD1>FUNCTION</KEYWORD1>
-
-			<KEYWORD1>GENERATE</KEYWORD1>
-			<KEYWORD1>GIVING</KEYWORD1>
-			<KEYWORD1>GLOBAL</KEYWORD1>
-			<KEYWORD1>GO</KEYWORD1>
-			<KEYWORD1>GOBACK</KEYWORD1>
-			<KEYWORD1>GREATER</KEYWORD1>
-			<KEYWORD1>GRID</KEYWORD1>
-			<KEYWORD1>GROUP</KEYWORD1>
-
-			<KEYWORD1>HEADING</KEYWORD1>
-			<KEYWORD1>HIGH</KEYWORD1>
-			<KEYWORD1>HIGH-VALUE</KEYWORD1>
-			<KEYWORD1>HIGH-VALUES</KEYWORD1>
-			<KEYWORD1>HIGHLIGHT</KEYWORD1>
-
-			<KEYWORD1>I-O</KEYWORD1>
-			<KEYWORD1>I-O-CONTROL</KEYWORD1>
-			<KEYWORD1>ID</KEYWORD1>
-			<KEYWORD1>IDENTIFICATION</KEYWORD1>
-			<KEYWORD1>IF</KEYWORD1>
-			<KEYWORD1>IGNORE</KEYWORD1>
-			<KEYWORD1>IN</KEYWORD1>
-			<KEYWORD1>INDEX</KEYWORD1>
-			<KEYWORD1>INDEXED</KEYWORD1>
-			<KEYWORD1>INDICATE</KEYWORD1>
-			<KEYWORD1>INHERITING</KEYWORD1>
-			<KEYWORD1>INITIAL</KEYWORD1>
-			<KEYWORD1>INITIALIZE</KEYWORD1>
-			<KEYWORD1>INITIATE</KEYWORD1>
-			<KEYWORD1>INPUT</KEYWORD1>
-			<KEYWORD1>INPUT-OUTPUT</KEYWORD1>
-			<KEYWORD1>INSERT</KEYWORD1>
-			<KEYWORD1>INSPECT</KEYWORD1>
-			<KEYWORD1>INSTALLATION</KEYWORD1>
-			<KEYWORD1>INTO</KEYWORD1>
-			<KEYWORD1>INVALID</KEYWORD1>
-			<KEYWORD1>INVOKE</KEYWORD1>
-			<KEYWORD1>IS</KEYWORD1>
-
-			<KEYWORD1>JAPANESE</KEYWORD1>
-			<KEYWORD1>JUST</KEYWORD1>
-			<KEYWORD1>JUSTIFIED</KEYWORD1>
-
-			<KEYWORD1>KANJI</KEYWORD1>
-			<KEYWORD1>KEPT</KEYWORD1>
-			<KEYWORD1>KEY</KEYWORD1>
-			<KEYWORD1>KEYBOARD</KEYWORD1>
-
-			<KEYWORD1>LABEL</KEYWORD1>
-			<KEYWORD1>LAST</KEYWORD1>
-			<KEYWORD1>LEADING</KEYWORD1>
-			<KEYWORD1>LEAVE</KEYWORD1>
-			<KEYWORD1>LEFT</KEYWORD1>
-			<KEYWORD1>LEFT-JUSTIFY</KEYWORD1>
-			<KEYWORD1>LEFTLINE</KEYWORD1>
-			<KEYWORD1>LENGTH</KEYWORD1>
-			<KEYWORD1>LENGTH-CHECK</KEYWORD1>
-			<KEYWORD1>LESS</KEYWORD1>
-			<KEYWORD1>LIMIT</KEYWORD1>
-			<KEYWORD1>LIMITS</KEYWORD1>
-			<KEYWORD1>LIN</KEYWORD1>
-			<KEYWORD1>LINAGE</KEYWORD1>
-			<KEYWORD1>LINAGE-COUNTER</KEYWORD1>
-			<KEYWORD1>LINE</KEYWORD1>
-			<KEYWORD1>LINE-COUNTER</KEYWORD1>
-			<KEYWORD1>LINES</KEYWORD1>
-			<KEYWORD1>LINKAGE</KEYWORD1>
-			<KEYWORD1>LOCAL-STORAGE</KEYWORD1>
-			<KEYWORD1>LOCK</KEYWORD1>
-			<KEYWORD1>LOCKING</KEYWORD1>
-			<KEYWORD1>LOW</KEYWORD1>
-			<KEYWORD1>LOW-VALUE</KEYWORD1>
-			<KEYWORD1>LOW-VALUES</KEYWORD1>
-			<KEYWORD1>LOWER</KEYWORD1>
-			<KEYWORD1>LOWLIGHT</KEYWORD1>
-
-			<KEYWORD1>MANUAL</KEYWORD1>
-			<KEYWORD1>MASTER-INDEX</KEYWORD1>
-			<KEYWORD1>MEMORY</KEYWORD1>
-			<KEYWORD1>MERGE</KEYWORD1>
-			<KEYWORD1>MESSAGE</KEYWORD1>
-			<KEYWORD1>METHOD</KEYWORD1>
-			<KEYWORD1>MODE</KEYWORD1>
-			<KEYWORD1>MODULES</KEYWORD1>
-			<KEYWORD1>MORE-LABELS</KEYWORD1>
-			<KEYWORD1>MOVE</KEYWORD1>
-			<KEYWORD1>MULTIPLE</KEYWORD1>
-			<KEYWORD1>MULTIPLY</KEYWORD1>
-
-			<KEYWORD1>NAME</KEYWORD1>
-			<KEYWORD1>NAMED</KEYWORD1>
-			<KEYWORD1>NATIONAL</KEYWORD1>
-			<KEYWORD1>NATIONAL-EDITED</KEYWORD1>
-			<KEYWORD1>NATIVE</KEYWORD1>
-			<KEYWORD1>NCHAR</KEYWORD1>
-			<KEYWORD1>NEGATIVE</KEYWORD1>
-			<KEYWORD1>NEXT</KEYWORD1>
-			<KEYWORD1>NO</KEYWORD1>
-			<KEYWORD1>NO-ECHO</KEYWORD1>
-			<KEYWORD1>NOMINAL</KEYWORD1>
-			<KEYWORD1>NOT</KEYWORD1>
-			<KEYWORD1>NOTE</KEYWORD1>
-			<KEYWORD1>NSTD-REELS</KEYWORD1>
-			<KEYWORD1>NULL</KEYWORD1>
-			<KEYWORD1>NULLS</KEYWORD1>
-			<KEYWORD1>NUMBER</KEYWORD1>
-			<KEYWORD1>NUMERIC</KEYWORD1>
-			<KEYWORD1>NUMERIC-EDITED</KEYWORD1>
-
-			<KEYWORD1>OBJECT</KEYWORD1>
-			<KEYWORD1>OBJECT-COMPUTER</KEYWORD1>
-			<KEYWORD1>OBJECT-STORAGE</KEYWORD1>
-			<KEYWORD1>OCCURS</KEYWORD1>
-			<KEYWORD1>OF</KEYWORD1>
-			<KEYWORD1>OFF</KEYWORD1>
-			<KEYWORD1>OMITTED</KEYWORD1>
-			<KEYWORD1>ON</KEYWORD1>
-			<KEYWORD1>OOSTACKPTR</KEYWORD1>
-			<KEYWORD1>OPEN</KEYWORD1>
-			<KEYWORD1>OPTIONAL</KEYWORD1>
-			<KEYWORD1>OR</KEYWORD1>
-			<KEYWORD1>ORDER</KEYWORD1>
-			<KEYWORD1>ORGANIZATION</KEYWORD1>
-			<KEYWORD1>OTHER</KEYWORD1>
-			<KEYWORD1>OTHERWISE</KEYWORD1>
-			<KEYWORD1>OUTPUT</KEYWORD1>
-			<KEYWORD1>OVERFLOW</KEYWORD1>
-			<KEYWORD1>OVERLINE</KEYWORD1>
-
-			<KEYWORD1>PACKED-DECIMAL</KEYWORD1>
-			<KEYWORD1>PADDING</KEYWORD1>
-			<KEYWORD1>PAGE</KEYWORD1>
-			<KEYWORD1>PAGE-COUNTER</KEYWORD1>
-			<KEYWORD1>PARAGRAPH</KEYWORD1>
-			<KEYWORD1>PASSWORD</KEYWORD1>
-			<KEYWORD1>PERFORM</KEYWORD1>
-			<KEYWORD1>PF</KEYWORD1>
-			<KEYWORD1>PH</KEYWORD1>
-			<KEYWORD1>PIC</KEYWORD1>
-			<KEYWORD1>PICTURE</KEYWORD1>
-			<KEYWORD1>PLUS</KEYWORD1>
-			<KEYWORD1>POINTER</KEYWORD1>
-			<KEYWORD1>POS</KEYWORD1>
-			<KEYWORD1>POSITION</KEYWORD1>
-			<KEYWORD1>POSITIONING</KEYWORD1>
-			<KEYWORD1>POSITIVE</KEYWORD1>
-			<KEYWORD1>PREVIOUS</KEYWORD1>
-			<KEYWORD1>PRINT</KEYWORD1>
-			<KEYWORD1>PRINT-SWITCH</KEYWORD1>
-			<KEYWORD1>PRINTER</KEYWORD1>
-			<KEYWORD1>PRINTER-1</KEYWORD1>
-			<KEYWORD1>PRINTING</KEYWORD1>
-			<KEYWORD1>PRIVATE</KEYWORD1>
-			<KEYWORD1>PROCEDURE</KEYWORD1>
-			<KEYWORD1>PROCEDURE-POINTER</KEYWORD1>
-			<KEYWORD1>PROCEDURES</KEYWORD1>
-			<KEYWORD1>PROCEED</KEYWORD1>
-			<KEYWORD1>PROCESSING</KEYWORD1>
-			<KEYWORD1>PROGRAM</KEYWORD1>
-			<KEYWORD1>PROGRAM-ID</KEYWORD1>
-			<KEYWORD1>PROMPT</KEYWORD1>
-			<KEYWORD1>PROTECTED</KEYWORD1>
-			<KEYWORD1>PUBLIC</KEYWORD1>
-			<KEYWORD1>PURGE</KEYWORD1>
-
-			<KEYWORD1>QUEUE</KEYWORD1>
-			<KEYWORD1>QUOTE</KEYWORD1>
-			<KEYWORD1>QUOTES</KEYWORD1>
-
-			<KEYWORD1>RANDOM</KEYWORD1>
-			<KEYWORD1>RANGE</KEYWORD1>
-			<KEYWORD1>RD</KEYWORD1>
-			<KEYWORD1>READ</KEYWORD1>
-			<KEYWORD1>READY</KEYWORD1>
-			<KEYWORD1>RECEIVE</KEYWORD1>
-			<KEYWORD1>RECORD</KEYWORD1>
-			<KEYWORD1>RECORD-OVERFLOW</KEYWORD1>
-			<KEYWORD1>RECORDING</KEYWORD1>
-			<KEYWORD1>RECORDS</KEYWORD1>
-			<KEYWORD1>REDEFINES</KEYWORD1>
-			<KEYWORD1>REEL</KEYWORD1>
-			<KEYWORD1>REFERENCE</KEYWORD1>
-			<KEYWORD1>REFERENCES</KEYWORD1>
-			<KEYWORD1>RELATIVE</KEYWORD1>
-			<KEYWORD1>RELEASE</KEYWORD1>
-			<KEYWORD1>RELOAD</KEYWORD1>
-			<KEYWORD1>REMAINDER</KEYWORD1>
-			<KEYWORD1>REMARKS</KEYWORD1>
-			<KEYWORD1>REMOVAL</KEYWORD1>
-			<KEYWORD1>RENAMES</KEYWORD1>
-			<KEYWORD1>REORG-CRITERIA</KEYWORD1>
-			<KEYWORD1>REPLACE</KEYWORD1>
-			<KEYWORD1>REPLACING</KEYWORD1>
-			<KEYWORD1>REPORT</KEYWORD1>
-			<KEYWORD1>REPORTING</KEYWORD1>
-			<KEYWORD1>REPORTS</KEYWORD1>
-			<KEYWORD1>REQUIRED</KEYWORD1>
-			<KEYWORD1>REREAD</KEYWORD1>
-			<KEYWORD1>RERUN</KEYWORD1>
-			<KEYWORD1>RESERVE</KEYWORD1>
-			<KEYWORD1>RESET</KEYWORD1>
-			<KEYWORD1>RETURN</KEYWORD1>
-			<KEYWORD1>RETURN-CODE</KEYWORD1>
-			<KEYWORD1>RETURNING</KEYWORD1>
-			<KEYWORD1>REVERSE</KEYWORD1>
-			<KEYWORD1>REVERSE-VIDEO</KEYWORD1>
-			<KEYWORD1>REVERSED</KEYWORD1>
-			<KEYWORD1>REWIND</KEYWORD1>
-			<KEYWORD1>REWRITE</KEYWORD1>
-			<KEYWORD1>RF</KEYWORD1>
-			<KEYWORD1>RH</KEYWORD1>
-			<KEYWORD1>RIGHT</KEYWORD1>
-			<KEYWORD1>RIGHT-JUSTIFY</KEYWORD1>
-			<KEYWORD1>ROLLBACK</KEYWORD1>
-			<KEYWORD1>ROUNDED</KEYWORD1>
-			<KEYWORD1>RUN</KEYWORD1>
-
-			<KEYWORD1>S01</KEYWORD1>
-			<KEYWORD1>S02</KEYWORD1>
-			<KEYWORD1>S03</KEYWORD1>
-			<KEYWORD1>S04</KEYWORD1>
-			<KEYWORD1>S05</KEYWORD1>
-			<KEYWORD1>SAME</KEYWORD1>
-			<KEYWORD1>SCREEN</KEYWORD1>
-			<KEYWORD1>SD</KEYWORD1>
-			<KEYWORD1>SEARCH</KEYWORD1>
-			<KEYWORD1>SECTION</KEYWORD1>
-			<KEYWORD1>SECURE</KEYWORD1>
-			<KEYWORD1>SECURITY</KEYWORD1>
-			<KEYWORD1>SEEK</KEYWORD1>
-			<KEYWORD1>SEGMENT</KEYWORD1>
-			<KEYWORD1>SEGMENT-LIMIT</KEYWORD1>
-			<KEYWORD1>SELECT</KEYWORD1>
-			<KEYWORD1>SELECTIVE</KEYWORD1>
-			<KEYWORD1>SEND</KEYWORD1>
-			<KEYWORD1>SENTENCE</KEYWORD1>
-			<KEYWORD1>SEPARATE</KEYWORD1>
-			<KEYWORD1>SEQUENCE</KEYWORD1>
-			<KEYWORD1>SEQUENTIAL</KEYWORD1>
-			<KEYWORD1>SERVICE</KEYWORD1>
-			<KEYWORD1>SET</KEYWORD1>
-			<KEYWORD1>SHIFT-IN</KEYWORD1>
-			<KEYWORD1>SHIFT-OUT</KEYWORD1>
-			<KEYWORD1>SIGN</KEYWORD1>
-			<KEYWORD1>SIZE</KEYWORD1>
-			<KEYWORD1>SKIP1</KEYWORD1>
-			<KEYWORD1>SKIP2</KEYWORD1>
-			<KEYWORD1>SKIP3</KEYWORD1>
-			<KEYWORD1>SORT</KEYWORD1>
-			<KEYWORD1>SORT-CONTROL</KEYWORD1>
-			<KEYWORD1>SORT-CORE-SIZE</KEYWORD1>
-			<KEYWORD1>SORT-FILE-SIZE</KEYWORD1>
-			<KEYWORD1>SORT-MERGE</KEYWORD1>
-			<KEYWORD1>SORT-MESSAGE</KEYWORD1>
-			<KEYWORD1>SORT-MODE-SIZE</KEYWORD1>
-			<KEYWORD1>SORT-OPTION</KEYWORD1>
-			<KEYWORD1>SORT-RETURN</KEYWORD1>
-			<KEYWORD1>SOURCE</KEYWORD1>
-			<KEYWORD1>SOURCE-COMPUTER</KEYWORD1>
-			<KEYWORD1>SPACE</KEYWORD1>
-			<KEYWORD1>SPACE-FILL</KEYWORD1>
-			<KEYWORD1>SPACES</KEYWORD1>
-			<KEYWORD1>SPECIAL-NAMES</KEYWORD1>
-			<KEYWORD1>STANDARD</KEYWORD1>
-			<KEYWORD1>STANDARD-1</KEYWORD1>
-			<KEYWORD1>STANDARD-2</KEYWORD1>
-			<KEYWORD1>START</KEYWORD1>
-			<KEYWORD1>STATUS</KEYWORD1>
-			<KEYWORD1>STOP</KEYWORD1>
-			<KEYWORD1>STORE</KEYWORD1>
-			<KEYWORD1>STRING</KEYWORD1>
-			<KEYWORD1>SUB-QUEUE-1</KEYWORD1>
-			<KEYWORD1>SUB-QUEUE-2</KEYWORD1>
-			<KEYWORD1>SUB-QUEUE-3</KEYWORD1>
-			<KEYWORD1>SUBTRACT</KEYWORD1>
-			<KEYWORD1>SUM</KEYWORD1>
-			<KEYWORD1>SUPER</KEYWORD1>
-			<KEYWORD1>SUPPRESS</KEYWORD1>
-			<KEYWORD1>SYMBOLIC</KEYWORD1>
-			<KEYWORD1>SYNC</KEYWORD1>
-			<KEYWORD1>SYNCHRONIZED</KEYWORD1>
-			<KEYWORD1>SYSIN</KEYWORD1>
-			<KEYWORD1>SYSIPT</KEYWORD1>
-			<KEYWORD1>SYSLST</KEYWORD1>
-			<KEYWORD1>SYSOUT</KEYWORD1>
-			<KEYWORD1>SYSPCH</KEYWORD1>
-			<KEYWORD1>SYSPUNCH</KEYWORD1>
-
-			<KEYWORD1>TAB</KEYWORD1>
-			<KEYWORD1>TABLE</KEYWORD1>
-			<KEYWORD1>TALLY</KEYWORD1>
-			<KEYWORD1>TALLYING</KEYWORD1>
-			<KEYWORD1>TAPE</KEYWORD1>
-			<KEYWORD1>TERMINAL</KEYWORD1>
-			<KEYWORD1>TERMINATE</KEYWORD1>
-			<KEYWORD1>TEST</KEYWORD1>
-			<KEYWORD1>TEXT</KEYWORD1>
-			<KEYWORD1>THAN</KEYWORD1>
-			<KEYWORD1>THEN</KEYWORD1>
-			<KEYWORD1>THROUGH</KEYWORD1>
-			<KEYWORD1>THRU</KEYWORD1>
-			<KEYWORD1>TIME</KEYWORD1>
-			<KEYWORD1>TIME-OF-DAY</KEYWORD1>
-			<KEYWORD1>TIME-OUT</KEYWORD1>
-			<KEYWORD1>TIMEOUT</KEYWORD1>
-			<KEYWORD1>TIMES</KEYWORD1>
-			<KEYWORD1>TITLE</KEYWORD1>
-			<KEYWORD1>TO</KEYWORD1>
-			<KEYWORD1>TOP</KEYWORD1>
-			<KEYWORD1>TOTALED</KEYWORD1>
-			<KEYWORD1>TOTALING</KEYWORD1>
-			<KEYWORD1>TRACE</KEYWORD1>
-			<KEYWORD1>TRACK-AREA</KEYWORD1>
-			<KEYWORD1>TRACK-LIMIT</KEYWORD1>
-			<KEYWORD1>TRACKS</KEYWORD1>
-			<KEYWORD1>TRAILING</KEYWORD1>
-			<KEYWORD1>TRAILING-SIGN</KEYWORD1>
-			<KEYWORD1>TRANSFORM</KEYWORD1>
-			<KEYWORD1>TRUE</KEYWORD1>
-			<KEYWORD1>TYPE</KEYWORD1>
-			<KEYWORD1>TYPEDEF</KEYWORD1>
-
-			<KEYWORD1>UNDERLINE</KEYWORD1>
-			<KEYWORD1>UNEQUAL</KEYWORD1>
-			<KEYWORD1>UNIT</KEYWORD1>
-			<KEYWORD1>UNLOCK</KEYWORD1>
-			<KEYWORD1>UNSTRING</KEYWORD1>
-			<KEYWORD1>UNTIL</KEYWORD1>
-			<KEYWORD1>UP</KEYWORD1>
-			<KEYWORD1>UPDATE</KEYWORD1>
-			<KEYWORD1>UPON</KEYWORD1>
-			<KEYWORD1>UPPER</KEYWORD1>
-			<KEYWORD1>UPSI-0</KEYWORD1>
-			<KEYWORD1>UPSI-1</KEYWORD1>
-			<KEYWORD1>UPSI-2</KEYWORD1>
-			<KEYWORD1>UPSI-3</KEYWORD1>
-			<KEYWORD1>UPSI-4</KEYWORD1>
-			<KEYWORD1>UPSI-5</KEYWORD1>
-			<KEYWORD1>UPSI-6</KEYWORD1>
-			<KEYWORD1>UPSI-7</KEYWORD1>
-			<KEYWORD1>USAGE</KEYWORD1>
-			<KEYWORD1>USE</KEYWORD1>
-			<KEYWORD1>USER</KEYWORD1>
-			<KEYWORD1>USING</KEYWORD1>
-
-			<KEYWORD1>VALUE</KEYWORD1>
-			<KEYWORD1>VALUES</KEYWORD1>
-			<KEYWORD1>VARIABLE</KEYWORD1>
-			<KEYWORD1>VARYING</KEYWORD1>
-
-			<KEYWORD1>WAIT</KEYWORD1>
-			<KEYWORD1>WHEN</KEYWORD1>
-			<KEYWORD1>WHEN-COMPILED</KEYWORD1>
-			<KEYWORD1>WITH</KEYWORD1>
-			<KEYWORD1>WORDS</KEYWORD1>
-			<KEYWORD1>WORKING-STORAGE</KEYWORD1>
-			<KEYWORD1>WRITE</KEYWORD1>
-			<KEYWORD1>WRITE-ONLY</KEYWORD1>
-			<KEYWORD1>WRITE-VERIFY</KEYWORD1>
-
-			<KEYWORD1>ZERO</KEYWORD1>
-			<KEYWORD1>ZERO-FILL</KEYWORD1>
-			<KEYWORD1>ZEROES</KEYWORD1>
-			<KEYWORD1>ZEROS</KEYWORD1>
-
-			<KEYWORD2>ACOS</KEYWORD2>
-			<KEYWORD2>ANNUITY</KEYWORD2>
-			<KEYWORD2>ASIN</KEYWORD2>
-			<KEYWORD2>ATAN</KEYWORD2>
-			<KEYWORD2>CHAR</KEYWORD2>
-			<KEYWORD2>COS</KEYWORD2>
-			<KEYWORD2>CURRENT-DATE</KEYWORD2>
-			<KEYWORD2>DATE-OF-INTEGER</KEYWORD2>
-			<KEYWORD2>DAY-OF-INTEGER</KEYWORD2>
-			<KEYWORD2>FACTORIAL</KEYWORD2>
-			<KEYWORD2>INTEGER</KEYWORD2>
-			<KEYWORD2>INTEGER-OF-DATE</KEYWORD2>
-			<KEYWORD2>INTEGER-OF-DAY</KEYWORD2>
-			<KEYWORD2>INTEGER-PART</KEYWORD2>
-			<!-- <KEYWORD2>LENGTH</KEYWORD2> -->
-			<KEYWORD2>LOG</KEYWORD2>
-			<KEYWORD2>LOG10</KEYWORD2>
-			<KEYWORD2>LOWER-CASE</KEYWORD2>
-			<KEYWORD2>MAX</KEYWORD2>
-			<KEYWORD2>MEAN</KEYWORD2>
-			<KEYWORD2>MEDIAN</KEYWORD2>
-			<KEYWORD2>MIDRANGE</KEYWORD2>
-			<KEYWORD2>MIN</KEYWORD2>
-			<KEYWORD2>MOD</KEYWORD2>
-			<KEYWORD2>NUMVAL</KEYWORD2>
-			<KEYWORD2>NUMVAL-C</KEYWORD2>
-			<KEYWORD2>ORD</KEYWORD2>
-			<KEYWORD2>ORD-MAX</KEYWORD2>
-			<KEYWORD2>ORD-MIN</KEYWORD2>
-			<KEYWORD2>PRESENT-VALUE</KEYWORD2>
-			<KEYWORD2>RANDOM</KEYWORD2>
-			<KEYWORD2>RANGE</KEYWORD2>
-			<KEYWORD2>REM</KEYWORD2>
-			<KEYWORD2>REVERSE</KEYWORD2>
-			<KEYWORD2>SIN</KEYWORD2>
-			<KEYWORD2>SQRT</KEYWORD2>
-			<KEYWORD2>STANDARD-DEVIATION</KEYWORD2>
-			<KEYWORD2>SUM</KEYWORD2>
-			<KEYWORD2>TAN</KEYWORD2>
-			<KEYWORD2>UPPER-CASE</KEYWORD2>
-			<KEYWORD2>VARIANCE</KEYWORD2>
-			<KEYWORD2>WHEN-COMPILED</KEYWORD2>
-
-			<!-- Oracle/SQL - Reserved Words
-			<KEYWORD3>ACCESS</KEYWORD3>
-			<KEYWORD3>ADD</KEYWORD3>
-			<KEYWORD3>ALL</KEYWORD3>
-			<KEYWORD3>ALTER</KEYWORD3>
-			<KEYWORD3>AND</KEYWORD3>
-			<KEYWORD3>ANY</KEYWORD3>
-			<KEYWORD3>ARRAYLEN</KEYWORD3>
-			<KEYWORD3>AS</KEYWORD3>
-			<KEYWORD3>ASC</KEYWORD3>
-			<KEYWORD3>AUDIT</KEYWORD3>
-			<KEYWORD3>BETWEEN</KEYWORD3>
-			<KEYWORD3>BY</KEYWORD3>
-			<KEYWORD3>CHAR</KEYWORD3>
-			<KEYWORD3>CHECK</KEYWORD3>
-			<KEYWORD3>CLUSTER</KEYWORD3>
-			<KEYWORD3>COLUMN</KEYWORD3>
-			<KEYWORD3>COMMENT</KEYWORD3>
-			<KEYWORD3>COMPRESS</KEYWORD3>
-			<KEYWORD3>CONNECT</KEYWORD3>
-			<KEYWORD3>CREATE</KEYWORD3>
-			<KEYWORD3>CURRENT</KEYWORD3>
-			<KEYWORD3>DATE</KEYWORD3>
-			<KEYWORD3>DECIMAL</KEYWORD3>
-			<KEYWORD3>DEFAULT</KEYWORD3>
-			<KEYWORD3>DELETE</KEYWORD3>
-			<KEYWORD3>DESC</KEYWORD3>
-			<KEYWORD3>DISTINCT</KEYWORD3>
-			<KEYWORD3>DROP</KEYWORD3>
-			<KEYWORD3>ELSE</KEYWORD3>
-			<KEYWORD3>EXCLUSIVE</KEYWORD3>
-			<KEYWORD3>EXEC</KEYWORD3>
-			<KEYWORD3>END-EXEC</KEYWORD3>
-			<KEYWORD3>EXISTS</KEYWORD3>
-			<KEYWORD3>FILE</KEYWORD3>
-			<KEYWORD3>FLOAT</KEYWORD3>
-			<KEYWORD3>FOR</KEYWORD3>
-			<KEYWORD3>FROM</KEYWORD3>
-			<KEYWORD3>GRANT</KEYWORD3>
-			<KEYWORD3>GROUP</KEYWORD3>
-			<KEYWORD3>HAVING</KEYWORD3>
-			<KEYWORD3>IDENTIFIED</KEYWORD3>
-			<KEYWORD3>IMMEDIATE</KEYWORD3>
-			<KEYWORD3>IN</KEYWORD3>
-			<KEYWORD3>INCREMENT</KEYWORD3>
-			<KEYWORD3>INDEX</KEYWORD3>
-			<KEYWORD3>INITIAL</KEYWORD3>
-			<KEYWORD3>INSERT</KEYWORD3>
-			<KEYWORD3>INTEGER</KEYWORD3>
-			<KEYWORD3>INTERSECT</KEYWORD3>
-			<KEYWORD3>INTO</KEYWORD3>
-			<KEYWORD3>IS</KEYWORD3>
-			<KEYWORD3>LEVEL</KEYWORD3>
-			<KEYWORD3>LIKE</KEYWORD3>
-			<KEYWORD3>LOCK</KEYWORD3>
-			<KEYWORD3>LONG</KEYWORD3>
-			<KEYWORD3>MAXEXTENTS</KEYWORD3>
-			<KEYWORD3>MINUS</KEYWORD3>
-			<KEYWORD3>MODE</KEYWORD3>
-			<KEYWORD3>MODIFY</KEYWORD3>
-			<KEYWORD3>NOAUDIT</KEYWORD3>
-			<KEYWORD3>NOCOMPRESS</KEYWORD3>
-			<KEYWORD3>NOT</KEYWORD3>
-			<KEYWORD3>NOTFOUND</KEYWORD3>
-			<KEYWORD3>NOWAIT</KEYWORD3>
-			<KEYWORD3>NULL</KEYWORD3>
-			<KEYWORD3>NUMBER</KEYWORD3>
-			<KEYWORD3>OF</KEYWORD3>
-			<KEYWORD3>OFFLINE</KEYWORD3>
-			<KEYWORD3>ON</KEYWORD3>
-			<KEYWORD3>ONLINE</KEYWORD3>
-			<KEYWORD3>OPTION</KEYWORD3>
-			<KEYWORD3>OR</KEYWORD3>
-			<KEYWORD3>ORDER</KEYWORD3>
-			<KEYWORD3>PCTFREE</KEYWORD3>
-			<KEYWORD3>PRIOR</KEYWORD3>
-			<KEYWORD3>PRIVILEGES</KEYWORD3>
-			<KEYWORD3>PUBLIC</KEYWORD3>
-			<KEYWORD3>RAW</KEYWORD3>
-			<KEYWORD3>RENAME</KEYWORD3>
-			<KEYWORD3>RESOURCE</KEYWORD3>
-			<KEYWORD3>REVOKE</KEYWORD3>
-			<KEYWORD3>ROW</KEYWORD3>
-			<KEYWORD3>ROWID</KEYWORD3>
-			<KEYWORD3>ROWLABEL</KEYWORD3>
-			<KEYWORD3>ROWNUM</KEYWORD3>
-			<KEYWORD3>ROWS</KEYWORD3>
-			<KEYWORD3>START</KEYWORD3>
-			<KEYWORD3>SELECT</KEYWORD3>
-			<KEYWORD3>SESSION</KEYWORD3>
-			<KEYWORD3>SET</KEYWORD3>
-			<KEYWORD3>SHARE</KEYWORD3>
-			<KEYWORD3>SIZE</KEYWORD3>
-			<KEYWORD3>SMALLINT</KEYWORD3>
-			<KEYWORD3>SQLBUF</KEYWORD3>
-			<KEYWORD3>SUCCESSFUL</KEYWORD3>
-			<KEYWORD3>SYNONYM</KEYWORD3>
-			<KEYWORD3>SYSDATE</KEYWORD3>
-			<KEYWORD3>TABLE</KEYWORD3>
-			<KEYWORD3>THEN</KEYWORD3>
-			<KEYWORD3>TO</KEYWORD3>
-			<KEYWORD3>TRIGGER</KEYWORD3>
-			<KEYWORD3>UID</KEYWORD3>
-			<KEYWORD3>UNION</KEYWORD3>
-			<KEYWORD3>UNIQUE</KEYWORD3>
-			<KEYWORD3>UPDATE</KEYWORD3>
-			<KEYWORD3>USER</KEYWORD3>
-			<KEYWORD3>VALIDATE</KEYWORD3>
-			<KEYWORD3>VALUES</KEYWORD3>
-			<KEYWORD3>VARCHAR</KEYWORD3>
-			<KEYWORD3>VARCHAR2</KEYWORD3>
-			<KEYWORD3>VIEW</KEYWORD3>
-			<KEYWORD3>WHENEVER</KEYWORD3>
-			<KEYWORD3>WHERE</KEYWORD3>
-			<KEYWORD3>WITH</KEYWORD3>
-			-->
-
-			<!-- Oracle/SQL - Keywords
-			<KEYWORD3>ADMIN</KEYWORD3>
-			<KEYWORD3>AFTER</KEYWORD3>
-			<KEYWORD3>ALLOCATE</KEYWORD3>
-			<KEYWORD3>ANALYZE</KEYWORD3>
-			<KEYWORD3>ARCHIVE</KEYWORD3>
-			<KEYWORD3>ARCHIVELOG</KEYWORD3>
-			<KEYWORD3>AUTHORIZATION</KEYWORD3>
-			<KEYWORD3>AVG</KEYWORD3>
-			<KEYWORD3>BACKUP</KEYWORD3>
-			<KEYWORD3>BEGIN</KEYWORD3>
-			<KEYWORD3>BECOME</KEYWORD3>
-			<KEYWORD3>BEFORE</KEYWORD3>
-			<KEYWORD3>BLOCK</KEYWORD3>
-			<KEYWORD3>BODY</KEYWORD3>
-			<KEYWORD3>CACHE</KEYWORD3>
-			<KEYWORD3>CANCEL</KEYWORD3>
-			<KEYWORD3>CASCADE</KEYWORD3>
-			<KEYWORD3>CHANGE</KEYWORD3>
-			<KEYWORD3>CHARACTER</KEYWORD3>
-			<KEYWORD3>CHECKPOINT</KEYWORD3>
-			<KEYWORD3>CLOSE</KEYWORD3>
-			<KEYWORD3>COBOL</KEYWORD3>
-			<KEYWORD3>COMMIT</KEYWORD3>
-			<KEYWORD3>COMPILE</KEYWORD3>
-			<KEYWORD3>CONSTRAINT</KEYWORD3>
-			<KEYWORD3>CONSTRAINTS</KEYWORD3>
-			<KEYWORD3>CONTENTS</KEYWORD3>
-			<KEYWORD3>CONTINUE</KEYWORD3>
-			<KEYWORD3>CONTROLFILE</KEYWORD3>
-			<KEYWORD3>COUNT</KEYWORD3>
-			<KEYWORD3>DBA</KEYWORD3>
-			<KEYWORD3>CURSOR</KEYWORD3>
-			<KEYWORD3>CYCLE</KEYWORD3>
-			<KEYWORD3>DATABASE</KEYWORD3>
-			<KEYWORD3>DATAFILE</KEYWORD3>
-			<KEYWORD3>DEC</KEYWORD3>
-			<KEYWORD3>DECLARE</KEYWORD3>
-			<KEYWORD3>DISABLE</KEYWORD3>
-			<KEYWORD3>DISMOUNT</KEYWORD3>
-			<KEYWORD3>DOUBLE</KEYWORD3>
-			<KEYWORD3>DUMP</KEYWORD3>
-			<KEYWORD3>EACH</KEYWORD3>
-			<KEYWORD3>ENABLE</KEYWORD3>
-			<KEYWORD3>END</KEYWORD3>
-			<KEYWORD3>ESCAPE</KEYWORD3>
-			<KEYWORD3>EVENTS</KEYWORD3>
-			<KEYWORD3>EXCEPT</KEYWORD3>
-			<KEYWORD3>EXCEPTIONS</KEYWORD3>
-			<KEYWORD3>EXEC</KEYWORD3>
-			<KEYWORD3>EXPLAIN</KEYWORD3>
-			<KEYWORD3>EXECUTE</KEYWORD3>
-			<KEYWORD3>EXTENT</KEYWORD3>
-			<KEYWORD3>EXTERNALLY</KEYWORD3>
-			<KEYWORD3>FETCH</KEYWORD3>
-			<KEYWORD3>FLUSH</KEYWORD3>
-			<KEYWORD3>FREELIST</KEYWORD3>
-			<KEYWORD3>FREELISTS</KEYWORD3>
-			<KEYWORD3>FORCE</KEYWORD3>
-			<KEYWORD3>FOREIGN</KEYWORD3>
-			<KEYWORD3>FORTRAN</KEYWORD3>
-			<KEYWORD3>FOUND</KEYWORD3>
-			<KEYWORD3>FUNCTION</KEYWORD3>
-			<KEYWORD3>GO</KEYWORD3>
-			<KEYWORD3>GOTO</KEYWORD3>
-			<KEYWORD3>GROUPS</KEYWORD3>
-			<KEYWORD3>INCLUDING</KEYWORD3>
-			<KEYWORD3>INDICATOR</KEYWORD3>
-			<KEYWORD3>INITRANS</KEYWORD3>
-			<KEYWORD3>INSTANCE</KEYWORD3>
-			<KEYWORD3>INT</KEYWORD3>
-			<KEYWORD3>KEY</KEYWORD3>
-			<KEYWORD3>LANGUAGE</KEYWORD3>
-			<KEYWORD3>LAYER</KEYWORD3>
-			<KEYWORD3>LINK</KEYWORD3>
-			<KEYWORD3>LISTS</KEYWORD3>
-			<KEYWORD3>LOGFILE</KEYWORD3>
-			<KEYWORD3>MANAGE</KEYWORD3>
-			<KEYWORD3>MANUAL</KEYWORD3>
-			<KEYWORD3>MAX</KEYWORD3>
-			<KEYWORD3>MAXDATAFILES</KEYWORD3>
-			<KEYWORD3>MAXINSTANCES</KEYWORD3>
-			<KEYWORD3>MAXLOGFILES</KEYWORD3>
-			<KEYWORD3>MAXLOGHISTORY</KEYWORD3>
-			<KEYWORD3>MAXLOGMEMBERS</KEYWORD3>
-			<KEYWORD3>MAXTRANS</KEYWORD3>
-			<KEYWORD3>MAXVALUE</KEYWORD3>
-			<KEYWORD3>MIN</KEYWORD3>
-			<KEYWORD3>MINEXTENTS</KEYWORD3>
-			<KEYWORD3>MINVALUE</KEYWORD3>
-			<KEYWORD3>MODULE</KEYWORD3>
-			<KEYWORD3>MOUNT</KEYWORD3>
-			<KEYWORD3>NEXT</KEYWORD3>
-			<KEYWORD3>NEW</KEYWORD3>
-			<KEYWORD3>NOARCHIVELOG</KEYWORD3>
-			<KEYWORD3>NOCACHE</KEYWORD3>
-			<KEYWORD3>NOCYCLE</KEYWORD3>
-			<KEYWORD3>NOMAXVALUE</KEYWORD3>
-			<KEYWORD3>NOMINVALUE</KEYWORD3>
-			<KEYWORD3>NONE</KEYWORD3>
-			<KEYWORD3>NOORDER</KEYWORD3>
-			<KEYWORD3>NORESETLOGS</KEYWORD3>
-			<KEYWORD3>NORMAL</KEYWORD3>
-			<KEYWORD3>NOSORT</KEYWORD3>
-			<KEYWORD3>NUMERIC</KEYWORD3>
-			<KEYWORD3>OFF</KEYWORD3>
-			<KEYWORD3>OLD</KEYWORD3>
-			<KEYWORD3>ONLY</KEYWORD3>
-			<KEYWORD3>OPEN</KEYWORD3>
-			<KEYWORD3>OPTIMAL</KEYWORD3>
-			<KEYWORD3>OWN</KEYWORD3>
-			<KEYWORD3>PACKAGE</KEYWORD3>
-			<KEYWORD3>PARALLEL</KEYWORD3>
-			<KEYWORD3>PCTINCREASE</KEYWORD3>
-			<KEYWORD3>PCTUSED</KEYWORD3>
-			<KEYWORD3>PLAN</KEYWORD3>
-			<KEYWORD3>PLI</KEYWORD3>
-			<KEYWORD3>PRECISION</KEYWORD3>
-			<KEYWORD3>PRIMARY</KEYWORD3>
-			<KEYWORD3>PRIVATE</KEYWORD3>
-			<KEYWORD3>PROCEDURE</KEYWORD3>
-			<KEYWORD3>PROFILE</KEYWORD3>
-			<KEYWORD3>QUOTA</KEYWORD3>
-			<KEYWORD3>READ</KEYWORD3>
-			<KEYWORD3>REAL</KEYWORD3>
-			<KEYWORD3>RECOVER</KEYWORD3>
-			<KEYWORD3>REFERENCES</KEYWORD3>
-			<KEYWORD3>REFERENCING</KEYWORD3>
-			<KEYWORD3>RESETLOGS</KEYWORD3>
-			<KEYWORD3>RESTRICTED</KEYWORD3>
-			<KEYWORD3>REUSE</KEYWORD3>
-			<KEYWORD3>ROLE</KEYWORD3>
-			<KEYWORD3>ROLES</KEYWORD3>
-			<KEYWORD3>ROLLBACK</KEYWORD3>
-			<KEYWORD3>SAVEPOINT</KEYWORD3>
-			<KEYWORD3>SCHEMA</KEYWORD3>
-			<KEYWORD3>SCN</KEYWORD3>
-			<KEYWORD3>SECTION</KEYWORD3>
-			<KEYWORD3>SEGMENT</KEYWORD3>
-			<KEYWORD3>SEQUENCE</KEYWORD3>
-			<KEYWORD3>SHARED</KEYWORD3>
-			<KEYWORD3>SNAPSHOT</KEYWORD3>
-			<KEYWORD3>SOME</KEYWORD3>
-			<KEYWORD3>SORT</KEYWORD3>
-			<KEYWORD3>SQL</KEYWORD3>
-			<KEYWORD3>SQLCODE</KEYWORD3>
-			<KEYWORD3>SQLERROR</KEYWORD3>
-			<KEYWORD3>SQLSTATE</KEYWORD3>
-			<KEYWORD3>STATEMENT_ID</KEYWORD3>
-			<KEYWORD3>STATISTICS</KEYWORD3>
-			<KEYWORD3>STOP</KEYWORD3>
-			<KEYWORD3>STORAGE</KEYWORD3>
-			<KEYWORD3>SUM</KEYWORD3>
-			<KEYWORD3>SWITCH</KEYWORD3>
-			<KEYWORD3>SYSTEM</KEYWORD3>
-			<KEYWORD3>TABLES</KEYWORD3>
-			<KEYWORD3>TABLESPACE</KEYWORD3>
-			<KEYWORD3>TEMPORARY</KEYWORD3>
-			<KEYWORD3>THREAD</KEYWORD3>
-			<KEYWORD3>TIME</KEYWORD3>
-			<KEYWORD3>TRACING</KEYWORD3>
-			<KEYWORD3>TRANSACTION</KEYWORD3>
-			<KEYWORD3>TRIGGERS</KEYWORD3>
-			<KEYWORD3>TRUNCATE</KEYWORD3>
-			<KEYWORD3>UNDER</KEYWORD3>
-			<KEYWORD3>UNLIMITED</KEYWORD3>
-			<KEYWORD3>UNTIL</KEYWORD3>
-			<KEYWORD3>USE</KEYWORD3>
-			<KEYWORD3>USING</KEYWORD3>
-			<KEYWORD3>WHEN</KEYWORD3>
-			<KEYWORD3>WRITE</KEYWORD3>
-			<KEYWORD3>WORK</KEYWORD3>
-			-->
-
-			<LITERAL2>[COPY-PREFIX]</LITERAL2>
-			<LITERAL2>[COUNT]</LITERAL2>
-			<LITERAL2>[DISPLAY]</LITERAL2>
-			<LITERAL2>[EXECUTE]</LITERAL2>
-			<LITERAL2>[PG]</LITERAL2>
-			<LITERAL2>[PREFIX]</LITERAL2>
-			<LITERAL2>[PROGRAM]</LITERAL2>
-			<LITERAL2>[SPECIAL-PREFIX]</LITERAL2>
-			<LITERAL2>[TESTCASE]</LITERAL2>
-		</KEYWORDS>
-	</RULES>
+ <PROPS>
+<!--  <PROPERTY NAME="view.style.comment4" VALUE="color\:\#804000 bgColor\:\#f0f0f0" />
+-->
+
+  <PROPERTY NAME="wordBreakChars" VALUE=",+_=<>/?^&*" />
+
+  <!-- Auto indent experimental-->
+<!--
+  <PROPERTY NAME="indentNextLine" VALUE="^.{6}[^\*/][ \t]*(\b(if|perform|search)\b.*)$" />
+  <PROPERTY NAME="unindentThisLine" VALUE="^.{6}[^\*/][ \t]*(\b(end\-if|end\-perform|end\-search)\b.*)$" />
+  <PROPERTY NAME="doubleBracketIndent" VALUE="true" />
+  <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />
+-->
+ </PROPS>
+
+
+ <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE">
+  <IMPORT DELEGATE="CT1"/>
+  <IMPORT DELEGATE="CT2"/>
+<!-- <IMPORT DELEGATE="CT2"/> -->
+  <IMPORT DELEGATE="LEX"/>
+ </RULES>
+
+ <RULES SET="CT1" IGNORE_CASE="TRUE">
+  <SEQ_REGEXP TYPE="COMMENT4" AT_LINE_START="TRUE" >.{6}[D\- ]</SEQ_REGEXP>
+  <EOL_SPAN_REGEXP TYPE="INVALID" AT_LINE_START="TRUE" >.{6}[^/*]</EOL_SPAN_REGEXP>
+  <EOL_SPAN_REGEXP DELEGATE="CTL" AT_LINE_START="TRUE" MATCH_TYPE="RULE" >(?=.{6}[*/])</EOL_SPAN_REGEXP>
+  <SEQ_REGEXP TYPE="COMMENT4" AT_LINE_START="TRUE" >.{1,6}</SEQ_REGEXP>
+ </RULES> <!-- SET="CT1" -->
+
+
+ <RULES SET="CTL">
+<!--
+  <SEQ_REGEXP TYPE="COMMENT4" AT_LINE_START="TRUE" >.{6}</SEQ_REGEXP>
+  <EOL_SPAN_REGEXP TYPE="COMMENT1" MATCH_TYPE="CONTEXT"
+  >.{6}</EOL_SPAN_REGEXP>
+not working -->
+  <EOL_SPAN_REGEXP TYPE="COMMENT4" MATCH_TYPE="CONTEXT"
+  >.{5}</EOL_SPAN_REGEXP>
+ </RULES> <!-- SET="CTL" -->
+
+
+ <RULES SET="CT2" IGNORE_CASE="TRUE">
+  <EOL_SPAN_REGEXP TYPE="COMMENT4" MATCH_TYPE="CONTEXT">(.{65})</EOL_SPAN_REGEXP>
+ </RULES> <!-- SET="CT2" -->
+
+
+<!-- -->
+ <RULES SET="LEX" IGNORE_CASE="TRUE">
+  <SPAN TYPE="LITERAL2" ESCAPE="\" NO_LINE_BREAK="TRUE">
+   <BEGIN>x"</BEGIN>
+   <END>"</END>
+  </SPAN>
+  <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
+   <BEGIN>"</BEGIN>
+   <END>"</END>
+  </SPAN>
+  <SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
+   <BEGIN>'</BEGIN>
+   <END>'</END>
+  </SPAN>
+
+  <SEQ_REGEXP TYPE="OPERATOR"> < </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> <= </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> > </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> >= </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> \+ </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> - </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> / </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> \* </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> \*\* </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> % </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> & </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> \| </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> \^ </SEQ_REGEXP>
+  <SEQ_REGEXP TYPE="OPERATOR"> ~ </SEQ_REGEXP>
+
+  <SPAN TYPE="COMMENT2" NO_LINE_BREAK="FALSE">
+   <BEGIN>EXEC SQL</BEGIN>
+   <END>END-EXEC</END>
+  </SPAN>
+
+  <KEYWORDS>
+   <KEYWORD1>ACCEPT</KEYWORD1>
+   <KEYWORD1>ACCESS</KEYWORD1>
+   <KEYWORD1>ACTUAL</KEYWORD1>
+   <KEYWORD1>ADD</KEYWORD1>
+   <KEYWORD1>ADDRESS</KEYWORD1>
+   <KEYWORD1>ADVANCING</KEYWORD1>
+   <KEYWORD1>AFTER</KEYWORD1>
+   <KEYWORD1>ALL</KEYWORD1>
+   <KEYWORD1>ALPHABET</KEYWORD1>
+   <KEYWORD1>ALPHABETIC</KEYWORD1>
+   <KEYWORD1>ALPHABETIC-LOWER</KEYWORD1>
+   <KEYWORD1>ALPHABETIC-UPPER</KEYWORD1>
+   <KEYWORD1>ALPHANUMERIC</KEYWORD1>
+   <KEYWORD1>ALPHANUMERIC-EDITED</KEYWORD1>
+   <KEYWORD1>ALSO</KEYWORD1>
+   <KEYWORD1>ALTER</KEYWORD1>
+   <KEYWORD1>ALTERNATE</KEYWORD1>
+   <KEYWORD1>AND</KEYWORD1>
+   <KEYWORD1>ANY</KEYWORD1>
+   <KEYWORD1>API</KEYWORD1>
+   <KEYWORD1>APPLY</KEYWORD1>
+   <KEYWORD1>ARE</KEYWORD1>
+   <KEYWORD1>AREA</KEYWORD1>
+   <KEYWORD1>AREAS</KEYWORD1>
+   <KEYWORD1>ASCENDING</KEYWORD1>
+   <KEYWORD1>ASSIGN</KEYWORD1>
+   <KEYWORD1>AT</KEYWORD1>
+   <KEYWORD1>AUTHOR</KEYWORD1>
+   <KEYWORD1>AUTO</KEYWORD1>
+   <KEYWORD1>AUTO-SKIP</KEYWORD1>
+   <KEYWORD1>AUTOMATIC</KEYWORD1>
+
+   <KEYWORD1>BACKGROUND-COLOR</KEYWORD1>
+   <KEYWORD1>BACKGROUND-COLOUR</KEYWORD1>
+   <KEYWORD1>BACKWARD</KEYWORD1>
+   <KEYWORD1>BASIS</KEYWORD1>
+   <KEYWORD1>BEEP</KEYWORD1>
+   <KEYWORD1>BEFORE</KEYWORD1>
+   <KEYWORD1>BEGINNING</KEYWORD1>
+   <KEYWORD1>BELL</KEYWORD1>
+   <KEYWORD1>BINARY</KEYWORD1>
+   <KEYWORD1>BLANK</KEYWORD1>
+   <KEYWORD1>BLINK</KEYWORD1>
+   <KEYWORD1>BLOCK</KEYWORD1>
+   <KEYWORD1>BOTTOM</KEYWORD1>
+   <KEYWORD1>BY</KEYWORD1>
+
+   <KEYWORD1>C01</KEYWORD1>
+   <KEYWORD1>C02</KEYWORD1>
+   <KEYWORD1>C03</KEYWORD1>
+   <KEYWORD1>C04</KEYWORD1>
+   <KEYWORD1>C05</KEYWORD1>
+   <KEYWORD1>C06</KEYWORD1>
+   <KEYWORD1>C07</KEYWORD1>
+   <KEYWORD1>C08</KEYWORD1>
+   <KEYWORD1>C09</KEYWORD1>
+   <KEYWORD1>C10</KEYWORD1>
+   <KEYWORD1>C11</KEYWORD1>
+   <KEYWORD1>C12</KEYWORD1>
+   <KEYWORD1>CALL</KEYWORD1>
+   <KEYWORD1>CALL-CONVENTION</KEYWORD1>
+   <KEYWORD1>CANCEL</KEYWORD1>
+   <KEYWORD1>CBL</KEYWORD1>
+   <KEYWORD1>CD</KEYWORD1>
+   <KEYWORD1>CF</KEYWORD1>
+   <KEYWORD1>CH</KEYWORD1>
+   <KEYWORD1>CHAIN</KEYWORD1>
+   <KEYWORD1>CHAINING</KEYWORD1>
+   <KEYWORD1>CHANGED</KEYWORD1>
+   <KEYWORD1>CHARACTER</KEYWORD1>
+   <KEYWORD1>CHARACTERS</KEYWORD1>
+   <KEYWORD1>CLASS</KEYWORD1>
+   <KEYWORD1>CLOCK-UNITS</KEYWORD1>
+   <KEYWORD1>CLOSE</KEYWORD1>
+   <KEYWORD1>COBOL</KEYWORD1>
+   <KEYWORD1>CODE</KEYWORD1>
+   <KEYWORD1>CODE-SET</KEYWORD1>
+   <KEYWORD1>COL</KEYWORD1>
+   <KEYWORD1>COLLATING</KEYWORD1>
+   <KEYWORD1>COLUMN</KEYWORD1>
+   <KEYWORD1>COM-REG</KEYWORD1>
+   <KEYWORD1>COMMA</KEYWORD1>
+   <KEYWORD1>COMMIT</KEYWORD1>
+   <KEYWORD1>COMMON</KEYWORD1>
+   <KEYWORD1>COMMUNICATION</KEYWORD1>
+   <KEYWORD1>COMP</KEYWORD1>
+   <KEYWORD1>COMP-0</KEYWORD1>
+   <KEYWORD1>COMP-1</KEYWORD1>
+   <KEYWORD1>COMP-2</KEYWORD1>
+   <KEYWORD1>COMP-3</KEYWORD1>
+   <KEYWORD1>COMP-4</KEYWORD1>
+   <KEYWORD1>COMP-5</KEYWORD1>
+   <KEYWORD1>COMP-6</KEYWORD1>
+   <KEYWORD1>COMP-X</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL-0</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL-1</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL-2</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL-3</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL-4</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL-5</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL-6</KEYWORD1>
+   <KEYWORD1>COMPUTATIONAL-X</KEYWORD1>
+   <KEYWORD1>COMPUTE</KEYWORD1>
+   <KEYWORD1>CONFIGURATION</KEYWORD1>
+   <KEYWORD1>CONSOLE</KEYWORD1>
+   <KEYWORD1>CONTAINS</KEYWORD1>
+   <KEYWORD1>CONTENT</KEYWORD1>
+   <KEYWORD1>CONTINUE</KEYWORD1>
+   <KEYWORD1>CONTROL</KEYWORD1>
+   <KEYWORD1>CONTROLS</KEYWORD1>
+   <KEYWORD1>CONVERTING</KEYWORD1>
+   <KEYWORD1>COPY</KEYWORD1>
+   <KEYWORD1>CORE-INDEX</KEYWORD1>
+   <KEYWORD1>CORR</KEYWORD1>
+   <KEYWORD1>CORRESPONDING</KEYWORD1>
+   <KEYWORD1>COUNT</KEYWORD1>
+   <KEYWORD1>CRT</KEYWORD1>
+   <KEYWORD1>CRT-UNDER</KEYWORD1>
+   <KEYWORD1>CURRENCY</KEYWORD1>
+   <KEYWORD1>CURRENT-DATE</KEYWORD1>
+   <KEYWORD1>CURSOR</KEYWORD1>
+   <KEYWORD1>CYCLE</KEYWORD1>
+   <KEYWORD1>CYL-INDEX</KEYWORD1>
+   <KEYWORD1>CYL-OVERFLOW</KEYWORD1>
+
+   <KEYWORD1>DATA</KEYWORD1>
+   <KEYWORD1>DATE</KEYWORD1>
+   <KEYWORD1>DATE-COMPILED</KEYWORD1>
+   <KEYWORD1>DATE-WRITTEN</KEYWORD1>
+   <KEYWORD1>DAY</KEYWORD1>
+   <KEYWORD1>DAY-OF-WEEK</KEYWORD1>
+   <KEYWORD1>DBCS</KEYWORD1>
+   <KEYWORD1>DE</KEYWORD1>
+   <KEYWORD1>DEBUG</KEYWORD1>
+   <KEYWORD1>DEBUG-CONTENTS</KEYWORD1>
+   <KEYWORD1>DEBUG-ITEM</KEYWORD1>
+   <KEYWORD1>DEBUG-LINE</KEYWORD1>
+   <KEYWORD1>DEBUG-NAME</KEYWORD1>
+   <KEYWORD1>DEBUG-SUB-1</KEYWORD1>
+   <KEYWORD1>DEBUG-SUB-2</KEYWORD1>
+   <KEYWORD1>DEBUG-SUB-3</KEYWORD1>
+   <KEYWORD1>DEBUGGING</KEYWORD1>
+   <KEYWORD1>DECIMAL-POINT</KEYWORD1>
+   <KEYWORD1>DECLARATIVES</KEYWORD1>
+   <KEYWORD1>DELETE</KEYWORD1>
+   <KEYWORD1>DELIMITED</KEYWORD1>
+   <KEYWORD1>DELIMITER</KEYWORD1>
+   <KEYWORD1>DEPENDING</KEYWORD1>
+   <KEYWORD1>DESCENDING</KEYWORD1>
+   <KEYWORD1>DESTINATION</KEYWORD1>
+   <KEYWORD1>DETAIL</KEYWORD1>
+   <KEYWORD1>DISABLE</KEYWORD1>
+   <KEYWORD1>DISK</KEYWORD1>
+   <KEYWORD1>DISP</KEYWORD1>
+   <KEYWORD1>DISPLAY</KEYWORD1>
+   <KEYWORD1>DISPLAY-1</KEYWORD1>
+   <KEYWORD1>DISPLAY-ST</KEYWORD1>
+   <KEYWORD1>DIVIDE</KEYWORD1>
+   <KEYWORD1>DIVISION</KEYWORD1>
+   <KEYWORD1>DOWN</KEYWORD1>
+   <KEYWORD1>DUPLICATES</KEYWORD1>
+   <KEYWORD1>DYNAMIC</KEYWORD1>
+
+   <KEYWORD1>ECHO</KEYWORD1>
+   <KEYWORD1>EGCS</KEYWORD1>
+   <KEYWORD1>EGI</KEYWORD1>
+   <KEYWORD1>EJECT</KEYWORD1>
+   <KEYWORD1>ELSE</KEYWORD1>
+   <KEYWORD1>EMI</KEYWORD1>
+   <KEYWORD1>EMPTY-CHECK</KEYWORD1>
+   <KEYWORD1>ENABLE</KEYWORD1>
+   <KEYWORD1>END</KEYWORD1>
+   <KEYWORD1>END-ACCEPT</KEYWORD1>
+   <KEYWORD1>END-ADD</KEYWORD1>
+   <KEYWORD1>END-CALL</KEYWORD1>
+   <KEYWORD1>END-CHAIN</KEYWORD1>
+   <KEYWORD1>END-COMPUTE</KEYWORD1>
+   <KEYWORD1>END-DELETE</KEYWORD1>
+   <KEYWORD1>END-DISPLAY</KEYWORD1>
+   <KEYWORD1>END-DIVIDE</KEYWORD1>
+   <KEYWORD1>END-EVALUATE</KEYWORD1>
+   <KEYWORD1>END-IF</KEYWORD1>
+   <KEYWORD1>END-INVOKE</KEYWORD1>
+   <KEYWORD1>END-MULTIPLY</KEYWORD1>
+   <KEYWORD1>END-OF-PAGE</KEYWORD1>
+   <KEYWORD1>END-PERFORM</KEYWORD1>
+   <KEYWORD1>END-READ</KEYWORD1>
+   <KEYWORD1>END-RECEIVE</KEYWORD1>
+   <KEYWORD1>END-RETURN</KEYWORD1>
+   <KEYWORD1>END-REWRITE</KEYWORD1>
+   <KEYWORD1>END-SEARCH</KEYWORD1>
+   <KEYWORD1>END-START</KEYWORD1>
+   <KEYWORD1>END-STRING</KEYWORD1>
+   <KEYWORD1>END-SUBTRACT</KEYWORD1>
+   <KEYWORD1>END-UNSTRING</KEYWORD1>
+   <KEYWORD1>END-WRITE</KEYWORD1>
+   <KEYWORD1>ENDING</KEYWORD1>
+   <KEYWORD1>ENTER</KEYWORD1>
+   <KEYWORD1>ENTRY</KEYWORD1>
+   <KEYWORD1>ENVIRONMENT</KEYWORD1>
+   <KEYWORD1>EOL</KEYWORD1>
+   <KEYWORD1>EOP</KEYWORD1>
+   <KEYWORD1>EOS</KEYWORD1>
+   <KEYWORD1>EQUAL</KEYWORD1>
+   <KEYWORD1>EQUALS</KEYWORD1>
+   <KEYWORD1>ERASE</KEYWORD1>
+   <KEYWORD1>ERROR</KEYWORD1>
+   <KEYWORD1>ESCAPE</KEYWORD1>
+   <KEYWORD1>ESI</KEYWORD1>
+   <KEYWORD1>EVALUATE</KEYWORD1>
+   <KEYWORD1>EVERY</KEYWORD1>
+   <KEYWORD1>EXAMINE</KEYWORD1>
+   <KEYWORD1>EXCEEDS</KEYWORD1>
+   <KEYWORD1>EXCEPTION</KEYWORD1>
+   <KEYWORD1>EXCESS-3</KEYWORD1>
+   <KEYWORD1>EXCLUSIVE</KEYWORD1>
+   <KEYWORD1>EXEC</KEYWORD1>
+   <KEYWORD1>EXECUTE</KEYWORD1>
+   <KEYWORD1>EXHIBIT</KEYWORD1>
+   <KEYWORD1>EXIT</KEYWORD1>
+   <KEYWORD1>EXTEND</KEYWORD1>
+   <KEYWORD1>EXTENDED-SEARCH</KEYWORD1>
+   <KEYWORD1>EXTERNAL</KEYWORD1>
+
+   <KEYWORD1>FACTORY</KEYWORD1>
+   <KEYWORD1>FALSE</KEYWORD1>
+   <KEYWORD1>FD</KEYWORD1>
+   <KEYWORD1>FH-FCD</KEYWORD1>
+   <KEYWORD1>FH-KEYDEF</KEYWORD1>
+   <KEYWORD1>FILE</KEYWORD1>
+   <KEYWORD1>FILE-CONTROL</KEYWORD1>
+   <KEYWORD1>FILE-ID</KEYWORD1>
+   <KEYWORD1>FILE-LIMIT</KEYWORD1>
+   <KEYWORD1>FILE-LIMITS</KEYWORD1>
+   <KEYWORD1>FILLER</KEYWORD1>
+   <KEYWORD1>FINAL</KEYWORD1>
+   <KEYWORD1>FIRST</KEYWORD1>
+   <KEYWORD1>FIXED</KEYWORD1>
+   <KEYWORD1>FOOTING</KEYWORD1>
+   <KEYWORD1>FOR</KEYWORD1>
+   <KEYWORD1>FOREGROUND-COLOR</KEYWORD1>
+   <KEYWORD1>FOREGROUND-COLOUR</KEYWORD1>
+   <KEYWORD1>FROM</KEYWORD1>
+   <KEYWORD1>FULL</KEYWORD1>
+   <KEYWORD1>FUNCTION</KEYWORD1>
+
+   <KEYWORD1>GENERATE</KEYWORD1>
+   <KEYWORD1>GIVING</KEYWORD1>
+   <KEYWORD1>GLOBAL</KEYWORD1>
+   <KEYWORD1>GO</KEYWORD1>
+   <KEYWORD1>GOBACK</KEYWORD1>
+   <KEYWORD1>GREATER</KEYWORD1>
+   <KEYWORD1>GRID</KEYWORD1>
+   <KEYWORD1>GROUP</KEYWORD1>
+
+   <KEYWORD1>HEADING</KEYWORD1>
+   <KEYWORD1>HIGH</KEYWORD1>
+   <KEYWORD1>HIGH-VALUE</KEYWORD1>
+   <KEYWORD1>HIGH-VALUES</KEYWORD1>
+   <KEYWORD1>HIGHLIGHT</KEYWORD1>
+
+   <KEYWORD1>I-O</KEYWORD1>
+   <KEYWORD1>I-O-CONTROL</KEYWORD1>
+   <KEYWORD1>ID</KEYWORD1>
+   <KEYWORD1>IDENTIFICATION</KEYWORD1>
+   <KEYWORD1>IF</KEYWORD1>
+   <KEYWORD1>IGNORE</KEYWORD1>
+   <KEYWORD1>IN</KEYWORD1>
+   <KEYWORD1>INDEX</KEYWORD1>
+   <KEYWORD1>INDEXED</KEYWORD1>
+   <KEYWORD1>INDICATE</KEYWORD1>
+   <KEYWORD1>INHERITING</KEYWORD1>
+   <KEYWORD1>INITIAL</KEYWORD1>
+   <KEYWORD1>INITIALIZE</KEYWORD1>
+   <KEYWORD1>INITIATE</KEYWORD1>
+   <KEYWORD1>INPUT</KEYWORD1>
+   <KEYWORD1>INPUT-OUTPUT</KEYWORD1>
+   <KEYWORD1>INSERT</KEYWORD1>
+   <KEYWORD1>INSPECT</KEYWORD1>
+   <KEYWORD1>INSTALLATION</KEYWORD1>
+   <KEYWORD1>INTO</KEYWORD1>
+   <KEYWORD1>INVALID</KEYWORD1>
+   <KEYWORD1>INVOKE</KEYWORD1>
+   <KEYWORD1>IS</KEYWORD1>
+
+   <KEYWORD1>JAPANESE</KEYWORD1>
+   <KEYWORD1>JUST</KEYWORD1>
+   <KEYWORD1>JUSTIFIED</KEYWORD1>
+
+   <KEYWORD1>KANJI</KEYWORD1>
+   <KEYWORD1>KEPT</KEYWORD1>
+   <KEYWORD1>KEY</KEYWORD1>
+   <KEYWORD1>KEYBOARD</KEYWORD1>
+
+   <KEYWORD1>LABEL</KEYWORD1>
+   <KEYWORD1>LAST</KEYWORD1>
+   <KEYWORD1>LEADING</KEYWORD1>
+   <KEYWORD1>LEAVE</KEYWORD1>
+   <KEYWORD1>LEFT</KEYWORD1>
+   <KEYWORD1>LEFT-JUSTIFY</KEYWORD1>
+   <KEYWORD1>LEFTLINE</KEYWORD1>
+   <KEYWORD1>LENGTH</KEYWORD1>
+   <KEYWORD1>LENGTH-CHECK</KEYWORD1>
+   <KEYWORD1>LESS</KEYWORD1>
+   <KEYWORD1>LIMIT</KEYWORD1>
+   <KEYWORD1>LIMITS</KEYWORD1>
+   <KEYWORD1>LIN</KEYWORD1>
+   <KEYWORD1>LINAGE</KEYWORD1>
+   <KEYWORD1>LINAGE-COUNTER</KEYWORD1>
+   <KEYWORD1>LINE</KEYWORD1>
+   <KEYWORD1>LINE-COUNTER</KEYWORD1>
+   <KEYWORD1>LINES</KEYWORD1>
+   <KEYWORD1>LINKAGE</KEYWORD1>
+   <KEYWORD1>LOCAL-STORAGE</KEYWORD1>
+   <KEYWORD1>LOCK</KEYWORD1>
+   <KEYWORD1>LOCKING</KEYWORD1>
+   <KEYWORD1>LOW</KEYWORD1>
+   <KEYWORD1>LOW-VALUE</KEYWORD1>
+   <KEYWORD1>LOW-VALUES</KEYWORD1>
+   <KEYWORD1>LOWER</KEYWORD1>
+   <KEYWORD1>LOWLIGHT</KEYWORD1>
+
+   <KEYWORD1>MANUAL</KEYWORD1>
+   <KEYWORD1>MASTER-INDEX</KEYWORD1>
+   <KEYWORD1>MEMORY</KEYWORD1>
+   <KEYWORD1>MERGE</KEYWORD1>
+   <KEYWORD1>MESSAGE</KEYWORD1>
+   <KEYWORD1>METHOD</KEYWORD1>
+   <KEYWORD1>MODE</KEYWORD1>
+   <KEYWORD1>MODULES</KEYWORD1>
+   <KEYWORD1>MORE-LABELS</KEYWORD1>
+   <KEYWORD1>MOVE</KEYWORD1>
+   <KEYWORD1>MULTIPLE</KEYWORD1>
+   <KEYWORD1>MULTIPLY</KEYWORD1>
+
+   <KEYWORD1>NAME</KEYWORD1>
+   <KEYWORD1>NAMED</KEYWORD1>
+   <KEYWORD1>NATIONAL</KEYWORD1>
+   <KEYWORD1>NATIONAL-EDITED</KEYWORD1>
+   <KEYWORD1>NATIVE</KEYWORD1>
+   <KEYWORD1>NCHAR</KEYWORD1>
+   <KEYWORD1>NEGATIVE</KEYWORD1>
+   <KEYWORD1>NEXT</KEYWORD1>
+   <KEYWORD1>NO</KEYWORD1>
+   <KEYWORD1>NO-ECHO</KEYWORD1>
+   <KEYWORD1>NOMINAL</KEYWORD1>
+   <KEYWORD1>NOT</KEYWORD1>
+   <KEYWORD1>NOTE</KEYWORD1>
+   <KEYWORD1>NSTD-REELS</KEYWORD1>
+   <KEYWORD1>NULL</KEYWORD1>
+   <KEYWORD1>NULLS</KEYWORD1>
+   <KEYWORD1>NUMBER</KEYWORD1>
+   <KEYWORD1>NUMERIC</KEYWORD1>
+   <KEYWORD1>NUMERIC-EDITED</KEYWORD1>
+
+   <KEYWORD1>OBJECT</KEYWORD1>
+   <KEYWORD1>OBJECT-COMPUTER</KEYWORD1>
+   <KEYWORD1>OBJECT-STORAGE</KEYWORD1>
+   <KEYWORD1>OCCURS</KEYWORD1>
+   <KEYWORD1>OF</KEYWORD1>
+   <KEYWORD1>OFF</KEYWORD1>
+   <KEYWORD1>OMITTED</KEYWORD1>
+   <KEYWORD1>ON</KEYWORD1>
+   <KEYWORD1>OOSTACKPTR</KEYWORD1>
+   <KEYWORD1>OPEN</KEYWORD1>
+   <KEYWORD1>OPTIONAL</KEYWORD1>
+   <KEYWORD1>OR</KEYWORD1>
+   <KEYWORD1>ORDER</KEYWORD1>
+   <KEYWORD1>ORGANIZATION</KEYWORD1>
+   <KEYWORD1>OTHER</KEYWORD1>
+   <KEYWORD1>OTHERWISE</KEYWORD1>
+   <KEYWORD1>OUTPUT</KEYWORD1>
+   <KEYWORD1>OVERFLOW</KEYWORD1>
+   <KEYWORD1>OVERLINE</KEYWORD1>
+
+   <KEYWORD1>PACKED-DECIMAL</KEYWORD1>
+   <KEYWORD1>PADDING</KEYWORD1>
+   <KEYWORD1>PAGE</KEYWORD1>
+   <KEYWORD1>PAGE-COUNTER</KEYWORD1>
+   <KEYWORD1>PARAGRAPH</KEYWORD1>
+   <KEYWORD1>PASSWORD</KEYWORD1>
+   <KEYWORD1>PERFORM</KEYWORD1>
+   <KEYWORD1>PF</KEYWORD1>
+   <KEYWORD1>PH</KEYWORD1>
+   <KEYWORD1>PIC</KEYWORD1>
+   <KEYWORD1>PICTURE</KEYWORD1>
+   <KEYWORD1>PLUS</KEYWORD1>
+   <KEYWORD1>POINTER</KEYWORD1>
+   <KEYWORD1>POS</KEYWORD1>
+   <KEYWORD1>POSITION</KEYWORD1>
+   <KEYWORD1>POSITIONING</KEYWORD1>
+   <KEYWORD1>POSITIVE</KEYWORD1>
+   <KEYWORD1>PREVIOUS</KEYWORD1>
+   <KEYWORD1>PRINT</KEYWORD1>
+   <KEYWORD1>PRINT-SWITCH</KEYWORD1>
+   <KEYWORD1>PRINTER</KEYWORD1>
+   <KEYWORD1>PRINTER-1</KEYWORD1>
+   <KEYWORD1>PRINTING</KEYWORD1>
+   <KEYWORD1>PRIVATE</KEYWORD1>
+   <KEYWORD1>PROCEDURE</KEYWORD1>
+   <KEYWORD1>PROCEDURE-POINTER</KEYWORD1>
+   <KEYWORD1>PROCEDURES</KEYWORD1>
+   <KEYWORD1>PROCEED</KEYWORD1>
+   <KEYWORD1>PROCESSING</KEYWORD1>
+   <KEYWORD1>PROGRAM</KEYWORD1>
+   <KEYWORD1>PROGRAM-ID</KEYWORD1>
+   <KEYWORD1>PROMPT</KEYWORD1>
+   <KEYWORD1>PROTECTED</KEYWORD1>
+   <KEYWORD1>PUBLIC</KEYWORD1>
+   <KEYWORD1>PURGE</KEYWORD1>
+
+   <KEYWORD1>QUEUE</KEYWORD1>
+   <KEYWORD1>QUOTE</KEYWORD1>
+   <KEYWORD1>QUOTES</KEYWORD1>
+
+   <KEYWORD1>RANDOM</KEYWORD1>
+   <KEYWORD1>RANGE</KEYWORD1>
+   <KEYWORD1>RD</KEYWORD1>
+   <KEYWORD1>READ</KEYWORD1>
+   <KEYWORD1>READY</KEYWORD1>
+   <KEYWORD1>RECEIVE</KEYWORD1>
+   <KEYWORD1>RECORD</KEYWORD1>
+   <KEYWORD1>RECORD-OVERFLOW</KEYWORD1>
+   <KEYWORD1>RECORDING</KEYWORD1>
+   <KEYWORD1>RECORDS</KEYWORD1>
+   <KEYWORD1>REDEFINES</KEYWORD1>
+   <KEYWORD1>REEL</KEYWORD1>
+   <KEYWORD1>REFERENCE</KEYWORD1>
+   <KEYWORD1>REFERENCES</KEYWORD1>
+   <KEYWORD1>RELATIVE</KEYWORD1>
+   <KEYWORD1>RELEASE</KEYWORD1>
+   <KEYWORD1>RELOAD</KEYWORD1>
+   <KEYWORD1>REMAINDER</KEYWORD1>
+   <KEYWORD1>REMARKS</KEYWORD1>
+   <KEYWORD1>REMOVAL</KEYWORD1>
+   <KEYWORD1>RENAMES</KEYWORD1>
+   <KEYWORD1>REORG-CRITERIA</KEYWORD1>
+   <KEYWORD1>REPLACE</KEYWORD1>
+   <KEYWORD1>REPLACING</KEYWORD1>
+   <KEYWORD1>REPORT</KEYWORD1>
+   <KEYWORD1>REPORTING</KEYWORD1>
+   <KEYWORD1>REPORTS</KEYWORD1>
+   <KEYWORD1>REQUIRED</KEYWORD1>
+   <KEYWORD1>REREAD</KEYWORD1>
+   <KEYWORD1>RERUN</KEYWORD1>
+   <KEYWORD1>RESERVE</KEYWORD1>
+   <KEYWORD1>RESET</KEYWORD1>
+   <KEYWORD1>RETURN</KEYWORD1>
+   <KEYWORD1>RETURN-CODE</KEYWORD1>
+   <KEYWORD1>RETURNING</KEYWORD1>
+   <KEYWORD1>REVERSE</KEYWORD1>
+   <KEYWORD1>REVERSE-VIDEO</KEYWORD1>
+   <KEYWORD1>REVERSED</KEYWORD1>
+   <KEYWORD1>REWIND</KEYWORD1>
+   <KEYWORD1>REWRITE</KEYWORD1>
+   <KEYWORD1>RF</KEYWORD1>
+   <KEYWORD1>RH</KEYWORD1>
+   <KEYWORD1>RIGHT</KEYWORD1>
+   <KEYWORD1>RIGHT-JUSTIFY</KEYWORD1>
+   <KEYWORD1>ROLLBACK</KEYWORD1>
+   <KEYWORD1>ROUNDED</KEYWORD1>
+   <KEYWORD1>RUN</KEYWORD1>
+
+   <KEYWORD1>S01</KEYWORD1>
+   <KEYWORD1>S02</KEYWORD1>
+   <KEYWORD1>S03</KEYWORD1>
+   <KEYWORD1>S04</KEYWORD1>
+   <KEYWORD1>S05</KEYWORD1>
+   <KEYWORD1>SAME</KEYWORD1>
+   <KEYWORD1>SCREEN</KEYWORD1>
+   <KEYWORD1>SD</KEYWORD1>
+   <KEYWORD1>SEARCH</KEYWORD1>
+   <KEYWORD1>SECTION</KEYWORD1>
+   <KEYWORD1>SECURE</KEYWORD1>
+   <KEYWORD1>SECURITY</KEYWORD1>
+   <KEYWORD1>SEEK</KEYWORD1>
+   <KEYWORD1>SEGMENT</KEYWORD1>
+   <KEYWORD1>SEGMENT-LIMIT</KEYWORD1>
+   <KEYWORD1>SELECT</KEYWORD1>
+   <KEYWORD1>SELECTIVE</KEYWORD1>
+   <KEYWORD1>SEND</KEYWORD1>
+   <KEYWORD1>SENTENCE</KEYWORD1>
+   <KEYWORD1>SEPARATE</KEYWORD1>
+   <KEYWORD1>SEQUENCE</KEYWORD1>
+   <KEYWORD1>SEQUENTIAL</KEYWORD1>
+   <KEYWORD1>SERVICE</KEYWORD1>
+   <KEYWORD1>SET</KEYWORD1>
+   <KEYWORD1>SHIFT-IN</KEYWORD1>
+   <KEYWORD1>SHIFT-OUT</KEYWORD1>
+   <KEYWORD1>SIGN</KEYWORD1>
+   <KEYWORD1>SIZE</KEYWORD1>
+   <KEYWORD1>SKIP1</KEYWORD1>
+   <KEYWORD1>SKIP2</KEYWORD1>
+   <KEYWORD1>SKIP3</KEYWORD1>
+   <KEYWORD1>SORT</KEYWORD1>
+   <KEYWORD1>SORT-CONTROL</KEYWORD1>
+   <KEYWORD1>SORT-CORE-SIZE</KEYWORD1>
+   <KEYWORD1>SORT-FILE-SIZE</KEYWORD1>
+   <KEYWORD1>SORT-MERGE</KEYWORD1>
+   <KEYWORD1>SORT-MESSAGE</KEYWORD1>
+   <KEYWORD1>SORT-MODE-SIZE</KEYWORD1>
+   <KEYWORD1>SORT-OPTION</KEYWORD1>
+   <KEYWORD1>SORT-RETURN</KEYWORD1>
+   <KEYWORD1>SOURCE</KEYWORD1>
+   <KEYWORD1>SOURCE-COMPUTER</KEYWORD1>
+   <KEYWORD1>SPACE</KEYWORD1>
+   <KEYWORD1>SPACE-FILL</KEYWORD1>
+   <KEYWORD1>SPACES</KEYWORD1>
+   <KEYWORD1>SPECIAL-NAMES</KEYWORD1>
+   <KEYWORD1>STANDARD</KEYWORD1>
+   <KEYWORD1>STANDARD-1</KEYWORD1>
+   <KEYWORD1>STANDARD-2</KEYWORD1>
+   <KEYWORD1>START</KEYWORD1>
+   <KEYWORD1>STATUS</KEYWORD1>
+   <KEYWORD1>STOP</KEYWORD1>
+   <KEYWORD1>STORE</KEYWORD1>
+   <KEYWORD1>STRING</KEYWORD1>
+   <KEYWORD1>SUB-QUEUE-1</KEYWORD1>
+   <KEYWORD1>SUB-QUEUE-2</KEYWORD1>
+   <KEYWORD1>SUB-QUEUE-3</KEYWORD1>
+   <KEYWORD1>SUBTRACT</KEYWORD1>
+   <KEYWORD1>SUM</KEYWORD1>
+   <KEYWORD1>SUPER</KEYWORD1>
+   <KEYWORD1>SUPPRESS</KEYWORD1>
+   <KEYWORD1>SYMBOLIC</KEYWORD1>
+   <KEYWORD1>SYNC</KEYWORD1>
+   <KEYWORD1>SYNCHRONIZED</KEYWORD1>
+   <KEYWORD1>SYSIN</KEYWORD1>
+   <KEYWORD1>SYSIPT</KEYWORD1>
+   <KEYWORD1>SYSLST</KEYWORD1>
+   <KEYWORD1>SYSOUT</KEYWORD1>
+   <KEYWORD1>SYSPCH</KEYWORD1>
+   <KEYWORD1>SYSPUNCH</KEYWORD1>
+
+   <KEYWORD1>TAB</KEYWORD1>
+   <KEYWORD1>TABLE</KEYWORD1>
+   <KEYWORD1>TALLY</KEYWORD1>
+   <KEYWORD1>TALLYING</KEYWORD1>
+   <KEYWORD1>TAPE</KEYWORD1>
+   <KEYWORD1>TERMINAL</KEYWORD1>
+   <KEYWORD1>TERMINATE</KEYWORD1>
+   <KEYWORD1>TEST</KEYWORD1>
+   <KEYWORD1>TEXT</KEYWORD1>
+   <KEYWORD1>THAN</KEYWORD1>
+   <KEYWORD1>THEN</KEYWORD1>
+   <KEYWORD1>THROUGH</KEYWORD1>
+   <KEYWORD1>THRU</KEYWORD1>
+   <KEYWORD1>TIME</KEYWORD1>
+   <KEYWORD1>TIME-OF-DAY</KEYWORD1>
+   <KEYWORD1>TIME-OUT</KEYWORD1>
+   <KEYWORD1>TIMEOUT</KEYWORD1>
+   <KEYWORD1>TIMES</KEYWORD1>
+   <KEYWORD1>TITLE</KEYWORD1>
+   <KEYWORD1>TO</KEYWORD1>
+   <KEYWORD1>TOP</KEYWORD1>
+   <KEYWORD1>TOTALED</KEYWORD1>
+   <KEYWORD1>TOTALING</KEYWORD1>
+   <KEYWORD1>TRACE</KEYWORD1>
+   <KEYWORD1>TRACK-AREA</KEYWORD1>
+   <KEYWORD1>TRACK-LIMIT</KEYWORD1>
+   <KEYWORD1>TRACKS</KEYWORD1>
+   <KEYWORD1>TRAILING</KEYWORD1>
+   <KEYWORD1>TRAILING-SIGN</KEYWORD1>
+   <KEYWORD1>TRANSFORM</KEYWORD1>
+   <KEYWORD1>TRUE</KEYWORD1>
+   <KEYWORD1>TYPE</KEYWORD1>
+   <KEYWORD1>TYPEDEF</KEYWORD1>
+
+   <KEYWORD1>UNDERLINE</KEYWORD1>
+   <KEYWORD1>UNEQUAL</KEYWORD1>
+   <KEYWORD1>UNIT</KEYWORD1>
+   <KEYWORD1>UNLOCK</KEYWORD1>
+   <KEYWORD1>UNSTRING</KEYWORD1>
+   <KEYWORD1>UNTIL</KEYWORD1>
+   <KEYWORD1>UP</KEYWORD1>
+   <KEYWORD1>UPDATE</KEYWORD1>
+   <KEYWORD1>UPON</KEYWORD1>
+   <KEYWORD1>UPPER</KEYWORD1>
+   <KEYWORD1>UPSI-0</KEYWORD1>
+   <KEYWORD1>UPSI-1</KEYWORD1>
+   <KEYWORD1>UPSI-2</KEYWORD1>
+   <KEYWORD1>UPSI-3</KEYWORD1>
+   <KEYWORD1>UPSI-4</KEYWORD1>
+   <KEYWORD1>UPSI-5</KEYWORD1>
+   <KEYWORD1>UPSI-6</KEYWORD1>
+   <KEYWORD1>UPSI-7</KEYWORD1>
+   <KEYWORD1>USAGE</KEYWORD1>
+   <KEYWORD1>USE</KEYWORD1>
+   <KEYWORD1>USER</KEYWORD1>
+   <KEYWORD1>USING</KEYWORD1>
+
+   <KEYWORD1>VALUE</KEYWORD1>
+   <KEYWORD1>VALUES</KEYWORD1>
+   <KEYWORD1>VARIABLE</KEYWORD1>
+   <KEYWORD1>VARYING</KEYWORD1>
+
+   <KEYWORD1>WAIT</KEYWORD1>
+   <KEYWORD1>WHEN</KEYWORD1>
+   <KEYWORD1>WHEN-COMPILED</KEYWORD1>
+   <KEYWORD1>WITH</KEYWORD1>
+   <KEYWORD1>WORDS</KEYWORD1>
+   <KEYWORD1>WORKING-STORAGE</KEYWORD1>
+   <KEYWORD1>WRITE</KEYWORD1>
+   <KEYWORD1>WRITE-ONLY</KEYWORD1>
+   <KEYWORD1>WRITE-VERIFY</KEYWORD1>
+
+   <KEYWORD1>ZERO</KEYWORD1>
+   <KEYWORD1>ZERO-FILL</KEYWORD1>
+   <KEYWORD1>ZEROES</KEYWORD1>
+   <KEYWORD1>ZEROS</KEYWORD1>
+
+   <KEYWORD2>ACOS</KEYWORD2>
+   <KEYWORD2>ANNUITY</KEYWORD2>
+   <KEYWORD2>ASIN</KEYWORD2>
+   <KEYWORD2>ATAN</KEYWORD2>
+   <KEYWORD2>CHAR</KEYWORD2>
+   <KEYWORD2>COS</KEYWORD2>
+   <KEYWORD2>CURRENT-DATE</KEYWORD2>
+   <KEYWORD2>DATE-OF-INTEGER</KEYWORD2>
+   <KEYWORD2>DAY-OF-INTEGER</KEYWORD2>
+   <KEYWORD2>FACTORIAL</KEYWORD2>
+   <KEYWORD2>INTEGER</KEYWORD2>
+   <KEYWORD2>INTEGER-OF-DATE</KEYWORD2>
+   <KEYWORD2>INTEGER-OF-DAY</KEYWORD2>
+   <KEYWORD2>INTEGER-PART</KEYWORD2>
+   <!-- <KEYWORD2>LENGTH</KEYWORD2> -->
+   <KEYWORD2>LOG</KEYWORD2>
+   <KEYWORD2>LOG10</KEYWORD2>
+   <KEYWORD2>LOWER-CASE</KEYWORD2>
+   <KEYWORD2>MAX</KEYWORD2>
+   <KEYWORD2>MEAN</KEYWORD2>
+   <KEYWORD2>MEDIAN</KEYWORD2>
+   <KEYWORD2>MIDRANGE</KEYWORD2>
+   <KEYWORD2>MIN</KEYWORD2>
+   <KEYWORD2>MOD</KEYWORD2>
+   <KEYWORD2>NUMVAL</KEYWORD2>
+   <KEYWORD2>NUMVAL-C</KEYWORD2>
+   <KEYWORD2>ORD</KEYWORD2>
+   <KEYWORD2>ORD-MAX</KEYWORD2>
+   <KEYWORD2>ORD-MIN</KEYWORD2>
+   <KEYWORD2>PRESENT-VALUE</KEYWORD2>
+   <KEYWORD2>RANDOM</KEYWORD2>
+   <KEYWORD2>RANGE</KEYWORD2>
+   <KEYWORD2>REM</KEYWORD2>
+   <KEYWORD2>REVERSE</KEYWORD2>
+   <KEYWORD2>SIN</KEYWORD2>
+   <KEYWORD2>SQRT</KEYWORD2>
+   <KEYWORD2>STANDARD-DEVIATION</KEYWORD2>
+   <KEYWORD2>SUM</KEYWORD2>
+   <KEYWORD2>TAN</KEYWORD2>
+   <KEYWORD2>UPPER-CASE</KEYWORD2>
+   <KEYWORD2>VARIANCE</KEYWORD2>
+   <KEYWORD2>WHEN-COMPILED</KEYWORD2>
+
+   <!-- Oracle/SQL - Reserved Words
+   <KEYWORD3>ACCESS</KEYWORD3>
+   <KEYWORD3>ADD</KEYWORD3>
+   <KEYWORD3>ALL</KEYWORD3>
+   <KEYWORD3>ALTER</KEYWORD3>
+   <KEYWORD3>AND</KEYWORD3>
+   <KEYWORD3>ANY</KEYWORD3>
+   <KEYWORD3>ARRAYLEN</KEYWORD3>
+   <KEYWORD3>AS</KEYWORD3>
+   <KEYWORD3>ASC</KEYWORD3>
+   <KEYWORD3>AUDIT</KEYWORD3>
+   <KEYWORD3>BETWEEN</KEYWORD3>
+   <KEYWORD3>BY</KEYWORD3>
+   <KEYWORD3>CHAR</KEYWORD3>
+   <KEYWORD3>CHECK</KEYWORD3>
+   <KEYWORD3>CLUSTER</KEYWORD3>
+   <KEYWORD3>COLUMN</KEYWORD3>
+   <KEYWORD3>COMMENT</KEYWORD3>
+   <KEYWORD3>COMPRESS</KEYWORD3>
+   <KEYWORD3>CONNECT</KEYWORD3>
+   <KEYWORD3>CREATE</KEYWORD3>
+   <KEYWORD3>CURRENT</KEYWORD3>
+   <KEYWORD3>DATE</KEYWORD3>
+   <KEYWORD3>DECIMAL</KEYWORD3>
+   <KEYWORD3>DEFAULT</KEYWORD3>
+   <KEYWORD3>DELETE</KEYWORD3>
+   <KEYWORD3>DESC</KEYWORD3>
+   <KEYWORD3>DISTINCT</KEYWORD3>
+   <KEYWORD3>DROP</KEYWORD3>
+   <KEYWORD3>ELSE</KEYWORD3>
+   <KEYWORD3>EXCLUSIVE</KEYWORD3>
+   <KEYWORD3>EXEC</KEYWORD3>
+   <KEYWORD3>END-EXEC</KEYWORD3>
+   <KEYWORD3>EXISTS</KEYWORD3>
+   <KEYWORD3>FILE</KEYWORD3>
+   <KEYWORD3>FLOAT</KEYWORD3>
+   <KEYWORD3>FOR</KEYWORD3>
+   <KEYWORD3>FROM</KEYWORD3>
+   <KEYWORD3>GRANT</KEYWORD3>
+   <KEYWORD3>GROUP</KEYWORD3>
+   <KEYWORD3>HAVING</KEYWORD3>
+   <KEYWORD3>IDENTIFIED</KEYWORD3>
+   <KEYWORD3>IMMEDIATE</KEYWORD3>
+   <KEYWORD3>IN</KEYWORD3>
+   <KEYWORD3>INCREMENT</KEYWORD3>
+   <KEYWORD3>INDEX</KEYWORD3>
+   <KEYWORD3>INITIAL</KEYWORD3>
+   <KEYWORD3>INSERT</KEYWORD3>
+   <KEYWORD3>INTEGER</KEYWORD3>
+   <KEYWORD3>INTERSECT</KEYWORD3>
+   <KEYWORD3>INTO</KEYWORD3>
+   <KEYWORD3>IS</KEYWORD3>
+   <KEYWORD3>LEVEL</KEYWORD3>
+   <KEYWORD3>LIKE</KEYWORD3>
+   <KEYWORD3>LOCK</KEYWORD3>
+   <KEYWORD3>LONG</KEYWORD3>
+   <KEYWORD3>MAXEXTENTS</KEYWORD3>
+   <KEYWORD3>MINUS</KEYWORD3>
+   <KEYWORD3>MODE</KEYWORD3>
+   <KEYWORD3>MODIFY</KEYWORD3>
+   <KEYWORD3>NOAUDIT</KEYWORD3>
+   <KEYWORD3>NOCOMPRESS</KEYWORD3>
+   <KEYWORD3>NOT</KEYWORD3>
+   <KEYWORD3>NOTFOUND</KEYWORD3>
+   <KEYWORD3>NOWAIT</KEYWORD3>
+   <KEYWORD3>NULL</KEYWORD3>
+   <KEYWORD3>NUMBER</KEYWORD3>
+   <KEYWORD3>OF</KEYWORD3>
+   <KEYWORD3>OFFLINE</KEYWORD3>
+   <KEYWORD3>ON</KEYWORD3>
+   <KEYWORD3>ONLINE</KEYWORD3>
+   <KEYWORD3>OPTION</KEYWORD3>
+   <KEYWORD3>OR</KEYWORD3>
+   <KEYWORD3>ORDER</KEYWORD3>
+   <KEYWORD3>PCTFREE</KEYWORD3>
+   <KEYWORD3>PRIOR</KEYWORD3>
+   <KEYWORD3>PRIVILEGES</KEYWORD3>
+   <KEYWORD3>PUBLIC</KEYWORD3>
+   <KEYWORD3>RAW</KEYWORD3>
+   <KEYWORD3>RENAME</KEYWORD3>
+   <KEYWORD3>RESOURCE</KEYWORD3>
+   <KEYWORD3>REVOKE</KEYWORD3>
+   <KEYWORD3>ROW</KEYWORD3>
+   <KEYWORD3>ROWID</KEYWORD3>
+   <KEYWORD3>ROWLABEL</KEYWORD3>
+   <KEYWORD3>ROWNUM</KEYWORD3>
+   <KEYWORD3>ROWS</KEYWORD3>
+   <KEYWORD3>START</KEYWORD3>
+   <KEYWORD3>SELECT</KEYWORD3>
+   <KEYWORD3>SESSION</KEYWORD3>
+   <KEYWORD3>SET</KEYWORD3>
+   <KEYWORD3>SHARE</KEYWORD3>
+   <KEYWORD3>SIZE</KEYWORD3>
+   <KEYWORD3>SMALLINT</KEYWORD3>
+   <KEYWORD3>SQLBUF</KEYWORD3>
+   <KEYWORD3>SUCCESSFUL</KEYWORD3>
+   <KEYWORD3>SYNONYM</KEYWORD3>
+   <KEYWORD3>SYSDATE</KEYWORD3>
+   <KEYWORD3>TABLE</KEYWORD3>
+   <KEYWORD3>THEN</KEYWORD3>
+   <KEYWORD3>TO</KEYWORD3>
+   <KEYWORD3>TRIGGER</KEYWORD3>
+   <KEYWORD3>UID</KEYWORD3>
+   <KEYWORD3>UNION</KEYWORD3>
+   <KEYWORD3>UNIQUE</KEYWORD3>
+   <KEYWORD3>UPDATE</KEYWORD3>
+   <KEYWORD3>USER</KEYWORD3>
+   <KEYWORD3>VALIDATE</KEYWORD3>
+   <KEYWORD3>VALUES</KEYWORD3>
+   <KEYWORD3>VARCHAR</KEYWORD3>
+   <KEYWORD3>VARCHAR2</KEYWORD3>
+   <KEYWORD3>VIEW</KEYWORD3>
+   <KEYWORD3>WHENEVER</KEYWORD3>
+   <KEYWORD3>WHERE</KEYWORD3>
+   <KEYWORD3>WITH</KEYWORD3>
+   -->
+
+   <!-- Oracle/SQL - Keywords
+   <KEYWORD3>ADMIN</KEYWORD3>
+   <KEYWORD3>AFTER</KEYWORD3>
+   <KEYWORD3>ALLOCATE</KEYWORD3>
+   <KEYWORD3>ANALYZE</KEYWORD3>
+   <KEYWORD3>ARCHIVE</KEYWORD3>
+   <KEYWORD3>ARCHIVELOG</KEYWORD3>
+   <KEYWORD3>AUTHORIZATION</KEYWORD3>
+   <KEYWORD3>AVG</KEYWORD3>
+   <KEYWORD3>BACKUP</KEYWORD3>
+   <KEYWORD3>BEGIN</KEYWORD3>
+   <KEYWORD3>BECOME</KEYWORD3>
+   <KEYWORD3>BEFORE</KEYWORD3>
+   <KEYWORD3>BLOCK</KEYWORD3>
+   <KEYWORD3>BODY</KEYWORD3>
+   <KEYWORD3>CACHE</KEYWORD3>
+   <KEYWORD3>CANCEL</KEYWORD3>
+   <KEYWORD3>CASCADE</KEYWORD3>
+   <KEYWORD3>CHANGE</KEYWORD3>
+   <KEYWORD3>CHARACTER</KEYWORD3>
+   <KEYWORD3>CHECKPOINT</KEYWORD3>
+   <KEYWORD3>CLOSE</KEYWORD3>
+   <KEYWORD3>COBOL</KEYWORD3>
+   <KEYWORD3>COMMIT</KEYWORD3>
+   <KEYWORD3>COMPILE</KEYWORD3>
+   <KEYWORD3>CONSTRAINT</KEYWORD3>
+   <KEYWORD3>CONSTRAINTS</KEYWORD3>
+   <KEYWORD3>CONTENTS</KEYWORD3>
+   <KEYWORD3>CONTINUE</KEYWORD3>
+   <KEYWORD3>CONTROLFILE</KEYWORD3>
+   <KEYWORD3>COUNT</KEYWORD3>
+   <KEYWORD3>DBA</KEYWORD3>
+   <KEYWORD3>CURSOR</KEYWORD3>
+   <KEYWORD3>CYCLE</KEYWORD3>
+   <KEYWORD3>DATABASE</KEYWORD3>
+   <KEYWORD3>DATAFILE</KEYWORD3>
+   <KEYWORD3>DEC</KEYWORD3>
+   <KEYWORD3>DECLARE</KEYWORD3>
+   <KEYWORD3>DISABLE</KEYWORD3>
+   <KEYWORD3>DISMOUNT</KEYWORD3>
+   <KEYWORD3>DOUBLE</KEYWORD3>
+   <KEYWORD3>DUMP</KEYWORD3>
+   <KEYWORD3>EACH</KEYWORD3>
+   <KEYWORD3>ENABLE</KEYWORD3>
+   <KEYWORD3>END</KEYWORD3>
+   <KEYWORD3>ESCAPE</KEYWORD3>
+   <KEYWORD3>EVENTS</KEYWORD3>
+   <KEYWORD3>EXCEPT</KEYWORD3>
+   <KEYWORD3>EXCEPTIONS</KEYWORD3>
+   <KEYWORD3>EXEC</KEYWORD3>
+   <KEYWORD3>EXPLAIN</KEYWORD3>
+   <KEYWORD3>EXECUTE</KEYWORD3>
+   <KEYWORD3>EXTENT</KEYWORD3>
+   <KEYWORD3>EXTERNALLY</KEYWORD3>
+   <KEYWORD3>FETCH</KEYWORD3>
+   <KEYWORD3>FLUSH</KEYWORD3>
+   <KEYWORD3>FREELIST</KEYWORD3>
+   <KEYWORD3>FREELISTS</KEYWORD3>
+   <KEYWORD3>FORCE</KEYWORD3>
+   <KEYWORD3>FOREIGN</KEYWORD3>
+   <KEYWORD3>FORTRAN</KEYWORD3>
+   <KEYWORD3>FOUND</KEYWORD3>
+   <KEYWORD3>FUNCTION</KEYWORD3>
+   <KEYWORD3>GO</KEYWORD3>
+   <KEYWORD3>GOTO</KEYWORD3>
+   <KEYWORD3>GROUPS</KEYWORD3>
+   <KEYWORD3>INCLUDING</KEYWORD3>
+   <KEYWORD3>INDICATOR</KEYWORD3>
+   <KEYWORD3>INITRANS</KEYWORD3>
+   <KEYWORD3>INSTANCE</KEYWORD3>
+   <KEYWORD3>INT</KEYWORD3>
+   <KEYWORD3>KEY</KEYWORD3>
+   <KEYWORD3>LANGUAGE</KEYWORD3>
+   <KEYWORD3>LAYER</KEYWORD3>
+   <KEYWORD3>LINK</KEYWORD3>
+   <KEYWORD3>LISTS</KEYWORD3>
+   <KEYWORD3>LOGFILE</KEYWORD3>
+   <KEYWORD3>MANAGE</KEYWORD3>
+   <KEYWORD3>MANUAL</KEYWORD3>
+   <KEYWORD3>MAX</KEYWORD3>
+   <KEYWORD3>MAXDATAFILES</KEYWORD3>
+   <KEYWORD3>MAXINSTANCES</KEYWORD3>
+   <KEYWORD3>MAXLOGFILES</KEYWORD3>
+   <KEYWORD3>MAXLOGHISTORY</KEYWORD3>
+   <KEYWORD3>MAXLOGMEMBERS</KEYWORD3>
+   <KEYWORD3>MAXTRANS</KEYWORD3>
+   <KEYWORD3>MAXVALUE</KEYWORD3>
+   <KEYWORD3>MIN</KEYWORD3>
+   <KEYWORD3>MINEXTENTS</KEYWORD3>
+   <KEYWORD3>MINVALUE</KEYWORD3>
+   <KEYWORD3>MODULE</KEYWORD3>
+   <KEYWORD3>MOUNT</KEYWORD3>
+   <KEYWORD3>NEXT</KEYWORD3>
+   <KEYWORD3>NEW</KEYWORD3>
+   <KEYWORD3>NOARCHIVELOG</KEYWORD3>
+   <KEYWORD3>NOCACHE</KEYWORD3>
+   <KEYWORD3>NOCYCLE</KEYWORD3>
+   <KEYWORD3>NOMAXVALUE</KEYWORD3>
+   <KEYWORD3>NOMINVALUE</KEYWORD3>
+   <KEYWORD3>NONE</KEYWORD3>
+   <KEYWORD3>NOORDER</KEYWORD3>
+   <KEYWORD3>NORESETLOGS</KEYWORD3>
+   <KEYWORD3>NORMAL</KEYWORD3>
+   <KEYWORD3>NOSORT</KEYWORD3>
+   <KEYWORD3>NUMERIC</KEYWORD3>
+   <KEYWORD3>OFF</KEYWORD3>
+   <KEYWORD3>OLD</KEYWORD3>
+   <KEYWORD3>ONLY</KEYWORD3>
+   <KEYWORD3>OPEN</KEYWORD3>
+   <KEYWORD3>OPTIMAL</KEYWORD3>
+   <KEYWORD3>OWN</KEYWORD3>
+   <KEYWORD3>PACKAGE</KEYWORD3>
+   <KEYWORD3>PARALLEL</KEYWORD3>
+   <KEYWORD3>PCTINCREASE</KEYWORD3>
+   <KEYWORD3>PCTUSED</KEYWORD3>
+   <KEYWORD3>PLAN</KEYWORD3>
+   <KEYWORD3>PLI</KEYWORD3>
+   <KEYWORD3>PRECISION</KEYWORD3>
+   <KEYWORD3>PRIMARY</KEYWORD3>
+   <KEYWORD3>PRIVATE</KEYWORD3>
+   <KEYWORD3>PROCEDURE</KEYWORD3>
+   <KEYWORD3>PROFILE</KEYWORD3>
+   <KEYWORD3>QUOTA</KEYWORD3>
+   <KEYWORD3>READ</KEYWORD3>
+   <KEYWORD3>REAL</KEYWORD3>
+   <KEYWORD3>RECOVER</KEYWORD3>
+   <KEYWORD3>REFERENCES</KEYWORD3>
+   <KEYWORD3>REFERENCING</KEYWORD3>
+   <KEYWORD3>RESETLOGS</KEYWORD3>
+   <KEYWORD3>RESTRICTED</KEYWORD3>
+   <KEYWORD3>REUSE</KEYWORD3>
+   <KEYWORD3>ROLE</KEYWORD3>
+   <KEYWORD3>ROLES</KEYWORD3>
+   <KEYWORD3>ROLLBACK</KEYWORD3>
+   <KEYWORD3>SAVEPOINT</KEYWORD3>
+   <KEYWORD3>SCHEMA</KEYWORD3>
+   <KEYWORD3>SCN</KEYWORD3>
+   <KEYWORD3>SECTION</KEYWORD3>
+   <KEYWORD3>SEGMENT</KEYWORD3>
+   <KEYWORD3>SEQUENCE</KEYWORD3>
+   <KEYWORD3>SHARED</KEYWORD3>
+   <KEYWORD3>SNAPSHOT</KEYWORD3>
+   <KEYWORD3>SOME</KEYWORD3>
+   <KEYWORD3>SORT</KEYWORD3>
+   <KEYWORD3>SQL</KEYWORD3>
+   <KEYWORD3>SQLCODE</KEYWORD3>
+   <KEYWORD3>SQLERROR</KEYWORD3>
+   <KEYWORD3>SQLSTATE</KEYWORD3>
+   <KEYWORD3>STATEMENT_ID</KEYWORD3>
+   <KEYWORD3>STATISTICS</KEYWORD3>
+   <KEYWORD3>STOP</KEYWORD3>
+   <KEYWORD3>STORAGE</KEYWORD3>
+   <KEYWORD3>SUM</KEYWORD3>
+   <KEYWORD3>SWITCH</KEYWORD3>
+   <KEYWORD3>SYSTEM</KEYWORD3>
+   <KEYWORD3>TABLES</KEYWORD3>
+   <KEYWORD3>TABLESPACE</KEYWORD3>
+   <KEYWORD3>TEMPORARY</KEYWORD3>
+   <KEYWORD3>THREAD</KEYWORD3>
+   <KEYWORD3>TIME</KEYWORD3>
+   <KEYWORD3>TRACING</KEYWORD3>
+   <KEYWORD3>TRANSACTION</KEYWORD3>
+   <KEYWORD3>TRIGGERS</KEYWORD3>
+   <KEYWORD3>TRUNCATE</KEYWORD3>
+   <KEYWORD3>UNDER</KEYWORD3>
+   <KEYWORD3>UNLIMITED</KEYWORD3>
+   <KEYWORD3>UNTIL</KEYWORD3>
+   <KEYWORD3>USE</KEYWORD3>
+   <KEYWORD3>USING</KEYWORD3>
+   <KEYWORD3>WHEN</KEYWORD3>
+   <KEYWORD3>WRITE</KEYWORD3>
+   <KEYWORD3>WORK</KEYWORD3>
+   -->
+
+   <LITERAL2>[COPY-PREFIX]</LITERAL2>
+   <LITERAL2>[COUNT]</LITERAL2>
+   <LITERAL2>[DISPLAY]</LITERAL2>
+   <LITERAL2>[EXECUTE]</LITERAL2>
+   <LITERAL2>[PG]</LITERAL2>
+   <LITERAL2>[PREFIX]</LITERAL2>
+   <LITERAL2>[PROGRAM]</LITERAL2>
+   <LITERAL2>[SPECIAL-PREFIX]</LITERAL2>
+   <LITERAL2>[TESTCASE]</LITERAL2>
+  </KEYWORDS>
+ </RULES>
 </MODE>
diff --git a/modes/css.xml b/modes/css.xml
index 35e211c..2b7e097 100644
--- a/modes/css.xml
+++ b/modes/css.xml
@@ -84,7 +84,7 @@
 		<IMPORT DELEGATE="GLOBAL" />
 
 		<KEYWORDS>
-			<!-- CSS2 properties -->
+			<!-- CSS2 & 3 properties -->
 
 			<!-- Color and background properties -->
 			<KEYWORD2>background</KEYWORD2>
@@ -93,13 +93,17 @@
 			<KEYWORD2>background-image</KEYWORD2>
 			<KEYWORD2>background-position</KEYWORD2>
 			<KEYWORD2>background-repeat</KEYWORD2>
+			<KEYWORD2>background-origin</KEYWORD2>
+			<KEYWORD2>background-clip</KEYWORD2>
+			<KEYWORD2>background-size</KEYWORD2>
 			<KEYWORD2>color</KEYWORD2>
+			<KEYWORD2>opacity</KEYWORD2>
+			<KEYWORD2>rendering-intent</KEYWORD2>
 
 			<!-- Font properties -->
 			<KEYWORD2>font</KEYWORD2>
 			<KEYWORD2>font-family</KEYWORD2>
 			<KEYWORD2>font-size</KEYWORD2>
-			<KEYWORD2>font-size-adjust</KEYWORD2>
 			<KEYWORD2>font-style</KEYWORD2>
 			<KEYWORD2>font-variant</KEYWORD2>
 			<KEYWORD2>font-weight</KEYWORD2>
@@ -127,38 +131,53 @@
 			<KEYWORD2>text-shadow</KEYWORD2>
 			<KEYWORD2>text-decoration</KEYWORD2>
 			<KEYWORD2>text-indent</KEYWORD2>
+			<KEYWORD2>text-justify</KEYWORD2>
 			<KEYWORD2>text-overflow</KEYWORD2>
 			<KEYWORD2>text-transform</KEYWORD2>
+			<KEYWORD2>word-break</KEYWORD2>
 			<KEYWORD2>word-spacing</KEYWORD2>
+			<KEYWORD2>word-wrap</KEYWORD2>
 			<KEYWORD2>letter-spacing</KEYWORD2>
 			<KEYWORD2>white-space</KEYWORD2>
 
 			<!-- Box properties -->
 			<KEYWORD2>border</KEYWORD2>
 			<KEYWORD2>bottom</KEYWORD2>
-			<KEYWORD2>border-collapse</KEYWORD2>
-			<KEYWORD2>border-spacing</KEYWORD2>
+			<KEYWORD2>border</KEYWORD2>
 			<KEYWORD2>border-bottom</KEYWORD2>
+			<KEYWORD2>border-bottom-color</KEYWORD2>
 			<KEYWORD2>border-bottom-style</KEYWORD2>
 			<KEYWORD2>border-bottom-width</KEYWORD2>
-			<KEYWORD2>border-bottom-color</KEYWORD2>
-			<KEYWORD2>border-bottom-left-radius</KEYWORD2>
-			<KEYWORD2>border-bottom-right-radius</KEYWORD2>
+			<KEYWORD2>border-collapse</KEYWORD2>
+			<KEYWORD2>border-color</KEYWORD2>
 			<KEYWORD2>border-left</KEYWORD2>
+			<KEYWORD2>border-left-color</KEYWORD2>
 			<KEYWORD2>border-left-style</KEYWORD2>
 			<KEYWORD2>border-left-width</KEYWORD2>
-			<KEYWORD2>border-left-color</KEYWORD2>
 			<KEYWORD2>border-right</KEYWORD2>
+			<KEYWORD2>border-right-color</KEYWORD2>
 			<KEYWORD2>border-right-style</KEYWORD2>
 			<KEYWORD2>border-right-width</KEYWORD2>
-			<KEYWORD2>border-right-color</KEYWORD2>
+			<KEYWORD2>border-spacing</KEYWORD2>
+			<KEYWORD2>border-style</KEYWORD2>
 			<KEYWORD2>border-top</KEYWORD2>
+			<KEYWORD2>border-top-color</KEYWORD2>
 			<KEYWORD2>border-top-style</KEYWORD2>
 			<KEYWORD2>border-top-width</KEYWORD2>
-			<KEYWORD2>border-top-color</KEYWORD2>
-			<KEYWORD2>border-color</KEYWORD2>
-			<KEYWORD2>border-style</KEYWORD2>
 			<KEYWORD2>border-width</KEYWORD2>
+			<KEYWORD2>border-bottom-left-radius</KEYWORD2>
+			<KEYWORD2>border-bottom-right-radius</KEYWORD2>
+			<KEYWORD2>border-radius</KEYWORD2>
+			<KEYWORD2>border-top-left-radius</KEYWORD2>
+			<KEYWORD2>border-top-right-radius</KEYWORD2>
+			<KEYWORD2>box-align</KEYWORD2>
+			<KEYWORD2>box-direction</KEYWORD2>
+			<KEYWORD2>box-flex</KEYWORD2>
+			<KEYWORD2>box-ordinal-group</KEYWORD2>
+			<KEYWORD2>box-orient</KEYWORD2>
+			<KEYWORD2>box-pack</KEYWORD2>
+			<KEYWORD2>box-sizing</KEYWORD2>
+			<KEYWORD2>box-shadow</KEYWORD2>
 			<KEYWORD2>clear</KEYWORD2>
 			<KEYWORD2>float</KEYWORD2>
 			<KEYWORD2>height</KEYWORD2>
@@ -172,7 +191,21 @@
 			<KEYWORD2>padding-left</KEYWORD2>
 			<KEYWORD2>padding-right</KEYWORD2>
 			<KEYWORD2>padding-top</KEYWORD2>
-			<KEYWORD2>clear</KEYWORD2>
+			
+			<KEYWORD2>column-count</KEYWORD2>
+			<KEYWORD2>column-fill</KEYWORD2>
+			<KEYWORD2>column-gap</KEYWORD2>
+			<KEYWORD2>column-rule</KEYWORD2>
+			<KEYWORD2>column-rule-color</KEYWORD2>
+			<KEYWORD2>column-rule-style</KEYWORD2>
+			<KEYWORD2>column-rule-width</KEYWORD2>
+			<KEYWORD2>column-span</KEYWORD2>
+			<KEYWORD2>column-width</KEYWORD2>
+			<KEYWORD2>columns</KEYWORD2>
+			
+			<KEYWORD2>handing-punctuation</KEYWORD2>
+			
+			
 
 			<!-- Visual formatting properties -->
 			<KEYWORD2>display</KEYWORD2>
@@ -196,16 +229,25 @@
 
 			<!-- Visual effects -->
 			<KEYWORD2>overflow</KEYWORD2>
+			<KEYWORD2>overflow-x</KEYWORD2>
+			<KEYWORD2>overflow-y</KEYWORD2>
 			<KEYWORD2>clip</KEYWORD2>
 			<KEYWORD2>visibility</KEYWORD2>
+			<KEYWORD2>perspective</KEYWORD2>
+			<KEYWORD2>perspective-origin</KEYWORD2>
+			<KEYWORD2>transform</KEYWORD2>
+			<KEYWORD2>transform-origin</KEYWORD2>
+			<KEYWORD2>transform-style</KEYWORD2>
+			<KEYWORD2>transition</KEYWORD2>
+			<KEYWORD2>transition-property</KEYWORD2>
+			<KEYWORD2>transition-duration</KEYWORD2>
+			<KEYWORD2>transition-timing-function</KEYWORD2>
+			<KEYWORD2>transition-delay</KEYWORD2>
 
 			<!-- Page properties -->
-			<KEYWORD2>size</KEYWORD2>
-			<KEYWORD2>marks</KEYWORD2>
 			<KEYWORD2>page-break-before</KEYWORD2>
 			<KEYWORD2>page-break-after</KEYWORD2>
 			<KEYWORD2>page-break-inside</KEYWORD2>
-			<KEYWORD2>page</KEYWORD2>
 			<KEYWORD2>orphans</KEYWORD2>
 			<KEYWORD2>widows</KEYWORD2>
 
@@ -223,6 +265,7 @@
 			<KEYWORD2>outline-width</KEYWORD2>
 			<KEYWORD2>outline-style</KEYWORD2>
 			<KEYWORD2>outline-color</KEYWORD2>
+			<KEYWORD2>outline-offset</KEYWORD2>
 
 			<!-- Aural properties -->
 			<KEYWORD2>azimuth</KEYWORD2>
@@ -245,6 +288,115 @@
 			<KEYWORD2>speak-punctuation</KEYWORD2>
 			<KEYWORD2>speak-numeral</KEYWORD2>
 			<KEYWORD2>speak-header-cell</KEYWORD2>
+			
+			<KEYWORD2>animation</KEYWORD2>
+			<KEYWORD2>animation-name</KEYWORD2>
+			<KEYWORD2>animation-duration</KEYWORD2>
+			<KEYWORD2>animation-timing-function</KEYWORD2>
+			<KEYWORD2>animation-delay</KEYWORD2>
+			<KEYWORD2>animation-iteration-count</KEYWORD2>
+			<KEYWORD2>animation-direction</KEYWORD2>
+			<KEYWORD2>animation-play-state</KEYWORD2>
+			
+			<KEYWORD2>appearance</KEYWORD2>
+			
+			<!-- these properties are proposed for css3, but are either not
+			supported by any browser or are specific to a single browser. -->
+			<INVALID>alignment-adjust</INVALID> 					
+			<INVALID>alignment-baseline</INVALID>			
+			<INVALID>backface-visibility</INVALID> 					
+			<INVALID>baseline-shift</INVALID> 					
+			<INVALID>bookmark-label</INVALID> 					
+			<INVALID>bookmark-level</INVALID> 					
+			<INVALID>bookmark-target</INVALID>	
+			<INVALID>border-image</INVALID> 					
+			<INVALID>border-image-outset</INVALID> 					
+			<INVALID>border-image-repeat</INVALID> 					
+			<INVALID>border-image-slice</INVALID> 					
+			<INVALID>border-image-source</INVALID> 					
+			<INVALID>border-image-width</INVALID>
+			<INVALID>box-decoration-break</INVALID>
+			<INVALID>box-flex-group</INVALID> 					
+			<INVALID>box-lines</INVALID>
+			<INVALID>color-profile</INVALID> 					
+			<INVALID>column-fill</INVALID>
+			<INVALID>crop</INVALID> 					
+			<INVALID>dominant-baseline</INVALID> 					
+			<INVALID>drop-initial-after-adjust</INVALID> 					
+			<INVALID>drop-initial-after-align</INVALID> 					
+			<INVALID>drop-initial-before-adjust</INVALID> 					
+			<INVALID>drop-initial-before-align</INVALID> 					
+			<INVALID>drop-initial-size</INVALID> 					
+			<INVALID>drop-initial-value</INVALID> 					
+			<INVALID>fit</INVALID> 					
+			<INVALID>fit-position</INVALID> 					
+			<INVALID>float-offset</INVALID>
+			<INVALID>font-stretch</INVALID> 					
+			<INVALID>font-size-adjust</INVALID> 					
+			<INVALID>grid-columns</INVALID> 					
+			<INVALID>grid-rows</INVALID> 					
+			<INVALID>hanging-punctuation</INVALID> 					
+			<INVALID>hyphenate-after</INVALID> 					
+			<INVALID>hyphenate-before</INVALID> 					
+			<INVALID>hyphenate-characters</INVALID> 					
+			<INVALID>hyphenate-lines</INVALID> 					
+			<INVALID>hyphenate-resource</INVALID> 					
+			<INVALID>hyphens</INVALID> 					
+			<INVALID>icon</INVALID> 					
+			<INVALID>image-orientation</INVALID> 					
+			<INVALID>image-resolution</INVALID>
+			<INVALID>inline-box-align</INVALID> 					
+			<INVALID>line-stacking</INVALID> 					
+			<INVALID>line-stacking-ruby</INVALID> 					
+			<INVALID>line-stacking-shift</INVALID> 					
+			<INVALID>line-stacking-strategy</INVALID> 					
+			<INVALID>mark</INVALID> 					
+			<INVALID>mark-after</INVALID> 					
+			<INVALID>mark-before</INVALID> 					
+			<INVALID>marks</INVALID> 					
+			<INVALID>marquee-direction</INVALID> 					
+			<INVALID>marquee-play-count</INVALID> 					
+			<INVALID>marquee-speed</INVALID> 					
+			<INVALID>marquee-style</INVALID> 					
+			<INVALID>move-to</INVALID>
+			<INVALID>nav-down</INVALID>
+			<INVALID>nav-index</INVALID>
+			<INVALID>nav-left</INVALID>
+			<INVALID>nav-right</INVALID>
+			<INVALID>nav-up</INVALID>
+			<INVALID>overflow-style</INVALID>
+			<INVALID>page</INVALID> 					
+			<INVALID>page-policy</INVALID>
+			<INVALID>phonemes</INVALID>
+			<INVALID>punctuation-trim</INVALID>
+			<INVALID>rest</INVALID> 					
+			<INVALID>rest-after</INVALID> 					
+			<INVALID>rest-before</INVALID> 					
+			<INVALID>rotation</INVALID> 					
+			<INVALID>rotation-point</INVALID>
+			<INVALID>ruby-align</INVALID> 					
+			<INVALID>ruby-overhang</INVALID> 					
+			<INVALID>ruby-position</INVALID> 					
+			<INVALID>ruby-span</INVALID> 					
+			<INVALID>size</INVALID> 					
+			<INVALID>string-set</INVALID> 					
+			<INVALID>target</INVALID> 					
+			<INVALID>target-name</INVALID> 					
+			<INVALID>target-new</INVALID> 					
+			<INVALID>target-position</INVALID> 					
+			<INVALID>text-align-last</INVALID> 					
+			<INVALID>text-emphasis</INVALID> 					
+			<INVALID>text-height</INVALID>
+			<INVALID>text-outline</INVALID>
+			<INVALID>text-wrap</INVALID>
+			<INVALID>voice-balance</INVALID> 					
+			<INVALID>voice-duration</INVALID> 					
+			<INVALID>voice-pitch</INVALID> 					
+			<INVALID>voice-pitch-range</INVALID> 					
+			<INVALID>voice-rate</INVALID> 					
+			<INVALID>voice-stress</INVALID> 					
+			<INVALID>voice-volume</INVALID>
+
 		</KEYWORDS>
 	</RULES>
 
@@ -284,352 +436,466 @@
 		<IMPORT DELEGATE="GLOBAL" />
 
 		<KEYWORDS>
-			<KEYWORD3>left</KEYWORD3>
-			<KEYWORD3>right</KEYWORD3>
-			<KEYWORD3>below</KEYWORD3>
-			<KEYWORD3>level</KEYWORD3>
-			<KEYWORD3>above</KEYWORD3>
-			<KEYWORD3>higher</KEYWORD3>
-			<KEYWORD3>lower</KEYWORD3>
-			<KEYWORD3>show</KEYWORD3>
-			<KEYWORD3>hide</KEYWORD3>
-			<KEYWORD3>normal</KEYWORD3>
-			<KEYWORD3>wider</KEYWORD3>
-			<KEYWORD3>narrower</KEYWORD3>
-			<KEYWORD3>ultra-condensed</KEYWORD3>
-			<KEYWORD3>extra-condensed</KEYWORD3>
-			<KEYWORD3>condensed</KEYWORD3>
-			<KEYWORD3>semi-condensed</KEYWORD3>
-			<KEYWORD3>semi-expanded</KEYWORD3>
-			<KEYWORD3>expanded</KEYWORD3>
-			<KEYWORD3>extra-expanded</KEYWORD3>
-			<KEYWORD3>ultra-expanded</KEYWORD3>
-			<KEYWORD3>normal</KEYWORD3>
-			<KEYWORD3>italic</KEYWORD3>
-			<KEYWORD3>oblique</KEYWORD3>
-			<KEYWORD3>normal</KEYWORD3>
-			<KEYWORD3>xx-small</KEYWORD3>
-			<KEYWORD3>x-small</KEYWORD3>
-			<KEYWORD3>small</KEYWORD3>
-			<KEYWORD3>large</KEYWORD3>
-			<KEYWORD3>x-large</KEYWORD3>
-			<KEYWORD3>xx-large</KEYWORD3>
-			<KEYWORD3>thin</KEYWORD3>
-			<KEYWORD3>thick</KEYWORD3>
-			<KEYWORD3>smaller</KEYWORD3>
-			<KEYWORD3>larger</KEYWORD3>
-			<KEYWORD3>small-caps</KEYWORD3>
-			<KEYWORD3>inherit</KEYWORD3>
-			<KEYWORD3>bold</KEYWORD3>
-			<KEYWORD3>bolder</KEYWORD3>
-			<KEYWORD3>lighter</KEYWORD3>
-			<KEYWORD3>inside</KEYWORD3>
-			<KEYWORD3>outside</KEYWORD3>
-			<KEYWORD3>disc</KEYWORD3>
-			<KEYWORD3>circle</KEYWORD3>
-			<KEYWORD3>square</KEYWORD3>
-			<KEYWORD3>decimal</KEYWORD3>
-			<KEYWORD3>decimal-leading-zero</KEYWORD3>
-			<KEYWORD3>lower-roman</KEYWORD3>
-			<KEYWORD3>upper-roman</KEYWORD3>
-			<KEYWORD3>lower-greek</KEYWORD3>
-			<KEYWORD3>lower-alpha</KEYWORD3>
-			<KEYWORD3>lower-latin</KEYWORD3>
-			<KEYWORD3>upper-alpha</KEYWORD3>
-			<KEYWORD3>upper-latin</KEYWORD3>
-			<KEYWORD3>hebrew</KEYWORD3>
-			<KEYWORD3>armenian</KEYWORD3>
-			<KEYWORD3>georgian</KEYWORD3>
-			<KEYWORD3>cjk-ideographic</KEYWORD3>
-			<KEYWORD3>hiragana</KEYWORD3>
-			<KEYWORD3>katakana</KEYWORD3>
-			<KEYWORD3>hiragana-iroha</KEYWORD3>
-			<KEYWORD3>katakana-iroha</KEYWORD3>
-			<KEYWORD3>crop</KEYWORD3>
-			<KEYWORD3>cross</KEYWORD3>
-			<KEYWORD3>invert</KEYWORD3>
-			<KEYWORD3>hidden</KEYWORD3>
-			<KEYWORD3>always</KEYWORD3>
-			<KEYWORD3>avoid</KEYWORD3>
-			<KEYWORD3>x-low</KEYWORD3>
-			<KEYWORD3>low</KEYWORD3>
-			<KEYWORD3>high</KEYWORD3>
-			<KEYWORD3>x-high</KEYWORD3>
-			<KEYWORD3>absolute</KEYWORD3>
-			<KEYWORD3>fixed</KEYWORD3>
-			<KEYWORD3>relative</KEYWORD3>
-			<KEYWORD3>static</KEYWORD3>
-			<KEYWORD3>portrait</KEYWORD3>
-			<KEYWORD3>landscape</KEYWORD3>
-			<KEYWORD3>spell-out</KEYWORD3>
-			<KEYWORD3>digits</KEYWORD3>
-			<KEYWORD3>continuous</KEYWORD3>
-			<KEYWORD3>x-slow</KEYWORD3>
-			<KEYWORD3>slow</KEYWORD3>
-			<KEYWORD3>fast</KEYWORD3>
-			<KEYWORD3>x-fast</KEYWORD3>
-			<KEYWORD3>faster</KEYWORD3>
-			<KEYWORD3>slower</KEYWORD3>
-			<KEYWORD3>underline</KEYWORD3>
-			<KEYWORD3>overline</KEYWORD3>
-			<KEYWORD3>line-through</KEYWORD3>
-			<KEYWORD3>blink</KEYWORD3>
-			<KEYWORD3>capitalize</KEYWORD3>
-			<KEYWORD3>uppercase</KEYWORD3>
-			<KEYWORD3>lowercase</KEYWORD3>
-			<KEYWORD3>embed</KEYWORD3>
-			<KEYWORD3>bidi-override</KEYWORD3>
-			<KEYWORD3>baseline</KEYWORD3>
-			<KEYWORD3>sub</KEYWORD3>
-			<KEYWORD3>super</KEYWORD3>
-			<KEYWORD3>top</KEYWORD3>
-			<KEYWORD3>text-top</KEYWORD3>
-			<KEYWORD3>middle</KEYWORD3>
-			<KEYWORD3>bottom</KEYWORD3>
-			<KEYWORD3>text-bottom</KEYWORD3>
-			<KEYWORD3>visible</KEYWORD3>
-			<KEYWORD3>hidden</KEYWORD3>
-			<KEYWORD3>collapse</KEYWORD3>
-			<KEYWORD3>soft</KEYWORD3>
-			<KEYWORD3>loud</KEYWORD3>
-			<KEYWORD3>x-loud</KEYWORD3>
-			<KEYWORD3>pre</KEYWORD3>
-			<KEYWORD3>nowrap</KEYWORD3>
-			<KEYWORD3>dotted</KEYWORD3>
-			<KEYWORD3>dashed</KEYWORD3>
-			<KEYWORD3>solid</KEYWORD3>
-			<KEYWORD3>double</KEYWORD3>
-			<KEYWORD3>groove</KEYWORD3>
-			<KEYWORD3>ridge</KEYWORD3>
-			<KEYWORD3>inset</KEYWORD3>
-			<KEYWORD3>outset</KEYWORD3>
-			<KEYWORD3>once</KEYWORD3>
-			<KEYWORD3>both</KEYWORD3>
-			<KEYWORD3>silent</KEYWORD3>
-			<KEYWORD3>medium</KEYWORD3>
-			<KEYWORD3>mix</KEYWORD3>
-			<KEYWORD3>male</KEYWORD3>
-			<KEYWORD3>female</KEYWORD3>
-			<KEYWORD3>child</KEYWORD3>
-			<KEYWORD3>code</KEYWORD3>
-
-			<!-- measurement units -->
-			<KEYWORD3>left-side</KEYWORD3>
-			<KEYWORD3>far-left</KEYWORD3>
-			<KEYWORD3>center-left</KEYWORD3>
-			<KEYWORD3>center</KEYWORD3>
-			<KEYWORD3>right</KEYWORD3>
-			<KEYWORD3>center-right</KEYWORD3>
-			<KEYWORD3>far-right</KEYWORD3>
-			<KEYWORD3>right-side</KEYWORD3>
-			<KEYWORD3>justify</KEYWORD3>
-			<KEYWORD3>behind</KEYWORD3>
-			<KEYWORD3>leftwards</KEYWORD3>
-			<KEYWORD3>rightwards</KEYWORD3>
-			<KEYWORD3>inherit</KEYWORD3>
-			<KEYWORD3>scroll</KEYWORD3>
-			<KEYWORD3>fixed</KEYWORD3>
-			<KEYWORD3>transparent</KEYWORD3>
-			<KEYWORD3>none</KEYWORD3>
-			<KEYWORD3>repeat</KEYWORD3>
-			<KEYWORD3>repeat-x</KEYWORD3>
-			<KEYWORD3>repeat-y</KEYWORD3>
-			<KEYWORD3>no-repeat</KEYWORD3>
-			<KEYWORD3>collapse</KEYWORD3>
-			<KEYWORD3>separate</KEYWORD3>
-			<KEYWORD3>auto</KEYWORD3>
-			<KEYWORD3>open-quote</KEYWORD3>
-			<KEYWORD3>close-quote</KEYWORD3>
-			<KEYWORD3>no-open-quote</KEYWORD3>
-			<KEYWORD3>no-close-quote</KEYWORD3>
-			<KEYWORD3>cue-before</KEYWORD3>
-			<KEYWORD3>cue-after</KEYWORD3>
-			<KEYWORD3>crosshair</KEYWORD3>
-			<KEYWORD3>default</KEYWORD3>
-			<KEYWORD3>pointer</KEYWORD3>
-			<KEYWORD3>move</KEYWORD3>
-			<KEYWORD3>e-resize</KEYWORD3>
-			<KEYWORD3>ne-resize</KEYWORD3>
-			<KEYWORD3>nw-resize</KEYWORD3>
-			<KEYWORD3>n-resize</KEYWORD3>
-			<KEYWORD3>se-resize</KEYWORD3>
-			<KEYWORD3>sw-resize</KEYWORD3>
-			<KEYWORD3>s-resize</KEYWORD3>
-			<KEYWORD3>w-resize</KEYWORD3>
-			<KEYWORD3>text</KEYWORD3>
-			<KEYWORD3>wait</KEYWORD3>
-			<KEYWORD3>help</KEYWORD3>
-			<KEYWORD3>ltr</KEYWORD3>
-			<KEYWORD3>rtl</KEYWORD3>
-			<KEYWORD3>inline</KEYWORD3>
-			<KEYWORD3>block</KEYWORD3>
-			<KEYWORD3>list-item</KEYWORD3>
-			<KEYWORD3>run-in</KEYWORD3>
-			<KEYWORD3>compact</KEYWORD3>
-			<KEYWORD3>marker</KEYWORD3>
-			<KEYWORD3>table</KEYWORD3>
-			<KEYWORD3>inline-table</KEYWORD3>
-			<KEYWORD3>inline-block</KEYWORD3>
-			<KEYWORD3>table-row-group</KEYWORD3>
-			<KEYWORD3>table-header-group</KEYWORD3>
-			<KEYWORD3>table-footer-group</KEYWORD3>
-			<KEYWORD3>table-row</KEYWORD3>
-			<KEYWORD3>table-column-group</KEYWORD3>
-			<KEYWORD3>table-column</KEYWORD3>
-			<KEYWORD3>table-cell</KEYWORD3>
-			<KEYWORD3>table-caption</KEYWORD3>
-
-			<!-- Colors -->
-			<KEYWORD4>aliceblue</KEYWORD4>
-			<KEYWORD4>antiquewhite</KEYWORD4>
-			<KEYWORD4>aqua</KEYWORD4>
-			<KEYWORD4>aquamarine</KEYWORD4>
-			<KEYWORD4>azure</KEYWORD4>
-			<KEYWORD4>beige</KEYWORD4>
-			<KEYWORD4>bisque</KEYWORD4>
-			<KEYWORD4>black</KEYWORD4>
-			<KEYWORD4>blanchedalmond</KEYWORD4>
-			<KEYWORD4>blue</KEYWORD4>
-			<KEYWORD4>blueviolet</KEYWORD4>
-			<KEYWORD4>brown</KEYWORD4>
-			<KEYWORD4>burlywood</KEYWORD4>
-			<KEYWORD4>cadetblue</KEYWORD4>
-			<KEYWORD4>chartreuse</KEYWORD4>
-			<KEYWORD4>chocolate</KEYWORD4>
-			<KEYWORD4>coral</KEYWORD4>
-			<KEYWORD4>cornflowerblue</KEYWORD4>
-			<KEYWORD4>cornsilk</KEYWORD4>
-			<KEYWORD4>crimson</KEYWORD4>
-			<KEYWORD4>cyan</KEYWORD4>
-			<KEYWORD4>darkblue</KEYWORD4>
-			<KEYWORD4>darkcyan</KEYWORD4>
-			<KEYWORD4>darkgoldenrod</KEYWORD4>
-			<KEYWORD4>darkgray</KEYWORD4>
-			<KEYWORD4>darkgreen</KEYWORD4>
-			<KEYWORD4>darkgrey</KEYWORD4>
-			<KEYWORD4>darkkhaki</KEYWORD4>
-			<KEYWORD4>darkmagenta</KEYWORD4>
-			<KEYWORD4>darkolivegreen</KEYWORD4>
-			<KEYWORD4>darkorange</KEYWORD4>
-			<KEYWORD4>darkorchid</KEYWORD4>
-			<KEYWORD4>darkred</KEYWORD4>
-			<KEYWORD4>darksalmon</KEYWORD4>
-			<KEYWORD4>darkseagreen</KEYWORD4>
-			<KEYWORD4>darkslateblue</KEYWORD4>
-			<KEYWORD4>darkslategray</KEYWORD4>
-			<KEYWORD4>darkslategrey</KEYWORD4>
-			<KEYWORD4>darkturquoise</KEYWORD4>
-			<KEYWORD4>darkviolet</KEYWORD4>
-			<KEYWORD4>darkpink</KEYWORD4>
-			<KEYWORD4>deepskyblue</KEYWORD4>
-			<KEYWORD4>dimgray</KEYWORD4>
-			<KEYWORD4>dimgrey</KEYWORD4>
-			<KEYWORD4>dodgerblue</KEYWORD4>
-			<KEYWORD4>firebrick</KEYWORD4>
-			<KEYWORD4>floralwhite</KEYWORD4>
-			<KEYWORD4>forestgreen</KEYWORD4>
-			<KEYWORD4>fushia</KEYWORD4>
-			<KEYWORD4>gainsboro</KEYWORD4>
-			<KEYWORD4>ghostwhite</KEYWORD4>
-			<KEYWORD4>gold</KEYWORD4>
-			<KEYWORD4>goldenrod</KEYWORD4>
-			<KEYWORD4>gray</KEYWORD4>
-			<KEYWORD4>green</KEYWORD4>
-			<KEYWORD4>greenyellow</KEYWORD4>
-			<KEYWORD4>grey</KEYWORD4>
-			<KEYWORD4>honeydew</KEYWORD4>
-			<KEYWORD4>hotpink</KEYWORD4>
-			<KEYWORD4>indianred</KEYWORD4>
-			<KEYWORD4>indigo</KEYWORD4>
-			<KEYWORD4>ivory</KEYWORD4>
-			<KEYWORD4>khaki</KEYWORD4>
-			<KEYWORD4>lavender</KEYWORD4>
-			<KEYWORD4>lavenderblush</KEYWORD4>
-			<KEYWORD4>lawngreen</KEYWORD4>
-			<KEYWORD4>lemonchiffon</KEYWORD4>
-			<KEYWORD4>lightblue</KEYWORD4>
-			<KEYWORD4>lightcoral</KEYWORD4>
-			<KEYWORD4>lightcyan</KEYWORD4>
-			<KEYWORD4>lightgoldenrodyellow</KEYWORD4>
-			<KEYWORD4>lightgray</KEYWORD4>
-			<KEYWORD4>lightgreen</KEYWORD4>
-			<KEYWORD4>lightgrey</KEYWORD4>
-			<KEYWORD4>lightpink</KEYWORD4>
-			<KEYWORD4>lightsalmon</KEYWORD4>
-			<KEYWORD4>lightseagreen</KEYWORD4>
-			<KEYWORD4>lightskyblue</KEYWORD4>
-			<KEYWORD4>lightslategray</KEYWORD4>
-			<KEYWORD4>lightslategrey</KEYWORD4>
-			<KEYWORD4>lightsteelblue</KEYWORD4>
-			<KEYWORD4>lightyellow</KEYWORD4>
-			<KEYWORD4>lime</KEYWORD4>
-			<KEYWORD4>limegreen</KEYWORD4>
-			<KEYWORD4>linen</KEYWORD4>
-			<KEYWORD4>magenta</KEYWORD4>
-			<KEYWORD4>maroon</KEYWORD4>
-			<KEYWORD4>mediumaquamarine</KEYWORD4>
-			<KEYWORD4>mediumblue</KEYWORD4>
-			<KEYWORD4>mediumorchid</KEYWORD4>
-			<KEYWORD4>mediumpurple</KEYWORD4>
-			<KEYWORD4>mediumseagreen</KEYWORD4>
-			<KEYWORD4>mediumslateblue</KEYWORD4>
-			<KEYWORD4>mediumspringgreen</KEYWORD4>
-			<KEYWORD4>mediumturquoise</KEYWORD4>
-			<KEYWORD4>mediumvioletred</KEYWORD4>
-			<KEYWORD4>midnightblue</KEYWORD4>
-			<KEYWORD4>mintcream</KEYWORD4>
-			<KEYWORD4>mistyrose</KEYWORD4>
-			<KEYWORD4>mocassin</KEYWORD4>
-			<KEYWORD4>navawhite</KEYWORD4>
-			<KEYWORD4>navy</KEYWORD4>
-			<KEYWORD4>oldlace</KEYWORD4>
-			<KEYWORD4>olive</KEYWORD4>
-			<KEYWORD4>olidrab</KEYWORD4>
-			<KEYWORD4>orange</KEYWORD4>
-			<KEYWORD4>orangered</KEYWORD4>
-			<KEYWORD4>orchid</KEYWORD4>
-			<KEYWORD4>palegoldenrod</KEYWORD4>
-			<KEYWORD4>palegreen</KEYWORD4>
-			<KEYWORD4>paleturquoise</KEYWORD4>
-			<KEYWORD4>paletvioletred</KEYWORD4>
-			<KEYWORD4>papayawhip</KEYWORD4>
-			<KEYWORD4>peachpuff</KEYWORD4>
-			<KEYWORD4>peru</KEYWORD4>
-			<KEYWORD4>pink</KEYWORD4>
-			<KEYWORD4>plum</KEYWORD4>
-			<KEYWORD4>powderblue</KEYWORD4>
-			<KEYWORD4>purple</KEYWORD4>
-			<KEYWORD4>red</KEYWORD4>
-			<KEYWORD4>rosybrown</KEYWORD4>
-			<KEYWORD4>royalblue</KEYWORD4>
-			<KEYWORD4>saddlebrown</KEYWORD4>
-			<KEYWORD4>salmon</KEYWORD4>
-			<KEYWORD4>sandybrown</KEYWORD4>
-			<KEYWORD4>seagreen</KEYWORD4>
-			<KEYWORD4>seashell</KEYWORD4>
-			<KEYWORD4>sienna</KEYWORD4>
-			<KEYWORD4>silver</KEYWORD4>
-			<KEYWORD4>skyblue</KEYWORD4>
-			<KEYWORD4>slateblue</KEYWORD4>
-			<KEYWORD4>slategray</KEYWORD4>
-			<KEYWORD4>slategrey</KEYWORD4>
-			<KEYWORD4>snow</KEYWORD4>
-			<KEYWORD4>springgreen</KEYWORD4>
-			<KEYWORD4>steelblue</KEYWORD4>
-			<KEYWORD4>tan</KEYWORD4>
-			<KEYWORD4>teal</KEYWORD4>
-			<KEYWORD4>thistle</KEYWORD4>
-			<KEYWORD4>tomato</KEYWORD4>
-			<KEYWORD4>turquoise</KEYWORD4>
-			<KEYWORD4>violet</KEYWORD4>
-			<KEYWORD4>wheat</KEYWORD4>
-			<KEYWORD4>white</KEYWORD4>
-			<KEYWORD4>whitesmoke</KEYWORD4>
-			<KEYWORD4>yellow</KEYWORD4>
-			<KEYWORD4>yellowgreen</KEYWORD4>
+            <KEYWORD3>above</KEYWORD3>
+            <KEYWORD3>absolute</KEYWORD3>
+            <KEYWORD3>absolute-colorimetric</KEYWORD3>
+            <KEYWORD3>adjacent</KEYWORD3>
+            <KEYWORD3>after</KEYWORD3>
+            <KEYWORD3>after-edge</KEYWORD3>
+            <KEYWORD3>all</KEYWORD3>
+            <KEYWORD3>allow-end</KEYWORD3>
+            <KEYWORD3>alphabetic</KEYWORD3>
+            <KEYWORD3>alphabetical</KEYWORD3>
+            <KEYWORD3>alternate</KEYWORD3>
+            <KEYWORD3>always</KEYWORD3>
+            <KEYWORD3>armenian</KEYWORD3>
+            <KEYWORD3>attr</KEYWORD3>
+            <KEYWORD3>auto</KEYWORD3>
+            <KEYWORD3>avoid</KEYWORD3>
+            <KEYWORD3>back</KEYWORD3>
+            <KEYWORD3>balance</KEYWORD3>
+            <KEYWORD3>baseline</KEYWORD3>
+            <KEYWORD3>before</KEYWORD3>
+            <KEYWORD3>before-edge</KEYWORD3>
+            <KEYWORD3>behind</KEYWORD3>
+            <KEYWORD3>bidi-override</KEYWORD3>
+            <KEYWORD3>blink</KEYWORD3>
+            <KEYWORD3>block</KEYWORD3>
+            <KEYWORD3>block-axis</KEYWORD3>
+            <KEYWORD3>block-line-height</KEYWORD3>
+            <KEYWORD3>blur</KEYWORD3>
+            <KEYWORD3>bold</KEYWORD3>
+            <KEYWORD3>bolder</KEYWORD3>
+            <KEYWORD3>border-box</KEYWORD3>
+            <KEYWORD3>border-box </KEYWORD3>
+            <KEYWORD3>both</KEYWORD3>
+            <KEYWORD3>bottom</KEYWORD3>
+            <KEYWORD3>break-all</KEYWORD3>
+            <KEYWORD3>break-word</KEYWORD3>
+            <KEYWORD3>button</KEYWORD3>
+            <KEYWORD3>capitalize</KEYWORD3>
+            <KEYWORD3>caps-height</KEYWORD3>
+            <KEYWORD3>caption</KEYWORD3>
+            <KEYWORD3>center</KEYWORD3>
+            <KEYWORD3>center bottom</KEYWORD3>
+            <KEYWORD3>center center</KEYWORD3>
+            <KEYWORD3>center top</KEYWORD3>
+            <KEYWORD3>central</KEYWORD3>
+            <KEYWORD3>circle</KEYWORD3>
+            <KEYWORD3>clip</KEYWORD3>
+            <KEYWORD3>close-quote</KEYWORD3>
+            <KEYWORD3>collapse</KEYWORD3>
+            <KEYWORD3>color</KEYWORD3>
+            <KEYWORD3>condensed</KEYWORD3>
+            <KEYWORD3>consider-shifts</KEYWORD3>
+            <KEYWORD3>contain</KEYWORD3>
+            <KEYWORD3>content</KEYWORD3>
+            <KEYWORD3>content-box</KEYWORD3>
+            <KEYWORD3>counter</KEYWORD3>
+            <KEYWORD3>cover</KEYWORD3>
+            <KEYWORD3>crop</KEYWORD3>
+            <KEYWORD3>cross</KEYWORD3>
+            <KEYWORD3>crosshair</KEYWORD3>
+            <KEYWORD3>cubic-bezier</KEYWORD3>
+            <KEYWORD3>current</KEYWORD3>
+            <KEYWORD3>cursive</KEYWORD3>
+            <KEYWORD3>dashed</KEYWORD3>
+            <KEYWORD3>decimal</KEYWORD3>
+            <KEYWORD3>decimal-leading-zero</KEYWORD3>
+            <KEYWORD3>default</KEYWORD3>
+            <KEYWORD3>disc</KEYWORD3>
+            <KEYWORD3>disregard-shifts</KEYWORD3>
+            <KEYWORD3>distribute</KEYWORD3>
+            <KEYWORD3>distribute-letter</KEYWORD3>
+            <KEYWORD3>distribute-space</KEYWORD3>
+            <KEYWORD3>dotted</KEYWORD3>
+            <KEYWORD3>double</KEYWORD3>
+            <KEYWORD3>resize</KEYWORD3>
+            <KEYWORD3>e-resize</KEYWORD3>
+            <KEYWORD3>ease</KEYWORD3>
+            <KEYWORD3>ease-in</KEYWORD3>
+            <KEYWORD3>ease-in-out</KEYWORD3>
+            <KEYWORD3>ease-out</KEYWORD3>
+            <KEYWORD3>ellipsis</KEYWORD3>
+            <KEYWORD3>embed</KEYWORD3>
+            <KEYWORD3>end</KEYWORD3>
+            <KEYWORD3>end-edge</KEYWORD3>
+            <KEYWORD3>exclude-ruby</KEYWORD3>
+            <KEYWORD3>extra-condensed</KEYWORD3>
+            <KEYWORD3>extra-expanded</KEYWORD3>
+            <KEYWORD3>family-name</KEYWORD3>
+            <KEYWORD3>fantasy</KEYWORD3>
+            <KEYWORD3>fast</KEYWORD3>
+            <KEYWORD3>field</KEYWORD3>
+            <KEYWORD3>fill</KEYWORD3>
+            <KEYWORD3>first</KEYWORD3>
+            <KEYWORD3>fixed</KEYWORD3>
+            <KEYWORD3>flat</KEYWORD3>
+            <KEYWORD3>font-family</KEYWORD3>
+            <KEYWORD3>font-size</KEYWORD3>
+            <KEYWORD3>forward</KEYWORD3>
+            <KEYWORD3>front</KEYWORD3>
+            <KEYWORD3>georgian</KEYWORD3>
+            <KEYWORD3>grid-height</KEYWORD3>
+            <KEYWORD3>groove</KEYWORD3>
+            <KEYWORD3>h-shadow</KEYWORD3>
+            <KEYWORD3>hanging</KEYWORD3>
+            <KEYWORD3>help</KEYWORD3>
+            <KEYWORD3>here</KEYWORD3>
+            <KEYWORD3>hidden</KEYWORD3>
+            <KEYWORD3>hide</KEYWORD3>
+            <KEYWORD3>high</KEYWORD3>
+            <KEYWORD3>horizontal</KEYWORD3>
+            <KEYWORD3>hyphenate</KEYWORD3>
+            <KEYWORD3>icon</KEYWORD3>
+            <KEYWORD3>ideographic</KEYWORD3>
+            <KEYWORD3>include-ruby</KEYWORD3>
+            <KEYWORD3>infinite</KEYWORD3>
+            <KEYWORD3>inherit</KEYWORD3>
+            <KEYWORD3>initial</KEYWORD3>
+            <KEYWORD3>inline</KEYWORD3>
+            <KEYWORD3>inline-axis</KEYWORD3>
+            <KEYWORD3>inline-block</KEYWORD3>
+            <KEYWORD3>inline-line-height</KEYWORD3>
+            <KEYWORD3>inline-table</KEYWORD3>
+            <KEYWORD3>inset</KEYWORD3>
+            <KEYWORD3>inside</KEYWORD3>
+            <KEYWORD3>integer</KEYWORD3>
+            <KEYWORD3>inter-cluster</KEYWORD3>
+            <KEYWORD3>inter-ideograph</KEYWORD3>
+            <KEYWORD3>inter-word</KEYWORD3>
+            <KEYWORD3>italic</KEYWORD3>
+            <KEYWORD3>justify</KEYWORD3>
+            <KEYWORD3>kashida</KEYWORD3>
+            <KEYWORD3>landscape</KEYWORD3>
+            <KEYWORD3>large</KEYWORD3>
+            <KEYWORD3>larger</KEYWORD3>
+            <KEYWORD3>last</KEYWORD3>
+            <KEYWORD3>left</KEYWORD3>
+            <KEYWORD3>left bottom</KEYWORD3>
+            <KEYWORD3>left center</KEYWORD3>
+            <KEYWORD3>left top</KEYWORD3>
+            <KEYWORD3>leftwards</KEYWORD3>
+            <KEYWORD3>length</KEYWORD3>
+            <KEYWORD3>lighter</KEYWORD3>
+            <KEYWORD3>line-edge</KEYWORD3>
+            <KEYWORD3>line-through</KEYWORD3>
+            <KEYWORD3>linear</KEYWORD3>
+            <KEYWORD3>list-item</KEYWORD3>
+            <KEYWORD3>loud</KEYWORD3>
+            <KEYWORD3>low</KEYWORD3>
+            <KEYWORD3>lower-alpha</KEYWORD3>
+            <KEYWORD3>lower-greek</KEYWORD3>
+            <KEYWORD3>lower-latin</KEYWORD3>
+            <KEYWORD3>lower-roman</KEYWORD3>
+            <KEYWORD3>lowercase</KEYWORD3>
+            <KEYWORD3>ltr</KEYWORD3>
+            <KEYWORD3>manual</KEYWORD3>
+            <KEYWORD3>mathematical</KEYWORD3>
+            <KEYWORD3>max-height</KEYWORD3>
+            <KEYWORD3>max-size</KEYWORD3>
+            <KEYWORD3>medium</KEYWORD3>
+            <KEYWORD3>meet</KEYWORD3>
+            <KEYWORD3>menu</KEYWORD3>
+            <KEYWORD3>message-box</KEYWORD3>
+            <KEYWORD3>middle</KEYWORD3>
+            <KEYWORD3>modal</KEYWORD3>
+            <KEYWORD3>moderate</KEYWORD3>
+            <KEYWORD3>monospace</KEYWORD3>
+            <KEYWORD3>move</KEYWORD3>
+            <KEYWORD3>multiple</KEYWORD3>
+            <KEYWORD3>n-resize</KEYWORD3>
+            <KEYWORD3>name</KEYWORD3>
+            <KEYWORD3>narrower</KEYWORD3>
+            <KEYWORD3>ne-resize</KEYWORD3>
+            <KEYWORD3>new</KEYWORD3>
+            <KEYWORD3>no-change</KEYWORD3>
+            <KEYWORD3>no-close-quote</KEYWORD3>
+            <KEYWORD3>no-content</KEYWORD3>
+            <KEYWORD3>no-display</KEYWORD3>
+            <KEYWORD3>no-limit</KEYWORD3>
+            <KEYWORD3>no-open-quote</KEYWORD3>
+            <KEYWORD3>no-repeat</KEYWORD3>
+            <KEYWORD3>none</KEYWORD3>
+            <KEYWORD3>normal</KEYWORD3>
+            <KEYWORD3>nowrap</KEYWORD3>
+            <KEYWORD3>nw-resize</KEYWORD3>
+            <KEYWORD3>oblique</KEYWORD3>
+            <KEYWORD3>open-quote</KEYWORD3>
+            <KEYWORD3>outset</KEYWORD3>
+            <KEYWORD3>outside</KEYWORD3>
+            <KEYWORD3>overline</KEYWORD3>
+            <KEYWORD3>padding-box</KEYWORD3>
+            <KEYWORD3>page-size</KEYWORD3>
+            <KEYWORD3>parent</KEYWORD3>
+            <KEYWORD3>paused</KEYWORD3>
+            <KEYWORD3>percentage</KEYWORD3>
+            <KEYWORD3>perceptual</KEYWORD3>
+            <KEYWORD3>pointer</KEYWORD3>
+            <KEYWORD3>portrait</KEYWORD3>
+            <KEYWORD3>pre</KEYWORD3>
+            <KEYWORD3>pre-line</KEYWORD3>
+            <KEYWORD3>pre-wrap</KEYWORD3>
+            <KEYWORD3>preserve-3d</KEYWORD3>
+            <KEYWORD3>progress</KEYWORD3>
+            <KEYWORD3>reduced</KEYWORD3>
+            <KEYWORD3>relative</KEYWORD3>
+            <KEYWORD3>relative-colorimetric</KEYWORD3>
+            <KEYWORD3>repeat</KEYWORD3>
+            <KEYWORD3>repeat-x</KEYWORD3>
+            <KEYWORD3>repeat-y</KEYWORD3>
+            <KEYWORD3>reset-size</KEYWORD3>
+            <KEYWORD3>reverse</KEYWORD3>
+            <KEYWORD3>ridge</KEYWORD3>
+            <KEYWORD3>right</KEYWORD3>
+            <KEYWORD3>right bottom</KEYWORD3>
+            <KEYWORD3>right center</KEYWORD3>
+            <KEYWORD3>right top</KEYWORD3>
+            <KEYWORD3>rightwards</KEYWORD3>
+            <KEYWORD3>root</KEYWORD3>
+            <KEYWORD3>round</KEYWORD3>
+            <KEYWORD3>rtl</KEYWORD3>
+            <KEYWORD3>run-in</KEYWORD3>
+            <KEYWORD3>running</KEYWORD3>
+            <KEYWORD3>s-resize</KEYWORD3>
+            <KEYWORD3>sans-serif</KEYWORD3>
+            <KEYWORD3>saturation</KEYWORD3>
+            <KEYWORD3>scroll</KEYWORD3>
+            <KEYWORD3>se-resize</KEYWORD3>
+            <KEYWORD3>self</KEYWORD3>
+            <KEYWORD3>semi-condensed</KEYWORD3>
+            <KEYWORD3>semi-expanded</KEYWORD3>
+            <KEYWORD3>separate</KEYWORD3>
+            <KEYWORD3>serif</KEYWORD3>
+            <KEYWORD3>shape</KEYWORD3>
+            <KEYWORD3>show</KEYWORD3>
+            <KEYWORD3>silent</KEYWORD3>
+            <KEYWORD3>single</KEYWORD3>
+            <KEYWORD3>slice</KEYWORD3>
+            <KEYWORD3>slide</KEYWORD3>
+            <KEYWORD3>slow</KEYWORD3>
+            <KEYWORD3>small</KEYWORD3>
+            <KEYWORD3>small-caps</KEYWORD3>
+            <KEYWORD3>small-caption</KEYWORD3>
+            <KEYWORD3>smaller</KEYWORD3>
+            <KEYWORD3>soft</KEYWORD3>
+            <KEYWORD3>solid</KEYWORD3>
+            <KEYWORD3>spread</KEYWORD3>
+            <KEYWORD3>square</KEYWORD3>
+            <KEYWORD3>start</KEYWORD3>
+            <KEYWORD3>static</KEYWORD3>
+            <KEYWORD3>status-bar</KEYWORD3>
+            <KEYWORD3>stretch</KEYWORD3>
+            <KEYWORD3>strong</KEYWORD3>
+            <KEYWORD3>sub</KEYWORD3>
+            <KEYWORD3>super</KEYWORD3>
+            <KEYWORD3>suppress</KEYWORD3>
+            <KEYWORD3>sw-resize</KEYWORD3>
+            <KEYWORD3>tab</KEYWORD3>
+            <KEYWORD3>table</KEYWORD3>
+            <KEYWORD3>table-caption</KEYWORD3>
+            <KEYWORD3>table-cell</KEYWORD3>
+            <KEYWORD3>table-column</KEYWORD3>
+            <KEYWORD3>table-column-group</KEYWORD3>
+            <KEYWORD3>table-footer-group</KEYWORD3>
+            <KEYWORD3>table-header-group</KEYWORD3>
+            <KEYWORD3>table-row</KEYWORD3>
+            <KEYWORD3>table-row-group</KEYWORD3>
+            <KEYWORD3>text</KEYWORD3>
+            <KEYWORD3>text-after-edge</KEYWORD3>
+            <KEYWORD3>text-before-edge</KEYWORD3>
+            <KEYWORD3>text-bottom</KEYWORD3>
+            <KEYWORD3>text-size</KEYWORD3>
+            <KEYWORD3>text-top</KEYWORD3>
+            <KEYWORD3>thick</KEYWORD3>
+            <KEYWORD3>thin</KEYWORD3>
+            <KEYWORD3>top</KEYWORD3>
+            <KEYWORD3>transparent</KEYWORD3>
+            <KEYWORD3>ultra-condensed</KEYWORD3>
+            <KEYWORD3>ultra-expanded</KEYWORD3>
+            <KEYWORD3>underline</KEYWORD3>
+            <KEYWORD3>unrestricted</KEYWORD3>
+            <KEYWORD3>upper-alpha</KEYWORD3>
+            <KEYWORD3>upper-latin</KEYWORD3>
+            <KEYWORD3>upper-roman</KEYWORD3>
+            <KEYWORD3>uppercase</KEYWORD3>
+            <KEYWORD3>url</KEYWORD3>
+            <KEYWORD3>use-script</KEYWORD3>
+            <KEYWORD3>v-shadow</KEYWORD3>
+            <KEYWORD3>vertical</KEYWORD3>
+            <KEYWORD3>visible</KEYWORD3>
+            <KEYWORD3>w-resize</KEYWORD3>
+            <KEYWORD3>wait</KEYWORD3>
+            <KEYWORD3>weak</KEYWORD3>
+            <KEYWORD3>wider</KEYWORD3>
+            <KEYWORD3>window</KEYWORD3>
+            <KEYWORD3>x-fast</KEYWORD3>
+            <KEYWORD3>x-high</KEYWORD3>
+            <KEYWORD3>x-large</KEYWORD3>
+            <KEYWORD3>x-loud</KEYWORD3>
+            <KEYWORD3>x-low</KEYWORD3>
+            <KEYWORD3>x-slow</KEYWORD3>
+            <KEYWORD3>x-small</KEYWORD3>
+            <KEYWORD3>x-soft</KEYWORD3>
+            <KEYWORD3>x-strong</KEYWORD3>
+            <KEYWORD3>x-weak</KEYWORD3>
+            <KEYWORD3>xx-large</KEYWORD3>
+            <KEYWORD3>xx-small</KEYWORD3>
+			
+            <!-- Colors -->
+            <KEYWORD4>aliceblue</KEYWORD4>
+            <KEYWORD4>antiquewhite</KEYWORD4>
+            <KEYWORD4>aqua</KEYWORD4>
+            <KEYWORD4>aquamarine</KEYWORD4>
+            <KEYWORD4>azure</KEYWORD4>
+            <KEYWORD4>beige</KEYWORD4>
+            <KEYWORD4>bisque</KEYWORD4>
+            <KEYWORD4>black</KEYWORD4>
+            <KEYWORD4>blanchedalmond</KEYWORD4>
+            <KEYWORD4>blue</KEYWORD4>
+            <KEYWORD4>blueviolet</KEYWORD4>
+            <KEYWORD4>brown</KEYWORD4>
+            <KEYWORD4>burlywood</KEYWORD4>
+            <KEYWORD4>cadetblue</KEYWORD4>
+            <KEYWORD4>chartreuse</KEYWORD4>
+            <KEYWORD4>chocolate</KEYWORD4>
+            <KEYWORD4>coral</KEYWORD4>
+            <KEYWORD4>cornflowerblue</KEYWORD4>
+            <KEYWORD4>cornsilk</KEYWORD4>
+            <KEYWORD4>crimson</KEYWORD4>
+            <KEYWORD4>cyan</KEYWORD4>
+            <KEYWORD4>darkblue</KEYWORD4>
+            <KEYWORD4>darkcyan</KEYWORD4>
+            <KEYWORD4>darkgoldenrod</KEYWORD4>
+            <KEYWORD4>darkgray</KEYWORD4>
+            <KEYWORD4>darkgreen</KEYWORD4>
+            <KEYWORD4>darkgrey</KEYWORD4>
+            <KEYWORD4>darkkhaki</KEYWORD4>
+            <KEYWORD4>darkmagenta</KEYWORD4>
+            <KEYWORD4>darkolivegreen</KEYWORD4>
+            <KEYWORD4>darkorange</KEYWORD4>
+            <KEYWORD4>darkorchid</KEYWORD4>
+            <KEYWORD4>darkred</KEYWORD4>
+            <KEYWORD4>darksalmon</KEYWORD4>
+            <KEYWORD4>darkseagreen</KEYWORD4>
+            <KEYWORD4>darkslateblue</KEYWORD4>
+            <KEYWORD4>darkslategray</KEYWORD4>
+            <KEYWORD4>darkslategrey</KEYWORD4>
+            <KEYWORD4>darkturquoise</KEYWORD4>
+            <KEYWORD4>darkviolet</KEYWORD4>
+            <KEYWORD4>deeppink</KEYWORD4>
+            <KEYWORD4>deepskyblue</KEYWORD4>
+            <KEYWORD4>dimgray</KEYWORD4>
+            <KEYWORD4>dimgrey</KEYWORD4>
+            <KEYWORD4>dodgerblue</KEYWORD4>
+            <KEYWORD4>firebrick</KEYWORD4>
+            <KEYWORD4>floralwhite</KEYWORD4>
+            <KEYWORD4>forestgreen</KEYWORD4>
+            <KEYWORD4>fuchsia</KEYWORD4>
+            <KEYWORD4>gainsboro</KEYWORD4>
+            <KEYWORD4>ghostwhite</KEYWORD4>
+            <KEYWORD4>gold</KEYWORD4>
+            <KEYWORD4>goldenrod</KEYWORD4>
+            <KEYWORD4>gray</KEYWORD4>
+            <KEYWORD4>green</KEYWORD4>
+            <KEYWORD4>greenyellow</KEYWORD4>
+            <KEYWORD4>grey</KEYWORD4>
+            <KEYWORD4>honeydew</KEYWORD4>
+            <KEYWORD4>hotpink</KEYWORD4>
+            <KEYWORD4>indianred</KEYWORD4>
+            <KEYWORD4>indigo</KEYWORD4>
+            <KEYWORD4>ivory</KEYWORD4>
+            <KEYWORD4>khaki</KEYWORD4>
+            <KEYWORD4>lavender</KEYWORD4>
+            <KEYWORD4>lavenderblush</KEYWORD4>
+            <KEYWORD4>lawngreen</KEYWORD4>
+            <KEYWORD4>lemonchiffon</KEYWORD4>
+            <KEYWORD4>lightblue</KEYWORD4>
+            <KEYWORD4>lightcoral</KEYWORD4>
+            <KEYWORD4>lightcyan</KEYWORD4>
+            <KEYWORD4>lightgoldenrodyellow</KEYWORD4>
+            <KEYWORD4>lightgray</KEYWORD4>
+            <KEYWORD4>lightgreen</KEYWORD4>
+            <KEYWORD4>lightgrey</KEYWORD4>
+            <KEYWORD4>lightpink</KEYWORD4>
+            <KEYWORD4>lightsalmon</KEYWORD4>
+            <KEYWORD4>lightseagreen</KEYWORD4>
+            <KEYWORD4>lightskyblue</KEYWORD4>
+            <KEYWORD4>lightslategray</KEYWORD4>
+            <KEYWORD4>lightslategrey</KEYWORD4>
+            <KEYWORD4>lightsteelblue</KEYWORD4>
+            <KEYWORD4>lightyellow</KEYWORD4>
+            <KEYWORD4>lime</KEYWORD4>
+            <KEYWORD4>limegreen</KEYWORD4>
+            <KEYWORD4>linen</KEYWORD4>
+            <KEYWORD4>magenta</KEYWORD4>
+            <KEYWORD4>maroon</KEYWORD4>
+            <KEYWORD4>mediumaquamarine</KEYWORD4>
+            <KEYWORD4>mediumblue</KEYWORD4>
+            <KEYWORD4>mediumorchid</KEYWORD4>
+            <KEYWORD4>mediumpurple</KEYWORD4>
+            <KEYWORD4>mediumseagreen</KEYWORD4>
+            <KEYWORD4>mediumslateblue</KEYWORD4>
+            <KEYWORD4>mediumspringgreen</KEYWORD4>
+            <KEYWORD4>mediumturquoise</KEYWORD4>
+            <KEYWORD4>mediumvioletred</KEYWORD4>
+            <KEYWORD4>midnightblue</KEYWORD4>
+            <KEYWORD4>mintcream</KEYWORD4>
+            <KEYWORD4>mistyrose</KEYWORD4>
+            <KEYWORD4>moccasin</KEYWORD4>
+            <KEYWORD4>navajowhite</KEYWORD4>
+            <KEYWORD4>navy</KEYWORD4>
+            <KEYWORD4>oldlace</KEYWORD4>
+            <KEYWORD4>olive</KEYWORD4>
+            <KEYWORD4>olivedrab</KEYWORD4>
+            <KEYWORD4>orange</KEYWORD4>
+            <KEYWORD4>orangered</KEYWORD4>
+            <KEYWORD4>orchid</KEYWORD4>
+            <KEYWORD4>palegoldenrod</KEYWORD4>
+            <KEYWORD4>palegreen</KEYWORD4>
+            <KEYWORD4>paleturquoise</KEYWORD4>
+            <KEYWORD4>palevioletred</KEYWORD4>
+            <KEYWORD4>papayawhip</KEYWORD4>
+            <KEYWORD4>peachpuff</KEYWORD4>
+            <KEYWORD4>peru</KEYWORD4>
+            <KEYWORD4>pink</KEYWORD4>
+            <KEYWORD4>plum</KEYWORD4>
+            <KEYWORD4>powderblue</KEYWORD4>
+            <KEYWORD4>purple</KEYWORD4>
+            <KEYWORD4>red</KEYWORD4>
+            <KEYWORD4>rosybrown</KEYWORD4>
+            <KEYWORD4>royalblue</KEYWORD4>
+            <KEYWORD4>saddlebrown</KEYWORD4>
+            <KEYWORD4>salmon</KEYWORD4>
+            <KEYWORD4>sandybrown</KEYWORD4>
+            <KEYWORD4>seagreen</KEYWORD4>
+            <KEYWORD4>seashell</KEYWORD4>
+            <KEYWORD4>sienna</KEYWORD4>
+            <KEYWORD4>silver</KEYWORD4>
+            <KEYWORD4>skyblue</KEYWORD4>
+            <KEYWORD4>slateblue</KEYWORD4>
+            <KEYWORD4>slategray</KEYWORD4>
+            <KEYWORD4>slategrey</KEYWORD4>
+            <KEYWORD4>snow</KEYWORD4>
+            <KEYWORD4>springgreen</KEYWORD4>
+            <KEYWORD4>steelblue</KEYWORD4>
+            <KEYWORD4>tan</KEYWORD4>
+            <KEYWORD4>teal</KEYWORD4>
+            <KEYWORD4>thistle</KEYWORD4>
+            <KEYWORD4>tomato</KEYWORD4>
+            <KEYWORD4>turquoise</KEYWORD4>
+            <KEYWORD4>violet</KEYWORD4>
+            <KEYWORD4>wheat</KEYWORD4>
+            <KEYWORD4>white</KEYWORD4>
+            <KEYWORD4>whitesmoke</KEYWORD4>
+            <KEYWORD4>yellow</KEYWORD4>
+            <KEYWORD4>yellowgreen</KEYWORD4>
 
 			<!-- "functions", here for autocomplete: -->
 			<KEYWORD1>rgb</KEYWORD1>
+			<KEYWORD1>rgba</KEYWORD1>
+			<KEYWORD1>hsl</KEYWORD1>
+			<KEYWORD1>hsla</KEYWORD1>
 			<KEYWORD1>url</KEYWORD1>
 		</KEYWORDS>
 	</RULES>
diff --git a/modes/d.xml b/modes/d.xml
index bfa5b81..c2547d9 100644
--- a/modes/d.xml
+++ b/modes/d.xml
@@ -110,97 +110,113 @@
         <MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
 
         <KEYWORDS>
-            <KEYWORD1>abstract</KEYWORD1>
-            <KEYWORD3>alias</KEYWORD3>
-            <KEYWORD4>align</KEYWORD4>
-            <KEYWORD2>asm</KEYWORD2>
-            <KEYWORD2>assert</KEYWORD2>
-            <KEYWORD3>auto</KEYWORD3>
-            <KEYWORD3>bit</KEYWORD3>
-            <KEYWORD4>body</KEYWORD4>
-            <KEYWORD1>break</KEYWORD1>
-            <KEYWORD3>byte</KEYWORD3>
-            <KEYWORD1>case</KEYWORD1>
-            <KEYWORD3>cast</KEYWORD3>
-            <KEYWORD1>catch</KEYWORD1>
-            <KEYWORD3>cent</KEYWORD3>
-            <KEYWORD3>char</KEYWORD3>
-            <KEYWORD3>class</KEYWORD3>
-            <KEYWORD3>cfloat</KEYWORD3>
-            <KEYWORD3>cdouble</KEYWORD3>
-            <KEYWORD3>creal</KEYWORD3>
-            <INVALID>const</INVALID>
-            <KEYWORD1>continue</KEYWORD1>
-            <KEYWORD3>dchar</KEYWORD3>
-            <KEYWORD2>debug</KEYWORD2>
-            <KEYWORD1>default</KEYWORD1>
-            <KEYWORD4>delegate</KEYWORD4>
-            <KEYWORD1>delete</KEYWORD1>
-            <KEYWORD2>deprecated</KEYWORD2>
-            <KEYWORD1>do</KEYWORD1>
-            <KEYWORD3>double</KEYWORD3>
-            <KEYWORD1>else</KEYWORD1>
-            <KEYWORD3>enum</KEYWORD3>
-            <KEYWORD2>export</KEYWORD2>
-            <KEYWORD2>extern</KEYWORD2>
-            <LITERAL2>false</LITERAL2>
-            <KEYWORD1>final</KEYWORD1>
-            <KEYWORD1>finally</KEYWORD1>
-            <KEYWORD3>float</KEYWORD3>
-            <KEYWORD1>for</KEYWORD1>
-            <KEYWORD1>foreach</KEYWORD1>
-            <KEYWORD4>function</KEYWORD4>
-            <INVALID>goto</INVALID>
-            <KEYWORD3>idouble</KEYWORD3>
-            <KEYWORD1>if</KEYWORD1>
-            <KEYWORD3>ifloat</KEYWORD3>
-            <KEYWORD2>import</KEYWORD2>
-            <INVALID>in</INVALID>
-            <INVALID>inout</INVALID>
-            <KEYWORD3>int</KEYWORD3>
-            <KEYWORD2>interface</KEYWORD2>
-            <KEYWORD2>invariant</KEYWORD2>
-            <KEYWORD3>ireal</KEYWORD3>
-            <OPERATOR>is</OPERATOR>
+            <KEYWORD2>abstract</KEYWORD2>
+            <KEYWORD4>alias</KEYWORD4> 
+            <KEYWORD4>align</KEYWORD4> 
+            <KEYWORD4>asm</KEYWORD4> 
+            <KEYWORD4>assert</KEYWORD4> 
+            <KEYWORD3>auto</KEYWORD3> 
+            <KEYWORD1>body</KEYWORD1> 
+            <KEYWORD3>bool</KEYWORD3> 
+            <KEYWORD1>break</KEYWORD1> 
+            <KEYWORD3>byte</KEYWORD3> 
+            <KEYWORD1>case</KEYWORD1> 
+            <KEYWORD4>cast</KEYWORD4> 
+            <KEYWORD1>catch</KEYWORD1> 
+            <KEYWORD3>cdouble</KEYWORD3> 
+            <KEYWORD3>cent</KEYWORD3> 
+            <KEYWORD3>cfloat</KEYWORD3> 
+            <KEYWORD3>char</KEYWORD3> 
+            <KEYWORD1>class</KEYWORD1> 
+            <KEYWORD2>const</KEYWORD2> 
+            <KEYWORD1>continue</KEYWORD1> 
+            <KEYWORD3>creal</KEYWORD3> 
+            <KEYWORD3>dchar</KEYWORD3> 
+            <KEYWORD1>debug</KEYWORD1> 
+            <KEYWORD1>default</KEYWORD1> 
+            <KEYWORD4>delegate</KEYWORD4> 
+            <KEYWORD4>delete</KEYWORD4>
+            <KEYWORD2>deprecated</KEYWORD2> 
+            <KEYWORD1>do</KEYWORD1> 
+            <KEYWORD3>double</KEYWORD3> 
+            <KEYWORD1>else</KEYWORD1> 
+            <KEYWORD3>enum</KEYWORD3> 
+            <KEYWORD4>export</KEYWORD4> 
+            <KEYWORD2>extern</KEYWORD2> 
+            <LITERAL1>false</LITERAL1> 
+            <KEYWORD2>final</KEYWORD2> 
+            <KEYWORD1>finally</KEYWORD1> 
+            <KEYWORD3>float</KEYWORD3> 
+            <KEYWORD1>for</KEYWORD1> 
+            <KEYWORD1>foreach</KEYWORD1> 
+            <KEYWORD1>foreach_reverse</KEYWORD1> 
+            <KEYWORD4>function</KEYWORD4> 
+            <KEYWORD1>goto</KEYWORD1> 
+            <KEYWORD3>idouble</KEYWORD3> 
+            <KEYWORD1>if</KEYWORD1> 
+            <KEYWORD3>ifloat</KEYWORD3> 
+            <KEYWORD2>immutable</KEYWORD2> 
+            <KEYWORD4>import</KEYWORD4> 
+            <KEYWORD2>in</KEYWORD2> 
+            <KEYWORD2>inout</KEYWORD2> 
+            <KEYWORD3>int</KEYWORD3> 
+            <KEYWORD3>interface</KEYWORD3> 
+            <KEYWORD4>invariant</KEYWORD4> 
+            <KEYWORD3>ireal</KEYWORD3> 
+            <KEYWORD4>is</KEYWORD4> 
+            <KEYWORD2>lazy</KEYWORD2> 
             <KEYWORD3>long</KEYWORD3>
-            <KEYWORD4>module</KEYWORD4>
-            <KEYWORD1>new</KEYWORD1>
-            <LITERAL2>null</LITERAL2>
-            <INVALID>out</INVALID>
-            <KEYWORD4>override</KEYWORD4>
-            <KEYWORD2>package</KEYWORD2>
-            <KEYWORD2>pragma</KEYWORD2>
-            <KEYWORD1>private</KEYWORD1>
-            <KEYWORD1>protected</KEYWORD1>
-            <KEYWORD1>public</KEYWORD1>
-            <KEYWORD3>real</KEYWORD3>
-            <KEYWORD1>return</KEYWORD1>
-            <KEYWORD3>short</KEYWORD3>
-            <KEYWORD1>static</KEYWORD1>
-            <KEYWORD3>struct</KEYWORD3>
-            <LITERAL2>super</LITERAL2>
-            <KEYWORD1>switch</KEYWORD1>
-            <KEYWORD1>synchronized</KEYWORD1>
-            <KEYWORD3>template</KEYWORD3>
-            <LITERAL2>this</LITERAL2>
-            <KEYWORD1>throw</KEYWORD1>
-            <LITERAL2>true</LITERAL2>
-            <KEYWORD1>try</KEYWORD1>
-            <KEYWORD3>typedef</KEYWORD3>
-            <KEYWORD1>typeof</KEYWORD1>
-            <KEYWORD3>ubyte</KEYWORD3>
-            <KEYWORD3>ucent</KEYWORD3>
-            <KEYWORD3>uint</KEYWORD3>
-            <KEYWORD3>ulong</KEYWORD3>
-            <KEYWORD3>union</KEYWORD3>
-            <KEYWORD2>unittest</KEYWORD2>
-            <KEYWORD3>ushort</KEYWORD3>
-            <KEYWORD2>version</KEYWORD2>
-            <KEYWORD3>void</KEYWORD3>
-            <KEYWORD1>volatile</KEYWORD1>
-            <KEYWORD3>wchar</KEYWORD3>
-            <KEYWORD1>while</KEYWORD1>
-            <KEYWORD2>with</KEYWORD2>
+            <INVALID>macro</INVALID> 
+            <KEYWORD4>mixin</KEYWORD4> 
+            <KEYWORD4>module</KEYWORD4> 
+            <KEYWORD4>new</KEYWORD4> 
+            <KEYWORD2>nothrow</KEYWORD2> 
+            <LITERAL1>null</LITERAL1> 
+            <KEYWORD2>out</KEYWORD2> 
+            <KEYWORD2>override</KEYWORD2>
+            <KEYWORD4>package</KEYWORD4> 
+            <KEYWORD4>pragma</KEYWORD4> 
+            <KEYWORD2>private</KEYWORD2> 
+            <KEYWORD2>protected</KEYWORD2> 
+            <KEYWORD2>public</KEYWORD2> 
+            <KEYWORD2>pure</KEYWORD2> 
+            <KEYWORD3>real</KEYWORD3> 
+            <KEYWORD2>ref</KEYWORD2> 
+            <KEYWORD1>return</KEYWORD1> 
+            <KEYWORD1>scope</KEYWORD1> 
+            <KEYWORD2>shared</KEYWORD2> 
+            <KEYWORD3>short</KEYWORD3> 
+            <KEYWORD2>static</KEYWORD2> 
+            <KEYWORD3>struct</KEYWORD3> 
+            <KEYWORD4>super</KEYWORD4> 
+            <KEYWORD1>switch</KEYWORD1> 
+            <KEYWORD2>synchronized</KEYWORD2> 
+            <KEYWORD4>template</KEYWORD4> 
+            <LITERAL1>this</LITERAL1> 
+            <KEYWORD1>throw</KEYWORD1> 
+            <LITERAL1>true</LITERAL1> 
+            <KEYWORD1>try</KEYWORD1> 
+            <KEYWORD4>typedef</KEYWORD4> 
+            <KEYWORD4>typeid</KEYWORD4> 
+            <KEYWORD4>typeof</KEYWORD4> 
+            <KEYWORD3>ubyte</KEYWORD3> 
+            <KEYWORD3>ucent</KEYWORD3> 
+            <KEYWORD3>uint</KEYWORD3> 
+            <KEYWORD3>ulong</KEYWORD3> 
+            <KEYWORD3>union</KEYWORD3> 
+            <KEYWORD1>unittest</KEYWORD1> 
+            <KEYWORD3>ushort</KEYWORD3> 
+            <KEYWORD1>version</KEYWORD1> 
+            <KEYWORD3>void</KEYWORD3> 
+            <KEYWORD2>volatile</KEYWORD2> 
+            <KEYWORD3>wchar</KEYWORD3> 
+            <KEYWORD1>while</KEYWORD1> 
+            <KEYWORD1>with</KEYWORD1> 
+            <KEYWORD1>__FILE__</KEYWORD1> 
+            <KEYWORD1>__LINE__</KEYWORD1> 
+            <KEYWORD2>__gshared</KEYWORD2> 
+            <KEYWORD1>__thread</KEYWORD1> 
+            <KEYWORD1>__traits</KEYWORD1>
         </KEYWORDS>
     </RULES>
     <RULES SET="NESTED_COMMENT" DEFAULT="COMMENT1">
diff --git a/modes/dart.xml b/modes/dart.xml
new file mode 100644
index 0000000..b555bb4
--- /dev/null
+++ b/modes/dart.xml
@@ -0,0 +1,276 @@
+<?xml version="1.0"?>
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+
+<!-- Dart mode by Chris Sullins
+This is a jedit mode file for Dart programming language.
+Copyright (C) 2012 Chris Sullins, based on javascript mode by Andre Kaplan
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+-->
+
+<MODE>
+	<PROPS>
+		<PROPERTY NAME="commentStart" VALUE="/*" />
+		<PROPERTY NAME="commentEnd" VALUE="*/" />
+		<PROPERTY NAME="lineComment" VALUE="//" />
+		<PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
+		
+		<!-- Auto indent -->
+		<PROPERTY NAME="indentOpenBrackets" VALUE="{[" />
+		<PROPERTY NAME="indentCloseBrackets" VALUE="]}" />
+		<PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
+		<PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
+		<PROPERTY NAME="indentNextLine"
+			VALUE="\s*(((if|while)\s*\(|else\s*|else\s+if\s*\(|for\s*\(.*\))[^{;]*)" />
+		<PROPERTY NAME="unindentThisLine"
+			VALUE="^.*(default:\s*|case.*:.*)$" />
+		<PROPERTY NAME="electricKeys" VALUE=":" />
+	</PROPS>
+	
+	<!-- DART string literal where variables get parsed -->
+	<RULES SET="DART_LITERAL1" DEFAULT="LITERAL1" ESCAPE="\">
+		<!-- expressions in curly braces ("${foo}") -->
+		<SPAN_REGEXP HASH_CHAR="$" TYPE="LITERAL4" DELEGATE="DART_EXPRESSION">
+			<BEGIN>\$\{</BEGIN>
+			<END>}</END>
+		</SPAN_REGEXP>
+		
+		<SEQ_REGEXP HASH_CHAR="$" TYPE="LITERAL4">\$[_a-zA-Z][_a-zA-Z0-9]*</SEQ_REGEXP>
+	</RULES>
+	
+	<RULES SET="DART_EXPRESSION"
+		HIGHLIGHT_DIGITS="TRUE"
+		DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)">
+		
+		<SPAN TYPE="COMMENT3">
+			<BEGIN>/**</BEGIN>
+			<END>*/</END>
+		</SPAN>
+		
+		<SPAN TYPE="COMMENT1">
+			<BEGIN>/*</BEGIN>
+			<END>*/</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1">
+			<BEGIN>@"""</BEGIN>
+			<END>"""</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1">
+			<BEGIN>@'''</BEGIN>
+			<END>'''</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
+			<BEGIN>@"</BEGIN>
+			<END>"</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
+			<BEGIN>@'</BEGIN>
+			<END>'</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1" DELEGATE="DART_LITERAL1">
+			<BEGIN>"""</BEGIN>
+			<END>"""</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1" DELEGATE="DART_LITERAL1">
+			<BEGIN>'''</BEGIN>
+			<END>'''</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\" DELEGATE="DART_LITERAL1">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\" DELEGATE="DART_LITERAL1">
+			<BEGIN>'</BEGIN>
+			<END>'</END>
+		</SPAN>
+		
+		<SEQ TYPE="OPERATOR">=</SEQ>
+		<SEQ TYPE="OPERATOR">!</SEQ>
+		<SEQ TYPE="OPERATOR">>=</SEQ>
+		<SEQ TYPE="OPERATOR"><=</SEQ>
+		<SEQ TYPE="OPERATOR">+</SEQ>
+		<SEQ TYPE="OPERATOR">-</SEQ>
+		<SEQ TYPE="OPERATOR">/</SEQ>
+		<SEQ TYPE="OPERATOR">*</SEQ>
+		<SEQ TYPE="OPERATOR">></SEQ>
+		<SEQ TYPE="OPERATOR"><</SEQ>
+		<SEQ TYPE="OPERATOR">%</SEQ>
+		<SEQ TYPE="OPERATOR">&</SEQ>
+		<SEQ TYPE="OPERATOR">|</SEQ>
+		<SEQ TYPE="OPERATOR">^</SEQ>
+		<SEQ TYPE="OPERATOR"><<</SEQ>
+		<SEQ TYPE="OPERATOR">>>></SEQ>
+		<SEQ TYPE="OPERATOR">>></SEQ>
+		<SEQ TYPE="OPERATOR">~/</SEQ>
+		
+		<SEQ TYPE="OPERATOR">.</SEQ>
+		<SEQ TYPE="OPERATOR">;</SEQ>
+		<SEQ TYPE="OPERATOR">]</SEQ>
+		<SEQ TYPE="OPERATOR">[</SEQ>
+		<SEQ TYPE="OPERATOR">}</SEQ>
+		<SEQ TYPE="OPERATOR">{</SEQ>
+		
+		<MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS>
+		<SEQ TYPE="OPERATOR">)</SEQ>
+		
+		<KEYWORDS>
+			<!-- literals -->
+			<LITERAL2>null</LITERAL2>
+			<LITERAL2>true</LITERAL2>
+			<LITERAL2>false</LITERAL2>
+			
+			<!-- types -->
+			<KEYWORD3>bool</KEYWORD3>
+			<KEYWORD3>int</KEYWORD3>
+			<KEYWORD3>double</KEYWORD3>
+			<KEYWORD3>num</KEYWORD3>
+			<KEYWORD3>void</KEYWORD3>
+			
+			<!-- stdlib types -->
+			<!-- comment out for consistency with user-defined types -->
+			<KEYWORD4>AssertionError</KEYWORD4>
+			<KEYWORD4>Clock</KEYWORD4>
+			<KEYWORD4>Collection</KEYWORD4>
+			<KEYWORD4>Comparable</KEYWORD4>
+			<KEYWORD4>Date</KEYWORD4>
+			<KEYWORD4>Dispatcher</KEYWORD4>
+			<KEYWORD4>Duration</KEYWORD4>
+			<KEYWORD4>Expect</KEYWORD4>
+			<KEYWORD4>FallThroughError</KEYWORD4>
+			<KEYWORD4>Function</KEYWORD4>
+			<KEYWORD4>HashMap</KEYWORD4>
+			<KEYWORD4>HashSet</KEYWORD4>
+			<KEYWORD4>Hashable</KEYWORD4>
+			<KEYWORD4>Isolate</KEYWORD4>
+			<KEYWORD4>Iterable</KEYWORD4>
+			<KEYWORD4>Iterator</KEYWORD4>
+			<KEYWORD4>LinkedHashMap</KEYWORD4>
+			<KEYWORD4>List</KEYWORD4>
+			<KEYWORD4>Map</KEYWORD4>
+			<KEYWORD4>Match</KEYWORD4>
+			<KEYWORD4>Math</KEYWORD4>
+			<KEYWORD4>Object</KEYWORD4>
+			<KEYWORD4>Pattern</KEYWORD4>
+			<KEYWORD4>Promise</KEYWORD4>
+			<KEYWORD4>Proxy</KEYWORD4>
+			<KEYWORD4>Queue</KEYWORD4>
+			<KEYWORD4>ReceivePort</KEYWORD4>
+			<KEYWORD4>RegExp</KEYWORD4>
+			<KEYWORD4>SendPort</KEYWORD4>
+			<KEYWORD4>Set</KEYWORD4>
+			<KEYWORD4>StopWatch</KEYWORD4>
+			<KEYWORD4>String</KEYWORD4>
+			<KEYWORD4>StringBuffer</KEYWORD4>
+			<KEYWORD4>Strings</KEYWORD4>
+			<KEYWORD4>TimeZone</KEYWORD4>
+			<KEYWORD4>TypeError</KEYWORD4>
+			
+			<!-- stdlib exceptions -->
+			<KEYWORD4>BadNumberFormatException</KEYWORD4>
+			<KEYWORD4>ClosureArgumentMismatchException</KEYWORD4>
+			<KEYWORD4>EmptyQueueException</KEYWORD4>
+			<KEYWORD4>Exception</KEYWORD4>
+			<KEYWORD4>ExpectException</KEYWORD4>
+			<KEYWORD4>IllegalAccessException</KEYWORD4>
+			<KEYWORD4>IllegalArgumentException</KEYWORD4>
+			<KEYWORD4>IllegalJSRegExpException</KEYWORD4>
+			<KEYWORD4>IndexOutOfRangeException</KEYWORD4>
+			<KEYWORD4>IntegerDivisionByZeroException</KEYWORD4>
+			<KEYWORD4>NoMoreElementsException</KEYWORD4>
+			<KEYWORD4>NoSuchMethodException</KEYWORD4>
+			<KEYWORD4>NotImplementedException</KEYWORD4>
+			<KEYWORD4>NullPointerException</KEYWORD4>
+			<KEYWORD4>ObjectNotClosureException</KEYWORD4>
+			<KEYWORD4>OutOfMemoryException</KEYWORD4>
+			<KEYWORD4>StackOverflowException</KEYWORD4>
+			<KEYWORD4>UnsupportedOperationException</KEYWORD4>
+			<KEYWORD4>WrongArgumentCountException</KEYWORD4>
+			
+			<KEYWORD1>is</KEYWORD1>
+			<KEYWORD1>implements</KEYWORD1>
+			
+			<KEYWORD1>const</KEYWORD1>
+			<KEYWORD1>new</KEYWORD1>
+			<LITERAL2>this</LITERAL2>
+			<LITERAL2>super</LITERAL2>
+		</KEYWORDS>
+	</RULES>
+	
+	<RULES
+		HIGHLIGHT_DIGITS="TRUE"
+		DIGIT_RE="(0x[\p{XDigit}]+[lL]?|[\p{Digit}]+(e[\p{Digit}]*)?[lLdDfF]?)"
+		IGNORE_CASE="FALSE">
+		
+		<SEQ TYPE="COMMENT2">//--></SEQ>
+		<EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
+		
+		<EOL_SPAN TYPE="KEYWORD2">#!</EOL_SPAN>
+		<SEQ TYPE="KEYWORD2">#library</SEQ>
+		<SEQ TYPE="KEYWORD2">#import</SEQ>
+		<SEQ TYPE="KEYWORD2">#source</SEQ>
+		<SEQ TYPE="KEYWORD2">#resource</SEQ>
+		
+		<KEYWORDS>
+			<!-- general keywords -->
+			<KEYWORD1>abstract</KEYWORD1>
+			<KEYWORD1>assert</KEYWORD1>
+			<KEYWORD1>class</KEYWORD1>
+			<KEYWORD1>extends</KEYWORD1>
+			<KEYWORD1>factory</KEYWORD1>
+			<KEYWORD1>get</KEYWORD1>
+			<KEYWORD1>import</KEYWORD1>
+			<KEYWORD1>interface</KEYWORD1>
+			<KEYWORD1>library</KEYWORD1>
+			<KEYWORD1>negate</KEYWORD1>
+			<KEYWORD1>operator</KEYWORD1>
+			<KEYWORD1>set</KEYWORD1>
+			<KEYWORD1>source</KEYWORD1>
+			<KEYWORD1>static</KEYWORD1>
+			<KEYWORD1>typedef</KEYWORD1>
+			
+			<!-- control keywords -->
+			<KEYWORD1>var</KEYWORD1>
+			<KEYWORD1>final</KEYWORD1>
+			<KEYWORD1>if</KEYWORD1>
+			<KEYWORD1>else</KEYWORD1>
+			<KEYWORD1>for</KEYWORD1>
+			<KEYWORD1>in</KEYWORD1>
+			<KEYWORD1>while</KEYWORD1>
+			<KEYWORD1>do</KEYWORD1>
+			<KEYWORD1>switch</KEYWORD1>
+			<KEYWORD1>case</KEYWORD1>
+			<KEYWORD1>default</KEYWORD1>
+			<KEYWORD1>in</KEYWORD1>
+			<KEYWORD1>try</KEYWORD1>
+			<KEYWORD1>catch</KEYWORD1>
+			<KEYWORD1>finally</KEYWORD1>
+			<KEYWORD1>return</KEYWORD1>
+			<KEYWORD1>break</KEYWORD1>
+			<KEYWORD1>continue</KEYWORD1>
+			<KEYWORD1>throw</KEYWORD1>
+			<KEYWORD1>assert</KEYWORD1>
+		</KEYWORDS>
+		
+		<IMPORT DELEGATE="DART_EXPRESSION" />
+	</RULES>
+</MODE>
diff --git a/modes/fortran90.xml b/modes/fortran90.xml
new file mode 100644
index 0000000..b60b925
--- /dev/null
+++ b/modes/fortran90.xml
@@ -0,0 +1,237 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+<!--  FORTRAN90 edit mode
+      Version 0.1
+      2008-12-08
+      suitable for jEdit 4.2final and jEdit 4.3pre16
+-->
+<!-- This is a mode for FORTRAN 90/95 and newer, free-form source files.
+In general, this supports common features of the F90 specification.
+-->
+<!-- Suggested catalog file entry:
+
+<MODE NAME="fortran90"		FILE="fortran90.xml"
+				FILE_NAME_GLOB="*.{f90,f95,f03}" />
+ -->
+<MODE>
+    <PROPS>
+         <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
+         <PROPERTY NAME="indentNextLines" VALUE="\s*((if\s*\(.*\)\s*then|else\s*|do\s*)*)" />
+    </PROPS>
+
+    <RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="FALSE">
+
+<!-- comments started by ! in free-form fortran-->
+<EOL_SPAN TYPE="COMMENT1">!</EOL_SPAN>
+
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
+			<BEGIN>'</BEGIN>
+			<END>'</END>
+		</SPAN>
+
+<!-- Highlighted Operators -->
+		<SEQ TYPE="OPERATOR"><=</SEQ>
+		<SEQ TYPE="OPERATOR">>=</SEQ>
+		<SEQ TYPE="OPERATOR">></SEQ>
+		<SEQ TYPE="OPERATOR"><</SEQ>
+		<SEQ TYPE="OPERATOR">&</SEQ>
+		<SEQ TYPE="OPERATOR">/=</SEQ>
+		<SEQ TYPE="OPERATOR">==</SEQ>
+		<SEQ TYPE="OPERATOR">.lt.</SEQ>
+		<SEQ TYPE="OPERATOR">.gt.</SEQ>
+		<SEQ TYPE="OPERATOR">.eq.</SEQ>
+		<SEQ TYPE="OPERATOR">.ne.</SEQ>
+		<SEQ TYPE="OPERATOR">.le.</SEQ>
+		<SEQ TYPE="OPERATOR">.ge.</SEQ>
+		<SEQ TYPE="OPERATOR">.AND.</SEQ>
+		<SEQ TYPE="OPERATOR">.OR.</SEQ>
+
+<KEYWORDS>
+<!-- unclassified keywords -->
+<KEYWORD1>INCLUDE</KEYWORD1>
+<!-- Program units and calling them -->
+<KEYWORD1>PROGRAM</KEYWORD1>
+<KEYWORD1>MODULE</KEYWORD1>
+<KEYWORD1>SUBROUTINE</KEYWORD1>
+<KEYWORD1>FUNCTION</KEYWORD1>
+<KEYWORD1>CONTAINS</KEYWORD1>
+<KEYWORD1>USE</KEYWORD1>
+<KEYWORD1>CALL</KEYWORD1>
+<KEYWORD1>RETURN</KEYWORD1>
+<!-- data types, declaration, and allocation keywords -->
+<KEYWORD1>IMPLICIT</KEYWORD1>
+<KEYWORD1>EXPLICIT</KEYWORD1>
+<KEYWORD1>NONE</KEYWORD1>
+<KEYWORD1>DATA</KEYWORD1>
+<KEYWORD1>PARAMETER</KEYWORD1>
+<KEYWORD1>ALLOCATE</KEYWORD1>
+<KEYWORD1>ALLOCATABLE</KEYWORD1>
+<KEYWORD1>ALLOCATED</KEYWORD1>
+<KEYWORD1>DEALLOCATE</KEYWORD1>
+<KEYWORD1>INTEGER</KEYWORD1>
+<KEYWORD1>REAL</KEYWORD1>
+<KEYWORD1>DOUBLE</KEYWORD1>
+<KEYWORD1>PRECISION</KEYWORD1>
+<KEYWORD1>COMPLEX</KEYWORD1>
+<KEYWORD1>LOGICAL</KEYWORD1>
+<KEYWORD1>CHARACTER</KEYWORD1>
+<KEYWORD1>DIMENSION</KEYWORD1>
+<KEYWORD1>KIND</KEYWORD1>
+<!-- FORTRAN Statements -->
+<KEYWORD1>CASE</KEYWORD1>
+<KEYWORD1>SELECT</KEYWORD1>
+<KEYWORD1>DEFAULT</KEYWORD1>
+<KEYWORD1>CONTINUE</KEYWORD1>
+<KEYWORD1>CYCLE</KEYWORD1>
+<KEYWORD1>DO</KEYWORD1>
+<KEYWORD1>WHILE</KEYWORD1>
+<KEYWORD1>ELSE</KEYWORD1>
+<KEYWORD1>IF</KEYWORD1>
+<KEYWORD1>ELSEIF</KEYWORD1>
+<KEYWORD1>THEN</KEYWORD1>
+<KEYWORD1>ELSEWHERE</KEYWORD1>
+<KEYWORD1>END</KEYWORD1>
+<KEYWORD1>ENDIF</KEYWORD1>
+<KEYWORD1>ENDDO</KEYWORD1>
+<KEYWORD1>FORALL</KEYWORD1>
+<KEYWORD1>WHERE</KEYWORD1>
+<KEYWORD1>EXIT</KEYWORD1>
+<KEYWORD1>GOTO</KEYWORD1>
+<KEYWORD1>PAUSE</KEYWORD1>
+<KEYWORD1>STOP</KEYWORD1>
+<!-- i/o keywords -->
+<KEYWORD1>BACKSPACE</KEYWORD1>
+<KEYWORD1>CLOSE</KEYWORD1>
+<KEYWORD1>ENDFILE</KEYWORD1>
+<KEYWORD1>INQUIRE</KEYWORD1>
+<KEYWORD1>OPEN</KEYWORD1>
+<KEYWORD1>PRINT</KEYWORD1>
+<KEYWORD1>READ</KEYWORD1>
+<KEYWORD1>REWIND</KEYWORD1>
+<KEYWORD1>WRITE</KEYWORD1>
+<KEYWORD1>FORMAT</KEYWORD1>
+<!-- Type conversion and utility functions -->
+<KEYWORD1>AIMAG</KEYWORD1>
+<KEYWORD1>AINT</KEYWORD1>
+<KEYWORD1>AMAX0</KEYWORD1>
+<KEYWORD1>AMIN0</KEYWORD1>
+<KEYWORD1>ANINT</KEYWORD1>
+<KEYWORD1>CEILING</KEYWORD1>
+<KEYWORD1>CMPLX</KEYWORD1>
+<KEYWORD1>CONJG</KEYWORD1>
+<KEYWORD1>DBLE</KEYWORD1>
+<KEYWORD1>DCMPLX</KEYWORD1>
+<KEYWORD1>DFLOAT</KEYWORD1>
+<KEYWORD1>DIM</KEYWORD1>
+<KEYWORD1>DPROD</KEYWORD1>
+<KEYWORD1>FLOAT</KEYWORD1>
+<KEYWORD1>FLOOR</KEYWORD1>
+<KEYWORD1>IFIX</KEYWORD1>
+<KEYWORD1>IMAG</KEYWORD1>
+<KEYWORD1>INT</KEYWORD1>
+<KEYWORD1>LOGICAL</KEYWORD1>
+<KEYWORD1>MODULO</KEYWORD1>
+<KEYWORD1>NINT</KEYWORD1>
+<KEYWORD1>REAL</KEYWORD1>
+<KEYWORD1>SIGN</KEYWORD1>
+<KEYWORD1>SNGL</KEYWORD1>
+<KEYWORD1>TRANSFER</KEYWORD1>
+<KEYWORD1>ZEXT</KEYWORD1>
+<!-- More Functions -->
+<KEYWORD1>ABS</KEYWORD1>
+<KEYWORD1>ACOS</KEYWORD1>
+<KEYWORD1>AIMAG</KEYWORD1>
+<KEYWORD1>AINT</KEYWORD1>
+<KEYWORD1>ALOG</KEYWORD1>
+<KEYWORD1>ALOG10</KEYWORD1>
+<KEYWORD1>AMAX0</KEYWORD1>
+<KEYWORD1>AMAX1</KEYWORD1>
+<KEYWORD1>AMIN0</KEYWORD1>
+<KEYWORD1>AMIN1</KEYWORD1>
+<KEYWORD1>AMOD</KEYWORD1>
+<KEYWORD1>ANINT</KEYWORD1>
+<KEYWORD1>ASIN</KEYWORD1>
+<KEYWORD1>ATAN</KEYWORD1>
+<KEYWORD1>ATAN2</KEYWORD1>
+<KEYWORD1>CABS</KEYWORD1>
+<KEYWORD1>CCOS</KEYWORD1>
+<KEYWORD1>CHAR</KEYWORD1>
+<KEYWORD1>CLOG</KEYWORD1>
+<KEYWORD1>CMPLX</KEYWORD1>
+<KEYWORD1>CONJG</KEYWORD1>
+<KEYWORD1>COS</KEYWORD1>
+<KEYWORD1>COSH</KEYWORD1>
+<KEYWORD1>CSIN</KEYWORD1>
+<KEYWORD1>CSQRT</KEYWORD1>
+<KEYWORD1>DABS</KEYWORD1>
+<KEYWORD1>DACOS</KEYWORD1>
+<KEYWORD1>DASIN</KEYWORD1>
+<KEYWORD1>DATAN</KEYWORD1>
+<KEYWORD1>DATAN2</KEYWORD1>
+<KEYWORD1>DBLE</KEYWORD1>
+<KEYWORD1>DCOS</KEYWORD1>
+<KEYWORD1>DCOSH</KEYWORD1>
+<KEYWORD1>DDIM</KEYWORD1>
+<KEYWORD1>DEXP</KEYWORD1>
+<KEYWORD1>DIM</KEYWORD1>
+<KEYWORD1>DINT</KEYWORD1>
+<KEYWORD1>DLOG</KEYWORD1>
+<KEYWORD1>DLOG10</KEYWORD1>
+<KEYWORD1>DMAX1</KEYWORD1>
+<KEYWORD1>DMIN1</KEYWORD1>
+<KEYWORD1>DMOD</KEYWORD1>
+<KEYWORD1>DNINT</KEYWORD1>
+<KEYWORD1>DPROD</KEYWORD1>
+<KEYWORD1>DREAL</KEYWORD1>
+<KEYWORD1>DSIGN</KEYWORD1>
+<KEYWORD1>DSIN</KEYWORD1>
+<KEYWORD1>DSINH</KEYWORD1>
+<KEYWORD1>DSQRT</KEYWORD1>
+<KEYWORD1>DTAN</KEYWORD1>
+<KEYWORD1>DTANH</KEYWORD1>
+<KEYWORD1>EXP</KEYWORD1>
+<KEYWORD1>FLOAT</KEYWORD1>
+<KEYWORD1>IABS</KEYWORD1>
+<KEYWORD1>ICHAR</KEYWORD1>
+<KEYWORD1>IDIM</KEYWORD1>
+<KEYWORD1>IDINT</KEYWORD1>
+<KEYWORD1>IDNINT</KEYWORD1>
+<KEYWORD1>IFIX</KEYWORD1>
+<KEYWORD1>INDEX</KEYWORD1>
+<KEYWORD1>INT</KEYWORD1>
+<KEYWORD1>ISIGN</KEYWORD1>
+<KEYWORD1>LEN</KEYWORD1>
+<KEYWORD1>LGE</KEYWORD1>
+<KEYWORD1>LGT</KEYWORD1>
+<KEYWORD1>LLE</KEYWORD1>
+<KEYWORD1>LLT</KEYWORD1>
+<KEYWORD1>LOG</KEYWORD1>
+<KEYWORD1>LOG10</KEYWORD1>
+<KEYWORD1>MAX</KEYWORD1>
+<KEYWORD1>MAX0</KEYWORD1>
+<KEYWORD1>MAX1</KEYWORD1>
+<KEYWORD1>MIN</KEYWORD1>
+<KEYWORD1>MIN0</KEYWORD1>
+<KEYWORD1>MIN1</KEYWORD1>
+<KEYWORD1>MOD</KEYWORD1>
+<KEYWORD1>NINT</KEYWORD1>
+<KEYWORD1>REAL</KEYWORD1>
+<KEYWORD1>SIGN</KEYWORD1>
+<KEYWORD1>SIN</KEYWORD1>
+<KEYWORD1>SINH</KEYWORD1>
+<KEYWORD1>SNGL</KEYWORD1>
+<KEYWORD1>SQRT</KEYWORD1>
+<KEYWORD1>TAN</KEYWORD1>
+<KEYWORD1>TANH</KEYWORD1>
+<!-- logical values -->
+<KEYWORD1>.false.</KEYWORD1>
+<KEYWORD1>.true.</KEYWORD1>
+
+</KEYWORDS>
+    </RULES>
+</MODE>
diff --git a/modes/haskell.xml b/modes/haskell.xml
index 103406a..ff36920 100644
--- a/modes/haskell.xml
+++ b/modes/haskell.xml
@@ -12,9 +12,6 @@
 		<PROPERTY NAME="commentStart" VALUE="{-" />
 		<PROPERTY NAME="commentEnd" VALUE="-}" />
 		<PROPERTY NAME="lineComment" VALUE="--" />
-		<!-- apparently, this is required... -->
-		<PROPERTY NAME="tabSize" VALUE="8" />
-		<PROPERTY NAME="indentSize" VALUE="8" />
 	</PROPS>
 
 	<RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="FALSE">
@@ -70,6 +67,10 @@
                 <!-- Non-Haskell-98 keywords -->
                 <SEQ_REGEXP TYPE="KEYWORD1">foreign(?![a-z_A-Z0-9'])</SEQ_REGEXP>
                 <SEQ_REGEXP TYPE="KEYWORD1">family(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+                <!-- GHC extension keywords -->
+                <SEQ_REGEXP TYPE="KEYWORD1">proc(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+                <SEQ_REGEXP TYPE="KEYWORD1">rec(?![a-z_A-Z0-9'])</SEQ_REGEXP>
+                <SEQ_REGEXP TYPE="KEYWORD1">mdo(?![a-z_A-Z0-9'])</SEQ_REGEXP>
 
                 <SEQ_REGEXP TYPE="DIGIT">0[xXoO][0-9a-fA-F]+</SEQ_REGEXP>
                 <SEQ_REGEXP TYPE="DIGIT">[0-9]+(\.[0-9]+)?([eE][+-]?[0-9]+)?</SEQ_REGEXP>
@@ -86,7 +87,10 @@
                 <SEQ_REGEXP TYPE="KEYWORD4">@(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
                 <SEQ_REGEXP TYPE="KEYWORD4">~(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
                 <SEQ_REGEXP TYPE="KEYWORD4">=>(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
-                
+
+                <!-- GHC extension reserved operators -->
+                <SEQ_REGEXP TYPE="KEYWORD4">-(<{1,2})(?![!#$%&\*+\./<=>?@\\\^\|\-~:])</SEQ_REGEXP>
+
                 <!-- Normal operators, backquoted operators -->
                 <SEQ_REGEXP TYPE="OPERATOR">([A-Z][a-z_A-Z0-9']*\.)*[!#$%&\*+\./<=>?@\\\^\|\-~][!#$%&\*+\./<=>?@\\\^\|\-~:]*</SEQ_REGEXP>
                 <SEQ_REGEXP TYPE="OPERATOR">`([A-Z][a-z_A-Z0-9']*\.)*[a-z_][a-z_A-Z0-9']*`</SEQ_REGEXP>
diff --git a/modes/html.xml b/modes/html.xml
index 06a3edb..d871228 100644
--- a/modes/html.xml
+++ b/modes/html.xml
@@ -16,10 +16,10 @@
 		</SPAN>
 
 		<!-- JavaScript -->
-		<SPAN TYPE="MARKUP" DELEGATE="JAVASCRIPT">
-			<BEGIN><SCRIPT</BEGIN>
-			<END></SCRIPT></END>
-		</SPAN>
+		<SPAN_REGEXP TYPE="MARKUP" HASH_CHAR="<" DELEGATE="JAVASCRIPT">
+			<BEGIN><(?i)(script)</BEGIN>
+			<END></$1></END>
+		</SPAN_REGEXP>
 
 		<!-- stylesheet -->
 		<SPAN TYPE="MARKUP" DELEGATE="CSS">
@@ -76,110 +76,135 @@
 
 		<KEYWORDS>
 			<!-- HTML/XHTML elements, taken from http://de.selfhtml.org/html/referenz/elemente.htm -->
-			<MARKUP>a</MARKUP>
-			<MARKUP>abbr</MARKUP>
-			<MARKUP>acronym</MARKUP>
-			<MARKUP>address</MARKUP>
-			<MARKUP>applet</MARKUP>
-			<MARKUP>area</MARKUP>
-			<MARKUP>b</MARKUP>
-			<MARKUP>base</MARKUP>
-			<MARKUP>basefont</MARKUP>
-			<MARKUP>bdo</MARKUP>
-			<MARKUP>big</MARKUP>
-			<MARKUP>blockquote</MARKUP>
-			<MARKUP>body</MARKUP>
-			<MARKUP>br</MARKUP>
-			<MARKUP>button</MARKUP>
-			<MARKUP>caption</MARKUP>
-			<MARKUP>center</MARKUP>
-			<MARKUP>cite</MARKUP>
-			<MARKUP>code</MARKUP>
-			<MARKUP>col</MARKUP>
-			<MARKUP>colgroup</MARKUP>
-			<MARKUP>dd</MARKUP>
-			<MARKUP>del</MARKUP>
-			<MARKUP>dfn</MARKUP>
-			<MARKUP>dir</MARKUP>
-			<MARKUP>div</MARKUP>
-			<MARKUP>dl</MARKUP>
-			<MARKUP>dt</MARKUP>
-			<MARKUP>em</MARKUP>
-			<MARKUP>fieldset</MARKUP>
-			<MARKUP>font</MARKUP>
-			<MARKUP>form</MARKUP>
-			<MARKUP>frame</MARKUP>
-			<MARKUP>frameset</MARKUP>
-			<MARKUP>h1</MARKUP>
-			<MARKUP>h2</MARKUP>
-			<MARKUP>h3</MARKUP>
-			<MARKUP>h4</MARKUP>
-			<MARKUP>h5</MARKUP>
-			<MARKUP>h6</MARKUP>
-			<MARKUP>head</MARKUP>
-			<MARKUP>hr</MARKUP>
-			<MARKUP>html</MARKUP>
-			<MARKUP>i</MARKUP>
-			<MARKUP>iframe</MARKUP>
-			<MARKUP>img</MARKUP>
-			<MARKUP>input</MARKUP>
-			<MARKUP>ins</MARKUP>
-			<MARKUP>isindex</MARKUP>
-			<MARKUP>kbd</MARKUP>
-			<MARKUP>label</MARKUP>
-			<MARKUP>legend</MARKUP>
-			<MARKUP>li</MARKUP>
-			<MARKUP>link</MARKUP>
-			<MARKUP>map</MARKUP>
-			<MARKUP>menu</MARKUP>
-			<MARKUP>meta</MARKUP>
-			<MARKUP>noframes</MARKUP>
-			<MARKUP>noscript</MARKUP>
-			<MARKUP>object</MARKUP>
-			<MARKUP>ol</MARKUP>
-			<MARKUP>optgroup</MARKUP>
-			<MARKUP>option</MARKUP>
-			<MARKUP>p</MARKUP>
-			<MARKUP>param</MARKUP>
-			<MARKUP>pre</MARKUP>
-			<MARKUP>q</MARKUP>
-			<MARKUP>s</MARKUP>
-			<MARKUP>samp</MARKUP>
-			<MARKUP>script</MARKUP>
-			<MARKUP>select</MARKUP>
-			<MARKUP>small</MARKUP>
-			<MARKUP>span</MARKUP>
-			<MARKUP>strike</MARKUP>
-			<MARKUP>strong</MARKUP>
-			<MARKUP>style</MARKUP>
-			<MARKUP>sub</MARKUP>
-			<MARKUP>sup</MARKUP>
-			<MARKUP>table</MARKUP>
-			<MARKUP>tbody</MARKUP>
-			<MARKUP>td</MARKUP>
-			<MARKUP>textarea</MARKUP>
-			<MARKUP>tfoot</MARKUP>
-			<MARKUP>th</MARKUP>
-			<MARKUP>thead</MARKUP>
-			<MARKUP>title</MARKUP>
-			<MARKUP>tr</MARKUP>
-			<MARKUP>tt</MARKUP>
-			<MARKUP>u</MARKUP>
-			<MARKUP>ul</MARKUP>
-			<MARKUP>var</MARKUP>
+			<!-- updated to include html5 elements. Obsolete and deprecated elements
+			are still here for backward compatibility. -->
+			<KEYWORD1>a</KEYWORD1>
+			<KEYWORD1>abbr</KEYWORD1>
+			<KEYWORD1>acronym</KEYWORD1>
+			<KEYWORD1>address</KEYWORD1>
+			<KEYWORD1>applet</KEYWORD1>
+			<KEYWORD1>area</KEYWORD1>
+			<KEYWORD1>article</KEYWORD1>
+			<KEYWORD1>aside</KEYWORD1>
+			<KEYWORD1>audio</KEYWORD1>
+			<KEYWORD1>b</KEYWORD1>
+			<KEYWORD1>base</KEYWORD1>
+			<KEYWORD1>basefont</KEYWORD1>
+			<KEYWORD1>bdi</KEYWORD1>
+			<KEYWORD1>bdo</KEYWORD1>
+			<KEYWORD1>big</KEYWORD1>
+			<KEYWORD1>blockquote</KEYWORD1>
+			<KEYWORD1>body</KEYWORD1>
+			<KEYWORD1>br</KEYWORD1>
+			<KEYWORD1>button</KEYWORD1>
+			<KEYWORD1>canvas</KEYWORD1>
+			<KEYWORD1>caption</KEYWORD1>
+			<KEYWORD1>center</KEYWORD1>
+			<KEYWORD1>cite</KEYWORD1>
+			<KEYWORD1>code</KEYWORD1>
+			<KEYWORD1>col</KEYWORD1>
+			<KEYWORD1>colgroup</KEYWORD1>
+			<KEYWORD1>command</KEYWORD1>
+			<KEYWORD1>data</KEYWORD1>
+			<KEYWORD1>datalist</KEYWORD1>
+			<KEYWORD1>dd</KEYWORD1>
+			<KEYWORD1>del</KEYWORD1>
+			<KEYWORD1>details</KEYWORD1>
+			<KEYWORD1>dfn</KEYWORD1>
+			<KEYWORD1>dir</KEYWORD1>
+			<KEYWORD1>div</KEYWORD1>
+			<KEYWORD1>dl</KEYWORD1>
+			<KEYWORD1>dt</KEYWORD1>
+			<KEYWORD1>em</KEYWORD1>
+			<KEYWORD1>embed</KEYWORD1>
+			<KEYWORD1>fieldset</KEYWORD1>
+			<KEYWORD1>figcaption</KEYWORD1>
+			<KEYWORD1>figure</KEYWORD1>
+			<KEYWORD1>font</KEYWORD1>
+			<KEYWORD1>footer</KEYWORD1>
+			<KEYWORD1>form</KEYWORD1>
+			<KEYWORD1>frame</KEYWORD1>
+			<KEYWORD1>frameset</KEYWORD1>
+			<KEYWORD1>h1</KEYWORD1>
+			<KEYWORD1>h2</KEYWORD1>
+			<KEYWORD1>h3</KEYWORD1>
+			<KEYWORD1>h4</KEYWORD1>
+			<KEYWORD1>h5</KEYWORD1>
+			<KEYWORD1>h6</KEYWORD1>
+			<KEYWORD1>head</KEYWORD1>
+			<KEYWORD1>header</KEYWORD1>
+			<KEYWORD1>hgroup</KEYWORD1>
+			<KEYWORD1>hr</KEYWORD1>
+			<KEYWORD1>html</KEYWORD1>
+			<KEYWORD1>i</KEYWORD1>
+			<KEYWORD1>iframe</KEYWORD1>
+			<KEYWORD1>img</KEYWORD1>
+			<KEYWORD1>input</KEYWORD1>
+			<KEYWORD1>ins</KEYWORD1>
+			<KEYWORD1>isindex</KEYWORD1>
+			<KEYWORD1>kbd</KEYWORD1>
+			<KEYWORD1>keygen</KEYWORD1>
+			<KEYWORD1>label</KEYWORD1>
+			<KEYWORD1>legend</KEYWORD1>
+			<KEYWORD1>li</KEYWORD1>
+			<KEYWORD1>link</KEYWORD1>
+			<KEYWORD1>map</KEYWORD1>
+			<KEYWORD1>mark</KEYWORD1>
+			<KEYWORD1>menu</KEYWORD1>
+			<KEYWORD1>meta</KEYWORD1>
+			<KEYWORD1>meter</KEYWORD1>
+			<KEYWORD1>nav</KEYWORD1>
+			<KEYWORD1>noframes</KEYWORD1>
+			<KEYWORD1>noscript</KEYWORD1>
+			<KEYWORD1>object</KEYWORD1>
+			<KEYWORD1>ol</KEYWORD1>
+			<KEYWORD1>optgroup</KEYWORD1>
+			<KEYWORD1>option</KEYWORD1>
+			<KEYWORD1>output</KEYWORD1>
+			<KEYWORD1>p</KEYWORD1>
+			<KEYWORD1>param</KEYWORD1>
+			<KEYWORD1>pre</KEYWORD1>
+			<KEYWORD1>progress</KEYWORD1>
+			<KEYWORD1>q</KEYWORD1>
+			<KEYWORD1>rp</KEYWORD1>
+			<KEYWORD1>rt</KEYWORD1>
+			<KEYWORD1>ruby</KEYWORD1>
+			<KEYWORD1>s</KEYWORD1>
+			<KEYWORD1>samp</KEYWORD1>
+			<KEYWORD1>script</KEYWORD1>
+			<KEYWORD1>section</KEYWORD1>
+			<KEYWORD1>select</KEYWORD1>
+			<KEYWORD1>small</KEYWORD1>
+			<KEYWORD1>source</KEYWORD1>
+			<KEYWORD1>span</KEYWORD1>
+			<KEYWORD1>strike</KEYWORD1>
+			<KEYWORD1>strong</KEYWORD1>
+			<KEYWORD1>style</KEYWORD1>
+			<KEYWORD1>sub</KEYWORD1>
+			<KEYWORD1>summary</KEYWORD1>
+			<KEYWORD1>sup</KEYWORD1>
+			<KEYWORD1>table</KEYWORD1>
+			<KEYWORD1>tbody</KEYWORD1>
+			<KEYWORD1>td</KEYWORD1>
+			<KEYWORD1>textarea</KEYWORD1>
+			<KEYWORD1>tfoot</KEYWORD1>
+			<KEYWORD1>th</KEYWORD1>
+			<KEYWORD1>thead</KEYWORD1>
+			<KEYWORD1>time</KEYWORD1>
+			<KEYWORD1>title</KEYWORD1>
+			<KEYWORD1>tr</KEYWORD1>
+			<KEYWORD1>track</KEYWORD1>
+			<KEYWORD1>tt</KEYWORD1>
+			<KEYWORD1>u</KEYWORD1>
+			<KEYWORD1>ul</KEYWORD1>
+			<KEYWORD1>var</KEYWORD1>
+			<KEYWORD1>video</KEYWORD1>
+			<KEYWORD1>wbr</KEYWORD1>
 		</KEYWORDS>
 	</RULES>
 
 	<RULES SET="JAVASCRIPT" DEFAULT="MARKUP" IGNORE_CASE="TRUE">
-		<SEQ TYPE="MARKUP" DELEGATE="javascript::MAIN">></SEQ>
-		<!-- handle <SCRIPT SRC="..."> properly -->
-		<SEQ TYPE="MARKUP" DELEGATE="BACK_TO_HTML">SRC=</SEQ>
-
-		<!-- Inline CSS -->
- 		<SPAN_REGEXP TYPE="MARKUP" DELEGATE="css::PROPERTIES" HASH_CHAR="style">
-			<BEGIN>style\s*=\s*(["'])</BEGIN>
-			<END>$1</END>
-		</SPAN_REGEXP>
+		<IMPORT DELEGATE="javascript::MAIN"/>
 	</RULES>
 
 	<RULES SET="BACK_TO_HTML" DEFAULT="MARKUP">
diff --git a/modes/java.xml b/modes/java.xml
index 787838d..dd3383d 100644
--- a/modes/java.xml
+++ b/modes/java.xml
@@ -51,7 +51,10 @@
 			<END>'</END>
 		</SPAN>
 
-		<EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
+		<!-- end of line comment is defined this way rather than using an
+		EOL_SPAN because using an EOL_SPAN causes such comments in jsp
+		files to highlight incorrectly -->
+		<SEQ_REGEXP TYPE="COMMENT2">[/][/](.*?)$</SEQ_REGEXP>
 
 		<SEQ TYPE="OPERATOR">=</SEQ>
 		<SEQ TYPE="OPERATOR">!</SEQ>
@@ -59,7 +62,11 @@
 		<SEQ TYPE="OPERATOR"><=</SEQ>
 		<SEQ TYPE="OPERATOR">+</SEQ>
 		<SEQ TYPE="OPERATOR">-</SEQ>
-		<SEQ TYPE="OPERATOR">/</SEQ>
+		
+		<!-- division operator is defined this way so that the '//' at the
+		start of single line comments within java scriptlets in jsp files 
+		are not parsed as operators. -->
+		<SEQ_REGEXP TYPE="OPERATOR">/(?![/])</SEQ_REGEXP>
 
 		<!-- workaround to stop "*" from being colorized
 		     in import statements. -->
@@ -156,6 +163,7 @@
 
 	<!--{{{ DOUBLEQUOTE_LITERAL rule -->
 	<RULES SET="DOUBLEQUOTE_LITERAL" DEFAULT="LITERAL1" IGNORE_CASE="TRUE">
+		<SEQ TYPE="LITERAL4">\\</SEQ>
 		<SEQ TYPE="LITERAL4">\"</SEQ>
 		<SEQ TYPE="LITERAL4">\n</SEQ>
 		<SEQ TYPE="LITERAL4">\r</SEQ>
@@ -165,6 +173,7 @@
 	
 	<!--{{{ SIMPLEUOTE_LITERAL rule -->
 	<RULES SET="SIMPLEQUOTE_LITERAL" DEFAULT="LITERAL3" IGNORE_CASE="TRUE">
+		<SEQ TYPE="LITERAL4">\\</SEQ>
 		<SEQ TYPE="LITERAL4">\'</SEQ>
 		<SEQ TYPE="LITERAL4">\n</SEQ>
 		<SEQ TYPE="LITERAL4">\r</SEQ>
@@ -218,7 +227,7 @@
 			<END>}</END>
 		</SPAN_REGEXP>
 
-		<!-- for the common usage of the cvs keyword $Id: java.xml 19829 2011-08-24 09:32:24Z kpouer $ -->
+		<!-- for the common usage of the cvs keyword $Id: java.xml 20772 2012-01-13 18:54:27Z kog13 $ -->
 		<SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@version" NO_WORD_BREAK="FALSE" DELEGATE="JAVADOC_PARAM">
 			<BEGIN>@version\s+\$</BEGIN>
 			<END>$</END>
diff --git a/modes/jsp.xml b/modes/jsp.xml
index a3df000..df8a384 100644
--- a/modes/jsp.xml
+++ b/modes/jsp.xml
@@ -45,7 +45,7 @@
 		</SPAN>
 
 		<!-- JSP scriptlet -->
-		<SPAN TYPE="KEYWORD1" DELEGATE="java::MAIN">
+		<SPAN TYPE="KEYWORD1" DELEGATE="JAVA">
 			<BEGIN><%</BEGIN>
 			<END>%></END>
 		</SPAN>
@@ -205,6 +205,8 @@
 		<SEQ TYPE="MARKUP">/</SEQ>
 		<MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="OPERATOR">:</MARK_FOLLOWING>
 		<SEQ TYPE="OPERATOR">:</SEQ>
+		
+		<IMPORT DELEGATE="html::TAGS"/>
 	</RULES>
 
 
@@ -252,5 +254,11 @@
 		<MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="OPERATOR">:</MARK_PREVIOUS>
 		<IMPORT DELEGATE="java::MAIN"/>
 	</RULES>
+	
+	<RULES SET="JAVA">
+		<SEQ_REGEXP TYPE="COMMENT2">[/][/](.*?)(?=[%][>])</SEQ_REGEXP>
+		<IMPORT DELEGATE="java::MAIN"/>
+	</RULES>
+	
 </MODE>
 <!-- :noTabs=false: -->
\ No newline at end of file
diff --git a/modes/latex.xml b/modes/latex.xml
index d31a241..467b8d5 100644
--- a/modes/latex.xml
+++ b/modes/latex.xml
@@ -18,18 +18,23 @@
     <PROPERTY NAME="noWordSep" VALUE="\@_-:*<>" />
     
     <!-- indenting -->
+     
     <PROPERTY NAME="deepIndent" VALUE="FALSE" />
     <PROPERTY NAME="doubleBracketIndent" VALUE="FALSE" />
     <PROPERTY NAME="lineUpClosingBrackets" VALUE="FALSE" />
+    <!-- Commented out due to # 3432974 
     <PROPERTY NAME="indentOpenBrackets" VALUE="{[" />
     <PROPERTY NAME="indentCloseBrackets" VALUE="]}" />
-    <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
-    <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
     <PROPERTY NAME="indentNextLines" VALUE="^.*(\\begin\s*\{.*)$" />
     <PROPERTY NAME="unindentThisLine" VALUE="^[ \t]*(\\item.*|\\end\s*\{.*)$" />
     <PROPERTY NAME="unindentNextLines" VALUE="^.*(\\end\s*\{.*)$" />
     <PROPERTY NAME="electricKeys"
-      VALUE="{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" />
+              VALUE="{abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" />
+    -->
+    <PROPERTY NAME="unalignedOpenBrackets" VALUE="(" />
+    <PROPERTY NAME="unalignedCloseBrackets" VALUE=")" />
+    
+    
   </PROPS>
   
   <!-- default rules -->
diff --git a/modes/logs.xml b/modes/logs.xml
new file mode 100644
index 0000000..76701e8
--- /dev/null
+++ b/modes/logs.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+<MODE>
+	<PROPS>
+		<PROPERTY NAME="contextInsensitive" VALUE="true" />
+	</PROPS>
+	<RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="\d+">
+	
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
+		    <BEGIN>"</BEGIN>
+		    <END>"</END>
+		</SPAN>
+		<SPAN TYPE="LITERAL2" NO_LINE_BREAK="TRUE" ESCAPE="\">
+		    <BEGIN>'</BEGIN>
+		    <END>'</END>
+		</SPAN>
+		<SPAN TYPE="LITERAL3" NO_LINE_BREAK="TRUE" ESCAPE="\">
+		    <BEGIN>`</BEGIN>
+		    <END>`</END>
+		</SPAN>
+		<SEQ TYPE="OPERATOR">=</SEQ>
+		<SEQ TYPE="OPERATOR">/</SEQ>
+		<SEQ TYPE="OPERATOR">?</SEQ>
+		<SEQ TYPE="OPERATOR">:</SEQ>
+		<SEQ TYPE="OPERATOR">@</SEQ>
+		<SEQ TYPE="OPERATOR">.</SEQ>
+		
+		<KEYWORDS>
+			<!--{{{ Log levels -->
+			<KEYWORD1>DEBUG</KEYWORD1>
+			<KEYWORD1>ERR</KEYWORD1>
+			<KEYWORD1>ERR_</KEYWORD1>
+			<KEYWORD1>ERROR</KEYWORD1>
+			<KEYWORD1>INFO</KEYWORD1>
+			<KEYWORD1>INF</KEYWORD1>
+			<KEYWORD1>INF_</KEYWORD1>
+			<KEYWORD1>MESSAGE</KEYWORD1>
+			<KEYWORD1>NOTE</KEYWORD1>
+			<KEYWORD1>NOTICE</KEYWORD1>
+			<KEYWORD1>WARNING</KEYWORD1>
+			<KEYWORD1>WARN</KEYWORD1>
+			<KEYWORD1>SEVERE</KEYWORD1>
+			<!--}}}-->
+		</KEYWORDS>
+	</RULES>
+</MODE>
diff --git a/modes/mpost.xml b/modes/mpost.xml
new file mode 100644
index 0000000..fe990a3
--- /dev/null
+++ b/modes/mpost.xml
@@ -0,0 +1,350 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+<!--
+ METAPOST syntax highlight v0.1.0
+ Made by Kondr <kondr at lesnimoudrost.cz>
+ Last revision: 2007-05-04
+ Cooperates with LaTeX syntax higlight (tested with the jEdit default latex.xml)
+ 
+ Kyword types
+ ************
+ 1 Basic keywords (for, begingig, ... )
+ 2 Statements
+ 3 Variables
+ 4 Constants
+ 
+ Macros are considred as functions, including the z,x,y prefixes.
+ 
+ Recommended catalog entry:
+ 
+   <MODE NAME="Metapost"
+         FILE="mpost.xml"
+         FILE_NAME_GLOB="*.mp"/>
+-->
+<MODE>
+	<PROPS>
+		<PROPERTY NAME="lineComment" VALUE="%"/>
+	</PROPS>
+	<RULES HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[[:xdigit:]]+[lL]?|[[:digit:]]+(e[[:digit:]]*)?[lLdDfF]?(cm|in|pt|px)?)">
+	   		<!-- btex...etex -->
+		<SPAN TYPE="MARKUP" DELEGATE="tex::MAIN">
+			<BEGIN>btex</BEGIN>
+			<END>etex</END>
+		</SPAN>
+			
+		<!-- types -->
+		<SEQ TYPE="OPERATOR">path</SEQ>
+		<SEQ TYPE="OPERATOR">pair</SEQ>
+		<EOL_SPAN TYPE="COMMENT1">%</EOL_SPAN>
+		
+		<!-- xyz suffixes -->
+		<SEQ_REGEXP HASH_CHAR="z" AT_WORD_START="TRUE" TYPE="FUNCTION">z[0-9]?</SEQ_REGEXP>
+		<SEQ_REGEXP HASH_CHAR="x" AT_WORD_START="TRUE" TYPE="FUNCTION">x[0-9]?</SEQ_REGEXP>
+		<SEQ_REGEXP HASH_CHAR="y" AT_WORD_START="TRUE" TYPE="FUNCTION">y[0-9]?</SEQ_REGEXP>
+		<MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="CONTEXT">(</MARK_PREVIOUS>
+		
+		<SEQ TYPE="OPERATOR">&</SEQ>
+		<SEQ TYPE="OPERATOR">*</SEQ>
+		<SEQ TYPE="OPERATOR">*</SEQ>
+		<SEQ TYPE="OPERATOR">**</SEQ>
+		<SEQ TYPE="OPERATOR">+</SEQ>
+		<SEQ TYPE="OPERATOR">++</SEQ>
+		<SEQ TYPE="OPERATOR">+-+</SEQ>
+		<SEQ TYPE="OPERATOR">-</SEQ>
+		<SEQ TYPE="OPERATOR">.</SEQ>
+		<SEQ TYPE="OPERATOR">/</SEQ>
+		<SEQ TYPE="OPERATOR"><</SEQ>
+		<SEQ TYPE="OPERATOR"><=</SEQ>
+		<SEQ TYPE="OPERATOR"><></SEQ>
+		
+		<KEYWORDS>
+		    <!-- basic keywords -->
+			<KEYWORD1>beginfig</KEYWORD1>
+			<KEYWORD1>endfig</KEYWORD1>
+			<KEYWORD1>for</KEYWORD1>
+			<KEYWORD1>upto</KEYWORD1>
+			<KEYWORD1>downto</KEYWORD1>
+			<KEYWORD1>def</KEYWORD1>
+			<KEYWORD1>enddef</KEYWORD1>
+			<KEYWORD1>vardef</KEYWORD1>
+			<KEYWORD1>step</KEYWORD1>
+			<KEYWORD1>until</KEYWORD1>
+			<KEYWORD1>endfor</KEYWORD1>
+			<KEYWORD1>bye</KEYWORD1>
+			<KEYWORD1>if</KEYWORD1>
+			<KEYWORD1>elseif</KEYWORD1>
+			<KEYWORD1>else:</KEYWORD1>
+			<KEYWORD1>fi</KEYWORD1>
+			<KEYWORD1>exitif</KEYWORD1>
+			<KEYWORD1>exitunless</KEYWORD1>
+			<KEYWORD1>forever:</KEYWORD1>
+			<KEYWORD1>forsuffixes</KEYWORD1>
+			<KEYWORD1>end</KEYWORD1>
+			<KEYWORD1>begingroup</KEYWORD1>
+			<KEYWORD1>endgroup</KEYWORD1>
+			<KEYWORD1>save</KEYWORD1>
+			<KEYWORD1>unknown</KEYWORD1>
+			<KEYWORD1>input</KEYWORD1>
+			<KEYWORD1>newinternal</KEYWORD1>
+		
+			<!-- statements -->
+			<KEYWORD2>addto</KEYWORD2>
+			<KEYWORD2>clip</KEYWORD2>
+			<KEYWORD2>cutdraw</KEYWORD2>
+			<KEYWORD2>draw</KEYWORD2>
+			<KEYWORD2>drawarrow</KEYWORD2>
+			<KEYWORD2>drawdblarrow</KEYWORD2>
+			<KEYWORD2>fill</KEYWORD2>
+			<KEYWORD2>filldraw</KEYWORD2>
+			<KEYWORD2>interim</KEYWORD2>
+			<KEYWORD2>let</KEYWORD2>
+			<KEYWORD2>loggingall</KEYWORD2>
+			<KEYWORD2>newinternal</KEYWORD2>
+			<KEYWORD2>pickup</KEYWORD2>
+			<KEYWORD2>save</KEYWORD2>
+			<KEYWORD2>setbounds</KEYWORD2>
+			<KEYWORD2>shipout</KEYWORD2>
+			<KEYWORD2>show</KEYWORD2>
+			<KEYWORD2>showdependencies</KEYWORD2>
+			<KEYWORD2>showtoken</KEYWORD2>
+			<KEYWORD2>showvariable</KEYWORD2>
+			<KEYWORD2>special</KEYWORD2>
+			<KEYWORD2>tracingall</KEYWORD2>
+			<KEYWORD2>tracingnone</KEYWORD2>
+			<KEYWORD2>undraw</KEYWORD2>
+			<KEYWORD2>unfill</KEYWORD2>
+			<KEYWORD2>unfilldraw</KEYWORD2>
+			
+			<!-- variables -->
+			<KEYWORD3>ahangle</KEYWORD3>
+			<KEYWORD3>ahlength</KEYWORD3>
+			<KEYWORD3>bboxmargin</KEYWORD3>
+			<KEYWORD3>charcode</KEYWORD3>
+			<KEYWORD3>circmargin</KEYWORD3>
+			<KEYWORD3>day</KEYWORD3>
+			<KEYWORD3>defaultcolormodel</KEYWORD3>
+			<KEYWORD3>defaultdx</KEYWORD3>
+			<KEYWORD3>defaultdy</KEYWORD3>
+			<KEYWORD3>defaultpen</KEYWORD3>
+			<KEYWORD3>defaultscale</KEYWORD3>
+			<KEYWORD3>labeloffset</KEYWORD3>
+			<KEYWORD3>linecap</KEYWORD3>
+			<KEYWORD3>linejoin</KEYWORD3>
+			<KEYWORD3>miterlimit</KEYWORD3>
+			<KEYWORD3>month</KEYWORD3>
+			<KEYWORD3>mpprocset</KEYWORD3>
+			<KEYWORD3>pausing</KEYWORD3>
+			<KEYWORD3>prologues</KEYWORD3>
+			<KEYWORD3>restoreclipcolor</KEYWORD3>
+			<KEYWORD3>showstopping</KEYWORD3>
+			<KEYWORD3>time</KEYWORD3>
+			<KEYWORD3>tracingcapsules</KEYWORD3>
+			<KEYWORD3>tracingchoices</KEYWORD3>
+			<KEYWORD3>tracingcommands</KEYWORD3>
+			<KEYWORD3>tracingequations</KEYWORD3>
+			<KEYWORD3>tracinglostchars</KEYWORD3>
+			<KEYWORD3>tracingmacros</KEYWORD3>
+			<KEYWORD3>tracingonline</KEYWORD3>
+			<KEYWORD3>tracingoutput</KEYWORD3>
+			<KEYWORD3>tracingrestores</KEYWORD3>
+			<KEYWORD3>tracingspecs</KEYWORD3>
+			<KEYWORD3>tracingstats</KEYWORD3>
+			<KEYWORD3>tracingtitles</KEYWORD3>
+			<KEYWORD3>troffmode</KEYWORD3>
+			<KEYWORD3>truecorners</KEYWORD3>
+			<KEYWORD3>warningcheck</KEYWORD3>
+			<KEYWORD3>year </KEYWORD3>
+			<KEYWORD3>background</KEYWORD3>
+			<KEYWORD3>currentpen</KEYWORD3>
+			<KEYWORD3>currentpicture</KEYWORD3>
+			<KEYWORD3>cuttings</KEYWORD3>
+			<KEYWORD3>defaultfont</KEYWORD3>
+			<KEYWORD3>extra_beginfig</KEYWORD3>
+			<KEYWORD3>extra_endfig</KEYWORD3> 
+
+			<!-- constants -->
+			<KEYWORD4>beveled</KEYWORD4>
+			<KEYWORD4>black</KEYWORD4>
+			<KEYWORD4>blue</KEYWORD4>
+			<KEYWORD4>bp</KEYWORD4>
+			<KEYWORD4>butt</KEYWORD4>
+			<KEYWORD4>cc</KEYWORD4>
+			<KEYWORD4>cm</KEYWORD4>
+			<KEYWORD4>dd</KEYWORD4>
+			<KEYWORD4>ditto</KEYWORD4>
+			<KEYWORD4>down</KEYWORD4>
+			<KEYWORD4>epsilon</KEYWORD4>
+			<KEYWORD4>evenly</KEYWORD4>
+			<KEYWORD4>false</KEYWORD4>
+			<KEYWORD4>fullcircle</KEYWORD4>
+			<KEYWORD4>green</KEYWORD4>
+			<KEYWORD4>halfcircle</KEYWORD4>
+			<KEYWORD4>identity</KEYWORD4>
+			<KEYWORD4>in</KEYWORD4>
+			<KEYWORD4>infinity</KEYWORD4>
+			<KEYWORD4>left</KEYWORD4>
+			<KEYWORD4>mitered</KEYWORD4>
+			<KEYWORD4>mm</KEYWORD4>
+			<KEYWORD4>mpversion</KEYWORD4>
+			<KEYWORD4>nullpicture</KEYWORD4>
+			<KEYWORD4>origin</KEYWORD4>
+			<KEYWORD4>pc</KEYWORD4>
+			<KEYWORD4>pencircle</KEYWORD4>
+			<KEYWORD4>pensquare</KEYWORD4>
+			<KEYWORD4>pt</KEYWORD4>
+			<KEYWORD4>quartercircle</KEYWORD4>
+			<KEYWORD4>red</KEYWORD4>
+			<KEYWORD4>right</KEYWORD4>
+			<KEYWORD4>rounded</KEYWORD4>
+			<KEYWORD4>and</KEYWORD4>
+			<KEYWORD4>squared</KEYWORD4>
+			<KEYWORD4>true</KEYWORD4>
+			<KEYWORD4>unitsquare</KEYWORD4>
+			<KEYWORD4>up</KEYWORD4>
+			<KEYWORD4>white</KEYWORD4>
+			<KEYWORD4>withdots</KEYWORD4>
+						
+			<!-- functions -->
+			<FUNCTION>boxit</FUNCTION>
+			<FUNCTION>boxjoin</FUNCTION>
+			<FUNCTION>bpath</FUNCTION>
+			<FUNCTION>buildcycle</FUNCTION>
+			<FUNCTION>circleit</FUNCTION>
+			<FUNCTION>circleit</FUNCTION>
+			<FUNCTION>circleit</FUNCTION>
+			<FUNCTION>dashpattern</FUNCTION>
+			<FUNCTION>decr</FUNCTION>
+			<FUNCTION>dotlabel</FUNCTION>
+			<FUNCTION>dotlabel</FUNCTION>
+			<FUNCTION>dotlabels</FUNCTION>
+			<FUNCTION>drawboxed</FUNCTION>
+			<FUNCTION>contents</FUNCTION>
+			<FUNCTION>drawdot</FUNCTION>
+			<FUNCTION>drawoptions</FUNCTION>
+			<FUNCTION>drawunboxed</FUNCTION>
+			<FUNCTION>fixpos</FUNCTION>
+			<FUNCTION>named</FUNCTION>
+			<FUNCTION>fixsize</FUNCTION>
+			<FUNCTION>image</FUNCTION>
+			<FUNCTION>incr</FUNCTION>
+			<FUNCTION>label</FUNCTION>
+			<FUNCTION>label</FUNCTION>
+			<FUNCTION>labels</FUNCTION>
+			<FUNCTION>max</FUNCTION>
+			<FUNCTION>max</FUNCTION>
+			<FUNCTION>min</FUNCTION>
+			<FUNCTION>min</FUNCTION>
+			<FUNCTION>pic</FUNCTION>
+			<FUNCTION>thelabel</FUNCTION>
+			<FUNCTION>thelabel</FUNCTION>
+			<OPERATOR>rotatedaround</OPERATOR>
+			<!-- operators -->
+			<OPERATOR>abs</OPERATOR>
+			<OPERATOR>angle</OPERATOR>
+			<OPERATOR>arclength</OPERATOR>
+			<OPERATOR>arctime</OPERATOR>
+			<OPERATOR>ASCII</OPERATOR>
+			<OPERATOR>bbox</OPERATOR>
+			<OPERATOR>bluepart</OPERATOR>
+			<OPERATOR>boolean</OPERATOR>
+			<OPERATOR>bot</OPERATOR>
+			<OPERATOR>ceiling</OPERATOR>
+			<OPERATOR>center</OPERATOR>
+			<OPERATOR>char</OPERATOR>
+			<OPERATOR>cmykcolor</OPERATOR>
+			<OPERATOR>colormodel</OPERATOR>
+			<OPERATOR>color</OPERATOR>
+			<OPERATOR>cosd</OPERATOR>
+			<OPERATOR>cutafter</OPERATOR>
+			<OPERATOR>intersection</OPERATOR>
+			<OPERATOR>cutbefore</OPERATOR>
+			<OPERATOR>intersection</OPERATOR>
+			<OPERATOR>cyanpart</OPERATOR>
+			<OPERATOR>cycle</OPERATOR>
+			<OPERATOR>decimal</OPERATOR>
+			<OPERATOR>dir</OPERATOR>
+			<OPERATOR>direction</OPERATOR>
+			<OPERATOR>directionpoint</OPERATOR>
+			<OPERATOR>directiontime</OPERATOR>
+			<OPERATOR>div</OPERATOR>
+			<OPERATOR>dotprod</OPERATOR>
+			<OPERATOR>floor</OPERATOR>
+			<OPERATOR>fontsize</OPERATOR>
+			<OPERATOR>greenpart</OPERATOR>
+			<OPERATOR>greypart</OPERATOR>
+			<OPERATOR>hex</OPERATOR>
+			<OPERATOR>infont</OPERATOR>
+			<OPERATOR>intersectionpoint</OPERATOR>
+			<OPERATOR>intesctiontimes</OPERATOR>
+			<OPERATOR>inverse</OPERATOR>
+			<OPERATOR>known</OPERATOR>
+			<OPERATOR>length</OPERATOR>
+			<OPERATOR>ulft</OPERATOR>
+			<OPERATOR>llft</OPERATOR>
+			<OPERATOR>lft</OPERATOR>
+			<OPERATOR>llcorner</OPERATOR>
+			<OPERATOR>lrcorner</OPERATOR>
+			<OPERATOR>magentapart</OPERATOR>
+			<OPERATOR>makemakeconvex</OPERATOR>
+			<OPERATOR>mexp</OPERATOR>
+			<OPERATOR>mlog</OPERATOR>
+			<OPERATOR>mod</OPERATOR>
+			<OPERATOR>normaldeviate</OPERATOR>
+			<OPERATOR>not</OPERATOR>
+			<OPERATOR>numeric</OPERATOR>
+			<OPERATOR>oct</OPERATOR>
+			<OPERATOR>odd</OPERATOR>
+			<OPERATOR>or</OPERATOR>
+			<OPERATOR>of</OPERATOR>
+			<OPERATOR>penoffset</OPERATOR>
+			<OPERATOR>picture</OPERATOR>
+			<OPERATOR>point</OPERATOR>
+			<OPERATOR>postcontrol</OPERATOR>
+			<OPERATOR>precontrol</OPERATOR>
+			<OPERATOR>redpart</OPERATOR>
+			<OPERATOR>reverse</OPERATOR>
+			<OPERATOR>swapped</OPERATOR>
+			<OPERATOR>rgbcolor</OPERATOR>
+			<OPERATOR>rotated</OPERATOR>
+			<OPERATOR>reflectedabout</OPERATOR>
+			<OPERATOR>round</OPERATOR>
+			<OPERATOR>lrt</OPERATOR>
+			<OPERATOR>urt</OPERATOR>
+			<OPERATOR>rt</OPERATOR>
+			<OPERATOR>scaled</OPERATOR>
+			<OPERATOR>scantokens</OPERATOR>
+			<OPERATOR>token</OPERATOR>
+			<OPERATOR>top</OPERATOR>
+			<OPERATOR>to</OPERATOR>
+			<OPERATOR>shifted</OPERATOR>
+			<OPERATOR>sind</OPERATOR>
+			<OPERATOR>slanted</OPERATOR>
+			<OPERATOR>sqrt</OPERATOR>
+			<OPERATOR>string</OPERATOR>
+			<OPERATOR>str</OPERATOR>
+			<OPERATOR>subof</OPERATOR>
+			<OPERATOR>substring</OPERATOR>
+			<OPERATOR>transformed</OPERATOR>
+			<OPERATOR>transform</OPERATOR>
+			<OPERATOR>ulcorner</OPERATOR>
+			<OPERATOR>uniformdeviate</OPERATOR>
+			<OPERATOR>unitvector</OPERATOR>
+			<OPERATOR>unknown</OPERATOR>
+			<OPERATOR>urcorner</OPERATOR>
+			<OPERATOR>whatever</OPERATOR>
+			<OPERATOR>xpart</OPERATOR>
+			<OPERATOR>xxpart</OPERATOR>
+			<OPERATOR>xypart</OPERATOR>
+			<OPERATOR>yellowpart</OPERATOR>
+			<OPERATOR>ypart</OPERATOR>
+			<OPERATOR>yxpart</OPERATOR>
+			<OPERATOR>yypart</OPERATOR>
+			<OPERATOR>zscaled</OPERATOR>
+			<OPERATOR>dashed</OPERATOR>
+			<OPERATOR>pen</OPERATOR>
+			<OPERATOR>suffix</OPERATOR>
+			<OPERATOR>expr</OPERATOR>
+		</KEYWORDS>
+	
+	</RULES>
+</MODE>
\ No newline at end of file
diff --git a/modes/mxml.xml b/modes/mxml.xml
new file mode 100644
index 0000000..9a57bf5
--- /dev/null
+++ b/modes/mxml.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+
+<MODE>
+	<PROPS>
+		<PROPERTY NAME="commentStart" VALUE="<!--" />
+		<PROPERTY NAME="commentEnd" VALUE="-->" />
+	</PROPS>
+	<RULES>
+	
+		
+		<!-- SGML comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN><!--</BEGIN>
+			<END>--></END>
+		</SPAN>
+
+		<!-- DTD Entity declarations -->
+		<SPAN TYPE="KEYWORD2" DELEGATE="ENTITY-TAGS">
+			<BEGIN><!ENTITY</BEGIN>
+			<END>></END>
+		</SPAN>
+
+		<!-- CDATA sections -->
+		<SPAN TYPE="KEYWORD2" DELEGATE="ACTIONSCRIPT">
+			<BEGIN><![CDATA</BEGIN>
+			<END>]]></END>
+		</SPAN>
+
+		<!-- DTD instructions -->
+		<SPAN TYPE="KEYWORD2" DELEGATE="DTD-TAGS">
+			<BEGIN><!</BEGIN>
+			<END>></END>
+		</SPAN>
+
+		<!-- PI directives -->
+		<SPAN TYPE="KEYWORD3">
+			<BEGIN><?</BEGIN>
+			<END>></END>
+		</SPAN>
+
+		<!-- markup tags -->
+		<SPAN TYPE="MARKUP" DELEGATE="TAGS">
+			<BEGIN><</BEGIN>
+			<END>></END>
+		</SPAN>
+
+		<!-- SGML entities -->
+		<SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">
+			<BEGIN>&</BEGIN>
+			<END>;</END>
+		</SPAN>
+		
+	</RULES>
+	<RULES SET="ACTIONSCRIPT" DEFAULT="MARKUP" IGNORE_CASE="FALSE">
+		<SEQ TYPE="KEYWORD2" DELEGATE="actionscript::MAIN">[</SEQ>
+	</RULES>
+<RULES SET="TAGS" DEFAULT="MARKUP" NO_WORD_SEP="-_">
+		<!-- SGML comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN><!--</BEGIN>
+			<END>--></END>
+		</SPAN>
+
+		<SPAN TYPE="LITERAL3" NO_LINE_BREAK="FALSE" >
+			<BEGIN>"{</BEGIN>
+			<END>}"</END>
+		</SPAN>
+		
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
+			<BEGIN>'</BEGIN>
+			<END>'</END>
+		</SPAN>
+
+		<SEQ TYPE="MARKUP">/</SEQ>
+		<MARK_PREVIOUS TYPE="LABEL" MATCH_TYPE="CONTEXT">:</MARK_PREVIOUS>
+		<SEQ TYPE="OPERATOR">:</SEQ>
+	</RULES>
+	
+	<RULES SET="DTD-TAGS" DEFAULT="KEYWORD2" IGNORE_CASE="FALSE">
+		<!-- SGML comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN><!--</BEGIN>
+			<END>--></END>
+		</SPAN>
+
+		<!-- SGML comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN>--</BEGIN>
+			<END>--</END>
+		</SPAN>
+
+		<!-- Parameter entities -->
+		<SPAN TYPE="LITERAL2" NO_WORD_BREAK="TRUE">
+			<BEGIN>%</BEGIN>
+			<END>;</END>
+		</SPAN>
+
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
+			<BEGIN>'</BEGIN>
+			<END>'</END>
+		</SPAN>
+
+		<!-- This appears in some SGML documents -->
+		<SPAN TYPE="KEYWORD2" DELEGATE="MAIN">
+			<BEGIN>[</BEGIN>
+			<END>]</END>
+		</SPAN>
+
+		<SEQ TYPE="OPERATOR">(</SEQ>
+		<SEQ TYPE="OPERATOR">)</SEQ>
+		<SEQ TYPE="OPERATOR">|</SEQ>
+		<SEQ TYPE="OPERATOR">?</SEQ>
+		<SEQ TYPE="OPERATOR">*</SEQ>
+		<SEQ TYPE="OPERATOR">+</SEQ>
+		<SEQ TYPE="OPERATOR">,</SEQ>
+
+		<KEYWORDS>
+			<KEYWORD1>EMPTY</KEYWORD1>
+			<KEYWORD1>INCLUDE</KEYWORD1>
+			<KEYWORD1>IGNORE</KEYWORD1>
+			<KEYWORD1>NDATA</KEYWORD1>
+			<KEYWORD1>#IMPLIED</KEYWORD1>
+			<KEYWORD1>#PCDATA</KEYWORD1>
+			<KEYWORD1>#REQUIRED</KEYWORD1>
+		</KEYWORDS>
+	</RULES>
+	<RULES SET="ENTITY-TAGS" DEFAULT="KEYWORD2">
+		<!-- SGML comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN><!--</BEGIN>
+			<END>--></END>
+		</SPAN>
+
+		<!-- SGML comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN>--</BEGIN>
+			<END>--</END>
+		</SPAN>
+
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+
+		<SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE">
+			<BEGIN>'</BEGIN>
+			<END>'</END>
+		</SPAN>
+
+		<SEQ TYPE="OPERATOR">=</SEQ>
+
+		<SEQ TYPE="OPERATOR">%</SEQ>
+
+		<KEYWORDS>
+			<KEYWORD1>SYSTEM</KEYWORD1>
+		</KEYWORDS>
+	</RULES>
+</MODE>
diff --git a/modes/nsis2.xml b/modes/nsis2.xml
index 91dad84..42044fe 100644
--- a/modes/nsis2.xml
+++ b/modes/nsis2.xml
@@ -1,23 +1,48 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8" ?>
 
 <!DOCTYPE MODE SYSTEM "xmode.dtd">
 
 <!--
-Nullsoft Scriptable Installation System mode by Ryan Grove 2003
-Updated by Uwe Stöhr (donovaly at users.sourceforge.net) 2007
-Updated for 4.3pre9 by Alan Ezust 2007
-$Id: nsis2.xml 18011 2010-06-08 04:25:19Z ezust $
+This is Nullsoft Scriptable Installation System mode by Ryan Grove 2003.
+Copyright (C) 2003 Ryan Grove
+Copyright (C) 2007 Uwe Stöhr (donovaly at users.sourceforge.net)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
 
-This file should be accurate as of the version of NSIS 2.30. If I've left something out, please let me know.
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
+
+Updated for 4.3pre9 by Alan Ezust 2007
+$Id: nsis2.xml 21771 2012-06-08 18:38:27Z jarekczek $
 -->
 
 <MODE>
 	<PROPS>
+	  <PROPERTY NAME="commentStart" VALUE="/*" />
+	  <PROPERTY NAME="commentEnd" VALUE="*/" />
 		<PROPERTY NAME="lineComment" VALUE=";" />
 		<PROPERTY NAME="indentNextLine" VALUE="\s*(.*:|(function\s+.*)|(section\s+.*)|(subsection\s+.*))" />
 	</PROPS>
 
 	<RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE" DEFAULT="NULL">
+	<!-- Java comment (C style) -->
+    <SPAN TYPE="COMMENT1">
+      <BEGIN>/*</BEGIN>
+      <END>*/</END>
+    </SPAN>
+
+    <!-- Silly comment -->
+    <SEQ TYPE="COMMENT1">/**/</SEQ>
+	
 		<EOL_SPAN TYPE="COMMENT1">;</EOL_SPAN>
 		<EOL_SPAN TYPE="COMMENT2">#</EOL_SPAN>
 
@@ -44,6 +69,8 @@ This file should be accurate as of the version of NSIS 2.30. If I've left someth
 			<!-- Deprecated stuff -->
 			<INVALID>dim</INVALID>
 			<INVALID>uninstallexename</INVALID>
+			<INVALID>subsection</INVALID>
+			<INVALID>subsectionend</INVALID>
 
 			<!-- Global variables -->
 			<KEYWORD3>$0</KEYWORD3>
@@ -271,9 +298,9 @@ This file should be accurate as of the version of NSIS 2.30. If I've left someth
 			<KEYWORD1>function</KEYWORD1>
 			<KEYWORD1>functionend</KEYWORD1>
 			<KEYWORD1>section</KEYWORD1>
+			<KEYWORD1>sectiongroup</KEYWORD1>
 			<KEYWORD1>sectionend</KEYWORD1>
-			<KEYWORD1>subsection</KEYWORD1>
-			<KEYWORD1>subsectionend</KEYWORD1>
+			<KEYWORD1>sectiongroupend</KEYWORD1>
 
 			<!-- Instructions -->
 			<KEYWORD2>addbrandingimage</KEYWORD2>
diff --git a/modes/php.xml b/modes/php.xml
index 5df8ab4..7eb35fa 100644
--- a/modes/php.xml
+++ b/modes/php.xml
@@ -2,7 +2,9 @@
 
 <!DOCTYPE MODE SYSTEM "xmode.dtd">
 
-<!-- Catalog entry:
+<!--
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:Catalog entry:
 <MODE NAME="php" FILE="php.xml"
 				FILE_NAME_GLOB="*.{php3,php4,php5,php,phtml}"
 				FIRST_LINE_GLOB="<?php*" />
@@ -141,8 +143,8 @@ TODO:
 			<END>;</END>
 		</SPAN>
 	</RULES>
-
-
+	
+	<!--{{{ rule TAGS -->
 	<!-- HTML tags (from MAIN rule) -->
 	<RULES SET="TAGS" DEFAULT="MARKUP" ESCAPE="\">
 		<PROPS>
@@ -159,15 +161,18 @@ TODO:
 		<IMPORT DELEGATE="INVALID_LT" />
 		<IMPORT DELEGATE="html::TAGS" />
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule CSS_OPENTAG -->
 	<!-- CSS where PHP code may be injected -->
 	<RULES SET="CSS_OPENTAG" DEFAULT="MARKUP">
 		<SEQ TYPE="MARKUP" DELEGATE="CSS">></SEQ>
 
 		<IMPORT DELEGATE="TO_LITERAL+PHP"/>
 	</RULES>
+	<!--}}}-->
 
+	<!--{{{ rule CSS -->
 	<RULES SET="CSS" DEFAULT="MARKUP">
 		<!-- CSS has no line comment: -->
 		<PROPS>
@@ -181,8 +186,9 @@ TODO:
 		<IMPORT DELEGATE="TO_PHP"/>
 		<IMPORT DELEGATE="css::MAIN"/>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule OBJECT_PHP -->
 	<!-- Helper for class references in rule PHP -->
 	<RULES SET="OBJECT_PHP" DEFAULT="KEYWORD4" ESCAPE="\"> <!-- TODO: ESCAPE should not be needed, see http://sourceforge.net/tracker/index.php?func=detail&aid=1600458&group_id=588&atid=100588 -->
 		<SPAN TYPE="OPERATOR" DELEGATE="PHP_EXPRESSION">
@@ -250,8 +256,9 @@ TODO:
 		<IMPORT DELEGATE="PHP_VAR" />
 		<IMPORT DELEGATE="PHP_KEYWORDS" />
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule PHP_LITERAL2 -->
 	<!-- PHP literal where variables get parsed -->
 	<RULES SET="PHP_LITERAL2" DEFAULT="LITERAL2" ESCAPE="\">
 		<!-- expressions in curly braces ("{$foo}") -->
@@ -260,61 +267,14 @@ TODO:
 			<END>}</END>
 		</SPAN_REGEXP>
 
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="$" DELEGATE="OBJECT_PHP_LITERAL2">[\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?=(\[\$?[\s\w'"]+\])?->)</SEQ_REGEXP>
-		<MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>
-
 		<!-- Vars like "${foo}" (does not work for objects/methods) -->
 		<SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD3">[\$]+\{[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\}</SEQ_REGEXP>
 
 		<IMPORT DELEGATE="PHP_VAR" />
 	</RULES>
+	<!--}}}-->
 
-	<!-- Helper for class references in rule PHP_LITERAL2 ("foo") -->
-	<RULES SET="OBJECT_PHP_LITERAL2" DEFAULT="KEYWORD4" ESCAPE="\"> <!-- TODO: ESCAPE should not be needed, see http://sourceforge.net/tracker/index.php?func=detail&aid=1600458&group_id=588&atid=100588 -->
-		<SPAN TYPE="OPERATOR" DELEGATE="PHP">
-			<BEGIN>[</BEGIN>
-			<END>]</END>
-		</SPAN>
-
-		<!-- Recurse members: -->
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="->" DELEGATE="OBJECT_PHP_LITERAL2">->\w*</SEQ_REGEXP>
-
-		<!-- Operators delegate back to PHP_LITERAL2 {{{ -->
-		<SEQ_REGEXP DELEGATE="PHP_LITERAL2">\s</SEQ_REGEXP>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">'</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">`</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">!</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">%</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">&</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">></SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2"><</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">*</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">/</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">+</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">,</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">-</SEQ><!-- "->" gets handled before -->
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">.</SEQ>
-		<SEQ_REGEXP HASH_CHAR="/" TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">/(?!/)</SEQ_REGEXP>
-		<SEQ_REGEXP HASH_CHAR=":" TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">:(?!:)</SEQ_REGEXP><!-- not "::" -->
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">;</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">=</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">?</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">@</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">[</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">]</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">^</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">`</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">{</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">|</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">}</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">~</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">(</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">)</SEQ>
-		<SEQ TYPE="LITERAL2" DELEGATE="PHP_LITERAL2">\</SEQ>
-		<!-- }}} -->
-	</RULES>
-
-
+	<!--{{{ rule PHP_LITERAL3 -->
 	<!-- PHP literal in backticks, where variables get parsed; based on PHP_LITERAL2 -->
 	<RULES SET="PHP_LITERAL3" DEFAULT="LITERAL3" ESCAPE="\">
 		<!-- expressions in curly braces ("{$foo}") -->
@@ -323,61 +283,14 @@ TODO:
 			<END>}</END>
 		</SPAN_REGEXP>
 
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="$" DELEGATE="OBJECT_PHP_LITERAL3">[\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?=(\[\$?[\s\w'"]+\])?->)</SEQ_REGEXP>
-		<MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>
-
 		<!-- Vars like "${foo}" (does not work for objects/methods) -->
 		<SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD3">[\$]+\{[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\}</SEQ_REGEXP>
 
 		<IMPORT DELEGATE="PHP_VAR" />
 	</RULES>
+	<!--}}}-->
 
-	<!-- Helper for class references in rule PHP_LITERAL3 (`foo`) -->
-	<RULES SET="OBJECT_PHP_LITERAL3" DEFAULT="KEYWORD4" ESCAPE="\"> <!-- TODO: ESCAPE should not be needed, see http://sourceforge.net/tracker/index.php?func=detail&aid=1600458&group_id=588&atid=100588 -->
-		<SPAN TYPE="OPERATOR" DELEGATE="PHP">
-			<BEGIN>[</BEGIN>
-			<END>]</END>
-		</SPAN>
-
-		<!-- Recurse members: -->
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="->" DELEGATE="OBJECT_PHP_LITERAL3">->\w*</SEQ_REGEXP>
-
-		<!-- Operators delegate back to PHP_LITERAL3 {{{ -->
-		<SEQ_REGEXP DELEGATE="PHP_LITERAL3">\s</SEQ_REGEXP>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">"</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">'</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">!</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">%</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">&</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">></SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3"><</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">*</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">/</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">+</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">,</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">-</SEQ><!-- "->" gets handled before -->
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">.</SEQ>
-		<SEQ_REGEXP HASH_CHAR="/" TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">/(?!/)</SEQ_REGEXP>
-		<SEQ_REGEXP HASH_CHAR=":" TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">:(?!:)</SEQ_REGEXP><!-- not "::" -->
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">;</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">=</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">?</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">@</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">[</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">]</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">^</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">`</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">{</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">|</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">}</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">~</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">(</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">)</SEQ>
-		<SEQ TYPE="LITERAL3" DELEGATE="PHP_LITERAL3">\</SEQ>
-		<!-- }}} -->
-	</RULES>
-
-
+	<!--{{{ rule PHP_LITERAL4 -->
 	<!-- PHP heredoc blocks, where variables get parsed; see PHP_LITERAL2 -->
 	<RULES SET="PHP_LITERAL4" DEFAULT="LITERAL4" ESCAPE="\">
 		<!-- expressions in curly braces ("{$foo}") -->
@@ -386,62 +299,14 @@ TODO:
 			<END>}</END>
 		</SPAN_REGEXP>
 
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="$" DELEGATE="OBJECT_PHP_LITERAL4">[\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?=(\[\$?[\s\w'"]+\])?->)</SEQ_REGEXP>
-		<MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>
-
 		<!-- Vars like "${foo}" (does not work for objects/methods) -->
 		<SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD3">[\$]+\{[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*\}</SEQ_REGEXP>
 
 		<IMPORT DELEGATE="PHP_VAR" />
 	</RULES>
+	<!--}}}-->
 
-	<!-- Helper for class references in rule PHP_LITERAL4 ("<<< FOO .. FOO") -->
-	<RULES SET="OBJECT_PHP_LITERAL4" DEFAULT="KEYWORD4" ESCAPE="\"> <!-- TODO: ESCAPE should not be needed, see http://sourceforge.net/tracker/index.php?func=detail&aid=1600458&group_id=588&atid=100588 -->
-		<SPAN TYPE="OPERATOR" DELEGATE="PHP">
-			<BEGIN>[</BEGIN>
-			<END>]</END>
-		</SPAN>
-
-		<!-- Recurse members: -->
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="->" DELEGATE="OBJECT_PHP_LITERAL4">->\w*</SEQ_REGEXP>
-
-		<!-- Operators delegate back to PHP_LITERAL4 {{{ -->
-		<SEQ_REGEXP DELEGATE="PHP_LITERAL4">\s</SEQ_REGEXP>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">'</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">"</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">`</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">!</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">%</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">&</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">></SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4"><</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">*</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">/</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">+</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">,</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">-</SEQ><!-- "->" gets handled before -->
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">.</SEQ>
-		<SEQ_REGEXP HASH_CHAR="/" TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">/(?!/)</SEQ_REGEXP>
-		<SEQ_REGEXP HASH_CHAR=":" TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">:(?!:)</SEQ_REGEXP><!-- not "::" -->
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">;</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">=</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">?</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">@</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">[</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">]</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">^</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">`</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">{</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">|</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">}</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">~</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">(</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">)</SEQ>
-		<SEQ TYPE="LITERAL4" DELEGATE="PHP_LITERAL4">\</SEQ>
-		<!-- }}} -->
-	</RULES>
-
-
+	<!--{{{ rul -->
 	<!-- Helper for class / interface definition -->
 	<RULES SET="DEF_CLASS" DEFAULT="KEYWORD4">
 		<!-- back to "PHP" for curly brace, the closing one gets handled there -->
@@ -457,8 +322,9 @@ TODO:
 			<KEYWORD1>implements</KEYWORD1>
 		</KEYWORDS>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule DEF_FUNCTION -->
 	<!-- Function definition -->
 	<RULES SET="DEF_FUNCTION" DEFAULT="FUNCTION">
 		<!-- Invalid, go back: -->
@@ -469,7 +335,9 @@ TODO:
 
 		<IMPORT DELEGATE="PHP_COMMENTS" />
 	</RULES>
+	<!--}}}-->
 
+	<!--{{{ rule DEF_FUNCTION_ARGS -->
 	<!-- Arguments of a function definition -->
 	<RULES SET="DEF_FUNCTION_ARGS" DEFAULT="KEYWORD4">
 		<!-- back to "PHP" for closing bracket: -->
@@ -482,7 +350,9 @@ TODO:
 		<IMPORT DELEGATE="PHP_COMMENTS" />
 		<IMPORT DELEGATE="PHP_TYPES" />
 	</RULES>
+	<!--}}}-->
 
+	<!--{{{ rule DEF_FUNCTION_ARGS_VALUE -->
 	<!-- Default values of a function argument -->
 	<RULES SET="DEF_FUNCTION_ARGS_VALUE" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
 		<!-- Literals, without var substitution: -->
@@ -507,7 +377,9 @@ TODO:
 		<IMPORT DELEGATE="PHP_COMMENTS" />
 		<IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />
 	</RULES>
+	<!--}}}-->
 
+	<!--{{{ rule DEF_FUNCTION_ARGS_VALUE_ARRAY -->
 	<!-- Body of "array(...)" in function argument default values -->
 	<RULES SET="DEF_FUNCTION_ARGS_VALUE_ARRAY" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
 		<!-- Literals, without var substitution: -->
@@ -521,8 +393,9 @@ TODO:
 		</SPAN>
 		<SEQ TYPE="OPERATOR">,</SEQ>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule PHP_COMMENTS -->
 	<!-- Comments in PHP -->
 	<RULES SET="PHP_COMMENTS">
 		<!-- special case -->
@@ -544,19 +417,19 @@ TODO:
 		<EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
 		<EOL_SPAN TYPE="COMMENT4">#</EOL_SPAN>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule PHP_VAR -->
 	<!-- PHP variables (PHPDOC_VAR for phpdoc blocks) -->
 	<RULES SET="PHP_VAR">
-		<!-- (Class-)Variables -->
-		<SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD4">[\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?=\s*=\s*(&\s*)?new)</SEQ_REGEXP>
 
 		<!-- Normal variables -->
 		<!-- Not using MARK_FOLLOWING, which would match $foo\" completely (in PHP_LITERAL2) -->
 		<SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD3">[\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*</SEQ_REGEXP>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule PHP -->
 	<RULES SET="PHP" ESCAPE="\" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
 		<!-- Class definitions.
 		     This uses SEQ_REGEXP (instead of SPAN_*) for the keywords only,
@@ -568,8 +441,9 @@ TODO:
 		<!-- Imports: -->
 		<IMPORT DELEGATE="PHP_EXPRESSION" />
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule PHP_EXPRESSION -->
 	<!-- A basic PHP expression, as it can be used in $a->{EXPR} -->
 	<RULES SET="PHP_EXPRESSION" ESCAPE="\" HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
 		<!-- Comments: -->
@@ -684,10 +558,6 @@ TODO:
 		<SEQ TYPE="OPERATOR">}</SEQ>
 		<!-- }}} -->
 
-		<!-- to OBJECT_PHP: (Class-)Variables/Methods -->
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="$" DELEGATE="OBJECT_PHP">[\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?=(\[\$?[\s\w'"]+\])?->)</SEQ_REGEXP>
-		<MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>
-
 		<!-- handle "new" keyword: -->
 		<SEQ_REGEXP TYPE="KEYWORD1" HASH_CHAR="new" AT_WORD_START="TRUE" DELEGATE="PHP_VAR_NEW_KW">new\s+</SEQ_REGEXP>
 
@@ -696,12 +566,16 @@ TODO:
 		<!-- TODO: split this, so e.g. "new", "class" etc don't show up here, but only in "PHP" -->
 		<IMPORT DELEGATE="PHP_KEYWORDS" />
 	</RULES>
+	<!--}}}-->
 
+	<!--{{{ rule PHP_VAR_NEW_KW -->
 	<RULES SET="PHP_VAR_NEW_KW" DEFAULT="KEYWORD4">
 		<SEQ TYPE="OPERATOR" DELEGATE="PHP_EXPRESSION">(</SEQ>
 		<SEQ TYPE="OPERATOR" DELEGATE="PHP">;</SEQ>
 	</RULES>
+	<!--}}}-->
 
+	<!--{{{ rule PHP_BASIC_KEYWORD1 -->
 	<RULES SET="PHP_BASIC_KEYWORD1">
 		<KEYWORDS>
 			<KEYWORD1>true</KEYWORD1>
@@ -709,8 +583,9 @@ TODO:
 			<KEYWORD1>null</KEYWORD1>
 		</KEYWORDS>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{  -->
 	<RULES SET="PHP_TYPES">
 		<!-- Taken from: http://php.net/manual/en/language.types.php -->
 		<KEYWORDS>
@@ -731,8 +606,9 @@ TODO:
 			<OPERATOR>string</OPERATOR>
 		</KEYWORDS>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule PHP_KEYWORDS -->
 	<RULES SET="PHP_KEYWORDS">
 		<IMPORT DELEGATE="KEYWORDS_VISIBILITY" />
 		<IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />
@@ -4880,8 +4756,9 @@ TODO:
 			<KEYWORD4>stdClass</KEYWORD4>
 		</KEYWORDS>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule KEYWORDS_VISIBILITY -->
 	<RULES SET="KEYWORDS_VISIBILITY">
 		<KEYWORDS>
 			<KEYWORD1>private</KEYWORD1>
@@ -4889,16 +4766,17 @@ TODO:
 			<KEYWORD1>public</KEYWORD1>
 		</KEYWORDS>
 	</RULES>
+	<!--}}}-->
 
-
-	<!-- Javascript -->
+	<!--{{{ rule JAVASCRIPT_OPENTAG -->
 	<RULES SET="JAVASCRIPT_OPENTAG" DEFAULT="MARKUP">
 		<SEQ TYPE="MARKUP" DELEGATE="JAVASCRIPT">></SEQ>
 		<IMPORT DELEGATE="TO_LITERAL+PHP"/> <!-- handle PHP in <script> tag -->
 		<IMPORT DELEGATE="html::TAGS" /> <!-- handle e.g. 'style="width:1px"' -->
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule TO_LITERAL+PHP -->
 	<!-- Handle literals, but allow switching to PHP therein, e.g. from html TAGS -->
 	<RULES SET="TO_LITERAL+PHP">
 		<SPAN TYPE="LITERAL1" DELEGATE="LITERAL1+PHP">
@@ -4911,34 +4789,38 @@ TODO:
 		</SPAN>
 		<IMPORT DELEGATE="TO_PHP"/>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule JAVASCRIPT -->
 	<RULES SET="JAVASCRIPT" DEFAULT="MARKUP" ESCAPE="\">
 		<IMPORT DELEGATE="TO_LITERAL+PHP"/>
 		<IMPORT DELEGATE="TO_PHP"/>
 		<IMPORT DELEGATE="javascript::MAIN"/>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule LITERAL1+PHP -->
 	<!-- Handle PHP tags in LITERAL1, e.g. in the "type" attribute of a <SCRIPT> tag -->
 	<RULES SET="LITERAL1+PHP" DEFAULT="LITERAL1" ESCAPE="\">
 		<IMPORT DELEGATE="TO_PHP"/>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule LITERAL2+PHP -->
 	<!-- Handle PHP tags in LITERAL2, e.g. in the "type" attribute of a <SCRIPT> tag -->
 	<RULES SET="LITERAL2+PHP" DEFAULT="LITERAL2" ESCAPE="\">
 		<IMPORT DELEGATE="TO_PHP"/>
 	</RULES>
+	<!--}}}-->
 
-
+	<!--{{{ rule COMMENT1+PHP -->
 	<!-- Handle PHP tags in comments -->
 	<RULES SET="COMMENT1+PHP" DEFAULT="COMMENT1">
 		<IMPORT DELEGATE="TO_PHP"/>
 	</RULES>
+	<!--}}}-->
 
-
-	<!-- Go to PHP mode again -->
+	<!--{{{ Go to PHP mode again -->
 	<RULES SET="TO_PHP" DEFAULT="MARKUP">
 		<SPAN TYPE="MARKUP" DELEGATE="PHP">
 			<BEGIN><?php</BEGIN>
@@ -4955,96 +4837,58 @@ TODO:
 			<END>%></END>
 		</SPAN>
 	</RULES>
+	<!--}}}-->
 
+	<RULES SET="PHPDOC_BLOCK" DEFAULT="COMMENT4" IGNORE_CASE="TRUE"/>
 
-	<!-- Extended label block, also uses "|" as seperator -->
-	<RULES SET="PHPDOC_LABEL_BLOCK_EXTENDED" DEFAULT="COMMENT3"
-		HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
-		<SEQ TYPE="OPERATOR">|</SEQ>
-
-		<!-- Delegate back (gets not caught from PHPDOC_LABEL_BLOCK): -->
-		<IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS" />
-		<IMPORT DELEGATE="PHPDOC_LABEL_BLOCK" />
-
-		<IMPORT DELEGATE="PHPDOC_LABEL_KEYWORDS" />
-		<IMPORT DELEGATE="PHPDOC" />
-		<IMPORT DELEGATE="PHPDOC_VAR" />
-		<IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />
-	</RULES>
-
-	<!-- A block after a label tag like "@see" -->
-	<RULES SET="PHPDOC_LABEL_BLOCK" DEFAULT="COMMENT3"
-		HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
-
-		<!-- Delegate back -->
-		<!-- <IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS" /> -->
-
-		<SEQ TYPE="COMMENT3" DELEGATE="PHPDOC">*/</SEQ>
-
-		<MARK_PREVIOUS TYPE="FUNCTION">()</MARK_PREVIOUS>
-
-		<IMPORT DELEGATE="PHPDOC_LABEL_KEYWORDS" />
-		<IMPORT DELEGATE="PHPDOC" />
-		<IMPORT DELEGATE="PHPDOC_VAR" />
-		<IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />
-		<IMPORT DELEGATE="PHP_TYPES" />
-	</RULES>
-
-
-	<!-- A block after @access -->
-	<RULES SET="PHPDOC_LABEL_BLOCK_ACCESS" DEFAULT="COMMENT3"
-		HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
-		<IMPORT DELEGATE="KEYWORDS_VISIBILITY" />
-
-		<!-- Delegate back: -->
-		<IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS"/>
-	</RULES>
-
-
-	<RULES SET="PHPDOC_BLOCK" DEFAULT="COMMENT3"
-		HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
-		<!-- highlight function/method name as token type FUNCTION -->
-		<MARK_PREVIOUS TYPE="FUNCTION">()</MARK_PREVIOUS>
+	<!--{{{ rule PHPDOC -->
+	<RULES SET="PHPDOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
 
-		<!-- Delegate back: -->
-		<IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS"/>
-		<IMPORT DELEGATE="PHPDOC"/>
-		<IMPORT DELEGATE="PHPDOC_VAR"/>
-	</RULES>
-
-
-	<!-- Helper for class references in rule PHPDOC -->
-	<RULES SET="OBJECT_PHPDOC">
-		<SPAN TYPE="OPERATOR" DELEGATE="PHP">
-			<BEGIN>[</BEGIN>
-			<END>]</END>
+		<!--{{{ HTML comments -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN><!--</BEGIN>
+			<END>--></END>
 		</SPAN>
-		<SEQ_REGEXP TYPE="FUNCTION" HASH_CHAR="->" DELEGATE="PHPDOC">->\w+\s*(?=\()</SEQ_REGEXP>
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="->" DELEGATE="OBJECT_PHPDOC">->\w+(?=(\[[\s\w'"]+\])?->)</SEQ_REGEXP>
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="->" DELEGATE="PHPDOC">->\w*</SEQ_REGEXP>
+		<!--}}}-->
 
-		<IMPORT DELEGATE="PHP_KEYWORDS" />
-	</RULES>
+		<!--{{{ PHPdoc allows this -->
+		<SEQ TYPE="COMMENT3"><<</SEQ>
+		<SEQ TYPE="COMMENT3"><=</SEQ>
+		<SEQ TYPE="COMMENT3">< </SEQ>
+		<!--}}}-->
 
+		<!--{{{ strings in quotes -->
+		<SPAN TYPE="LITERAL1" ESCAPE="\" NO_LINE_BREAK="TRUE">
+		<BEGIN>"</BEGIN>
+		<END>"</END>
+		</SPAN>
+		<!--}}}-->
 
-	<!-- Almost like PHP_VAR - but with another delegate -->
-	<RULES SET="PHPDOC_VAR">
-		<!-- (Class-)Variables -->
-		<SEQ_REGEXP TYPE="KEYWORD4" HASH_CHAR="$" DELEGATE="OBJECT_PHPDOC">[\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?=(\[[\s\w'"]+\])?->)</SEQ_REGEXP>
+		<!--{{{ HTML tag -->
+		<SPAN TYPE="MARKUP" DELEGATE="xml::TAGS"
+			NO_LINE_BREAK="TRUE">
+			<BEGIN><</BEGIN>
+			<END>></END>
+		</SPAN>
+		<!--}}}-->
 
-		<MARK_PREVIOUS TYPE="KEYWORD4">::</MARK_PREVIOUS>
+		<SPAN_REGEXP TYPE="LABEL" HASH_CHAR="@" NO_WORD_BREAK="FALSE" DELEGATE="PHPDOC_BLOCK">
+			<BEGIN>@(?:param|throws|exception|serialField)(\s)</BEGIN>
+			<END>$1</END>
+		</SPAN_REGEXP>
 
-		<SEQ_REGEXP HASH_CHAR="$" TYPE="KEYWORD4">[\$]+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?=\s*=\s*(&\s*)?new)</SEQ_REGEXP>
+		<SPAN_REGEXP TYPE="LABEL" HASH_CHAR="{@" NO_WORD_BREAK="FALSE" DELEGATE="PHPDOC_BLOCK">
+			<BEGIN>\{@(internal|link)\s</BEGIN>
+			<END>}</END>
+		</SPAN_REGEXP>
 
-		<!-- Normal variables -->
-		<IMPORT DELEGATE="PHP_VAR" />
-	</RULES>
 
+		<SPAN DELEGATE="PHP" TYPE="MARKUP">
+			<BEGIN><code></BEGIN>
+			<END></code></END>
+		</SPAN>
 
-	<!-- phpdoc / phpDocumentor label tags -->
-	<RULES SET="PHPDOC_LABEL_KEYWORDS">
-		<!-- {{{
-			Some (@global, @param, ..) are here just for complete-word -->
+		<!--{{{ keywords -->
 		<KEYWORDS>
 			<LABEL>@abstract</LABEL>
 			<LABEL>@access</LABEL>
@@ -5078,65 +4922,9 @@ TODO:
 			<LABEL>@var</LABEL>
 			<LABEL>@version</LABEL>
 		</KEYWORDS>
-		<!-- }}} -->
-	</RULES>
-
-
-	<!-- Delegate to PHPDOC_LABEL_BLOCK[_EXTENDED|_ACCESS] or back to PHPDOC -->
-	<RULES SET="PHPDOC_DELEGATE_LABEL_BLOCKS" DEFAULT="COMMENT3">
-		<!-- Delegate empty line (just an asterisk) back to PHPDOC -->
-		<SEQ_REGEXP TYPE="COMMENT3" AT_WHITESPACE_END="TRUE" DELEGATE="PHPDOC" HASH_CHAR="*">\*\s*$</SEQ_REGEXP>
-
-		<SEQ_REGEXP TYPE="LABEL" HASH_CHAR="@"
-			DELEGATE="PHPDOC_LABEL_BLOCK_EXTENDED">@(global|param|return|staticvar|var|throws)</SEQ_REGEXP>
-
-		<SEQ_REGEXP TYPE="LABEL" HASH_CHAR="@"
-			DELEGATE="PHPDOC_LABEL_BLOCK">@(deprecated|see|uses)</SEQ_REGEXP>
-
-		<SEQ TYPE="LABEL" DELEGATE="PHPDOC_LABEL_BLOCK_ACCESS">@access</SEQ>
-
-		<!-- Delegate the remaining phpdoc tags back to PHPDOC_BLOCK: -->
-		<SEQ_REGEXP TYPE="LABEL" HASH_CHAR="@"
-			DELEGATE="PHPDOC_BLOCK">@(abstract|author|category|const|constant|copyright|example|filesource|final|ignore|internal|license|link|name|package|since|static|subpackage|todo|tutorial|version)</SEQ_REGEXP>
-	</RULES>
-
-
-	<!-- The main phpdoc rules -->
-	<RULES SET="PHPDOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE"
-		HIGHLIGHT_DIGITS="TRUE" DIGIT_RE="(0x[0-9a-f]+|([0-9]*\.)?[0-9]+(e[+-]?[0-9]+)?)">
-		<!-- HTML comments -->
-		<SPAN TYPE="COMMENT1">
-			<BEGIN><!--</BEGIN>
-			<END>--></END>
-		</SPAN>
-
-		<SPAN TYPE="LABEL" DELEGATE="PHPDOC_BLOCK">
-			<BEGIN>{@internal</BEGIN>
-			<END>}}</END>
-		</SPAN>
-
-		<SPAN TYPE="LABEL" DELEGATE="PHPDOC_BLOCK">
-			<BEGIN>{@link</BEGIN>
-			<END>}</END>
-		</SPAN>
-
-		<!-- PHPdoc allows this -->
-		<SEQ TYPE="COMMENT3"><<</SEQ>
-		<SEQ TYPE="COMMENT3"><=</SEQ>
-		<SEQ TYPE="COMMENT3">< </SEQ>
-
-		<SPAN DELEGATE="PHP" TYPE="MARKUP">
-			<BEGIN><code></BEGIN>
-			<END></code></END>
-		</SPAN>
-
-		<!-- Imports: -->
-		<IMPORT DELEGATE="PHPDOC_DELEGATE_LABEL_BLOCKS" />
-		<IMPORT DELEGATE="PHPDOC_LABEL_KEYWORDS" />
-		<IMPORT DELEGATE="PHPDOC_VAR" />
-		<IMPORT DELEGATE="PHP_BASIC_KEYWORD1" />
+		<!--}}}-->
 	</RULES>
-
+	<!--}}}-->
 
 	<RULES SET="INVALID_LT" DEFAULT="INVALID">
 		<SEQ TYPE="INVALID"><</SEQ>
diff --git a/modes/python.xml b/modes/python.xml
index 08884d2..29174de 100644
--- a/modes/python.xml
+++ b/modes/python.xml
@@ -35,7 +35,11 @@
 		<EOL_SPAN TYPE="COMMENT1">#</EOL_SPAN>
 
 		<!-- decorator -->
-		<EOL_SPAN_REGEXP HASH_CHAR="@" AT_WORD_START="TRUE" TYPE="KEYWORD4">@\w</EOL_SPAN_REGEXP>
+		<SPAN_REGEXP HASH_CHAR="@" MATCH_TYPE="KEYWORD4" DELEGATE="python::MAIN">
+			<BEGIN>@\w+(?:\.\w+)*\(</BEGIN>
+			<END>\)</END>
+		</SPAN_REGEXP>
+		<MARK_FOLLOWING TYPE="KEYWORD4">@</MARK_FOLLOWING>
 
 		<!-- Triple-quotes -->
 		<SPAN TYPE="LITERAL2" DELEGATE="LITERAL_TWO">
diff --git a/modes/roff.xml b/modes/roff.xml
new file mode 100644
index 0000000..6603014
--- /dev/null
+++ b/modes/roff.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0"?>
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+
+<!--
+ Mode for the roff family of text processing systems.
+ By Kostas Michalopoulos.
+ 
+ Known issues:
+   - In escape sequences with arguments, only single and double quotes are
+     recognized while the roff language allows for any character that doesn't
+     appear in the argument.
+   - Double quotes are not really required for textual macros (like .SH in man
+     pages), but the arguments are still text. However they are shown as
+     keywords and non-textual coloring is done. Not really a problem for most
+     roff documents (ie. manpages) though.
+   - Not sure if the last SPAN_REGEXP in ROFF_ESCAPE is a good idea...
+ 
+ Recommended catalog entry:
+ 
+   <MODE NAME="roff"
+         FILE="roff.xml"
+         FILE_NAME_GLOB="*.{1,2,3,4,5,6,7,8,9,me,ms,mm,mom,tmac}" />
+-->
+
+<MODE>
+    <PROPS>
+        <PROPERTY NAME="noTabs" VALUE="true"/>
+        <PROPERTY NAME="lineComment" VALUE="\\#"/>
+        <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*"/>
+    </PROPS>
+    
+    <RULES HIGHLIGHT_DIGITS="FALSE">
+        <EOL_SPAN TYPE="COMMENT1">\#</EOL_SPAN>
+        <EOL_SPAN TYPE="COMMENT1">\"</EOL_SPAN>
+        <EOL_SPAN_REGEXP TYPE="KEYWORD1" AT_LINE_START="TRUE" DELEGATE="ROFF_ESCAPE">\.\s*\w+</EOL_SPAN_REGEXP>
+        <SEQ_REGEXP HASH_CHAR="\" TYPE="KEYWORD3">\\((\p{Graph}\[[^\]]*\])|(\p{Graph}((\'.*\')|(\".*\")))|(\p{Graph}{1,2}))</SEQ_REGEXP>
+    </RULES>
+    
+    <RULES SET="ROFF_ESCAPE">
+        <EOL_SPAN TYPE="COMMENT1">\"</EOL_SPAN>
+        <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
+            <BEGIN>"</BEGIN>
+            <END>"</END>
+        </SPAN>
+        <SPAN_REGEXP HASH_CHARS="0123456789" TYPE="DIGIT" NO_LINE_BREAK="TRUE">
+            <BEGIN>(\d|\.)+[icpPszfmnvM]?</BEGIN>
+            <END> </END>
+        </SPAN_REGEXP>
+        <SPAN_REGEXP HASH_CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstwxyz" TYPE="KEYWORD2" NO_LINE_BREAK="TRUE">
+            <BEGIN>\w+</BEGIN>
+            <END> </END>
+        </SPAN_REGEXP>
+    </RULES>
+</MODE>
+
diff --git a/modes/ruby.xml b/modes/ruby.xml
index 05f6daa..b29cd6f 100644
--- a/modes/ruby.xml
+++ b/modes/ruby.xml
@@ -352,10 +352,19 @@
 		<SEQ TYPE="OPERATOR">?</SEQ>
 
 		<!-- Symbols -->
-		<SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR=":" TYPE="LABEL">:[\p{Alpha}_][\p{Alnum}_]*[?]?</SEQ_REGEXP>
-
-		<SEQ TYPE="OPERATOR">:</SEQ>
+		<SEQ_REGEXP AT_WORD_START="TRUE" HASH_CHAR=":" TYPE="LITERAL4">:[\p{Alpha}_][\p{Alnum}_]*[?]?</SEQ_REGEXP>
+		<SPAN AT_WORD_START="TRUE" TYPE="LITERAL4">
+		  <BEGIN>:'</BEGIN> <END>'</END>
+		</SPAN>
 
+		<!-- %s$Hello world$ -->
+		<SPAN_REGEXP HASH_CHAR="%s" TYPE="LITERAL4">
+		  <BEGIN>%s([^\p{Alnum}])</BEGIN>
+		  <END>$1</END>
+    </SPAN_REGEXP>
+    <!-- Delegate contents of #{} expression in a double quoted symbol to MAIN so that
+    it will be syntax highlighted as well -->
+    
 		<KEYWORDS>
 			<KEYWORD1>BEGIN</KEYWORD1>
 			<KEYWORD1>END</KEYWORD1>
@@ -442,7 +451,16 @@
 		<MARK_FOLLOWING TYPE="KEYWORD4">#@</MARK_FOLLOWING>
 		<MARK_FOLLOWING TYPE="NULL">#$</MARK_FOLLOWING>
 	</RULES>
-
+	<RULES DEFAULT="LITERAL4" SET="doubleQuoteSymbol" ESCAPE="\">
+      <SPAN DELEGATE="MAIN" TYPE="OPERATOR">
+      <BEGIN>#{</BEGIN>
+      <END>}</END>
+    </SPAN>
+    <MARK_FOLLOWING TYPE="KEYWORD4">#@@</MARK_FOLLOWING>
+    <MARK_FOLLOWING TYPE="KEYWORD4">#@</MARK_FOLLOWING>
+    <MARK_FOLLOWING TYPE="NULL">#$</MARK_FOLLOWING>
+  </RULES>
+		
 	<!-- Delegate contents of #{} expression in backquotes to MAIN so that
 	     it will be syntax highlighted as well -->
 	<RULES DEFAULT="LITERAL2" SET="BackquoteLiteral" ESCAPE="\">
diff --git a/modes/scala.xml b/modes/scala.xml
new file mode 100644
index 0000000..05ca602
--- /dev/null
+++ b/modes/scala.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0"?>
+<!-- Scala mode by Daniel Spiewak downloaded on 2012-03-10 from https://github.com/djspiewak/jedit-modes/blob/master/scala.xml -->
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+<MODE>
+  <PROPS>
+    <PROPERTY NAME="indentOpenBrackets" VALUE="{" />
+    <PROPERTY NAME="indentCloseBrackets" VALUE="}" />
+    <PROPERTY NAME="lineUpClosingBracket" VALUE="true" />
+<PROPERTY NAME="indentNextLine"
+VALUE="(.*((if|while|else\s+if|for)\s*\().*\)|\s*else|\s*case.*=>|.*(def|val|var|type).*=)\s*$"/>
+    <!-- set this to 'true' if you want to use GNU coding style -->
+    <PROPERTY NAME="doubleBracketIndent" VALUE="false" />
+    <PROPERTY NAME="commentStart" VALUE="/*" />
+    <PROPERTY NAME="commentEnd" VALUE="*/" />
+    <PROPERTY NAME="lineComment" VALUE="//" />
+    <PROPERTY NAME="noTabs" VALUE="true" />
+    <PROPERTY NAME="tabSize" VALUE="2" />
+    <PROPERTY NAME="indentSize" VALUE="2" />
+    <PROPERTY NAME="wordBreakChars" VALUE=",+-=<>/?^&*" />
+  </PROPS>
+  
+  <RULES IGNORE_CASE="FALSE" HIGHLIGHT_DIGITS="TRUE"
+   DIGIT_RE="(0[lL]?|[1-9]\d{0,9}(\d{0,9}[lL])?|0[xX]\p{XDigit}{1,8}(\p{XDigit}{0,8}[lL])?|0[0-7]{1,11}([0-7]{0,11}[lL])?|([0-9]+\.[0-9]*|\.[0-9]+)([eE][+-]?[0-9]+)?[fFdD]?|[0-9]+([eE][+-]?[0-9]+[fFdD]?|([eE][+-]?[0-9]+)?[fFdD]))">
+
+<MARK_FOLLOWING TYPE="LABEL">@</MARK_FOLLOWING>
+
+<IMPORT DELEGATE="PRIMARY"/>
+  </RULES>
+  
+  <RULES SET="PRIMARY">
+    <!-- Silly comment -->
+    <SEQ TYPE="COMMENT1">/**/</SEQ>
+
+    <EOL_SPAN TYPE="COMMENT2">//</EOL_SPAN>
+
+    <!-- Scaladoc comment -->
+    <SPAN TYPE="COMMENT3" DELEGATE="SCALADOC">
+      <BEGIN>/**</BEGIN>
+      <END>*/</END>
+    </SPAN>
+
+    <!-- Scala comment (Java style) -->
+    <SPAN TYPE="COMMENT1">
+      <BEGIN>/*</BEGIN>
+      <END>*/</END>
+    </SPAN>
+    
+    <SPAN MATCH_TYPE="NULL" DELEGATE="MAIN">
+     <BEGIN>{</BEGIN>
+     <END>}</END>
+    </SPAN>
+    
+    <!-- XML literals; keep this in sync with the XML_LITERAL rule set! -->
+   <IMPORT DELEGATE="XML_SHARED"/>
+
+    <!-- string and character literals -->
+    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="FALSE" ESCAPE="FALSE">
+      <BEGIN>"""</BEGIN>
+      <END>"""</END>
+    </SPAN>
+    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE" ESCAPE="\">
+      <BEGIN>"</BEGIN>
+      <END>"</END>
+    </SPAN>
+<SEQ_REGEXP HASH_CHAR="'" TYPE="LITERAL1">'([^'\\]|\\.)'</SEQ_REGEXP>
+
+    <!-- symbol literals -->
+    <SEQ_REGEXP HASH_CHAR="'" TYPE="LABEL">'[0-9a-zA-Z><=+]([0-9a-zA-Z><=+]|_[0-9a-zA-Z><=+])*</SEQ_REGEXP>
+
+    <SPAN MATCH_TYPE="LITERAL3" DELEGATE="TYPE_PARAMS">
+<BEGIN>[</BEGIN>
+<END>]</END>
+</SPAN>
+
+<SPAN MATCH_TYPE="NULL">
+<BEGIN>`</BEGIN>
+<END>`</END>
+</SPAN>
+
+    <SEQ TYPE="OPERATOR">(</SEQ>
+    <SEQ TYPE="OPERATOR">)</SEQ>
+    <SEQ TYPE="OPERATOR">}</SEQ>
+    <SEQ TYPE="OPERATOR">{</SEQ>
+    <SEQ TYPE="NULL">.</SEQ>
+    <SEQ TYPE="NULL">,</SEQ>
+    <SEQ TYPE="NULL">;</SEQ>
+    <SEQ TYPE="NULL">:</SEQ>
+
+    <!-- Function calls -->
+    <!-- <MARK_PREVIOUS TYPE="FUNCTION" MATCH_TYPE="OPERATOR">(</MARK_PREVIOUS> -->
+
+<!-- Function declarations (overloaded for different spacing styles)-->
+<MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def </MARK_FOLLOWING>
+<MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def </MARK_FOLLOWING>
+<MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def </MARK_FOLLOWING>
+<MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def </MARK_FOLLOWING>
+<MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def </MARK_FOLLOWING>
+<MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def </MARK_FOLLOWING>
+<MARK_FOLLOWING TYPE="FUNCTION" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE">def </MARK_FOLLOWING>
+
+<SPAN DELEGATE="PATTERN" MATCH_TYPE="KEYWORD1" AT_WORD_START="TRUE" NO_LINE_BREAK="TRUE">
+<BEGIN>case </BEGIN>
+<END>=></END>
+</SPAN>
+
+    <KEYWORDS>
+      <KEYWORD1>abstract</KEYWORD1>
+      <KEYWORD1>case</KEYWORD1>
+      <KEYWORD1>catch</KEYWORD1>
+      <KEYWORD1>class</KEYWORD1>
+      <KEYWORD1>def</KEYWORD1>
+      <KEYWORD1>do</KEYWORD1>
+      <KEYWORD1>else</KEYWORD1>
+      <KEYWORD1>extends</KEYWORD1>
+      <KEYWORD1>final</KEYWORD1>
+      <KEYWORD1>finally</KEYWORD1>
+      <KEYWORD1>for</KEYWORD1>
+      <KEYWORD1>forSome</KEYWORD1>
+      <KEYWORD1>if</KEYWORD1>
+      <KEYWORD1>implicit</KEYWORD1>
+      <KEYWORD1>import</KEYWORD1>
+      <KEYWORD1>lazy</KEYWORD1>
+      <KEYWORD1>match</KEYWORD1>
+      <KEYWORD1>new</KEYWORD1>
+      <KEYWORD1>object</KEYWORD1>
+      <KEYWORD1>override</KEYWORD1>
+      <KEYWORD1>package</KEYWORD1>
+      <KEYWORD1>private</KEYWORD1>
+      <KEYWORD1>protected</KEYWORD1>
+      <KEYWORD1>requires</KEYWORD1>
+      <KEYWORD1>return</KEYWORD1>
+      <KEYWORD1>sealed</KEYWORD1>
+      <KEYWORD1>throw</KEYWORD1>
+      <KEYWORD1>trait</KEYWORD1>
+      <KEYWORD1>try</KEYWORD1>
+      <KEYWORD1>type</KEYWORD1>
+      <KEYWORD1>val</KEYWORD1>
+      <KEYWORD1>var</KEYWORD1>
+      <KEYWORD1>with</KEYWORD1>
+      <KEYWORD1>while</KEYWORD1>
+      <KEYWORD1>yield</KEYWORD1>
+      <KEYWORD1>=></KEYWORD1>
+
+      <!-- java.lang.* wrapper types -->
+      <KEYWORD2>Character</KEYWORD2>
+      <KEYWORD2>Integer</KEYWORD2>
+
+      <!-- scala.* primitive types -->
+      <KEYWORD2>Boolean</KEYWORD2>
+      <KEYWORD2>Byte</KEYWORD2>
+      <KEYWORD2>Char</KEYWORD2>
+      <KEYWORD2>Double</KEYWORD2>
+      <KEYWORD2>Float</KEYWORD2>
+      <KEYWORD2>Int</KEYWORD2>
+      <KEYWORD2>Long</KEYWORD2>
+      <KEYWORD2>Short</KEYWORD2>
+      <KEYWORD2>Unit</KEYWORD2>
+
+      <!-- scala.* predefined types -->
+      <KEYWORD3>Any</KEYWORD3>
+      <KEYWORD3>AnyRef</KEYWORD3>
+      <KEYWORD3>Nothing</KEYWORD3>
+
+<LITERAL2>false</LITERAL2>
+<LITERAL2>null</LITERAL2>
+<LITERAL2>super</LITERAL2>
+<LITERAL2>this</LITERAL2>
+<LITERAL2>true</LITERAL2>
+    </KEYWORDS>
+  </RULES>
+  
+  <RULES SET="TYPE_PARAMS" DEFAULT="LITERAL3">
+   <SPAN MATCH_TYPE="LITERAL3" DELEGATE="TYPE_PARAMS">
+<BEGIN>[</BEGIN>
+<END>]</END>
+</SPAN>
+  </RULES>
+  
+  <RULES SET="PATTERN" DEFAULT="NULL" IGNORE_CASE="FALSE">
+   <IMPORT DELEGATE="PRIMARY"/>
+
+<SEQ TYPE="OPERATOR">@</SEQ>
+  </RULES>
+
+  <RULES SET="SCALADOC" DEFAULT="COMMENT3" IGNORE_CASE="TRUE">
+    <!-- so that @link{...} is highlighted -->
+    <SEQ TYPE="COMMENT3">{</SEQ>
+
+    <!-- so that *@param is highlighted -->
+    <SEQ TYPE="COMMENT3">*</SEQ>
+
+    <!-- Javadoc ignores tags inside <pre> -->
+    <SPAN TYPE="MARKUP" DELEGATE="SCALADOC_PRE">
+      <BEGIN><pre></BEGIN>
+      <END></pre></END>
+    </SPAN>
+
+    <!-- HTML comments -->
+    <SPAN TYPE="COMMENT1">
+      <BEGIN><!--</BEGIN>
+      <END>--></END>
+    </SPAN>
+
+    <!-- HTML tags -->
+    <SPAN_REGEXP HASH_CHAR="<" TYPE="MARKUP" DELEGATE="xml::TAGS" NO_LINE_BREAK="TRUE">
+      <BEGIN></?[\da-zA-Z\-]+</BEGIN>
+      <END>></END>
+    </SPAN_REGEXP>
+
+    <!-- Javadoc allows this -->
+    <SEQ TYPE="COMMENT3"><</SEQ>
+
+    <KEYWORDS>
+      <LABEL>@author</LABEL>
+      <LABEL>@beaninfo</LABEL>
+      <LABEL>@history</LABEL>
+      <LABEL>@bug</LABEL>
+      <LABEL>@review</LABEL>
+      <LABEL>@todo</LABEL>
+      <LABEL>@idea</LABEL>
+      <LABEL>@pre</LABEL>
+      <LABEL>@requires</LABEL>
+      <LABEL>@post</LABEL>
+      <LABEL>@ensures</LABEL>
+      <LABEL>@generates</LABEL>
+      <LABEL>@modifies</LABEL>
+      <LABEL>@invariant</LABEL>
+      <LABEL>@exception</LABEL>
+      <LABEL>@hides</LABEL>
+      <LABEL>@overrides</LABEL>
+      <LABEL>@equivalent</LABEL>
+      <LABEL>@bon</LABEL>
+      <LABEL>@access</LABEL>
+      <LABEL>@example</LABEL>
+      <LABEL>@design</LABEL>
+      <LABEL>@serial</LABEL>
+      <LABEL>@references</LABEL>
+      <LABEL>@uses</LABEL>
+      <LABEL>@guard</LABEL>
+      <LABEL>@values</LABEL>
+      <LABEL>@complexity</LABEL>
+      <LABEL>@deprecated</LABEL>
+      <LABEL>@docRoot</LABEL>
+      <LABEL>@exception</LABEL>
+      <LABEL>@link</LABEL>
+      <LABEL>@param</LABEL>
+      <LABEL>@return</LABEL>
+      <LABEL>@see</LABEL>
+      <LABEL>@serialData</LABEL>
+      <LABEL>@serialField</LABEL>
+      <LABEL>@since</LABEL>
+      <LABEL>@throws</LABEL>
+      <LABEL>@version</LABEL>
+      <LABEL>@spec</LABEL>
+    </KEYWORDS>
+  </RULES>
+
+  <RULES SET="SCALADOC_PRE" DEFAULT="COMMENT3" />
+  
+  <RULES SET="XML_SHARED">
+   <SPAN TYPE="COMMENT2">
+   <BEGIN><!--</BEGIN>
+   <END>--></END>
+   </SPAN>
+  
+   <SPAN TYPE="LITERAL3">
+   <BEGIN><?</BEGIN>
+   <END>?></END>
+   </SPAN>
+  
+   <SPAN MATCH_TYPE="LITERAL3" TYPE="COMMENT4">
+   <BEGIN><![CDATA[</BEGIN>
+   <END>]]></END>
+   </SPAN>
+    
+    <SEQ_REGEXP HASH_CHAR="<" TYPE="LITERAL3"><([\d\w_\-:.]+)(\s+[\d\w_\-:.]+=('[^']*'|"[^"]*"))*\s*/\s*></SEQ_REGEXP>
+    
+    <SPAN_REGEXP DELEGATE="XML_LITERAL" HASH_CHAR="<" MATCH_TYPE="LITERAL3" TYPE="NULL">
+     <BEGIN><([\d\w_\-:.]+)(\s+[\d\w_\-:.]+=('[^']*'|"[^"]*"))*\s*></BEGIN>
+     <END></$1></END>
+    </SPAN_REGEXP>
+  </RULES>
+  
+  <!-- TODO find a way to highlight attribute names as LABEL, attribute values as LITERAL1 -->
+  <RULES SET="XML_LITERAL" DEFAULT="COMMENT4">
+   <PROPS>
+<PROPERTY NAME="commentStart" VALUE="<!--" />
+<PROPERTY NAME="commentEnd" VALUE="-->" />
+<PROPERTY NAME="lineComment" VALUE="" />
+   </PROPS>
+  
+   <IMPORT DELEGATE="XML_SHARED"/>
+  
+    <SPAN DELEGATE="MAIN">
+      <BEGIN>{</BEGIN>
+      <END>}</END>
+    </SPAN>
+    
+    <SPAN TYPE="LABEL" NO_WORD_BREAK="TRUE">
+     <BEGIN>&</BEGIN>
+     <END>;</END>
+    </SPAN>
+    
+    <SEQ_REGEXP HASH_CHAR="<" TYPE="INVALID"></[\d\w_\-:.]+></SEQ_REGEXP> <!-- unmatched closing tags -->
+  </RULES>
+</MODE>
\ No newline at end of file
diff --git a/modes/shellscript.xml b/modes/shellscript.xml
index 82a8762..be740b1 100644
--- a/modes/shellscript.xml
+++ b/modes/shellscript.xml
@@ -13,7 +13,13 @@
 			VALUE="^\s*(fi|else|done|esac|[^(]*\).*)\s*(#.*)?$" />
 		<PROPERTY NAME="unindentNextLines"
 			VALUE="^\s*(fi|else|done|esac)\s*(#.*)?$" />
-		<PROPERTY NAME="electricKeys" VALUE=")&#xA;" />
+		<!-- 3 possible values for electricKeys may be considered
+		  1. electric enter and the bracket: ")&#xA;"
+		  2. letters ending unindent rules ")iec"
+		  3. all letters ")abcdefghijklmnopqrstuvwxyz"
+		  details: http://jedit.9.n6.nabble.com/jEdit-devel-electric-keys-for-shell-mode-tp4998749.html
+		-->
+		<PROPERTY NAME="electricKeys" VALUE=")abcdefghijklmnopqrstuvwxyz" />
 	</PROPS>
 	<RULES IGNORE_CASE="TRUE" HIGHLIGHT_DIGITS="TRUE" ESCAPE="\">
 		<!-- Comments -->
diff --git a/modes/velocity_pure.xml b/modes/velocity_pure.xml
new file mode 100644
index 0000000..a005d88
--- /dev/null
+++ b/modes/velocity_pure.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0"?>
+
+<!DOCTYPE MODE SYSTEM "xmode.dtd">
+
+<!--
+ Mode definition for pure Velocity Template Language (VTL) highlighting
+  - In contrast to velocity.xml, there is no sgml highlighting!
+  - valid for jEdit 4.2, 4.3, 4.4 and 4.5.
+ 
+ Extensions for jEdit's Templates Plugin 4.0.0 are also highlighted:
+  - Special directives and variables added.
+  - Embedded Beanshell scripts are highlighted as java.
+ 
+ catalog entry recommended for Velocity Template files:
+ 
+   <MODE NAME="velocity"
+         FILE="velocity_pure.xml"
+         FILE_NAME_GLOB="*.vm" />
+ 
+ 16.01.2012 Robert Schwenn
+-->
+
+<MODE>
+
+	<PROPS>
+		<PROPERTY NAME="commentStart" VALUE="#*" />
+		<PROPERTY NAME="commentEnd" VALUE="*#" />
+		<PROPERTY NAME="lineComment" VALUE="##" />
+		<!-- Auto indent -->
+		<PROPERTY NAME="indentNextLines" VALUE="^\s*(#(foreach|if|elseif|else|beanshell|macro))\s*\(.*\)\s*"/>
+		<PROPERTY NAME="unindentThisLine" VALUE="^\s*#(end|elseif|else)\b.*"/>
+	</PROPS>
+	
+  <RULES IGNORE_CASE="FALSE">
+
+		<!-- VTL comment -->
+		<SPAN TYPE="COMMENT3">
+			<BEGIN>#**</BEGIN>
+			<END>*#</END>
+		</SPAN>
+
+		<!-- multi-line comment -->
+		<SPAN TYPE="COMMENT1">
+			<BEGIN>#*</BEGIN>
+			<END>*#</END>
+		</SPAN>
+
+		<!--single-line comment -->
+    <EOL_SPAN TYPE="COMMENT2">##</EOL_SPAN>
+    
+		
+		<!-- String -->
+    <SPAN TYPE="LITERAL1" NO_LINE_BREAK="TRUE">
+			<BEGIN>"</BEGIN>
+			<END>"</END>
+		</SPAN>
+
+		<!-- Variable name -->
+    <SPAN TYPE="FUNCTION" NO_LINE_BREAK="TRUE">
+			<BEGIN>${</BEGIN>
+			<END>}</END>
+		</SPAN>
+    <SEQ_REGEXP HASH_CHAR="$" TYPE="FUNCTION">\$!?[A-z][A-z0-9._-]*</SEQ_REGEXP>
+
+		<!-- Embedded Beanshell script -->
+    <SPAN TYPE="KEYWORD4" NO_LINE_BREAK="FALSE" DELEGATE="java::MAIN">
+			<BEGIN>#beanshell</BEGIN>
+			<END>#end</END>
+		</SPAN>
+    <!-- More correct, but the whole line after "#beanshell" is highlighted in one color:
+    <SPAN_REGEXP HASH_CHAR="#" TYPE="KEYWORD4" NO_LINE_BREAK="FALSE" DELEGATE="java::MAIN">
+			<BEGIN>#beanshell\s*\((true|false)?\)\s*</BEGIN>
+			<END>#end</END>
+		</SPAN_REGEXP>
+    -->
+
+
+		<KEYWORDS>
+      
+      <KEYWORD4>#macro</KEYWORD4>        <!-- Velocimacro block -->
+			<KEYWORD4>#beanshell</KEYWORD4>    <!-- beanshell block (jEdit-specific) -->
+      
+			<!-- Velocity directives, General -->
+      <KEYWORD1>#set</KEYWORD1>
+			<KEYWORD1>#parse</KEYWORD1>
+			<KEYWORD1>#include</KEYWORD1>
+			<KEYWORD1>#stop</KEYWORD1>
+      
+			<!-- Velocity directives, Flow control -->
+			<KEYWORD3>#if</KEYWORD3>
+			<KEYWORD3>#else</KEYWORD3>
+			<KEYWORD3>#elseif</KEYWORD3>
+			<KEYWORD3>#foreach</KEYWORD3>
+			<KEYWORD3>in</KEYWORD3>
+			<KEYWORD3>#end</KEYWORD3>
+      
+			<!-- Velocity directives, jEdit-specific -->
+			<LITERAL2>#prompt</LITERAL2>
+			<LITERAL2>#yes_no</LITERAL2>
+			<LITERAL2>#today</LITERAL2>
+			<LITERAL2>#caret</LITERAL2>
+			<LITERAL2>#buffermode</LITERAL2>
+      
+			<!-- jEdit-specific variables -->
+      <KEYWORD2>_jeditIndentation</KEYWORD2>
+			<KEYWORD2>_jeditSelection</KEYWORD2>
+			<KEYWORD2>_jeditTab</KEYWORD2>
+			<KEYWORD2>buffer</KEYWORD2>
+			<KEYWORD2>textarea</KEYWORD2>
+			<KEYWORD2>view</KEYWORD2>
+      
+		</KEYWORDS>
+    
+	</RULES>
+
+</MODE>
diff --git a/modes/vrml2.xml b/modes/vrml2.xml
index 9fae742..501d34f 100644
--- a/modes/vrml2.xml
+++ b/modes/vrml2.xml
@@ -69,6 +69,8 @@
 			<KEYWORD1>hitPoint_changed</KEYWORD1>
 			<KEYWORD1>hitNormal_changed</KEYWORD1>
 			<KEYWORD1>hitTexcoord_changed</KEYWORD1>
+			<KEYWORD1>orientation_changed</KEYWORD1>
+			<KEYWORD1>position_changed</KEYWORD1>
 			<KEYWORD1>autoOffset</KEYWORD1>
 			<KEYWORD1>offset</KEYWORD1>
 			<KEYWORD1>maxPosition</KEYWORD1>
@@ -170,6 +172,8 @@
 			<KEYWORD1>info</KEYWORD1>
 			<KEYWORD1>mustEvaluate</KEYWORD1>
 			<KEYWORD1>directOutput</KEYWORD1>
+			<KEYWORD1>cycleInterval</KEYWORD1>
+			<KEYWORD1>cycleTime</KEYWORD1>
 
 			<KEYWORD2>META</KEYWORD2>
 			<KEYWORD2>Shape</KEYWORD2>
diff --git a/org/gjt/sp/jedit/AbstractOptionPane.java b/org/gjt/sp/jedit/AbstractOptionPane.java
index 81ff8ae..185e455 100644
--- a/org/gjt/sp/jedit/AbstractOptionPane.java
+++ b/org/gjt/sp/jedit/AbstractOptionPane.java
@@ -26,6 +26,7 @@ package org.gjt.sp.jedit;
 import javax.swing.border.EmptyBorder;
 import javax.swing.*;
 import java.awt.*;
+
 //}}}
 
 /**
@@ -55,7 +56,7 @@ import java.awt.*;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: AbstractOptionPane.java 19836 2011-08-25 17:30:01Z kpouer $
+ * @version $Id: AbstractOptionPane.java 21538 2012-04-01 10:10:44Z kpouer $
  */
 // even though this class is called AbstractOptionPane, it is not really
 // abstract, since BufferOptions uses an instance of it to lay out its
@@ -70,7 +71,7 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 	 */
 	public AbstractOptionPane(String internalName)
 	{
-		this.name = internalName;
+		name = internalName;
 		setLayout(gridBag = new GridBagLayout());
 	} //}}}
 
@@ -91,12 +92,14 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 	 * Returns the component that should be displayed for this option pane.
 	 * Because this class extends Component, it simply returns "this".
 	 */
+	@Override
 	public Component getComponent()
 	{
 		return this;
 	} //}}}
 
 	//{{{ init() method
+	@Override
 	public final void init()
 	{
 		if(!initialized)
@@ -107,6 +110,7 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 	} //}}}
 
 	//{{{ save() method
+	@Override
 	public final void save()
 	{
 		if(initialized)
@@ -151,9 +155,8 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 		JLabel l = newLabel(label, comp);
 		l.setBorder(new EmptyBorder(0,0,0,12));
 		addComponent(l,comp,GridBagConstraints.BOTH);
-	} //}}}
+	}
 
-	//{{{ addComponent() method
 	/**
 	 * Adds a labeled component to the option pane. Components are
 	 * added in a vertical fashion, one per row. The label is
@@ -168,9 +171,8 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 		JLabel l = newLabel(label, comp);
 		l.setBorder(new EmptyBorder(0,0,0,12));
 		addComponent(l,comp,fill);
-	} //}}}
+	}
 
-	//{{{ addComponent() method
 	/**
 	 * Adds a labeled component to the option pane. Components are
 	 * added in a vertical fashion, one per row. The label is
@@ -183,9 +185,8 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 	public void addComponent(Component comp1, Component comp2)
 	{
 		addComponent(comp1,comp2,GridBagConstraints.BOTH);
-	} //}}}
+	}
 
-	//{{{ addComponent() method
 	/**
 	 * Adds a labeled component to the option pane. Components are
 	 * added in a vertical fashion, one per row. The label is
@@ -216,9 +217,8 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 		cons.weightx = 1.0f;
 		gridBag.setConstraints(comp2,cons);
 		add(comp2);
-	} //}}}
+	}
 
-	//{{{ addComponent() method
 	/**
 	 * Adds a component to the option pane. Components are
 	 * added in a vertical fashion, one per row.
@@ -237,9 +237,8 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 
 		gridBag.setConstraints(comp,cons);
 		add(comp);
-	} //}}}
+	}
 
-	//{{{ addComponent() method
 	/**
 	 * Adds a component to the option pane. Components are
 	 * added in a vertical fashion, one per row.
@@ -265,47 +264,35 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 	//{{{ copyToolTips() method
 	private static void copyToolTips(Component c1, Component c2)
 	{
+		if (!(c1 instanceof JComponent) || !(c2 instanceof JComponent))
+			return;
+
+		JComponent jc1 = (JComponent) c1;
+		String tooltip = jc1.getToolTipText();
 		int tooltips = 0;
-		int jc = 0;
-		String text = null;
-		JComponent jc1 = null;
-		try
-		{
-			jc1 = (JComponent) c1;
-			text = jc1.getToolTipText();
-			++jc;
-			if (text != null && text.length() > 0)
-				tooltips++;
-		}
-		catch (Exception e)
-		{
-		}
+		if (tooltip != null && !tooltip.isEmpty())
+			tooltips++;
 
-		JComponent jc2 = null;
-		try
-		{
-			jc2 = (JComponent) c2;
-			String text2 = jc2.getToolTipText();
-			++jc;
-			if (text2 != null && text2.length() > 0)
-			{
-				text = text2;
-				tooltips++;
-			}
-		}
-		catch (Exception e)
+		JComponent jc2 = (JComponent) c2;
+		String tooltip2 = jc2.getToolTipText();
+		if (tooltip2 != null && !tooltip2.isEmpty())
 		{
+			tooltip = tooltip2;
+			tooltips++;
 		}
 
-		if (tooltips == 1 && jc == 2)
+		// if there is 0 tooltip, do nothing
+		// if there is 1 tooltip, copy it to the two components
+		// if there is 2 tooltip, each component has it's tooltip, do
+		//     nothing
+		if (tooltips == 1)
 		{
-			jc1.setToolTipText(text);
-			jc2.setToolTipText(text);
+			jc1.setToolTipText(tooltip);
+			jc2.setToolTipText(tooltip);
 		}
-
 	} //}}}
 
-	//{{{ addSeparator() method
+	//{{{ addSeparator() methods
 	/**
 	 * Adds a separator component.
 	 * @since jEdit 4.1pre7
@@ -329,9 +316,8 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 		add(sep);
 
 		addComponent(Box.createVerticalStrut(6));
-	} //}}}
+	}
 
-	//{{{ addSeparator() method
 	/**
 	 * Adds a separator component.
 	 * @param label The separator label property
@@ -400,9 +386,10 @@ public class AbstractOptionPane extends JPanel implements OptionPane
 	 * pane.
 	 */
 	protected void _save() {}
+
 	//}}}
 
 	//{{{ Private members
-	private String name;
+	private final String name;
 	//}}}
 }
diff --git a/org/gjt/sp/jedit/ActionSet.java b/org/gjt/sp/jedit/ActionSet.java
index b30974c..504f8e4 100644
--- a/org/gjt/sp/jedit/ActionSet.java
+++ b/org/gjt/sp/jedit/ActionSet.java
@@ -27,6 +27,7 @@ import java.net.URL;
 import java.util.*;
 
 import org.gjt.sp.jedit.input.AbstractInputHandler;
+import org.jedit.keymap.Keymap;
 import org.gjt.sp.util.Log;
 //}}}
 
@@ -138,7 +139,7 @@ import org.gjt.sp.util.Log;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: ActionSet.java 16333 2009-10-14 09:30:00Z kpouer $
+ * @version $Id: ActionSet.java 20759 2012-01-12 11:06:22Z kpouer $
  * @since jEdit 4.0pre1
  */
 public class ActionSet extends JEditActionSet<EditAction> implements Comparable
@@ -289,7 +290,8 @@ public class ActionSet extends JEditActionSet<EditAction> implements Comparable
 	//{{{ getProperty() method
 	protected String getProperty(String name)
 	{
-		return jEdit.getProperty(name);
+		Keymap keymap = jEdit.getKeymapManager().getKeymap();
+		return keymap.getShortcut(name);
 	} //}}}
 	
 	//{{{ getInputHandler() method
diff --git a/org/gjt/sp/jedit/Buffer.java b/org/gjt/sp/jedit/Buffer.java
index 67e37f4..73a3024 100644
--- a/org/gjt/sp/jedit/Buffer.java
+++ b/org/gjt/sp/jedit/Buffer.java
@@ -24,6 +24,7 @@
 package org.gjt.sp.jedit;
 
 //{{{ Imports
+import java.awt.Component;
 import java.io.File;
 import java.io.IOException;
 import java.net.Socket;
@@ -43,6 +44,7 @@ import org.gjt.sp.jedit.bufferio.BufferAutosaveRequest;
 import org.gjt.sp.jedit.bufferio.BufferIORequest;
 import org.gjt.sp.jedit.bufferio.MarkersSaveRequest;
 import org.gjt.sp.jedit.bufferset.BufferSet;
+import org.gjt.sp.jedit.gui.DockableWindowManager;
 import org.gjt.sp.jedit.io.FileVFS;
 import org.gjt.sp.jedit.io.VFS;
 import org.gjt.sp.jedit.io.VFSFile;
@@ -51,6 +53,8 @@ import org.gjt.sp.jedit.msg.BufferUpdate;
 import org.gjt.sp.jedit.options.GeneralOptionPane;
 import org.gjt.sp.jedit.syntax.ModeProvider;
 import org.gjt.sp.jedit.syntax.ParserRuleSet;
+import org.gjt.sp.jedit.syntax.TokenHandler;
+import org.gjt.sp.jedit.syntax.TokenMarker;
 import org.gjt.sp.jedit.visitors.JEditVisitorAdapter;
 import org.gjt.sp.jedit.visitors.SaveCaretInfoVisitor;
 import org.gjt.sp.util.IntegerArray;
@@ -86,7 +90,7 @@ import org.gjt.sp.util.ThreadUtilities;
 
  *
  * @author Slava Pestov
- * @version $Id: Buffer.java 20007 2011-09-24 00:49:35Z Vampire0 $
+ * @version $Id: Buffer.java 21754 2012-06-02 18:49:16Z jarekczek $
  */
 public class Buffer extends JEditBuffer
 {
@@ -368,9 +372,16 @@ public class Buffer extends JEditBuffer
 	 */
 	public boolean saveAs(View view, boolean rename)
 	{
-		String[] files = GUIUtilities.showVFSFileDialog(view,path,
-			VFSBrowser.SAVE_DIALOG,false);
-
+		String fileSavePath = path;
+		if (jEdit.getBooleanProperty("saveAsUsesFSB")) 
+		{
+			DockableWindowManager dwm = view.getDockableWindowManager();
+			Component comp = dwm.getDockable("vfs.browser");
+			VFSBrowser browser = (VFSBrowser) comp;
+			if (browser != null) 
+				fileSavePath = browser.getDirectory() + "/";
+		}
+		String[] files = GUIUtilities.showVFSFileDialog(view, fileSavePath, VFSBrowser.SAVE_DIALOG,false);
 		// files[] should have length 1, since the dialog type is
 		// SAVE_DIALOG
 		if(files == null)
@@ -955,6 +966,9 @@ public class Buffer extends JEditBuffer
 	public void propertiesChanged()
 	{
 		super.propertiesChanged();
+		longLineLimit = jEdit.getIntegerProperty("longLineLimit", 4000);
+		String largefilemode = getStringProperty("largefilemode");
+		longBufferMode = "limited".equals(largefilemode) || "nohighlight".equals(largefilemode);
 		if (!autoreloadOverridden)
 		{
 			setAutoReloadDialog(jEdit.getBooleanProperty("autoReloadDialog"));
@@ -1008,7 +1022,13 @@ public class Buffer extends JEditBuffer
 	{
 		String wrap = getStringProperty("wrap");
 		if(wrap.equals("none"))
-			wrap = "soft";
+		{
+			String largeFileMode = getStringProperty("largefilemode");
+			if ("limited".equals(largeFileMode) || "nohighlight".equals(largeFileMode))
+				wrap = "hard";
+			else
+				wrap = "soft";
+		}
 		else if(wrap.equals("soft"))
 			wrap = "hard";
 		else if(wrap.equals("hard"))
@@ -1019,6 +1039,29 @@ public class Buffer extends JEditBuffer
 		setProperty("wrap",wrap);
 		propertiesChanged();
 	} //}}}
+	
+	//{{{ toggleAutoIndent() method
+	/**
+	 * Toggles automatic indentation on and off.
+	 * @param view This view's status bar will display the message
+	 * @since jEdit 5.0
+	 */
+	public void toggleAutoIndent(View view)
+	{
+		String indent = getStringProperty("autoIndent");
+		if (indent.equals("none"))
+			indent = "simple";
+		else if (indent.equals("simple"))
+			indent = "full";
+		else if (indent.equals("full"))
+			indent = "none";
+		setProperty("autoIndent", indent);
+		
+		view.getStatus().setMessageAndClear(
+			jEdit.getProperty("view.status.autoindent-changed",
+				new String[] {indent}));
+	}
+			
 
 	//{{{ toggleLineSeparator() method
 	/**
@@ -1087,6 +1130,8 @@ public class Buffer extends JEditBuffer
 
 	//}}}
 
+	//}}}
+	
 	//{{{ Edit modes, syntax highlighting
 
 	//{{{ setMode() method
@@ -1110,41 +1155,67 @@ public class Buffer extends JEditBuffer
 		}
 		if (mode != null)
 		{
-			boolean forceInsensitive = false;
-			if (!getFlag(TEMPORARY) && getLength() > jEdit.getIntegerProperty("largeBufferSize", 4000000))
+			int largeBufferSize = jEdit.getIntegerProperty("largeBufferSize", 4000000);
+			if (!getFlag(TEMPORARY) && getLength() > largeBufferSize && largeBufferSize != 0)
 			{
 				boolean contextInsensitive = mode.getBooleanProperty("contextInsensitive");
-				if (!contextInsensitive)
+				String largeFileMode = jEdit.getProperty("largefilemode", "ask");
+				
+				if ("ask".equals(largeFileMode))
 				{
-					JTextPane tp = new JTextPane();
-					tp.setEditable(false);
-					tp.setText(jEdit.getProperty("largeBufferDialog.message"));
-					int i = JOptionPane.showOptionDialog(jEdit.getActiveView(),
-						tp,
-						jEdit.getProperty("largeBufferDialog.title", new String[]{name}),
-						JOptionPane.DEFAULT_OPTION,
-						JOptionPane.WARNING_MESSAGE,
-						null,
-						new String[]{
-							jEdit.getProperty("largeBufferDialog.fullSyntax"),
-							jEdit.getProperty("largeBufferDialog.contextInsensitive"),
-							jEdit.getProperty("largeBufferDialog.defaultMode")},
-						jEdit.getProperty("largeBufferDialog.fullSyntax"));
-					switch (i)
+					if (!contextInsensitive)
 					{
-						case 0:
-							// do nothing
-							break;
-						case 1:
-							forceInsensitive = true;
-							break;
-						case 2:
-							mode =  getDefaultMode();
-							break;
+						// the context is not insensitive 
+						JTextPane tp = new JTextPane();
+						tp.setEditable(false);
+						tp.setText(jEdit.getProperty("largeBufferDialog.message"));
+						int i = JOptionPane.showOptionDialog(jEdit.getActiveView(),
+										     tp,
+										     jEdit.getProperty("largeBufferDialog.title", new String[]{name}),
+										     JOptionPane.DEFAULT_OPTION,
+										     JOptionPane.WARNING_MESSAGE,
+										     null,
+										     new String[]{
+											     jEdit.getProperty("largeBufferDialog.fullSyntax"),
+											     jEdit.getProperty("largeBufferDialog.contextInsensitive"),
+											     jEdit.getProperty("largeBufferDialog.defaultMode")},
+										     jEdit.getProperty("largeBufferDialog.contextInsensitive"));
+						switch (i)
+						{
+							case 0:
+								setProperty("largefilemode", "full");
+								setMode(mode);
+								return;
+							case 1:
+								setProperty("largefilemode", "limited");
+								setMode(mode, true);
+								return;
+							case 2:
+								setProperty("largefilemode", "nohighlight");
+								mode =  getDefaultMode();
+								setMode(mode);
+								return;
+						}
 					}
 				}
+				else if ("full".equals(largeFileMode))
+				{
+					setProperty("largefilemode", "full");
+					setMode(mode);
+				}
+				else if ("limited".equals(largeFileMode))
+				{
+					setProperty("largefilemode", "limited");
+					setMode(mode, true);
+				}
+				else if ("nohighlight".equals(largeFileMode))
+				{
+					setProperty("largefilemode", "nohighlight");
+					mode =  getDefaultMode();
+					setMode(mode);
+				}
 			}
-			setMode(mode, forceInsensitive);
+			setMode(mode);
 			return;
 		}
 
@@ -1560,7 +1631,7 @@ public class Buffer extends JEditBuffer
 	Buffer(String path, boolean newFile, boolean temp, Map props)
 	{
 		super(props);
-
+		textTokenMarker = jEdit.getMode("text").getTokenMarker();
 		markers = new Vector<Marker>();
 
 		setFlag(TEMPORARY,temp);
@@ -1629,6 +1700,22 @@ public class Buffer extends JEditBuffer
 
 	//{{{ Protected members
 
+	@Override
+	protected TokenMarker.LineContext markTokens(Segment seg, TokenMarker.LineContext prevContext,
+						      TokenHandler _tokenHandler)
+	{
+		TokenMarker.LineContext context;
+		if (longBufferMode && longLineLimit != 0 && longLineLimit < seg.length())
+		{
+			context = textTokenMarker.markTokens(prevContext, _tokenHandler, seg);
+		}
+		else
+		{
+			context = tokenMarker.markTokens(prevContext, _tokenHandler, seg);
+		}
+		return context;
+	}
+
 	//{{{ fireBeginUndo() method
 	protected void fireBeginUndo()
 	{
@@ -1742,6 +1829,8 @@ public class Buffer extends JEditBuffer
 
 	//{{{ Instance variables
 	/** Indicate if the autoreload property was overridden */
+	private int longLineLimit;
+	private TokenMarker textTokenMarker;
 	private boolean autoreloadOverridden;
 	private String path;
 	private String symlinkPath;
@@ -1752,10 +1841,7 @@ public class Buffer extends JEditBuffer
 	private long modTime;
 	private byte[] md5hash;
 	private int initialLength;
-	/**
-	 * The longBufferMode is an option
-	 */
-	private int longBufferMode;
+	private boolean longBufferMode;
 
 	private final Vector<Marker> markers;
 
diff --git a/org/gjt/sp/jedit/Debug.java b/org/gjt/sp/jedit/Debug.java
index 43011b5..e8a179d 100644
--- a/org/gjt/sp/jedit/Debug.java
+++ b/org/gjt/sp/jedit/Debug.java
@@ -23,11 +23,11 @@
 package org.gjt.sp.jedit;
 
 /**
- * This class contains various debugging flags mainly useful for core
- * development.
+ * This class contains various debugging flags (mainly useful for core
+ * development) and debugging routines.
  * @since jEdit 4.2pre1
  * @author Slava Pestov
- * @version $Id: Debug.java 20107 2011-10-18 11:56:56Z evanpw $
+ * @version $Id: Debug.java 21735 2012-05-29 17:06:05Z jarekczek $
  */
 public class Debug
 {
@@ -151,4 +151,29 @@ public class Debug
 	 * @since jEdit 4.3pre1
 	 */
 	public static boolean DISABLE_MULTIHEAD = false;
+
+	/**
+	 * Does a computational delay. Simulates heavy computations for
+	 * the given period of time. Used to force conditions that are
+	 * hard to reproduce, for example deadlock cases.
+	 * @param time Required delay, in ms
+	 */
+	public static int compDelay(long time)
+	{
+		long start = System.currentTimeMillis();
+		long elapsed = 0;
+		int a = 0, b = 0, c = 0;
+		while (elapsed >= 0 && elapsed < time)
+		{
+			// These computations must be hard enough, so that
+			// the compiler doesn't optimize them
+			for (int i=0; i<500*1000; i++) {
+				a = (b+1) * (c+1);
+				b = (a+1) * (c+1);
+				c = (a+1) * (b+1);
+			}
+			elapsed = System.currentTimeMillis() - start;
+		}
+		return a + b + c;
+	}
 }
diff --git a/org/gjt/sp/jedit/EditBus.java b/org/gjt/sp/jedit/EditBus.java
index d599323..d988cef 100644
--- a/org/gjt/sp/jedit/EditBus.java
+++ b/org/gjt/sp/jedit/EditBus.java
@@ -30,6 +30,7 @@ import java.util.*;
 import java.util.List;
 
 import org.gjt.sp.util.Log;
+import org.gjt.sp.util.ThreadUtilities;
 
 /**
  * jEdit's global event notification mechanism.<p>
@@ -79,7 +80,7 @@ import org.gjt.sp.util.Log;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: EditBus.java 20015 2011-09-24 11:56:48Z kpouer $
+ * @version $Id: EditBus.java 21724 2012-05-27 14:37:27Z jarekczek $
  *
  * @since jEdit 2.2pre6
  */
@@ -177,6 +178,9 @@ public class EditBus
 	 * The message is delivered to components in the AWT thread,
 	 * and this method will wait until all handlers receive the
 	 * message before returning.
+	 * <p>
+	 * This method uses {@link ThreadUtilities#runInDispatchThreadNow},
+	 * read the notes there for possible deadlocks.
 	 *
 	 * <p><b>NOTE:</b>
 	 * If the calling thread is not the AWT thread and the
@@ -200,35 +204,10 @@ public class EditBus
 		if (EventQueue.isDispatchThread())
 		{
 			sender.run();
-			return;
 		}
-
-		/*
-		 * We can't throw any checked exceptions from this
-		 * method. It will break all source that currently
-		 * expects this method to not throw them. So we catch
-		 * them and log them instead.
-		 */
-		boolean interrupted = false;
-		try
-		{
-			EventQueue.invokeAndWait(sender);
-		}
-		catch (InterruptedException ie)
-		{
-			interrupted = true;
-			Log.log(Log.ERROR, EditBus.class, ie);
-		}
-		catch (InvocationTargetException ite)
-		{
-			Log.log(Log.ERROR, EditBus.class, ite);
-		}
-		finally
+		else
 		{
-			if (interrupted)
-			{
-				Thread.currentThread().interrupt();
-			}
+			ThreadUtilities.runInDispatchThreadNow(sender);
 		}
 	} //}}}
 
diff --git a/org/gjt/sp/jedit/EditPlugin.java b/org/gjt/sp/jedit/EditPlugin.java
index 0123dc7..e9636da 100644
--- a/org/gjt/sp/jedit/EditPlugin.java
+++ b/org/gjt/sp/jedit/EditPlugin.java
@@ -205,28 +205,30 @@ plugin.console.ConsolePlugin.depend.3=optional plugin projectviewer.ProjectPlugi
  *
  * Here is an example set of plugin properties:
  *
- * <pre>plugin.QuickNotepadPlugin.activate=defer
- *plugin.QuickNotepadPlugin.name=QuickNotepad
- *plugin.QuickNotepadPlugin.author=John Gellene
- *plugin.QuickNotepadPlugin.version=4.2
- *plugin.QuickNotepadPlugin.docs=QuickNotepad.html
- *plugin.QuickNotepadPlugin.depend.0=jedit 04.02.01.00
- *plugin.QuickNotepadPlugin.menu=quicknotepad \
- *    - \
- *    quicknotepad.choose-file \
- *    quicknotepad.save-file \
- *    quicknotepad.copy-to-buffer
- *plugin.QuickNotepadPlugin.option-pane=quicknotepad
- *
- * plugin.QuickNotepadPlugin.option-pane=quicknotepad
- * plugin.QuickNotepadPlugin.usePluginHome=false
- * options.quicknotepad.code=new QuickNotepadOptionPane();
- * options.quicknotepad.label=QuickNotepad
- * options.quicknotepad.file=File:
- * options.quicknotepad.choose-file=Choose
- * options.quicknotepad.choose-file.title=Choose a notepad file
- * options.quicknotepad.choose-font=Font:
- * options.quicknotepad.show-filepath.title=Display notepad file path
+<pre>
+# jEdit only needs to load the plugin the first time the user accesses it
+# the presence of this property also tells jEdit the plugin is using the new API
+plugin.QuickNotepadPlugin.activate=defer
+plugin.QuickNotepadPlugin.name=QuickNotepad
+plugin.QuickNotepadPlugin.author=John Gellene
+plugin.QuickNotepadPlugin.usePluginHome=true
+plugin.QuickNotepadPlugin.version=4.5
+plugin.QuickNotepadPlugin.docs=index.html
+
+plugin.QuickNotepadPlugin.depend.0=jedit 04.05.99.00
+plugin.QuickNotepadPlugin.depend.1=jdk 1.6
+plugin.QuickNotepadPlugin.description=This plugin provides a dockable "scratch pad" for writing and displaying notes, to do lists or similar items as unformatted text.
+# plugin menu
+plugin.QuickNotepadPlugin.menu=quicknotepad \
+	- \
+	quicknotepad.choose-file \
+	quicknotepad.save-file \
+	quicknotepad.copy-to-buffer
+
+quicknotepad.label=QuickNotepad
+plugin.QuickNotepadPlugin.option-pane=quicknotepad
+options.quicknotepad.code=new QuickNotepadOptionPane();
+options.quicknotepad.label=QuickNotepad
 </pre>
  *
  * Note that action and option pane labels are not shown in the above example.
diff --git a/org/gjt/sp/jedit/GUIUtilities.java b/org/gjt/sp/jedit/GUIUtilities.java
index 8e8de25..5628543 100644
--- a/org/gjt/sp/jedit/GUIUtilities.java
+++ b/org/gjt/sp/jedit/GUIUtilities.java
@@ -29,6 +29,7 @@ import org.gjt.sp.jedit.gui.EnhancedButton;
 import org.gjt.sp.jedit.gui.FloatingWindowContainer;
 import org.gjt.sp.jedit.gui.SplashScreen;
 import org.gjt.sp.jedit.gui.VariableGridLayout;
+import org.jedit.keymap.Keymap;
 import org.gjt.sp.jedit.menu.EnhancedCheckBoxMenuItem;
 import org.gjt.sp.jedit.menu.EnhancedMenu;
 import org.gjt.sp.jedit.menu.EnhancedMenuItem;
@@ -59,6 +60,7 @@ import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.JScrollPane;
 import javax.swing.JSplitPane;
+import javax.swing.JTextPane;
 import javax.swing.JToolBar;
 import javax.swing.ListSelectionModel;
 import javax.swing.SwingUtilities;
@@ -68,8 +70,7 @@ import java.awt.*;
 import java.awt.event.*;
 //}}}
 
-/**
- * Various GUI functions.<p>
+/** Various GUI utility functions related to icons, menus, toolbars, keyboard shortcuts, etc. 
  *
  * The most frequently used members of this class are:
  *
@@ -86,7 +87,7 @@ import java.awt.event.*;
  * </ul>
  *
  * @author Slava Pestov
- * @version $Id: GUIUtilities.java 21012 2012-01-29 19:08:10Z voituk $
+ * @version $Id: GUIUtilities.java 21469 2012-03-28 17:33:10Z ezust $
  */
 public class GUIUtilities
 {
@@ -571,7 +572,7 @@ public class GUIUtilities
 				out.append(' ');
 			out.append(getMacShortcutLabel(strokes[i]));
 		}
-
+		
 		return out.toString();
         } //}}}
 
@@ -586,8 +587,9 @@ public class GUIUtilities
 			return null;
 		else
 		{
-			String shortcut1 = jEdit.getProperty(action + ".shortcut");
-			String shortcut2 = jEdit.getProperty(action + ".shortcut2");
+			Keymap keymap = jEdit.getKeymapManager().getKeymap();
+			String shortcut1 = keymap.getShortcut(action + ".shortcut");
+			String shortcut2 = keymap.getShortcut(action + ".shortcut2");
 
 			shortcut1 = getPlatformShortcutLabel(shortcut1);
 			shortcut2 = getPlatformShortcutLabel(shortcut2);
@@ -628,14 +630,35 @@ public class GUIUtilities
 	 * @param args Positional parameters to be substituted into the
 	 * message text
 	 */
-	public static void message(Component comp, String name, Object[] args)
+	public static void message(final Component comp, final String name, final Object[] args)
 	{
-		hideSplashScreen();
-
-		JOptionPane.showMessageDialog(comp,
-			jEdit.getProperty(name.concat(".message"),args),
-			jEdit.getProperty(name.concat(".title"),args),
-			JOptionPane.INFORMATION_MESSAGE);
+		if (EventQueue.isDispatchThread())
+		{
+			hideSplashScreen();
+	
+			JOptionPane.showMessageDialog(comp,
+				jEdit.getProperty(name.concat(".message"),args),
+				jEdit.getProperty(name.concat(".title"),args),
+				JOptionPane.INFORMATION_MESSAGE);
+		}
+                else 
+                {
+                        try
+                        {
+                            EventQueue.invokeAndWait(new Runnable()
+                            {
+                                    @Override
+                                    public void run()
+                                    {
+                                            message(comp, name, args);
+                                    }
+                            });
+                        }
+                        catch (Exception e)
+                        {
+                            // ignored
+                        }
+                }
 	} //}}}
 
 	//{{{ error() method
@@ -651,14 +674,35 @@ public class GUIUtilities
 	 * @param args Positional parameters to be substituted into the
 	 * message text
 	 */
-	public static void error(Component comp, String name, Object[] args)
+	public static void error(final Component comp, final String name, final Object[] args)
 	{
-		hideSplashScreen();
-
-		JOptionPane.showMessageDialog(comp,
-			jEdit.getProperty(name.concat(".message"),args),
-			jEdit.getProperty(name.concat(".title"),args),
-			JOptionPane.ERROR_MESSAGE);
+		if (EventQueue.isDispatchThread())
+		{
+			hideSplashScreen();
+	
+			JOptionPane.showMessageDialog(comp,
+				jEdit.getProperty(name.concat(".message"),args),
+				jEdit.getProperty(name.concat(".title"),args),
+				JOptionPane.ERROR_MESSAGE);
+		}
+                else 
+                {
+                        try
+                        {
+                                EventQueue.invokeAndWait(new Runnable()
+                                {
+                                        @Override
+                                        public void run()
+                                        {
+                                                error(comp, name, args);
+                                        }
+                                });
+                        }
+                        catch (Exception e)
+                        {
+                                // ignored
+                        }
+                }
 	} //}}}
 
 	//{{{ input() method
@@ -705,16 +749,36 @@ public class GUIUtilities
 	 * message text
 	 * @since jEdit 3.1pre3
 	 */
-	public static String input(Component comp, String name,
-		Object[] args, Object def)
+	public static String input(final Component comp, final String name,
+		final Object[] args, final Object def)
 	{
-		hideSplashScreen();
-
-		String retVal = (String)JOptionPane.showInputDialog(comp,
-			jEdit.getProperty(name.concat(".message"),args),
-			jEdit.getProperty(name.concat(".title")),
-			JOptionPane.QUESTION_MESSAGE,null,null,def);
-		return retVal;
+		if (EventQueue.isDispatchThread())
+		{
+			hideSplashScreen();
+	
+			return (String)JOptionPane.showInputDialog(comp,
+				jEdit.getProperty(name.concat(".message"),args),
+				jEdit.getProperty(name.concat(".title")),
+				JOptionPane.QUESTION_MESSAGE,null,null,def);
+		}
+		final String[] retValue = new String[1];
+		try
+		{
+			EventQueue.invokeAndWait(new Runnable()
+			{
+				@Override
+				public void run()
+				{
+					retValue[0] = input(comp, name, args, def);
+				}
+			});
+		}
+		catch (Exception e)
+		{
+			return null;
+		}
+		return retValue[0];
+		
 	} //}}}
 
 	//{{{ inputProperty() method
@@ -730,19 +794,40 @@ public class GUIUtilities
 	 * @param def The property whose text to display in the input field
 	 * @since jEdit 3.1pre3
 	 */
-	public static String inputProperty(Component comp, String name,
-		Object[] args, String def)
+	public static String inputProperty(final Component comp, final String name,
+		final Object[] args, final String def)
 	{
-		hideSplashScreen();
-
-		String retVal = (String)JOptionPane.showInputDialog(comp,
-			jEdit.getProperty(name.concat(".message"),args),
-			jEdit.getProperty(name.concat(".title")),
-			JOptionPane.QUESTION_MESSAGE,
-			null,null,jEdit.getProperty(def));
-		if(retVal != null)
-			jEdit.setProperty(def,retVal);
-		return retVal;
+		if (EventQueue.isDispatchThread())
+		{
+			hideSplashScreen();
+	
+			String retVal = (String)JOptionPane.showInputDialog(comp,
+				jEdit.getProperty(name.concat(".message"),args),
+				jEdit.getProperty(name.concat(".title")),
+				JOptionPane.QUESTION_MESSAGE,
+				null,null,jEdit.getProperty(def));
+			if(retVal != null)
+				jEdit.setProperty(def,retVal);
+			return retVal;
+		}
+		final String[] retValue = new String[1];
+		try
+		{
+			EventQueue.invokeAndWait(new Runnable()
+			{
+				@Override
+				public void run()
+				{
+					retValue[0] = inputProperty(comp, name, args, def);
+				}
+			});
+		}
+		catch (Exception e)
+		{
+			return null;
+		}
+		return retValue[0];
+		
 	} //}}}
 
 	//{{{ confirm() method
@@ -854,22 +939,43 @@ public class GUIUtilities
 	 * @return an integer indicating the option selected by the user
 	 * @since jEdit 4.3pre1
 	 */
-	public static int listConfirm(Component comp, String name, String[] args,
-		Object[] listModel)
+	public static int listConfirm(final Component comp, final String name, final String[] args,
+		final Object[] listModel)
 	{
-		JList list = new JList(listModel);
-		list.setVisibleRowCount(8);
-
-		Object[] message = {
-			jEdit.getProperty(name + ".message",args),
-			new JScrollPane(list)
-		};
-
-		return JOptionPane.showConfirmDialog(comp,
-			message,
-			jEdit.getProperty(name + ".title"),
-			JOptionPane.YES_NO_OPTION,
-			JOptionPane.QUESTION_MESSAGE);
+		if (EventQueue.isDispatchThread())
+		{
+			JList list = new JList(listModel);
+			list.setVisibleRowCount(8);
+	
+			Object[] message = {
+				jEdit.getProperty(name + ".message",args),
+				new JScrollPane(list)
+			};
+	
+			return JOptionPane.showConfirmDialog(comp,
+				message,
+				jEdit.getProperty(name + ".title"),
+				JOptionPane.YES_NO_OPTION,
+				JOptionPane.QUESTION_MESSAGE);
+		}
+		final int [] retValue = new int[1];
+		try
+		{
+			EventQueue.invokeAndWait(new Runnable()
+			{
+				@Override
+				public void run()
+				{
+					retValue[0] = listConfirm(comp, name, args, listModel);
+				}
+			});
+		}
+		catch (Exception e)
+		{
+			return JOptionPane.CANCEL_OPTION;
+		}
+		return retValue[0];
+		
 	} //}}}
 
 	//{{{ listConfirm() method
@@ -888,27 +994,49 @@ public class GUIUtilities
 	 * @return an integer indicating the option selected by the user
 	 * @since jEdit 4.3pre12
 	 */
-	public static int listConfirm(Component comp, String name, String[] args,
-		Object[] listModel, List selectedItems)
+	public static int listConfirm(final Component comp, final String name, final String[] args,
+		final Object[] listModel, final List selectedItems)
 	{
-		JList list = new JList(listModel);
-		list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
-		list.setVisibleRowCount(8);
-		list.addSelectionInterval(0,listModel.length - 1);
-
-		Object[] message = {
-			jEdit.getProperty(name + ".message",args),
-			new JScrollPane(list)
-		};
-
-		int ret = JOptionPane.showConfirmDialog(comp,
-							message,
-							jEdit.getProperty(name + ".title"),
-							JOptionPane.YES_NO_OPTION,
-							JOptionPane.QUESTION_MESSAGE);
-		Object[] selectedValues = list.getSelectedValues();
-		selectedItems.addAll(Arrays.asList(selectedValues));
-		return ret;
+		
+		if (EventQueue.isDispatchThread())
+		{
+			JList list = new JList(listModel);
+			list.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+			list.setVisibleRowCount(8);
+			list.addSelectionInterval(0,listModel.length - 1);
+	
+			Object[] message = {
+				jEdit.getProperty(name + ".message",args),
+				new JScrollPane(list)
+			};
+	
+			int ret = JOptionPane.showConfirmDialog(comp,
+								message,
+								jEdit.getProperty(name + ".title"),
+								JOptionPane.YES_NO_OPTION,
+								JOptionPane.QUESTION_MESSAGE);
+			Object[] selectedValues = list.getSelectedValues();
+			selectedItems.addAll(Arrays.asList(selectedValues));
+			return ret;
+		}
+		final int [] retValue = new int[1];
+		try
+		{
+			EventQueue.invokeAndWait(new Runnable()
+			{
+				@Override
+				public void run()
+				{
+					retValue[0] = listConfirm(comp, name, args, listModel, selectedItems);
+				}
+			});
+		}
+		catch (Exception e)
+		{
+			return JOptionPane.CANCEL_OPTION;
+		}
+		return retValue[0];
+		
 	} //}}}
 
 	//{{{ showVFSFileDialog() methods
@@ -1347,6 +1475,27 @@ public class GUIUtilities
 		}
 	} //}}}
 
+	//{{{ applyTextAreaColors() method
+	/**
+	 * experimental - applies the text area colors on a Component 
+	 * (such as a dockable window) and its children. 
+	 * @since jEdit 5.0pre1
+	 * @author ezust
+	 * 
+	 */
+	public static void applyTextAreaColors(Container win) 
+	{		
+		for (Component child: win.getComponents()) 
+		{
+			child.setBackground(jEdit.getColorProperty("view.bgColor", Color.WHITE));
+			child.setForeground(jEdit.getColorProperty("view.fgColor", Color.BLACK));
+			if (child instanceof JTextPane)  
+				((JTextPane)child).setUI(new javax.swing.plaf.basic.BasicEditorPaneUI());
+			if (child instanceof Container)
+				applyTextAreaColors((Container)child);
+		}
+	} //}}}
+	
 	//{{{ createMultilineLabel() method
 	/**
 	 * Creates a component that displays a multiple line message. This
@@ -1689,17 +1838,15 @@ public class GUIUtilities
 
 	//{{{ initContinuousLayout() method
 	/**
-	 * Init the continuous layout flag using the jEdit's property
-	 * appearance.continuousLayout
+	 * This method do nothing.
 	 *
 	 * @param split the split. It must never be null
 	 * @since jEdit 4.3pre9
+	 * @deprecated since jEdit 5.0 using or not continuous layout is not anymore an option.
 	 */
+	@Deprecated
 	public static void initContinuousLayout(JSplitPane split)
 	{
-		boolean continuousLayout = split.isContinuousLayout();
-		if (continuousLayout != jEdit.getBooleanProperty("appearance.continuousLayout"))
-			split.setContinuousLayout(!continuousLayout);
 	} //}}}
 
 	//{{{ Package-private members
@@ -1872,7 +2019,7 @@ public class GUIUtilities
 	} //}}}
 
 	private static HashMap<String, String> macKeySymbols = null;
-
+	
 	/*
 	 * Create a list of unicode characters to be used in displaying keyboard shortcuts
 	 * on Mac OS X.
@@ -1880,7 +2027,7 @@ public class GUIUtilities
 	static
 	{
 		macKeySymbols = new HashMap<String, String>();
-
+		
 		// These are the unicode code points used in cocoa apps for displaying
 		// shortcuts.
 		macKeySymbols.put("ENTER",         "\u21A9");
@@ -1905,36 +2052,38 @@ public class GUIUtilities
 	 * names and modifiers (e.g. C+PERIOD) to symbols.
 	 */
 	private static String getMacShortcutLabel(String label)
-	{
+	{	
 		StringBuilder out = new StringBuilder();
-
+		
+		// Show the list of modifiers in standard order
 		int endOfModifiers = label.indexOf('+');
-		for (int i = 0; i < endOfModifiers; i++)
+		if (endOfModifiers != -1)
 		{
-			char c = Character.toUpperCase(label.charAt(i));
-			switch (c)
+			String modifiers = label.substring(0, endOfModifiers).toUpperCase();
+			if (modifiers.indexOf('A') != -1)
 			{
-			case 'A':
 				out.append('\u2303');  // ctrl
-				break;
-			case 'C':
-				out.append('\u2318');  // cmd
-				break;
-			case 'M':
+			}
+			if (modifiers.indexOf('M') != -1)
+			{
 				out.append('\u2325');  // alt
-				break;
-			case 'S':
+			}
+			if (modifiers.indexOf('S') != -1)
+			{
 				out.append('\u21E7');  // shift
-				break;
+			}
+			if (modifiers.indexOf('C') != -1)
+			{
+				out.append('\u2318');  // cmd
 			}
 		}
-
+		
 		// We've done the modifiers, now do the key
 		String key = label.substring(endOfModifiers + 1);
-
+		
 		// Some keys have Mac-specific symbols
 		String text = macKeySymbols.get(key);
-
+		
 		// Others don't
 		if (text == null)
 		{
@@ -1944,7 +2093,7 @@ public class GUIUtilities
 			{
 				// e.g., convert the string "PERIOD" to the int KeyEvent.VK_PERIOD
 				int keyCode = KeyEvent.class.getField("VK_".concat(key)).getInt(null);
-
+				
 				// And then convert KeyEvent.VK_PERIOD to the string "."
 				text = KeyEvent.getKeyText(keyCode).toUpperCase();
 			}
@@ -1956,10 +2105,10 @@ public class GUIUtilities
 			}
 		}
 		out.append(text);
-
+		
 		return out.toString();
 	} //}}}
-
+	
 	private GUIUtilities() {}
 	//}}}
 
@@ -1971,7 +2120,7 @@ public class GUIUtilities
 	 * For non-Frame's use {@link GUIUtilities#saveGeometry(Window,String)}
 	 *
 	 * @author Björn Kautler
-	 * @version $Id: GUIUtilities.java 21012 2012-01-29 19:08:10Z voituk $
+	 * @version $Id: GUIUtilities.java 21469 2012-03-28 17:33:10Z ezust $
 	 * @since jEdit 4.3pre6
 	 * @see GUIUtilities#saveGeometry(Window,Container,String)
 	 */
diff --git a/org/gjt/sp/jedit/IPropertyManager.java b/org/gjt/sp/jedit/IPropertyManager.java
index e7386c8..693850e 100644
--- a/org/gjt/sp/jedit/IPropertyManager.java
+++ b/org/gjt/sp/jedit/IPropertyManager.java
@@ -24,9 +24,10 @@ package org.gjt.sp.jedit;
 
 
 /**
- * Manage properties.
+ * Interface for class that returns properties.
+ *
  * @author Matthieu Casanova
- * @since 4.3pre13
+ * @since jEdit 4.3
  */
 public interface IPropertyManager
 {
diff --git a/org/gjt/sp/jedit/Macros.java b/org/gjt/sp/jedit/Macros.java
index 2c94c93..a4dd690 100644
--- a/org/gjt/sp/jedit/Macros.java
+++ b/org/gjt/sp/jedit/Macros.java
@@ -34,7 +34,6 @@ import org.gjt.sp.util.StandardUtilities;
 import javax.swing.*;
 import java.awt.*;
 import java.io.File;
-import java.io.Reader;
 import java.util.*;
 import java.util.List;
 import java.util.regex.Pattern;
@@ -59,7 +58,7 @@ import java.util.regex.Pattern;
  * the methods in the {@link GUIUtilities} class instead.
  *
  * @author Slava Pestov
- * @version $Id: Macros.java 19269 2011-01-25 14:27:46Z kpouer $
+ * @version $Id: Macros.java 20414 2011-11-23 17:48:45Z daleanson $
  */
 public class Macros
 {
@@ -149,13 +148,36 @@ file_loop:			for(int i = 0; i < paths.length; i++)
 	 * @param message The message
 	 * @since jEdit 2.7pre2
 	 */
-	public static void message(Component comp, String message)
+	public static void message(final Component comp, final String message)
 	{
-		GUIUtilities.hideSplashScreen();
-
-		JOptionPane.showMessageDialog(comp,message,
-			jEdit.getProperty("macro-message.title"),
-			JOptionPane.INFORMATION_MESSAGE);
+		if (EventQueue.isDispatchThread())
+		{
+			GUIUtilities.hideSplashScreen();
+	
+			JOptionPane.showMessageDialog(comp,message,
+				jEdit.getProperty("macro-message.title"),
+				JOptionPane.INFORMATION_MESSAGE);
+		}
+		else
+		{
+			try
+			{
+				EventQueue.invokeAndWait(new Runnable()
+				{
+					@Override
+					public void run()
+					{
+						message(comp, message);
+					}
+				});
+			}
+			catch (Exception e)
+			{
+				// ignored
+			}
+		}
+		
+		
 	} //}}}
 
 	//{{{ error() method
@@ -166,13 +188,34 @@ file_loop:			for(int i = 0; i < paths.length; i++)
 	 * @param message The message
 	 * @since jEdit 2.7pre2
 	 */
-	public static void error(Component comp, String message)
+	public static void error(final Component comp, final String message)
 	{
-		GUIUtilities.hideSplashScreen();
-
-		JOptionPane.showMessageDialog(comp,message,
-			jEdit.getProperty("macro-message.title"),
-			JOptionPane.ERROR_MESSAGE);
+		if (EventQueue.isDispatchThread())
+		{
+			GUIUtilities.hideSplashScreen();
+	
+			JOptionPane.showMessageDialog(comp,message,
+				jEdit.getProperty("macro-message.title"),
+				JOptionPane.ERROR_MESSAGE);
+		}
+		else
+		{
+			try
+			{
+				EventQueue.invokeAndWait(new Runnable()
+				{
+					@Override
+					public void run()
+					{
+						message(comp, message);
+					}
+				});
+			}
+			catch (Exception e)
+			{
+				// ignored
+			}
+		}
 	} //}}}
 
 	//{{{ input() method
@@ -198,13 +241,33 @@ file_loop:			for(int i = 0; i < paths.length; i++)
 	 * @param prompt The prompt string
 	 * @since jEdit 3.1final
 	 */
-	public static String input(Component comp, String prompt, String defaultValue)
+	public static String input(final Component comp, final String prompt, final String defaultValue)
 	{
-		GUIUtilities.hideSplashScreen();
-
-		return (String)JOptionPane.showInputDialog(comp,prompt,
-			jEdit.getProperty("macro-input.title"),
-			JOptionPane.QUESTION_MESSAGE,null,null,defaultValue);
+		if (EventQueue.isDispatchThread())
+		{
+			GUIUtilities.hideSplashScreen();
+	
+			return (String)JOptionPane.showInputDialog(comp,prompt,
+				jEdit.getProperty("macro-input.title"),
+				JOptionPane.QUESTION_MESSAGE,null,null,defaultValue);
+		}
+		final String[] retValue = new String[1];
+		try
+		{
+			EventQueue.invokeAndWait(new Runnable()
+			{
+				@Override
+				public void run()
+				{
+					retValue[0] = input(comp, prompt, defaultValue);
+				}
+			});
+		}
+		catch (Exception e)
+		{
+			return null;
+		}
+		return retValue[0];
 	} //}}}
 
 	//{{{ confirm() method
@@ -217,13 +280,38 @@ file_loop:			for(int i = 0; i < paths.length; i++)
 	 * JOptionPane.YES_NO_CANCEL_OPTION
 	 * @since jEdit 4.0pre2
 	 */
-	public static int confirm(Component comp, String prompt, int buttons)
+	public static int confirm(final Component comp, final String prompt, final int buttons)
 	{
-		GUIUtilities.hideSplashScreen();
-
-		return JOptionPane.showConfirmDialog(comp,prompt,
-			jEdit.getProperty("macro-confirm.title"),buttons,
-			JOptionPane.QUESTION_MESSAGE);
+		if (EventQueue.isDispatchThread())
+		{
+			GUIUtilities.hideSplashScreen();
+	
+			return JOptionPane.showConfirmDialog(comp,prompt,
+				jEdit.getProperty("macro-confirm.title"),buttons,
+				JOptionPane.QUESTION_MESSAGE);
+			
+		}
+		final int [] retValue = new int[1];
+		try
+		{
+			EventQueue.invokeAndWait(new Runnable()
+			{
+				@Override
+				public void run()
+				{
+					retValue[0] = confirm(comp, prompt, buttons);
+				}
+			});
+		}
+		catch (Exception e)
+		{
+			return JOptionPane.CANCEL_OPTION;
+		}
+		return retValue[0];
+		
+		
+		
+		
 	} //}}}
 
 	//{{{ confirm() method
@@ -237,12 +325,35 @@ file_loop:			for(int i = 0; i < paths.length; i++)
 	 * @param type The dialog type - for example,
 	 * JOptionPane.WARNING_MESSAGE
 	 */
-	public static int confirm(Component comp, String prompt, int buttons, int type)
+	public static int confirm(final Component comp, final String prompt, final int buttons, final int type)
 	{
-		GUIUtilities.hideSplashScreen();
-
-		return JOptionPane.showConfirmDialog(comp,prompt,
-			jEdit.getProperty("macro-confirm.title"),buttons,type);
+		if (EventQueue.isDispatchThread())
+		{
+			GUIUtilities.hideSplashScreen();
+	
+			return JOptionPane.showConfirmDialog(comp,prompt,
+				jEdit.getProperty("macro-confirm.title"),buttons,type);
+		}
+		final int [] retValue = new int[1];
+		try
+		{
+			EventQueue.invokeAndWait(new Runnable()
+			{
+				@Override
+				public void run()
+				{
+					retValue[0] = confirm(comp, prompt, buttons, type);
+				}
+			});
+		}
+		catch (Exception e)
+		{
+			return JOptionPane.CANCEL_OPTION;
+		}
+		return retValue[0];
+		
+		
+		
 	} //}}}
 
 	//{{{ loadMacros() method
diff --git a/org/gjt/sp/jedit/Marker.java b/org/gjt/sp/jedit/Marker.java
index 8e8508b..4af721a 100644
--- a/org/gjt/sp/jedit/Marker.java
+++ b/org/gjt/sp/jedit/Marker.java
@@ -29,14 +29,14 @@ import javax.swing.text.Position;
  * as textual bookmarks.<p>
  *
  * A <code>Marker</code> has three key attributes: the
- * <code>Buffer</code> to which it relates, the line number to which
+ * <code>Buffer</code> to which it relates, the offset to which
  * the marker refers, and an optional shortcut character. The shortcut
- * identifies the the key that can be pressed with the
+ * identifies the key that can be pressed with the
  * <b>Markers</b>><b>Go To Marker</b> command.
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: Marker.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: Marker.java 21778 2012-06-10 01:15:15Z k_satoda $
  */
 public class Marker
 {
@@ -63,6 +63,13 @@ public class Marker
 	//{{{ Package-private members
 
 	//{{{ Marker constructor
+	/**
+	 * <p>After a marker is created using the constructor,
+	 * {@link #createPosition} should be called, to make the marker reflect
+	 * always the same place despite text editions. The position is maintained
+	 * by {@link org.gjt.sp.jedit.buffer.PositionManager} class, which is
+	 * maintained by {@link org.gjt.sp.jedit.buffer.JEditBuffer}.
+	 */
 	Marker(Buffer buffer, char shortcut, int position)
 	{
 		this.buffer = buffer;
diff --git a/org/gjt/sp/jedit/MiscUtilities.java b/org/gjt/sp/jedit/MiscUtilities.java
index 9c2f655..ac6b91a 100644
--- a/org/gjt/sp/jedit/MiscUtilities.java
+++ b/org/gjt/sp/jedit/MiscUtilities.java
@@ -1,11 +1,12 @@
 /*
- * MiscUtilities.java - Various miscallaneous utility functions
+ * MiscUtilities.java - Various miscellaneous utility functions
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
  * Copyright (C) 1999, 2005 Slava Pestov
  * Portions copyright (C) 2000 Richard S. Hall
  * Portions copyright (C) 2001 Dirk Moebius
+ * Portions copyright (c) 2005-2012 by the jEdit All-Volunteer Development Team (tm)
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -37,6 +38,7 @@ import org.gjt.sp.jedit.io.*;
 import org.gjt.sp.util.Log;
 import org.gjt.sp.util.IOUtilities;
 
+import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.jedit.buffer.JEditBuffer;
 //}}}
 
@@ -54,7 +56,7 @@ import org.gjt.sp.jedit.buffer.JEditBuffer;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: MiscUtilities.java 20855 2012-01-19 07:48:56Z kpouer $
+ * @version $Id: MiscUtilities.java 21619 2012-04-30 18:05:30Z jarekczek $
  */
 public class MiscUtilities
 {
@@ -122,7 +124,7 @@ public class MiscUtilities
 	static final Pattern varPattern = Pattern.compile(varPatternString);
 	static final Pattern varPattern2 = Pattern.compile(varPatternString2);
 	static final Pattern winPattern = Pattern.compile(winPatternString);
-	
+
 	/** Accepts a string from the user which may contain variables of various syntaxes.
 	 *  The function supports the following expansion syntaxes:
 	 *     $varname
@@ -131,7 +133,7 @@ public class MiscUtilities
 	 *     And expand each of these by looking at the system environment variables for possible
 	 *     expansions.
 	 *     @return a string which is either the unchanged input string, or one with expanded variables.
-	 *     @since 4.3pre7
+	 *     @since jEdit 4.3
 	 *     @see #abbreviate
 	 *     @author ezust
 	 */
@@ -143,7 +145,7 @@ public class MiscUtilities
 		Matcher m = p.matcher(arg);
 		if (!m.find())
 		{
-			if (OperatingSystem.isWindows()) 
+			if (OperatingSystem.isWindows())
 				p = winPattern;
 			else p = varPattern2;
 			m = p.matcher(arg);
@@ -169,6 +171,7 @@ public class MiscUtilities
 
 	//{{{ abbreviate() method
 	/** @return an abbreviated path, replacing values with variables, if a prefix exists.
+		uses platform convention (%varname% on windows, $varname on other platforms)
 	 *  @see #expandVariables
 	 *  @since jEdit 4.3pre16
 	 */
@@ -191,12 +194,9 @@ public class MiscUtilities
 		if(isURL(path))
 			return path;
 
-		// 2 aug 2003: OS/2 Java has a broken getCanonicalPath()
-		if(OperatingSystem.isOS2())
-			return path;
 		// 18 nov 2003: calling this on a drive letter on Windows causes
 		// drive access
-		if(OperatingSystem.isDOSDerived())
+		if(OperatingSystem.isWindows())
 		{
 			if(path.length() == 2 || path.length() == 3)
 			{
@@ -227,7 +227,7 @@ public class MiscUtilities
 			return true;
 		else if ("-".equals(path))
 			return true;
-		else if(OperatingSystem.isDOSDerived())
+		else if(OperatingSystem.isWindows())
 		{
 			if(path.length() == 2 && path.charAt(1) == ':')
 				return true;
@@ -271,7 +271,7 @@ public class MiscUtilities
 
 		// have to handle this case specially on windows.
 		// insert \ between, eg A: and myfile.txt.
-		if(OperatingSystem.isDOSDerived())
+		if(OperatingSystem.isWindows())
 		{
 			if(path.length() == 2 && path.charAt(1) == ':')
 				return path;
@@ -306,7 +306,7 @@ public class MiscUtilities
 		if(path.length() == 0)
 			return parent;
 
-		if(OperatingSystem.isDOSDerived()
+		if(OperatingSystem.isWindows()
 			&& !isURL(parent)
 		&& path.charAt(0) == '\\')
 			parent = parent.substring(0,2);
@@ -397,9 +397,15 @@ public class MiscUtilities
 
 	//{{{ getFileExtension() method
 	/**
-	 * Returns the extension of the specified filename, or an empty
-	 * string if there is none.
+	 * Returns the extension of the specified filename, starting with the last dot.
 	 * @param path The path
+	 * @return the last dot (.) and the text that follows, or an empty
+	 * string if no dots are found.
+	 * i.e. if your filename is
+	 *    IP-192.168.1.1-data.tar.gz
+	 * it will return
+	 *    .gz
+	 * @see #getCompleteBaseName(String)
 	 */
 	public static String getFileExtension(String path)
 	{
@@ -423,14 +429,39 @@ public class MiscUtilities
 		return VFSManager.getVFSForPath(path).getFileName(path);
 	} //}}}
 
-	//{{{ getFileNameNoExtension() method
+	//{{{ getCompleteBaseName() method
 	/**
-	 * Returns the last component of the specified path name without the
-	 * trailing extension (if there is one).
-	 * @param path The path name
-	 * @since jEdit 4.0pre8
+	 * @return the complete basename of a fileName (before the last period).
+	 * i.e. if your filename is
+	 *    /net/log/IP-192.168.1.1-data.tar.gz
+	 * it will return
+	 *    IP-192.168.1.1-data.tar
+	 * @param path the path name
+	 * @see #getBaseName(String) getBaseName
+	 * @see #getFileExtension(String) getFileExtension
+	 * @since jEdit 5.0
 	 */
-	public static String getFileNameNoExtension(String path)
+	public static String getCompleteBaseName(String path)
+	{
+		String name = getFileName(path);
+		int index = name.lastIndexOf('.');
+		if (index == -1)
+			return name;
+		return name.substring(0, index);
+	} //}}}
+
+	//{{{ getBaseName() method
+	/**
+	 * @return the base name of a fileName (before the first period).
+	 * i.e. If your filename is
+	 *     /net/log/IP-192.168.1.1-data.tar.gz
+	 * it will return
+	 *     IP-192
+	 * @param path The path name
+	 * @since jEdit 5.0
+	 * @see #getCompleteBaseName(String)
+	*/
+	public static String getBaseName(String path)
 	{
 		String name = getFileName(path);
 		int index = name.indexOf('.');
@@ -438,6 +469,16 @@ public class MiscUtilities
 			return name;
 		else
 			return name.substring(0,index);
+	}
+	/**
+	  @return the same thing as getBaseName()
+	  @deprecated use getBaseName() instead.
+	  @since jEdit 4.0
+	*/
+	@Deprecated
+	public static String getFileNameNoExtension(String path)
+	{
+		return getBaseName(path);
 	} //}}}
 
 	//{{{ getParentOfPath() method
@@ -496,8 +537,184 @@ public class MiscUtilities
 		}
 	} //}}}
 
+	//{{{ getNthBackupFile method
+	/**
+	 * Gets the file to store the Nth backup of the given file.
+	 * @param name The last part of the filename of the file being
+	 *             backed up.
+	 * @param backup The number of the current backup.
+	 * @param backups Total number of backup copies.
+	 * @since 5.0pre1
+	 */
+	public static File getNthBackupFile(String name, int backup, 
+			int backups, String backupPrefix,
+			String backupSuffix, String backupDirectory)
+	{
+		File backupFile;
+		if(backupPrefix == null)
+			backupPrefix = "";
+		if(backupSuffix == null)
+			backupSuffix = "";
+		if(backups <= 1)
+		{
+			backupFile = new File(backupDirectory,
+				backupPrefix + name + backupSuffix);
+		}
+		else
+		{
+			backupFile = new File(backupDirectory,
+				backupPrefix + name + backupSuffix
+				+ backup + backupSuffix);
+		}
+		return backupFile;
+	} //}}}
+	
+	//{{{ prepareBackupDirectory method
+	/**
+	 * Prepares the directory to backup the specified file.
+	 * jedit property is used to determine the directory.
+	 * It is created if not exists.
+	 * @return Backup directory, never <code>null</code>.
+	 * @since 5.0pre1
+	 */
+	public static File prepareBackupDirectory(File file)
+	{
+		String backupDirectory = jEdit.getProperty("backup.directory");
+		File dir;
+
+		// Check for backup.directory, and create that
+		// directory if it doesn't exist
+		if(backupDirectory == null || backupDirectory.length() == 0)
+		{
+			backupDirectory = file.getParent();
+			dir = new File(backupDirectory);
+		}
+		else
+		{
+			backupDirectory = MiscUtilities.constructPath(
+				System.getProperty("user.home"), backupDirectory);
+
+			// Perhaps here we would want to guard with
+			// a property for parallel backups or not.
+			backupDirectory = MiscUtilities.concatPath(
+				backupDirectory,file.getParent());
+
+			dir = new File(backupDirectory);
+
+			if (!dir.exists())
+				dir.mkdirs();
+		}
+
+		return dir;
+	} //}}}
+
+	//{{{ prepareBackupFile methods
+	/**
+	 * Prepares the filename for performing backup of the given file.
+	 * In case of multiple backups does necessary backup renumbering.
+	 * Checks whether the last backup was not earlier than
+	 * <code>backup.minTime</code> (property) ms ago.
+	 * Uses jedit properties to determine backup parameters,
+	 * like prefix, suffix.
+	 * @param file The file to back up.
+	 * @param backupDir The directory, usually obtained from
+	 *                  <code>prepareBackupDirectory</code>.
+	 * @return File suitable for backup of <code>file</code>,
+	           or <code>null</code> if the last backup was
+	           less than <code>backup.minTime</code> ms ago.
+	 * @since 5.0pre1
+	 */
+	public static File prepareBackupFile(File file, File backupDir)
+	{
+		// read properties
+		int backups = jEdit.getIntegerProperty("backups",1);
+		String backupPrefix = jEdit.getProperty("backup.prefix");
+		String backupSuffix = jEdit.getProperty("backup.suffix");
+		int backupTimeDistance = jEdit.getIntegerProperty("backup.minTime",0);
+
+		return prepareBackupFile(file, backups, backupPrefix,
+				backupSuffix, backupDir.getPath(),
+				backupTimeDistance);
+	}
+	
+	/**
+	 * Prepares the filename for performing backup of the given file.
+	 * In case of multiple backups does necessary backup renumbering.
+	 * Checks whether the last backup was not earlier than
+	 * <code>backupTimeDistance</code> ms ago.
+	 * @param file The file to back up.
+	 * @param backups The number of backups. Must be >= 1. If > 1, backup
+	 * files will be numbered.
+	 * @param backupDirectory The directory determined externally or
+	 * obtained from <code>prepareBackupDirectory</code>.
+	 * @return File suitable for backup of <code>file</code>,
+	           or <code>null</code> if the last backup was
+	           less than <code>backupTimeDistance</code> ms ago.
+	 * @since 5.0pre1
+	 */
+	public static File prepareBackupFile(File file, int backups,
+		 String backupPrefix, String backupSuffix,
+		 String backupDirectory, int backupTimeDistance)
+	{
+		String name = file.getName();
+		File backupFile = getNthBackupFile(name, 1, backups,
+				backupPrefix, backupSuffix,
+				backupDirectory);
+
+		long modTime = backupFile.lastModified();
+		/* if backup file was created less than
+		* 'backupTimeDistance' ago, we do not
+		* create the backup */
+		if(System.currentTimeMillis() - modTime
+			< backupTimeDistance)
+		{
+			Log.log(Log.DEBUG,MiscUtilities.class,
+				"Backup not done because of backup.minTime");
+			return null;
+		}
+
+		File lastBackup = getNthBackupFile(name, backups, backups,
+				backupPrefix, backupSuffix,
+				backupDirectory);
+		lastBackup.delete();
+
+		if(backups > 1)
+		{
+			for(int i = backups - 1; i > 0; i--)
+			{
+				File backup1 = getNthBackupFile(name, i,
+					backups, backupPrefix,
+					backupSuffix, backupDirectory);
+				File backup2 = getNthBackupFile(name, i+1,
+					backups, backupPrefix,
+					backupSuffix, backupDirectory);
+				
+				backup1.renameTo(backup2);
+			}
+			
+		}
+		return backupFile;
+	} //}}}
+
 	//{{{ saveBackup() methods
 	/**
+	 * Saves a backup (optionally numbered) of a file. Reads 
+	 * jedit properties to determine backup parameters, like
+	 * prefix, suffix, directory.
+	 * <p>This version calls
+	 * <code>prepareBackupDirectory</code>.
+	 * @param file A local file
+	 * @since jEdit 5.0pre1
+	 */
+	public static void saveBackup(File file)
+	{
+		File backupDir = prepareBackupDirectory(file);
+		File backupFile = prepareBackupFile(file, backupDir);
+		if (backupFile != null)
+			saveBackup(file, backupFile);
+	}
+
+	/**
 	 * Saves a backup (optionally numbered) of a file.
 	 * @param file A local file
 	 * @param backups The number of backups. Must be >= 1. If > 1, backup
@@ -516,7 +733,8 @@ public class MiscUtilities
 	}
 
 	/**
-	 * Saves a backup (optionally numbered) of a file.
+	 * Saves a backup (optionally numbered) of a file. Requires
+	 * specifying the backup directory and generates the backup filename.
 	 * @param file A local file
 	 * @param backups The number of backups. Must be >= 1. If > 1, backup
 	 * files will be numbered.
@@ -533,77 +751,32 @@ public class MiscUtilities
 			       String backupPrefix, String backupSuffix,
 			       String backupDirectory, int backupTimeDistance)
 	{
-		if(backupPrefix == null)
-			backupPrefix = "";
-		if(backupSuffix == null)
-			backupSuffix = "";
+		File backupFile = prepareBackupFile(file, backups,
+				backupPrefix, backupSuffix,
+				backupDirectory, backupTimeDistance);
+		if (backupFile == null)
+			return;
 
-		String name = file.getName();
-
-		// If backups is 1, create ~ file
-		if(backups == 1)
-		{
-			File backupFile = new File(backupDirectory,
-				backupPrefix + name + backupSuffix);
-			long modTime = backupFile.lastModified();
-			/* if backup file was created less than
-			 * 'backupTimeDistance' ago, we do not
-			 * create the backup */
-			if(System.currentTimeMillis() - modTime
-			   >= backupTimeDistance)
-			{
-				Log.log(Log.DEBUG,MiscUtilities.class,
-					"Saving backup of file \"" +
-					file.getAbsolutePath() + "\" to \"" +
-					backupFile.getAbsolutePath() + '"');
-				backupFile.delete();
-				if (!file.renameTo(backupFile))
-					IOUtilities.moveFile(file, backupFile);
-			}
-		}
-		// If backups > 1, move old ~n~ files, create ~1~ file
-		else
-		{
-			/* delete a backup created using above method */
-			new File(backupDirectory,
-				backupPrefix + name + backupSuffix
-				+ backups + backupSuffix).delete();
-
-			File firstBackup = new File(backupDirectory,
-				backupPrefix + name + backupSuffix
-				+ '1' + backupSuffix);
-			long modTime = firstBackup.lastModified();
-			/* if backup file was created less than
-			 * 'backupTimeDistance' ago, we do not
-			 * create the backup */
-			if(System.currentTimeMillis() - modTime
-			   >= backupTimeDistance)
-			{
-				for(int i = backups - 1; i > 0; i--)
-				{
-					File backup = new File(backupDirectory,
-						backupPrefix + name
-						+ backupSuffix + i
-						+ backupSuffix);
-
-					backup.renameTo(new File(backupDirectory,
-						backupPrefix + name
-						+ backupSuffix + (i + 1)
-						+ backupSuffix));
-				}
+		saveBackup(file, backupFile);
+	}
 
-				File backupFile = new File(backupDirectory,
-					backupPrefix + name + backupSuffix
-					+ '1' + backupSuffix);
-				Log.log(Log.DEBUG,MiscUtilities.class,
-					"Saving backup of file \"" +
-					file.getAbsolutePath() + "\" to \"" +
-					backupFile.getAbsolutePath() + '"');
-				if (!file.renameTo(backupFile))
-					IOUtilities.moveFile(file, backupFile);
-			}
-		}
-	} //}}}
+	/**
+	 * Saves a backup of a local file. Requires
+	 * specifying source and destination files.
+	 * @param file A local file
+	 * @param backupFile A local backup file.
+	 * @since jEdit 5.0pre1
+	 */
+	public static void saveBackup(File file, File backupFile)
+	{
+		Log.log(Log.DEBUG,MiscUtilities.class,
+			"Saving backup of file \"" +
+			file.getAbsolutePath() + "\" to \"" +
+			backupFile.getAbsolutePath() + '"');
+		if (!file.renameTo(backupFile))
+			IOUtilities.moveFile(file, backupFile);
+	}
+	//}}}
 
 	//{{{ isBinary() methods
 	/**
@@ -916,12 +1089,11 @@ loop:		for(;;)
 		int minor = Integer.parseInt(build.substring(3,5));
 		// Then the pre-release status
 		int beta = Integer.parseInt(build.substring(6,8));
-		// Finally the bug fix release
-		int bugfix = Integer.parseInt(build.substring(9,11));
+		// Finally the micro version number
+		int micro = Integer.parseInt(build.substring(9,11));
 
 		return major + "." + minor
-			+ (beta != 99 ? "pre" + beta :
-			(bugfix != 0 ? "." + bugfix : ""));
+			+ (beta != 99 ? "pre" + beta : "." + micro);
 	} //}}}
 
 	//{{{ isToolsJarAvailable() method
@@ -1093,7 +1265,7 @@ loop:		for(;;)
 	//{{{ getEncodings() methods
 	/**
 	 * Returns a list of supported character encodings.
-	 * @since jEdit 4.3pre5
+	 * @since jEdit 4.3
 	 * @param getSelected Whether to return just the selected encodings or all.
 	 */
 	public static String[] getEncodings(boolean getSelected)
@@ -1146,7 +1318,7 @@ loop:		for(;;)
 	{
 		if(path.startsWith("/"))
 			return 0;
-		else if(OperatingSystem.isDOSDerived()
+		else if(OperatingSystem.isWindows()
 			&& path.length() >= 3
 			&& path.charAt(1) == ':'
 			&& (path.charAt(2) == '/'
diff --git a/org/gjt/sp/jedit/Mode.java b/org/gjt/sp/jedit/Mode.java
index 0a54588..1badd3c 100644
--- a/org/gjt/sp/jedit/Mode.java
+++ b/org/gjt/sp/jedit/Mode.java
@@ -47,7 +47,7 @@ import org.gjt.sp.util.StandardUtilities;
  * One instance of this class is created for each supported edit mode.
  *
  * @author Slava Pestov
- * @version $Id: Mode.java 20007 2011-09-24 00:49:35Z Vampire0 $
+ * @version $Id: Mode.java 21723 2012-05-27 14:34:13Z k_satoda $
  */
 public class Mode
 {
@@ -77,7 +77,7 @@ public class Mode
 		{
 			filepathRE = null;
 			String filenameGlob = (String)getProperty("filenameGlob");
-			if(filenameGlob != null && filenameGlob.length() != 0)
+			if(filenameGlob != null && !filenameGlob.isEmpty())
 			{
 				// translate glob to regex
 				String filepathRE = StandardUtilities.globToRE(filenameGlob);
@@ -98,7 +98,7 @@ public class Mode
 
 			firstlineRE = null;
 			String firstlineGlob = (String)getProperty("firstlineGlob");
-			if(firstlineGlob != null && firstlineGlob.length() != 0)
+			if(firstlineGlob != null && !firstlineGlob.isEmpty())
 			{
 				firstlineRE = Pattern.compile(StandardUtilities.globToRE(firstlineGlob),
 							      Pattern.CASE_INSENSITIVE);
@@ -365,6 +365,7 @@ public class Mode
 
 	//{{{ Indent rules
 
+	//{{{ getIndentRules() method
 	public synchronized List<IndentRule> getIndentRules()
 	{
 		if (indentRules == null)
@@ -372,8 +373,9 @@ public class Mode
 			initIndentRules();
 		}
 		return indentRules;
-	}
+	} //}}}
 
+	//{{{ isElectricKey() method
 	public synchronized boolean isElectricKey(char ch)
 	{
 		if (electricKeys == null)
@@ -396,8 +398,9 @@ public class Mode
 		}
 
 		return (electricKeys.indexOf(ch) >= 0);
-	}
+	} //}}}
 
+	//{{{ initIndentRules() method
 	private void initIndentRules()
 	{
 		List<IndentRule> rules = new LinkedList<IndentRule>();
@@ -457,8 +460,9 @@ public class Mode
 			rules.add(new WhitespaceRule());
 
 		indentRules = Collections.unmodifiableList(rules);
-	}
+	} //}}}
 
+	//{{{ createRegexpIndentRule() method
 	private IndentRule createRegexpIndentRule(String prop)
 	{
 		String value = (String) getProperty(prop);
@@ -480,8 +484,9 @@ public class Mode
 		}
 
 		return null;
-	}
+	} //}}}
 
+	//{{{ createBracketIndentRules() method
 	private void createBracketIndentRules(String prop,
 						List<IndentRule> rules)
 	{
@@ -507,7 +512,7 @@ public class Mode
 				+ '=' + value + ':');
 			Log.log(Log.ERROR,this,e);
 		}
-	}
+	} //}}}
 
 	//}}}
 
diff --git a/org/gjt/sp/jedit/OperatingSystem.java b/org/gjt/sp/jedit/OperatingSystem.java
index 2adc3c5..d72c9f3 100644
--- a/org/gjt/sp/jedit/OperatingSystem.java
+++ b/org/gjt/sp/jedit/OperatingSystem.java
@@ -37,7 +37,7 @@ import org.gjt.sp.util.Log;
 /**
  * Operating system detection routines.
  * @author Slava Pestov
- * @version $Id: OperatingSystem.java 18919 2010-11-04 10:52:55Z kpouer $
+ * @version $Id: OperatingSystem.java 20631 2011-12-12 23:35:36Z kpouer $
  * @since jEdit 4.0pre4
  */
 public class OperatingSystem
@@ -152,16 +152,18 @@ public class OperatingSystem
 
 	//{{{ isDOSDerived() method
 	/**
-	 * Returns if we're running Windows 95/98/ME/NT/2000/XP, or OS/2.
+	 * Returns if we're running Windows 95/98/ME/NT/2000/XP/Vista/Win7.
+	 * @deprecated use {@link #isWindows()}
 	 */
+	@Deprecated
 	public static boolean isDOSDerived()
 	{
-		return isWindows() || isOS2();
+		return isWindows();
 	} //}}}
 
 	//{{{ isWindows() method
 	/**
-	 * Returns if we're running Windows 95/98/ME/NT/2000/XP.
+	 * Returns if we're running Windows 95/98/ME/NT/2000/XP/Vista/Win7.
 	 */
 	public static boolean isWindows()
 	{
@@ -179,22 +181,13 @@ public class OperatingSystem
 
 	//{{{ isWindowsNT() method
 	/**
-	 * Returns if we're running Windows NT/2000/XP.
+	 * Returns if we're running Windows NT/2000/XP/Vista/Win7.
 	 */
 	public static boolean isWindowsNT()
 	{
 		return os == WINDOWS_NT;
 	} //}}}
 
-	//{{{ isOS2() method
-	/**
-	 * Returns if we're running OS/2.
-	 */
-	public static boolean isOS2()
-	{
-		return os == OS2;
-	} //}}}
-
 	//{{{ isUnix() method
 	/**
 	 * Returns if we're running Unix (this includes MacOS X).
@@ -264,34 +257,46 @@ public class OperatingSystem
 
 	//{{{ hasJava16() method
 	/**
-	 * Returns if Java 2 version 1.6 is in use.
+	 * Returns true always 
 	 * @since jEdit 4.3pre17
+	 * @deprecated obsolete, since we depend on Java 1.6 now
 	 */
+	@Deprecated
 	public static boolean hasJava16()
 	{
-		return java16;
+		return true;
 	} //}}}
 
+	//{{{ hasJava17() method
+	/**
+	 * Returns if Java 2 version 1.7 is in use.
+	 * @since jEdit 5.0pre1
+	 */
+	public static boolean hasJava17()
+	{
+		return java17;
+	} //}}}
+
+	
 	//{{{ isCaseInsensitiveFS() method
 	/**
 	 * @since jEdit 4.3pre2
 	 */
 	public static boolean isCaseInsensitiveFS()
 	{
-		return isDOSDerived() || isMacOS();
+		return isWindows() || isMacOS();
 	} //}}}
 	
 	//{{{ Private members
 	private static final int UNIX = 0x31337;
 	private static final int WINDOWS_9x = 0x640;
 	private static final int WINDOWS_NT = 0x666;
-	private static final int OS2 = 0xDEAD;
 	private static final int MAC_OS_X = 0xABC;
 	private static final int VMS = 0xDEAD2;
 	private static final int UNKNOWN = 0xBAD;
 
 	private static int os;
-	private static boolean java16;
+	private static boolean java17;
 	private static int hasScreenMenuBar = -1;
 
 	//{{{ Class initializer
@@ -313,10 +318,6 @@ public class OperatingSystem
 			{
 				os = WINDOWS_NT;
 			}
-			else if(osName.contains("OS/2"))
-			{
-				os = OS2;
-			}
 			else if(osName.contains("VMS"))
 			{
 				os = VMS;
@@ -336,11 +337,11 @@ public class OperatingSystem
 		// for debugging, make jEdit think its using a different
 		// version of Java than it really is.
 		String javaVersion = System.getProperty("jedit.force.java.version");
-		if(javaVersion == null || javaVersion.length() == 0)
+		if(javaVersion == null || javaVersion.isEmpty())
 			javaVersion = System.getProperty("java.version");
-		if(javaVersion == null || javaVersion.length() == 0)
+		if(javaVersion == null || javaVersion.isEmpty())
 			javaVersion = System.getProperty("java.runtime.version");
-		java16 = javaVersion.compareTo("1.6") >= 0;
+		java17 = javaVersion.compareTo("1.7") >= 0;
 	} //}}}
 
 	//}}}
diff --git a/org/gjt/sp/jedit/PerspectiveManager.java b/org/gjt/sp/jedit/PerspectiveManager.java
index 662ec01..4cfebbd 100644
--- a/org/gjt/sp/jedit/PerspectiveManager.java
+++ b/org/gjt/sp/jedit/PerspectiveManager.java
@@ -36,11 +36,10 @@ import org.xml.sax.Attributes;
 import org.xml.sax.InputSource;
 import org.xml.sax.helpers.DefaultHandler;
 
-/**
- * Manages persistence of open buffers and views across jEdit sessions.
+/** Manages persistence of open buffers and views across jEdit sessions.
  * @since jEdit 4.2pre1
  * @author Slava Pestov
- * @version $Id: PerspectiveManager.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: PerspectiveManager.java 21398 2012-03-20 04:32:13Z ezust $
  */
 public class PerspectiveManager
 {
diff --git a/org/gjt/sp/jedit/PluginJAR.java b/org/gjt/sp/jedit/PluginJAR.java
index c0d2878..34b876a 100644
--- a/org/gjt/sp/jedit/PluginJAR.java
+++ b/org/gjt/sp/jedit/PluginJAR.java
@@ -23,6 +23,7 @@
 package org.gjt.sp.jedit;
 
 //{{{ Imports
+import java.awt.EventQueue;
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
 import java.io.DataInputStream;
@@ -35,7 +36,10 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Modifier;
 import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.Enumeration;
+import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
@@ -43,6 +47,8 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.Set;
 import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
@@ -52,7 +58,9 @@ import org.gjt.sp.jedit.browser.VFSBrowser;
 import org.gjt.sp.jedit.buffer.DummyFoldHandler;
 import org.gjt.sp.jedit.buffer.FoldHandler;
 import org.gjt.sp.jedit.gui.DockableWindowFactory;
+import org.gjt.sp.jedit.gui.DockableWindowManager;
 import org.gjt.sp.jedit.msg.PluginUpdate;
+import org.gjt.sp.jedit.msg.PropertiesChanged;
 import org.gjt.sp.util.Log;
 import org.gjt.sp.util.StandardUtilities;
 import org.gjt.sp.util.IOUtilities;
@@ -77,12 +85,12 @@ import static org.gjt.sp.jedit.EditBus.EBHandler;
  * syntax.</li>
  * <li>A file named <code>dockables.xml</code> defining dockable windows.
  * Only one such file per plugin is allowed. See {@link
- * org.gjt.sp.jedit.gui.DockableWindowManager} for
+ * DockableWindowManager} for
  * syntax.</li>
  * <li>A file named <code>services.xml</code> defining additional services
  * offered by the plugin, such as virtual file systems.
  * Only one such file per plugin is allowed. See {@link
- * org.gjt.sp.jedit.ServiceManager} for
+ * ServiceManager} for
  * syntax.</li>
  * <li>File with extension <code>.props</code> containing name/value pairs
  * separated by an equals sign.
@@ -91,6 +99,14 @@ import static org.gjt.sp.jedit.EditBus.EBHandler;
  * settings and strings used by the plugin. See {@link EditPlugin} for
  * information about properties used by jEdit. See
  * <code>java.util.Properties</code> for property file syntax.</li>
+ * <li>Since jEdit 5.0, files named lang_[language_iso_code].properties are
+ * localization files. If one of those files match the current language, jEdit
+ * will load it. If a label is missing in the localization file, it will be
+ * loaded from the other .props files.
+ * Those files will be ignored by jEdit's versions older than 5.0 and do not
+ * cause any problem
+ * See <a href="http://sourceforge.net/apps/mediawiki/jedit/index.php?title=Localization">
+ *         jEdit's localization wiki</a>
  * </ul>
  *
  * For a plugin to actually do something once it is resident in memory,
@@ -109,21 +125,21 @@ import static org.gjt.sp.jedit.EditBus.EBHandler;
  * {@link EditPlugin#start()} for a full description.
  *
  *
- * @see org.gjt.sp.jedit.jEdit#getProperty(String)
- * @see org.gjt.sp.jedit.jEdit#getPlugin(String)
- * @see org.gjt.sp.jedit.jEdit#getPlugins()
- * @see org.gjt.sp.jedit.jEdit#getPluginJAR(String)
- * @see org.gjt.sp.jedit.jEdit#getPluginJARs()
- * @see org.gjt.sp.jedit.jEdit#addPluginJAR(String)
- * @see org.gjt.sp.jedit.jEdit#removePluginJAR(PluginJAR,boolean)
- * @see org.gjt.sp.jedit.ActionSet
- * @see org.gjt.sp.jedit.gui.DockableWindowManager
- * @see org.gjt.sp.jedit.OptionPane
- * @see org.gjt.sp.jedit.PluginJAR
- * @see org.gjt.sp.jedit.ServiceManager
+ * @see jEdit#getProperty(String)
+ * @see jEdit#getPlugin(String)
+ * @see jEdit#getPlugins()
+ * @see jEdit#getPluginJAR(String)
+ * @see jEdit#getPluginJARs()
+ * @see jEdit#addPluginJAR(String)
+ * @see jEdit#removePluginJAR(PluginJAR,boolean)
+ * @see ActionSet
+ * @see DockableWindowManager
+ * @see OptionPane
+ * @see PluginJAR
+ * @see ServiceManager
  *
  * @author Slava Pestov
- * @version $Id: PluginJAR.java 21669 2012-05-13 20:40:12Z ezust $
+ * @version $Id: PluginJAR.java 21554 2012-04-03 14:34:47Z kpouer $
  * @since jEdit 4.2pre1
  */
 public class PluginJAR
@@ -136,6 +152,7 @@ public class PluginJAR
 	private final JARClassLoader classLoader;
 	private ZipFile zipFile;
 	private Properties properties;
+	private Map<String, Properties> localizationProperties;
 	/**
 	 * The class list contained in this jar.
 	 */
@@ -174,6 +191,8 @@ public class PluginJAR
 		}
 		jEdit.addPluginJAR(path);
 		jar = jEdit.getPluginJAR(path);
+		if (jar == null)
+			return null;
 		EditPlugin plugin = jar.getPlugin();
 		if (plugin == null)
 		{
@@ -324,7 +343,7 @@ public class PluginJAR
 				continue;
 			}
 
-			if(pluginDepends.what.equals("plugin"))
+			if("plugin".equals(pluginDepends.what))
 			{
 				int index2 = pluginDepends.arg.indexOf(' ');
 				if ( index2 == -1)
@@ -397,7 +416,7 @@ public class PluginJAR
 	/**
 	 * Returns the plugin's action set for the file system browser action
 	 * context {@link
-	 * org.gjt.sp.jedit.browser.VFSBrowser#getActionContext()}.
+	 * VFSBrowser#getActionContext()}.
 	 * These actions are loaded from
 	 * the <code>browser.actions.xml</code> file; see {@link ActionSet}.
 	 *.
@@ -440,7 +459,7 @@ public class PluginJAR
 				continue;
 			}
 
-			if(pluginDepends.what.equals("jdk"))
+			if("jdk".equals(pluginDepends.what))
 			{
 				if(!pluginDepends.optional && StandardUtilities.compareStrings(
 					System.getProperty("java.version"),
@@ -452,7 +471,7 @@ public class PluginJAR
 					ok = false;
 				}
 			}
-			else if(pluginDepends.what.equals("jedit"))
+			else if("jedit".equals(pluginDepends.what))
 			{
 				if(pluginDepends.arg.length() != 11)
 				{
@@ -472,7 +491,7 @@ public class PluginJAR
 					ok = false;
 				}
 			}
-			else if(pluginDepends.what.equals("plugin"))
+			else if("plugin".equals(pluginDepends.what))
 			{
 				int index2 = pluginDepends.arg.indexOf(' ');
 				if(index2 == -1)
@@ -537,7 +556,7 @@ public class PluginJAR
 					}
 				}
 			}
-			else if(pluginDepends.what.equals("class"))
+			else if("class".equals(pluginDepends.what))
 			{
 				if(!pluginDepends.optional)
 				{
@@ -1023,12 +1042,13 @@ public class PluginJAR
 	} //}}}
 
 	//{{{ init() method
-	void init()
+	boolean init()
 	{
 		PluginCacheEntry cache = getPluginCache(this);
 		if(cache != null)
 		{
-			loadCache(cache);
+			if (!loadCache(cache))
+				return false;
 			classLoader.activate();
 		}
 		else
@@ -1041,6 +1061,10 @@ public class PluginJAR
 					setPluginCache(this,cache);
 					classLoader.activate();
 				}
+				else
+				{
+					return false;
+				}
 			}
 			catch(IOException io)
 			{
@@ -1054,6 +1078,7 @@ public class PluginJAR
 				uninit(false);
 			}
 		}
+		return true;
 	} //}}}
 
 	//{{{ uninit() method
@@ -1090,7 +1115,14 @@ public class PluginJAR
 			ServiceManager.unloadServices(this);
 
 			jEdit.removePluginProps(properties);
-
+			if (localizationProperties != null)
+			{
+				Collection<Properties> values = localizationProperties.values();
+				for (Properties value : values)
+				{
+					jEdit.removePluginProps(value);
+				}
+			}
 			try
 			{
 				if(zipFile != null)
@@ -1131,11 +1163,41 @@ public class PluginJAR
 	} //}}}
 
 	//{{{ loadCache() method
-	private void loadCache(PluginCacheEntry cache)
+	private boolean loadCache(PluginCacheEntry cache)
 	{
+		// Check if a plugin with the same name
+		// is already loaded
+		if(cache.pluginClass != null)
+		{
+			// Check if a plugin with the same name
+			// is already loaded
+			if (!continueLoading(cache.pluginClass, cache.cachedProperties))
+			{
+				return false;
+			}
+			else
+			{
+				EditPlugin otherPlugin = jEdit.getPlugin(cache.pluginClass);
+				if (otherPlugin != null)
+					jEdit.removePluginJAR(otherPlugin.getPluginJAR(), false);
+			}
+		}
+
 		classes = cache.classes;
 		resources = cache.resources;
 
+		// this must be done before loading cachedProperties
+		if (cache.localizationProperties != null)
+		{
+			localizationProperties = cache.localizationProperties;
+			String currentLanguage = jEdit.getCurrentLanguage();
+			Properties langProperties = localizationProperties.get(currentLanguage);
+			if (langProperties != null)
+			{
+				jEdit.addPluginProps(langProperties);
+			}
+		}
+
 		/* this should be before dockables are initialized */
 		if(cache.cachedProperties != null)
 		{
@@ -1199,37 +1261,28 @@ public class PluginJAR
 
 		if(cache.pluginClass != null)
 		{
-			// Check if a plugin with the same name
-			// is already loaded
-			if(jEdit.getPlugin(cache.pluginClass) != null)
-			{
-				jEdit.pluginError(path, "plugin-error.already-loaded",
-					null);
-				uninit(false);
-			}
-			else
-			{
-				String label = jEdit.getProperty(
-					"plugin." + cache.pluginClass
-					+ ".name");
-				actions.setLabel(jEdit.getProperty(
-					"action-set.plugin",
-					new String[] { label }));
-				plugin = new EditPlugin.Deferred(this,
-					cache.pluginClass);
-			}
+			String label = jEdit.getProperty(
+				"plugin." + cache.pluginClass
+				+ ".name");
+			actions.setLabel(jEdit.getProperty(
+				"action-set.plugin",
+				new String[] { label }));
+			plugin = new EditPlugin.Deferred(this,
+				cache.pluginClass);
 		}
 		else
 		{
 			if(actions.size() != 0)
 				actionsPresentButNotCoreClass();
 		}
+		return true;
 	} //}}}
 
 	//{{{ generateCache() method
 	public PluginCacheEntry generateCache() throws IOException
 	{
 		properties = new Properties();
+		localizationProperties = new HashMap<String, Properties>();
 
 		List<String> classes = new LinkedList<String>();
 		List<String> resources = new LinkedList<String>();
@@ -1240,37 +1293,45 @@ public class PluginJAR
 
 		PluginCacheEntry cache = new PluginCacheEntry();
 		cache.modTime = file.lastModified();
-		cache.cachedProperties = new Properties();
 
 		Enumeration<? extends ZipEntry> entries = zipFile.entries();
+		Pattern languageFilePattern = Pattern.compile("lang_(\\w+).properties");
+
 		while(entries.hasMoreElements())
 		{
 			ZipEntry entry = entries.nextElement();
 			String name = entry.getName();
 			String lname = name.toLowerCase();
-			if(lname.equals("actions.xml"))
+			if("actions.xml".equals(lname))
 			{
 				cache.actionsURI = classLoader.getResource(name);
 			}
-			else if(lname.equals("browser.actions.xml"))
+			else if("browser.actions.xml".equals(lname))
 			{
 				cache.browserActionsURI = classLoader.getResource(name);
 			}
-			else if(lname.equals("dockables.xml"))
+			else if("dockables.xml".equals(lname))
 			{
 				dockablesURI = classLoader.getResource(name);
 				cache.dockablesURI = dockablesURI;
 			}
-			else if(lname.equals("services.xml"))
+			else if("services.xml".equals(lname))
 			{
 				servicesURI = classLoader.getResource(name);
 				cache.servicesURI = servicesURI;
 			}
 			else if(lname.endsWith(".props"))
 			{
-				InputStream in = classLoader.getResourceAsStream(name);
-				properties.load(in);
-				in.close();
+				InputStream in = null;
+				try
+				{
+					in = classLoader.getResourceAsStream(name);
+					properties.load(in);
+				}
+				finally
+				{
+					IOUtilities.closeQuietly(in);
+				}
 			}
 			else if(name.endsWith(".class"))
 			{
@@ -1284,11 +1345,43 @@ public class PluginJAR
 			}
 			else
 			{
-				resources.add(name);
+				Matcher matcher = languageFilePattern.matcher(lname);
+				if (matcher.matches())
+				{
+					String languageName = matcher.group(1);
+					Properties props = new Properties();
+					InputStream in = null;
+					try
+					{
+						in = classLoader.getResourceAsStream(name);
+						props.load(in);
+						localizationProperties.put(languageName, props);
+					}
+					finally
+					{
+						IOUtilities.closeQuietly(in);
+					}
+				}
+				else
+					resources.add(name);
 			}
 		}
 
 		cache.cachedProperties = properties;
+		cache.localizationProperties = localizationProperties;
+
+		// this must be done before loading cachedProperties
+		if (cache.localizationProperties != null)
+		{
+			localizationProperties = cache.localizationProperties;
+			String currentLanguage = jEdit.getCurrentLanguage();
+			Properties langProperties = localizationProperties.get(currentLanguage);
+			if (langProperties != null)
+			{
+				jEdit.addPluginProps(langProperties);
+			}
+		}
+
 		jEdit.addPluginProps(properties);
 
 		this.classes = cache.classes =
@@ -1317,12 +1410,20 @@ public class PluginJAR
 
 				// Check if a plugin with the same name
 				// is already loaded
-				if(jEdit.getPlugin(className) != null)
+				if (!continueLoading(className, cache.cachedProperties))
 				{
-					jEdit.pluginError(path, "plugin-error.already-loaded",
-						null);
 					return null;
 				}
+				else
+				{
+					EditPlugin otherPlugin = jEdit.getPlugin(className);
+					if (otherPlugin != null)
+					{
+						jEdit.removePluginJAR(otherPlugin.getPluginJAR(), false);
+//						otherPlugin.getPluginJAR().uninit(false);
+					}
+				}
+
 				plugin = new EditPlugin.Deferred(this,
 				     className);
 				label = _label;
@@ -1393,6 +1494,18 @@ public class PluginJAR
 
 		return cache;
 	} //}}}
+	
+	private static boolean continueLoading(String clazz, Properties cachedProperties)
+	{
+		if(jEdit.getPlugin(clazz) != null)
+		{
+			String otherVersion = jEdit.getProperty("plugin."+clazz+".version");
+			String thisVersion = cachedProperties.getProperty("plugin."+clazz+".version");
+			if (otherVersion.compareTo(thisVersion) > 0)
+				return false;
+		}
+		return true;
+	}
 
 	//{{{ startPlugin() method
 	private void startPlugin()
@@ -1422,7 +1535,7 @@ public class PluginJAR
 				// behavior, where a PropertiesChanged
 				// was sent after plugins were started
 				((EBComponent)plugin).handleMessage(
-					new org.gjt.sp.jedit.msg.PropertiesChanged(null));
+					new PropertiesChanged(null));
 			}
 			EditBus.addToBus(plugin);
 		}
@@ -1450,11 +1563,12 @@ public class PluginJAR
 	//{{{ startPluginLater() method
 	private void startPluginLater()
 	{
-		SwingUtilities.invokeLater(new Runnable()
+		EventQueue.invokeLater(new Runnable()
 		{
+			@Override
 			public void run()
 			{
-				if(!activated)
+				if (!activated)
 					return;
 
 				startPlugin();
@@ -1491,7 +1605,7 @@ public class PluginJAR
 	 */
 	public static class PluginCacheEntry
 	{
-		public static final int MAGIC = 0xB7A2E422;
+		public static final int MAGIC = 0xB7A2E424;
 
 		//{{{ Instance variables
 		public PluginJAR plugin;
@@ -1513,6 +1627,7 @@ public class PluginJAR
 		ServiceManager.Descriptor[] cachedServices;
 
 		public Properties cachedProperties;
+		public Map<String, Properties> localizationProperties;
 		public String pluginClass;
 		//}}}
 
@@ -1572,7 +1687,8 @@ public class PluginJAR
 			resources = readStringArray(din);
 
 			cachedProperties = readMap(din);
-
+			localizationProperties = readLanguagesMap(din);
+			
 			pluginClass = readString(din);
 
 			return true;
@@ -1616,6 +1732,7 @@ public class PluginJAR
 			writeStringArray(dout,resources);
 
 			writeMap(dout,cachedProperties);
+			writeLanguages(dout, localizationProperties);
 
 			writeString(dout,pluginClass);
 		} //}}}
@@ -1688,11 +1805,31 @@ public class PluginJAR
 				String value = readString(din);
 				if(value == null)
 					value = "";
-				returnValue.put(key,value);
+				returnValue.setProperty(key, value);
 			}
 			return returnValue;
 		} //}}}
 
+		//{{{ readLanguagesMap() method
+		private static Map<String, Properties> readLanguagesMap(DataInputStream din)
+			throws IOException
+		{
+			int languagesCount = din.readInt();
+			if (languagesCount == 0)
+				return Collections.emptyMap();
+			
+			
+			Map<String, Properties> languages = new HashMap<String, Properties>(languagesCount);
+			for (int i = 0;i<languagesCount;i++)
+			{
+				String lang = readString(din);
+				Properties props = readMap(din);
+				languages.put(lang, props);
+			}
+
+			return languages;
+		} //}}}
+
 		//{{{ writeString() method
 		private static void writeString(DataOutputStream dout,
 			Object obj) throws IOException
@@ -1746,11 +1883,11 @@ public class PluginJAR
 		} //}}}
 
 		//{{{ writeMap() method
-		private static void writeMap(DataOutputStream dout, Map map)
+		private static void writeMap(DataOutputStream dout, Properties properties)
 			throws IOException
 		{
-			dout.writeInt(map.size());
-			Set<Map.Entry<Object, Object>> set = map.entrySet();
+			dout.writeInt(properties.size());
+			Set<Map.Entry<Object, Object>> set = properties.entrySet();
 			for (Map.Entry<Object, Object> entry : set)
 			{
 				writeString(dout,entry.getKey());
@@ -1758,6 +1895,18 @@ public class PluginJAR
 			}
 		} //}}}
 
+		//{{{ writeLanguages() method
+		private static void writeLanguages(DataOutputStream dout, Map<String, Properties> languages)
+			throws IOException
+		{
+			dout.writeInt(languages.size());
+			for (Map.Entry<String, Properties> entry : languages.entrySet())
+			{
+				writeString(dout, entry.getKey());
+				writeMap(dout, entry.getValue());
+			}
+		} //}}}
+
 		//}}}
 	} //}}}
 }
diff --git a/org/gjt/sp/jedit/PropertyManager.java b/org/gjt/sp/jedit/PropertyManager.java
index 5e7b5ea..75c6cc5 100644
--- a/org/gjt/sp/jedit/PropertyManager.java
+++ b/org/gjt/sp/jedit/PropertyManager.java
@@ -35,15 +35,22 @@ class PropertyManager
 		for (Properties plugin : plugins)
 			total.putAll(plugin);
 		total.putAll(site);
+		total.putAll(localization);
 		total.putAll(user);
 		return total;
 	} //}}}
 
-	//{{{ loadSystemProps() method
+	//{{{ loadSystemProps() methods
 	void loadSystemProps(InputStream in)
 		throws IOException
 	{
 		loadProps(system,in);
+	}
+
+	void loadSystemProps(Reader in)
+		throws IOException
+	{
+		loadProps(system,in);
 	} //}}}
 
 	//{{{ loadSiteProps() method
@@ -53,6 +60,16 @@ class PropertyManager
 		loadProps(site,in);
 	} //}}}
 
+	//{{{ loadLocalizationProps() method
+	void loadLocalizationProps(Reader in)
+		throws IOException
+	{
+		if (in == null)
+			localization.clear();
+		else
+			loadProps(localization,in);
+	} //}}}
+
 	//{{{ loadUserProps() method
 	void loadUserProps(InputStream in)
 		throws IOException
@@ -95,8 +112,12 @@ class PropertyManager
 		String value = user.getProperty(name);
 		if(value != null)
 			return value;
-		else
-			return getDefaultProperty(name);
+
+		value = localization.getProperty(name);
+		if (value != null)
+			return value;
+
+		return getDefaultProperty(name);
 	} //}}}
 
 	//{{{ setProperty() method
@@ -150,10 +171,11 @@ class PropertyManager
 	} //}}}
 
 	//{{{ Private members
-	private Properties system = new Properties();
-	private List<Properties> plugins = new LinkedList<Properties>();
-	private Properties site = new Properties();
-	private Properties user = new Properties();
+	private final Properties system = new Properties();
+	private final List<Properties> plugins = new LinkedList<Properties>();
+	private final Properties site = new Properties();
+	private final Properties localization = new Properties();
+	private final Properties user = new Properties();
 
 	//{{{ getDefaultProperty() method
 	private String getDefaultProperty(String name)
@@ -186,5 +208,19 @@ class PropertyManager
 		}
 	} //}}}
 
+	//{{{ loadProps() method
+	private static void loadProps(Properties into, Reader in)
+		throws IOException
+	{
+		try
+		{
+			into.load(in);
+		}
+		finally
+		{
+			in.close();
+		}
+	} //}}}
+
 	//}}}
 }
diff --git a/org/gjt/sp/jedit/Registers.java b/org/gjt/sp/jedit/Registers.java
index 550796b..526db03 100644
--- a/org/gjt/sp/jedit/Registers.java
+++ b/org/gjt/sp/jedit/Registers.java
@@ -62,7 +62,7 @@ import org.gjt.sp.util.Log;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: Registers.java 20697 2011-12-25 17:23:17Z k_satoda $
+ * @version $Id: Registers.java 20594 2011-12-09 17:53:47Z kpouer $
  */
 public class Registers
 {
@@ -114,7 +114,7 @@ public class Registers
 			textArea.getToolkit().beep();
 	} //}}}
 
-	//{{{ append() method
+	//{{{ append() methods
 	/**
 	 * Appends the text selected in the text area to the specified register,
 	 * with a newline between the old and new text.
@@ -124,9 +124,8 @@ public class Registers
 	public static void append(TextArea textArea, char register)
 	{
 		append(textArea,register,"\n",false);
-	} //}}}
+	}
 
-	//{{{ append() method
 	/**
 	 * Appends the text selected in the text area to the specified register.
 	 * @param textArea The text area
@@ -137,9 +136,8 @@ public class Registers
 		String separator)
 	{
 		append(textArea,register,separator,false);
-	} //}}}
+	}
 
-	//{{{ append() method
 	/**
 	 * Appends the text selected in the  text area to the specified register.
 	 * @param textArea The text area
@@ -212,7 +210,7 @@ public class Registers
 	 * Insets the contents of the specified register into the text area.
 	 * @param textArea The text area
 	 * @param register The register
-     * @param preferredDataFlavor the preferred dataflavor. If not available
+	 * @param preferredDataFlavor the preferred dataflavor. If not available
 	 * <tt>DataFlavor.stringFlavor</tt> will be used
 	 * @since jEdit 4.4pre1
 	 */
@@ -275,54 +273,7 @@ public class Registers
 		}
 		JEditBuffer buffer = textArea.getBuffer();
 		applyMode(mode, buffer);
-		try
-		{
-			buffer.beginCompoundEdit();
-
-			/* vertical paste */
-			if(vertical && textArea.getSelectionCount() == 0)
-			{
-				int caret = textArea.getCaretPosition();
-				int caretLine = textArea.getCaretLine();
-				Selection.Rect rect = new Selection.Rect(
-					caretLine,caret,caretLine,caret);
-				textArea.setSelectedText(rect,selection);
-				caretLine = textArea.getCaretLine();
-
-				if(caretLine != textArea.getLineCount() - 1)
-				{
-
-					int startColumn = rect.getStartColumn(
-						buffer);
-					int offset = buffer
-						.getOffsetOfVirtualColumn(
-						caretLine + 1,startColumn,null);
-					if(offset == -1)
-					{
-						buffer.insertAtColumn(caretLine + 1,startColumn,"");
-						textArea.setCaretPosition(
-							buffer.getLineEndOffset(
-							caretLine + 1) - 1);
-					}
-					else
-					{
-						textArea.setCaretPosition(
-							buffer.getLineStartOffset(
-							caretLine + 1) + offset);
-					}
-				}
-			}
-			else /* Regular paste */
-			{
-				textArea.replaceSelection(selection);
-			}
-		}
-		finally
-		{
-			buffer.endCompoundEdit();
-		}
-
-		HistoryModel.getModel("clipboard").addItem(selection);
+		_paste(textArea, vertical, selection, buffer);
 	}
 
 	/**
@@ -378,7 +329,7 @@ public class Registers
 		int i = mime.indexOf(';');
 		if (i != -1)
 		{
-			mime = mime.substring(0,i); 
+			mime = mime.substring(0,i);
 		}
 		String mode = jEdit.getProperty("mime2mode."+mime);
 		if (mode != null)
@@ -389,6 +340,11 @@ public class Registers
 				applyMode(_mode, buffer);
 			}
 		}     */
+		_paste(textArea, vertical, selection, buffer);
+	}
+
+	private static void _paste(TextArea textArea, boolean vertical, String selection, JEditBuffer buffer)
+	{
 		try
 		{
 			buffer.beginCompoundEdit();
@@ -438,7 +394,8 @@ public class Registers
 
 		HistoryModel.getModel("clipboard").addItem(selection);
 	} //}}}
-	
+
+	//{{{ applyMode() method
 	private static void applyMode(Mode mode, JEditBuffer buffer)
 	{
 		if (mode != null &&
@@ -448,8 +405,9 @@ public class Registers
 		{
 			buffer.setMode(mode);
 		}
-	}
+	} //}}}
 
+	//{{{ getTextFromTransferable() method
 	private static String getTextFromTransferable(Transferable transferable, DataFlavor dataFlavor)
 	{
 		try
@@ -466,7 +424,7 @@ public class Registers
 			Log.log(Log.ERROR, Registers.class, e);
 		}
 		return null;
-	}
+	} //}}}
 
 	//{{{ getRegister() method
 	/**
@@ -487,7 +445,7 @@ public class Registers
 			return registers[name];
 	} //}}}
 
-	//{{{ setRegister() method
+	//{{{ setRegister() methods
 	/**
 	 * Sets the specified register.
 	 * @param name The name
@@ -509,9 +467,8 @@ public class Registers
 		registers[name] = newRegister;
 		if (listener != null)
 			listener.registerChanged(name);
-	} //}}}
+	}
 
-	//{{{ setRegister() method
 	/**
 	 * Sets the specified register.
 	 * @param name The name
@@ -520,9 +477,8 @@ public class Registers
 	public static void setRegister(char name, String value)
 	{
 		setRegister(name, new StringSelection(value));
-	} //}}}
+	}
 
-	//{{{ setRegister() method
 	/**
 	 * Sets the specified register.
 	 * @param name The name
diff --git a/org/gjt/sp/jedit/ServiceManager.java b/org/gjt/sp/jedit/ServiceManager.java
index 1a2111a..4a37bf6 100644
--- a/org/gjt/sp/jedit/ServiceManager.java
+++ b/org/gjt/sp/jedit/ServiceManager.java
@@ -32,7 +32,7 @@ import org.gjt.sp.jedit.buffer.FoldHandlerProvider;
 import org.gjt.sp.jedit.buffer.FoldHandler;
 
 /**
- * A generic way for plugins to provide various API extensions.<p>
+ * A generic way for plugins (and core) to provide various API extensions.<p>
  *
  * Services are loaded from files named <code>services.xml</code> inside the
  * plugin JAR. A service definition file has the following form:
@@ -53,8 +53,9 @@ import org.gjt.sp.jedit.buffer.FoldHandler;
  * to the set of services offered by the plugin.
  * </li>
  * <li>
- * A <code>SERVICE</code> contains the data for a particular service
- * activation.
+ * A <code>SERVICE</code> contains the factory method for this
+ * service singleton. The ServiceManager manages named singletons
+ * created from these factory methods.
  * It has two attributes, both required: <code>NAME</code> and
  * <code>CLASS</code>. The <code>CLASS</code> attribute must be the name of
  * a known sevice type; see below.
@@ -66,26 +67,34 @@ import org.gjt.sp.jedit.buffer.FoldHandler;
  * </li>
  * </ul>
  *
- * The jEdit core defines the following service types:
+ * To see all of the services offered by jEdit core, see
+ * jEdit's <tt>services.xml</tt> file.
+ * Some core services are listed below:
  * <ul>
  * <li>{@link org.gjt.sp.jedit.buffer.FoldHandler}</li>
+ * <li>{@link org.gjt.sp.jedit.textarea.FoldPainter}</li>
  * <li>{@link org.gjt.sp.jedit.io.VFS}</li>
  * <li>{@link org.gjt.sp.jedit.io.Encoding}</li>
  * <li>{@link org.gjt.sp.jedit.io.EncodingDetector}</li>
+ * <li>{@link org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory}</li>
+ * <li>{@link org.gjt.sp.jedit.gui.DockingFrameworkProvider}</li>
+ * <li>{@link org.gjt.sp.jedit.gui.tray.JEditTrayIcon}</li>
  * </ul>
  *
- * Plugins may provide more.<p>
+ * Plugins may define/provide more, so the only way to see a
+ * complete list of service types currently in use is by calling
+ * {@link #getServiceTypes()}.
+ * <br />
+ * To use a service from a plugin, add a piece of code somewhere that calls
+ * {@link #getServiceNames(String)} and  {@link #getService(String,String)}.
  *
- * To have your plugin accept services, no extra steps are needed other than
- * a piece of code somewhere that calls {@link #getServiceNames(String)} and
- * {@link #getService(String,String)}.
  *
  * @see BeanShell
  * @see PluginJAR
  *
  * @since jEdit 4.2pre1
  * @author Slava Pestov
- * @version $Id: ServiceManager.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: ServiceManager.java 21608 2012-04-25 22:20:35Z ezust $
  */
 public class ServiceManager
 {
@@ -329,9 +338,12 @@ public class ServiceManager
 
 			return instance;
 		}
+
+		@Override
 		public int hashCode()
 		{
-			return name.hashCode();
+			int result = 31 * clazz.hashCode() + name.hashCode();
+			return result;
 		}
 
 		public boolean equals(Object o)
@@ -367,6 +379,7 @@ public class ServiceManager
 		 * @return the FoldHandler or null if it doesn't exist
 		 * @since jEdit 4.3pre10
 		 */
+		@Override
 		public FoldHandler getFoldHandler(String name)
 		{
 			FoldHandler handler = (FoldHandler) getService(SERVICE,name);
@@ -379,6 +392,7 @@ public class ServiceManager
 		 *
 		 * @since jEdit 4.3pre10
 		 */
+		@Override
 		public String[] getFoldModes()
 		{
 			String[] handlers = getServiceNames(SERVICE);
diff --git a/org/gjt/sp/jedit/SplitConfigParser.java b/org/gjt/sp/jedit/SplitConfigParser.java
index d44fbc5..b1acfc7 100644
--- a/org/gjt/sp/jedit/SplitConfigParser.java
+++ b/org/gjt/sp/jedit/SplitConfigParser.java
@@ -29,6 +29,10 @@ import java.util.ArrayList;
 import java.util.Deque;
 import java.util.List;
 
+/** Class used by PerspectiveManager to parse SplitConfig strings.
+    May also be used by plugins. 
+    @since jEdit 4.4
+*/
 public class SplitConfigParser 
 {
 
diff --git a/org/gjt/sp/jedit/TextUtilities.java b/org/gjt/sp/jedit/TextUtilities.java
index 5c7ab05..65acbee 100644
--- a/org/gjt/sp/jedit/TextUtilities.java
+++ b/org/gjt/sp/jedit/TextUtilities.java
@@ -42,7 +42,7 @@ import org.gjt.sp.util.StandardUtilities;
  * </ul>
  *
  * @author Slava Pestov
- * @version $Id: TextUtilities.java 19412 2011-03-01 15:07:08Z kpouer $
+ * @version $Id: TextUtilities.java 20176 2011-10-30 19:30:37Z kpouer $
  */
 public class TextUtilities
 {
@@ -260,10 +260,10 @@ public class TextUtilities
 	 *
 	 * @since jedit 4.3pre3
 	 */
-	public static String join(Collection<String> c, String delim)
+	public static String join(Collection<?> c, String delim)
 	{
 		StringBuilder retval = new StringBuilder();
-		Iterator<String> itr = c.iterator();
+		Iterator<?> itr = c.iterator();
 		if (itr.hasNext())
 			retval.append( itr.next() );
 		else
diff --git a/org/gjt/sp/jedit/View.java b/org/gjt/sp/jedit/View.java
index c3e60d3..16ffe88 100644
--- a/org/gjt/sp/jedit/View.java
+++ b/org/gjt/sp/jedit/View.java
@@ -127,7 +127,7 @@ import org.gjt.sp.util.StandardUtilities;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: View.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: View.java 21777 2012-06-09 22:39:21Z evanpw $
  */
 public class View extends JFrame implements InputHandlerProvider
 {
@@ -558,6 +558,7 @@ public class View extends JFrame implements InputHandlerProvider
 	/**
 	 * Returns the input handler.
 	 */
+	@Override
 	public InputHandler getInputHandler()
 	{
 		return inputHandler;
@@ -684,8 +685,7 @@ public class View extends JFrame implements InputHandlerProvider
 
 		JComponent oldParent = (JComponent)oldEditPane.getParent();
 
-		final JSplitPane newSplitPane = new JSplitPane(orientation,
-							       jEdit.getBooleanProperty("appearance.continuousLayout"));
+		final JSplitPane newSplitPane = new JSplitPane(orientation);
 		newSplitPane.setOneTouchExpandable(true);
 		newSplitPane.setBorder(null);
 		newSplitPane.setMinimumSize(new Dimension(0,0));
@@ -727,6 +727,7 @@ public class View extends JFrame implements InputHandlerProvider
 
 		EventQueue.invokeLater(new Runnable()
 		{
+			@Override
 			public void run()
 			{
 				newSplitPane.setDividerLocation(dividerPosition);
@@ -1322,8 +1323,10 @@ public class View extends JFrame implements InputHandlerProvider
 		plainView = config.plainView;
 
 		enableEvents(AWTEvent.KEY_EVENT_MASK);
-
-		setIconImage(GUIUtilities.getEditorIcon());
+		
+		// OS X users expect a preview of the window rather than an icon
+		if (!OperatingSystem.isMacOS())
+			setIconImage(GUIUtilities.getEditorIcon());
 
 		mainPanel = new JPanel();
 		mainPanel.setLayout(new BorderLayout());
@@ -1402,7 +1405,7 @@ public class View extends JFrame implements InputHandlerProvider
 	//{{{ toggleFullScreen() method
 	public void toggleFullScreen()
 	{
-		fullScreenMode = (! fullScreenMode);
+		fullScreenMode = !fullScreenMode;
 		GraphicsDevice sd = getGraphicsConfiguration().getDevice();
 		dispose();
 		if (fullScreenMode)
@@ -1417,7 +1420,7 @@ public class View extends JFrame implements InputHandlerProvider
 		{
 			boolean showStatus = plainView ? jEdit.getBooleanProperty("view.status.plainview.visible") :
 				jEdit.getBooleanProperty("view.status.visible");
-			if ((menuBar != null) && (getJMenuBar() != menuBar))
+			if (menuBar != null && getJMenuBar() != menuBar)
 				setJMenuBar(menuBar);
 			boolean alternateLayout = jEdit.getBooleanProperty(
 				"view.toolbar.alternateLayout");
@@ -1520,11 +1523,11 @@ public class View extends JFrame implements InputHandlerProvider
 	//{{{ Instance variables
 	private boolean closed;
 
-	private DockableWindowManager dockableWindowManager;
-	private JPanel mainPanel;
+	private final DockableWindowManager dockableWindowManager;
+	private final JPanel mainPanel;
 
-	private JPanel topToolBars;
-	private JPanel bottomToolBars;
+	private final JPanel topToolBars;
+	private final JPanel bottomToolBars;
 	private ToolBarManager toolBarManager;
 
 	private Container toolBar;
@@ -1535,7 +1538,7 @@ public class View extends JFrame implements InputHandlerProvider
 	private JSplitPane splitPane;
 	private String lastSplitConfig;
 
-	private StatusBar status;
+	private final StatusBar status;
 
 	private InputHandler inputHandler;
 	private Macros.Recorder recorder;
@@ -1545,7 +1548,7 @@ public class View extends JFrame implements InputHandlerProvider
 
 	private boolean showFullPath;
 
-	private boolean plainView;
+	private final boolean plainView;
 
 	private Socket waitSocket;
 	private Component mainContent;
@@ -1716,7 +1719,6 @@ public class View extends JFrame implements InputHandlerProvider
 		st.commentChar('!');
 		st.quoteChar('"');
 		st.eolIsSignificant(false);
-		boolean continuousLayout = jEdit.getBooleanProperty("appearance.continuousLayout");
 		List<Buffer> editPaneBuffers = new ArrayList<Buffer>();
 loop:		while (true)
 		{
@@ -1725,15 +1727,13 @@ loop:		while (true)
 			case StreamTokenizer.TT_EOF:
 				break loop;
 			case StreamTokenizer.TT_WORD:
-				if(st.sval.equals("vertical") ||
-					st.sval.equals("horizontal"))
+				if("vertical".equals(st.sval) || "horizontal".equals(st.sval))
 				{
 					int orientation
-						= st.sval.equals("vertical")
+						= "vertical".equals(st.sval)
 						? JSplitPane.VERTICAL_SPLIT
 						: JSplitPane.HORIZONTAL_SPLIT;
-					int divider = ((Integer)stack.pop())
-						.intValue();
+					int divider = (Integer) stack.pop();
 					Object obj1 = stack.pop();
 					Object obj2 = stack.pop();
 					// Backward compatibility with pre-bufferset versions
@@ -1749,7 +1749,6 @@ loop:		while (true)
 					}
 					stack.push(splitPane = new JSplitPane(
 						orientation,
-						continuousLayout,
 						(Component)obj1,
 						(Component)obj2));
 					splitPane.setOneTouchExpandable(true);
@@ -1758,12 +1757,12 @@ loop:		while (true)
 						new Dimension(0,0));
 					splitPane.setDividerLocation(divider);
 				}
-				else if(st.sval.equals("buffer"))
+				else if("buffer".equals(st.sval))
 				{
 					Object obj = stack.pop();
 					if(obj instanceof Integer)
 					{
-						int index = ((Integer)obj).intValue();
+						int index = (Integer) obj;
 						if(index >= 0 && index < buffers.length)
 							buffer = buffers[index];
 					}
@@ -1784,7 +1783,7 @@ loop:		while (true)
 					stack.push(buffer);
 					editPaneBuffers.add(buffer);
 				}
-				else if (st.sval.equals("buff"))
+				else if ("buff".equals(st.sval))
 				{
 					String path = (String)stack.pop();
 					buffer = jEdit.getBuffer(path);
@@ -1797,7 +1796,7 @@ loop:		while (true)
 						editPaneBuffers.add(buffer);
 					}
 				}
-				else if (st.sval.equals("bufferset"))
+				else if ("bufferset".equals(st.sval))
 				{
 					// pop the bufferset scope. Not used anymore but still here for compatibility
 					// with old perspectives
@@ -1874,8 +1873,6 @@ loop:		while (true)
 
 		getRootPane().revalidate();
 
-		if (splitPane != null)
-			GUIUtilities.initContinuousLayout(splitPane);
 		//SwingUtilities.updateComponentTreeUI(getRootPane());
 
 		if (fullScreenMode)
@@ -1936,7 +1933,7 @@ loop:		while (true)
 	//{{{ loadToolBars() method
 	private void loadToolBars()
 	{
-		if((! plainView) && (fullScreenMode ?
+		if(!plainView && (fullScreenMode ?
 			jEdit.getBooleanProperty("fullScreenIncludesToolbar") :
 			jEdit.getBooleanProperty("view.showToolbar")))
 		{
@@ -2121,6 +2118,7 @@ loop:		while (true)
 	//{{{ CaretHandler class
 	private class CaretHandler implements CaretListener
 	{
+		@Override
 		public void caretUpdate(CaretEvent evt)
 		{
 			if(evt.getSource() == getTextArea())
@@ -2154,12 +2152,14 @@ loop:		while (true)
 	//{{{ ScrollHandler class
 	private class ScrollHandler implements ScrollListener
 	{
+		@Override
 		public void scrolledVertically(TextArea textArea)
 		{
 			if(getTextArea() == textArea)
 				status.updateCaretStatus();
 		}
 
+		@Override
 		public void scrolledHorizontally(TextArea textArea) {}
 	} //}}}
 
@@ -2178,6 +2178,7 @@ loop:		while (true)
 			// windowActivated()
 			EventQueue.invokeLater(new Runnable()
 			{
+				@Override
 				public void run()
 				{
 					int check = jEdit.getIntegerProperty("checkFileStatus");
diff --git a/org/gjt/sp/jedit/actions.xml b/org/gjt/sp/jedit/actions.xml
index fc1576c..3fc0620 100644
--- a/org/gjt/sp/jedit/actions.xml
+++ b/org/gjt/sp/jedit/actions.xml
@@ -99,12 +99,23 @@
 	</CODE>
 </ACTION>
 
+
 <ACTION NAME="close-all">
 	<CODE>
 		jEdit.closeAllBuffers(view);
 	</CODE>
 </ACTION>
 
+<ACTION NAME="closeall-bufferset">
+	<CODE>
+		org.gjt.sp.jedit.bufferset.BufferSet bufferSet = editPane.getBufferSet();
+		Buffer[] buffers = bufferSet.getAllBuffers();
+		for (Buffer buff: buffers) {
+			jEdit.closeBuffer(editPane,buff);
+		}
+	</CODE>
+</ACTION>
+
 <ACTION NAME="closeall-except-active">
         <CODE>
 		org.gjt.sp.jedit.bufferset.BufferSet bufferSet = editPane.getBufferSet();
@@ -383,22 +394,36 @@
 	</CODE>
 </ACTION>
 
+<ACTION NAME="combined-options">
+	<CODE>
+		return org.jedit.options.CombinedOptions.combinedOptions(view);
+	</CODE>
+</ACTION>
+
+
 <ACTION NAME="global-options">
 	<CODE>
-		new GlobalOptions(view);
+		new org.jedit.options.CombinedOptions(view, 0);
 	</CODE>
 </ACTION>
+
 <ACTION NAME="global-bufferset">
 	<CODE>
 		bufferSetManager = jEdit.getBufferSetManager();
 		bufferSetManager.setScope(BufferSet.Scope.global);
 	</CODE>
+	<IS_SELECTED>
+		return (jEdit.getBufferSetManager().getScope().equals(BufferSet.Scope.global));
+	</IS_SELECTED>
 </ACTION>
 <ACTION NAME="view-bufferset">
 	<CODE>
 		bufferSetManager = jEdit.getBufferSetManager();
 		bufferSetManager.setScope(BufferSet.Scope.view);
 	</CODE>
+	<IS_SELECTED>
+		return (jEdit.getBufferSetManager().getScope().equals(BufferSet.Scope.view));
+	</IS_SELECTED>	
 </ACTION>
 
 <ACTION NAME="bufferset-toggle-exclusive">
@@ -416,6 +441,10 @@
 		bufferSetManager = jEdit.getBufferSetManager();
 		bufferSetManager.setScope(BufferSet.Scope.editpane);
 	</CODE>
+	<IS_SELECTED>
+		return (jEdit.getBufferSetManager().getScope().equals(BufferSet.Scope.editpane));
+	</IS_SELECTED>	
+	
 </ACTION>
 
 <ACTION NAME="goto-line">
@@ -768,6 +797,7 @@
 
 <ACTION NAME="paste">
 	<CODE>
+		EditBus.send(new PositionChanging(editPane));
 		Registers.paste(textArea,'$',false);
 	</CODE>
 </ACTION>
@@ -832,7 +862,7 @@
 
 <ACTION NAME="plugin-options">
 	<CODE>
-		new PluginOptions(view);
+		new org.jedit.options.CombinedOptions(view, 1);
 	</CODE>
 </ACTION>
 
@@ -1078,7 +1108,6 @@
 		buffer.saveAs(view,true);
 	</CODE>
 </ACTION>
-
 <ACTION NAME="save-a-copy-as">
 	<CODE>
 		buffer.saveAs(view,false);
diff --git a/org/gjt/sp/jedit/browser.actions.xml b/org/gjt/sp/jedit/browser.actions.xml
index 1055cc1..a537305 100644
--- a/org/gjt/sp/jedit/browser.actions.xml
+++ b/org/gjt/sp/jedit/browser.actions.xml
@@ -73,47 +73,7 @@
 	<CODE>
         if (files.length != 1)
             return;
-        org.gjt.sp.jedit.io.VFSFile file = files[0];
-        String targetPath;
-        switch (file.getType())
-        {
-            case org.gjt.sp.jedit.io.VFSFile.FILESYSTEM:
-                return;
-            case org.gjt.sp.jedit.io.VFSFile.FILE:
-                targetPath = MiscUtilities.getParentOfPath(file.getPath());
-                break;
-            case org.gjt.sp.jedit.io.VFSFile.DIRECTORY:
-                targetPath = file.getPath();
-                break;
-        }
-
-        java.awt.datatransfer.Transferable transferable = Registers.getRegister('$').getTransferable();
-        if (transferable.isDataFlavorSupported(org.gjt.sp.jedit.datatransfer.ListVFSFileTransferable.jEditFileList))
-        {
-            List copiedFiles = (List) transferable.getTransferData(org.gjt.sp.jedit.datatransfer.ListVFSFileTransferable.jEditFileList);
-            Iterator iterator = copiedFiles.iterator();
-            while (iterator.hasNext())
-            {
-                org.gjt.sp.jedit.io.VFSFile f = (org.gjt.sp.jedit.io.VFSFile) iterator.next();
-                if (f.getType() == org.gjt.sp.jedit.io.VFSFile.FILE)
-                {
-                    ThreadUtilities.runInBackground(new CopyFileWorker(view, f.getPath(), targetPath));
-                }
-            }
-        }
-        else if (transferable.isDataFlavorSupported(java.awt.datatransfer.DataFlavor.javaFileListFlavor))
-        {
-            List copiedFiles = (List) transferable.getTransferData(java.awt.datatransfer.DataFlavor.javaFileListFlavor);
-            Iterator iterator = copiedFiles.iterator();
-            while (iterator.hasNext())
-            {
-                File f = (File) iterator.next();
-                if (f.isFile())
-                {
-                    ThreadUtilities.runInBackground(new CopyFileWorker(view, f.getAbsolutePath(), targetPath));
-                }
-            }
-        }
+	browser.paste(files[0]);
 	</CODE>
 </ACTION>
 
diff --git a/org/gjt/sp/jedit/browser/BrowserCommandsMenu.java b/org/gjt/sp/jedit/browser/BrowserCommandsMenu.java
index 479dc20..de545f0 100644
--- a/org/gjt/sp/jedit/browser/BrowserCommandsMenu.java
+++ b/org/gjt/sp/jedit/browser/BrowserCommandsMenu.java
@@ -36,7 +36,7 @@ import org.gjt.sp.jedit.menu.MenuItemTextComparator;
 //}}}
 
 /**
- * @version $Id: BrowserCommandsMenu.java 20057 2011-10-08 23:54:23Z ezust $
+ * @version $Id: BrowserCommandsMenu.java 20834 2012-01-17 16:29:14Z kpouer $
  * @author Slava Pestov and Jason Ginchereau
  */
 public class BrowserCommandsMenu extends JPopupMenu
@@ -103,9 +103,12 @@ public class BrowserCommandsMenu extends JPopupMenu
 				&& (browser.getMode() == VFSBrowser.BROWSER
 				|| browser.getMode() == VFSBrowser.BROWSER_DIALOG))
 			{
-				add(createMenuItem("open"));
-				add(GUIUtilities.loadMenuItem(VFSBrowser.getActionContext(),
-					"vfs.browser.open-desktop", true));
+				add(createMenuItem("open", "22x22/actions/document-open.png"));
+				JMenuItem openDesktop = GUIUtilities
+					.loadMenuItem(VFSBrowser.getActionContext(),
+						      "vfs.browser.open-desktop", true);
+				openDesktop.setIcon(GUIUtilities.loadIcon("22x22/actions/document-open.png"));
+				add(openDesktop);
 				add(GUIUtilities.loadMenu(
 					VFSBrowser.getActionContext(),
 					"vfs.browser.open-in"));
@@ -115,41 +118,41 @@ public class BrowserCommandsMenu extends JPopupMenu
 					add(createMenuItem("close"));
 			}
 			else if(type != -1)
-				add(createMenuItem("open"));
+				add(createMenuItem("open", "22x22/actions/document-open.png"));
 
 			if(rename)
 				add(createMenuItem("rename"));
 
 			if(delete)
-				add(createMenuItem("delete"));
+				add(createMenuItem("delete", "22x22/actions/edit-delete.png"));
 
-			add(createMenuItem("copy-path"));
-			add(createMenuItem("paste"));
+			add(createMenuItem("copy-path", "22x22/actions/edit-copy.png"));
+			add(createMenuItem("paste", "22x22/actions/edit-paste.png"));
 
 			if((files.length == 1) || (browser.getSelectedFiles().length != 0))
-		   		add(createMenuItem("properties"));
+		   		add(createMenuItem("properties", "22x22/actions/document-properties.png"));
 
 			addSeparator();
 		}
 
-		add(createMenuItem("up"));
-		add(createMenuItem("previous"));
-		add(createMenuItem("next"));
-		add(createMenuItem("reload"));
+		add(createMenuItem("up", "22x22/actions/go-parent.png"));
+		add(createMenuItem("previous", "22x22/actions/go-previous.png"));
+		add(createMenuItem("next", "22x22/actions/go-next.png"));
+		add(createMenuItem("reload", "22x22/actions/document-reload.png"));
 		add(createMenuItem("roots"));
-		add(createMenuItem("home"));
+		add(createMenuItem("home", "22x22/actions/go-home.png"));
 		add(createMenuItem("synchronize"));
 		addSeparator();
 
 		if(browser.getMode() == VFSBrowser.BROWSER)
-			add(createMenuItem("new-file"));
+			add(createMenuItem("new-file", "22x22/actions/document-new.png"));
 
-		add(createMenuItem("new-directory"));
+		add(createMenuItem("new-directory", "22x22/actions/folder-new.png"));
 
 		if(browser.getMode() == VFSBrowser.BROWSER)
 		{
 			addSeparator();
-			add(createMenuItem("search-directory"));
+			add(createMenuItem("search-directory", "22x22/actions/system-search.png"));
 		}
 
 		addSeparator();
@@ -207,11 +210,18 @@ public class BrowserCommandsMenu extends JPopupMenu
 	private JCheckBoxMenuItem autoDetect;
 	private JRadioButtonMenuItem otherEncoding;
 
-	//{{{ createMenuItem() method
+	//{{{ createMenuItem() methods
+	private JMenuItem createMenuItem(String name, String iconName)
+	{
+		JMenuItem jMenuItem =
+			GUIUtilities.loadMenuItem(VFSBrowser.getActionContext(), "vfs.browser." + name, false);
+		jMenuItem.setIcon(GUIUtilities.loadIcon(iconName));
+		return jMenuItem;
+	}
+
 	private JMenuItem createMenuItem(String name)
 	{
-		return GUIUtilities.loadMenuItem(VFSBrowser.getActionContext(),
-			"vfs.browser." + name,false);
+		return createMenuItem(name, null);
 	} //}}}
 
 	//{{{ createEncodingMenu() method
diff --git a/org/gjt/sp/jedit/browser/BrowserView.java b/org/gjt/sp/jedit/browser/BrowserView.java
index a7bebf8..3569d2d 100644
--- a/org/gjt/sp/jedit/browser/BrowserView.java
+++ b/org/gjt/sp/jedit/browser/BrowserView.java
@@ -43,7 +43,7 @@ import org.gjt.sp.util.ThreadUtilities;
 /**
  * VFS browser tree view.
  * @author Slava Pestov
- * @version $Id: BrowserView.java 20867 2012-01-19 21:14:50Z ezust $
+ * @version $Id: BrowserView.java 20860 2012-01-19 09:04:06Z kpouer $
  */
 class BrowserView extends JPanel
 {
@@ -78,7 +78,6 @@ class BrowserView extends JPanel
 		splitPane = new JSplitPane(
 			browser.isHorizontalLayout()
 			? JSplitPane.HORIZONTAL_SPLIT : JSplitPane.VERTICAL_SPLIT,
-			jEdit.getBooleanProperty("appearance.continuousLayout"),
 			parentScroller, tableScroller);
 		splitPane.setOneTouchExpandable(true);
 
@@ -329,7 +328,6 @@ class BrowserView extends JPanel
 	{
 		showIcons = jEdit.getBooleanProperty("vfs.browser.showIcons");
 		table.propertiesChanged();
-		GUIUtilities.initContinuousLayout(splitPane);
 		splitPane.setBorder(null);
 	} //}}}
 
diff --git a/org/gjt/sp/jedit/browser/VFSBrowser.java b/org/gjt/sp/jedit/browser/VFSBrowser.java
index be3f10e..643e38a 100644
--- a/org/gjt/sp/jedit/browser/VFSBrowser.java
+++ b/org/gjt/sp/jedit/browser/VFSBrowser.java
@@ -28,13 +28,18 @@ import org.gjt.sp.jedit.bsh.*;
 import javax.swing.border.EmptyBorder;
 import javax.swing.event.*;
 import javax.swing.*;
+import java.awt.datatransfer.DataFlavor;
+import java.awt.datatransfer.Transferable;
+import java.awt.datatransfer.UnsupportedFlavorException;
 import java.awt.event.*;
 import java.awt.*;
 import java.io.File;
+import java.io.IOException;
 import java.util.*;
 import java.util.List;
 import java.util.concurrent.CountDownLatch;
 
+import org.gjt.sp.jedit.datatransfer.ListVFSFileTransferable;
 import org.gjt.sp.jedit.io.*;
 import org.gjt.sp.jedit.gui.*;
 import org.gjt.sp.jedit.msg.*;
@@ -49,9 +54,9 @@ import org.gjt.sp.jedit.menu.MenuItemTextComparator;
  * The main class of the VFS browser.
  * Used as dockable, and also embedded inside the
  * VFSFileChooserDialog.
- * 
+ *
  * @author Slava Pestov
- * @version $Id: VFSBrowser.java 21676 2012-05-16 01:25:24Z ezust $
+ * @version $Id: VFSBrowser.java 21555 2012-04-03 15:17:35Z kpouer $
  */
 public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 	DockableWindow
@@ -173,7 +178,7 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 		this.multipleSelection = multipleSelection;
 		this.view = view;
 
-		
+
 		currentEncoding = null;
 		autoDetectEncoding = jEdit.getBooleanProperty(
 			"buffer.encodingAutodetect");
@@ -212,7 +217,7 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 		pathField.setInstantPopups(true);
 		pathField.setEnterAddsToHistory(false);
 		pathField.setSelectAllOnFocus(true);
-		
+
 
 		// because its preferred size can be quite wide, we
 		// don't want it to make the browser way too big,
@@ -258,7 +263,7 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 		{
 			DockableWindowManager dwm = view.getDockableWindowManager();
 			KeyListener keyListener = dwm.closeListener(NAME);
-			filterCheckbox.addKeyListener(keyListener);	
+			filterCheckbox.addKeyListener(keyListener);
 			addKeyListener(keyListener);
 			filterEditor.addKeyListener(keyListener);
 			pathField.addKeyListener(keyListener);
@@ -395,18 +400,18 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 	@Override
 	public void focusOnDefaultComponent()
 	{
-		// pathField.requestFocus();		
+		// pathField.requestFocus();
 		defaultFocusComponent.requestFocus();
 	} //}}}
 
 	// {{{ setDefaultFocusComponent()
 	/** Only used by VFSFileChooserDialog, since it embeds this in a dialog
 	 */
-	void setDefaultFocusComponent(JComponent c) 
+	void setDefaultFocusComponent(JComponent c)
 	{
 		defaultFocusComponent = c;
 	}// }}}
-	
+
 	//{{{ addNotify() method
 	@Override
 	public void addNotify()
@@ -577,7 +582,7 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 	/**
 	 * @since jedit 4.3pre15
 	 */
-	public void previousDirectory() 
+	public void previousDirectory()
 	{
 		if (historyStack.size() > 1)
 		{
@@ -587,20 +592,20 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 			historyStack.pop();
 		}
 	}
-	
-	
+
+
 	/**
 	 * @since jEdit 4.3pre15
 	 */
-	public void nextDirectory() 
+	public void nextDirectory()
 	{
 		if (!nextDirectoryStack.isEmpty())
 		{
 			setDirectory(nextDirectoryStack.pop());
 		}
 	}
-	// }}}	
-	
+	// }}}
+
 	//{{{ setDirectory() method
 	public void setDirectory(String path)
 	{
@@ -623,7 +628,7 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 	//{{{ getRootDirectory() method
 	public static String getRootDirectory()
 	{
-		if(OperatingSystem.isMacOS() || OperatingSystem.isDOSDerived())
+		if(OperatingSystem.isMacOS() || OperatingSystem.isWindows())
 			return FileRootsVFS.PROTOCOL + ':';
 		else
 			return "/";
@@ -680,7 +685,7 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 		}
 
 		Object[] args = { buf.toString(), typeStr};
-		
+
 		int result = GUIUtilities.confirm(this,dialogType,args,
 			JOptionPane.YES_NO_OPTION,
 			JOptionPane.WARNING_MESSAGE);
@@ -762,7 +767,7 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 	 * Rename a file.
 	 * It will prompt for the new name.
 	 * @param from the file to rename
-	 * @param from to the target name
+	 * @param to the target name
 	 * @since jEdit 4.5pre1
 	 */
 	public void rename(VFSFile from, String to)
@@ -918,8 +923,8 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 	public void fileProperties(VFSFile[] files)
 	{
 		new FilePropertiesDialog(view, this, files);
-	} //}}} 		
-		
+	} //}}}
+
 	//{{{ searchInDirectory() method
 	/**
 	 * Opens a directory search in the current directory.
@@ -1020,6 +1025,66 @@ public class VFSBrowser extends JPanel implements DefaultFocusComponent,
 			return getSelectedFiles();
 		}
 	} //}}}
+	
+	//{{{ paste() method
+	/**
+	 * Paste the file contained in the clipboard.
+	 * If the clipboard do not contains files, nothing happens.
+	 * @param file the target, it can be a file, in that case it will be pasted to
+	 * the parent directory, or a directory.
+	 */
+	public void paste(VFSFile file) throws IOException, UnsupportedFlavorException
+	{
+		if (file == null)
+			throw new IllegalArgumentException("file cannot be null");
+		String targetPath = null;
+		switch (file.getType())
+		{
+			case VFSFile.FILESYSTEM:
+				return;
+			case VFSFile.FILE:
+				targetPath = MiscUtilities.getParentOfPath(file.getPath());
+				break;
+			case VFSFile.DIRECTORY:
+				targetPath = file.getPath();
+				break;
+		}
+		VFS vfs = VFSManager.getVFSForPath(targetPath);
+		Object vfsSession = null;
+		try
+		{
+			vfsSession = vfs.createVFSSession(targetPath, this);
+			if (vfsSession == null)
+			{
+				Log.log(Log.ERROR, this, "Unable to create session for " + targetPath);
+				return;
+			}
+			Transferable transferable = Registers.getRegister('$').getTransferable();
+			List<String> sources = new ArrayList<String>();
+			if (transferable.isDataFlavorSupported(ListVFSFileTransferable.jEditFileList))
+			{
+				Iterable<VFSFile> copiedFiles = (Iterable<VFSFile>) transferable.getTransferData(ListVFSFileTransferable.jEditFileList);
+				for (VFSFile copiedFile : copiedFiles)
+				{
+					sources.add(copiedFile.getPath());
+				}
+			}
+			else if (transferable.isDataFlavorSupported(DataFlavor.javaFileListFlavor))
+			{
+				Iterable<File> copiedFiles = (Iterable<File>) transferable.getTransferData(DataFlavor.javaFileListFlavor);
+				for (File copiedFile : copiedFiles)
+				{
+					sources.add(copiedFile.getAbsolutePath());
+				}
+			}
+			CopyFileWorker worker = new CopyFileWorker(this, sources, targetPath);
+			ThreadUtilities.runInBackground(worker);
+		}
+		finally
+		{
+			vfs._endVFSSession(vfsSession, this);
+		}
+	} //}}}
 
 	//{{{ locateFile() method
 	/**
@@ -1130,7 +1195,8 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 				if(mode == M_OPEN_NEW_VIEW && this.mode == BROWSER)
 					browseDirectoryInNewWindow(view,file.getPath());
 				else
-					setDirectory(file.getPath());
+					if (selectedFiles.length == 1)
+						setDirectory(file.getPath());
 			}
 			else if(this.mode == BROWSER || this.mode == BROWSER_DIALOG)
 			{
@@ -1219,12 +1285,12 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 	{
 		if (mode == BROWSER)
 		{
-			view.getDockableWindowManager().hideDockableWindow(NAME);			
+			view.getDockableWindowManager().hideDockableWindow(NAME);
 		}
 		else
 		{
 			GUIUtilities.getParentDialog(this).dispose();
-		}	
+		}
 	}//}}}
 
 	//{{{ move() method
@@ -1244,7 +1310,7 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 		topBox.add(toolbarBox, 0);
 		propertiesChanged();
 	} //}}}
-	
+
 	//{{{ Package-private members
 
 	// This can be null untill an user explicitly selects an encoding
@@ -1425,7 +1491,7 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 
 	private boolean requestRunning;
 	private boolean maybeReloadRequestRunning;
-	
+
 	private final Stack<String> historyStack = new Stack<String>();
 	private final Stack<String> nextDirectoryStack = new Stack<String>();
 	//}}}
@@ -1603,7 +1669,7 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 				updateFilterEnabled();
 
 				String p = pathField.getText();
-				
+
 				if(p != null)
 					setDirectory(p);
 				browserView.focusOnFileView();
@@ -1625,7 +1691,7 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 					filterEditor.getItem());
 				filterField.setSelectedItem(
 					filterEditor.getItem());
-				// ### ugly: 
+				// ### ugly:
 				// itemStateChanged does not seem to get fired
 				itemStateChanged(new ItemEvent(filterField,
 					ItemEvent.ITEM_STATE_CHANGED,
@@ -1685,28 +1751,41 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 
 	} //}}}
 
-	//{{{ CommandsMenuButton class
-	class CommandsMenuButton extends RolloverButton
+
+	// {{{ MenuButton (abstract class)
+	@SuppressWarnings("serial")
+	static abstract class MenuButton extends RolloverButton implements KeyListener
 	{
-		//{{{ CommandsMenuButton constructor
-		CommandsMenuButton()
+		JPopupMenu popup;
+
+		//{{{ MenuButton constructor
+		MenuButton()
 		{
-			setText(jEdit.getProperty("vfs.browser.commands.label"));
 			setIcon(GUIUtilities.loadIcon(jEdit.getProperty("dropdown-arrow.icon")));
 			setHorizontalTextPosition(SwingConstants.LEADING);
-			setName("commands");
-			
-			popup = new BrowserCommandsMenu(VFSBrowser.this,null);
 
-			CommandsMenuButton.this.setRequestFocusEnabled(false);
+	//		setRequestFocusEnabled(false);
 			setMargin(new Insets(1,1,1,1));
-			CommandsMenuButton.this.addMouseListener(new MouseHandler());
-
+			addMouseListener(new MouseHandler());
+			addKeyListener(this);
 			if(OperatingSystem.isMacOSLF())
-				CommandsMenuButton.this.putClientProperty("JButton.buttonType","toolbar");
+				putClientProperty("JButton.buttonType","toolbar");
 		} //}}}
 
-		BrowserCommandsMenu popup;
+		public void keyReleased(KeyEvent e) {}
+		public void keyTyped(KeyEvent e) {}
+		public void keyPressed(KeyEvent e)
+		{
+			if ((e.getKeyCode() == KeyEvent.VK_DOWN) ||
+			    (e.getKeyCode() == KeyEvent.VK_ENTER ))
+			{
+				doPopup();
+				e.consume();
+				return;
+			}
+		}
+
+		abstract void doPopup();
 
 		//{{{ MouseHandler class
 		class MouseHandler extends MouseAdapter
@@ -1714,14 +1793,9 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 			@Override
 			public void mousePressed(MouseEvent evt)
 			{
-				if(!popup.isVisible())
+				if(popup == null || !popup.isVisible())
 				{
-					popup.update();
-
-					GUIUtilities.showPopupMenu(
-						popup,CommandsMenuButton.this,0,
-						CommandsMenuButton.this.getHeight(),
-						false);
+					doPopup();
 				}
 				else
 				{
@@ -1731,85 +1805,86 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 		} //}}}
 	} //}}}
 
+
+
+	//{{{ CommandsMenuButton class
+	class CommandsMenuButton extends MenuButton
+	{
+		//{{{ CommandsMenuButton constructor
+		CommandsMenuButton()
+		{
+			setText(jEdit.getProperty("vfs.browser.commands.label"));
+			setName("commands");
+			popup = new BrowserCommandsMenu(VFSBrowser.this, null);
+		} //}}}
+
+		// BrowserCommandsMenu popup;
+
+		void doPopup()
+		{
+			((BrowserCommandsMenu) popup).update();
+			GUIUtilities.showPopupMenu( popup, this, 0, getHeight(), false);
+		}
+	} //}}}
+
 	//{{{ PluginsMenuButton class
-	class PluginsMenuButton extends RolloverButton
+	class PluginsMenuButton extends MenuButton
 	{
 		//{{{ PluginsMenuButton constructor
 		PluginsMenuButton()
 		{
 			setText(jEdit.getProperty("vfs.browser.plugins.label"));
-			setIcon(GUIUtilities.loadIcon(jEdit.getProperty("dropdown-arrow.icon")));
-			setHorizontalTextPosition(SwingConstants.LEADING);
+
 			setName("plugins");
-			
-			PluginsMenuButton.this.setRequestFocusEnabled(false);
+
 			setMargin(new Insets(1,1,1,1));
-			PluginsMenuButton.this.addMouseListener(new MouseHandler());
+			popup = null;
+			createPopupMenu();
 
-			if(OperatingSystem.isMacOSLF())
-				PluginsMenuButton.this.putClientProperty("JButton.buttonType","toolbar");
 		} //}}}
 
-		JPopupMenu popup;
 
 		//{{{ updatePopupMenu() method
 		void updatePopupMenu()
 		{
 			popup = null;
+
 		} //}}}
 
+		void doPopup() {
+			if (popup == null) createPopupMenu();
+			GUIUtilities.showPopupMenu(popup, this, 0, getHeight(), false);
+		}
+
 		//{{{ createPopupMenu() method
 		private void createPopupMenu()
 		{
 			if(popup != null)
 				return;
-
 			popup = (JPopupMenu)createPluginsMenu(new JPopupMenu(),true);
-		} //}}}
-
-		//{{{ MouseHandler class
-		class MouseHandler extends MouseAdapter
-		{
-			@Override
-			public void mousePressed(MouseEvent evt)
-			{
-				createPopupMenu();
 
-				if(!popup.isVisible())
-				{
-					GUIUtilities.showPopupMenu(
-						popup,PluginsMenuButton.this,0,
-						PluginsMenuButton.this.getHeight(),
-						false);
-				}
-				else
-				{
-					popup.setVisible(false);
-				}
-			}
 		} //}}}
+
 	} //}}}
 
 	//{{{ FavoritesMenuButton class
-	class FavoritesMenuButton extends RolloverButton
+	class FavoritesMenuButton extends MenuButton
 	{
 		//{{{ FavoritesMenuButton constructor
 		FavoritesMenuButton()
 		{
 			setText(jEdit.getProperty("vfs.browser.favorites.label"));
-			setIcon(GUIUtilities.loadIcon(jEdit.getProperty("dropdown-arrow.icon")));
-			setHorizontalTextPosition(SwingConstants.LEADING);
 			setName("favorites");
-			
-			FavoritesMenuButton.this.setRequestFocusEnabled(false);
-			setMargin(new Insets(1,1,1,1));
-			FavoritesMenuButton.this.addMouseListener(new MouseHandler());
+			createPopupMenu();
 
-			if(OperatingSystem.isMacOSLF())
-				FavoritesMenuButton.this.putClientProperty("JButton.buttonType","toolbar");
 		} //}}}
 
-		JPopupMenu popup;
+		void doPopup()
+		{	
+			if (popup==null) createPopupMenu();
+			GUIUtilities.showPopupMenu(popup, this, 0, getHeight(), false);
+		}
+
 
 		//{{{ createPopupMenu() method
 		void createPopupMenu()
@@ -1817,18 +1892,14 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 			popup = new JPopupMenu();
 			ActionHandler actionHandler = new ActionHandler();
 
-			JMenuItem mi = new JMenuItem(
-				jEdit.getProperty(
-				"vfs.browser.favorites"
-				+ ".add-to-favorites.label"));
+			JMenuItem mi = new JMenuItem( jEdit.getProperty(
+				"vfs.browser.favorites.add-to-favorites.label"));
 			mi.setActionCommand("add-to-favorites");
 			mi.addActionListener(actionHandler);
 			popup.add(mi);
 
-			mi = new JMenuItem(
-				jEdit.getProperty(
-				"vfs.browser.favorites"
-				+ ".edit-favorites.label"));
+			mi = new JMenuItem(jEdit.getProperty(
+				"vfs.browser.favorites.edit-favorites.label"));
 			mi.setActionCommand("dir at favorites:");
 			mi.addActionListener(actionHandler);
 			popup.add(mi);
@@ -1838,30 +1909,24 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 			VFSFile[] favorites = FavoritesVFS.getFavorites();
 			if(favorites.length == 0)
 			{
-				mi = new JMenuItem(
-					jEdit.getProperty(
-					"vfs.browser.favorites"
-					+ ".no-favorites.label"));
+				mi = new JMenuItem(jEdit.getProperty(
+					"vfs.browser.favorites.no-favorites.label"));
 				mi.setEnabled(false);
 				popup.add(mi);
 			}
 			else
 			{
-				Arrays.sort(favorites,
-					new VFS.DirectoryEntryCompare(
-					sortMixFilesAndDirs,
-					sortIgnoreCase));
+				Arrays.sort(favorites, new VFS.DirectoryEntryCompare(
+					sortMixFilesAndDirs, sortIgnoreCase));
 				for(int i = 0; i < favorites.length; i++)
 				{
 					FavoritesVFS.Favorite favorite = (FavoritesVFS.Favorite) favorites[i];
 					mi = new JMenuItem(favorite.getLabel());
-					mi.setIcon(FileCellRenderer
-						.getIconForFile(
+					mi.setIcon(FileCellRenderer.getIconForFile(
 						favorite,false));
 					String cmd = (favorite.getType() ==
-						VFSFile.FILE
-						? "file@" : "dir@")
-						+ favorite.getPath();
+							VFSFile.FILE ? "file@" : "dir@")
+							+ favorite.getPath();
 					mi.setActionCommand(cmd);
 					mi.addActionListener(actionHandler);
 					popup.add(mi);
@@ -1923,28 +1988,6 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 				}
 			}
 		} //}}}
-
-		//{{{ MouseHandler class
-		class MouseHandler extends MouseAdapter
-		{
-			@Override
-			public void mousePressed(MouseEvent evt)
-			{
-				if(popup != null && popup.isVisible())
-				{
-					popup.setVisible(false);
-					return;
-				}
-
-				if(popup == null)
-					createPopupMenu();
-
-				GUIUtilities.showPopupMenu(
-					popup,FavoritesMenuButton.this,0,
-					FavoritesMenuButton.this.getHeight(),
-					false);
-			}
-		} //}}}
 	} //}}}
 
 	//{{{ BrowserActionContext class
@@ -2081,7 +2124,7 @@ check_selected: for(int i = 0; i < selectedFiles.length; i++)
 			// to happen, so ignore lost focus events.
 			if (e.getID() != FocusEvent.FOCUS_LOST)
 				super.processFocusEvent(e);
-			else 
+			else
 			{
 				setCaretPosition(0);
 				getCaret().setVisible(false);
diff --git a/org/gjt/sp/jedit/browser/VFSDirectoryEntryTable.java b/org/gjt/sp/jedit/browser/VFSDirectoryEntryTable.java
index f00823f..0470f2d 100644
--- a/org/gjt/sp/jedit/browser/VFSDirectoryEntryTable.java
+++ b/org/gjt/sp/jedit/browser/VFSDirectoryEntryTable.java
@@ -49,7 +49,7 @@ import org.gjt.sp.util.ThreadUtilities;
 
 /**
  * @author Slava Pestov
- * @version $Id: VFSDirectoryEntryTable.java 21747 2012-06-01 13:55:48Z jarekczek $
+ * @version $Id: VFSDirectoryEntryTable.java 21706 2012-05-23 16:58:56Z ezust $
  * @since jEdit 4.2pre1
  */
 public class VFSDirectoryEntryTable extends JTable
@@ -601,7 +601,7 @@ public class VFSDirectoryEntryTable extends JTable
 				return;
 			Entry node = (Entry) getModel().getValueAt(ind, 0);
 			boolean isDir = node.dirEntry.getType() == VFSFile.DIRECTORY;
-			EditBus.send(new VFSPathSelected(jEdit.getActiveView(),
+			EditBus.send(new VFSPathSelected(browserView.getBrowser().getView(),
 							 node.dirEntry.getPath(), isDir));
 		}
 
diff --git a/org/gjt/sp/jedit/browser/VFSFileChooserDialog.java b/org/gjt/sp/jedit/browser/VFSFileChooserDialog.java
index 395fbc7..a53b882 100644
--- a/org/gjt/sp/jedit/browser/VFSFileChooserDialog.java
+++ b/org/gjt/sp/jedit/browser/VFSFileChooserDialog.java
@@ -45,7 +45,7 @@ import org.gjt.sp.util.*;
  * Wraps the VFS browser in a modal dialog.
  * Shows up when "File-Open" is used. 
  * @author Slava Pestov
- * @version $Id: VFSFileChooserDialog.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: VFSFileChooserDialog.java 20945 2012-01-24 20:24:26Z ezust $
  */
 public class VFSFileChooserDialog extends EnhancedDialog
 {
@@ -68,7 +68,7 @@ public class VFSFileChooserDialog extends EnhancedDialog
 	public VFSFileChooserDialog(View view, String path,
 		int mode, boolean multipleSelection, boolean autoshow)
 	{
-		super(view,getDefaultTitle(),true);
+		super(view,getTitle(mode),true);
 		setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());
 		_init(view,path,mode,multipleSelection,autoshow);
 	} //}}}
@@ -83,7 +83,7 @@ public class VFSFileChooserDialog extends EnhancedDialog
 	public VFSFileChooserDialog(Dialog parent, View view, String path,
 		int mode, boolean multipleSelection, boolean autoshow)
 	{
-		super(parent,getDefaultTitle(),true);
+		super(parent,getTitle(mode),true);
 		setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());		
 		_init(view,path,mode,multipleSelection,autoshow);
 	} //}}}
@@ -98,7 +98,7 @@ public class VFSFileChooserDialog extends EnhancedDialog
 	public VFSFileChooserDialog(Frame parent, View view, String path,
 		int mode, boolean multipleSelection, boolean autoshow)
 	{
-		super(parent, getDefaultTitle(),true);
+		super(parent,getTitle(mode),true);
 		setFocusTraversalPolicy(new LayoutFocusTraversalPolicy());		
 		_init(view,path,mode,multipleSelection,autoshow);
 	} //}}}
@@ -266,6 +266,26 @@ public class VFSFileChooserDialog extends EnhancedDialog
 		return jEdit.getProperty("vfs.browser.title");
 	}// }}}
 
+	//{{{ getTitle() method
+	private static String getTitle(int mode)
+	{
+		switch(mode)
+		{
+		case VFSBrowser.OPEN_DIALOG:
+			return jEdit.getProperty("vfs.browser.title.open");
+		case VFSBrowser.SAVE_DIALOG:
+			return jEdit.getProperty("vfs.browser.title.save");
+		case VFSBrowser.BROWSER:
+			return jEdit.getProperty("vfs.browser.title");
+		case VFSBrowser.CHOOSE_DIRECTORY_DIALOG:
+			return jEdit.getProperty("vfs.browser.title");
+		case VFSBrowser.BROWSER_DIALOG:
+			return jEdit.getProperty("vfs.browser.title.dialog");
+		default:
+			return jEdit.getProperty("vfs.browser.title");
+		}
+	}// }}}
+
 	//{{{ _init method
 	private void _init(View view, String path,
 		int mode, boolean multipleSelection, boolean autoshow)
diff --git a/org/gjt/sp/jedit/buffer/JEditBuffer.java b/org/gjt/sp/jedit/buffer/JEditBuffer.java
index 5f1d09b..63c783f 100644
--- a/org/gjt/sp/jedit/buffer/JEditBuffer.java
+++ b/org/gjt/sp/jedit/buffer/JEditBuffer.java
@@ -66,7 +66,7 @@ import java.util.regex.Pattern;
  * </ul>
  *
  * @author Slava Pestov
- * @version $Id: JEditBuffer.java 20422 2011-11-25 17:23:30Z ezust $
+ * @version $Id: JEditBuffer.java 21754 2012-06-02 18:49:16Z jarekczek $
  *
  * @since jEdit 4.3pre3
  */
@@ -257,6 +257,7 @@ public class JEditBuffer
 	/**
 	 * The buffer is guaranteed not to change between calls to
 	 * {@link #readLock()} and {@link #readUnlock()}.
+	 * Calls to this method may be nested.
 	 */
 	public void readLock()
 	{
@@ -277,6 +278,7 @@ public class JEditBuffer
 	/**
 	 * Attempting to obtain read lock will block between calls to
 	 * {@link #writeLock()} and {@link #writeUnlock()}.
+	 * Calls to this method may be nested.
 	 */
 	public void writeLock()
 	{
@@ -348,7 +350,8 @@ public class JEditBuffer
 	 * Returns the start offset of the specified line.
 	 * This method is thread-safe.
 	 * @param line The line
-	 * @return The start offset of the specified line
+	 * @return The start offset of the specified line, that is the offset
+	 * after the end-of-line character before that line.
 	 * @since jEdit 4.0pre1
 	 */
 	public int getLineStartOffset(int line)
@@ -375,8 +378,10 @@ public class JEditBuffer
 	 * Returns the end offset of the specified line.
 	 * This method is thread-safe.
 	 * @param line The line
-	 * @return The end offset of the specified line
-	 * invalid.
+	 * @return The end offset of the specified line, that is the offset 
+	 * after the end-of-line character. Note that
+	 * <code>buffer.getLineOfOffset(buffer.getLineEndOffset(x))</code>
+	 * does not return <code>x</code> but <code>x+1</code>.
 	 * @since jEdit 4.0pre1
 	 */
 	public int getLineEndOffset(int line)
@@ -519,23 +524,23 @@ public class JEditBuffer
 		{
 			readLock();
 
-			int start = (line == 0 ? 0 : lineMgr.getLineEndOffset(line - 1)); 
+			int start = (line == 0 ? 0 : lineMgr.getLineEndOffset(line - 1));
 			int end = lineMgr.getLineEndOffset(line);
 			if((start+relativeStartOffset)>end)
 			{
 				throw new IllegalArgumentException("This index is outside the line length (start+relativeOffset):"+start+" + "+relativeStartOffset+" > "+"endffset:"+end);
 			}
 			else
-			{	
+			{
 				getText(start+relativeStartOffset,end - start -relativeStartOffset- 1,segment);
-			}	
+			}
 		}
 		finally
 		{
 			readUnlock();
 		}
 	} //}}}
-	
+
 	//{{{ getLineSegment() method
 	/**
 	 * Returns the text on the specified line.
@@ -676,45 +681,7 @@ public class JEditBuffer
 	 */
 	public void insert(int offset, String str)
 	{
-		if(str == null)
-			return;
-
-		int len = str.length();
-
-		if(len == 0)
-			return;
-
-		if(isReadOnly())
-			throw new RuntimeException("buffer read-only");
-
-		try
-		{
-			writeLock();
-
-			if(offset < 0 || offset > contentMgr.getLength())
-				throw new ArrayIndexOutOfBoundsException(offset);
-
-			contentMgr.insert(offset,str);
-
-			integerArray.clear();
-
-			for(int i = 0; i < len; i++)
-			{
-				if(str.charAt(i) == '\n')
-					integerArray.add(i + 1);
-			}
-
-			if(!undoInProgress)
-			{
-				undoMgr.contentInserted(offset,len,str,!dirty);
-			}
-
-			contentInserted(offset,len,integerArray);
-		}
-		finally
-		{
-			writeUnlock();
-		}
+		insert(offset, (CharSequence) str);
 	}
 
 	/**
@@ -725,7 +692,23 @@ public class JEditBuffer
 	 */
 	public void insert(int offset, Segment seg)
 	{
-		if(seg.count == 0)
+		insert(offset, (CharSequence) seg);
+	}
+
+	/**
+	 * Inserts a string into the buffer.
+	 * @param offset The offset
+	 * @param seq The charsequence
+	 * @since jEdit 5.0pre1
+	 */
+	public void insert(int offset, CharSequence seq)
+	{
+		if(seq == null)
+			return;
+
+		int len = seq.length();
+
+		if(len == 0)
 			return;
 
 		if(isReadOnly())
@@ -738,23 +721,23 @@ public class JEditBuffer
 			if(offset < 0 || offset > contentMgr.getLength())
 				throw new ArrayIndexOutOfBoundsException(offset);
 
-			contentMgr.insert(offset,seg);
+			contentMgr.insert(offset,seq);
 
 			integerArray.clear();
 
-			for(int i = 0; i < seg.count; i++)
+			for(int i = 0; i < len; i++)
 			{
-				if(seg.array[seg.offset + i] == '\n')
+				if(seq.charAt(i) == '\n')
 					integerArray.add(i + 1);
 			}
 
 			if(!undoInProgress)
 			{
-				undoMgr.contentInserted(offset,seg.count,
-					seg.toString(),!dirty);
+				undoMgr.contentInserted(offset,len,
+							seq.toString(),!dirty);
 			}
 
-			contentInserted(offset,seg.count,integerArray);
+			contentInserted(offset,len,integerArray);
 		}
 		finally
 		{
@@ -991,6 +974,39 @@ public class JEditBuffer
 		}
 	} //}}}
 
+	//{{{ simpleIndentLine() method
+	/**
+	 * Simply indents the given line to the same level as the previous nonempty line
+	 * @param lineIndex The line number to indent
+	 * @since jEdit 5.0
+	 */
+	public void simpleIndentLine(int lineIndex)
+	{
+		int[] whitespaceChars = new int[1];
+		int currentIndent = getCurrentIndentForLine(lineIndex, whitespaceChars);
+
+		int prevLineIndex = getPriorNonEmptyLine(lineIndex);
+		if (prevLineIndex == -1)
+			return;
+
+		String indentString = StandardUtilities.getIndentString(
+			getLineText(prevLineIndex));
+
+		// Do it
+		try
+		{
+			beginCompoundEdit();
+
+			int start = getLineStartOffset(lineIndex);
+			remove(start, whitespaceChars[0]);
+			insert(start, indentString);
+		}
+		finally
+		{
+			endCompoundEdit();
+		}
+	} //}}}
+
 	//{{{ indentLine() methods
 	/**
 	 * Indents the specified line.
@@ -1356,9 +1372,8 @@ loop:		for(int i = 0; i < seg.count; i++)
 				: lineMgr.getLineContext(i - 1)
 			);
 
-			context = tokenMarker.markTokens(prevContext,
-				(i == lineIndex ? tokenHandler
-				: DummyTokenHandler.INSTANCE), seg);
+			TokenHandler _tokenHandler = i == lineIndex ? tokenHandler : DummyTokenHandler.INSTANCE;
+			context = markTokens(seg, prevContext, _tokenHandler);
 			lineMgr.setLineContext(i,context);
 		}
 
@@ -1398,7 +1413,9 @@ loop:		for(int i = 0; i < seg.count; i++)
 
 	//{{{ createPosition() method
 	/**
-	 * Creates a floating position.
+	 * Creates a floating position (<code>javax.swing.text.Position</code>).
+	 * The position is retained despite text editions.
+	 * <p>No explicit removal of position is necessary, only dereferencing it.
 	 * @param offset The offset
 	 */
 	public Position createPosition(int offset)
@@ -2408,6 +2425,7 @@ loop:		for(int i = 0; i < seg.count; i++)
 	 */
 	protected boolean contextInsensitive;
 	protected UndoManager undoMgr;
+	protected TokenMarker tokenMarker;
 
 	//{{{ Event firing methods
 
@@ -2678,6 +2696,14 @@ loop:		for(int i = 0; i < seg.count; i++)
 		}
 	} //}}}
 
+	//{{{ markTokens() method
+	protected TokenMarker.LineContext markTokens(Segment seg, TokenMarker.LineContext prevContext,
+						     TokenHandler _tokenHandler)
+	{
+		TokenMarker.LineContext context = tokenMarker.markTokens(prevContext, _tokenHandler, seg);
+		return context;
+	} //}}}
+
 	//{{{ Used to store property values
 	protected static class PropValue
 	{
@@ -2717,7 +2743,6 @@ loop:		for(int i = 0; i < seg.count; i++)
 	private final PositionManager positionMgr;
 	private FoldHandler foldHandler;
 	private final IntegerArray integerArray;
-	private TokenMarker tokenMarker;
 	private boolean undoInProgress;
 	private boolean dirty;
 	private boolean readOnly;
@@ -2727,7 +2752,7 @@ loop:		for(int i = 0; i < seg.count; i++)
 	private boolean io;
 	private final Map<Object, PropValue> properties;
 	private final Object propertyLock;
-	public boolean elasticTabstopsOn = false; 
+	public boolean elasticTabstopsOn = false;
 	private ColumnBlock columnBlock;
 
 	//{{{ getListener() method
@@ -2797,7 +2822,8 @@ loop:		for(int i = 0; i < seg.count; i++)
 					// encoding mustn't be set this way as it must
 					// be equal to encoding used to load or save the
 					// file.
-					if (!name.equals(ENCODING)) {
+					if (!name.equals(ENCODING))
+					{
 						// use the low-level property setting code
 						// so that if we have a buffer-local
 						// property with the same value as a default,
@@ -2864,21 +2890,23 @@ loop:		for(int i = 0; i < seg.count; i++)
 	} //}}}
 
 	//{{{ updateColumnBlocks() method
-	public void updateColumnBlocks(int startLine,int endLine,int startColumn,Node parent)
+	public void updateColumnBlocks(int startLine,int endLine,int startColumn, Node parent)
 	{
-		if((parent!=null)&&(startLine>=0)&&(endLine>=0)&&(startLine<=endLine))
-		{	
+		if (parent != null && startLine >= 0 && endLine >= 0 && startLine <= endLine)
+		{
 			int currentLine = startLine;
 			int colBlockWidth=0;
 			Vector<ColumnBlockLine> columnBlockLines = new Vector<ColumnBlockLine>();
 			//while(currentLine<=endLine)
-			for(int ik=startLine-((ColumnBlock)parent).getStartLine();currentLine<=endLine;ik++)
+			ColumnBlock parentColumnBlock = (ColumnBlock) parent;
+			for(int ik=startLine- parentColumnBlock.getStartLine();currentLine<=endLine;ik++)
 			{
 				Segment seg = new Segment();
-				int actualStart =  startColumn ;
-				if(((ColumnBlock)parent).getLines().size()>0)
+				int actualStart =  startColumn;
+				if(!parentColumnBlock.getLines().isEmpty())
 				{
-					ColumnBlockLine line = ((ColumnBlockLine)(((ColumnBlock)parent).getLines().elementAt(ik)));
+					ColumnBlockLine line =
+						parentColumnBlock.getLines().elementAt(ik);
 					if(currentLine!=line.getLine())
 					{
 						throw new IllegalArgumentException();
@@ -2890,14 +2918,19 @@ loop:		for(int i = 0; i < seg.count; i++)
 				if(tabPos>=0)
 				{
 					columnBlockLines.add(new ColumnBlockLine(currentLine, actualStart, actualStart+tabPos));
-					if( tabPos>colBlockWidth)
+					if(tabPos>colBlockWidth)
 					{
 						colBlockWidth =  tabPos;
 					}
 				}
-				if((( tabPos<0)&&(columnBlockLines.size()>0))||((columnBlockLines.size()>0)&&(currentLine==endLine)))
+				if (tabPos < 0 && !columnBlockLines.isEmpty()
+				    || !columnBlockLines.isEmpty() && currentLine == endLine)
 				{
-					ColumnBlock  block = new ColumnBlock(this,((ColumnBlockLine)columnBlockLines.elementAt(0)).getLine(),startColumn+colBlockWidth,((ColumnBlockLine)columnBlockLines.elementAt(columnBlockLines.size()-1)).getLine(),startColumn+colBlockWidth);
+					ColumnBlock  block = new ColumnBlock(this,
+									     columnBlockLines.elementAt(0).getLine(),
+									     startColumn+colBlockWidth,
+									     columnBlockLines.elementAt(columnBlockLines.size()-1).getLine(),
+									     startColumn+colBlockWidth);
 					block.setLines(columnBlockLines);
 					block.setParent(parent);
 					block.setWidth(colBlockWidth);
@@ -2917,9 +2950,9 @@ loop:		for(int i = 0; i < seg.count; i++)
 		}
 	}
 	//}}}
-	
+
 	//{{{ getTabStopPosition() method
-	public int getTabStopPosition(Segment seg )
+	public int getTabStopPosition(Segment seg)
 	{
 		for (int i = 0; i < seg.count; i++)
 		{
@@ -2931,9 +2964,9 @@ loop:		for(int i = 0; i < seg.count; i++)
 		return -5;
 	}
 	 //}}}
-	
-	public final String columnBlockLock = "columnBlockLock";
-	
+
+	public final Object columnBlockLock = new Object();
+
 	//{{{ indentUsingElasticTabstops() method
 	public void indentUsingElasticTabstops()
 	{
@@ -2941,15 +2974,15 @@ loop:		for(int i = 0; i < seg.count; i++)
 		{
 			columnBlock = new ColumnBlock(this,0,getLineCount()-1);
 			updateColumnBlocks(0, lineMgr.getLineCount()-1, 0, columnBlock);
-		}	
+		}
 	}
 	 //}}}
-	
+
 	//{{{ getColumnBlock() method
 	public ColumnBlock getColumnBlock()
 	{
 		return columnBlock;
 	}
 	 //}}}
-//}}}	
+//}}}
 }
diff --git a/org/gjt/sp/jedit/buffer/LineManager.java b/org/gjt/sp/jedit/buffer/LineManager.java
index 195183a..2dfa01c 100644
--- a/org/gjt/sp/jedit/buffer/LineManager.java
+++ b/org/gjt/sp/jedit/buffer/LineManager.java
@@ -37,7 +37,7 @@ import org.gjt.sp.util.Log;
  * called through, implements such protection.
  *
  * @author Slava Pestov
- * @version $Id: LineManager.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: LineManager.java 21685 2012-05-19 15:38:08Z jarekczek $
  * @since jEdit 4.2pre3
  */
 public class LineManager
@@ -61,6 +61,20 @@ public class LineManager
 	//{{{ getLineOfOffset() method
 	public int getLineOfOffset(int offset)
 	{
+		/*
+		 * Performance optimization: assumption is that this method
+		 * is called many times for the same line.
+		 * Not optimizing the first line is intentional,
+		 * profiling proves this is the right approach (#3528212).
+		 */
+		if(getLineOfOffsetLine > 0 && getLineOfOffsetLine < lineCount)
+		{
+			int s = getLineEndOffset(getLineOfOffsetLine - 1);
+			int e = getLineEndOffset(getLineOfOffsetLine);
+			if(offset >= s && offset < e)
+				return getLineOfOffsetLine;
+		}
+
 		int start = 0;
 		int end = lineCount - 1;
 
@@ -70,24 +84,29 @@ public class LineManager
 			{
 			case 0:
 				if(getLineEndOffset(start) <= offset)
-					return start + 1;
+					getLineOfOffsetLine = start + 1;
 				else
-					return start;
+					getLineOfOffsetLine = start;
+				return getLineOfOffsetLine;
 			case 1:
 				if(getLineEndOffset(start) <= offset)
 				{
 					if(getLineEndOffset(end) <= offset)
-						return end + 1;
+						getLineOfOffsetLine = end + 1;
 					else
-						return end;
+						getLineOfOffsetLine = end;
 				}
 				else
-					return start;
+					getLineOfOffsetLine = start;
+				return getLineOfOffsetLine;
 			default:
 				int pivot = (end + start) / 2;
 				int value = getLineEndOffset(pivot);
 				if(value == offset)
-					return pivot + 1;
+				{
+					getLineOfOffsetLine = pivot + 1; 
+					return getLineOfOffsetLine;
+				}
 				else if(value < offset)
 					start = pivot + 1;
 				else
@@ -303,6 +322,11 @@ public class LineManager
 	 * have an invalid fold level.
 	 */
 	private int firstInvalidFoldLevel;
+
+	/**
+	 * Performance helper for {@link #getLineOfOffset}. 
+	 */
+	private int getLineOfOffsetLine = -1;
 	//}}}
 
 	//{{{ setLineEndOffset() method
diff --git a/org/gjt/sp/jedit/buffer/PositionManager.java b/org/gjt/sp/jedit/buffer/PositionManager.java
index 98d6c90..a96d81f 100644
--- a/org/gjt/sp/jedit/buffer/PositionManager.java
+++ b/org/gjt/sp/jedit/buffer/PositionManager.java
@@ -31,9 +31,13 @@ import org.gjt.sp.util.Log;
 /**
  * A class internal to jEdit's document model. You should not use it
  * directly.
+ * <p>Positions are created explicitly and removed implicitly, when
+ * there are no more references to it. For this implicit removal to work
+ * a top (referenced outside) and a bottom half (referenced internally)
+ * of the position are implemented separately.
  *
  * @author Slava Pestov
- * @version $Id: PositionManager.java 17813 2010-05-12 14:20:37Z k_satoda $
+ * @version $Id: PositionManager.java 21727 2012-05-27 17:11:01Z jarekczek $
  * @since jEdit 4.2pre3
  */
 class PositionManager
@@ -45,6 +49,7 @@ class PositionManager
 	} //}}}
 	
 	//{{{ createPosition() method
+	/** No explicit removal is required. Unreferencing is enough. */
 	public synchronized Position createPosition(int offset)
 	{
 		PosBottomHalf bh = new PosBottomHalf(offset);
@@ -105,6 +110,12 @@ class PositionManager
 	//{{{ Inner classes
 
 	//{{{ PosTopHalf class
+	/** A wrapper for real position handling done by
+	  * <code>PosBottomHalf</code>, so Top means the part that is
+	  * visible. When there are no more references
+	  * to <code>PosTopHalf</code> and garbage
+	  * collector eats it, the position is removed together with its
+	  * bottom half. */
 	class PosTopHalf implements Position
 	{
 		final PosBottomHalf bh;
@@ -134,6 +145,9 @@ class PositionManager
 	} //}}}
 
 	//{{{ PosBottomHalf class
+	/** 'bottom' means the part
+	  * that is not visible outside and stays only here in
+	  * <code>positions</code> map.*/
 	class PosBottomHalf implements Comparable<PosBottomHalf>
 	{
 		int offset;
diff --git a/org/gjt/sp/jedit/bufferio/BufferLoadRequest.java b/org/gjt/sp/jedit/bufferio/BufferLoadRequest.java
index bf459e5..719d503 100644
--- a/org/gjt/sp/jedit/bufferio/BufferLoadRequest.java
+++ b/org/gjt/sp/jedit/bufferio/BufferLoadRequest.java
@@ -39,7 +39,7 @@ import org.gjt.sp.util.*;
 /**
  * A buffer load request.
  * @author Slava Pestov
- * @version $Id: BufferLoadRequest.java 17734 2010-05-04 22:08:41Z kpouer $
+ * @version $Id: BufferLoadRequest.java 21594 2012-04-22 11:44:00Z jarekczek $
  */
 public class BufferLoadRequest extends BufferIORequest
 {
@@ -338,7 +338,7 @@ public class BufferLoadRequest extends BufferIORequest
 			{
 				pp[1] = "See details in Activity Log";
 			}
-			VFSManager.error(view,path,"ioerror.encoding-error",pp);
+			VFSManager.error(view,path,"ioerror.encoding-error",pp,Log.NOTICE);
 			markedStream = rewindContentsStream(markedStream, gzipped);
 			read(EncodingServer.getEncoding(
 				buffer.getStringProperty(JEditBuffer.ENCODING)
diff --git a/org/gjt/sp/jedit/bufferset/BufferSet.java b/org/gjt/sp/jedit/bufferset/BufferSet.java
index 762b215..f46a854 100644
--- a/org/gjt/sp/jedit/bufferset/BufferSet.java
+++ b/org/gjt/sp/jedit/bufferset/BufferSet.java
@@ -1,5 +1,5 @@
 /*
- * BufferSet.java - A Set of Buffer.
+ * BufferSet.java - An ordered list of buffers.
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
@@ -34,14 +34,15 @@ import java.util.Collections;
 import java.util.Comparator;
 //}}}
 
-/**
- * A BufferSet is an ordered list of buffers.
+/** An ordered list of buffers, normally attached to an EditPane
+ *  and viewed in a BufferSwitcher.
  *
  * @author Matthieu Casanova
  * @since jEdit 4.3pre15
  */
 public class BufferSet
 {
+	/** Possible scopes for BufferSets. */
 	public enum Scope { editpane, view, global }
 
 	//{{{ BufferSet constructor
@@ -347,7 +348,6 @@ public class BufferSet
 	private Comparator<Buffer> sorter;
 	//}}}
 
-
 	//{{{ NameSorter class
 	private static class NameSorter implements Comparator<Buffer>
 	{
diff --git a/org/gjt/sp/jedit/datatransfer/ListVFSFileTransferable.java b/org/gjt/sp/jedit/datatransfer/ListVFSFileTransferable.java
index 8b31c95..fc9f715 100644
--- a/org/gjt/sp/jedit/datatransfer/ListVFSFileTransferable.java
+++ b/org/gjt/sp/jedit/datatransfer/ListVFSFileTransferable.java
@@ -3,7 +3,7 @@
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
- * Copyright (C) 2010 Matthieu Casanova
+ * Copyright (C) 2010, 2012 Matthieu Casanova
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -21,6 +21,7 @@
  */
 package org.gjt.sp.jedit.datatransfer;
 
+//{{{ Imports
 import org.gjt.sp.jedit.io.FileVFS;
 import org.gjt.sp.jedit.io.VFSFile;
 
@@ -33,6 +34,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+//}}}
 
 /**
  * @author Matthieu Casanova
@@ -45,21 +47,25 @@ public class ListVFSFileTransferable implements Transferable
 	
 	private final List<VFSFile> files;
 
+	//{{{ ListVFSFileTransferable constructor
 	public ListVFSFileTransferable(VFSFile[] files)
 	{
 		this.files = Collections.unmodifiableList(Arrays.asList(files));
-	}
+	} //}}}
 
+	//{{{ getTransferDataFlavors() method
 	public DataFlavor[] getTransferDataFlavors()
 	{
 		return supported;
-	}
+	} //}}}
 
+	//{{{ isDataFlavorSupported() method
 	public boolean isDataFlavorSupported(DataFlavor flavor)
 	{
 		return jEditFileList.equals(flavor) || DataFlavor.stringFlavor.equals(flavor);
-	}
+	} //}}}
 
+	//{{{ getTransferData() method
 	public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
 	{
 		if (jEditFileList.equals(flavor))
@@ -74,7 +80,7 @@ public class ListVFSFileTransferable implements Transferable
 				VFSFile vfsFile = files.get(i);
 				if (i != 0)
 					builder.append('\n');
-				builder.append(vfsFile);
+				builder.append(vfsFile.getPath());
 			}
 			return builder.toString();
 		}
@@ -89,5 +95,5 @@ public class ListVFSFileTransferable implements Transferable
 			return files;
 		}
 		throw new UnsupportedFlavorException(flavor);
-	}
+	} //}}}
 }
diff --git a/org/gjt/sp/jedit/gui/AbbrevEditor.java b/org/gjt/sp/jedit/gui/AbbrevEditor.java
index 8eeb40b..4bf31a7 100644
--- a/org/gjt/sp/jedit/gui/AbbrevEditor.java
+++ b/org/gjt/sp/jedit/gui/AbbrevEditor.java
@@ -29,6 +29,7 @@ import java.awt.*;
 import org.gjt.sp.jedit.*;
 //}}}
 
+/** Panel for editing abbreviations */
 public class AbbrevEditor extends JPanel
 {
 	//{{{ AbbrevEditor constructor
diff --git a/org/gjt/sp/jedit/gui/AboutDialog.java b/org/gjt/sp/jedit/gui/AboutDialog.java
index 67e76dd..37be908 100644
--- a/org/gjt/sp/jedit/gui/AboutDialog.java
+++ b/org/gjt/sp/jedit/gui/AboutDialog.java
@@ -30,10 +30,13 @@ import java.awt.*;
 import java.awt.geom.*;
 import java.awt.image.BufferedImage;
 import java.util.*;
+import java.util.List;
+
 import org.gjt.sp.jedit.*;
 import org.gjt.sp.util.Log;
 //}}}
-
+/** "About jEdit" dialog
+*/
 public class AboutDialog extends JDialog implements ActionListener
 {
 	//{{{ AboutDialog constructor
@@ -103,7 +106,7 @@ public class AboutDialog extends JDialog implements ActionListener
 		private final Font bottomLineFont = defaultFont.deriveFont(9.8f);
 		private final String sBottomLine;
 		private final ImageIcon image;
-		private final Vector<String> vLines;
+		private final List<String> vLines;
 		private static boolean doWork;
 		private Thread th;
 		private final FontMetrics fm;
@@ -136,7 +139,6 @@ public class AboutDialog extends JDialog implements ActionListener
 			fm = getFontMetrics(defaultFont);
 			FontMetrics fmBottom = getFontMetrics(bottomLineFont);
 			iLineHeight = fm.getHeight();
-			vLines = new Vector<String>(50);
 			image = (ImageIcon)GUIUtilities.loadIcon("about.png");
 			MediaTracker tracker = new MediaTracker(this);
 			tracker.addImage(image.getImage(), 0);
@@ -157,12 +159,12 @@ public class AboutDialog extends JDialog implements ActionListener
 			h = d.height;
 			iBottomLineXOffset = (w / 2) - (fmBottom.stringWidth(sBottomLine) / 2);
 			iBottomLineYOffset = h-iLineHeight/2;
-			StringTokenizer st = new StringTokenizer(
-				jEdit.getProperty("about.text"),"\n");
-			while(st.hasMoreTokens())
-			{
-				vLines.add(st.nextToken());
-			}
+
+			String aboutText = jEdit.getProperty("about.text.prefix") + "\n \n"
+				+ jEdit.getProperty("about.text.contributors") + "\n \n" +
+				jEdit.getProperty("about.text.suffix");
+			String[] contributors = aboutText.split("\n");
+			vLines = Arrays.asList(contributors);
 
 			iLineCount = vLines.size();
 			iListHeight = iLineCount * iLineHeight;
@@ -184,12 +186,12 @@ public class AboutDialog extends JDialog implements ActionListener
 			}
 			else if ((e.getKeyCode() == KeyEvent.VK_LEFT) ||
 					(e.getKeyCode() == KeyEvent.VK_RIGHT) ||
-					(e.getKeyCode() == KeyEvent.VK_SPACE)) 
+					(e.getKeyCode() == KeyEvent.VK_SPACE))
 			{
 				skipDrain = ! skipDrain;
 				e.consume();
 			}
-			else if ((e.getKeyCode()) == KeyEvent.VK_ESCAPE) 
+			else if ((e.getKeyCode()) == KeyEvent.VK_ESCAPE)
 			{
 				e.consume();
 				JDialog d = GUIUtilities.getParentDialog(this);
diff --git a/org/gjt/sp/jedit/gui/AbstractContextOptionPane.java b/org/gjt/sp/jedit/gui/AbstractContextOptionPane.java
index f860ff5..c9805a7 100644
--- a/org/gjt/sp/jedit/gui/AbstractContextOptionPane.java
+++ b/org/gjt/sp/jedit/gui/AbstractContextOptionPane.java
@@ -36,7 +36,7 @@ import org.gjt.sp.util.StandardUtilities;
  *
  * @author Slava Pestov
  * @author Marcelo Vanzin
- * @version $Id: AbstractContextOptionPane.java 19655 2011-07-07 10:02:06Z kpouer $
+ * @version $Id: AbstractContextOptionPane.java 21772 2012-06-08 19:43:00Z jarekczek $
  * @since jEdit 4.3pre13
  */
 public abstract class AbstractContextOptionPane extends AbstractOptionPane
@@ -118,6 +118,10 @@ public abstract class AbstractContextOptionPane extends AbstractOptionPane
 		buttons.add(moveDown);
 		buttons.add(Box.createGlue());
 
+		includeOptionsLink = new JCheckBox(jEdit.getProperty("options.context.includeOptionsLink.label"));
+		includeOptionsLink.setSelected(jEdit.getBooleanProperty("options.context.includeOptionsLink"));
+		buttons.add(includeOptionsLink);
+		
 		// add "reset to defaults" button
 		reset = new RolloverButton(GUIUtilities.loadIcon(jEdit.getProperty("options.context.reset.icon")));
 		reset.setToolTipText(jEdit.getProperty("options.context.reset"));
@@ -176,6 +180,7 @@ public abstract class AbstractContextOptionPane extends AbstractOptionPane
 			buf.append(((MenuItem) listModel.elementAt(i)).actionName);
 		}
 		saveContextMenu(buf.toString());
+		jEdit.setBooleanProperty("options.context.includeOptionsLink", includeOptionsLink.isSelected());
 	}
 
 	// private members
@@ -185,6 +190,7 @@ public abstract class AbstractContextOptionPane extends AbstractOptionPane
 	private JButton remove;
 	private JButton moveUp, moveDown;
 	private JButton reset;
+	private JCheckBox includeOptionsLink;
 	private JLabel caption;
 	private JPanel buttons;
 
diff --git a/org/gjt/sp/jedit/gui/ActionBar.java b/org/gjt/sp/jedit/gui/ActionBar.java
index f1f93ab..dc3523b 100644
--- a/org/gjt/sp/jedit/gui/ActionBar.java
+++ b/org/gjt/sp/jedit/gui/ActionBar.java
@@ -33,8 +33,7 @@ import org.gjt.sp.jedit.*;
 import org.gjt.sp.util.StandardUtilities;
 //}}}
 
-/**
- * Action invocation bar.
+/** Action invocation bar.
  */
 public class ActionBar extends JToolBar
 {
@@ -43,7 +42,7 @@ public class ActionBar extends JToolBar
 	{
 		this.view = view;
 		this.temp = temp;
-		
+
 		setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
 		setFloatable(false);
 		add(Box.createHorizontalStrut(2));
diff --git a/org/gjt/sp/jedit/gui/AddAbbrevDialog.java b/org/gjt/sp/jedit/gui/AddAbbrevDialog.java
index ab61f9a..bc207bf 100644
--- a/org/gjt/sp/jedit/gui/AddAbbrevDialog.java
+++ b/org/gjt/sp/jedit/gui/AddAbbrevDialog.java
@@ -25,6 +25,7 @@ import java.awt.event.*;
 import java.awt.*;
 import org.gjt.sp.jedit.*;
 
+/** Dialog displayed when expanding an unknown abbreviation */
 public class AddAbbrevDialog extends JDialog
 {
 	public AddAbbrevDialog(View view, String abbrev)
diff --git a/org/gjt/sp/jedit/gui/AnimatedIcon.java b/org/gjt/sp/jedit/gui/AnimatedIcon.java
index 69618ab..47723b9 100644
--- a/org/gjt/sp/jedit/gui/AnimatedIcon.java
+++ b/org/gjt/sp/jedit/gui/AnimatedIcon.java
@@ -28,8 +28,9 @@ import java.awt.event.*;
 import javax.swing.*;
 //}}}
 
-/**
- * A animated version of ImageIcon. It can be used anywhere an ImageIcon can be.
+/** A Animated version of ImageIcon.
+ *
+ * It can be used anywhere an ImageIcon can be.
  */
 public class AnimatedIcon extends ImageIcon
 {
diff --git a/org/gjt/sp/jedit/gui/BeanShellErrorDialog.java b/org/gjt/sp/jedit/gui/BeanShellErrorDialog.java
index 0ed3845..7390d9d 100644
--- a/org/gjt/sp/jedit/gui/BeanShellErrorDialog.java
+++ b/org/gjt/sp/jedit/gui/BeanShellErrorDialog.java
@@ -29,11 +29,9 @@ import java.awt.event.*;
 import org.gjt.sp.jedit.*;
 //}}}
 
-/**
- * A dialog box showing a stack trace. Perhaps badly named, since any error, not
- * just a BeanShell error can be shown.
+/** A dialog box showing a stack trace. Perhaps badly named, since any error, not just a BeanShell error can be shown.
  * @author Slava Pestov
- * @version $Id: BeanShellErrorDialog.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: BeanShellErrorDialog.java 21502 2012-03-29 17:19:44Z ezust $
  */
 public class BeanShellErrorDialog extends TextAreaDialog
 {
diff --git a/org/gjt/sp/jedit/gui/BufferOptions.java b/org/gjt/sp/jedit/gui/BufferOptions.java
index 68f624d..279b6f2 100644
--- a/org/gjt/sp/jedit/gui/BufferOptions.java
+++ b/org/gjt/sp/jedit/gui/BufferOptions.java
@@ -40,12 +40,10 @@ import org.gjt.sp.jedit.*;
 
 //}}}
 
-/**
-
- * Buffer-specific options dialog.
+/** Buffer-specific options dialog.
  * @author Slava Pestov
- * @version $Id: BufferOptions.java 12504 2008-04-22 23:12:43Z ezust $
- * 
+ * @version $Id: BufferOptions.java 21502 2012-03-29 17:19:44Z ezust $
+ *
  */
 
 public class BufferOptions extends EnhancedDialog
diff --git a/org/gjt/sp/jedit/gui/BufferSwitcher.java b/org/gjt/sp/jedit/gui/BufferSwitcher.java
index 53c9a27..bc0f100 100644
--- a/org/gjt/sp/jedit/gui/BufferSwitcher.java
+++ b/org/gjt/sp/jedit/gui/BufferSwitcher.java
@@ -30,13 +30,15 @@ import org.gjt.sp.util.ThreadUtilities;
 //}}}
 
 /** BufferSwitcher class
-   @version $Id: BufferSwitcher.java 20016 2011-09-24 12:18:28Z kpouer $
+   @version $Id: BufferSwitcher.java 20764 2012-01-12 21:05:23Z jarekczek $
 */
 public class BufferSwitcher extends JComboBox
 {
 	// private members
 	private final EditPane editPane;
 	private boolean updating;
+	// item that was selected before popup menu was opened
+	private Object itemSelectedBefore;
 
 	public BufferSwitcher(final EditPane editPane)
 	{
@@ -45,24 +47,32 @@ public class BufferSwitcher extends JComboBox
 		//setFont(new Font("Dialog",Font.BOLD,10));
 		setRenderer(new BufferCellRenderer());
 		setMaximumRowCount(jEdit.getIntegerProperty("bufferSwitcher.maxRowCount",10));
-		addActionListener(new ActionHandler());
 		addPopupMenuListener(new PopupMenuListener()
 		{
 			@Override
 			public void popupMenuWillBecomeVisible(
-				PopupMenuEvent e) {}
+				PopupMenuEvent e)
+			{
+				itemSelectedBefore = getSelectedItem();
+			}
 
 			@Override
 			public void popupMenuWillBecomeInvisible(
 				PopupMenuEvent e)
 			{
+				if (!updating)
+				{
+					Buffer buffer = (Buffer)getSelectedItem();
+					if(buffer != null)
+						editPane.setBuffer(buffer);
+				}
 				editPane.getTextArea().requestFocus();
 			}
 
 			@Override
 			public void popupMenuCanceled(PopupMenuEvent e)
 			{
-				editPane.getTextArea().requestFocus();
+				setSelectedItem(itemSelectedBefore);
 			}
 		});
 	}
@@ -91,20 +101,6 @@ public class BufferSwitcher extends JComboBox
 		ThreadUtilities.runInDispatchThread(runnable);
 	}
 
-	class ActionHandler implements ActionListener
-	{
-		@Override
-		public void actionPerformed(ActionEvent evt)
-		{
-			if(!updating)
-			{
-				Buffer buffer = (Buffer)getSelectedItem();
-				if(buffer != null) 
-					editPane.setBuffer(buffer);
-			}
-		}
-	}
-
 	static class BufferCellRenderer extends DefaultListCellRenderer
 	{
 		@Override
@@ -127,3 +123,5 @@ public class BufferSwitcher extends JComboBox
 		}
 	}
 }
+
+// :noTabs=false:
diff --git a/org/gjt/sp/jedit/gui/CloseDialog.java b/org/gjt/sp/jedit/gui/CloseDialog.java
index 01d92dc..09e180c 100644
--- a/org/gjt/sp/jedit/gui/CloseDialog.java
+++ b/org/gjt/sp/jedit/gui/CloseDialog.java
@@ -36,7 +36,7 @@ import org.gjt.sp.jedit.*;
 import org.gjt.sp.util.Log;
 //}}}
 
-/**
+/** Close all buffers dialog
  * @author Slava Pestov
  */
 public class CloseDialog extends EnhancedDialog
@@ -74,8 +74,8 @@ public class CloseDialog extends EnhancedDialog
 
 		for(Buffer buffer: buffers)
 		{
-			if(buffer.isDirty()) 
-				bufferModel.addElement(buffer.getPath()); 
+			if(buffer.isDirty())
+				bufferModel.addElement(buffer.getPath());
 		}
 
 		centerPanel.add(BorderLayout.CENTER,new JScrollPane(bufferList));
diff --git a/org/gjt/sp/jedit/gui/ColorWellButton.java b/org/gjt/sp/jedit/gui/ColorWellButton.java
index aeb3519..5928add 100644
--- a/org/gjt/sp/jedit/gui/ColorWellButton.java
+++ b/org/gjt/sp/jedit/gui/ColorWellButton.java
@@ -31,13 +31,12 @@ import org.gjt.sp.jedit.GUIUtilities;
 import org.gjt.sp.jedit.OperatingSystem;
 //}}}
 
-/**
- * A button that, when clicked, shows a color chooser.
+/** A button that, when clicked, shows a color chooser.
  *
  * You can get and set the currently selected color using
  * {@link #getSelectedColor()} and {@link #setSelectedColor(Color)}.
  * @author Slava Pestov
- * @version $Id: ColorWellButton.java 18910 2010-10-31 14:04:47Z daleanson $
+ * @version $Id: ColorWellButton.java 21502 2012-03-29 17:19:44Z ezust $
  */
 public class ColorWellButton extends JButton
 {
@@ -120,7 +119,7 @@ public class ColorWellButton extends JButton
 					ColorWellButton.this.getSelectedColor());
 			}
 			if (c != null) {
-				setSelectedColor(c);	
+				setSelectedColor(c);
 			}
 		}
 	} //}}}
diff --git a/org/gjt/sp/jedit/gui/CompleteWord.java b/org/gjt/sp/jedit/gui/CompleteWord.java
index 9e6b911..0ac5f67 100644
--- a/org/gjt/sp/jedit/gui/CompleteWord.java
+++ b/org/gjt/sp/jedit/gui/CompleteWord.java
@@ -54,8 +54,7 @@ import org.gjt.sp.jedit.textarea.JEditTextArea;
 import org.gjt.sp.util.StandardUtilities;
 //}}}
 
-/**
- * A completion popup class.
+/** A word completion popup.
  */
 public class CompleteWord extends CompletionPopup
 {
@@ -192,7 +191,7 @@ public class CompleteWord extends CompletionPopup
 
 		return word.toString();
 	} //}}}
-	
+
 	//{{{ getVisibleBuffers() method
 	private static Collection<Buffer> getVisibleBuffers()
 	{
@@ -221,8 +220,8 @@ public class CompleteWord extends CompletionPopup
 		final KeywordMap keywordMap = buffer.getKeywordMapAtOffset(caret);
 		final String noWordSep = getNonAlphaNumericWordChars(
 			buffer,keywordMap);
-		
-		final Collection<Buffer> sourceBuffers = 
+
+		final Collection<Buffer> sourceBuffers =
 			jEdit.getBooleanProperty("completeFromAllBuffers") ?
 				Arrays.asList(jEdit.getBuffers()) :
 				getVisibleBuffers();
diff --git a/org/gjt/sp/jedit/gui/CompletionPopup.java b/org/gjt/sp/jedit/gui/CompletionPopup.java
index a22757c..c4cfb0a 100644
--- a/org/gjt/sp/jedit/gui/CompletionPopup.java
+++ b/org/gjt/sp/jedit/gui/CompletionPopup.java
@@ -24,13 +24,14 @@ package org.gjt.sp.jedit.gui;
 //{{{ Imports
 import java.awt.BorderLayout;
 import java.awt.Component;
+import java.awt.EventQueue;
 import java.awt.Point;
 import java.awt.Rectangle;
 import java.awt.Window;
 
+import java.awt.event.InputEvent;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
-import java.awt.event.KeyListener;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.WindowEvent;
@@ -44,14 +45,12 @@ import javax.swing.JWindow;
 import javax.swing.ListSelectionModel;
 import javax.swing.ListCellRenderer;
 import javax.swing.ScrollPaneConstants;
-import javax.swing.SwingUtilities;
 
 import org.gjt.sp.jedit.GUIUtilities;
 import org.gjt.sp.jedit.View;
 //}}}
 
-/**
- * Popup window for word completion in text area.
+/** Popup window for word completion in text area.
  * This class provides basic UI of completion popup.
  *
  * @since jEdit 4.3pre11
@@ -78,7 +77,7 @@ public class CompletionPopup extends JWindow
 		 * Do the completion.
 		 */
 		public void complete(int index);
-	
+
 		/**
 		 * Returns a component to render a cell for the index
 		 * in the popup.
@@ -101,7 +100,7 @@ public class CompletionPopup extends JWindow
 	 * candidates. All key events for the view are intercepted by
 	 * this popup untill end of completion.
 	 * @since jEdit 4.3pre13
-	 */ 
+	 */
 	public CompletionPopup(View view)
 	{
 		super(view);
@@ -140,6 +139,7 @@ public class CompletionPopup extends JWindow
 	/**
 	 * Quit completion.
 	 */
+	@Override
 	public void dispose()
 	{
 		if (isDisplayable())
@@ -160,8 +160,9 @@ public class CompletionPopup extends JWindow
 			// "Frame does not receives focus after closing
 			// of the owned window"
 			// http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4810575
-			SwingUtilities.invokeLater(new Runnable()
+			EventQueue.invokeLater(new Runnable()
 			{
+				@Override
 				public void run()
 				{
 					view.getTextArea().requestFocus();
@@ -350,11 +351,13 @@ public class CompletionPopup extends JWindow
 	//{{{ CandidateListModel class
 	private class CandidateListModel extends AbstractListModel
 	{
+		@Override
 		public int getSize()
 		{
 			return candidates.getSize();
 		}
 
+		@Override
 		public Object getElementAt(int index)
 		{
 			// This value is not used.
@@ -367,6 +370,7 @@ public class CompletionPopup extends JWindow
 	//{{{ CellRenderer class
 	private class CellRenderer implements ListCellRenderer
 	{
+		@Override
 		public Component getListCellRendererComponent(JList list,
 			Object value, int index,
 			boolean isSelected, boolean cellHasFocus)
@@ -380,6 +384,7 @@ public class CompletionPopup extends JWindow
 	private class KeyHandler extends KeyAdapter
 	{
 		//{{{ keyPressed() method
+		@Override
 		public void keyPressed(KeyEvent e)
 		{
 			CompletionPopup.this.keyPressed(e);
@@ -416,13 +421,15 @@ public class CompletionPopup extends JWindow
 					e.consume();
 					break;
 				case KeyEvent.VK_P:
-					if (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK) {
+					if (e.getModifiersEx() == InputEvent.CTRL_DOWN_MASK)
+					{
 						moveRelative(-1);
 						e.consume();
 					}
 					break;
 				case KeyEvent.VK_N:
-					if (e.getModifiersEx() == KeyEvent.CTRL_DOWN_MASK) {
+					if (e.getModifiersEx() == InputEvent.CTRL_DOWN_MASK)
+					{
 						moveRelative(1);
 						e.consume();
 					}
@@ -438,13 +445,11 @@ public class CompletionPopup extends JWindow
 				default:
 					if(e.isActionKey()
 						|| e.isAltDown()
-						|| e.isMetaDown())
+						|| e.isMetaDown()
+						|| e.isControlDown())
 					{
 						dispose();
 					}
-					else if (e.isControlDown()) {
-						e.consume();
-					}
 					break;
 				}
 			}
@@ -456,6 +461,7 @@ public class CompletionPopup extends JWindow
 		} //}}}
 
 		//{{{ keyTyped() method
+		@Override
 		public void keyTyped(KeyEvent e)
 		{
 			if (e.isControlDown())
@@ -482,6 +488,7 @@ public class CompletionPopup extends JWindow
 	//{{{ MouseHandler class
 	private class MouseHandler extends MouseAdapter
 	{
+		@Override
 		public void mouseClicked(MouseEvent e)
 		{
 			if (doSelectedCompletion())
@@ -498,10 +505,12 @@ public class CompletionPopup extends JWindow
 	//{{{ WindowFocusHandler class
 	private class WindowFocusHandler implements WindowFocusListener
 	{
+		@Override
 		public void windowGainedFocus(WindowEvent e)
 		{
 		}
 
+		@Override
 		public void windowLostFocus(WindowEvent e)
 		{
 			dispose();
diff --git a/org/gjt/sp/jedit/gui/ContextAddDialog.java b/org/gjt/sp/jedit/gui/ContextAddDialog.java
index 4b448ef..e55a578 100644
--- a/org/gjt/sp/jedit/gui/ContextAddDialog.java
+++ b/org/gjt/sp/jedit/gui/ContextAddDialog.java
@@ -51,10 +51,9 @@ import org.gjt.sp.jedit.gui.AbstractContextOptionPane.MenuItem;
 //}}}
 
 
-/**
- * Dialog for showing ActionSets and adding actions to context menus
- * Was package private and located in AbstractContextOptionPane.java
- * until 4.3pre16
+/** Dialog for showing ActionSets and adding actions to context menus
+ *
+ * Was package private and located in AbstractContextOptionPane.java until 4.3pre16
  *
  */
 public class ContextAddDialog extends EnhancedDialog
diff --git a/org/gjt/sp/jedit/gui/DefaultFocusComponent.java b/org/gjt/sp/jedit/gui/DefaultFocusComponent.java
index 2f336b4..d27ad7c 100644
--- a/org/gjt/sp/jedit/gui/DefaultFocusComponent.java
+++ b/org/gjt/sp/jedit/gui/DefaultFocusComponent.java
@@ -22,14 +22,14 @@
 
 package org.gjt.sp.jedit.gui;
 
-/**
- * An interface that provides a method for focusing on the default
- * component. The file system browser implements this in order to
+/** An interface that provides a method for focusing on the default component.
+ *
+ * The file system browser implements this in order to
  * focus on the file system view by default, for example.
  *
  * @since jEdit 4.2pre1
  * @author Slava Pestov
- * @version $Id: DefaultFocusComponent.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: DefaultFocusComponent.java 21502 2012-03-29 17:19:44Z ezust $
  */
 public interface DefaultFocusComponent
 {
diff --git a/org/gjt/sp/jedit/gui/DefaultInputHandler.java b/org/gjt/sp/jedit/gui/DefaultInputHandler.java
index b7c5d20..81006d6 100644
--- a/org/gjt/sp/jedit/gui/DefaultInputHandler.java
+++ b/org/gjt/sp/jedit/gui/DefaultInputHandler.java
@@ -29,11 +29,10 @@ import java.util.Hashtable;
 import org.gjt.sp.jedit.*;
 //}}}
 
-/**
- * The default input handler. It maps sequences of keystrokes into actions
- * and inserts key typed events into the text area.
+/** The default input handler maps sequences of keystrokes into actions and inserts key typed events into the text area.
+ *
  * @author Slava Pestov
- * @version $Id: DefaultInputHandler.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: DefaultInputHandler.java 21502 2012-03-29 17:19:44Z ezust $
  */
 public class DefaultInputHandler extends InputHandler
 {
@@ -136,7 +135,7 @@ public class DefaultInputHandler extends InputHandler
 			}
 			else
 			{
-				if (!dryRun) 
+				if (!dryRun)
 				{
 					readNextChar = null;
 					view.getStatus().setMessage(null);
@@ -147,7 +146,7 @@ public class DefaultInputHandler extends InputHandler
 		Object o = currentBindings.get(keyStroke);
 		if(o == null)
 		{
-			if (!dryRun) 
+			if (!dryRun)
 			{
 				// Don't beep if the user presses some
 				// key we don't know about unless a
@@ -161,13 +160,13 @@ public class DefaultInputHandler extends InputHandler
 					repeatCount = 1;
 					setCurrentBindings(bindings);
 				}
-				else if(input != '\0') 
+				else if(input != '\0')
 				{
-					if (!keyStroke.isFromGlobalContext()) 
+					if (!keyStroke.isFromGlobalContext())
 					{ // let user input be only local
 						userInput(input);
 					}
-				} 
+				}
 				else
 				{
 					// this is retarded. excuse me while I drool
@@ -180,7 +179,7 @@ public class DefaultInputHandler extends InputHandler
 		}
 		else if(o instanceof Hashtable)
 		{
-			if (!dryRun) 
+			if (!dryRun)
 			{
 				setCurrentBindings((Hashtable)o);
 				ShortcutPrefixActiveEvent.firePrefixStateChange(currentBindings, true);
@@ -190,7 +189,7 @@ public class DefaultInputHandler extends InputHandler
 		}
 		else if(o instanceof String)
 		{
-			if (!dryRun) 
+			if (!dryRun)
 			{
 				setCurrentBindings(bindings);
 				sendShortcutPrefixOff();
@@ -214,7 +213,7 @@ public class DefaultInputHandler extends InputHandler
 		}
 		return false;
 	} //}}}
-	
+
 	//{{{ getSymbolicModifierName() method
 	/**
 	 * Returns a the symbolic modifier name for the specified Java modifier
diff --git a/org/gjt/sp/jedit/gui/DockableLayout.java b/org/gjt/sp/jedit/gui/DockableLayout.java
index d2aad70..78b7653 100644
--- a/org/gjt/sp/jedit/gui/DockableLayout.java
+++ b/org/gjt/sp/jedit/gui/DockableLayout.java
@@ -25,7 +25,7 @@ package org.gjt.sp.jedit.gui;
 //{{{ Imports
 import java.awt.*;
 //}}}
-
+/** A more flexible BorderLayout with dockables. */
 public class DockableLayout implements LayoutManager2
 {
 	// for backwards compatibility with plugins that fiddle with
@@ -50,7 +50,7 @@ public class DockableLayout implements LayoutManager2
 
 	//{{{ isAlternateLayout() method
 	/**
-	 * jEdit View option: wide horizontal docking areas versus tall vertical docking areas 
+	 * jEdit View option: wide horizontal docking areas versus tall vertical docking areas
 	 * @return true if using the "alternate layout"
 	 */
 	public boolean isAlternateLayout()
diff --git a/org/gjt/sp/jedit/gui/DockablePanel.java b/org/gjt/sp/jedit/gui/DockablePanel.java
index 3b77b22..06c1de6 100644
--- a/org/gjt/sp/jedit/gui/DockablePanel.java
+++ b/org/gjt/sp/jedit/gui/DockablePanel.java
@@ -23,8 +23,6 @@
 package org.gjt.sp.jedit.gui;
 
 //{{{ Imports
-import org.gjt.sp.jedit.jEdit;
-
 import java.awt.CardLayout;
 import java.awt.Cursor;
 import java.awt.Dimension;
@@ -35,11 +33,13 @@ import java.awt.event.MouseEvent;
 import java.awt.event.MouseMotionListener;
 
 import javax.swing.JPanel;
+import javax.swing.UIManager;
 import javax.swing.border.Border;
 //}}}
 
-/**
- * @version $Id: DockablePanel.java 13259 2008-08-10 20:54:46Z shlomy $
+/** A panel that holds dockable windows.
+ *
+ * @version $Id: DockablePanel.java 21502 2012-03-29 17:19:44Z ezust $
  */
 class DockablePanel extends JPanel
 {
@@ -140,7 +140,7 @@ class DockablePanel extends JPanel
 
 	/** This belong to ResizeMouseHandler but requires to be static. */
 	static Point dragStart;
-	
+
 	//{{{ ResizeMouseHandler class
 	class ResizeMouseHandler extends MouseAdapter implements MouseMotionListener
 	{
@@ -152,7 +152,7 @@ class DockablePanel extends JPanel
 		{
 			if(canDrag)
 			{
-				continuousLayout = jEdit.getBooleanProperty("appearance.continuousLayout");
+				continuousLayout = UIManager.getBoolean("SplitPane.continuousLayout");
 				wm.setResizePos(panel.getDimension(),panel);
 				dragStart = evt.getPoint();
 			}
diff --git a/org/gjt/sp/jedit/gui/DockableWindow.java b/org/gjt/sp/jedit/gui/DockableWindow.java
index 6269d07..87be5a8 100644
--- a/org/gjt/sp/jedit/gui/DockableWindow.java
+++ b/org/gjt/sp/jedit/gui/DockableWindow.java
@@ -1,11 +1,9 @@
 package org.gjt.sp.jedit.gui;
 
-/**
- * <p>An interface for notifying MOVABLE dockable windows before their docking
- * position is changed. </p>
- * 
+/** An interface for notifying MOVABLE dockable windows before their docking position is changed.
+ *
  * @author Shlomy Reinstein
- * @version $Id: DockableWindow.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: DockableWindow.java 21502 2012-03-29 17:19:44Z ezust $
  * @since jEdit 4.3pre11
  */
 
diff --git a/org/gjt/sp/jedit/gui/DockableWindowContainer.java b/org/gjt/sp/jedit/gui/DockableWindowContainer.java
index 70707bc..b206e15 100644
--- a/org/gjt/sp/jedit/gui/DockableWindowContainer.java
+++ b/org/gjt/sp/jedit/gui/DockableWindowContainer.java
@@ -19,11 +19,11 @@
 
 package org.gjt.sp.jedit.gui;
 
-/**
- * A container for dockable windows. This class should never be used
- * directly.
+/** A container for dockable windows.
+ *
+ * This class should never be used directly, and is not public.
  * @author Slava Pestov
- * @version $Id: DockableWindowContainer.java 13259 2008-08-10 20:54:46Z shlomy $
+ * @version $Id: DockableWindowContainer.java 21502 2012-03-29 17:19:44Z ezust $
  * @since jEdit 2.6pre3
  */
 interface DockableWindowContainer
diff --git a/org/gjt/sp/jedit/gui/DockableWindowFactory.java b/org/gjt/sp/jedit/gui/DockableWindowFactory.java
index 8dadc1d..6c44f97 100644
--- a/org/gjt/sp/jedit/gui/DockableWindowFactory.java
+++ b/org/gjt/sp/jedit/gui/DockableWindowFactory.java
@@ -23,6 +23,7 @@
 package org.gjt.sp.jedit.gui;
 
 //{{{ Imports
+import java.awt.Color;
 import java.io.IOException;
 import java.net.URL;
 import java.util.HashMap;
@@ -32,10 +33,13 @@ import java.util.Map;
 import java.util.Stack;
 
 import javax.swing.JComponent;
+import javax.swing.LookAndFeel;
+import javax.swing.UIManager;
 
 import org.gjt.sp.jedit.ActionSet;
 import org.gjt.sp.jedit.BeanShell;
 import org.gjt.sp.jedit.EditAction;
+import org.gjt.sp.jedit.GUIUtilities;
 import org.gjt.sp.jedit.MiscUtilities;
 import org.gjt.sp.jedit.PluginJAR;
 import org.gjt.sp.jedit.View;
@@ -50,8 +54,7 @@ import org.gjt.sp.jedit.bsh.NameSpace;
 import org.gjt.sp.jedit.bsh.UtilEvalError;
 //}}}
 
-/**
- * Loads <code>dockable.xml</code> files and manages creation
+/** Loads <code>dockable.xml</code> files and manages creation
  * of new dockable windows.
  *
  * @see DockableWindowManager
@@ -170,7 +173,7 @@ public class DockableWindowFactory
 	{
 		return dockableWindowFactories.get(name);
 	}
-	
+
 	public String getDockableWindowPluginClass(String name)
 	{
 		Window w = getDockableWindowFactory(name);
@@ -178,7 +181,7 @@ public class DockableWindowFactory
 			return null;
 		return w.plugin.getPlugin().getClassName();
 	}
-	
+
 	//{{{ getDockableWindowIterator() method
 	Iterator<Window> getDockableWindowIterator()
 	{
@@ -306,7 +309,7 @@ public class DockableWindowFactory
 		{
 			return booleanListToArray(cachedDockableMovableFlags);
 		} //}}}
-		
+
 		//{{{ booleanListToArray() method
 		/**
 		 * This method transforms a List<Boolean> into the corresponding
@@ -336,13 +339,13 @@ public class DockableWindowFactory
 		private java.util.List<String> cachedDockableNames;
 		private java.util.List<Boolean> cachedDockableActionFlags;
 		private java.util.List<Boolean> cachedDockableMovableFlags;
-		
+
 		private String dockableName;
 		private StringBuilder code;
 		private boolean actions;
 		private boolean movable;
 		static final boolean MOVABLE_DEFAULT = false;
-		
+
 		private Stack<String> stateStack;
 		//}}}
 
@@ -451,21 +454,25 @@ public class DockableWindowFactory
 				return null;
 			}
 
-			NameSpace nameSpace = new NameSpace(
-				BeanShell.getNameSpace(),
-				"DockableWindowManager.Factory"
-				+ ".createDockableWindow()");
+			NameSpace nameSpace = new NameSpace(BeanShell.getNameSpace(),
+				"DockableWindowManager.Factory.createDockableWindow()");
 			try
 			{
-				nameSpace.setVariable(
-					"position",position);
+				nameSpace.setVariable("position",position);
 			}
 			catch(UtilEvalError e)
 			{
 				Log.log(Log.ERROR,this,e);
 			}
-			JComponent win = (JComponent)BeanShell.eval(view,
-				nameSpace,code);
+			JComponent win = (JComponent)BeanShell.eval(view,nameSpace,code);
+
+			if (jEdit.getBooleanProperty("textColors")) {
+				LookAndFeel laf = UIManager.getLookAndFeel();
+				if (!laf.getID().equals("Metal")) {
+					GUIUtilities.applyTextAreaColors(win);
+				}
+			}
+
 			synchronized(this)
 			{
 				isBeingCreated = false;
diff --git a/org/gjt/sp/jedit/gui/DockableWindowManager.java b/org/gjt/sp/jedit/gui/DockableWindowManager.java
index 7ebdde6..24fac48 100644
--- a/org/gjt/sp/jedit/gui/DockableWindowManager.java
+++ b/org/gjt/sp/jedit/gui/DockableWindowManager.java
@@ -19,16 +19,17 @@ import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.jedit.EditBus.EBHandler;
 import org.gjt.sp.jedit.View.ViewConfig;
 import org.gjt.sp.jedit.gui.KeyEventTranslator.Key;
+import org.jedit.keymap.Keymap;
+import org.jedit.keymap.KeymapManager;
 import org.gjt.sp.jedit.msg.DockableWindowUpdate;
 import org.gjt.sp.jedit.msg.PluginUpdate;
 import org.gjt.sp.jedit.msg.PropertiesChanged;
 import org.gjt.sp.util.Log;
 // }}}
 
- at SuppressWarnings("serial")
 // {{{ abstract class DockableWindowManager
-/**
- * <p>Keeps track of all dockable windows for a single View, and provides
+
+/** <p> Keeps track of all dockable windows for a single View, and provides
  * an API for getting/showing/hiding them. </p>
  *
  * <p>Each {@link org.gjt.sp.jedit.View} has an instance of this class.</p>
@@ -112,11 +113,12 @@ import org.gjt.sp.util.Log;
  * @author Slava Pestov
  * @author John Gellene (API documentation)
  * @author Shlomy Reinstein (refactoring into a base and an impl)
- * @version $Id: DockableWindowManager.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: DockableWindowManager.java 21504 2012-03-29 17:45:22Z ezust $
  * @since jEdit 2.6pre3
  *
  */
- public abstract class DockableWindowManager extends JPanel
+ at SuppressWarnings("serial")
+public abstract class DockableWindowManager extends JPanel
 {
 
 	//{{{ Constants
@@ -631,8 +633,10 @@ import org.gjt.sp.util.Log;
 
 		KeyHandler(String dockableName)
 		{
-			String shortcut1=jEdit.getProperty(action + ".shortcut");
-			String shortcut2=jEdit.getProperty(action + ".shortcut2");
+			KeymapManager keymapManager = jEdit.getKeymapManager();
+			Keymap keymap = keymapManager.getKeymap();
+			String shortcut1 = keymap.getShortcut(action + ".shortcut");
+			String shortcut2 = keymap.getShortcut(action + ".shortcut2");
 			if (shortcut1 != null)
 				b1 = parseShortcut(shortcut1);
 			if (shortcut2 != null)
diff --git a/org/gjt/sp/jedit/gui/DockableWindowManagerImpl.java b/org/gjt/sp/jedit/gui/DockableWindowManagerImpl.java
index 61b6002..ea25268 100644
--- a/org/gjt/sp/jedit/gui/DockableWindowManagerImpl.java
+++ b/org/gjt/sp/jedit/gui/DockableWindowManagerImpl.java
@@ -1,5 +1,5 @@
 /*
- * DockableWindowManager.java - manages dockable windows
+ * DockableWindowManagerImpl.java - manages dockable windows
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
@@ -49,6 +49,7 @@ import javax.swing.JMenuItem;
 import javax.swing.JPanel;
 import javax.swing.JPopupMenu;
 import javax.swing.SwingUtilities;
+import javax.swing.UIManager;
 
 import org.gjt.sp.jedit.EditBus;
 import org.gjt.sp.jedit.PluginJAR;
@@ -66,15 +67,19 @@ import org.xml.sax.Attributes;
 import org.xml.sax.helpers.DefaultHandler;
 // }}}
 
-/**
- * Concrete class for Dockable Window Managers.
- * Each View has a single DockableWindowManager, for managing the
- * specific dockable instances associated with that View.
+/** Manages dockable windows for a single View.
+ *
+ * Concrete implementation of a Dockable Window Manager.
+ * Aka the "classic" docking framework.
+ *
  * @since jEdit 4.3pre16
+ * @author Slava Pestov
+ * @author Shlomy Reinstein
+ * @version $Id$
  */
 public class DockableWindowManagerImpl extends DockableWindowManager
 {
-	
+
 	//{{{ DockableWindowConfig class
 	public static class DockableWindowConfig extends DockingLayout
 	{
@@ -108,7 +113,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 					rightPos = Integer.parseInt(value);
 			}
 		} // }}}
-		
+
 		// dockables
 		public String top, left, bottom, right;
 		public int topPos, leftPos, bottomPos, rightPos;
@@ -177,7 +182,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 			}
 			return true;
 		}
-		
+
 		@Override
 		public String getName()
 		{
@@ -198,7 +203,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 	public Stack<String> showStack = new Stack<String>();
 	// }}}
 
-	// {{{ setDockingLayout() 	
+	// {{{ setDockingLayout()
 	public void setDockingLayout(DockingLayout docking)
 	{
 		DockableWindowConfig config = (DockableWindowConfig) docking;
@@ -215,15 +220,15 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 
 		if(config.right != null && config.right.length() != 0)
 				showDockableWindow(config.right);
-		
+
 	} // }}}
-	
+
 	// {{{ getDockingLayout()
 	@Override
 	public DockingLayout getDockingLayout(ViewConfig config)
 	{
 		DockableWindowConfig docking = new DockableWindowConfig();
-		
+
 		docking.top = getTopDockingArea().getCurrent();
 		docking.left = getLeftDockingArea().getCurrent();
 		docking.bottom = getBottomDockingArea().getCurrent();
@@ -274,12 +279,12 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 	} //}}}
 
 	//{{{ setMainPanel() method
-	public void setMainPanel(JPanel panel) 
+	public void setMainPanel(JPanel panel)
 	{
 		add(panel, 0);
 	} //}}}
 
-	
+
 	//{{{ init() method
 	/**
 	 * Initialises dockable window manager. Do not call this method directly.
@@ -311,19 +316,19 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 			Log.log(Log.ERROR,this,"Unknown dockable window: " + name);
 			return null;
 		}
-		
+
 		// create a copy of this dockable window and float it
 		Entry newEntry = new Entry(entry.factory,FLOATING);
 		newEntry.win = newEntry.factory.createDockableWindow(view,FLOATING);
-		
+
 		if(newEntry.win != null)
 		{
-			FloatingWindowContainer fwc = new FloatingWindowContainer(this,true); 
+			FloatingWindowContainer fwc = new FloatingWindowContainer(this,true);
 			newEntry.container = fwc;
 			newEntry.container.register(newEntry);
 			newEntry.container.show(newEntry);
-			
-			
+
+
 		}
 		clones.add(newEntry);
 		return newEntry.win;
@@ -356,7 +361,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 				&& lastEntry.container == null)
 			{
 				FloatingWindowContainer fwc = new FloatingWindowContainer(
-					this,view.isPlainView()); 
+					this,view.isPlainView());
 				lastEntry.container = fwc;
 				lastEntry.container.register(lastEntry);
 			}
@@ -443,7 +448,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 
 	//{{{ closeCurrentArea() method
 	/**
-	 * Closes the most recently focused dockable. 
+	 * Closes the most recently focused dockable.
 	 * @since jEdit 4.1pre3
 	 */
 	public void closeCurrentArea()
@@ -463,7 +468,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 					return;
 				}
 				catch (Exception e) {}
-				
+
 				Component comp = view.getFocusOwner();
 				while(comp != null)
 				{
@@ -471,9 +476,9 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 					if(comp instanceof DockablePanel)
 					{
 						DockablePanel panel = (DockablePanel) comp;
-						
+
 						PanelWindowContainer container = panel.getWindowContainer();
-						
+
 						container.show((DockableWindowManagerImpl.Entry) null);
 						return;
 					}
@@ -839,7 +844,12 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 		{
 			String dockable = windowList[i];
 			Entry entry = windows.get(dockable);
-
+			if (entry == null)
+			{
+				// this can happens during a plugin loading when a dockable has been registered but the window
+				// is not yet created if the plugin has some jars.
+				continue;
+			}
 			String newPosition = jEdit.getProperty(dockable
 				+ ".dock-position",FLOATING);
 			if(newPosition.equals(entry.position))
@@ -861,10 +871,10 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 					entry.win = null;
 			}
 
-			if(newPosition.equals(FLOATING)) 
+			if(newPosition.equals(FLOATING))
 			{
 			}
-				
+
 			else
 			{
 				if(newPosition.equals(TOP))
@@ -892,7 +902,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 		bottom.sortDockables();
 		right.sortDockables();
 
-		continuousLayout = jEdit.getBooleanProperty("appearance.continuousLayout");
+		continuousLayout = UIManager.getBoolean("SplitPane.continuousLayout");
 		revalidate();
 		repaint();
 	} //}}}
@@ -990,24 +1000,24 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 				+ ".dock-position",FLOATING));
 		} //}}}
 
-		
+
 		/**
 		 * @return the long title for the dockable floating window.
 		 */
-		public String longTitle() 
+		public String longTitle()
 		{
 			String title = jEdit.getProperty(factory.name + ".longtitle");
 			if (title == null) return shortTitle();
 			else return title;
-			
+
 		}
-		
+
 		/**
 		 * @return The short title, for the dockable button text
 		 */
-		public String shortTitle() 
+		public String shortTitle()
 		{
-			
+
 			String title = jEdit.getProperty(factory.name + ".title");
 			if(title == null)
 				return "NO TITLE PROPERTY: " + factory.name;
@@ -1022,7 +1032,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 		{
 			String retval = jEdit.getProperty(factory.name + ".label");
 			retval = retval.replaceAll("\\$", "");
-			return retval; 
+			return retval;
 		}
 
 		//{{{ Entry constructor
@@ -1034,7 +1044,7 @@ public class DockableWindowManagerImpl extends DockableWindowManager
 			// get the title here, not in the factory constructor,
 			// since the factory might be created before a plugin's
 			// props are loaded
-			
+
 		} //}}}
 	} //}}}
 
diff --git a/org/gjt/sp/jedit/gui/DockableWindowManagerProvider.java b/org/gjt/sp/jedit/gui/DockableWindowManagerProvider.java
index d490c41..aec5d16 100644
--- a/org/gjt/sp/jedit/gui/DockableWindowManagerProvider.java
+++ b/org/gjt/sp/jedit/gui/DockableWindowManagerProvider.java
@@ -5,12 +5,11 @@ import org.gjt.sp.jedit.View.ViewConfig;
 import org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout;
 
 
-/**
-   jEdit's classic dockable window manager, turned into a "provider" service.
-   
-   @author Shlomy Reinstein
-   @since jEdit 4.3pre16
-*/   
+/** jEdit's classic dockable window manager, turned into a "provider" service.
+   *
+   *  @author Shlomy Reinstein
+   *  @since jEdit 4.3pre16
+   */
 public class DockableWindowManagerProvider implements DockingFrameworkProvider
 {
 	public DockableWindowManager create(View view,
diff --git a/org/gjt/sp/jedit/gui/DockingFrameworkProvider.java b/org/gjt/sp/jedit/gui/DockingFrameworkProvider.java
index 017a586..88682a7 100644
--- a/org/gjt/sp/jedit/gui/DockingFrameworkProvider.java
+++ b/org/gjt/sp/jedit/gui/DockingFrameworkProvider.java
@@ -5,15 +5,16 @@ import org.gjt.sp.jedit.View.ViewConfig;
 import org.gjt.sp.jedit.gui.DockableWindowManager.DockingLayout;
 
 
-/** Base interface for Docking Framework Provider services.
-    Plugins can offer alternate docking frameworks by offering a service
-    that creates an instance of one of these.
-    For an example, see jEdit's own services.xml, which provides jEdit's classic
-    docking framework via the class DockableWindowManagerProvider.
-
-    @since jEdit 4.3pre16
-    @author Shlomy Reinstein
-*/
+/** Base interface for the Docking Framework Provider service.
+  *
+  *  Plugins such as MyDoggy can offer an alternate docking framework
+  *  by offering a service that creates an instance of one of these.
+  *  For an example, see jEdit's own services.xml, which  provides jEdit's classic
+  *  docking framework via the class DockableWindowManagerProvider.
+  *
+  *  @since jEdit 4.3pre16
+  *  @author Shlomy Reinstein
+  */
 public interface DockingFrameworkProvider {
 	DockableWindowManager create(View view, DockableWindowFactory instance,
 			ViewConfig config);
diff --git a/org/gjt/sp/jedit/gui/DynamicContextMenuService.java b/org/gjt/sp/jedit/gui/DynamicContextMenuService.java
index 2e8651c..9cd8cfb 100644
--- a/org/gjt/sp/jedit/gui/DynamicContextMenuService.java
+++ b/org/gjt/sp/jedit/gui/DynamicContextMenuService.java
@@ -6,27 +6,26 @@ import javax.swing.JMenuItem;
 
 import org.gjt.sp.jedit.textarea.JEditTextArea;
 
-/**
- * A service that can be offered by plugins when a text area context menu item 
- * needs to be offered  that is sensitive to the state of the TextArea it was requested from.
+/** <p> A service that can be offered by plugins when a text area context menu item
+ * needs to be offered  that is sensitive to the state of the TextArea it was requested * from. </p>
 
  * Note: this service should only be used by certain plugins that need context information at the time
  * that the context menu is requested. For all other actions, it is already possible for users to
  * add menu items to the context menu, so please do not use this service from Plugins
  * to add non-dynamic actions to the context menu.
- *  
+ *
  * @author ezust
  * @since jEdit 4.3pre15
  */
 abstract public class DynamicContextMenuService {
 	/**
-	 * 
+	 *
 	 * @param ta the TextArea where the context menu was requested.
 	 * 	   Use this to determine the location of the caret, or the edit mode of the buffer, etc.
 	 * @param evt a mouseEvent that triggered this menu request, or null
 	 * @return an array of menu items
 	 *         or null if there are no appropriate actions to be added at this time
 	 */
-	public abstract JMenuItem[] createMenu(JEditTextArea ta, MouseEvent evt); 
+	public abstract JMenuItem[] createMenu(JEditTextArea ta, MouseEvent evt);
 
 }
diff --git a/org/gjt/sp/jedit/gui/EditAbbrevDialog.java b/org/gjt/sp/jedit/gui/EditAbbrevDialog.java
index 4f61d33..263c89c 100644
--- a/org/gjt/sp/jedit/gui/EditAbbrevDialog.java
+++ b/org/gjt/sp/jedit/gui/EditAbbrevDialog.java
@@ -30,7 +30,7 @@ import java.awt.*;
 import java.util.*;
 import org.gjt.sp.jedit.*;
 //}}}
-
+/** Displayed when editing abbrevs */
 public class EditAbbrevDialog extends JDialog
 {
 	//{{{ EditAbbrevDialog constructor
diff --git a/org/gjt/sp/jedit/gui/EnhancedButton.java b/org/gjt/sp/jedit/gui/EnhancedButton.java
index 414567a..aa63f17 100644
--- a/org/gjt/sp/jedit/gui/EnhancedButton.java
+++ b/org/gjt/sp/jedit/gui/EnhancedButton.java
@@ -28,7 +28,7 @@ import java.awt.event.*;
 import java.awt.*;
 import org.gjt.sp.jedit.*;
 //}}}
-
+/** A toolbar button */
 public class EnhancedButton extends RolloverButton
 {
 	//{{{ EnhancedButton constructor
@@ -54,7 +54,7 @@ public class EnhancedButton extends RolloverButton
 			{
 				setName(action.substring(iSuffix+1));
 			}
-			
+
 			setEnabled(true);
 			addActionListener(new EditAction.Wrapper(context,action));
 			addMouseListener(new MouseHandler());
diff --git a/org/gjt/sp/jedit/gui/EnhancedDialog.java b/org/gjt/sp/jedit/gui/EnhancedDialog.java
index 11cbecd..c37c8f2 100644
--- a/org/gjt/sp/jedit/gui/EnhancedDialog.java
+++ b/org/gjt/sp/jedit/gui/EnhancedDialog.java
@@ -23,13 +23,14 @@ import javax.swing.*;
 import java.awt.event.*;
 import java.awt.*;
 
-/**
+/** Dialog that handles OK/Cancel for you
+ *
  * A dialog box that handles window closing, the ENTER key and the ESCAPE
  * key for you. All you have to do is implement ok() (called when
  * Enter is pressed) and cancel() (called when Escape is pressed, or window
  * is closed).
  * @author Slava Pestov
- * @version $Id: EnhancedDialog.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: EnhancedDialog.java 21502 2012-03-29 17:19:44Z ezust $
  */
 public abstract class EnhancedDialog extends JDialog
 {
@@ -38,7 +39,7 @@ public abstract class EnhancedDialog extends JDialog
 		super(parent,title,modal);
 		_init();
 	}
-	
+
 	public EnhancedDialog(Dialog parent, String title, boolean modal)
 	{
 		super(parent,title,modal);
@@ -54,7 +55,7 @@ public abstract class EnhancedDialog extends JDialog
 	{
 		this.enterEnabled = enterEnabled;
 	}
-	
+
 	public abstract void ok();
 	public abstract void cancel();
 
@@ -70,11 +71,11 @@ public abstract class EnhancedDialog extends JDialog
 		addWindowListener(new WindowHandler());
 
 		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
-		
+
 		enterEnabled = true;
 	}
 	//}}}
-	
+
 	// protected members
 	protected KeyHandler keyHandler;
 	protected boolean enterEnabled;
@@ -127,13 +128,10 @@ public abstract class EnhancedDialog extends JDialog
 	{
 		public void keyPressed(KeyEvent evt)
 		{
-			if(evt.isConsumed())
-				return;
-
-			if(evt.getKeyCode() == KeyEvent.VK_ENTER
-				&& enterEnabled)
+			if(evt.isConsumed()) return;
+			Component comp = getFocusOwner();
+			if(evt.getKeyCode() == KeyEvent.VK_ENTER && enterEnabled)
 			{
-				Component comp = getFocusOwner();
 				while(comp != null)
 				{
 					if(comp instanceof JComboBox)
@@ -145,19 +143,33 @@ public abstract class EnhancedDialog extends JDialog
 							if(selected != null)
 								combo.setSelectedItem(selected);
 						}
-						break;
-					}
 
+						if(combo.isPopupVisible())
+						{
+							evt.consume();
+							combo.setPopupVisible(false);
+						}
+						return;
+					}
+					// TODO: add other classes that need custom key handling here.
 					comp = comp.getParent();
 				}
-
-				ok();
 				evt.consume();
+				ok();
 			}
 			else if(evt.getKeyCode() == KeyEvent.VK_ESCAPE)
 			{
-				cancel();
 				evt.consume();
+				if(comp instanceof JComboBox)
+				{
+					JComboBox combo = (JComboBox)comp;
+					if (combo.isPopupVisible())
+					{
+						combo.setPopupVisible(false);
+					}
+					else cancel();
+				}
+				else cancel();
 			}
 		}
 	}
diff --git a/org/gjt/sp/jedit/gui/ErrorListDialog.java b/org/gjt/sp/jedit/gui/ErrorListDialog.java
index b538367..4db7411 100644
--- a/org/gjt/sp/jedit/gui/ErrorListDialog.java
+++ b/org/gjt/sp/jedit/gui/ErrorListDialog.java
@@ -37,25 +37,35 @@ import org.gjt.sp.jedit.*;
 import org.gjt.sp.jedit.pluginmgr.PluginManager;
 import org.gjt.sp.util.Log;
 //}}}
-
+/** Used to list I/O and plugin load errors
+  */
 public class ErrorListDialog extends EnhancedDialog
 {
 	//{{{ ErrorEntry class
+	
 	public static class ErrorEntry
 	{
 		String path;
 		String[] messages;
-
+		
+		/** An entry with default urgency <code>Log.ERROR</code> */
 		public ErrorEntry(String path, String messageProp, Object[] args)
 		{
+			this(path, messageProp, args, Log.ERROR);
+		}
+		
+		/** @since 5.0pre1 */
+		public ErrorEntry(String path, String messageProp, Object[] args,
+		                  int urgency)
+		{
 			this.path = path;
 
 			String message = jEdit.getProperty(messageProp,args);
 			if(message == null)
 				message = "Undefined property: " + messageProp;
 
-			Log.log(Log.ERROR,this,path + ":");
-			Log.log(Log.ERROR,this,message);
+			Log.log(urgency, this, path + ":");
+			Log.log(urgency, this, message);
 
 			Vector<String> tokenizedMessage = new Vector<String>();
 			int lastIndex = -1;
diff --git a/org/gjt/sp/jedit/gui/ExtendedGridLayout.java b/org/gjt/sp/jedit/gui/ExtendedGridLayout.java
index 0a3a11d..fbc6bc8 100644
--- a/org/gjt/sp/jedit/gui/ExtendedGridLayout.java
+++ b/org/gjt/sp/jedit/gui/ExtendedGridLayout.java
@@ -35,11 +35,10 @@ import static java.awt.Component.CENTER_ALIGNMENT;
 
 import static org.gjt.sp.jedit.gui.ExtendedGridLayoutConstraints.REMAINDER;
 
-/**
-  * A layout manager that places components in a rectangular grid
-  * with variable cell sizes that supports colspans and rowspans.
-  * <p>
-  * The container is divided into rectangles, and each component is placed
+/** <p>A layout manager that places components in a rectangular grid
+  * with variable cell sizes that supports colspans and rowspans. </p>
+  *
+  * <p> The container is divided into rectangles, and each component is placed
   * in a rectangular space defined by its colspan and rowspan.
   * Each row is as large as the largest component in
   * that row, and each column is as wide as the widest component in
diff --git a/org/gjt/sp/jedit/gui/FilteredTableModel.java b/org/gjt/sp/jedit/gui/FilteredTableModel.java
index 76b0ea0..50cb58f 100644
--- a/org/gjt/sp/jedit/gui/FilteredTableModel.java
+++ b/org/gjt/sp/jedit/gui/FilteredTableModel.java
@@ -83,12 +83,16 @@ public abstract class FilteredTableModel<E extends TableModel> extends AbstractT
 
 	private JTable table;
 
-	//{{{ FilteredTableModel() constructor
+	//{{{ FilteredTableModel() constructors
 	protected FilteredTableModel(E delegated)
 	{
 		this.delegated = delegated;
 		delegated.addTableModelListener(this);
 		resetFilter();
+	}
+
+	protected FilteredTableModel()
+	{
 	} //}}}
 
 	//{{{ setTable() method
@@ -116,7 +120,8 @@ public abstract class FilteredTableModel<E extends TableModel> extends AbstractT
 	//{{{ setDelegated() method
 	public void setDelegated(E delegated)
 	{
-		this.delegated.removeTableModelListener(this);
+		if (this.delegated != null)
+			this.delegated.removeTableModelListener(this);
 		delegated.addTableModelListener(this);
 		this.delegated = delegated;
 	} //}}}
diff --git a/org/gjt/sp/jedit/gui/GrabKeyDialog.java b/org/gjt/sp/jedit/gui/GrabKeyDialog.java
index e4235ea..5f35b33 100644
--- a/org/gjt/sp/jedit/gui/GrabKeyDialog.java
+++ b/org/gjt/sp/jedit/gui/GrabKeyDialog.java
@@ -450,7 +450,7 @@ public class GrabKeyDialog extends JDialog
 			if(debugBuffer == null)
 				updateAssignedTo(keyString.toString());
 		} //}}}
-
+		
 		protected String rawShortcut = "";
 	} //}}}
 
@@ -458,6 +458,7 @@ public class GrabKeyDialog extends JDialog
 	private class ActionHandler implements ActionListener
 	{
 		//{{{ actionPerformed() method
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			if(evt.getSource() == ok)
diff --git a/org/gjt/sp/jedit/gui/HistoryModel.java b/org/gjt/sp/jedit/gui/HistoryModel.java
index 2295e6f..a20a0f3 100644
--- a/org/gjt/sp/jedit/gui/HistoryModel.java
+++ b/org/gjt/sp/jedit/gui/HistoryModel.java
@@ -28,8 +28,9 @@ import javax.swing.DefaultListModel;
 import java.util.*;
 //}}}
 
-/**
- * A history list. One history list can be used by several history text
+/** A named history list
+ *
+ * One history list can be used by several history text
  * fields. Note that the list model implementation is incomplete; no events
  * are fired when the history model changes.
  * The max size of the history is defined globally via setDefaultMax(),
@@ -38,7 +39,7 @@ import java.util.*;
  *
  * @author Slava Pestov
  * @author Eric Le Lay
- * @version $Id: HistoryModel.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: HistoryModel.java 21506 2012-03-29 17:58:53Z ezust $
  */
 public class HistoryModel extends DefaultListModel
 	implements MutableListModel
@@ -65,19 +66,20 @@ public class HistoryModel extends DefaultListModel
 	{
 		if(text == null || text.length() == 0)
 			return;
-		
+
 		// Don't add duplicates
 		int index = indexOf(text);
 		if (index == 0)
 			return;
 		if (index != -1)
 			removeElementAt(index);
-		
+
 		// Make room so that adding this new item doesn't cause the history model to run
 		// over its maximum size
 		int myMaxSize = (maxSize == -1) ? defaultMaxSize : maxSize;
 		if (text.length() > myMaxSize)
 		{
+			// ??? Is this really correct?
 			return;
 		}
 		int currentSize = getCurrentSize();
@@ -192,7 +194,7 @@ public class HistoryModel extends DefaultListModel
 	{
 		return max;
 	} //}}}
-	
+
 	//{{{ setMaxSize() method
 	/**
 	 * Sets the maximum size (in characters) for this history model
@@ -234,7 +236,7 @@ public class HistoryModel extends DefaultListModel
 	{
 		return HistoryModel.defaultMax;
 	} //}}}
-	
+
 	//{{{ setDefaultMaxSize() method
 	/**
 	 * Sets the default max size (in characters) for all history models. To change the max
@@ -245,7 +247,7 @@ public class HistoryModel extends DefaultListModel
 	{
 		HistoryModel.defaultMaxSize = newMax;
 	} //}}}
-	
+
 	//{{{ getDefaultMaxSize() method
 	/**
 	 * Gets the default maximum size (in characters) for all history models.
@@ -265,7 +267,7 @@ public class HistoryModel extends DefaultListModel
 	//{{{ Private members
 	private int max;
 	private static int defaultMax;
-	
+
 	private int maxSize;
 	private static int defaultMaxSize;
 
@@ -274,7 +276,7 @@ public class HistoryModel extends DefaultListModel
 
 	private static boolean modified;
 	private static HistoryModelSaver saver;
-	
+
 	//{{{ getCurrentSize() method
 	/**
 	 * Gets the current size (in characters) of the entire history model.
@@ -286,7 +288,7 @@ public class HistoryModel extends DefaultListModel
 		{
 			currentSize += getItem(i).length();
 		}
-		
+
 		return currentSize;
 	}
 	//}}}
diff --git a/org/gjt/sp/jedit/gui/HistoryModelSaver.java b/org/gjt/sp/jedit/gui/HistoryModelSaver.java
index dd0e7cc..48f6d68 100644
--- a/org/gjt/sp/jedit/gui/HistoryModelSaver.java
+++ b/org/gjt/sp/jedit/gui/HistoryModelSaver.java
@@ -1,5 +1,5 @@
 /*
- * HistoryModelSaver.java - Handles services.xml files in plugins
+ * HistoryModelSaver.java - Interface for loading and saving of the "history" files.
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
@@ -23,7 +23,8 @@ package org.gjt.sp.jedit.gui;
 
 import java.util.Map;
 
-/**
+/** Interface for loading and saving of the "history" files.
+ *
  * @author Matthieu Casanova
  * @version $Id: FoldHandler.java 5568 2006-07-10 20:52:23Z kpouer $
  */
diff --git a/org/gjt/sp/jedit/gui/HistoryTextField.java b/org/gjt/sp/jedit/gui/HistoryTextField.java
index a40559e..44e59a7 100644
--- a/org/gjt/sp/jedit/gui/HistoryTextField.java
+++ b/org/gjt/sp/jedit/gui/HistoryTextField.java
@@ -33,10 +33,10 @@ import java.awt.event.*;
 import org.gjt.sp.jedit.*;
 //}}}
 
-/**
- * Text field with an arrow-key accessable history.
+/** Text field with an arrow-key + drop-down accessable history.
+ *
  * @author Slava Pestov
- * @version $Id: HistoryTextField.java 17625 2010-04-12 23:10:57Z ezust $
+ * @version $Id: HistoryTextField.java 21502 2012-03-29 17:19:44Z ezust $
  */
 public class HistoryTextField extends JTextField
 {
@@ -196,7 +196,7 @@ public class HistoryTextField extends JTextField
 		{
 			setBorder(new CompoundBorder(this.getBorder(), new HistoryBorder()));
 		}
-		
+
 		repaint();
 	} //}}}
 
diff --git a/org/gjt/sp/jedit/gui/JEditHistoryModelSaver.java b/org/gjt/sp/jedit/gui/JEditHistoryModelSaver.java
index 27078f9..77edaae 100644
--- a/org/gjt/sp/jedit/gui/JEditHistoryModelSaver.java
+++ b/org/gjt/sp/jedit/gui/JEditHistoryModelSaver.java
@@ -1,5 +1,5 @@
 /*
- * JEditHistoryModelSaver.java - Handles services.xml files in plugins
+ * JEditHistoryModelSaver.java -
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
@@ -32,7 +32,11 @@ import java.nio.charset.Charset;
 import java.nio.charset.CharacterCodingException;
 import java.util.*;
 
-/**
+/** Handles loading and saving of the "history" files.
+ *
+ * A history file is .ini format and stores historymodels for all
+ * named historytextfields, separately but in the same file.
+ *
  * @author Matthieu Casanova
  * @version $Id: FoldHandler.java 5568 2006-07-10 20:52:23Z kpouer $
  */
diff --git a/org/gjt/sp/jedit/gui/KeyEventTranslator.java b/org/gjt/sp/jedit/gui/KeyEventTranslator.java
index 0bd94de..80cf0dd 100644
--- a/org/gjt/sp/jedit/gui/KeyEventTranslator.java
+++ b/org/gjt/sp/jedit/gui/KeyEventTranslator.java
@@ -24,6 +24,7 @@ package org.gjt.sp.jedit.gui;
 
 //{{{ Imports
 import java.awt.event.*;
+import javax.swing.KeyStroke;
 import java.util.HashMap;
 import java.util.Map;
 import org.gjt.sp.jedit.Debug;
@@ -32,12 +33,11 @@ import org.gjt.sp.util.Log;
 import org.gjt.sp.util.StandardUtilities;
 //}}}
 
-/**
- * In conjunction with the <code>KeyEventWorkaround</code>, hides some
+/** In conjunction with the <code>KeyEventWorkaround</code>, hides some
  * warts in the AWT key event API.
  *
  * @author Slava Pestov
- * @version $Id: KeyEventTranslator.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: KeyEventTranslator.java 21504 2012-03-29 17:45:22Z ezust $
  */
 public class KeyEventTranslator
 {
@@ -214,68 +214,97 @@ public class KeyEventTranslator
 	{
 		if(keyStroke == null)
 			return null;
-		int modifiers = 0;
+
 		String key;
-		int endOfModifiers = keyStroke.indexOf('+');
-		if(endOfModifiers <= 0)	// not found or found at first
+        	int modifiers = 0;
+
+        	String[] pieces = keyStroke.split("\\+", 2);
+        	if (pieces.length == 1)
+        	{
+        		key = pieces[0];
+        	}
+        	else
+        	{
+        		modifiers = parseModifiers(pieces[0]);
+        		key = pieces[1];
+        	}
+
+		if (key.length() == 1)
 		{
-			key = keyStroke;
+			return new Key(modifiersToString(modifiers), 0, key.charAt(0));
+		}
+		else if (key.length() == 0)
+		{
+			Log.log(Log.ERROR,KeyEventTranslator.class,
+					"Invalid key stroke: " + keyStroke);
+			return null;
+		}
+		else if (key.equals("SPACE"))
+		{
+			return new Key(modifiersToString(modifiers), 0, ' ');
+		}
+
+		int code = parseKeyCode(key);
+		if (code == KeyEvent.VK_UNDEFINED)
+		{
+			return null;
 		}
 		else
 		{
-			for(int i = 0; i < endOfModifiers; i++)
-			{
-				switch(Character.toUpperCase(keyStroke
-					.charAt(i)))
-				{
-				case 'A':
-					modifiers |= a;
-					break;
-				case 'C':
-					modifiers |= c;
-					break;
-				case 'M':
-					modifiers |= m;
-					break;
-				case 'S':
-					modifiers |= s;
-					break;
-				}
-			}
-			key = keyStroke.substring(endOfModifiers + 1);
+			return new Key(modifiersToString(modifiers), code, '\0');
 		}
-		if(key.length() == 1)
+	} //}}}
+
+	//{{{ parseKeyStroke() method
+        /**
+         * Converts a string to a Swing KeyStroke. The string should be of the
+	 * form <i>modifiers</i>+<i>shortcut</i> where <i>modifiers</i>
+	 * is any combination of A for Alt, C for Control, S for Shift
+	 * or M for Meta, and <i>shortcut</i> is either a single character,
+	 * or a keycode name from the <code>KeyEvent</code> class, without
+	 * the <code>VK_</code> prefix. Returns null if the string corresponds
+	 * to multiple KeyStrokes (e.g., "C+e C+COMMA").
+	 * @param shortcut A string description of the key stroke
+	 * @since jEdit 5.0
+         */
+        public static KeyStroke parseKeyStroke(String shortcut)
+        {
+        	if (shortcut == null || shortcut.indexOf(' ') != -1)
+        		return null;
+
+        	String key;
+        	int modifiers = 0;
+
+        	String[] pieces = shortcut.split("\\+", 2);
+        	if (pieces.length == 1)
+        	{
+        		key = pieces[0];
+        	}
+        	else
+        	{
+        		modifiers = parseModifiers(pieces[0]);
+        		key = pieces[1];
+        	}
+
+		if (key.length() == 1)
 		{
-			return new Key(modifiersToString(modifiers),0,key.charAt(0));
+			return KeyStroke.getKeyStroke(new Character(key.charAt(0)), modifiers);
 		}
-		else if(key.length() == 0)
+		else if (key.length() == 0)
 		{
 			Log.log(Log.ERROR,KeyEventTranslator.class,
-				"Invalid key stroke: " + keyStroke);
+					"Invalid key stroke: " + shortcut);
 			return null;
 		}
-		else if(key.equals("SPACE"))
+
+		int keyCode = parseKeyCode(key);
+		if (keyCode == KeyEvent.VK_UNDEFINED)
 		{
-			return new Key(modifiersToString(modifiers),0,' ');
+			return null;
 		}
 		else
 		{
-			int ch;
-
-			try
-			{
-				ch = KeyEvent.class.getField("VK_".concat(key))
-					.getInt(null);
-			}
-			catch(Exception e)
-			{
-				Log.log(Log.ERROR,KeyEventTranslator.class,
-					"Invalid key stroke: "
-					+ keyStroke);
-				return null;
-			}
-
-			return new Key(modifiersToString(modifiers),ch,'\0');
+			return KeyStroke.getKeyStroke(keyCode, modifiers);
 		}
 	} //}}}
 
@@ -441,8 +470,57 @@ public class KeyEventTranslator
 				InputEvent.META_MASK,
 				InputEvent.SHIFT_MASK);
 		}
+	}
+
+	//{{{ parseModifiers() method
+	private static int parseModifiers(String modifierString)
+	{
+		int modifiers = 0;
+
+		for (char ch : modifierString.toCharArray())
+		{
+			switch (Character.toUpperCase(ch))
+			{
+			case 'A':
+				modifiers |= a;
+				break;
+			case 'C':
+				modifiers |= c;
+				break;
+			case 'M':
+				modifiers |= m;
+				break;
+			case 'S':
+				modifiers |= s;
+				break;
+			}
+		}
+
+		return modifiers;
+	} //}}
+
+	//{{{ parseKeyCode() method
+	/**
+	 * Parses the name of a keycode from the KeyEvent class to the the actual
+	 * member of that class. (e.g., the string "VK_COMMA" becomes the integer
+	 * KeyEvent.VK_COMMA). Returns KeyEvent.VK_UNDEFINED if no such member is found.
+	 */
+	private static int parseKeyCode(String code)
+	{
+		try
+		{
+			return KeyEvent.class.getField("VK_".concat(code)).getInt(null);
+		}
+		catch(Exception e)
+		{
+			Log.log(Log.ERROR,KeyEventTranslator.class,
+				"Invalid key code: " + code);
+			return KeyEvent.VK_UNDEFINED;
+		}
 	} //}}}
 
+	//}}}
+
 	//{{{ Key class
 	public static class Key
 	{
diff --git a/org/gjt/sp/jedit/gui/KeyEventWorkaround.java b/org/gjt/sp/jedit/gui/KeyEventWorkaround.java
index aee1be1..ef02f4a 100644
--- a/org/gjt/sp/jedit/gui/KeyEventWorkaround.java
+++ b/org/gjt/sp/jedit/gui/KeyEventWorkaround.java
@@ -30,13 +30,12 @@ import org.gjt.sp.jedit.input.AbstractInputHandler;
 import org.gjt.sp.util.Log;
 //}}}
 
-/**
- * Various hacks to get keyboard event handling to behave in a consistent manner
+/** Various hacks to get keyboard event handling to behave in a consistent manner
  * across Java implementations. This type of stuff should not be necessary, but
  * Java's keyboard handling is crap, to put it mildly.
  *
  * @author Slava Pestov
- * @version $Id: KeyEventWorkaround.java 17503 2010-03-20 09:47:18Z k_satoda $
+ * @version $Id: KeyEventWorkaround.java 21504 2012-03-29 17:45:22Z ezust $
  */
 public class KeyEventWorkaround
 {
diff --git a/org/gjt/sp/jedit/gui/ListModelEditor.java b/org/gjt/sp/jedit/gui/ListModelEditor.java
index ccbab66..1776a36 100644
--- a/org/gjt/sp/jedit/gui/ListModelEditor.java
+++ b/org/gjt/sp/jedit/gui/ListModelEditor.java
@@ -10,7 +10,14 @@ import javax.swing.ListSelectionModel;
 import javax.swing.table.DefaultTableModel;
 
 import org.gjt.sp.jedit.jEdit;
-
+/** A dialog that pops up when you click on "Previously Entered Strings"
+  * from a HistoryTextField.
+  *
+  *  Allows the user to edit previously entered strings. Patch# 1818140
+  *
+  *  @author Joerg Spieler
+  *  @since jEdit 4.3
+*/
 public class ListModelEditor
 {
 
diff --git a/org/gjt/sp/jedit/gui/LogViewer.java b/org/gjt/sp/jedit/gui/LogViewer.java
index f7a1237..71db562 100644
--- a/org/gjt/sp/jedit/gui/LogViewer.java
+++ b/org/gjt/sp/jedit/gui/LogViewer.java
@@ -35,8 +35,8 @@ import org.gjt.sp.util.Log;
 import org.gjt.sp.util.ThreadUtilities;
 //}}}
 
-/**
- * @version $Id: LogViewer.java 19134 2010-12-14 16:21:58Z daleanson $
+/** Activity Log Viewer
+ * @version $Id: LogViewer.java 21504 2012-03-29 17:45:22Z ezust $
  */
 public class LogViewer extends JPanel implements DefaultFocusComponent
 {
@@ -96,9 +96,9 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 		copy = new JButton(jEdit.getProperty("log-viewer.copy"));
 		copy.addActionListener(new ActionHandler());
 		caption.add(copy);
-		
+
 		caption.add(Box.createHorizontalStrut(6));
-		
+
 		JButton settings = new JButton(jEdit.getProperty("log-viewer.settings.label"));
 		settings.addActionListener(new ActionListener()
 		{
@@ -431,11 +431,11 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 			return filter.length() == 0 || text.contains(filter);
 		}
 	} //}}}
-	
+
 	//{{{ LogSettings dialog
 	private class LogSettings extends JDialog
 	{
-		LogSettings() 
+		LogSettings()
 		{
 			super(jEdit.getActiveView(), jEdit.getProperty("log-viewer.dialog.title"));
 			AbstractOptionPane pane = new AbstractOptionPane(jEdit.getProperty("log-viewer.settings.label"))
@@ -449,7 +449,7 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 						maxLines,
 						GridBagConstraints.REMAINDER);
 					addComponent(Box.createVerticalStrut(11));
-					debug = new JCheckBox(jEdit.getProperty("log-viewer.message.debug.label", "Debug"), 
+					debug = new JCheckBox(jEdit.getProperty("log-viewer.message.debug.label", "Debug"),
 						jEdit.getBooleanProperty("log-viewer.message.debug", true));
 					message = new JCheckBox(jEdit.getProperty("log-viewer.message.message.label", "Message"),
 						jEdit.getBooleanProperty("log-viewer.message.message", true));
@@ -459,7 +459,7 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 						jEdit.getBooleanProperty("log-viewer.message.warning", true));
 					error = new JCheckBox(jEdit.getProperty("log-viewer.message.error.label", "Error"),
 						jEdit.getBooleanProperty("log-viewer.message.error", true));
-					
+
 					addComponent(new JLabel(jEdit.getProperty("log-viewer.message.label", "Message Display:")));
 					addComponent(debug,
 						debugColor = new ColorWellButton(
@@ -481,9 +481,9 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 						errorColor = new ColorWellButton(
 						jEdit.getColorProperty("log-viewer.message.error.color", Color.RED)),
 						GridBagConstraints.REMAINDER);
-					
+
 					addComponent(Box.createVerticalStrut(11));
-					
+
 					JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
 					JButton okButton = new JButton(jEdit.getProperty("common.ok"));
 					okButton.addActionListener(new ActionListener()
@@ -510,12 +510,12 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 					buttonPanel.add(cancelButton);
 					addComponent(buttonPanel, GridBagConstraints.HORIZONTAL);
 				}
-				
+
 				@Override
 				protected void _save()
 				{
 					jEdit.setIntegerProperty("log-viewer.maxlines", ((SpinnerNumberModel)maxLines.getModel()).getNumber().intValue());
-					
+
 					showDebug = debug.isSelected();
 					jEdit.setBooleanProperty("log-viewer.message.debug", showDebug);
 					showMessage = message.isSelected();
@@ -526,13 +526,13 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 					jEdit.setBooleanProperty("log-viewer.message.warning", showWarning);
 					showError = error.isSelected();
 					jEdit.setBooleanProperty("log-viewer.message.error", showError);
-					
-					jEdit.setColorProperty("log-viewer.message.debug.color", debugColor.getSelectedColor());	
-					jEdit.setColorProperty("log-viewer.message.message.color", messageColor.getSelectedColor());	
-					jEdit.setColorProperty("log-viewer.message.notice.color", noticeColor.getSelectedColor());	
-					jEdit.setColorProperty("log-viewer.message.warning.color", warningColor.getSelectedColor());	
+
+					jEdit.setColorProperty("log-viewer.message.debug.color", debugColor.getSelectedColor());
+					jEdit.setColorProperty("log-viewer.message.message.color", messageColor.getSelectedColor());
+					jEdit.setColorProperty("log-viewer.message.notice.color", noticeColor.getSelectedColor());
+					jEdit.setColorProperty("log-viewer.message.warning.color", warningColor.getSelectedColor());
 					jEdit.setColorProperty("log-viewer.message.error.color", errorColor.getSelectedColor());
-					
+
 					setFilter();
 				}
 			};
@@ -542,7 +542,7 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 			setLocationRelativeTo(LogViewer.this);
 			setVisible(true);
 		}
-		
+
 		private JSpinner maxLines;
 		private JCheckBox debug;
 		private JCheckBox message;
@@ -554,7 +554,7 @@ public class LogViewer extends JPanel implements DefaultFocusComponent
 		private ColorWellButton noticeColor;
 		private ColorWellButton warningColor;
 		private ColorWellButton errorColor;
-		
+
 	} //}}}
 }
 
diff --git a/org/gjt/sp/jedit/gui/MarkerViewer.java b/org/gjt/sp/jedit/gui/MarkerViewer.java
index 5752b44..094ed01 100644
--- a/org/gjt/sp/jedit/gui/MarkerViewer.java
+++ b/org/gjt/sp/jedit/gui/MarkerViewer.java
@@ -34,7 +34,7 @@ import org.gjt.sp.jedit.msg.BufferUpdate;
 import org.gjt.sp.jedit.msg.EditPaneUpdate;
 import org.gjt.sp.jedit.msg.ViewUpdate;
 //}}}
-
+/** Dockable view of markers in the current buffer */
 public class MarkerViewer extends JPanel implements ActionListener
 {
 	//{{{ MarkerViewer constructor
@@ -85,6 +85,7 @@ public class MarkerViewer extends JPanel implements ActionListener
 		markerList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 		markerList.setCellRenderer(new Renderer());
 		markerList.addMouseListener(new MouseHandler());
+		markerList.addKeyListener(new KeyHandler());
 
 		add(BorderLayout.CENTER,new JScrollPane(markerList));
 
@@ -281,6 +282,21 @@ public class MarkerViewer extends JPanel implements ActionListener
 			goToSelectedMarker();
 		}
 	} //}}}
+	
+	//{{{ KeyHandler Class
+	class KeyHandler extends KeyAdapter
+	{
+		@Override
+		public void keyPressed(KeyEvent evt)
+		{			
+			if(evt.getKeyCode() == KeyEvent.VK_SPACE
+			   || evt.getKeyCode() == KeyEvent.VK_ENTER)
+			{
+				evt.consume();
+				goToSelectedMarker();
+			}
+		}
+	} //}}}
 
 	//}}}
 }
diff --git a/org/gjt/sp/jedit/gui/MutableListModel.java b/org/gjt/sp/jedit/gui/MutableListModel.java
index 2e6d710..1367345 100644
--- a/org/gjt/sp/jedit/gui/MutableListModel.java
+++ b/org/gjt/sp/jedit/gui/MutableListModel.java
@@ -21,7 +21,10 @@
  */
 
 package org.gjt.sp.jedit.gui;
-
+/** Short Description of this class
+  *
+  * Long Description
+*/
 public interface MutableListModel extends javax.swing.ListModel
 {
 	public boolean removeElement(Object elem);
diff --git a/org/gjt/sp/jedit/gui/NumericTextField.java b/org/gjt/sp/jedit/gui/NumericTextField.java
index e2be50f..159e965 100644
--- a/org/gjt/sp/jedit/gui/NumericTextField.java
+++ b/org/gjt/sp/jedit/gui/NumericTextField.java
@@ -24,7 +24,7 @@ package org.gjt.sp.jedit.gui;
 import javax.swing.*;
 import java.awt.event.KeyEvent;
 
-/**
+/** A TextField that accepts only numeric values
  * @author Matthieu Casanova
  * @version $Id: KeyEventWorkaround.java 12889 2008-06-23 20:14:00Z kpouer $
  * @since jEdit 4.3pre15
diff --git a/org/gjt/sp/jedit/gui/OptionsDialog.java b/org/gjt/sp/jedit/gui/OptionsDialog.java
index 1348663..7356651 100644
--- a/org/gjt/sp/jedit/gui/OptionsDialog.java
+++ b/org/gjt/sp/jedit/gui/OptionsDialog.java
@@ -39,10 +39,10 @@ import org.gjt.sp.util.EnhancedTreeCellRenderer;
 import org.gjt.sp.util.Log;
 //}}}
 
-/**
- * An abstract options dialog box.
+/** An abstract options dialog box.
  * @author Slava Pestov
- * @version $Id: OptionsDialog.java 19788 2011-08-11 00:57:19Z Vampire0 $
+ * @version $Id: OptionsDialog.java 21586 2012-04-17 16:36:42Z ezust $
+ * @todo refactor to use OptionGroupPane
  */
 public abstract class OptionsDialog extends EnhancedDialog
 	implements ActionListener, TreeSelectionListener
@@ -92,6 +92,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 	} //}}}
 
 	//{{{ ok() method
+	@Override
 	public void ok()
 	{
 		if(currentPane != null)
@@ -100,6 +101,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 	} //}}}
 
 	//{{{ cancel() method
+	@Override
 	public void cancel()
 	{
 		if(currentPane != null)
@@ -126,6 +128,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 	} //}}}
 
 	//{{{ dispose() method
+	@Override
 	public void dispose()
 	{
 		GUIUtilities.saveGeometry(this,name);
@@ -134,6 +137,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 	} //}}}
 
 	//{{{ actionPerformed() method
+	@Override
 	public void actionPerformed(ActionEvent evt)
 	{
 		Object source = evt.getSource();
@@ -153,6 +157,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 	} //}}}
 
 	//{{{ valueChanged() method
+	@Override
 	public void valueChanged(TreeSelectionEvent evt)
 	{
 		TreePath path = evt.getPath();
@@ -249,8 +254,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 		}
 		catch(Throwable t)
 		{
-			Log.log(Log.ERROR,this,"Error initializing options:");
-			Log.log(Log.ERROR,this,t);
+			Log.log(Log.ERROR,this,"Error initializing options:", t);
 		}
 
 		currentPane = optionPane;
@@ -258,9 +262,6 @@ public abstract class OptionsDialog extends EnhancedDialog
 		stage.revalidate();
 		stage.repaint();
 
-		if(!isShowing())
-			addNotify();
-
 		updateSize();
 
 		currentPane = optionPane;
@@ -317,7 +318,6 @@ public abstract class OptionsDialog extends EnhancedDialog
 						       ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED);
 		scroller.setMinimumSize(new Dimension(100, 0));
 		splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
-					  jEdit.getBooleanProperty("appearance.continuousLayout"),
 					  scroller,
 					  stage);
 		content.add(splitter, BorderLayout.CENTER);
@@ -462,8 +462,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 			}
 			catch(Throwable t)
 			{
-				Log.log(Log.ERROR,this,"Error saving options:");
-				Log.log(Log.ERROR,this,t);
+				Log.log(Log.ERROR,this,"Error saving options:", t);
 			}
 		}
 		else if(obj instanceof String)
@@ -566,16 +565,19 @@ public abstract class OptionsDialog extends EnhancedDialog
 			this.root = root;
 		}
 
+		@Override
 		public void addTreeModelListener(TreeModelListener l)
 		{
 			listenerList.add(TreeModelListener.class, l);
 		}
 
+		@Override
 		public void removeTreeModelListener(TreeModelListener l)
 		{
 			listenerList.remove(TreeModelListener.class, l);
 		}
 
+		@Override
 		public Object getChild(Object parent, int index)
 		{
 			if (parent instanceof OptionGroup)
@@ -588,6 +590,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 			}
 		}
 
+		@Override
 		public int getChildCount(Object parent)
 		{
 			if (parent instanceof OptionGroup)
@@ -600,6 +603,7 @@ public abstract class OptionsDialog extends EnhancedDialog
 			}
 		}
 
+		@Override
 		public int getIndexOfChild(Object parent, Object child)
 		{
 			if (parent instanceof OptionGroup)
@@ -613,16 +617,19 @@ public abstract class OptionsDialog extends EnhancedDialog
 			}
 		}
 
+		@Override
 		public Object getRoot()
 		{
 			return root;
 		}
 
+		@Override
 		public boolean isLeaf(Object node)
 		{
 			return !(node instanceof OptionGroup);
 		}
 
+		@Override
 		public void valueForPathChanged(TreePath path, Object newValue)
 		{
 			// this model may not be changed by the TableCellEditor
diff --git a/org/gjt/sp/jedit/gui/PanelWindowContainer.java b/org/gjt/sp/jedit/gui/PanelWindowContainer.java
index c4b2ba8..166f605 100644
--- a/org/gjt/sp/jedit/gui/PanelWindowContainer.java
+++ b/org/gjt/sp/jedit/gui/PanelWindowContainer.java
@@ -69,11 +69,10 @@ import org.gjt.sp.jedit.msg.DockableWindowUpdate;
 import org.gjt.sp.util.StandardUtilities;
 //}}}
 
-/**
- * A container for dockable windows. This class should never be used
+/** A container for dockable windows. This class should never be used
  * directly.
  * @author Slava Pestov
- * @version $Id: PanelWindowContainer.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: PanelWindowContainer.java 21504 2012-03-29 17:45:22Z ezust $
  * @since jEdit 4.0pre1
  */
 public class PanelWindowContainer implements DockableWindowContainer, DockingArea
@@ -129,7 +128,7 @@ public class PanelWindowContainer implements DockableWindowContainer, DockingAre
 	{
 		return wm;
 	} //}}}
-	
+
 	//{{{ register() method
 	public void register(DockableWindowManagerImpl.Entry entry)
 	{
@@ -290,7 +289,7 @@ public class PanelWindowContainer implements DockableWindowContainer, DockingAre
 		{
 			if (current != null)
 			{
-				
+
 				Object reason = DockableWindowUpdate.DEACTIVATED;
 				EditBus.send(new DockableWindowUpdate(wm, reason, current.factory.name));
 			}
diff --git a/org/gjt/sp/jedit/gui/PasteFromListDialog.java b/org/gjt/sp/jedit/gui/PasteFromListDialog.java
index d226fd6..2dadee6 100644
--- a/org/gjt/sp/jedit/gui/PasteFromListDialog.java
+++ b/org/gjt/sp/jedit/gui/PasteFromListDialog.java
@@ -30,7 +30,7 @@ import java.awt.*;
 import java.awt.event.*;
 import org.gjt.sp.jedit.*;
 //}}}
-
+/** Paste previous/paste deleted dialog */
 public class PasteFromListDialog extends EnhancedDialog
 {
 	//{{{ PasteFromListDialog constructor
@@ -142,7 +142,7 @@ public class PasteFromListDialog extends EnhancedDialog
 	private JButton insert;
 	private JButton cancel;
 	//}}}
-	
+
 	//{{{ cleanup()
 	private void cleanup()
 	{
@@ -157,7 +157,7 @@ public class PasteFromListDialog extends EnhancedDialog
 	private String getSelectedClipText()
 	{
 		Object[] selected = clips.getSelectedValues();
-		
+
 		if (selected.length == 1)
 		{
 			// These strings may be very large, so if we can just return the same string
@@ -196,10 +196,10 @@ public class PasteFromListDialog extends EnhancedDialog
 		else
 		{
 			String text = getSelectedClipText();
-			int maxPreviewLength = 
+			int maxPreviewLength =
 				jEdit.getIntegerProperty("paste-from-list.max-preview-length",
 					100000);
-			
+
 			if (text.length() > maxPreviewLength)
 			{
 				String showText = text.substring(0, maxPreviewLength);
@@ -226,7 +226,7 @@ public class PasteFromListDialog extends EnhancedDialog
 		{
 			this.maxItemLength = maxItemLength;
 		}
-		
+
 		String shorten(String item)
 		{
 			StringBuilder buf = new StringBuilder();
@@ -243,7 +243,7 @@ public class PasteFromListDialog extends EnhancedDialog
 					buf.append("...");
 					break;
 				}
-				
+
 				char ch = item.charAt(i);
 				if(Character.isWhitespace(ch))
 				{
@@ -278,7 +278,7 @@ public class PasteFromListDialog extends EnhancedDialog
 
 			return this;
 		}
-		
+
 		private int maxItemLength;
 	} //}}}
 
diff --git a/org/gjt/sp/jedit/gui/PasteSpecialDialog.java b/org/gjt/sp/jedit/gui/PasteSpecialDialog.java
index 4ae430d..8208b1b 100644
--- a/org/gjt/sp/jedit/gui/PasteSpecialDialog.java
+++ b/org/gjt/sp/jedit/gui/PasteSpecialDialog.java
@@ -37,14 +37,14 @@ import java.awt.event.ActionListener;
 import java.util.*;
 import java.util.List;
 
-/**
+/** "Paste Special" dialog.
  * @author Matthieu Casanova
  */
 public class PasteSpecialDialog extends EnhancedDialog
 {
 		private static final DataFlavor[] flavors = {DataFlavor.stringFlavor,
 				JEditDataFlavor.jEditRichTextDataFlavor, JEditDataFlavor.html};
-		
+
 		private final TextArea textArea;
 		private final JButton ok;
 
diff --git a/org/gjt/sp/jedit/gui/PingPongList.java b/org/gjt/sp/jedit/gui/PingPongList.java
index b5bb923..eab668a 100644
--- a/org/gjt/sp/jedit/gui/PingPongList.java
+++ b/org/gjt/sp/jedit/gui/PingPongList.java
@@ -3,7 +3,7 @@
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
- * Copyright (C) 2010 Matthieu Casanova
+ * Copyright (C) 2010, 2011 Matthieu Casanova
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -21,7 +21,9 @@
  */
 package org.gjt.sp.jedit.gui;
 
+//{{{ Imports
 import org.gjt.sp.util.Log;
+
 import javax.swing.*;
 import javax.swing.event.ListDataEvent;
 import javax.swing.event.ListDataListener;
@@ -39,8 +41,11 @@ import java.util.List;
 import static javax.swing.Box.createHorizontalBox;
 import static javax.swing.Box.createHorizontalStrut;
 import static org.gjt.sp.jedit.jEdit.getProperty;
+//}}}
 
-/**
+/** A panel with two lists, allowing the user to move items between them.
+ * All methods ensure that an element cannot appear in both lists simultaneously.
+ *
  * @author Matthieu Casanova
  * @since jEdit 4.4pre1
  */
@@ -57,6 +62,7 @@ public class PingPongList<E> extends JPanel
 	private JButton selectAllButton;
 	private JButton selectNoneButton;
 
+	//{{{ PingPongList constructors
 	public PingPongList(List<E> leftData, List<E> rightData)
 	{
 		this(JSplitPane.HORIZONTAL_SPLIT, leftData, rightData);
@@ -109,19 +115,21 @@ public class PingPongList<E> extends JPanel
 		ListDataListener listDataListener = new MyListDataListener();
 		leftModel.addListDataListener(listDataListener);
 		rightModel.addListDataListener(listDataListener);
+	} //}}}
 
-	}
-
+	//{{{ setLeftTooltip() method
 	public void setLeftTooltip(String leftTooltip)
 	{
 		left.setToolTipText(leftTooltip);
-	}
+	} //}}}
 
+	//{{{ setRightTooltip() method
 	public void setRightTooltip(String rightTooltip)
 	{
 		right.setToolTipText(rightTooltip);
-	}
+	} //}}}
 
+	//{{{ setLeftTitle() method
 	public void setLeftTitle(String leftTitle)
 	{
 		if (leftTitle == null)
@@ -135,8 +143,9 @@ public class PingPongList<E> extends JPanel
 		}
 		leftLabel.setText(leftTitle);
 		leftPanel.add(leftLabel, BorderLayout.NORTH);
-	}
+	} //}}}
 
+	//{{{ setRightTitle() method
 	public void setRightTitle(String rightTitle)
 	{
 		if (rightTitle == null)
@@ -150,8 +159,9 @@ public class PingPongList<E> extends JPanel
 		}
 		rightLabel.setText(rightTitle);
 		rightPanel.add(rightLabel, BorderLayout.NORTH);
-	}
+	} //}}}
 
+	//{{{ removeLeftTitle() method
 	public void removeLeftTitle()
 	{
 		if (leftLabel != null)
@@ -159,8 +169,9 @@ public class PingPongList<E> extends JPanel
 			leftPanel.remove(leftLabel);
 			leftLabel = null;
 		}
-	}
+	} //}}}
 
+	//{{{ removeRightTitle() method
 	public void removeRightTitle()
 	{
 		if (rightLabel != null)
@@ -168,41 +179,49 @@ public class PingPongList<E> extends JPanel
 			rightPanel.remove(rightLabel);
 			rightLabel = null;
 		}
-	}
+	} //}}}
 
+	//{{{ getLeftSize() method
 	public int getLeftSize()
 	{
 		return leftModel.getSize();
-	}
+	} //}}}
 
+	//{{{ getRightSize() method
 	public int getRightSize()
 	{
 		return rightModel.getSize();
-	}
+	} //}}}
 
+	//{{{ getLeftDataIterator() method
 	public Iterator<E> getLeftDataIterator()
 	{
 		return leftModel.iterator();
-	}
+	} //}}}
 
+	//{{{ getRightDataIterator() method
 	public Iterator<E> getRightDataIterator()
 	{
 		return rightModel.iterator();
-	}
+	} //}}}
 
+	//{{{ moveAllToLeft() method
 	public void moveAllToLeft()
 	{
 		leftModel.addAll(rightModel.data);
 		rightModel.clear();
-	}
+	} //}}}
 
+	//{{{ moveAllToRight() method
 	public void moveAllToRight()
 	{
 		rightModel.addAll(leftModel.data);
 		leftModel.clear();
-	}
-	//{{{ Inner Classes
-	
+	} //}}}
+
+	//{{{ Inner classes
+
+	//{{{ MyListModel class
 	private static class MyListModel<E> extends AbstractListModel implements Iterable<E>
 	{
 		private List<E> data;
@@ -212,16 +231,19 @@ public class PingPongList<E> extends JPanel
 			this.data = data;
 		}
 
+		@Override
 		public int getSize()
 		{
 			return data.size();
 		}
 
+		@Override
 		public Object getElementAt(int index)
 		{
 			return data.get(index);
 		}
 
+		@Override
 		public Iterator<E> iterator()
 		{
 			return data.iterator();
@@ -257,8 +279,9 @@ public class PingPongList<E> extends JPanel
 
 			fireContentsChanged(this, pos, pos + addedDatas.length - 1);
 		}
-	}
+	} //}}}
 
+	//{{{ MyTransferHandler class
 	private class MyTransferHandler extends TransferHandler
 	{
 		private JList sourceList;
@@ -337,7 +360,7 @@ public class PingPongList<E> extends JPanel
 			sourceList = (JList) c;
 			indices = sourceList.getSelectedIndices();
 
-			@SuppressWarnings({"unchecked"})
+			@SuppressWarnings("unchecked")
 			E[] objects = (E[]) sourceList.getSelectedValues();
 			return new MyTransferable<E>(objects);
 		}
@@ -347,8 +370,9 @@ public class PingPongList<E> extends JPanel
 		{
 			return comp == left || comp == right;
 		}
-	}
+	} //}}}
 
+	//{{{ MyTransferable class
 	private static class MyTransferable<E> implements Transferable
 	{
 		public static final DataFlavor javaListFlavor = new DataFlavor(Collection.class, "java.util.Collection");
@@ -360,22 +384,25 @@ public class PingPongList<E> extends JPanel
 			this.data = data;
 		}
 
+		@Override
 		public DataFlavor[] getTransferDataFlavors()
 		{
 			return new DataFlavor[]{javaListFlavor};
 		}
 
+		@Override
 		public boolean isDataFlavorSupported(DataFlavor flavor)
 		{
 			return flavor.equals(javaListFlavor);
 		}
 
+		@Override
 		public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException
 		{
 			return data;
 		}
-	}
-	
+	} //}}}
+
 	//{{{ ActionHandler class
 	private class ActionHandler implements ActionListener
 	{
@@ -425,6 +452,4 @@ public class PingPongList<E> extends JPanel
 		}
 	}
 	//}}}
-
-	
 }
diff --git a/org/gjt/sp/jedit/gui/RegisterViewer.java b/org/gjt/sp/jedit/gui/RegisterViewer.java
index 0db4b15..4542763 100644
--- a/org/gjt/sp/jedit/gui/RegisterViewer.java
+++ b/org/gjt/sp/jedit/gui/RegisterViewer.java
@@ -34,9 +34,9 @@ import org.gjt.sp.jedit.Registers.Register;
 import org.gjt.sp.jedit.msg.RegisterChanged;
 import org.gjt.sp.jedit.msg.PropertiesChanged;
 //}}}
-
-public class RegisterViewer extends JPanel implements ActionListener,
-	DockableWindow
+/** Dockable view of register contents */
+public class RegisterViewer extends JPanel
+	implements DockableWindow, DefaultFocusComponent
 {
 	//{{{ RegisterViewer constructor
 	public RegisterViewer(View view, String position)
@@ -48,14 +48,14 @@ public class RegisterViewer extends JPanel implements ActionListener,
 			jEdit.getProperty("view-registers.title"));
 		label.setBorder(new EmptyBorder(0,0,3,0));
 		toolBar.add(label);
-		
+
 		toolBar.add(Box.createGlue());
 
 		RolloverButton pasteRegister = new RolloverButton(
 			GUIUtilities.loadIcon("Paste.png"));
 		pasteRegister.setToolTipText(GUIUtilities.prettifyMenuLabel(
 			jEdit.getProperty("paste-string-register.label")));
-		pasteRegister.addActionListener(this);
+		pasteRegister.addActionListener(new InsertHandler());
 		pasteRegister.setActionCommand("paste-string-register");
 		toolBar.add(pasteRegister);
 
@@ -63,11 +63,10 @@ public class RegisterViewer extends JPanel implements ActionListener,
 			GUIUtilities.loadIcon("Clear.png"));
 		clearRegister.setToolTipText(GUIUtilities.prettifyMenuLabel(
 			jEdit.getProperty("clear-string-register.label")));
-		clearRegister.addActionListener(this);
+		clearRegister.addActionListener(new ClearHandler());
 		clearRegister.setActionCommand("clear-string-register");
 		toolBar.add(clearRegister);
 
-		
 		add(BorderLayout.NORTH,toolBar);
 
 		DefaultListModel registerModel = new DefaultListModel();
@@ -76,34 +75,44 @@ public class RegisterViewer extends JPanel implements ActionListener,
 		registerList.setCellRenderer(new Renderer());
 		registerList.addListSelectionListener(new ListHandler());
 		registerList.addMouseListener(new MouseHandler());
-
 		contentTextArea = new JTextArea(10,20);
 		contentTextArea.setEditable(true);
 		documentHandler = new DocumentHandler();
 		//contentTextArea.getDocument().addDocumentListener(documentHandler);
 		contentTextArea.addFocusListener(new FocusHandler());
-
+		//key bindings
+		this.registerKeyboardAction(new EscapeHandler(),
+			KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
+			WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
+		registerList.registerKeyboardAction(new InsertHandler(),
+			KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0),
+			WHEN_FOCUSED);
+		registerList.registerKeyboardAction(new InsertHandler(),
+			KeyStroke.getKeyStroke(KeyEvent.VK_INSERT, 0),
+			WHEN_FOCUSED);
+		registerList.registerKeyboardAction(new ClearHandler(),
+			KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),
+			WHEN_FOCUSED);
+		contentTextArea.registerKeyboardAction(new TabHandler(),
+			KeyStroke.getKeyStroke(KeyEvent.VK_TAB, InputEvent.SHIFT_MASK),
+			WHEN_FOCUSED);
 		int orientation = JSplitPane.HORIZONTAL_SPLIT;
 		if (position.equals(DockableWindowManager.LEFT) ||
 			position.equals(DockableWindowManager.RIGHT))
 			orientation = JSplitPane.VERTICAL_SPLIT;
 
 		add(BorderLayout.CENTER,splitPane = new JSplitPane(orientation,
-			jEdit.getBooleanProperty("appearance.continuousLayout"),
 			new JScrollPane(registerList),
 			new JScrollPane(contentTextArea)));
 
 		refreshList();
 	} //}}}
-	
-	//{{{ actionPerformed() method
-	public void actionPerformed(ActionEvent evt)
+
+	//{{{ focusOnDefaultComponent() method
+	@Override
+	public void focusOnDefaultComponent()
 	{
-		String cmd = evt.getActionCommand();
-		if (cmd.equals("paste-string-register"))
-			insertRegister();
-		else if (cmd.equals("clear-string-register"))
-			clearSelectedIndex();
+		registerList.requestFocusInWindow();
 	} //}}}
 
 	//{{{ handleRegisterChanged() method
@@ -114,13 +123,6 @@ public class RegisterViewer extends JPanel implements ActionListener,
 			refreshList();
 	} //}}}
 
-	//{{{ handlePropertiesChanged
-	@EBHandler
-	public void handlePropertiesChanged(PropertiesChanged msg)
-	{
-		GUIUtilities.initContinuousLayout(splitPane);
-	} //}}}
-
 	//{{{ addNotify() method
 	@Override
 	public void addNotify()
@@ -150,17 +152,6 @@ public class RegisterViewer extends JPanel implements ActionListener,
 
 	//{{{ Private members
 
-	//{{{ clearSelectedIndex() method
-	private void clearSelectedIndex()
-	{
-		Object o = registerList.getSelectedValue();
-		if (o != null && o instanceof Character)
-		{
-			Registers.clearRegister(((Character)o).charValue());
-			refreshList();
-		}
-	} //}}}
-
 	//{{{ Instance variables
 	private JList registerList;
 	private JTextArea contentTextArea;
@@ -218,7 +209,26 @@ public class RegisterViewer extends JPanel implements ActionListener,
 			return;
 		Registers.Register reg = Registers.getRegister(((Character)o).charValue());
 		view.getTextArea().setSelectedText(reg.toString());
+		// can't use requestFocusInWindow() here, otherwise we'll stay
+		// in RegisterViewer when it is a floating window
 		view.getTextArea().requestFocus();
+		
+		// close the window if we are floating
+		DockableWindowManager dm = view.getDockableWindowManager();
+		if (!dm.isDockableWindowDocked("view-registers")) {
+			dm.hideDockableWindow("view-registers");
+		}
+	} //}}}
+
+	//{{{ clearSelectedIndex() method
+	private void clearSelectedIndex()
+	{
+		Object o = registerList.getSelectedValue();
+		if (o != null && o instanceof Character)
+		{
+			Registers.clearRegister(((Character)o).charValue());
+			refreshList();
+		}
 	} //}}}
 
 	//}}}
@@ -280,7 +290,7 @@ public class RegisterViewer extends JPanel implements ActionListener,
 	class ListHandler implements ListSelectionListener
 	{
 		public void valueChanged(ListSelectionEvent evt)
-		{			
+		{
 			Object value = registerList.getSelectedValue();
 			if(!(value instanceof Character))
 			{
@@ -301,11 +311,11 @@ public class RegisterViewer extends JPanel implements ActionListener,
 				{
 					contentTextArea.setText("");
 					contentTextArea.setEditable(false);
-				}	
+				}
 				return;
 			}
-			
-			
+
+
 			if (!editing)
 			{
 				contentTextArea.setText(reg.toString());
@@ -332,13 +342,7 @@ public class RegisterViewer extends JPanel implements ActionListener,
 					JMenuItem item = GUIUtilities.loadMenuItem("paste");
 					popup.add(item);
 					item = new JMenuItem(jEdit.getProperty("clear-string-register.label"));
-					item.addActionListener(new ActionListener()
-					{
-						public void actionPerformed(ActionEvent e)
-						{
-							clearSelectedIndex();
-						}
-					});
+					item.addActionListener(new ClearHandler());
 					popup.add(item);
 				}
 				GUIUtilities.showPopupMenu(popup, registerList, evt.getX(), evt.getY(), false);
@@ -378,7 +382,7 @@ public class RegisterViewer extends JPanel implements ActionListener,
 				editing = false;
 			}
 		}
-		
+
 		private void updateRegister()
 		{
 			Object value = registerList.getSelectedValue();
@@ -402,5 +406,41 @@ public class RegisterViewer extends JPanel implements ActionListener,
 		}
 	}//}}}
 
-	//}}}
+	//{{{ EscapeHandler Class
+	class EscapeHandler implements ActionListener
+	{
+		public void actionPerformed(ActionEvent e)
+		{
+			view.getTextArea().requestFocus();
+			view.toFront();
+	  	}
+	}//}}}
+
+	//{{{ TabHandler Class
+	class TabHandler implements ActionListener
+	{
+		public void actionPerformed(ActionEvent e)
+		{
+			registerList.requestFocusInWindow();
+	  	}
+	}//}}}
+
+	//{{{ InsertHandler Class
+	class InsertHandler implements ActionListener
+	{
+		public void actionPerformed(ActionEvent e)
+		{
+			insertRegister();
+	  	}
+	}//}}}
+
+	//{{{ ClearHandler Class
+	class ClearHandler implements ActionListener
+	{
+		public void actionPerformed(ActionEvent e)
+		{
+			clearSelectedIndex();
+
+	  	}
+	}//}}}
 }
diff --git a/org/gjt/sp/jedit/gui/RolloverButton.java b/org/gjt/sp/jedit/gui/RolloverButton.java
index a8490ef..fa53334 100644
--- a/org/gjt/sp/jedit/gui/RolloverButton.java
+++ b/org/gjt/sp/jedit/gui/RolloverButton.java
@@ -34,7 +34,8 @@ import org.gjt.sp.jedit.OperatingSystem;
 
 //}}}
 
-/**
+/** Class for buttons that implement rollovers
+ *
  * If you wish to have rollovers on your buttons, use this class.
  *
  * Unlike the Swing rollover support, this class works outside of
@@ -43,7 +44,7 @@ import org.gjt.sp.jedit.OperatingSystem;
  *
  * Note: You should not call <code>setBorder()</code> on your buttons,
  * as they probably won't work properly.
- * @version $Id: RolloverButton.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: RolloverButton.java 21506 2012-03-29 17:58:53Z ezust $
  */
 public class RolloverButton extends JButton
 {
diff --git a/org/gjt/sp/jedit/gui/SelectLineRange.java b/org/gjt/sp/jedit/gui/SelectLineRange.java
index 68fe3e4..bc289b5 100644
--- a/org/gjt/sp/jedit/gui/SelectLineRange.java
+++ b/org/gjt/sp/jedit/gui/SelectLineRange.java
@@ -30,7 +30,7 @@ import java.awt.event.*;
 import org.gjt.sp.jedit.textarea.*;
 import org.gjt.sp.jedit.*;
 //}}}
-
+/** Dialog for selection of a range of lines */
 public class SelectLineRange extends EnhancedDialog implements ActionListener
 {
 	//{{{ SelectLineRange constructor
diff --git a/org/gjt/sp/jedit/gui/ShortcutPrefixActiveEvent.java b/org/gjt/sp/jedit/gui/ShortcutPrefixActiveEvent.java
index d8fd61d..b9ee7bb 100644
--- a/org/gjt/sp/jedit/gui/ShortcutPrefixActiveEvent.java
+++ b/org/gjt/sp/jedit/gui/ShortcutPrefixActiveEvent.java
@@ -32,8 +32,7 @@ import javax.swing.event.EventListenerList;
 import org.gjt.sp.util.Log;
 //}}}
 
-/**
- *  Description of the Class
+/** Event fired when jEdit starts and stops listening for shortcut completions
  *
  * @author     jchoyt
  * created    December 17, 2005
diff --git a/org/gjt/sp/jedit/gui/SplashScreen.java b/org/gjt/sp/jedit/gui/SplashScreen.java
index 4e99736..487c754 100644
--- a/org/gjt/sp/jedit/gui/SplashScreen.java
+++ b/org/gjt/sp/jedit/gui/SplashScreen.java
@@ -27,9 +27,8 @@ import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.util.Log;
 //}}}
 
-/**
- * The splash screen displayed on startup.
- * @version $Id: SplashScreen.java 13029 2008-07-08 08:43:48Z kpouer $
+/** The splash screen displayed on startup.
+ * @version $Id: SplashScreen.java 21515 2012-03-31 08:35:49Z jarekczek $
  */
 public class SplashScreen extends JComponent
 {
@@ -131,7 +130,8 @@ public class SplashScreen extends JComponent
 		if (lastLabel != null)
 		{
 			Log.log(Log.DEBUG, SplashScreen.class,
-				lastLabel +':'+(currentTime - lastAdvanceTime) + "ms");
+				lastLabel + ':' + (currentTime - lastAdvanceTime)
+				+ "/" + (currentTime - firstAdvanceTime) + "ms");
 		}
 		if (label != null)
 		{
@@ -200,6 +200,7 @@ public class SplashScreen extends JComponent
 	private static final int PROGRESS_COUNT = 28;
 	private String label;
 	private String lastLabel;
+	private long firstAdvanceTime = System.currentTimeMillis();
 	private long lastAdvanceTime = System.currentTimeMillis();
 	private Font defaultFont = new Font("Dialog",Font.PLAIN,10);
 	private Font labelFont = UIManager.getFont("Label.font").deriveFont(9.8f);
diff --git a/org/gjt/sp/jedit/gui/StatusBar.java b/org/gjt/sp/jedit/gui/StatusBar.java
index cc103ca..9e5e36e 100644
--- a/org/gjt/sp/jedit/gui/StatusBar.java
+++ b/org/gjt/sp/jedit/gui/StatusBar.java
@@ -40,8 +40,7 @@ import org.gjt.sp.jedit.gui.statusbar.ToolTipLabel;
 import org.gjt.sp.util.*;
 //}}}
 
-/**
- * The status bar used to display various information to the user.<p>
+/** The status bar used to display various information to the user.
  *
  * Currently, it is used for the following:
  * <ul>
@@ -53,7 +52,7 @@ import org.gjt.sp.util.*;
  * <li>Displaying memory status
  * </ul>
  *
- * @version $Id: StatusBar.java 17443 2010-03-09 19:53:40Z kpouer $
+ * @version $Id: StatusBar.java 21616 2012-04-30 08:32:24Z kpouer $
  * @author Slava Pestov
  * @since jEdit 3.2pre2
  */
@@ -89,6 +88,7 @@ public class StatusBar extends JPanel implements WorkThreadProgressListener
 		foldWidget = _getWidget("fold");
 		encodingWidget = _getWidget("encoding");
 		wrapWidget = _getWidget("wrap");
+		indentWidget = _getWidget("indent");
 		multiSelectWidget = _getWidget("multiSelect");
 		rectSelectWidget = _getWidget("rectSelect");
 		overwriteWidget = _getWidget("overwrite");
@@ -400,6 +400,7 @@ public class StatusBar extends JPanel implements WorkThreadProgressListener
 	public void updateBufferStatus()
 	{
 		wrapWidget.update();
+		indentWidget.update();
 		lineSepWidget.update();
 		modeWidget.update();
 		foldWidget.update();
@@ -426,6 +427,7 @@ public class StatusBar extends JPanel implements WorkThreadProgressListener
 	private final Widget foldWidget;
 	private final Widget encodingWidget;
 	private final Widget wrapWidget;
+	private final Widget indentWidget;
 	private final Widget multiSelectWidget;
 	private final Widget rectSelectWidget;
 	private final Widget overwriteWidget;
@@ -452,6 +454,8 @@ public class StatusBar extends JPanel implements WorkThreadProgressListener
 			return encodingWidget;
 		if ("wrap".equals(name))
 			return wrapWidget;
+		if ("indent".equals(name))
+			return indentWidget;
 		if ("multiSelect".equals(name))
 			return multiSelectWidget;
 		if ("rectSelect".equals(name))
@@ -468,7 +472,7 @@ public class StatusBar extends JPanel implements WorkThreadProgressListener
 	private Widget _getWidget(String name)
 	{
 		StatusWidgetFactory widgetFactory =
-		(StatusWidgetFactory) ServiceManager.getService("org.gjt.sp.jedit.gui.statusbar.StatusWidget", name);
+		(StatusWidgetFactory) ServiceManager.getService("org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory", name);
 		if (widgetFactory == null)
 		{
 			return null;
diff --git a/org/gjt/sp/jedit/gui/StyleEditor.java b/org/gjt/sp/jedit/gui/StyleEditor.java
index a9c5265..fbf1eb3 100644
--- a/org/gjt/sp/jedit/gui/StyleEditor.java
+++ b/org/gjt/sp/jedit/gui/StyleEditor.java
@@ -50,6 +50,7 @@ import org.gjt.sp.jedit.textarea.JEditTextArea;
 import org.gjt.sp.jedit.buffer.JEditBuffer;
 
 //{{{ StyleEditor class
+/** Style editor dialog */
 public class StyleEditor extends EnhancedDialog implements ActionListener
 {
 	//{{{ invokeForCaret() method
@@ -120,7 +121,7 @@ public class StyleEditor extends EnhancedDialog implements ActionListener
 
 		panel.add(new JLabel(jEdit.getProperty("style-editor.tokenType")));
 		panel.add(new JLabel(styleName));
-		
+
 		italics = new JCheckBox(jEdit.getProperty("style-editor.italics"));
 		italics.setSelected(style.getFont().isItalic());
 		panel.add(italics);
diff --git a/org/gjt/sp/jedit/gui/TaskMonitor.java b/org/gjt/sp/jedit/gui/TaskMonitor.java
index 0472001..126af19 100644
--- a/org/gjt/sp/jedit/gui/TaskMonitor.java
+++ b/org/gjt/sp/jedit/gui/TaskMonitor.java
@@ -3,7 +3,7 @@
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
- * Copyright © 2010 Matthieu Casanova
+ * Copyright © 2010-2012 Matthieu Casanova
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -21,6 +21,7 @@
 
 package org.gjt.sp.jedit.gui;
 
+//{{{ Imports
 import org.gjt.sp.jedit.GUIUtilities;
 import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.util.Task;
@@ -38,9 +39,11 @@ import java.awt.*;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.ArrayList;
+//}}}
 
-/**
+/** Task Monitor dockable panel, for showing progress on active tasks.
  * @author Matthieu Casanova
+ * @since jEdit 4.4
  */
 public class TaskMonitor extends JPanel implements TaskListener
 {
@@ -48,6 +51,7 @@ public class TaskMonitor extends JPanel implements TaskListener
 	private final JTable table;
 	private final JLabel remainingCount;
 
+	//{{{ TaskMonitor constructor
 	public TaskMonitor()
 	{
 		super(new BorderLayout());
@@ -79,12 +83,13 @@ public class TaskMonitor extends JPanel implements TaskListener
 
 		add(new IOProgressMonitor(), BorderLayout.NORTH);
 		add(panel);
-	}
+	} //}}}
 
+	//{{{ addNotify() method
 	@Override
 	public void addNotify()
 	{
-		TaskManager.instance.visit(new TaskManager.TaskVisitor() 
+		TaskManager.instance.visit(new TaskManager.TaskVisitor()
 		{
 			public void visit(Task task)
 			{
@@ -93,63 +98,75 @@ public class TaskMonitor extends JPanel implements TaskListener
 		});
 		TaskManager.instance.addTaskListener(this);
 		super.addNotify();
-	}
+	} //}}}
 
+	//{{{ removeNotify() method
 	@Override
 	public void removeNotify()
 	{
 		TaskManager.instance.removeTaskListener(this);
 		super.removeNotify();
 		model.removeAll();
-	}
+	} //}}}
 
+	//{{{ waiting() method
 	public void waiting(Task task)
 	{
 		model.addTask(task);
-	}
+	} //}}}
 
+	//{{{ running() method
 	public void running(Task task)
 	{
 		repaint();
-	}
+	} //}}}
 
+	//{{{ done() method
 	public void done(Task task)
 	{
 		model.removeTask(task);
-	}
+	} //}}}
 
+	//{{{ statusUpdated() method
 	public void statusUpdated(Task task)
 	{
 		repaint();
-	}
+	} //}}}
 
+	//{{{ maximumUpdated() method
 	public void maximumUpdated(Task task)
 	{
 		repaint();
-	}
+	} //}}}
 
+	//{{{ valueUpdated() method
 	public void valueUpdated(Task task)
 	{
 		repaint();
-	}
+	} //}}}
 
+	//{{{ updateTasksCount() method
 	private void updateTasksCount()
 	{
 		remainingCount.setText(jEdit.getProperty("taskmanager.remainingtasks.label",
 						new Object[]{model.getRowCount()}));
-	}
+	} //}}}
 
+	//{{{ TaskCellRenderer class
 	private static class TaskCellRenderer implements TableCellRenderer
 	{
 		private final JProgressBar progress;
 		private final JButton button;
+
+		//{{{ TaskCellRenderer constructor
 		private TaskCellRenderer()
 		{
 			progress = new JProgressBar();
 			button = new JButton(GUIUtilities.loadIcon(jEdit.getProperty("close-buffer.icon")));
 			progress.setStringPainted(true);
-		}
+		} //}}}
 
+		//{{{ getTableCellRendererComponent
 		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
 							       boolean hasFocus, int row, int column)
 		{
@@ -178,17 +195,19 @@ public class TaskMonitor extends JPanel implements TaskListener
 				progress.setString(task.getStatus());
 				return progress;
 			}
-
+			button.setEnabled(task.isCancellable());
 			return button;
-		}
-	}
+		} //}}}
+	} //}}}
 
+	//{{{ TaskTableEditor class
 	private class TaskTableEditor extends AbstractCellEditor implements TableCellEditor
 	{
 		private final JButton button;
 
 		private Task task;
 
+		//{{{ TaskTableEditor constructor
 		private TaskTableEditor()
 		{
 			button = new JButton(GUIUtilities.loadIcon(jEdit.getProperty("close-buffer.icon")));
@@ -200,12 +219,13 @@ public class TaskMonitor extends JPanel implements TaskListener
 					stopCellEditing();
 				}
 			});
-		}
+		} //}}}
 
+		//{{{ getCellEditorValue() method
 		public Object getCellEditorValue()
 		{
 			return null;
-		}
+		} //}}}
 
 		//{{{ getTableCellEditorComponent() method
 		public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column)
@@ -213,38 +233,45 @@ public class TaskMonitor extends JPanel implements TaskListener
 			task = (Task) value;
 			return button;
 		} //}}}
-	}
+	} //}}}
 
+	//{{{ TaskTableModel class
 	private static class TaskTableModel extends AbstractTableModel
 	{
 		private final java.util.List<Task> tasks;
 
+		//{{{ TaskTableModel constructor
 		private TaskTableModel()
 		{
 			tasks = new ArrayList<Task>();
-		}
+		} //}}}
 
+		//{{{ getRowCount() method
 		public int getRowCount()
 		{
 			return tasks.size();
-		}
+		} //}}}
 
+		//{{{ getColumnCount() method
 		public int getColumnCount()
 		{
 			return 2;
-		}
+		} //}}}
 
+		//{{{ isCellEditable() method
 		@Override
 		public boolean isCellEditable(int rowIndex, int columnIndex)
 		{
 			return columnIndex == 1;
-		}
+		} //}}}
 
+		//{{{ getValueAt() method
 		public Object getValueAt(int rowIndex, int columnIndex)
 		{
 			return tasks.get(rowIndex);
-		}
+		} //}}}
 
+		//{{{ addTask() method
 		void addTask(final Task task)
 		{
 			ThreadUtilities.runInDispatchThread(new Runnable()
@@ -255,8 +282,9 @@ public class TaskMonitor extends JPanel implements TaskListener
 					fireTableRowsInserted(tasks.size()-1, tasks.size()-1);
 				}
 			});
-		}
+		} //}}}
 
+		//{{{ removeTask() method
 		void removeTask(final Task task)
 		{
 			ThreadUtilities.runInDispatchThread(new Runnable()
@@ -271,12 +299,13 @@ public class TaskMonitor extends JPanel implements TaskListener
 					}
 				}
 			});
-		}
+		} //}}}
 
+		//{{{ removeAll() method
 		public void removeAll()
 		{
 			tasks.clear();
 			fireTableDataChanged();
-		}
-	}
+		} //}}}
+	} //}}}
 }
diff --git a/org/gjt/sp/jedit/gui/TextAreaDialog.java b/org/gjt/sp/jedit/gui/TextAreaDialog.java
index a62620d..e7f5cac 100644
--- a/org/gjt/sp/jedit/gui/TextAreaDialog.java
+++ b/org/gjt/sp/jedit/gui/TextAreaDialog.java
@@ -29,7 +29,7 @@ import java.awt.*;
 import java.awt.event.*;
 import org.gjt.sp.jedit.*;
 //}}}
-
+/** A dialog box with a text area */
 public class TextAreaDialog extends EnhancedDialog
 {
 	//{{{ TextAreaDialog constructor
diff --git a/org/gjt/sp/jedit/gui/TipOfTheDay.java b/org/gjt/sp/jedit/gui/TipOfTheDay.java
index 2847f37..c50c749 100644
--- a/org/gjt/sp/jedit/gui/TipOfTheDay.java
+++ b/org/gjt/sp/jedit/gui/TipOfTheDay.java
@@ -33,7 +33,7 @@ import java.util.Random;
 import org.gjt.sp.jedit.*;
 import org.gjt.sp.util.Log;
 //}}}
-
+/** Tip of the day window */
 public class TipOfTheDay extends EnhancedDialog
 {
 	//{{{ TipOfTheDay constructor
diff --git a/org/gjt/sp/jedit/gui/ToolBarManager.java b/org/gjt/sp/jedit/gui/ToolBarManager.java
index ad72ef6..f9dd4d5 100644
--- a/org/gjt/sp/jedit/gui/ToolBarManager.java
+++ b/org/gjt/sp/jedit/gui/ToolBarManager.java
@@ -29,7 +29,7 @@ import java.util.List;
 
 import org.gjt.sp.jedit.*;
 //}}}
-
+/** Handles toolbars for a single View */
 public class ToolBarManager
 {
 	//{{{ ToolBarManager constructor
@@ -62,11 +62,11 @@ public class ToolBarManager
 	//{{{ Private members
 
 	//{{{ Instance variables
-	private Container top;
-	private Container bottom;
+	private final Container top;
+	private final Container bottom;
 
-	private List<Entry> topToolBars = new ArrayList<Entry>();
-	private List<Entry> bottomToolBars = new ArrayList<Entry>();
+	private final List<Entry> topToolBars = new ArrayList<Entry>();
+	private final List<Entry> bottomToolBars = new ArrayList<Entry>();
 	//}}}
 
 	//{{{ addToolBar() method
diff --git a/org/gjt/sp/jedit/gui/VariableGridLayout.java b/org/gjt/sp/jedit/gui/VariableGridLayout.java
index 5f13de9..6bc687b 100644
--- a/org/gjt/sp/jedit/gui/VariableGridLayout.java
+++ b/org/gjt/sp/jedit/gui/VariableGridLayout.java
@@ -22,10 +22,7 @@ import java.awt.LayoutManager2;
 
 import java.util.Arrays;
 
-/**
- * The <code>VariableGridLayout</code> class is a layout manager
- * that lays out a container's components in a rectangular grid
- * with variable cell sizes.<p>
+/** A rectangular grid layout manager with variable cell sizes
  *
  * The container is divided into rectangles, and one component is placed
  * in each rectangle. Each row is as large as the largest component in
@@ -89,6 +86,7 @@ public class VariableGridLayout implements LayoutManager2, java.io.Serializable
 	 * @param hgap The horizontal space between cells (>=0)
 	 * @param vgap The vertical space between cells (>=0)
 	 * @param takeSizesIntoAccount Whether to take minimum and maximum sizes into account when distributing free space
+	 *        Javier Diaz Soto (jbds) warns in #2997417 that this may cause gui freeze and provides a patch
 	 * @param distanceToBorders The distances to the borders
 	 * @throws IllegalArgumentException if mode is not either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS or size is <= 0 or hgap or vgap is < 0
 	 */
@@ -129,6 +127,7 @@ public class VariableGridLayout implements LayoutManager2, java.io.Serializable
 	 * @param hgap The horizontal space between cells (>=0)
 	 * @param vgap The vertical space between cells (>=0)
 	 * @param takeSizesIntoAccount Whether to take minimum and maximum sizes into account when distributing free space
+	 *        Javier Diaz Soto (jbds) warns in #2997417 that this may cause gui freeze and provides a patch
 	 * @throws IllegalArgumentException if mode is not either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS or size is <= 0 or hgap or vgap is < 0
 	 */
 	public VariableGridLayout(int mode, int size, int hgap, int vgap, boolean takeSizesIntoAccount)
@@ -155,7 +154,7 @@ public class VariableGridLayout implements LayoutManager2, java.io.Serializable
 
 	/**
 	 * Creates a variable grid layout manager with the specified mode
-	 * and size, zero horizontal and vertical gap, and zero distance to borders. 
+	 * and size, zero horizontal and vertical gap, and zero distance to borders.
 	 * Does not take minimum and maximum Component sizes into account when distributing
 	 * free space.
 	 *
@@ -374,7 +373,7 @@ public class VariableGridLayout implements LayoutManager2, java.io.Serializable
 							yCorrection = (int)((height-d.height) * comp.getAlignmentY());
 							height = d.height;
 						}
-						
+
 						comp.setBounds(x + xCorrection, y + yCorrection, width, height);
 					}
 				}
@@ -428,15 +427,15 @@ public class VariableGridLayout implements LayoutManager2, java.io.Serializable
 							case MINIMUM:
 								row_height = Math.max(row_height, parent.getComponent(i).getMinimumSize().height);
 								break;
-							
+
 							case MAXIMUM:
 								row_height = Math.max(row_height, parent.getComponent(i).getMaximumSize().height);
 								break;
-							
+
 							case PREFERRED:
 								row_height = Math.max(row_height, parent.getComponent(i).getPreferredSize().height);
 								break;
-							
+
 							default:
 								throw new InternalError("Missing case branch for LayoutSize: " + which);
 						}
@@ -458,15 +457,15 @@ public class VariableGridLayout implements LayoutManager2, java.io.Serializable
 							case MINIMUM:
 								col_width = Math.max(col_width, parent.getComponent(i).getMinimumSize().width);
 								break;
-							
+
 							case MAXIMUM:
 								col_width = Math.max(col_width, parent.getComponent(i).getMaximumSize().width);
 								break;
-							
+
 							case PREFERRED:
 								col_width = Math.max(col_width, parent.getComponent(i).getPreferredSize().width);
 								break;
-							
+
 							default:
 								throw new InternalError("Missing case branch for LayoutSize: " + which);
 						}
diff --git a/org/gjt/sp/jedit/gui/statusbar/ErrorsWidgetFactory.java b/org/gjt/sp/jedit/gui/statusbar/ErrorsWidgetFactory.java
index 44c2d67..0ead86e 100644
--- a/org/gjt/sp/jedit/gui/statusbar/ErrorsWidgetFactory.java
+++ b/org/gjt/sp/jedit/gui/statusbar/ErrorsWidgetFactory.java
@@ -28,6 +28,8 @@ import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.jedit.GUIUtilities;
 import org.gjt.sp.jedit.gui.EnhancedDialog;
 import org.gjt.sp.jedit.syntax.SyntaxStyle;
+import org.gjt.sp.jedit.textarea.JEditEmbeddedTextArea;
+import org.gjt.sp.jedit.textarea.TextArea;
 import org.gjt.sp.util.Log;
 
 import javax.swing.*;
@@ -192,7 +194,7 @@ public class ErrorsWidgetFactory implements StatusWidgetFactory
 	//{{{ ErrorDialog class
 	private static class ErrorDialog extends EnhancedDialog
 	{
-		private final JTextArea textArea;
+		private final TextArea textArea;
 		private final ByteArrayOutputStream byteArrayOutputStream;
 		private final PrintStream printStream;
 		private final JButton removeThisError;
@@ -207,8 +209,8 @@ public class ErrorsWidgetFactory implements StatusWidgetFactory
 			byteArrayOutputStream = new ByteArrayOutputStream();
 			printStream = new PrintStream(byteArrayOutputStream);
 			throwables = Log.throwables.toArray();
-			textArea = new JTextArea();
-			textArea.setEditable(false);
+			textArea = new JEditEmbeddedTextArea();
+			textArea.getBuffer().setMode(jEdit.getMode("logs"));
 			if (throwables.length != 0)
 			{
 				Throwable throwable = (Throwable) throwables[0];
@@ -217,6 +219,7 @@ public class ErrorsWidgetFactory implements StatusWidgetFactory
 			combo = new JComboBox(throwables);
 			combo.addItemListener(new ItemListener()
 			{
+				@Override
 				public void itemStateChanged(ItemEvent e)
 				{
 					setThrowable((Throwable) combo.getSelectedItem());
@@ -234,7 +237,7 @@ public class ErrorsWidgetFactory implements StatusWidgetFactory
 			buttons.add(Box.createHorizontalStrut(6));
 			buttons.add(removeAllErrors = new JButton(jEdit.getProperty("common.clearAll")));
 
-			ErrorDialog.MyActionListener actionListener = new MyActionListener();
+			ActionListener actionListener = new MyActionListener();
 			removeThisError.addActionListener(actionListener);
 			removeAllErrors.addActionListener(actionListener);
 			buttons.add(Box.createGlue());
@@ -249,6 +252,7 @@ public class ErrorsWidgetFactory implements StatusWidgetFactory
 		//{{{ setThrowable() method
 		private void setThrowable(Throwable throwable)
 		{
+			textArea.getBuffer().setReadOnly(false);
 			if (throwable == null)
 			{
 				textArea.setText(null);
@@ -260,6 +264,7 @@ public class ErrorsWidgetFactory implements StatusWidgetFactory
 				textArea.setCaretPosition(0);
 				byteArrayOutputStream.reset();
 			}
+			textArea.getBuffer().setReadOnly(true);
 		} //}}}
 
 		//{{{ dispose() method
diff --git a/org/gjt/sp/jedit/gui/statusbar/IndentWidgetFactory.java b/org/gjt/sp/jedit/gui/statusbar/IndentWidgetFactory.java
new file mode 100644
index 0000000..5c81880
--- /dev/null
+++ b/org/gjt/sp/jedit/gui/statusbar/IndentWidgetFactory.java
@@ -0,0 +1,107 @@
+/*
+ * IndentWidgetFactory.java - The indent widget service
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright (C) 2011 Evan Wright
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.gjt.sp.jedit.gui.statusbar;
+
+//{{{ Imports
+import java.awt.Dimension;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.SwingConstants;
+import org.gjt.sp.jedit.Buffer;
+import org.gjt.sp.jedit.View;
+import org.gjt.sp.jedit.jEdit;
+//}}}
+
+/**
+ * @author Evan Wright
+ * @since jEdit 5.0
+ */
+public class IndentWidgetFactory implements StatusWidgetFactory
+{
+	public Widget getWidget(View view)
+	{
+		Widget indent = new IndentWidget(view);
+		return indent;
+	}
+
+	//{{{ IndentWidget class
+	private static class IndentWidget implements Widget
+	{
+		private final JLabel indent;
+		private final View view;
+		public IndentWidget(final View view)
+		{
+			indent = new ToolTipLabel();
+			indent.setHorizontalAlignment(SwingConstants.CENTER);
+
+			this.view = view;
+			indent.addMouseListener(new MouseAdapter()
+			{
+				@Override
+				public void mouseClicked(MouseEvent evt)
+				{	
+					Buffer buffer = view.getBuffer();
+					buffer.toggleAutoIndent(view);
+					update();
+				}
+			});
+		}
+
+		public JComponent getComponent()
+		{
+			return indent;
+		}
+
+		public void update()
+		{
+			Buffer buffer = view.getBuffer();
+			String indent = buffer.getStringProperty("autoIndent");
+			this.indent.setToolTipText(jEdit.getProperty("view.status.indent-tooltip"));
+			
+			if ("full".equals(indent))
+			{
+				this.indent.setEnabled(true);
+				this.indent.setText("F");
+			}
+			else if ("simple".equals(indent))
+			{
+				this.indent.setEnabled(true);
+				this.indent.setText("S");
+			}
+			else
+			{
+				this.indent.setEnabled(false);
+				this.indent.setText("n");
+			}
+		}
+		
+		public void propertiesChanged()
+		{
+		}
+	} //}}}
+
+}
diff --git a/org/gjt/sp/jedit/gui/statusbar/MemoryStatusWidgetFactory.java b/org/gjt/sp/jedit/gui/statusbar/MemoryStatusWidgetFactory.java
index aad55c9..77e0763 100644
--- a/org/gjt/sp/jedit/gui/statusbar/MemoryStatusWidgetFactory.java
+++ b/org/gjt/sp/jedit/gui/statusbar/MemoryStatusWidgetFactory.java
@@ -1,6 +1,6 @@
 /*
  * MemoryStatusWidgetFactory.java - The memory status widget service
- * :tabSize=8:indentSize=8:noTabs=false:
+ * :tabSize=4:indentSize=4:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
  * Copyright (C) 2008 Matthieu Casanova
@@ -28,9 +28,11 @@ package org.gjt.sp.jedit.gui.statusbar;
 import java.awt.Color;
 import java.awt.Dimension;
 import java.awt.Font;
+import java.awt.Graphics2D;
 import java.awt.Graphics;
 import java.awt.Insets;
 import java.awt.Point;
+import java.awt.RenderingHints;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.MouseAdapter;
@@ -186,13 +188,17 @@ public class MemoryStatusWidgetFactory implements StatusWidgetFactory
 				height);
 
 			String str = (used / 1024 / 1024) + "/"
-				+ (total / 1024 / 1024) + "Mb";
+				+ (total / 1024 / 1024) + "MB";
 
 			FontRenderContext frc = new FontRenderContext(null,false,false);
 
 			Rectangle2D bounds = g.getFont().getStringBounds(str,frc);
 
-			Graphics g2 = g.create();
+			Graphics2D g2 = (Graphics2D)g;
+			g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
+                             RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
+
+
 			g2.setClip(insets.left,insets.top,
 				(int)(width * fraction),
 				height);
@@ -203,10 +209,6 @@ public class MemoryStatusWidgetFactory implements StatusWidgetFactory
 				insets.left + ((int) (width - bounds.getWidth()) / 2),
 				(int)(insets.top + lm.getAscent()));
 
-			g2.dispose();
-
-			g2 = g.create();
-
 			g2.setClip(insets.left + (int)(width * fraction),
 				insets.top,MemoryStatus.this.getWidth()
 				- insets.left - (int)(width * fraction),
@@ -222,7 +224,7 @@ public class MemoryStatusWidgetFactory implements StatusWidgetFactory
 		} //}}}
 
 		//{{{ Private members
-		private static final String memoryTestStr = "999/999Mb";
+		private static final String memoryTestStr = "9999/9999MB";
 
 		private final LineMetrics lm;
 		private final Color progressForeground;
diff --git a/org/gjt/sp/jedit/gui/statusbar/StatusWidgetFactory.java b/org/gjt/sp/jedit/gui/statusbar/StatusWidgetFactory.java
index 9526002..0175c85 100644
--- a/org/gjt/sp/jedit/gui/statusbar/StatusWidgetFactory.java
+++ b/org/gjt/sp/jedit/gui/statusbar/StatusWidgetFactory.java
@@ -24,8 +24,10 @@ package org.gjt.sp.jedit.gui.statusbar;
 
 import org.gjt.sp.jedit.View;
 
-/**
- * A widget factory for the status bar.
+/** A widget factory for the status bar.
+ * 
+ * Implement this interface and register via
+ * services.xml to add another status bar widget. 
  * 
  * @author Matthieu Casanova
  * @since jEdit 4.3pre14 
diff --git a/org/gjt/sp/jedit/gui/statusbar/Widget.java b/org/gjt/sp/jedit/gui/statusbar/Widget.java
index ad99e74..d6fdf29 100644
--- a/org/gjt/sp/jedit/gui/statusbar/Widget.java
+++ b/org/gjt/sp/jedit/gui/statusbar/Widget.java
@@ -24,7 +24,7 @@ package org.gjt.sp.jedit.gui.statusbar;
 
 import javax.swing.JComponent;
 
-/**
+/** Status Bar Widget interface. 
  * @author Matthieu Casanova
  * @since jEdit 4.3pre14
  */
diff --git a/org/gjt/sp/jedit/gui/statusbar/WrapWidgetFactory.java b/org/gjt/sp/jedit/gui/statusbar/WrapWidgetFactory.java
index 9b6de22..7e5613c 100644
--- a/org/gjt/sp/jedit/gui/statusbar/WrapWidgetFactory.java
+++ b/org/gjt/sp/jedit/gui/statusbar/WrapWidgetFactory.java
@@ -81,8 +81,12 @@ public class WrapWidgetFactory implements StatusWidgetFactory
 		{
 			Buffer buffer = view.getBuffer();
 			String wrap = buffer.getStringProperty("wrap");
+			if (largeBufferDeactivateWrap() && "soft".equals(wrap))
+			{
+				wrap = "none";
+			}
 			this.wrap.setToolTipText(jEdit.getProperty("view.status.wrap-tooltip",
-				new String[]{jEdit.getProperty("wrap." + wrap)}));
+								   new String[]{jEdit.getProperty("wrap." + wrap)}));
 			if("none".equals(wrap))
 			{
 				this.wrap.setEnabled(false);
@@ -111,6 +115,13 @@ public class WrapWidgetFactory implements StatusWidgetFactory
 			wrap.setPreferredSize(dim);
 			wrap.setMaximumSize(dim);
 		}
+
+		private boolean largeBufferDeactivateWrap()
+		{
+			Buffer buffer = view.getBuffer();
+			String largeFileMode = buffer.getStringProperty("largefilemode");
+			return "limited".equals(largeFileMode) || "nohighlight".equals(largeFileMode);
+		}
 	} //}}}
 
 }
diff --git a/org/gjt/sp/jedit/gui/statusbar/package.html b/org/gjt/sp/jedit/gui/statusbar/package.html
new file mode 100644
index 0000000..340c018
--- /dev/null
+++ b/org/gjt/sp/jedit/gui/statusbar/package.html
@@ -0,0 +1 @@
+<html><body><p>Widget Factory classes for Status Bar Widgets </p></body></html>
diff --git a/org/gjt/sp/jedit/gui/tray/package.html b/org/gjt/sp/jedit/gui/tray/package.html
new file mode 100644
index 0000000..a9ea99d
--- /dev/null
+++ b/org/gjt/sp/jedit/gui/tray/package.html
@@ -0,0 +1 @@
+<html><body><p>The jEdit System Tray</p></body></html>
diff --git a/org/gjt/sp/jedit/help/HelpIndex.java b/org/gjt/sp/jedit/help/HelpIndex.java
index 5dd8c08..3b5341a 100644
--- a/org/gjt/sp/jedit/help/HelpIndex.java
+++ b/org/gjt/sp/jedit/help/HelpIndex.java
@@ -91,7 +91,7 @@ class HelpIndex
 			{
 				indexDirectory(MiscUtilities.constructPath(jEditHome,"doc","users-guide"));
 				indexDirectory(MiscUtilities.constructPath(jEditHome,"doc","FAQ"));
-				indexDirectory(MiscUtilities.constructPath(jEditHome,"doc","news45"));
+				indexDirectory(MiscUtilities.constructPath(jEditHome,"doc","whatsnew"));
 			}
 		}
 		catch(Throwable e)
diff --git a/org/gjt/sp/jedit/help/HelpTOCPanel.java b/org/gjt/sp/jedit/help/HelpTOCPanel.java
index e06fe8a..865b0bc 100644
--- a/org/gjt/sp/jedit/help/HelpTOCPanel.java
+++ b/org/gjt/sp/jedit/help/HelpTOCPanel.java
@@ -167,7 +167,7 @@ public class HelpTOCPanel extends JPanel
 		tocRoot.add(createNode("COPYING.PLUGINS.txt",
 			jEdit.getProperty("helpviewer.toc.copying-plugins")));
 
-		loadTOC(tocRoot,"news45/toc.xml");
+		loadTOC(tocRoot,"whatsnew/toc.xml");
 		loadTOC(tocRoot,"users-guide/toc.xml");
 		loadTOC(tocRoot,"FAQ/toc.xml");
 
diff --git a/org/gjt/sp/jedit/help/HelpViewer.java b/org/gjt/sp/jedit/help/HelpViewer.java
index b44ac57..5acff97 100644
--- a/org/gjt/sp/jedit/help/HelpViewer.java
+++ b/org/gjt/sp/jedit/help/HelpViewer.java
@@ -27,8 +27,8 @@ import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Cursor;
 import java.awt.Dimension;
-import java.awt.Font;
 
+import java.awt.EventQueue;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyAdapter;
@@ -53,8 +53,8 @@ import javax.swing.JScrollBar;
 import javax.swing.JScrollPane;
 import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
-import javax.swing.SwingUtilities;
 
+import javax.swing.SwingWorker;
 import javax.swing.event.HyperlinkEvent;
 import javax.swing.event.HyperlinkListener;
 
@@ -68,7 +68,6 @@ import org.gjt.sp.jedit.MiscUtilities;
 
 import org.gjt.sp.jedit.EditBus.EBHandler;
 import org.gjt.sp.jedit.msg.PluginUpdate;
-import org.gjt.sp.jedit.msg.PropertiesChanged;
 
 import org.gjt.sp.util.Log;
 
@@ -79,7 +78,7 @@ import static org.gjt.sp.jedit.help.HelpHistoryModel.HistoryEntry;
  * jEdit's searchable help viewer. It uses a Swing JEditorPane to display the HTML,
  * and implements a URL history.
  * @author Slava Pestov
- * @version $Id: HelpViewer.java 18419 2010-08-26 09:21:29Z kerik-sf $
+ * @version $Id: HelpViewer.java 21419 2012-03-23 08:21:20Z kpouer $
  */
 public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHistoryModelListener
 {
@@ -167,7 +166,6 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 		rightPanel.add(BorderLayout.CENTER,viewerScrollPane);
 
 		splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
-					  jEdit.getBooleanProperty("appearance.continuousLayout"),
 					  tabs,
 					  rightPanel);
 		splitter.setBorder(null);
@@ -192,8 +190,9 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 
 		setVisible(true);
 
-		SwingUtilities.invokeLater(new Runnable()
+		EventQueue.invokeLater(new Runnable()
 		{
+			@Override
 			public void run()
 			{
 				splitter.setDividerLocation(jEdit.getIntegerProperty(
@@ -212,6 +211,7 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 	 * 			 history?
 	 * @param scrollPosition The vertical scrollPosition
 	 */
+	@Override
 	public void gotoURL(String url, final boolean addToHistory, final int scrollPosition)
 	{
 		// the TOC pane looks up user's guide URLs relative to the
@@ -275,55 +275,59 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 			   Once jEdit sets JDK 7 as dependency, all this should be
 			   reverted to synchronous code.
 			 */
-			Thread t = new Thread()
+			SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>()
 			{
-				public void run()
+				private boolean success;
+				@Override
+				protected Void doInBackground() throws Exception
 				{
 					try
 					{
 						viewer.setPage(_url);
-						SwingUtilities.invokeLater(new Runnable()
-						{
-							public void run()
-							{
-								if (0 != scrollPosition)
-								{
-									viewerScrollPane.getVerticalScrollBar().setValue(scrollPosition);
-								}
-								if(addToHistory)
-								{
-									historyModel.addToHistory(_url.toString());
-								}
-		
-								HelpViewer.this.shortURL = _shortURL;
-						
-								// select the appropriate tree node.
-								if(_shortURL != null)
-								{
-									toc.selectNode(_shortURL);
-								}
-								
-								viewer.requestFocus();
-							}
-						});
+						success = true;
 					}
 					catch(IOException io)
 					{
 						Log.log(Log.ERROR,this,io);
 						String[] args = { _url.toString(), io.toString() };
 						GUIUtilities.error(HelpViewer.this,"read-error",args);
-						return;
+					}
+					return null;
+				}
+
+				@Override
+				protected void done()
+				{
+					if (success)
+					{
+						if (scrollPosition != 0)
+						{
+							viewerScrollPane.getVerticalScrollBar().setValue(scrollPosition);
+						}
+						if(addToHistory)
+						{
+							historyModel.addToHistory(_url.toString());
+						}
+
+						HelpViewer.this.shortURL = _shortURL;
+
+						// select the appropriate tree node.
+						if(_shortURL != null)
+						{
+							toc.selectNode(_shortURL);
+						}
+
+						viewer.requestFocus();
 					}
 				}
 			};
-			t.start();
+			worker.execute();
 		}
 		catch(MalformedURLException mf)
 		{
 			Log.log(Log.ERROR,this,mf);
 			String[] args = { url, mf.getMessage() };
 			GUIUtilities.error(this,"badurl",args);
-			return;
 		}
 	} //}}}
 
@@ -338,6 +342,7 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 	} //}}}
 
 	//{{{ dispose() method
+	@Override
 	public void dispose()
 	{
 		EditBus.removeFromBus(this);
@@ -362,26 +367,22 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 			}
 	} //}}}
 
-	//{{{ handlePropertiesChanged() method
-	@EBHandler
-	public void handlePropertiesChanged(PropertiesChanged msg)
-	{
-		GUIUtilities.initContinuousLayout(splitter);
-	} //}}}
-
 	//{{{ getBaseURL() method
+	@Override
 	public String getBaseURL()
 	{
 		return baseURL;
 	} //}}}
 
 	//{{{ getShortURL() method
+	@Override
 	public String getShortURL()
 	{
 		return shortURL;
 	} //}}}
 
 	//{{{ historyUpdated() method
+	@Override
 	public void historyUpdated()
 	{
 		back.setEnabled(historyModel.hasPrevious());
@@ -389,6 +390,7 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 	} //}}}
 
 	//{{{ getComponent method
+	@Override
 	public Component getComponent()
 	{
 		return getRootPane();
@@ -399,22 +401,24 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 	//{{{ Instance members
 	private String baseURL;
 	private String shortURL;
-	private HistoryButton back;
-	private HistoryButton forward;
-	private JEditorPane viewer;
-	private JScrollPane viewerScrollPane;
-	private JLabel title;
-	private JSplitPane splitter;
-	private HelpHistoryModel historyModel;
-	private HelpTOCPanel toc;
+	private final HistoryButton back;
+	private final HistoryButton forward;
+	private final JEditorPane viewer;
+	private final JScrollPane viewerScrollPane;
+	private final JLabel title;
+	private final JSplitPane splitter;
+	private final HelpHistoryModel historyModel;
+	private final HelpTOCPanel toc;
 	private boolean queuedTOCReload;
 	//}}}
 
 	//{{{ queueTOCReload() method
+	@Override
 	public void queueTOCReload()
 	{
-		SwingUtilities.invokeLater(new Runnable()
+		EventQueue.invokeLater(new Runnable()
 		{
+			@Override
 			public void run()
 			{
 				queuedTOCReload = false;
@@ -431,6 +435,7 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 	class ActionHandler implements ActionListener
 	{
 		//{{{ actionPerformed() class
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			Object source = evt.getSource();
@@ -448,7 +453,7 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 				url = actionCommand.substring(0,separatorPosition);
 				scrollPosition = Integer.parseInt(actionCommand.substring(separatorPosition+1));
 			}
-			if (url.length() != 0)
+			if (!url.isEmpty())
 			{
 				gotoURL(url,false,scrollPosition);
 				return;
@@ -485,6 +490,7 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 	class LinkHandler implements HyperlinkListener
 	{
 		//{{{ hyperlinkUpdate() method
+		@Override
 		public void hyperlinkUpdate(HyperlinkEvent evt)
 		{
 			if(evt.getEventType() == HyperlinkEvent.EventType.ACTIVATED)
@@ -519,6 +525,7 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 	//{{{ PropertyChangeHandler class
 	class PropertyChangeHandler implements PropertyChangeListener
 	{
+		@Override
 		public void propertyChange(PropertyChangeEvent evt)
 		{
 			if("page".equals(evt.getPropertyName()))
@@ -540,6 +547,7 @@ public class HelpViewer extends JFrame implements HelpViewerInterface, HelpHisto
 	//{{{ KeyHandler class
 	private class KeyHandler extends KeyAdapter
 	{
+		@Override
 		public void keyPressed(KeyEvent ke)
 		{
 			switch (ke.getKeyCode())
diff --git a/org/gjt/sp/jedit/indent/BracketIndentRule.java b/org/gjt/sp/jedit/indent/BracketIndentRule.java
index aa1665b..a8b0202 100644
--- a/org/gjt/sp/jedit/indent/BracketIndentRule.java
+++ b/org/gjt/sp/jedit/indent/BracketIndentRule.java
@@ -30,7 +30,7 @@ import org.gjt.sp.jedit.syntax.TokenMarker;
 
 /**
  * @author Slava Pestov
- * @version $Id: BracketIndentRule.java 18919 2010-11-04 10:52:55Z kpouer $
+ * @version $Id: BracketIndentRule.java 21723 2012-05-27 14:34:13Z k_satoda $
  */
 public abstract class BracketIndentRule implements IndentRule
 {
diff --git a/org/gjt/sp/jedit/indent/CloseBracketIndentRule.java b/org/gjt/sp/jedit/indent/CloseBracketIndentRule.java
index e1ce6ee..4819402 100644
--- a/org/gjt/sp/jedit/indent/CloseBracketIndentRule.java
+++ b/org/gjt/sp/jedit/indent/CloseBracketIndentRule.java
@@ -29,7 +29,7 @@ import org.gjt.sp.util.StandardUtilities;
 
 /**
  * @author Slava Pestov
- * @version $Id: CloseBracketIndentRule.java 18919 2010-11-04 10:52:55Z kpouer $
+ * @version $Id: CloseBracketIndentRule.java 21723 2012-05-27 14:34:13Z k_satoda $
  */
 public class CloseBracketIndentRule extends BracketIndentRule
 {
diff --git a/org/gjt/sp/jedit/indent/DeepIndentRule.java b/org/gjt/sp/jedit/indent/DeepIndentRule.java
index a36c5d5..0bd4dca 100644
--- a/org/gjt/sp/jedit/indent/DeepIndentRule.java
+++ b/org/gjt/sp/jedit/indent/DeepIndentRule.java
@@ -37,7 +37,7 @@ import javax.swing.text.Segment;
  * Deep indent rule.
  *
  * @author Matthieu Casanova
- * @version $Id: DeepIndentRule.java 20108 2011-10-18 12:16:38Z evanpw $
+ * @version $Id: DeepIndentRule.java 21723 2012-05-27 14:34:13Z k_satoda $
  */
 public class DeepIndentRule implements IndentRule
 {
diff --git a/org/gjt/sp/jedit/indent/IndentAction.java b/org/gjt/sp/jedit/indent/IndentAction.java
index 6e87ec6..860c5ae 100644
--- a/org/gjt/sp/jedit/indent/IndentAction.java
+++ b/org/gjt/sp/jedit/indent/IndentAction.java
@@ -25,9 +25,9 @@ package org.gjt.sp.jedit.indent;
 import org.gjt.sp.jedit.buffer.JEditBuffer;
 import org.gjt.sp.util.StandardUtilities;
 
-/**
+/** Abstract Indentation Action 
  * @author Slava Pestov
- * @version $Id: IndentAction.java 15614 2009-06-30 07:21:56Z voituk $
+ * @version $Id: IndentAction.java 21398 2012-03-20 04:32:13Z ezust $
  */
 public interface IndentAction
 {
diff --git a/org/gjt/sp/jedit/indent/IndentRule.java b/org/gjt/sp/jedit/indent/IndentRule.java
index 8a692ba..25d00be 100644
--- a/org/gjt/sp/jedit/indent/IndentRule.java
+++ b/org/gjt/sp/jedit/indent/IndentRule.java
@@ -25,9 +25,9 @@ package org.gjt.sp.jedit.indent;
 import java.util.List;
 import org.gjt.sp.jedit.buffer.JEditBuffer;
 
-/**
+/** Abstract Indentation Rule 
  * @author Slava Pestov
- * @version $Id: IndentRule.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: IndentRule.java 21723 2012-05-27 14:34:13Z k_satoda $
  */
 public interface IndentRule
 {
diff --git a/org/gjt/sp/jedit/indent/OpenBracketIndentRule.java b/org/gjt/sp/jedit/indent/OpenBracketIndentRule.java
index 1cbc60e..22c8382 100644
--- a/org/gjt/sp/jedit/indent/OpenBracketIndentRule.java
+++ b/org/gjt/sp/jedit/indent/OpenBracketIndentRule.java
@@ -28,7 +28,7 @@ import org.gjt.sp.jedit.TextUtilities;
 
 /**
  * @author Slava Pestov
- * @version $Id: OpenBracketIndentRule.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: OpenBracketIndentRule.java 21723 2012-05-27 14:34:13Z k_satoda $
  */
 public class OpenBracketIndentRule extends BracketIndentRule
 {
diff --git a/org/gjt/sp/jedit/indent/RegexpIndentRule.java b/org/gjt/sp/jedit/indent/RegexpIndentRule.java
index b02e96e..06791d8 100644
--- a/org/gjt/sp/jedit/indent/RegexpIndentRule.java
+++ b/org/gjt/sp/jedit/indent/RegexpIndentRule.java
@@ -36,7 +36,7 @@ import org.gjt.sp.jedit.syntax.TokenMarker;
 
 /**
  * @author Slava Pestov
- * @version $Id: RegexpIndentRule.java 18919 2010-11-04 10:52:55Z kpouer $
+ * @version $Id: RegexpIndentRule.java 21723 2012-05-27 14:34:13Z k_satoda $
  */
 public class RegexpIndentRule implements IndentRule
 {
diff --git a/org/gjt/sp/jedit/indent/WhitespaceRule.java b/org/gjt/sp/jedit/indent/WhitespaceRule.java
index 0e3cf8e..6a36591 100644
--- a/org/gjt/sp/jedit/indent/WhitespaceRule.java
+++ b/org/gjt/sp/jedit/indent/WhitespaceRule.java
@@ -40,7 +40,7 @@ import org.gjt.sp.jedit.buffer.JEditBuffer;
  * If the requirements above do not apply, this rule does nothing.</p>
  *
  * @author Marcelo Vanzin
- * @version $Id: WhitespaceRule.java 15614 2009-06-30 07:21:56Z voituk $
+ * @version $Id: WhitespaceRule.java 21723 2012-05-27 14:34:13Z k_satoda $
  * @since jEdit 4.3pre10
  */
 public class WhitespaceRule implements IndentRule
diff --git a/org/gjt/sp/jedit/indent/package.html b/org/gjt/sp/jedit/indent/package.html
new file mode 100644
index 0000000..845f82d
--- /dev/null
+++ b/org/gjt/sp/jedit/indent/package.html
@@ -0,0 +1 @@
+<html><body><p>Indentation rules and actions. </p></body></html>
diff --git a/org/gjt/sp/jedit/input/TextAreaInputHandler.java b/org/gjt/sp/jedit/input/TextAreaInputHandler.java
index 6ada78c..52927bf 100644
--- a/org/gjt/sp/jedit/input/TextAreaInputHandler.java
+++ b/org/gjt/sp/jedit/input/TextAreaInputHandler.java
@@ -75,7 +75,16 @@ public abstract class TextAreaInputHandler extends AbstractInputHandler<JEditBea
 		//	Log.log(Log.DEBUG,this,view+".isFocused()="+view.isFocused()+'.',new Exception());
 		}
 
-		evt = _preprocessKeyEvent(evt);
+		if(evt.isConsumed())
+			return;
+
+		if(Debug.DUMP_KEY_EVENTS)
+		{
+			Log.log(Log.DEBUG,this,"Key event (preprocessing) : "
+					       + toString(evt));
+		}
+
+		evt = KeyEventWorkaround.processKeyEvent(evt);
 		if(evt == null)
 			return;
 
@@ -123,28 +132,6 @@ public abstract class TextAreaInputHandler extends AbstractInputHandler<JEditBea
 		}
 	} //}}}
 
-	//{{{ _preprocessKeyEvent() method
-	/**
-	 * This method returns if the keyboard event can be handled or not.
-	 *
-	 * @param evt the keyboard event
-	 * @return null if the keyboard event cannot be handled, or the keyboard event itself
-	 * otherwise
-	 */
-	private KeyEvent _preprocessKeyEvent(KeyEvent evt)
-	{
-		if(evt.isConsumed())
-			return null;
-
-		if(Debug.DUMP_KEY_EVENTS)
-		{
-			Log.log(Log.DEBUG,this,"Key event (preprocessing) : "
-					+ toString(evt));
-		}
-
-		return KeyEventWorkaround.processKeyEvent(evt);
-	} //}}}
-
 	//{{{ processKeyEventSub() method
 	private void processKeyEventSub(boolean focusOnTextArea)
 	{
diff --git a/org/gjt/sp/jedit/input/package.html b/org/gjt/sp/jedit/input/package.html
new file mode 100644
index 0000000..18458cc
--- /dev/null
+++ b/org/gjt/sp/jedit/input/package.html
@@ -0,0 +1 @@
+<html><body><p>Keyboard Input Handlers</p></body></html>
diff --git a/org/gjt/sp/jedit/io/CopyFileWorker.java b/org/gjt/sp/jedit/io/CopyFileWorker.java
index ba434ff..ec684c0 100644
--- a/org/gjt/sp/jedit/io/CopyFileWorker.java
+++ b/org/gjt/sp/jedit/io/CopyFileWorker.java
@@ -3,7 +3,7 @@
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
- * Copyright (C) 2008 Matthieu Casanova
+ * Copyright (C) 2008, 2012 Matthieu Casanova
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -23,12 +23,15 @@
 package org.gjt.sp.jedit.io;
 
 //{{{ Imports
-
 import java.awt.Component;
 import java.io.IOException;
+import java.util.List;
+import java.util.concurrent.CountDownLatch;
 
+import org.gjt.sp.jedit.MiscUtilities;
 import org.gjt.sp.util.Log;
 import org.gjt.sp.util.Task;
+import org.gjt.sp.util.ThreadUtilities;
 //}}}
 
 /**
@@ -40,44 +43,244 @@ import org.gjt.sp.util.Task;
  */
 public class CopyFileWorker extends Task
 {
+	/**
+	 * The behavior if the target already exists
+	 * @since jEdit 5.0
+	 */
+	enum Behavior 
+	{ 
+		/** Do not copy file. */
+		SKIP, 
+	
+		/** Overwrite existing file. */
+		OVERWRITE, 
+	
+		/** Rename existing file. */
+		RENAME 
+	}
+
+	private String source;
+
 	private final Component comp;
-	private final String source;
+
+	private List<String> sources;
+
+	/**
+	 * The behavior if the target already exists.
+	 */
+	private final Behavior behavior;
 
 	private final String target;
 
-	//{{{ CopyFileWorker constructor
 	/**
+	 * A latch to tell when the copy is finished
+	 */
+	private CountDownLatch latch;
+
+	//{{{ CopyFileWorker constructors
+	/**
+	 * Copy a file. Careful, it will <b>overwrite</b> the target.
 	 * @param comp   the component that will be used as parent in case of error
-	 * @param source the source VFS
-	 * @param target the target VFS
+	 * @param source the source path
+	 * @param target the target path (it is the file path, not a parent directory)
 	 */
 	public CopyFileWorker(Component comp, String source, String target)
 	{
+		this(comp, source, target, null);
+	}
+
+	/**
+	 * Copy a file. Careful, it will <b>overwrite</b> the target.
+	 * @param comp   the component that will be used as parent in case of error
+	 * @param source the source path
+	 * @param target the target path (it is the file path, not a parent directory)
+	 * @param latch a latch so the caller knows when the copy is done
+	 */
+	private CopyFileWorker(Component comp, String source, String target, CountDownLatch latch)
+	{
 		if (source == null || target == null)
 			throw new NullPointerException("The source and target cannot be null");
 		if (source.equals(target))
-		{
 			throw new IllegalArgumentException("The source and target must not be the same");
-		}
 		this.comp = comp;
 		this.source = source;
 		this.target = target;
+		behavior = Behavior.OVERWRITE;
+		this.latch = latch;
 		setLabel("Copy " + source + " to " + target);
+	}
+
+	/**
+	 * Copy all files from the list to the target directory.
+	 * If some files already exist in the target directory the files will 
+	 * be skipped.
+	 * @param comp   the component that will be used as parent in case of error
+	 * @param sources the sources path to copy
+	 * @param target the target path (it must be a directory otherwise nothing will be copied)
+	 * @since jEdit 5.0
+	 */
+	public CopyFileWorker(Component comp, List<String> sources, String target)
+	{
+		this(comp, sources, target, Behavior.SKIP);
+	}
+
+	/**
+	 * Copy all files from the list to the target directory.
+	 * If some files already exist in the target directory the <code>Behavior</code> will decide what
+	 * to do.
+	 * @param comp   the component that will be used as parent in case of error
+	 * @param sources the sources path to copy
+	 * @param target the target path (it must be a directory otherwise nothing will be copied)
+	 * @param behavior the behavior if the target file already exists
+	 * @since jEdit 5.0
+	 */
+	public CopyFileWorker(Component comp, List<String> sources, String target, Behavior behavior)
+	{
+		if (sources == null || target == null)
+			throw new NullPointerException("The source and target cannot be null");
+		this.comp = comp;
+		this.sources = sources;
+		this.target = target;
+		this.behavior = behavior;
 	} //}}}
 
-	//{{{ run() method
+	//{{{ _run() method
 	@Override
 	public void _run()
 	{
 		Log.log(Log.DEBUG, this, this + ".run()");
+		if (source != null)
+		{
+			// single file copy
+			try
+			{
+				VFS.copy(this, source, target, comp, false, false);
+			}
+			catch (IOException e)
+			{
+				Log.log(Log.ERROR, this, e, e);
+			}
+			finally
+			{
+				if (latch != null)
+					latch.countDown();
+			}
+		}
+		else
+		{
+			// List file copy
+			copyFileList();
+		}
+	} //}}}
+
+	//{{{ copyFileList() method
+	private void copyFileList()
+	{
+		VFS vfs = VFSManager.getVFSForPath(target);
+		Object targetSession = null;
 		try
 		{
-			VFS.copy(this, source, target, comp, true);
+			targetSession = vfs.createVFSSession(target, comp);
+			if (targetSession == null)
+			{
+				Log.log(Log.ERROR, this, "Target VFS path cannot be reached");
+				return;
+			}
+			VFSFile targetFile = vfs._getFile(targetSession, target, comp);
+			if (targetFile == null)
+			{
+				Log.log(Log.ERROR, this, "Target is unreachable or do not exist");
+				return;
+			}
+			
+			if (targetFile.getType() != VFSFile.DIRECTORY)
+			{
+				Log.log(Log.ERROR, this, "Target is not a directory");
+				return;
+			}
+			if (sources != null)
+			{
+				setMaximum(sources.size());
+				for (int i = 0; i < sources.size(); i++)
+				{
+					setValue(i);
+					String sourcePath = sources.get(i);
+					String sourceName = MiscUtilities.getFileName(sourcePath);
+					setLabel(sourceName);
+					copy(targetSession, vfs, sourcePath, sourceName, target);
+				}
+			}
 		}
 		catch (IOException e)
 		{
-			Log.log(Log.ERROR, this, e, e);
+			Log.log(Log.ERROR, this, e);
+		}
+		catch (InterruptedException e)
+		{
+			Log.log(Log.WARNING, this, "Copy was interrupted");
+		}
+		finally
+		{
+			VFSManager.sendVFSUpdate(vfs, target, true);
+			try
+			{
+				if (targetSession != null)
+					vfs._endVFSSession(targetSession, comp);
+			}
+			catch (IOException e)
+			{
+			}
+		}
+	} //}}}
+
+	//{{{ copy() method
+	private void copy(Object vfsSession, VFS vfs, String sourcePath, String sourceName, String targetPath)
+		throws  IOException, InterruptedException
+	{
+		String name = getTargetName(vfsSession, vfs, targetPath, sourceName);
+		if (name == null)
+		{
+			return;
+		}
+		String targetName = MiscUtilities.constructPath(targetPath, name);
+		CountDownLatch latch = new CountDownLatch(1);
+		ThreadUtilities.runInBackground(new CopyFileWorker(comp, sourcePath, targetName, latch));
+		latch.await();
+	} //}}}
+
+	//{{{ getTargetName() method
+	private String getTargetName(Object session, VFS vfs, String path, String baseName) throws IOException
+	{
+		if (behavior == Behavior.OVERWRITE)
+		{
+			// We want to overwrite, no need to check anything
+			return baseName;
+		}
+
+		String s = MiscUtilities.constructPath(target, baseName);
+		VFSFile file = vfs._getFile(session, s, comp);
+		if (file == null)
+		{
+			// The target file do not exist, perfect
+			return baseName;
+		}
+		if (behavior == Behavior.SKIP)
+			return null;
+
+
+		String extension = MiscUtilities.getFileExtension(baseName);
+		String nameNoExtension = MiscUtilities.getBaseName(baseName);
+		for (int i = 1;i<1000;i++)
+		{
+			String name = nameNoExtension + "-copy-" + i;
+			if (extension != null)
+				name += extension;
+			s = MiscUtilities.constructPath(path, name);
+			file = vfs._getFile(session, s, comp);
+			if (file == null)
+				return name;
 		}
+		return null;
 	} //}}}
 
 	@Override
diff --git a/org/gjt/sp/jedit/io/FavoritesVFS.java b/org/gjt/sp/jedit/io/FavoritesVFS.java
index bee06fb..42b6966 100644
--- a/org/gjt/sp/jedit/io/FavoritesVFS.java
+++ b/org/gjt/sp/jedit/io/FavoritesVFS.java
@@ -38,7 +38,7 @@ import org.gjt.sp.jedit.*;
  * favorite and clicking 'delete' in the browser just deletes the
  * favorite, and not the directory itself.
  * @author Slava Pestov
- * @version $Id: FavoritesVFS.java 19948 2011-09-09 16:35:32Z kpouer $
+ * @version $Id: FavoritesVFS.java 21627 2012-05-04 16:58:22Z jarekczek $
  */
 public class FavoritesVFS extends VFS
 {
@@ -47,7 +47,8 @@ public class FavoritesVFS extends VFS
 	//{{{ FavoritesVFS constructor
 	public FavoritesVFS()
 	{
-		super("favorites",DELETE_CAP | RENAME_CAP | LOW_LATENCY_CAP,
+		super("favorites",DELETE_CAP | RENAME_CAP | LOW_LATENCY_CAP
+			| NON_AWT_SESSION_CAP,
 			new String[] { EA_TYPE });
 
 		/* addToFavorites(), which is a static method
@@ -191,12 +192,14 @@ public class FavoritesVFS extends VFS
 			int i = 0;
 			for (Favorite favorite : favorites)
 			{
-				jEdit.setProperty("vfs.favorite." + i,
-					favorite.getPath());
-				jEdit.setProperty("vfs.favorite." + i
-					+ ".label", favorite.getLabel());
-				jEdit.setIntegerProperty("vfs.favorite." + i
-					+ ".type", favorite.getType());
+				String p = favorite.getPath();
+				String l = favorite.getLabel();
+				jEdit.setProperty("vfs.favorite." + i, p);
+				if (p.equals(l) || MiscUtilities.abbreviate(p).equals(l))
+					jEdit.unsetProperty("vfs.favorite." + i + ".label");
+				else 
+					jEdit.setProperty("vfs.favorite." + i + ".label", l);
+				jEdit.setIntegerProperty("vfs.favorite." + i + ".type", favorite.getType());
 
 				i++;
 			}
@@ -233,7 +236,7 @@ public class FavoritesVFS extends VFS
 		Favorite(String path, int type)
 		{
 			super(path,path,PROTOCOL + ':' + path,type, 0L,false);
-			this.label = path;
+			this.label = MiscUtilities.abbreviate(path);
 		}
 
 		public String getLabel()
diff --git a/org/gjt/sp/jedit/io/FileRootsVFS.java b/org/gjt/sp/jedit/io/FileRootsVFS.java
index 90282be..944fb9d 100644
--- a/org/gjt/sp/jedit/io/FileRootsVFS.java
+++ b/org/gjt/sp/jedit/io/FileRootsVFS.java
@@ -36,7 +36,7 @@ import org.gjt.sp.jedit.OperatingSystem;
 /**
  * A VFS that lists local root filesystems.
  * @author Slava Pestov
- * @version $Id: FileRootsVFS.java 14617 2009-02-09 09:42:52Z kpouer $
+ * @version $Id: FileRootsVFS.java 21627 2012-05-04 16:58:22Z jarekczek $
  */
 public class FileRootsVFS extends VFS
 {
@@ -45,8 +45,9 @@ public class FileRootsVFS extends VFS
 	//{{{ FileRootsVFS constructor
 	public FileRootsVFS()
 	{
-		super("roots",LOW_LATENCY_CAP | BROWSE_CAP, new String[] {
-			EA_TYPE });
+		super("roots",LOW_LATENCY_CAP | BROWSE_CAP
+			| NON_AWT_SESSION_CAP,
+			new String[] { EA_TYPE });
 	} //}}}
 
 	//{{{ getParentOfPath() method
diff --git a/org/gjt/sp/jedit/io/FileVFS.java b/org/gjt/sp/jedit/io/FileVFS.java
index 03b947d..2c01b1a 100644
--- a/org/gjt/sp/jedit/io/FileVFS.java
+++ b/org/gjt/sp/jedit/io/FileVFS.java
@@ -39,7 +39,7 @@ import org.gjt.sp.util.Log;
 /**
  * Local filesystem VFS.
  * @author Slava Pestov
- * @version $Id: FileVFS.java 19252 2011-01-22 21:27:03Z vanza $
+ * @version $Id: FileVFS.java 21721 2012-05-27 09:03:56Z jarekczek $
  */
 public class FileVFS extends VFS
 {
@@ -50,6 +50,7 @@ public class FileVFS extends VFS
 	{
 		super("file",READ_CAP | WRITE_CAP | BROWSE_CAP | DELETE_CAP
 			| RENAME_CAP | MKDIR_CAP | LOW_LATENCY_CAP
+			| NON_AWT_SESSION_CAP
 			| (OperatingSystem.isCaseInsensitiveFS()
 			? CASE_INSENSITIVE_CAP : 0),
 			new String[] { EA_TYPE, EA_SIZE, EA_STATUS,
@@ -60,7 +61,7 @@ public class FileVFS extends VFS
 	@Override
 	public String getParentOfPath(String path)
 	{
-		if(OperatingSystem.isDOSDerived())
+		if(OperatingSystem.isWindows())
 		{
 			if(path.length() == 2 && path.charAt(1) == ':')
 				return FileRootsVFS.PROTOCOL + ':';
@@ -358,6 +359,8 @@ public class FileVFS extends VFS
 		File directory = new File(path);
 		File[] list = null;
 		if(directory.exists())
+			if (fsView == null)
+				fsView = FileSystemView.getFileSystemView();
 			list = fsView.getFiles(directory,false);
 
 		if(list == null)
@@ -503,48 +506,6 @@ public class FileVFS extends VFS
 		return retVal;
 	} //}}}
 
-	//{{{ _backup() method
-	@Override
-	public void _backup(Object session, String path, Component comp)
-		throws IOException
-	{
-		// Fetch properties
-
-		String backupPrefix = jEdit.getProperty("backup.prefix");
-		String backupSuffix = jEdit.getProperty("backup.suffix");
-
-		String backupDirectory = jEdit.getProperty("backup.directory");
-
-		int backupTimeDistance = jEdit.getIntegerProperty("backup.minTime",0);
-		File file = new File(path);
-
-		if (!file.exists())
-			return;
-
-		// Check for backup.directory, and create that
-		// directory if it doesn't exist
-		if(backupDirectory == null || backupDirectory.length() == 0)
-			backupDirectory = file.getParent();
-		else
-		{
-			backupDirectory = MiscUtilities.constructPath(
-				System.getProperty("user.home"), backupDirectory);
-
-			// Perhaps here we would want to guard with
-			// a property for parallel backups or not.
-			backupDirectory = MiscUtilities.concatPath(
-				backupDirectory,file.getParent());
-
-			File dir = new File(backupDirectory);
-
-			if (!dir.exists())
-				dir.mkdirs();
-		}
-
-		MiscUtilities.saveBackup(file, jEdit.getIntegerProperty("backups",1), backupPrefix,
-			backupSuffix,backupDirectory,backupTimeDistance);
-	} //}}}
-
 	//{{{ _createInputStream() method
 	@Override
 	public InputStream _createInputStream(Object session, String path,
@@ -680,6 +641,6 @@ public class FileVFS extends VFS
 	//}}}
 
 	//{{{ Private members
-	private static final FileSystemView fsView = FileSystemView.getFileSystemView();
+	private static FileSystemView fsView = null;
 	//}}}
 }
diff --git a/org/gjt/sp/jedit/io/UrlVFS.java b/org/gjt/sp/jedit/io/UrlVFS.java
index 5503d25..fc3a502 100644
--- a/org/gjt/sp/jedit/io/UrlVFS.java
+++ b/org/gjt/sp/jedit/io/UrlVFS.java
@@ -32,14 +32,14 @@ import org.gjt.sp.util.Log;
 /**
  * URL VFS.
  * @author Slava Pestov
- * @version $Id: UrlVFS.java 19908 2011-09-02 23:08:54Z Vampire0 $
+ * @version $Id: UrlVFS.java 21627 2012-05-04 16:58:22Z jarekczek $
  */
 public class UrlVFS extends VFS
 {
 	//{{{ UrlVFS constructor
 	public UrlVFS()
 	{
-		super("url", READ_CAP);
+		super("url", READ_CAP | NON_AWT_SESSION_CAP);
 	} //}}}
 
 	//{{{ constructPath() method
diff --git a/org/gjt/sp/jedit/io/VFS.java b/org/gjt/sp/jedit/io/VFS.java
index 61a8881..1b59b43 100644
--- a/org/gjt/sp/jedit/io/VFS.java
+++ b/org/gjt/sp/jedit/io/VFS.java
@@ -41,6 +41,7 @@ import org.gjt.sp.util.Log;
 import org.gjt.sp.util.ProgressObserver;
 import org.gjt.sp.util.IOUtilities;
 import org.gjt.sp.util.StandardUtilities;
+import org.gjt.sp.util.ThreadUtilities;
 import org.gjt.sp.util.WorkThread;
 //}}}
 
@@ -66,13 +67,16 @@ import org.gjt.sp.util.WorkThread;
  * persistence return a dummy object as a session.<p>
  *
  * Methods whose names are prefixed with "_" expect to be given a
- * previously-obtained session object. A session must be obtained from the AWT
- * thread this method:
+ * previously-obtained session object. A session must be obtained with
+ * this method:
  *
  * <ul>
  * <li>{@link #createVFSSession(String,Component)}</li>
  * </ul>
  *
+ * That method should be called from the AWT (EDT) thread, unless
+ * the filesystem has <code>NON_AWT_SESSION_CAP</code> capability.<p>
+ *
  * When done, the session must be disposed of using
  * {@link #_endVFSSession(Object,Component)}.<p>
  *
@@ -81,7 +85,8 @@ import org.gjt.sp.util.WorkThread;
  * The following methods cannot be called from an I/O thread:
  *
  * <ul>
- * <li>{@link #createVFSSession(String,Component)}</li>
+ * <li>{@link #createVFSSession(String,Component)} - unless
+ *     <code>NON_AWT_SESSION_CAP</code> capability is set</li>
  * <li>{@link #insert(View,Buffer,String)}</li>
  * <li>{@link #load(View,Buffer,String)}</li>
  * <li>{@link #save(View,Buffer,String)}</li>
@@ -99,7 +104,7 @@ import org.gjt.sp.util.WorkThread;
  * @see VFSManager#getVFSForProtocol(String)
  *
  * @author Slava Pestov
- * @author $Id: VFS.java 19908 2011-09-02 23:08:54Z Vampire0 $
+ * @author $Id: VFS.java 21720 2012-05-27 08:31:15Z jarekczek $
  */
 public abstract class VFS
 {
@@ -162,6 +167,16 @@ public abstract class VFS
 	 */
 	public static final int CASE_INSENSITIVE_CAP = 1 << 7;
 
+	/**
+	 * Sessions created outside Event Dispatching Thread -
+	 * file system capability. Set for the file system that does not
+	 * require that <code>createVFSSession</code> is called on edt.
+	 * All systems that do not implement <code>createVFSSession</code>
+	 * should set it, but others may too.
+	 * @since jEdit 5.0pre1
+	 */
+	public static final int NON_AWT_SESSION_CAP = 1 << 8;
+
 	//}}}
 
 	//{{{ Extended attributes
@@ -411,11 +426,13 @@ public abstract class VFS
 	 */
 	public void reloadDirectory(String path) {} //}}}
 
-	//{{{ createVFSSession() method
+	//{{{ createVFSSession() methods
 	/**
 	 * Creates a VFS session. This method is called from the AWT thread,
 	 * so it should not do any I/O. It could, however, prompt for
-	 * a login name and password, for example.
+	 * a login name and password, for example. A simpler filesystem
+	 * may set the <code>NON_AWT_SESSION_CAP</code> capability. When set,
+	 * sessions may be obtained from any thread.
 	 * @param path The path in question
 	 * @param comp The component that will parent any dialog boxes shown
 	 * @return The session. The session can be null if there were errors
@@ -424,7 +441,30 @@ public abstract class VFS
 	public Object createVFSSession(String path, Component comp)
 	{
 		return new Object();
-	} //}}}
+	}
+	
+	/**
+	* Same as {@link #createVFSSession}, but may be called fromy any
+	* thread. It first checks the <code>NON_AWT_SESSION_CAP</code>
+	* capability and enters EDT thread if necessary.
+	*/
+	public Object createVFSSessionSafe(final String path,
+	                                   final Component comp)
+	{
+		Object session = null;
+		if ((getCapabilities() & NON_AWT_SESSION_CAP) != 0)
+		{
+			session = createVFSSession(path, comp);
+		}
+		else
+		{
+			SessionGetter getter = new SessionGetter(path, comp);
+			ThreadUtilities.runInDispatchThreadAndWait(getter);
+			session = getter.get();
+		}
+		return session;
+	}
+	//}}}
 
 	//{{{ load() method
 	/**
@@ -516,7 +556,37 @@ public abstract class VFS
 	 * @since jEdit 4.3pre3
 	 */
 	public static boolean copy(ProgressObserver progress, VFS sourceVFS, Object sourceSession,String sourcePath,
-		VFS targetVFS, Object targetSession,String targetPath, Component comp, boolean canStop)
+				   VFS targetVFS, Object targetSession,String targetPath, Component comp, boolean canStop)
+		throws IOException
+	{
+		return copy(progress, sourceVFS, sourceSession, sourcePath, targetVFS, targetSession, targetPath,
+			    comp, canStop, true);
+	}
+
+	/**
+	 * Copy a file to another using VFS.
+	 *
+	 * @param progress the progress observer. It could be null if you don't want to monitor progress. If not null
+	 *                  you should probably launch this command in a WorkThread
+	 * @param sourceVFS the source VFS
+	 * @param sourceSession the VFS session
+	 * @param sourcePath the source path. It must be a file and must exists
+	 * @param targetVFS the target VFS
+	 * @param targetSession the target session
+	 * @param targetPath the target path.
+	 * If it is a path, it must exists, if it is a file, the parent must
+	 * exists
+	 * @param comp comp The component that will parent error dialog boxes
+	 * @param canStop could this copy be stopped ?
+	 * @param sendVFSUpdate true if you want to send a VFS update after the copy. False otherwise (if you do a lot
+	 *                      of copy)
+	 * @return true if the copy was successful
+	 * @throws IOException  IOException If an I/O error occurs
+	 * @since jEdit 5.0
+	 */
+	public static boolean copy(ProgressObserver progress, VFS sourceVFS, Object sourceSession,String sourcePath,
+		VFS targetVFS, Object targetSession,String targetPath, Component comp, boolean canStop,
+		boolean sendVFSUpdate)
 	throws IOException
 	{
 		if (progress != null)
@@ -560,7 +630,8 @@ public abstract class VFS
 			in = new BufferedInputStream(sourceVFS._createInputStream(sourceSession, sourcePath, false, comp));
 			out = new BufferedOutputStream(targetVFS._createOutputStream(targetSession, targetPath, comp));
 			boolean copyResult = IOUtilities.copyStream(IOBUFSIZE, progress, in, out, canStop);
-			VFSManager.sendVFSUpdate(targetVFS, targetPath, true);
+			if (sendVFSUpdate)
+				VFSManager.sendVFSUpdate(targetVFS, targetPath, true);
 			return copyResult;
 		}
 		finally
@@ -579,28 +650,53 @@ public abstract class VFS
 	 * @param targetPath the target path
 	 * @param comp comp The component that will parent error dialog boxes
 	 * @param canStop if true the copy can be stopped
+	 * @param sendVFSUpdate true if you want to send a VFS update after the copy. False otherwise (if you do a lot
+	 *                      of copy)
 	 * @return true if the copy was successful
 	 * @throws IOException IOException If an I/O error occurs
-	 * @since jEdit 4.3pre3
+	 * @since jEdit 5.0
 	 */
-	public static boolean copy(ProgressObserver progress, String sourcePath,String targetPath, Component comp, boolean canStop)
-	throws IOException
+	public static boolean copy(ProgressObserver progress, String sourcePath,String targetPath, Component comp,
+				   boolean canStop, boolean sendVFSUpdate)
+		throws IOException
 	{
 		VFS sourceVFS = VFSManager.getVFSForPath(sourcePath);
 		Object sourceSession = sourceVFS.createVFSSession(sourcePath, comp);
 		if (sourceSession == null)
 		{
-			Log.log(Log.WARNING, VFS.class, "Unable to get a valid session from " + sourceVFS + " for path " + sourcePath);
+			Log.log(Log.WARNING, VFS.class, "Unable to get a valid session from " + sourceVFS +
+							" for path " + sourcePath);
 			return false;
 		}
 		VFS targetVFS = VFSManager.getVFSForPath(targetPath);
 		Object targetSession = targetVFS.createVFSSession(targetPath, comp);
 		if (targetSession == null)
 		{
-			Log.log(Log.WARNING, VFS.class, "Unable to get a valid session from " + targetVFS + " for path " + targetPath);
+			Log.log(Log.WARNING, VFS.class, "Unable to get a valid session from " + targetVFS +
+							" for path " + targetPath);
 			return false;
 		}
-		return copy(progress, sourceVFS, sourceSession, sourcePath, targetVFS, targetSession, targetPath, comp,canStop);
+		return copy(progress, sourceVFS, sourceSession, sourcePath, targetVFS, targetSession, targetPath,
+			    comp,canStop, sendVFSUpdate);
+	}
+
+	/**
+	 * Copy a file to another using VFS.
+	 *
+	 * @param progress the progress observer. It could be null if you don't want to monitor progress. If not null
+	 *                  you should probably launch this command in a WorkThread
+	 * @param sourcePath the source path
+	 * @param targetPath the target path
+	 * @param comp comp The component that will parent error dialog boxes
+	 * @param canStop if true the copy can be stopped
+	 * @return true if the copy was successful
+	 * @throws IOException IOException If an I/O error occurs
+	 * @since jEdit 4.3pre3
+	 */
+	public static boolean copy(ProgressObserver progress, String sourcePath,String targetPath, Component comp, boolean canStop)
+	throws IOException
+	{
+		return copy(progress, sourcePath, targetPath, comp, canStop, true);
 	} //}}}
 
 	//{{{ insert() method
@@ -829,8 +925,9 @@ public abstract class VFS
 
 	//{{{ _backup() method
 	/**
-	 * Backs up the specified file. This should only be overriden by
-	 * the local filesystem VFS.
+	 * Backs up the specified file. Default implementation in 5.0pre1
+	 * copies the file to the backup directory. Before 5.0pre1 it was
+	 * empty. 
 	 * @param session The VFS session
 	 * @param path The path
 	 * @param comp The component that will parent error dialog boxes
@@ -840,6 +937,69 @@ public abstract class VFS
 	public void _backup(Object session, String path, Component comp)
 		throws IOException
 	{
+		VFS vfsSrc = VFSManager.getVFSForPath(path);
+		if (null == vfsSrc._getFile(session, path, comp))
+			// file to backup does not exist
+			return;
+
+		// File systems do not like some characters, which
+		// may be part of a general path. Let's get rid of them.
+		String sForeignChars = ":*?\"<>|";
+		// Construct a regex from sForeignChars
+		StringBuilder sbForeignCharsEsc = new StringBuilder(20);
+		for (int i = 0; i < sForeignChars.length(); i++)
+		{
+			sbForeignCharsEsc.append("\\");
+			sbForeignCharsEsc.append(sForeignChars.charAt(i));
+		}
+		
+		String pathNorm = path.replaceAll("[" + sbForeignCharsEsc + "]", "_");
+		
+		// maybe the file is not applicable to local filesystem
+		// but don't worry - for backup purposes it may be out
+		// of a real filesystem
+		File file = new File(pathNorm);
+		File backupDir = MiscUtilities.prepareBackupDirectory(file);
+		if (!backupDir.exists())
+		{
+			// Usually that means there is no specified backup
+			// directory.
+			Log.log(Log.WARNING, VFS.class, "Backup of file " + 
+				path + " failed. Directory " + backupDir +
+				" does not exist.");
+			return;
+		}
+		
+		File backupFile = MiscUtilities.prepareBackupFile(file, backupDir);
+		if (backupFile == null)
+		{
+			return;
+		}
+		
+		// do copy using VFS.copy
+		VFS vfsDst = VFSManager.getVFSForPath(backupFile.getPath());
+		Object sessionDst = vfsDst.createVFSSessionSafe(
+				backupFile.getPath(), comp);
+		if (sessionDst == null)
+			{
+			return;
+			}
+		try
+		{
+			if (!copy(null, vfsSrc, session, path,
+				vfsDst, sessionDst, backupFile.getPath(),
+				comp, true))
+			{
+				Log.log(Log.WARNING, VFS.class, "Backup of file " + 
+					path + " failed. Copy to " + backupFile +
+					" failed.");
+			}
+		}
+		finally
+		{
+			vfsDst._endVFSSession(sessionDst, comp);
+		}
+		
 	} //}}}
 
 	//{{{ _createInputStream() method
@@ -1021,10 +1181,9 @@ public abstract class VFS
 		List<String> files, String directory, VFSFileFilter filter, boolean recursive,
 		Component comp, boolean skipBinary, boolean skipHidden) throws IOException
 	{
-		String resolvedPath = directory;
 		if (recursive && !MiscUtilities.isURL(directory))
 		{
-			resolvedPath = MiscUtilities.resolveSymlinks(directory);
+			String resolvedPath = MiscUtilities.resolveSymlinks(directory);
 			/*
 			 * If looking at a symlink, do not traverse the
 			 * resolved path more than once.
@@ -1146,5 +1305,26 @@ public abstract class VFS
 		}
 	} //}}}
 
+	//{{{ SessionGetter class
+	private class SessionGetter implements Runnable
+	{
+		public SessionGetter(String path, Component comp)
+		{
+			this.path = path;
+			this.comp = comp;
+		}
+
+		private Object session;
+		private String path;
+		private Component comp;
+		
+		public void run()
+		{
+			session = createVFSSession(path, comp);
+		}
+		
+		public Object get() { return session; }
+	} //}}}
+
 	//}}}
 }
diff --git a/org/gjt/sp/jedit/io/VFSManager.java b/org/gjt/sp/jedit/io/VFSManager.java
index ed01c68..c4650b5 100644
--- a/org/gjt/sp/jedit/io/VFSManager.java
+++ b/org/gjt/sp/jedit/io/VFSManager.java
@@ -52,7 +52,7 @@ import org.gjt.sp.util.StandardUtilities;
  * {@link #waitForRequests()}.
  *
  * @author Slava Pestov
- * @version $Id: VFSManager.java 21699 2012-05-22 04:26:48Z ezust $
+ * @version $Id: VFSManager.java 21594 2012-04-22 11:44:00Z jarekczek $
  */
 public class VFSManager
 {
@@ -255,7 +255,7 @@ public class VFSManager
 
 	//{{{ error() method
 	/**
-	 * Reports an I/O error.
+	 * Reports an I/O error with default urgency, <code>Log.ERROR</code>
 	 *
 	 * @param comp The component
 	 * @param path The path name that caused the error
@@ -268,6 +268,25 @@ public class VFSManager
 		String messageProp,
 		Object[] args)
 	{
+		error(comp,path,messageProp,args,Log.ERROR);
+	}
+	
+	/**
+	 * Reports an I/O error.
+	 *
+	 * @param comp The component
+	 * @param path The path name that caused the error
+	 * @param messageProp The error message property name
+	 * @param args Positional parameters
+	 * @param urgency Logging urgency (level)
+	 * @since jEdit 5.0pre1
+	 */
+	public static void error(Component comp,
+		final String path,
+		String messageProp,
+		Object[] args,
+		int urgency)
+	{
 		final Frame frame = JOptionPane.getFrameForComponent(comp);
 
 		synchronized(errorLock)
@@ -275,7 +294,7 @@ public class VFSManager
 			error = true;
 
 			errors.add(new ErrorListDialog.ErrorEntry(
-				path,messageProp,args));
+				path,messageProp,args,urgency));
 
 			if(errors.size() == 1)
 			{
diff --git a/org/gjt/sp/jedit/jEdit.java b/org/gjt/sp/jedit/jEdit.java
index 5db1414..142293b 100644
--- a/org/gjt/sp/jedit/jEdit.java
+++ b/org/gjt/sp/jedit/jEdit.java
@@ -23,8 +23,11 @@ package org.gjt.sp.jedit;
 
 //{{{ Imports
 import org.gjt.sp.jedit.datatransfer.JEditTransferableService;
-import org.gjt.sp.jedit.gui.tray.JEditSwingTrayIcon;
 import org.gjt.sp.jedit.gui.tray.JTrayIconManager;
+import org.gjt.sp.util.StringList;
+import org.jedit.core.MigrationService;
+import org.jedit.keymap.KeymapManager;
+import org.jedit.keymap.KeymapManagerImpl;
 import org.gjt.sp.jedit.visitors.JEditVisitor;
 
 import java.awt.*;
@@ -61,7 +64,6 @@ import org.gjt.sp.jedit.bufferset.BufferSetManager;
 import org.gjt.sp.jedit.bufferset.BufferSet;
 import org.gjt.sp.util.Log;
 import org.gjt.sp.util.StandardUtilities;
-import org.gjt.sp.util.StringList;
 import org.gjt.sp.util.XMLUtilities;
 import org.gjt.sp.util.IOUtilities;
 import org.gjt.sp.util.SyntaxUtilities;
@@ -70,7 +72,7 @@ import org.gjt.sp.util.SyntaxUtilities;
 /**
  * The main class of the jEdit text editor.
  * @author Slava Pestov
- * @version $Id: jEdit.java 21522 2012-03-31 16:25:08Z Vampire0 $
+ * @version $Id: jEdit.java 21568 2012-04-10 18:56:42Z jarekczek $
  */
 public class jEdit
 {
@@ -91,7 +93,7 @@ public class jEdit
 	public static String getBuild()
 	{
 		// (major).(minor).(<99 = preX, 99 = "final").(bug fix)
-		return "04.05.99.02";
+		return "05.00.01.00";
 	} //}}}
 
 	//{{{ main() method
@@ -119,11 +121,19 @@ public class jEdit
 		// the main thread
 		mainThread = Thread.currentThread();
 
-		settingsDirectory = ".jedit";
+		settingsDirectory = MiscUtilities.constructPath(
+				System.getProperty("user.home"), ".jedit");
 		// On mac, different rules (should) apply
 		if(OperatingSystem.isMacOS())
-			settingsDirectory = "Library/jEdit";
-
+			settingsDirectory = MiscUtilities.constructPath(
+				System.getProperty("user.home"), "Library/jEdit" );
+		else if (OperatingSystem.isWindows())
+		{
+			String appData = System.getenv("APPDATA");
+			if (appData != null)
+				settingsDirectory = MiscUtilities.constructPath(
+					appData, "jEdit");
+		}
 		// MacOS users expect the app to keep running after all windows
 		// are closed
 		background = OperatingSystem.isMacOS();
@@ -245,9 +255,6 @@ public class jEdit
 		//{{{ We need these initializations very early on
 		if(settingsDirectory != null)
 		{
-			settingsDirectory = MiscUtilities.constructPath(
-				System.getProperty("user.home"),
-				settingsDirectory);
 			settingsDirectory = MiscUtilities.resolveSymlinks(
 				settingsDirectory);
 		}
@@ -333,13 +340,26 @@ public class jEdit
 			System.exit(0);
 		} //}}}
 
+		// This must be done before anything graphical is displayed, so we can't even
+		// wait for the settings to be loaded, because the splash screen will already
+		// be visible
+		if (OperatingSystem.isMacOS() && !new File(settingsDirectory, "noquartz").exists())
+		{
+			System.setProperty("apple.awt.graphics.UseQuartz", "true");
+		}
+
 		// don't show splash screen if there is a file named
 		// 'nosplash' in the settings directory
+		logTime("before splash screen activation");
 		if(splash && (!new File(settingsDirectory,"nosplash").exists()))
 			GUIUtilities.showSplashScreen();
+		logTime("after splash screen activation");
 
-		//{{{ Mac settings migration code. Should eventually be removed
-		if(OperatingSystem.isMacOS() && shouldRelocateSettings && settingsDirectory != null)
+		//{{{ Settings migration code.
+		// Windows check introduced in 5.0pre1.
+		// MacOS check introduced in 4.3.
+		if((OperatingSystem.isMacOS() || OperatingSystem.isWindows())
+			&& shouldRelocateSettings && settingsDirectory != null)
 		{
 			relocateSettings();
 		}
@@ -391,7 +411,6 @@ public class jEdit
 		{
 			stream = null;
 		} //}}}
-
 		Log.setLogWriter(stream);
 
 		Log.log(Log.NOTICE,jEdit.class,"jEdit version " + getVersion());
@@ -413,6 +432,7 @@ public class jEdit
 
 		GUIUtilities.advanceSplashProgress("loading user properties");
 		initUserProperties();
+		initLocalizationProperties();
 
 		GUIUtilities.advanceSplashProgress("init GUI");
 		GUIUtilities.init();
@@ -446,6 +466,14 @@ public class jEdit
 		VFSManager.init();
 		GUIUtilities.advanceSplashProgress("init resources");
 		initResources();
+
+		if (settingsDirectory != null)
+		{
+			GUIUtilities.advanceSplashProgress("Migrate keymaps");
+			MigrationService keymapMigration = ServiceManager.getService(MigrationService.class, "keymap");
+			keymapMigration.migrate();
+		}
+
 		SearchAndReplace.load();
 
 		if(loadPlugins)
@@ -564,10 +592,32 @@ public class jEdit
 		// Open files, create the view and hide the splash screen.
 		SyntaxUtilities.propertyManager = jEdit.propertyManager;
 		finishStartup(gui,restore,newPlainView,userDir,args);
+		logTime("main done");
 	} //}}}
 
 	//{{{ Property methods
 
+	//{{{ getCurrentLanguage() method
+	/**
+	 * Returns the current language used by jEdit.
+	 *
+	 * @return the current language, never null
+	 * @since jEdit 5.0pre1
+	 */
+	public static String getCurrentLanguage()
+	{
+		String language;
+		if (getBooleanProperty("lang.usedefaultlocale"))
+		{
+			language = Locale.getDefault().getLanguage();
+		}
+		else
+		{
+			language = getProperty("lang.current", "en");
+		}
+		return language;
+	} //}}}
+
 	//{{{ getProperties() method
 	/**
 	 * Returns the properties object which contains all known
@@ -928,6 +978,7 @@ public class jEdit
 	{
 		initPLAF();
 
+		keymapManager.reload();
 		initKeyBindings();
 
 		Autosave.setInterval(getIntegerProperty("autosave",30));
@@ -935,6 +986,7 @@ public class jEdit
 		saveCaret = getBooleanProperty("saveCaret");
 
 		UIDefaults defaults = UIManager.getDefaults();
+		defaults.put("SplitPane.continuousLayout", true);
 
 		// give all text areas the same font
 		Font font = getFontProperty("view.font");
@@ -973,8 +1025,8 @@ public class jEdit
 		}
 		EditBus.send(new PropertiesChanged(null));
 	} //}}}
-
-	//}}}
+	
+	//}}} Property methods fold end
 
 	//{{{ Plugin management methods
 
@@ -1130,13 +1182,20 @@ public class jEdit
 	{
 		PluginJAR jar = new PluginJAR(new File(path));
 		jars.addElement(jar);
-		jar.init();
-		jEdit.unsetProperty("plugin-blacklist."+MiscUtilities.getFileName(path));
-		EditBus.send(new PluginUpdate(jar,PluginUpdate.LOADED,false));
-		if(!isMainThread())
+		if (jar.init())
 		{
-			EditBus.send(new DynamicMenuChanged("plugins"));
-			initKeyBindings();
+			jEdit.unsetProperty("plugin-blacklist."+MiscUtilities.getFileName(path));
+			EditBus.send(new PluginUpdate(jar,PluginUpdate.LOADED,false));
+			if(!isMainThread())
+			{
+				EditBus.send(new DynamicMenuChanged("plugins"));
+				initKeyBindings();
+			}
+		}
+		else
+		{
+			jars.removeElement(jar);
+			jar.uninit(false);
 		}
 	} //}}}
 
@@ -1194,7 +1253,8 @@ public class jEdit
 		{
 			jar.uninit(false);
 			jars.removeElement(jar);
-			initKeyBindings();
+			if (!isMainThread())
+				initKeyBindings();
 		}
 
 		EditBus.send(new PluginUpdate(jar,PluginUpdate.UNLOADED,exit));
@@ -1577,8 +1637,13 @@ public class jEdit
 	//{{{ openTemporary() methods
 	/**
 	 * Opens a temporary buffer. A temporary buffer is like a normal
-	 * buffer, except that an event is not fired, the the buffer is
+	 * buffer, except that an event is not fired and the buffer is
 	 * not added to the buffers list.
+	 * <p>If a buffer for the given <code>path</code> was
+	 * already opened in jEdit, then this instance is returned.
+	 * Otherwise jEdit will not store a reference
+	 * to the returned Buffer object.
+	 * <p>This method is thread-safe.
 	 *
 	 * @param view The view to open the file in
 	 * @param parent The parent directory of the file
@@ -1595,9 +1660,8 @@ public class jEdit
 		return openTemporary(view, parent, path, newFile, null);
 	}
 	/**
-	 * Opens a temporary buffer. A temporary buffer is like a normal
-	 * buffer, except that an event is not fired, the the buffer is
-	 * not added to the buffers list.
+	 * Opens a temporary buffer.
+	 * Details: {@link #openTemporary(View, String, String, boolean)}
 	 *
 	 * @param view The view to open the file in
 	 * @param parent The parent directory of the file
@@ -2695,6 +2759,7 @@ public class jEdit
 			return;
 
 		Abbrevs.save();
+		keymapManager.getKeymap().save();
 		FavoritesVFS.saveFavorites();
 		HistoryModel.saveHistory();
 		Registers.saveRegisters();
@@ -2814,10 +2879,11 @@ public class jEdit
 			EditBus.send(new EditorExiting(null));
 
 			// Save view properties here
-			if(view != null)
+			view = viewsFirst;
+			while(view != null)
 			{
-				view.close();
-				removeViewFromList(view);
+				closeView(view,false);
+				view = view.next;
 			}
 
 			// Stop autosave timer
@@ -2889,7 +2955,22 @@ public class jEdit
 				      registerNameString});
 	} //}}}
 
-	//}}}
+	//{{{ getKeyMapManager() method
+	public static KeymapManager getKeymapManager()
+	{
+		return keymapManager;
+	} //}}}
+
+	//{{{ logTime(String) method
+	/** Logs time since startup, for benchmarking */
+	private static void logTime(String label)
+	{
+		long currentTime = System.currentTimeMillis();
+		Log.log(Log.DEBUG, jEdit.class,
+			label + ':' + (currentTime - startupTime) + " ms");
+	} //}}}
+
+	//}}} Miscellaneous methods fold end
 
 	//{{{ Package-private members
 
@@ -3055,9 +3136,13 @@ public class jEdit
 	private static Vector<ErrorListDialog.ErrorEntry> pluginErrors;
 	private static final Object pluginErrorLock = new Object();
 	private static Vector<PluginJAR> jars;
+	private static final JEditPropertyManager propertyManager =
+	                     new JEditPropertyManager();
+	private static long startupTime = System.currentTimeMillis();
 
 	private static boolean saveCaret;
 	private static InputHandler inputHandler;
+	private static KeymapManager keymapManager;
 
 	private static BufferSetManager bufferSetManager;
 
@@ -3100,7 +3185,6 @@ public class jEdit
 		System.out.println("	<file> +line:<line>,<column>: Positions caret"
 			+ " at line number <line> and column number <column>");
 		System.out.println("	--: End of options");
-		System.out.println("	-nosplash: Don't show splash screen");
 		System.out.println("	-background: Run in background mode");
 		System.out.println("	-nobackground: Disable background mode (default)");
 		System.out.println("	-gui: Only if running in background mode; open initial view (default)");
@@ -3121,6 +3205,7 @@ public class jEdit
 		System.out.println("	-noserver: Don't start edit server");
 		System.out.println("	-settings=<path>: Load user-specific settings from <path>");
 		System.out.println("	-nosettings: Don't load user-specific settings");
+		System.out.println("	-nosplash: Don't show splash screen");
 		System.out.println("	-startupscripts: Run startup scripts (default)");
 		System.out.println("	-nostartupscripts: Don't run startup scripts");
 		System.out.println("	-usage: Print this message and exit");
@@ -3261,6 +3346,11 @@ public class jEdit
 
 		bufferHash = new HashMap<String, Buffer>();
 
+		File userKeymapFolder = null;
+		if (settingsDirectory != null)
+		{
+			userKeymapFolder = new File(settingsDirectory, "keymaps");
+		}
 		inputHandler = new DefaultInputHandler(null);
 		// Add our protocols to java.net.URL's list
 		System.getProperties().put("java.protocol.handler.pkgs",
@@ -3322,6 +3412,9 @@ public class jEdit
 		jEditHome = MiscUtilities.resolveSymlinks(jEditHome);
 
 		Log.log(Log.MESSAGE,jEdit.class,"jEdit home directory is " + jEditHome);
+		keymapManager = new KeymapManagerImpl(propertyManager,
+		      new File(jEditHome, "keymaps"),
+		      userKeymapFolder);
 
 		if(settingsDirectory != null)
 		{
@@ -3356,6 +3449,33 @@ public class jEdit
 		});
 	} //}}}
 
+	//{{{ getResourceAsUTF8Text() method
+	private static Reader getResourceAsUTF8Text(String name)
+		throws IOException
+	{
+		InputStream bytes = jEdit.class.getResourceAsStream(name);
+		if (bytes == null)
+		{
+			return null;
+		}
+		Reader text = null;
+		try
+		{
+			// Using our CharsetEncoding to reliably detect
+			// encoding errors.
+			CharsetEncoding utf8 = new CharsetEncoding("UTF-8");
+			text = utf8.getTextReader(bytes);
+		}
+		finally
+		{
+			if (text == null)
+			{
+				bytes.close();
+			}
+		}
+		return text;
+	} //}}}
+
 	//{{{ initSystemProperties() method
 	/**
 	 * Load system properties.
@@ -3366,12 +3486,12 @@ public class jEdit
 
 		try
 		{
-			propMgr.loadSystemProps(jEdit.class.getResourceAsStream(
+			propMgr.loadSystemProps(getResourceAsUTF8Text(
 				"/org/gjt/sp/jedit/jedit.props"));
-			propMgr.loadSystemProps(jEdit.class.getResourceAsStream(
+			propMgr.loadSystemProps(getResourceAsUTF8Text(
 				"/org/gjt/sp/jedit/jedit_gui.props"));
-			propMgr.loadSystemProps(jEdit.class.getResourceAsStream(
-				"/org/gjt/sp/jedit/jedit_keys.props"));
+			propMgr.loadSystemProps(getResourceAsUTF8Text(
+				"/org/jedit/localization/jedit_en.props"));
 		}
 		catch(Exception e)
 		{
@@ -3381,7 +3501,7 @@ public class jEdit
 				"One of the following property files could not be loaded:\n"
 				+ "- jedit.props\n"
 				+ "- jedit_gui.props\n"
-				+ "- jedit_keys.props\n"
+				+ "- jedit_en.props\n"
 				+ "jedit.jar is probably corrupt.");
 			Log.log(Log.ERROR,jEdit.class,e);
 			System.exit(1);
@@ -3514,6 +3634,38 @@ public class jEdit
 		}
 	} //}}}
 
+	//{{{ initLocalizationProperties() method
+	/**
+	 * Loads localization property file(s).
+	 */
+	private static void initLocalizationProperties()
+	{
+		String language = getCurrentLanguage();
+		if ("en".equals(language))
+		{
+			// no need to load english as localization property as it always loaded as default language
+			return;
+		}
+		Reader langResource = null;
+		try
+		{
+			langResource = getResourceAsUTF8Text("/org/jedit/localization/jedit_" + language + ".props");
+			propMgr.loadLocalizationProps(langResource);
+		}
+		catch (IOException e)
+		{
+			if (getBooleanProperty("lang.usedefaultlocale"))
+			{
+				// if it is the default locale, it is not an error
+				Log.log(Log.ERROR, jEdit.class, "Unable to load language", e);
+			}
+		}
+		finally
+		{
+			IOUtilities.closeQuietly(langResource);
+		}
+	} //}}}
+
 	//{{{ fontStyleToString() method
 	private static String fontStyleToString(int style)
 	{
@@ -3546,11 +3698,16 @@ public class jEdit
 	private static void initPLAF()
 	{
 		String lf = getProperty("lookAndFeel");
-		if (isStartupDone() && UIManager.getLookAndFeel().getClass().getName().equals(lf))
+		String sLfOld = null;
+		String sLfNew = null;
+		LookAndFeel lfOld = UIManager.getLookAndFeel();
+		if (lfOld != null)
+			sLfOld = lfOld.getClass().getName(); 
+
+		if (isStartupDone() && sLfOld != null && sLfOld.equals(lf))
 		{
 			return;
 		}
-
 		Font primaryFont = jEdit.getFontProperty(
 			"metal.primary.font");
 		if(primaryFont != null)
@@ -3611,6 +3768,20 @@ public class jEdit
 			Log.log(Log.ERROR,jEdit.class,e);
 		}
 
+		LookAndFeel lfNew = UIManager.getLookAndFeel();
+		if (lfNew != null)
+			sLfNew = lfNew.getClass().getName();
+			Log.log(Log.DEBUG, jEdit.class,
+				"initPLAF " +
+				(EventQueue.isDispatchThread() ? "edt"
+				                               : "non-edt") +
+				" old=" + sLfOld +
+				" requested=" + lf + 
+				" new=" + sLfNew );
+		if (lf == null || !lf.equals(sLfNew))
+			Log.log(Log.WARNING, jEdit.class,
+				"inifPLAF failed to set required l&f");
+
 		UIDefaults defaults = UIManager.getDefaults();
 
 		// give all Swing components our colors
@@ -3663,11 +3834,24 @@ public class jEdit
 
 		if (isStartupDone())
 		{
+			int iWindow = 0;
 			for (Window window : Window.getWindows())
 			{
-				SwingUtilities.updateComponentTreeUI(window);
+				try
+				{
+					SwingUtilities.updateComponentTreeUI(window);
+				}
+				catch(Exception e)
+				{
+					Log.log(Log.ERROR, jEdit.class,
+						"Window " + iWindow
+						+ ": " + window, e);
+					break;
+				}
+				iWindow++;
 			}
 		}
+
 	} //}}}
 
 	//{{{ getNextUntitledBufferId() method
@@ -3905,7 +4089,9 @@ public class jEdit
 				GUIUtilities.hideSplashScreen();
 
 				Log.log(Log.MESSAGE,jEdit.class,"Startup "
-					+ "complete");
+					+ "complete: "
+					+ (System.currentTimeMillis() - 
+					   startupTime) + " ms");
 
 				//{{{ Report any plugin errors
 				if(pluginErrors != null)
@@ -4403,5 +4589,4 @@ loop:		for(int i = 0; i < list.length; i++)
 		}
 	} //}}}
 
-	private static final JEditPropertyManager propertyManager = new JEditPropertyManager();
 }
diff --git a/org/gjt/sp/jedit/jedit.props b/org/gjt/sp/jedit/jedit.props
index 749b0c1..1a9a09d 100644
--- a/org/gjt/sp/jedit/jedit.props
+++ b/org/gjt/sp/jedit/jedit.props
@@ -2,7 +2,7 @@
 ### jEdit global properties
 ### :tabSize=8:indentSize=8:noTabs=false:
 ### :folding=explicit:collapseFolds=1:
-### :encoding=ISO-8859-1:
+### :encoding=UTF-8:
 ###
 ### Copyright (C) 1998, 2003 Slava Pestov
 ###
@@ -28,6 +28,9 @@ metal.secondary.fontstyle=0
 decorate.frames=false
 decorate.dialogs=false
 
+# Draw multi-key shortcuts on screen menu bar? (OS X only)
+menu.multiShortcut=false
+
 # If true, welcome screen will be displayed.
 # Set to false after initial startup.
 firstTime=true
@@ -134,8 +137,9 @@ encodingDetectors=BOM XML-PI html python buffer-local-property
 #}}}
 
 # The critical size, over it a buffer will prompt when setting the edit mode
-# to switch to context insensitive or default mode
 largeBufferSize=4000000
+longLineLimit=4000
+largefilemode=ask
 
 #{{{ Buffer settings
 # These can also be specified as buffer-local properties
@@ -160,11 +164,14 @@ buffer.tabSize=8
 # Indent width
 buffer.indentSize=8
 
+# Automatic indentation
+buffer.autoIndent=full
+
 # Soft tabs
 buffer.noTabs=false
 
 #elastic tabstops
-buffer.elasticTabstops=false 
+buffer.elasticTabstops=false
 
 # Default edit mode
 buffer.defaultMode=text
@@ -217,6 +224,10 @@ view.fontsize=12
 # 0=plain, 1=bold, 2=italic, 3=boldItalic
 view.fontstyle=0
 
+# Font Substitution
+view.enableFontSubst=false
+view.enableFontSubstSystemFonts=true
+
 # Background and foreground colors (for the text area)
 view.bgColor=#ffffff
 view.fgColor=#000000
@@ -270,6 +281,9 @@ view.ctrlForRectangularSelection=true
 view.minStartupWidth=200
 view.minStartupHeight=200
 
+Combined\ Options.width=1024
+Combined\ Options.height=768
+
 # The default bufferSet scope
 editpane.bufferset.default=view
 
@@ -315,7 +329,7 @@ view.gutter.fontsize=10
 view.gutter.borderWidth=2
 
 # Gutter displays line numbers
-view.gutter.lineNumbers=false
+view.gutter.lineNumbers=true
 
 # Line numbers are drawn with this alignment (left, center, right)
 view.gutter.numberAlignment=right
@@ -471,7 +485,7 @@ browser.custom.context=
 plugin-manager.downloadSource=false
 plugin-manager.installUser=true
 plugin-manager.showAll=true
-plugin-manager.mirror.id=switch
+plugin-manager.mirror.id=NONE
 plugin-manager.deleteDownloads=true
 plugin-manager.hide-libraries.toggle=true
 plugin-blacklist.MacOS.jar=true
@@ -487,5 +501,21 @@ server.brokenToFront=false
 
 # restore remote VFS files by default (new option)
 options.general.restore.remote=true
-
+optional.title-template={0} {1}
 mime2mode.text/html=html
+
+#{{{ Keymaps
+# the current keymap name
+keymap.current=jEdit
+# the default keymap name
+keymap.default=jEdit
+keymaps.jEdit.label=jEdit
+keymaps.IntelliJ.label=IntelliJ IDEA
+#}}}
+
+
+available.lang=en de fr ja cs
+# if lang.usedefaultlocale is true, the lang.current is not used
+lang.usedefaultlocale=true
+lang.current=en
+
diff --git a/org/gjt/sp/jedit/jedit_gui.props b/org/gjt/sp/jedit/jedit_gui.props
index 4a25b3f..4039a5d 100644
--- a/org/gjt/sp/jedit/jedit_gui.props
+++ b/org/gjt/sp/jedit/jedit_gui.props
@@ -2,49 +2,17 @@
 ### jEdit user interface definitions,
 ### :tabSize=8:indentSize=8:noTabs=false:
 ### :folding=explicit:collapseFolds=1:
-### :encoding=ISO-8859-1:
+### :encoding=UTF-8:
 ###
 ### Copyright (C) 1998, 2005 Slava Pestov
 ###
 
-#{{{ Default user catalog file
-defaultCatalog=<?xml version="1.0"?>\n\
-	<!DOCTYPE MODES SYSTEM "catalog.dtd">\n\
-	\n\
-	<MODES>\n\
-	\n\
-	<!-- Add lines like the following, one for each edit mode you add: -->\n\
-	<!-- <MODE NAME="foo" FILE="foo.xml" FILE_NAME_GLOB="*.foo" /> -->\n\
-	\n\
-	</MODES>
-#}}}
-
-#{{{ Common strings
-
-common.ok=OK
-common.cancel=Cancel
-common.close=Close
-common.error=Error
-common.apply=Apply
-common.more=More
-common.insert=Insert
-common.add=Add
+#{{{ Common icons
 common.add.icon=22x22/actions/list-add.png
-common.remove=Remove
 common.remove.icon=22x22/actions/list-remove.png
-common.moveUp=Move Up
 common.moveUp.icon=22x22/actions/go-up.png
-common.moveDown=Move Down
 common.moveDown.icon=22x22/actions/go-down.png
-common.clearAll=Clear All
 common.clearAll.icon=22x22/actions/edit-clear.png
-common.selectAll=Select All
-common.selectNone=Select None
-
-lineSep.unix=Unix (\\n)
-lineSep.windows=DOS/Windows (\\r\\n)
-lineSep.mac=MacOS (\\r)
-
 logo.icon.small=16x16/apps/jedit.png
 logo.icon.medium=32x32/apps/jedit.png
 
@@ -54,22 +22,8 @@ logo.icon.medium=32x32/apps/jedit.png
 encodings=ASCII Cp850 Cp1251 Cp1252 ISO8859_1 ISO8859_2 ISO8859_15 \
 	MacRoman Big5 GBK KOI8_R SJIS UTF-16 UTF-8 UTF-8Y
 
-history.caption=Previously entered strings:
-
-action-set.jEdit=Built-in Commands
-action-set.browser=File System Browser
-action-set.macros=Macros
-action-set.plugin=Plugin: {0}
-
-macro-handler.beanshell.label=BeanShell script
 macro-handler.beanshell.glob=*.bsh
 
-save-layout-failed.message=Failed to save the docking layout.
-load-layout.title=Load Docking Layout
-load-layout.message=Docking layout to load:
-save-layout.title=Save Docking Layout
-save-layout.message=Docking layout to save:
-
 # Plugin activation hooks
 defer=false
 startup=true
@@ -82,7 +36,7 @@ dropdown-arrow.icon=ToolbarMenu.gif
 view.toolbar=new-file open-file save close-buffer - print - \
 	undo redo - cut copy paste - find find-next - \
 	new-view unsplit split-horizontal split-vertical - \
-	buffer-options global-options - \
+	buffer-options combined-options - \
 	plugin-manager - help
 
 new-file.icon=22x22/actions/document-new.png
@@ -105,7 +59,7 @@ split-horizontal.icon=22x22/actions/window-split-horizontal.png
 split-vertical.icon=22x22/actions/window-split-vertical.png
 buffer-options.icon=22x22/actions/document-properties.png
 global-options.icon=22x22/categories/preferences-system.png
-
+combined-options.icon=22x22/categories/preferences-system.png
 plugin-manager.icon=22x22/places/plugins.png
 help.icon=22x22/apps/help-browser.png
 
@@ -170,27 +124,16 @@ icons=22x22/actions/resize-horisontal.png \
 	Blank24.gif
 #}}}
 
-view.search.find=Search for:
-view.search.close-tooltip=Hide search bar (ESCAPE)
-
-view.action.prompt=Action:
-view.action.no-completions=No matching actions found
-view.action.close-tooltip=Hide action bar (ESCAPE)
 #}}}
 
 #{{{ Context menu
 view.context=cut copy paste paste-previous paste-deleted - \
 	select-block to-upper to-lower - hypersearch-word - \
 	add-marker - collapse-fold expand-fold narrow-to-fold
-view.context.customize=Customize This Menu...
 #}}}
 
 #{{{ System tray menu
 systrayicon=true
-tray.newView.label=New view
-tray.newPlainView.label=New plain view
-tray.exit.label=Exit
-
 #}}}
 
 #{{{ Menu bar
@@ -208,6 +151,7 @@ file=new-file \
      - \
      close-buffer \
      closeall-except-active \
+     closeall-bufferset \
      global-close-buffer \
      close-all \
      - \
@@ -220,56 +164,31 @@ file=new-file \
      page-setup \
      - \
      exit
-file.label=$File
-new-file.label=$New
 new-file.icon.small=16x16/actions/document-new.png
-new-file-in-mode.label=New in $Mode
 new-file-in-mode.icon.small=16x16/actions/document-new.png
-new-file-in-mode.dialog.title=New File
-new-file-in-mode.dialog.message=With Edit Mode:
-open-file.label=$Open...
 open-file.icon.small=16x16/actions/document-open.png
-reload.label=$Reload
 reload.icon.small=16x16/actions/view-refresh.png
-reload-all.label=Reloa$d All
-close-buffer.label=$Close
-close-buffer.tooltip=Close buffer in EditPane's BufferSet only.
+reload-all.icon.small=16x16/actions/view-refresh.png
 close-buffer.icon.small=16x16/actions/document-close.png
-global-close-buffer.label=Close (global)
-global-close-buffer.tooltip=Close buffer in all editpanes and views
-closeall-except-active.tooltip=Clear current editpane's BufferSet except for buffer(s) currently showing
-closeall-except-active.label=Close O$thers
-bufferset-toggle-exclusive.label=Toggle E$xclusive BufferSets
-bufferset-toggle-exclusive.tooltip=When a buffer is opened, close it in other non-intersecting buffersets.
+closeall-bufferset.icon.small=16x16/actions/document-close.png
 closeall-except-active.icon.small=16x16/actions/document-close.png
 global-close-buffer.icon.small=16x16/actions/document-close.png
-close-all.label=Clos$e All (global)
-close-all.tooltip=Close all buffers in all Views
 close-all.icon.small=16x16/actions/document-close.png
-save.label=$Save
 save.icon.small=16x16/actions/document-save.png
-save-as.label=S$ave As...
-save-a-copy-as.label=Save a Cop$y As...
-save-a-copy-as.tooltip=Does not change the current buffer's path
-save-all.label=Save A$ll...
-print.label=$Print...
+save-as.icon.small=16x16/actions/document-save-as.png
+save-a-copy-as.icon.small=16x16/actions/document-save-as.png
+save-all.icon.small=16x16/actions/document-save-all.png
 print.icon.small=16x16/actions/document-print.png
-page-setup.label=Pa$ge Setup...
-# Print selection not yet implemented
-#print-selection.label=Prin$t Selection...
-exit.label=E$xit
+page-setup.icon.small=16x16/actions/document-properties.png
+exit.icon.small=16x16/actions/process-stop.png
+exit.icon.medium=22x22/actions/process-stop.png
 
 #{{{ Recent Files menu
 recent-files.code=new RecentFilesProvider();
-recent-files.label=Recent $Files
-recent-files.textfield.tooltip=a filter prefix or glob-pattern can be entered here
-no-recent-files.label=No Recent Files
-clear-recent-files.label=Clear Recent Files
 #}}}
 
 reload-encoding.code=new ReloadWithEncodingProvider();
-reload-encoding.label=Reload with $Encoding
-reload-encoding.error={0} is not a valid encoding
+reload-encoding.icon.small=16x16/actions/view-refresh.png
 #}}}
 
 #{{{ Edit menu
@@ -293,22 +212,12 @@ edit=undo \
      %text \
      %indent \
      %source
-edit.label=$Edit
-undo.label=$Undo
 undo.icon.small=16x16/actions/edit-undo.png
-redo.label=$Redo
 redo.icon.small=16x16/actions/edit-redo.png
-cut.label=$Cut
 cut.icon.small=16x16/actions/edit-cut.png
-copy.label=C$opy
 copy.icon.small=16x16/actions/edit-copy.png
-paste.label=$Paste
 paste.icon.small=16x16/actions/edit-paste.png
-select-all.label=Select $All
-word-count.label=$Word Count...
-complete-word.label=Co$mplete Word
-expand-abbrev.label=E$xpand Abbreviation
-goto-line.label=$Go to Line...
+select-all.icon.small=16x16/actions/edit-select-all.png
 
 #{{{ More Clipboard menu
 clipboard=cut-append \
@@ -328,22 +237,6 @@ clipboard=cut-append \
 	  vertical-paste-string-register \
 	  - \
 	  view-registers
-
-clipboard.label=More Clip$board
-cut-append.label=$Cut Append
-copy-append.label=C$opy Append
-vertical-paste.label=$Vertical Paste
-paste-previous.label=Paste Previo$us...
-paste-deleted.label=Paste $Deleted...
-paste-special.label=Paste Special...
-cut-string-register.label=Cu$t to Register
-copy-string-register.label=Co$py to Register
-paste-string-register.label=Paste $Register
-clear-string-register.label=Clear Register
-cut-append-string-register.label=Cut Appe$nd to Register
-copy-append-string-register.label=Copy $Append to Register
-vertical-paste-string-register.label=V$ertical Paste Register
-view-registers.label=Vie$w Registers
 #}}}
 
 #{{{ More Selection menu
@@ -357,15 +250,6 @@ selection=select-none \
 	  toggle-rect-select \
 	  - \
 	  select-line-range
-selection.label=More $Selection
-select-none.label=Select $None
-select-word.label=Select $Word
-select-line.label=Select $Line
-select-paragraph.label=Select $Paragraph
-invert-selection.label=$Invert Selection
-toggle-multi-select.label=$Multiple Selection
-toggle-rect-select.label=$Rectangular Selection
-select-line-range.label=Sele$ct Line Range...
 #}}}
 
 #{{{ Text menu
@@ -379,15 +263,6 @@ text=delete-line \
      - \
      to-lower \
      to-upper
-text.label=$Text
-delete-line.label=$Delete Lines
-delete-start-line.label=Delete to $Start of Line
-delete-end-line.label=Delete to $End of Line
-join-lines.label=$Join Lines
-delete-paragraph.label=Delete $Paragraph
-format-paragraph.label=$Format Paragraph
-to-lower.label=To $Lower Case
-to-upper.label=To $Upper Case
 #}}}
 
 #{{{ Indent menu
@@ -398,14 +273,6 @@ indent=indent-lines \
        remove-trailing-ws \
        spaces-to-tabs \
        tabs-to-spaces
-
-indent.label=$Indent
-indent-lines.label=$Indent Lines
-shift-left.label=Shift Indent $Left
-shift-right.label=Shift Indent $Right
-remove-trailing-ws.label=Remove Trailing $Whitespace
-spaces-to-tabs.label=$Spaces to Tabs
-tabs-to-spaces.label=$Tabs to Spaces
 #}}}
 
 #{{{ Source menu
@@ -416,14 +283,6 @@ source=range-comment \
        match-bracket \
        prev-bracket \
        next-bracket
-
-source.label=Sourc$e
-range-comment.label=$Range Comment
-line-comment.label=$Line Comment
-select-block.label=$Select Code Block
-match-bracket.label=Go to $Matching Bracket
-prev-bracket.label=Go to $Previous Bracket
-next-bracket.label=Go to $Next Bracket
 #}}}
 
 #}}}
@@ -450,24 +309,16 @@ search=find \
        regexp \
        - \
        hypersearch-results
-search.label=$Search
-find.label=$Find...
-find.icon.small=16x16/actions/edit-find.png
-find-next.label=Fi$nd Next
-find-prev.label=Find Pre$vious
-search-in-open-buffers.label=Search in Open $Buffers...
-search-in-directory.label=Search in $Directory...
-replace-in-selection.label=$Replace in Selection
-replace-and-find-next.label=Re$place and Find Next
-replace-all.label=Replace $All
-quick-search.label=$Incremental Search Bar
-hypersearch.label=$HyperSearch Bar
-quick-search-word.label=I$ncremental Search for Word
-hypersearch-word.label=H$yperSearch for Word
-whole-word.label=$Whole Word
-ignore-case.label=Ignore $Case
-regexp.label=Regular E$xpressions
-hypersearch-results.label=HyperSearch Results
+find.icon.small=22x22/actions/edit-find.png
+find-next.icon.small=22x22/actions/edit-find-next.png
+search-in-directory.icon.small=22x22/actions/edit-find-in-folder.png
+replace-in-selection.icon.small=22x22/actions/edit-find-replace.png
+replace-and-find-next.icon.small=22x22/actions/edit-find-replace.png
+replace-all.icon.small=22x22/actions/edit-find-replace.png
+quick-search.icon.small=22x22/actions/edit-find.png
+hypersearch.icon.small=22x22/actions/edit-find-multiple.png
+quick-search-word.icon.small=22x22/actions/edit-find.png
+hypersearch-word.icon.small=22x22/actions/edit-find.png
 #}}}
 
 #{{{ Markers menu
@@ -486,17 +337,12 @@ markers=add-marker \
 	  view-markers \
 	  -
 markers.code=new MarkersProvider();
-markers.label=$Markers
-add-marker.label=$Add/Remove Marker
-add-marker-shortcut.label=Add Marker $With Shortcut
-remove-all-markers.label=Re$move All Markers
-goto-marker.label=$Go to Marker
-select-marker.label=$Select to Marker
-swap-marker.label=Swa$p Caret and Marker
-prev-marker.label=Go to $Previous Marker
-next-marker.label=Go to $Next Marker
-no-markers.label=No Markers
-markers.blank-line=[Blank line]
+add-marker.icon.small=22x22/actions/bookmark-new.png
+add-marker-shortcut.icon.small=22x22/actions/bookmark-new.png
+remove-all-markers.icon.small=22x22/actions/edit-clear.png
+goto-marker.icon.small=22x22/actions/go-jump.png
+prev-marker.icon.small=22x22/actions/go-previous.png
+next-marker.icon.small=22x22/actions/go-next.png
 #}}}
 
 #{{{ Folding menu
@@ -518,20 +364,6 @@ folds=collapse-fold \
       parent-fold \
       prev-fold \
       next-fold
-folds.label=F$olding
-collapse-fold.label=$Collapse Fold
-expand-one-level.label=$Expand Fold One Level
-expand-fold.label=Expand $Fold Fully
-collapse-all-folds.label=Collapse $All Folds
-expand-folds.label=Expand Fo$lds With Level
-expand-all-folds.label=E$xpand All Folds
-select-fold.label=$Select Fold
-add-explicit-fold.label=A$dd Explicit Fold
-narrow-to-fold.label=Na$rrow to Fold
-narrow-to-selection.label=Narro$w to Selection
-parent-fold.label=$Go to Parent Fold
-prev-fold.label=Go to $Previous Fold
-next-fold.label=Go to $Next Fold
 #}}}
 
 #{{{ View menu
@@ -556,24 +388,9 @@ view=new-view \
      - \
      set-view-title \
      toggle-full-screen
-view.label=$View
-new-view.label=New $View
 new-view.icon.small=16x16/actions/window-new.png
-new-plain-view.label=Ne$w Plain View
-close-view.label=$Close View
+new-plain-view.icon.small=16x16/actions/window-new.png
 close-view.icon.small=16x16/actions/document-close.png
-prev-buffer.label=Go to $Previous Buffer
-next-buffer.label=Go to $Next Buffer
-recent-buffer.label=Go to $Recent Buffer
-toggle-buffer-switcher.label=Toggle $Buffer Switcher
-focus-buffer-switcher.label=Focus on Buffer S$witcher
-toggle-line-numbers.label=Toggle $Line Numbers
-toggle-statusbar.label=Toggle S$tatus Bar
-toggle-gutter.label=Toggle $Gutter
-show-context-menu.label=Show Context Menu
-set-view-title.label=Set view title...
-set-view-title.tooltip=Set the title of the main window for easy identification from your desktop.
-toggle-full-screen.label=Toggle $full-screen mode
 
 #{{{ Scrolling menu
 scrolling=scroll-to-current-line \
@@ -585,14 +402,6 @@ scrolling=scroll-to-current-line \
 	  - \
 	  scroll-up-page \
 	  scroll-down-page
-scrolling.label=Scrollin$g
-scroll-to-current-line.label=Scroll $to Current Line
-scroll-and-center.label=$Scroll and Center Caret
-center-caret.label=$Center Caret on Screen
-scroll-up-line.label=Line Scroll $Up
-scroll-down-line.label=Line Scroll $Down
-scroll-up-page.label=Page Scroll U$p
-scroll-down-page.label=Page Scroll D$own
 #}}}
 
 #{{{ Splitting menu
@@ -604,24 +413,7 @@ splitting=unsplit-current \
 	  - \
 	  prev-textarea \
 	  next-textarea
-splitting.label=$Splitting
-split-horizontal.label=Split $Horizontally
-split-vertical.label=Split $Vertically
-unsplit-current.label=$Unsplit Current
-unsplit.label=Unsplit $All
-resplit.label=$Restore Split
-prev-textarea.label=Go to $Previous Text Area
-next-textarea.label=Go to $Next Text Area
-buffersets.label=$Buffer Sets
 buffersets=global-bufferset view-bufferset editpane-bufferset bufferset-toggle-exclusive
-global-bufferset.label=$Global Scope
-global-bufferset.tooltip=All EditPanes share the same BufferSet.
-view-bufferset.label=$View Scope
-view-bufferset.tooltip=EditPanes in the same View share the same BufferSet.
-editpane-bufferset.label=$EditPane Scope
-editpane-bufferset.tooltip=Each Editpane has its own BufferSet.
-
-
 #}}}
 
 #{{{ Docking menu
@@ -638,20 +430,6 @@ docking=left-docking-area \
 	layout-save \
 	layout-load-current-mode \
 	layout-save-current-mode
-docking.label=$Docking
-docking.menu.label=Dockable Menu
-toggle-dock-areas.label=Toggle Docked $Areas
-left-docking-area.label=Go to $Left Docking Area
-top-docking-area.label=Go to $Top Docking Area
-right-docking-area.label=Go to $Right Docking Area
-bottom-docking-area.label=Go to $Bottom Docking Area
-focus-textarea.label=Go to Text Area
-close-docking-area.label=$Close Current Docking Area
-layout-load.label=$Load docking layout ...
-layout-save.label=$Save docking layout ...
-layout-load-current-mode.label=Load docking layout of current mode
-layout-save-current-mode.label=Save docking layout of current mode
-
 #}}}
 
 #}}}
@@ -672,46 +450,32 @@ utils=vfs.browser \
       last-action \
       - \
       buffer-options \
-      global-options \
+      combined-options \
       - \
       %quick-options
-utils.label=$Utilities
-vfs.browser.label=$File System Browser
-vfs.browser.icon.small=16x16/apps/system-file-manager.png
-action-bar.label=$Action Bar
-last-action.label=Re$peat Last Action
-buffer-options.label=$Buffer Options...
+
 buffer-options.icon.small=16x16/actions/document-properties.png
-global-options.label=$Global Options...
 global-options.icon.small=16x16/categories/preferences-system.png
+combined-options.icon.small=16x16/categories/preferences-system.png
 
 #{{{ Recent Directories menu
-recent-directories.label=$Recent Directories
 recent-directories.code=new RecentDirectoriesProvider();
-no-recent-dirs.label=No Recent Directories
 #}}}
 
 #{{{ Favorites menu
 favorites=add-buffer-to-favorites add-dir-to-favorites edit-favorites -
-favorites.label=Fa$vorites
 favorites.code=new FavoritesProvider();
-add-buffer-to-favorites.label=Add Buffer to Favorites
-add-dir-to-favorites.label=Add Directory to Favorites
-edit-favorites.label=Edit Favorites
 #}}}
 
 #{{{ Current Directory menu
-current-directory.label=$Current Directory
 current-directory.code=new DirectoryProvider(null)
 #}}}
 
 #{{{ jEdit Home Directory menu
-jedit-directory.label=$jEdit Home Directory
 jedit-directory.code=new DirectoryProvider(jEdit.getJEditHome())
 #}}}
 
 #{{{ Settings Directory menu
-settings-directory.label=$Settings Directory
 settings-directory.code=settings = jEdit.getSettingsDirectory(); \
 	if(settings == null) settings = jEdit.getJEditHome(); \
 	new DirectoryProvider(settings);
@@ -721,10 +485,6 @@ settings-directory.code=settings = jEdit.getSettingsDirectory(); \
 beanshell=eval \
        eval-for-selected-lines \
        eval-selection
-beanshell.label=B$eanShell
-eval.label=$Evaluate BeanShell Expression...
-eval-for-selected-lines.label=Evaluate $For Selected Lines...
-eval-selection.label=Evaluate $Selection
 #}}}
 
 #{{{ Troubleshooting menu
@@ -735,21 +495,10 @@ troubleshooting=log-viewer \
 		keyboard-tester \
 		memory-status \
 		reload-modes
-troubleshooting.label=$Troubleshooting
-log-viewer.label=$Activity Log
-update-log.label=$Update Activity Log on Disk
-io-progress-monitor.label=$I/O Progress
-task-monitor.label=$Task Monitor
-keyboard-tester.label=$Keyboard Tester...
-memory-status.label=$Memory Status...
-reload-modes.label=$Reload Edit Modes
 #}}}
 
 #{{{ Quick options menu
 quick-options=edit-syntax-style
-quick-options.label=$Quick settings
-edit-syntax-style.label=Edit syntax style of token under caret
-
 #}}}
 
 #}}}
@@ -769,28 +518,14 @@ macros=new-macro \
        rescan-macros \
        -
 macros.code=new MacrosProvider();
-macros.label=Ma$cros
-new-macro.label=New Macro
 new-macro.icon.small=16x16/actions/document-new.png
-record-macro.label=$Record Macro...
 record-macro.icon.small=16x16/actions/media-record.png
-stop-recording.label=$Stop Recording
 stop-recording.icon.small=16x16/actions/media-playback-stop.png
-last-macro.label=Repeat Last Macro
-record-temp-macro.label=Record $Temporary Macro
-run-temp-macro.label=Run Tem$porary Macro
-run-other-macro.label=Run $Other Macro...
-rescan-macros.label=Resca$n Macros
-no-macros.label=No Macros
 #}}}
 
 #{{{ Plugins menu
 plugins=plugin-manager plugin-options -
-plugins.label=$Plugins
 plugins.code=new PluginsProvider();
-plugin-manager.label=Plugin $Manager...
-plugin-options.label=Plugin $Options...
-no-plugins.label=No Plugins Installed
 #}}}
 
 #{{{ Help menu
@@ -798,170 +533,13 @@ help-menu=about \
      help \
      tip-of-the-day \
      userFeedback
-help-menu.label=$Help
-about.label=$About jEdit...
-help.label=jEdit $Help
-tip-of-the-day.label=$Tip of the Day
-userFeedback.label=Make a suggestion...
-#}}}
-
-#}}}
-
-#{{{ Macro strings
-
-macro.temp.header=// This is a temporary macro. First, check over the\n\
-		  // commands to make sure this is what you intended.\n\
-		  // Then, to run this macro, switch to the buffer\n\
-		  // where you would like to execute it and press C+m C+p.
-
-macro.header=// This is a recorded macro. First, check over the\n\
-	     // commands to make sure this is what you intended. Then,\n\
-	     // save this buffer, and the macro should appear in the\n\
-	     // Macros menu.
-
-#}}}
-
-#{{{ Commands that don't appear in menus
-backspace-word.label=Delete Previous Word
-backspace-word-std.label=Delete Previous Word (Eat Whitespace)
-backspace-word-std-after.label=Delete Previous Word (Eat Whitespace after word)
-backspace.label=Delete Previous Character
-delete-word.label=Delete Next Word
-delete-word-std.label=Delete Next Word (Eat Whitespace)
-delete.label=Delete Next Character
-document-end.label=Go to End of Buffer
-document-home.label=Go to Start of Buffer
-end.label=End
-home.label=Home
-smart-end.label=Smart End
-smart-home.label=Smart Home
-insert-literal.label=Insert Next Character Literally
-insert-newline.label=Insert Newline
-insert-newline-indent.label=Insert Newline and Indent
-insert-tab.label=Insert Tab
-insert-tab-indent.label=Insert Tab and Indent
-line-end.label=Go to End of Line
-line-home.label=Go to Start of Line
-next-char.label=Go to Next Character
-next-line.label=Go to Next Line
-next-page.label=Go to Next Page
-next-paragraph.label=Go to Next Paragraph
-next-word.label=Go to Next Word
-next-word-std.label=Go to Next Word (Eat Whitespace)
-overwrite.label=Overwrite Mode
-prev-char.label=Go to Previous Character
-prev-line.label=Go to Previous Line
-prev-page.label=Go to Previous Page
-prev-paragraph.label=Go to Previous Paragraph
-prev-word.label=Go to Previous Word
-prev-word-std.label=Go to Previous Word (Eat Whitespace)
-prev-word-std-after.label=Go to Previous Word (Eat Whitespace after word)
-select-document-end.label=Select to End of Buffer
-select-document-home.label=Select to Start of Buffer
-select-end.label=Select to Smart End Position
-select-home.label=Select to Smart Home Position
-select-line-end.label=Select to End of Line
-select-line-home.label=Select to Start of Line
-select-next-char.label=Select Next Character
-select-next-line.label=Select Next Line
-select-next-page.label=Select Next Page
-select-next-paragraph.label=Select Next Paragraph
-select-next-word.label=Select Next Word
-select-next-word-std.label=Select Next Word (Eat Whitespace)
-select-prev-char.label=Select Previous Character
-select-prev-line.label=Select Previous Line
-select-prev-page.label=Select Previous Page
-select-prev-paragraph.label=Select Previous Paragraph
-select-prev-word.label=Select Previous Word
-select-prev-word-std.label=Select Previous Word (Eat Whitespace)
-select-prev-word-std-after.label=Select Previous Word (Eat Whitespace after word)
-select-visible-end.label=Select to Last Visible Line
-select-visible-home.label=Select to First Visible Line
-select-whitespace-end.label=Select to End of White Space
-select-whitespace-home.label=Select to Start of White Space
-toggle-line-separator.label=Toggle Line Separator
-toggle-word-wrap.label=Toggle Word Wrap
-visible-end.label=Go to Last Visible Line
-visible-home.label=Go to First Visible Line
-whitespace-end.label=Go to End of White Space
-whitespace-home.label=Go to Start of White Space
+#}}}
+
 #}}}
 
 #{{{ View stuff
 
 # Title
-view.title=jEdit -\ 
-view.title.dirty=\ (modified)
-
-view.docking.close-tooltip=Hides the current docked window
-view.docking.menu-tooltip=Docking options
-view.docking.menu-floating=Float
-view.docking.menu-top=Dock at Top
-view.docking.menu-left=Dock at Left
-view.docking.menu-bottom=Dock at Bottom
-view.docking.menu-right=Dock at Right
-view.docking.menu-clone=New Floating Instance
-view.docking.menu-close=Close
-view.docking.menu-undock=Undock
-
-view.docking.toggle.label={0} (Toggle)
-view.docking.float.label={0} (New Floating Instance)
-
-directory.not-local=Cannot list directories on remote filesystems
-directory.no-files=No Files
-
-#{{{ Gutter highlight
-view.gutter.marker.no-name=Marker
-view.gutter.marker=Marker: {0}
-#}}}
-
-#{{{ Status messages
-view.status.add-marker=Shortcut for new marker? [{0}]
-view.status.auto-wrap=Search string not found; wrapping around!
-view.status.bracket=Matches line {0}: {1}
-view.status.caret-tooltip=Offset, line and column number (offset,line,column[-virtual] relative%)
-view.status.copy-append-string-register=Register name to copy append to? [{0}]
-view.status.copy-string-register=Register to copy to? [{0}]
-view.status.cut-append-string-register=Register to cut append to? [{0}]
-view.status.cut-string-register=Register to cut to? [{0}]
-view.status.expand-folds=Fold level? [1-9]
-view.status.goto-marker=Shortcut of marker to go to? [{0}]
-view.status.incomplete-abbrev={0} parameter(s) specified, but {1} required!
-view.status.insert-literal=Key to insert literally?
-view.status.io-1=I/O: 1 operation in progress
-view.status.io.done=Input/output complete
-view.status.io=I/O: {0} operations in progress
-view.status.linesep-changed=Line separator set to {0}
-view.status.linesep-tooltip=Line separator (click to change)
-view.status.memory-tooltip=Java heap memory: {0}Kb/{1}Kb
-view.status.mode-tooltip=Current edit mode, fold mode, and encoding
-view.status.multi-changed=Multiple selection mode is {0,choice,0#off|1#on}
-view.status.multi-tooltip=Multiple selection mode (click to change)
-view.status.narrow=Invoke "Expand All Folds" to make all text visible again
-view.status.no-markers=no markers set
-view.status.no-registers=no registers defined
-view.status.overwrite-changed=Overwrite mode is {0,choice,0#off|1#on}
-view.status.overwrite-tooltip=Overwrite/insert mode indicator (click to change)
-view.status.paste-string-register=Register to paste from? [{0}]
-view.status.print=Printing page {0}
-view.status.quick-copy=Quick copy mode - marked text will replace selection
-view.status.recording=Macro recording
-view.status.rect-select-changed=Rectangular selection is {0,choice,0#off|1#on}
-view.status.rect-tooltip=Rectangular selection mode (click to change)
-view.status.replace-all=Replaced {0} occurrence(s) in {1} file(s)
-view.status.search-not-found=Search string not found!
-view.status.select-marker=Shortcut of marker to select to? [{0}]
-view.status.swap-marker=Shortcut of marker to swap caret position with? \
-	[{0}]
-view.status.vertical-paste-string-register=Register to vertical paste \
-	from? [{0}]
-view.status.wrap-changed=Word wrap mode is now "{0}"
-view.status.wrap-tooltip=<html>Word wrap mode is {0} (click to change)</html>
-view.status.bufferset-tooltip=BufferSet scope is {0}
-wrap.none=disabled
-wrap.hard=hard
-wrap.soft=soft
-#}}}
 
 #{{{ Status bar component visibility
 view.status=( mode , fold , encoding ) wrap multiSelect rectSelect overwrite lineSep buffersets task-monitor memory-status errors clock
@@ -971,32 +549,10 @@ view.status.show-caret-status=true
 
 #}}}
 
-#{{{ Printing
-
-print.headerText=jEdit - {0}
-print.footerText={0} :: page {1}
-
-print-error.title=Print Error
-print-error.message=An error occurred while trying to print:\n\
-	{0}
-#}}}
-
 #{{{ Various dialog boxes
 
 #{{{ About dialog
-about.title=About jEdit
-about.version=jEdit {0} {1} mode, using {2} Java {3}
-about.mode.standalone=standalone
-about.mode.server=server
-about.mode.server-background=server-background
-about.navigate=Press arrow keys to navigate about text
-
-# This text scrolls by in the about dialog box.
-# Hack: Since StringTokenizer treats two consequent \n as one token, we
-# insert a space by itself in the text to create blank lines.
-about.text=jEdit is brought to you by\n\
-	\n\
-	Slava Pestov\n\
+about.text.contributors=Slava Pestov\n\
 	Aaron Bell\n\
 	Adam Sawicki\n\
 	Adrian Baker\n\
@@ -1021,7 +577,7 @@ about.text=jEdit is brought to you by\n\
 	Bernhard Walle\n\
 	Bertalan Fodor\n\
 	Bill McMilleon\n\
-	Bj\u00f6rn "Vampire" Kautler\n\
+	Björn "Vampire" Kautler\n\
 	Brad Mace\n\
 	Brant Langer Gurganus\n\
 	Brett Smith\n\
@@ -1033,6 +589,7 @@ about.text=jEdit is brought to you by\n\
 	Chris Kent\n\
 	Chris Petersen\n\
 	Chris Scott\n\
+	Chris Sullins\n\
 	Christoph Daniel Schulze\n\
 	Claude Eisenhut\n\
 	Cullen Linn\n\
@@ -1068,8 +625,9 @@ about.text=jEdit is brought to you by\n\
 	Ian Maclean\n\
 	Igor Lesik\n\
 	Israel Olalla\n\
-	Jakub Rozto\u010dil\n\
+	Jakub Roztočil\n\
 	Jamie LaScolea\n\
+	Jarek Czekalski\n\
 	Jason Ginchereau\n\
 	Jean-Francois Larvoire\n\
 	Jeffrey Hoyt\n\
@@ -1079,9 +637,11 @@ about.text=jEdit is brought to you by\n\
 	Jim Lawton\n\
 	Jim Morris\n\
 	Jim Wissner\n\
-	J\u00f6rg Spieler\n\
+	Jimmy Chaw\n\
+	Jörg Spieler\n\
 	John Gellene\n\
 	John Perry\n\
+	Jojaba\n\
 	Jonathan Revusky\n\
 	Jorg Winter\n\
 	Joseph Erickson\n\
@@ -1127,6 +687,7 @@ about.text=jEdit is brought to you by\n\
 	Mike Dillon\n\
 	Mike Gorski\n\
 	Mike Hansen\n\
+	Milan ÄŒernil\n\
 	Mirco Bova\n\
 	Nahuel Foronda\n\
 	Neil Bertram\n\
@@ -1138,6 +699,7 @@ about.text=jEdit is brought to you by\n\
 	Orhan Alkan\n\
 	Patrick Tingen\n\
 	Paul Libbrecht\n\
+	Peter C. Chapin\n\
 	Peter Cox\n\
 	Peter Graves\n\
 	Philipp Janda\n\
@@ -1172,6 +734,7 @@ about.text=jEdit is brought to you by\n\
 	Stefan Kost\n\
 	Stefano Maestri\n\
 	Stephen Bartlett\n\
+	Stephen Blackheath\n\
 	Steve Jakob\n\
 	Stuart Barlow\n\
 	Tal Davidson\n\
@@ -1179,9 +742,11 @@ about.text=jEdit is brought to you by\n\
 	Thomas Bock\n\
 	Thomas Dilts\n\
 	Thomas Galvin\n\
+	Thomas Meyer\n\
 	Todd Papaioannou\n\
 	Tom Copeland\n\
 	Tom Locke\n\
+	Tom Power\n\
 	Trevor Harmon\n\
 	Vicente Salvador\n\
 	Vinod Kiran\n\
@@ -1189,631 +754,31 @@ about.text=jEdit is brought to you by\n\
 	Will Varfar\n\
 	Wiktor Adamski\n\
 	Wojciech Stryjewski\n\
-	Wolfgang Chico-T\u00f6pfer\n\
-	\n\
-	I'd also like to thank the users for their\n\
-	comments, feedback and bug reports.
-#}}}
-
-#{{{ Error list dialog, used to report I/O and plugin load errors
-error-list.plugin-manager=Plugin Manager
-#}}}
-
-#{{{
-largeBufferDialog.title=Large buffer {0}
-largeBufferDialog.message=The buffer is very large and jEdit may become unresponsive\n\
-	due to syntax highlighting. You should consider the following options.\n\
-	-Keep Full syntax : jEdit's syntax highlight will work as usual, jEdit \n\
-	may become very slow, this is not recommended.\n\
-	-Context insensitive syntax highlighting. In this case, jEdit will\n\
-	do fast highlighting, but the result may not be perfect. The\n\
-	buffer is highlighted line by line without checking context\n\
-	of the previous line. It is possible that the syntax is not accurate\n\
-	if you have tokens on multiple lines (multiline comments, xml tags ...)\n\
-	-Use 'text' mode of jEdit (no syntax highlighting)
-largeBufferDialog.fullSyntax=Full syntax highlight
-largeBufferDialog.contextInsensitive=Context insensitive syntax highlight
-largeBufferDialog.defaultMode=Text edit mode
-#}}}
-
-#{{{ I/O error dialog box
-ioerror.title=I/O Error
-ioerror.caption=The following {0} I/O operations could not be completed:
-ioerror.caption-1=The following I/O operation could not be completed:
-
-ioerror={0}
-ioerror.directory-error=Cannot list directory: {0}
-ioerror.directory-error-nomsg=Cannot list directory.
-ioerror.encoding-error=The file could not be loaded correctly (some data might be lost) with\n\
-	the encoding "{0}".\n\
-	({1})\n\
-	Try selecting a different encoding.\n\
-	It can be selected with the menu File->Reload with Encoding.\n\
-	If you want it to be done automatically, add the candidates into\n\
-	"List of fallback encodings" in Encodings pane of Global Options.
-ioerror.write-encoding-error=Failed to encode the character\n\
-	{3} at column {2} in line {1} with the encoding "{0}".
-ioerror.read-error=Cannot load: {0}
-ioerror.write-error=Cannot save: {0}
-ioerror.unsupported-encoding-error={0} charset is not supported by your JVM
-ioerror.open-directory=Cannot open directory as a buffer.
-ioerror.save-directory=Cannot save buffer over a directory.
-ioerror.no-read=Insufficent permissions to load file.
-ioerror.no-write=Insufficent permissions to save file.
-ioerror.write-error-readonly=Unable to save, the file is readonly.
-ioerror.save-readonly-twostagefail=Unable to save, the file is readonly and it two stage save is impossible.
-ioerror.badurl=Malformed URL: {0}
-ioerror.delete-error=Cannot delete file.
-ioerror.rename-exists=Cannot overwrite existing file {0}.
-ioerror.rename-error=Cannot rename to {0}.
-ioerror.mkdir-error=Cannot create directory.
-
-vfs.not-supported.list=Directories on the "{0}" filesystem cannot be browsed.
-vfs.not-supported.load=Files on the "{0}" filesystem cannot be opened.
-vfs.not-supported.save=Files cannot be saved to the "{0}" filesystem.
-
-vfs.overwrite-readonly.title=File is readonly
-vfs.overwrite-readonly.message=The file {0} is readonly.\n\
-	Would you like to save it anyway, resetting the readonly flag\n\
-	it will use two stage save (resets file owner on Unix)
-
-vfs.twostageimpossible.title=Two stage save cannot be used
-vfs.twostageimpossible.message=Two stage save cannot be used, do you want to\n\
-	save anyway ?
-
-out-of-memory-error=There was insufficent Java heap memory to complete\n\
-	this request. Try increasing the maximum heap size.\n\
-	\n\
-	Documentation on changing the Java heap size can be found in\n\
-	the "Buffers" section of the "jEdit Basics" chapter of the\n\
-	user guide.
-#}}}
-
-#{{{ Old I/O error dialog boxes
-ioerror.message=An I/O error occurred ({0})
-
-read-error.title=Read Error
-# {0} - the path name {1} - the error message
-read-error.message=The file {0}\n\
-	could not be loaded due to an I/O error.\n\
-	({1})
-
-write-error.title=Write Error
-# {0} - the path name {1} - the error message
-write-error.message=The file {0}\n\
-	could not be saved due to an I/O error.\n\
-	({1})
-
-directory-error.title=Directory Error
-# {0} - the path name {1} - the error message
-directory-error.message=The directory {0}\n\
-	could not be listed due to an I/O error.\n\
-	({1})
-
-directory-error-nomsg.title=Directory Error
-# {0} - the path name
-directory-error-nomsg.message=The directory {0}\n\
-	could not be listed due to an I/O error.
-
-encoding-error.title=Incompatible Encoding
-encoding-error.message=The file {0}\n\
-	could not be loaded with the "{1}" encoding.\n\
-	({2})\n\
-	\n\
-	To use a different encoding, try the commands in the\n\
-	File->Open With Encoding menu.\n\
-	\n\
-	If you are really stuck and do not know which encoding\n\
-	to use, try "ASCII" or "8859_1".
-
-open-directory.title=Cannot Open Directory
-open-directory.message={0} is a directory.\n\
-	Directories cannot be opened for editing.
-
-save-directory.title=Cannot Save Directory
-save-directory.message={0} is a directory.\n\
-	Buffers cannot be saved over directories.
-
-no-read.title=Cannot Open File
-no-read.message=Cannot read from {0}.\n\
-	This probably means you have insufficent permissions.
-
-no-write.title=Cannot Save File
-no-write.message=Cannot save to {0}.\n\
-	This probably means you have insufficent permissions.
-
-badurl.title=Invalid URL
-# {0} - the URL
-# {1} - the error
-badurl.message=The following URL is invalid: {0}\n\
-	({1})
-#}}}
-
-#{{{ Go to line dialog
-goto-line.title=Go To Line
-goto-line.message=Go to line:
-#}}}
-
-#{{{ Word count dialog
-wordcount.title=Word Count
-# {0} - characters
-# {1} - words
-# {2} - lines
-wordcount.message=Characters: {0}\nWords: {1}\nLines: {2}
-#}}}
-
-#{{{ Set marker dialog
-setmarker.title=Set Marker
-setmarker.message=Marker name:
-#}}}
-
-#{{{ File not saved dialog
-notsaved.title=File Not Saved
-# {0} - file name
-notsaved.message=Save changes to {0}?
-#}}}
-
-#{{{ File changed, still reload dialog
-changedreload.title=File Modified
-changedreload.message=The file {0}\n\
-	has been modified since last save; if you reload,\n\
-	the changes will be lost. Continue?
-#}}}
-
-#{{{ Autosave file exists dialog
-autosave-found.title=Autosave File Found
-# {0} - autosave file name
-autosave-found.message=An autosave file {0}\n\
-	was found! This probably means that jEdit crashed before you could\n\
-	save. Would you like to open the autosave file?
-
-autosave-loaded.title=Autosave File Loaded
-autosave-loaded.message=The autosave file {0}\n\
-	has been loaded. You should now check if it contains your unsaved\n\
-	data. If you would like to keep the autosaved changes, save the file.\n\
-	If you would like to discard them, select File->Reload.
-#}}}
-
-#{{{ Save all confirm dialog
-saveall.title=Save All Buffers
-saveall.message=Are you sure you want to save all modified buffers?
-#}}}
-
-#{{{ Reload all confirm dialog
-reload-all.title=Reload All Buffers
-reload-all.message=Are you sure you want to reload all buffers from disk?\n\
-	Unsaved changes in any open buffers WILL BE LOST!
-#}}}
-
-#{{{ Encoding prompt
-encoding-prompt.title=Open With Other Encoding
-encoding-prompt.message=Character encoding to use:
-#}}}
-
-#{{{ Macro recording already in progress dialog
-already-recording.title=Already Recording
-already-recording.message=A macro recording is already in progress.
-#}}}
-
-#{{{ No temporary macro dialog
-no-temp-macro.title=No Temporary Macro
-no-temp-macro.message=No temporary macro has been recorded.
-#}}}
-
-#{{{ Record macro dialog
-record.title=Record Macro
-record.message=Macro name:
-#}}}
-
-#{{{ Some features don't work with -nosettings dialog
-no-settings.title=Feature Disabled
-no-settings.message=jEdit was started with the -nosettings switch.\n\
-	To use this feature, you must start jEdit without that switch.
-#}}}
-
-#{{{ Some features don't work with the web start version
-no-webstart.title=Feature Disabled
-no-webstart.message=This feature is not available in the WebStart version\n\
-	of jEdit.
+	Wolfgang Chico-Töpfer
 #}}}
 
 #{{{ Search and replace dialog
-search.title=Search And Replace
-
-search.find=Search for:
-search.find.tooltip=PgUp/PgDown or right-click to recall previous
-search.find.mnemonic=s
-search.replace=Replace with:
-search.replace.mnemonic=w
-search.string-replace-btn=Text
-search.beanshell-replace-btn=Return value of a BeanShell snippet
-
-search.settings=Settings:
-search.keep=Keep dialog
-search.keep.mnemonic=k
-search.word=Whole word
-search.word.mnemonic=q
-search.case=Ignore case
-search.case.mnemonic=i
-search.regexp=Regular expressions
-search.regexp.mnemonic=x
-search.hypersearch=HyperSearch
-search.hypersearch.mnemonic=h
-search.wrap=Auto wrap
-search.wrap.mnemonic=t
-
-search.direction=Direction:
-search.back=Backward
-search.back.mnemonic=b
-search.forward=Forward
-search.forward.mnemonic=o
-
-search.fileset=Search in:
-search.selection=Selection
-search.selection.mnemonic=n
-search.current=Current buffer
-search.current.mnemonic=c
-search.all=All buffers
-search.all.mnemonic=l
-search.directory=Directory:
-search.directory.mnemonic=d
-search.skipHidden=Skip hiddens/backups
-search.skipBinary=Skip binary files
-search.skipHidden.mnemonic=h
-search.skipBinary.mnemonic=b
-
-search.directoryField=Directory:
-search.directoryField.mnemonic=y
-search.filterField=Filter:
-search.filterField.mnemonic=f
-glob.tooltip={*.c,*.h} for multiple extensions
-search.subdirs=Search subdirectories
-search.subdirs.mnemonic=u
-search.choose=Choose...
-search.choose.mnemonic=e
-search.synchronize=Synchronize
-search.synchronize.mnemonic=z
-search.synchronize.tooltip=Sets filter and directory to current buffer's extension/location.
-search.findBtn=Find
-search.findBtn.mnemonic=f
-search.replaceBtn=Replace
-search.replaceAndFindBtn=Replace & Find
-search.replaceAndFindBtn.mnemonic=r
-search.replaceAllBtn=Replace All
-search.replaceAllBtn.mnemonic=a
-
 # Beep when searching automatically wraps?
 search.beepOnSearchAutoWrap=false
 #}}}
 
-#{{{ Keep searching dialog
-keepsearching.title=No More Matches Found
-keepsearching.message=No more matches were found. Continue search from\n\
-	{0,choice,0#beginning|1#end}?
-#}}}
-
 #{{{ HyperSearch results dialog
-hypersearch-results.title=HyperSearch Results
-hypersearch-results.result-caption={0} ({1,choice,1#1 occurrence|1<{1,number,integer} occurrences in '{2,choice,1#1 file|1<{2,number,integer} files}'})
-hypersearch-results.open=Open
-hypersearch-results.open-view=Open in New View
-hypersearch-results.open-plain-view=Open in New Plain View
-hypersearch-results.open-split=Open in New Split
-hypersearch-results.remove-node=Remove Node
-hypersearch-results.new-search=New Search From Here
-hypersearch-results.expand-child-nodes=Expand Child Nodes
-hypersearch-results.collapse-child-nodes=Collapse Child Nodes
-hypersearch-results.copy-to-clipboard=Copy to clipboard
-hypersearch-results.redo=Redo HyperSearch
-hypersearch-results.tree-view=Toggle Tree View
-hypersearch-results.clear.label=Remove All Nodes
 hypersearch-results.clear.icon=22x22/actions/edit-clear.png
-hypersearch-results.stop.label=Stop HyperSearch and show current results
 hypersearch-results.stop.icon=22x22/actions/process-stop.png
-hypersearch-results.multi.label=Toggle Multiple Results
 hypersearch-results.multi.multiple.icon=22x22/actions/edit-find-multiple.png
 hypersearch-results.multi.single.icon=22x22/actions/edit-find-single.png
-hypersearch-results.highlight.label=Set Match Highlight Style
 hypersearch-results.match.highlight.icon=22x22/actions/edit-find-highlight-match.png
 hypersearch-results.match.normal.icon=22x22/actions/edit-find-normal-match.png
-hypersearch-results.file-caption={0} ({1,choice,1#1 occurrence|1<{1,number,integer} occurrences in '{2,choice,1#1 line|1<{2,number,integer} lines}'})
-hypersearch-results.searching=Searching for "{0}"...
-hypersearch-results.no-results=No results found for "{0}".
-hypersearch-results.done=Results for "{0}":
-
-hypersearch-status=Searching
-#}}}
-
-#{{{ HyperSearch too many results
-hypersearch.tooManyResults.label=Too many results
-hypersearch.tooManyResults.title=Too many results
-hypersearch.tooManyResults.message=The search you asked returned {0} \
-	results and is not yet finished. Do you want to stop it ?
-#}}}
-
-
-#{{{ Search and replace error dialog
-searcherror.title=Search and Replace Error
-# {0} - error message
-searcherror.message=An error occurred while performing this operation.
-#}}}
-
-#{{{ Search and replace error dialog
-searcherror-bsh.title=Search and Replace Error
-# {0} - error message
-searcherror-bsh.message=An error occurred while performing this operation.\n\
-	\n\
-	Make sure the replace mode is set to "Text" if you did not intend\n\
-	the replace string to be interpreted as a BeanShell expression.
-#}}}
-
-#{{{ Empty fileset error dialog
-empty-fileset.title=Empty File Set
-empty-fileset.message=The specified search file set contains no files.\n\
-	Please ensure that the file name filter and directory to search\n\
-	(if applicable) are set correctly.
-#}}}
-
-#{{{ Can only search local directories dialog
-remote-dir-search.title=Non-Local Directory Chosen
-remote-dir-search.message=You have elected to search a non-local directory.\n\
-	This can be very slow due to network latency and so on.\n\
-	Are you sure you want to continue?
-#}}}
-
-#{{{ "Search in selection" active but nothing selected in text area
-search-no-selection.title=Nothing Selected
-search-no-selection.message=Please select some text or deactivate the\n\
-	"search in selection" option first.
 #}}}
 
 #{{{ Paste previous and paste deleted dialogs
-paste-from-list.whitespace=<whitespace>
 paste-from-list.max-item-length=1000
 paste-from-list.max-preview-length=100000
-paste-previous.title=Paste Previous
-paste-previous.caption=Recently copied and pasted text:
-paste-deleted.title=Paste Deleted
-paste-deleted.caption=Recently deleted text:
-#}}}
-
-#{{{ File changed on disk dialog
-filechanged-save.title=File Changed on Disk
-filechanged-save.message=The file {0}\n\
-	has been modified on disk by another program. Are you sure\n\
-	you want to continue saving it?
-#}}}
-
-#{{{ File exists dialog
-fileexists.title=File Exists
-fileexists.message=The file {0} already exists. Are you sure you want\n\
-	to overwrite it?
-#}}}
-
-#{{{ Select line range dialog
-selectlinerange.title=Select Line Range
-selectlinerange.caption=Select line range:
-selectlinerange.start=Start line:
-selectlinerange.end=End line:
-#}}}
-
-#{{{ View registers dialog
-view-registers.title=Registers
-view-registers.caption=Register:
-view-registers.clipboard=$ (clipboard)
-view-registers.selection=% (selection)
-view-registers.none=No registers defined
-view-registers.register=Register:
-view-registers.contents=Contents:
-view-registers.undefined=__UNDEFINED__
-#}}}
-
-#{{{ Close all buffers dialog
-close.title=Unsaved Changes
-close.caption=The following buffers have unsaved changes:
-close.selectAll=Select All
-close.selectAll.mnemonic=a
-close.save=Save Selected
-close.save.mnemonic=s
-close.discard=Discard Selected
-close.discard.mnemonic=d
-#}}}
-
-#{{{ Files changed on disk dialog
-files-changed.title=Files Changed on Disk
-files-changed.caption=The following files were changed on disk by another program:
-files-changed.deleted=Deleted on disk; save to recreate:
-files-changed.changed-auto=Automatically reloaded:
-files-changed.changed=Changed on disk:
-files-changed.changed-dirty-auto=Buffer dirty; not reloaded:
-files-changed.changed-dirty=Buffer dirty, and file changed on disk:
-files-changed.select-all=Select All
-files-changed.select-all.mnemonic=a
-files-changed.reload=Reload
-files-changed.reload.mnemonic=r
-files-changed.ignore=Ignore
-files-changed.ignore.mnemonic=i
-#}}}
-
-#{{{ Abbrev dialogs
-add-abbrev.title=Add Abbreviation
-add-abbrev.mode=Add mode-specific
-add-abbrev.global=Add global
-
-edit-abbrev.title=Edit Abbreviation
-
-edit-abbrev.duplicate.title=Duplicate Abbreviation
-edit-abbrev.duplicate.message=\
-	Another expansion already exists with this abbreviation.\n\
-	\n\
-	Do you want to override the existing expansion?
-
-abbrev-editor.abbrev=Abbreviation:
-abbrev-editor.before=Text to insert before caret:
-abbrev-editor.after=Text to insert after caret:
-#}}}
-
-#{{{ XMode errors
-xmode-error.title=XML Parse Error
-# {2} is the column number, but it's not too useful so we don't show it
-xmode-error.message=An error occurred while parsing {0}, line {1}:\n\
-	{3}
-xmode-error.dtd=The DTD could not be loaded\n({0})
-xmode-error.termchar-invalid=The value of the AT_CHAR attribute is invalid ({0})
-xmode-error.doctype-invalid=Expected a document type of MODE, found {0}
-xmode-error.empty-tag=The {0} tag cannot be empty
-xmode-error.token-invalid=The token type {0} is invalid
-xmode-error.empty-keyword=The keyword text cannot be empty
-xmode-error.regexp=Invalid regular expression\n({0})
-xmode-error.hash-char-and-hash-chars-mutually-exclusive=HASH_CHAR and HASH_CHARS may not be specified both
-xmode-error.delegate-invalid=Invalid delegate: {0}
-#}}}
-
-#{{{ JARClassLoader errors
-plugin-error.title=Plugin Error
-plugin-error.caption=The following plugins could not be loaded:
-plugin-error.caption-1=The following plugin could not be loaded:
-
-plugin-error.load-error=Cannot load: {0}\n\
-	The most likely reason is that the JAR file is corrupt; try\n\
-	reinstalling it. See Utilities->Troubleshooting->Activity Log\n\
-	for a full stack trace.
-plugin-error.start-error=Cannot start: {0}\n\
-	Try updating to a newer version of the plugin.
-plugin-error.already-loaded=Two copies installed. Please remove one of the \
-	two copies.
-plugin-error.dep-jdk=Requires Java {0} or later, but you only have version {1}.
-plugin-error.dep-jedit=Requires jEdit {0} or later, but you only have version {1}.\n\
-	Download new jEdit versions from <http://www.jedit.org>.
-plugin-error.dep-plugin.no-version=Requires version {0} \
-	or later of {1},\n\
-	but {1} is not installed.
-plugin-error.dep-plugin.broken=Requires {0}, but {0}\n\
-	could not be loaded.
-plugin-error.dep-plugin=Requires version {0} or later of {1}, \
-	but you only have {1} version {2}.
-plugin-error.dep-class=Requires the class {0}.\n\
-	Try installing the appropriate plugin or class library.
-plugin-error.missing-jar=Requires JAR file {0}.\n\
-	This JAR file is part of this plugin, but it cannot be found.\n\
-	Try reinstalling this plugin.
-plugin-error.not-42=This plugin does not support dynamic loading.\n\
-	You must restart jEdit after removing or installing this plugin.
-
-plugin-error-download.title=Plugin error
-plugin-error-download.message=Error while downloading the plugin, please try another mirror\n{0}
-#}}}
-
-#{{{ Macro dialogs
-macro-input.title=Macro Input
-macro-error.title=Macro Error
-macro-message.title=Macro Message
-macro-confirm.title=Macro Confirmation
-#}}}
-
-#{{{ BeanShell stuff
-beanshell-error.title=BeanShell Error
-beanshell-error.message=A BeanShell error occurred.
-
-beanshell-eval-input.title=Evaluate BeanShell Expression
-beanshell-eval-input.message=BeanShell expression:\n\
-	\n\
-	Variables:\n\
-	view - The current view instance\n\
-	editPane - The current edit pane instance\n\
-	textArea - The current text area instance\n\
-	buffer - The current buffer
-
-beanshell-eval.title=BeanShell Evaluation
-beanshell-eval.message={0}
-
-beanshell-eval-line.title=Evaluate BeanShell Expression
-beanshell-eval-line.message=BeanShell expression to evaluate for each \
-	selected line:\n\
-	\n\
-	Variables:\n\
-	line - The index of the line, from the start of the buffer\n\
-	index - The index of the line, from the start of the selection\n\
-	text - The text of the line\n\
-	view - The current view instance\n\
-	editPane - The current edit pane instance\n\
-	textArea - The current text area instance\n\
-	buffer - The current buffer
-#}}}
-
-#{{{ Macro not recording dialog
-macro-not-recording.title=Not Recording
-macro-not-recording.message=A macro is not currently being recorded.
-#}}}
-
-#{{{ Large repeat count warning
-large-repeat-count.title=Large Repeat Count
-large-repeat-count.message=Are you sure you want to invoke "{0}" {1} times?
-
-large-repeat-count.user-input.title=Large Repeat Count
-large-repeat-count.user-input.message=Are you sure you want to insert "{0}" \
-	{1} times?
-#}}}
-
-#{{{ Wrong fold mode dialog
-folding-not-explicit.title=Wrong Fold Mode
-folding-not-explicit.message=This command can only be used in explicit fold mode.
-#}}}
-
-#{{{ Memory status dialog box
-memory-status.title=Java Heap Memory
-memory-status.gc=Garbage collection released {0} Kb.
-memory-status.use={0} Kb used, {1} Kb total
-#}}}
-
-#{{{ Multiple I/O request errors
-buffer-multiple-io.title=I/O Error
-buffer-multiple-io.message=Each buffer can only execute one input/output\n\
-	operation at a time. Please wait until the current\n\
-	operation finishes (or abort it in the I/O progress monitor)\n\
-	before starting another one.
-
-browser-multiple-io.title=I/O Error
-browser-multiple-io.message=Each file system browser can only execute one input/output\n\
-	operation at a time. Please wait until the current operation\n\
-	finishes (or abort it in the I/O progress monitor) before starting\n\
-	another one.
-#}}}
-
-#{{{ maxLineLen=0 warning
-format-maxlinelen.title=Wrap Margin
-format-maxlinelen.message=The wrap margin must be set to a non-zero value\n\
-	for this command to work.
 #}}}
 
-#{{{ Text under caret does not have a syntax style (token type)
-syntax-style-no-token.title=Syntax Style Configuration
-syntax-style-no-token.message=The text under the caret has no associated \
-	syntax style to configure.
-#}}}
-
-#{{{ View title dialog
-view.title.select=Please enter a title for this view:
-#}}}
-#}}}
-
-#{{{ Buffer options dialog
-buffer-options.title=Buffer Options
-buffer-options.caption=This dialog box changes settings for the current buffer\n\
-	only. To change the default settings for an edit mode, see\n\
-	the Utilities->Global Options->Editing dialog.
-buffer-options.loading-saving=Loading and Saving
-buffer-options.lineSeparator=Line separator:
-buffer-options.encoding=Character encoding:
-buffer-options.gzipped=GZIP (compress) file on disk
-buffer-options.editing=Editing
-buffer-options.mode=Edit mode:
 #}}}
 
 #{{{ Global options dialog
-options.title=Options
-options.title-template={0}: {1}
-options.jedit.label=jEdit
 
 # Option pane to show by default
 options.last=editing
@@ -1827,588 +792,130 @@ options.group.browser=browser.general browser.colors browser.custom.context
 #}}}
 
 #{{{ General pane
-options.general.label=General
 options.general.code=new GeneralOptionPane();
-options.general.lineSeparator=Default line separator:
-options.general.encoding=Default character encoding:
-options.general.encodingAutodetect=Auto-detect file encoding when possible
-options.general.checkModStatus=If open files are changed on disk:
-options.general.checkModStatus.nothing=do nothing
-options.general.checkModStatus.prompt=prompt
-options.general.checkModStatus.reload=automatically reload and notify user
-options.general.checkModStatus.silentReload=autoreload without notification
-options.general.checkModStatusUpon=Check for file change upon:
-options.general.checkModStatusUpon.focus=application focus
-options.general.checkModStatusUpon.all=application focus, visiting the buffer or saving any buffer
-options.general.checkModStatusUpon.operations=visiting the buffer or saving any buffer
-options.general.checkModStatusUpon.focusBuffer=visiting or saving the buffer
-options.general.checkModStatusUpon.none=saving the buffer
-options.general.recentFiles=Recent files to remember:
-options.general.hypersearch.maxWarningResults=Max Hypersearch Results:
-options.general.sortRecent=Sort recent file list
-options.general.saveCaret=Save caret positions in recent file list
-options.general.persistentMarkers=Save marker positions
-options.general.resetUndo=Reset undo history on save
-options.general.restore=Restore previously open files on startup
-options.general.restore.splits=Restore split configuration
-options.general.restore.remote=... including remote files over VFS
-options.general.restore.cli=... including file names specified on the command line
-options.general.encodingDetectors=List of encoding autodetectors:
-options.general.fallbackEncodings=List of fallback encodings:
-options.general.fallbackEncodings.tooltip=A whitespace-separated list of encodings to try against encoding errors on loading
-options.general.systrayicon=Show the systray icon
 #}}}
 
 #{{{ Abbreviations pane
-options.abbrevs.label=Abbreviations
 options.abbrevs.code=new AbbrevsOptionPane();
-options.abbrevs.set=Abbrev set:
-options.abbrevs.expandOnInput=Space bar expands abbrevs
-options.abbrevs.abbrev=Abbrev
-options.abbrevs.expand=Expansion
-options.abbrevs.add=Add...
-options.abbrevs.edit=Edit...
-options.abbrevs.remove=Remove
 options.abbrevs.add.icon=22x22/actions/list-add.png
 options.abbrevs.edit.icon=22x22/actions/document-properties.png
 options.abbrevs.remove.icon=22x22/actions/list-remove.png
 #}}}
 
 #{{{ Appearance pane
-options.appearance.label=Appearance
 options.appearance.code=new AppearanceOptionPane();
-options.appearance.iconTheme=Icon Theme:
-options.appearance.fonts.antialias=Anti-alias Non-TextArea fonts
-options.appearance.lf.note=Restart jEdit for look & feel changes to take effect
-options.appearance.lf=Swing look & feel:
-options.appearance.primaryFont=Button, menu and label font:
-options.appearance.secondaryFont=List and text field font:
-options.appearance.helpViewerFont=HelpViewer/Browser Text font:
-options.appearance.history=History text field entries to remember:
-options.appearance.menuSpillover=Number of items before menus spill over:
-options.appearance.startup.label=Startup options
-options.appearance.showSplash=Show splash screen on startup
-options.appearance.showTips=Show tips on startup
-options.appearance.experimental.label=Experimental options
-options.appearance.experimental.caption=The below three options might not work \
-	correctly with some\n\
-	Java versions. If you experience problems, switch them off.
-
-options.appearance.textColors=Use jEdit text area colors in all text \
-	components
-options.appearance.decorateFrames=Draw window borders using Swing look & feel
-options.appearance.decorateDialogs=Draw dialog box borders using Swing look & feel
-options.appearance.continuousLayout.label=Use continuous layout in split panes
+# It is encouraged to set the following labels in their own language
+# here (not in localized .props) to catch eyes of non-English users more
+# friendly.
+options.appearance.lang.en=English
+options.appearance.lang.fr=Français
+options.appearance.lang.de=Deutsch
+#Japanese
+options.appearance.lang.ja=日本語
+options.appearance.lang.cs=ÄŒesky
 #}}}
 
 #{{{ Context Menu pane
-options.context.label=Context Menu
 options.context.code=new ContextOptionPane();
-options.context.caption=Items in text area right click menu:
-options.context.add=Add...
 options.context.add.icon=22x22/actions/list-add.png
-options.context.remove=Remove
 options.context.remove.icon=22x22/actions/list-remove.png
-options.context.moveUp=Move Up
 options.context.moveUp.icon=22x22/actions/go-up.png
-options.context.moveDown=Move Down
 options.context.moveDown.icon=22x22/actions/go-down.png
-options.context.reset=Reset to Default
 options.context.reset.icon=22x22/actions/edit-clear.png
-options.context.add.title=Add to Context Menu
-options.context.add.caption=Add to context menu:
-options.context.add.separator=Separator
-options.context.add.action=Command or macro:
-
-options.context.reset.dialog.title=Reset to Default
-options.context.reset.dialog.message=Are you sure you want to reset the context menu to the installation default?
+options.context.includeOptionsLink=true
 #}}}
 
 #{{{ Docking pane
-options.docking.label=Docking
 options.docking.code=new DockingOptionPane();
-options.docking.title=Window
-options.docking.dockPosition=Docking position
-options.appearance.selectFramework.label=Docking framework:
-options.docking.autoSaveModeLayout.label=Automatically save mode-specific docking layout
-options.docking.autoLoadModeLayout.label=Automatically load mode-specific docking layout
-options.docking.selectSet.label=Dockable set:
 #}}}
 
 #{{{ Editing pane
-options.editing.label=Editing
 options.editing.code=new EditingOptionPane();
-options.editing.defaultMode=Default edit mode:
-options.editing.undoCount=Number of undos:
-options.editing.caption-0=\
-	To customize mode-specific settings, select an edit mode\n\
-	from the below menu. Currently, global defaults are being\n\
-	shown.
-options.editing.caption-1=\
-	Uncheck "use default settings" to customize mode-specific\n\
-	settings. Otherwise, settings from the <global defaults>\n\
-	section will be used.
-options.editing.mode=Change settings for mode:
-options.editing.global=<global defaults>
-options.editing.useDefaults=Use default settings
-options.editing.filenameGlob=File name glob:
-options.editing.firstlineGlob=First line glob:
-options.editing.folding=Folding mode:
-options.editing.collapseFolds=Initially collapse folds with level:
-options.editing.wrap=Word wrap:
-options.editing.maxLineLen=Wrap margin:
-options.editing.maxLineLen.tooltip=Select 0 for text area width (soft wrap only)
-options.editing.tabSize=Tab width:
-options.editing.indentSize=Indent width:
-options.editing.noWordSep=Extra word characters:
-options.editing.camelCasedWords=Separate "CamelCased" words
-options.editing.noTabs=Soft (emulated with spaces) tabs
-options.editing.elasticTabstops=Indent using elastic tabstops
-options.editing.elasticTabstops.tooltip=(Experimental) - may cause instability in jEdit.
-options.editing.deepIndent=Deep indent
 #}}}
 
 #{{{ Encodings pane
-options.encodings.label=Encodings
 options.encodings.code=new EncodingsOptionPane();
-options.encodings.selectEncodings=Select the encodings that should be shown in encoding dialogs:
-options.encodings.available=Available encoding(s)
-options.encodings.selected=Selected encoding(s)
-options.encodings.available.tooltip=<html>Encodings in this column will <b>not</b> be listed in encoding dialogs.\
-  Drag them to the right column to activate them</html>
-options.encodings.selected.tooltip=Encodings in this column be shown in encoding dialogs.\
-  Drag them to the left column to hide them
 #}}}
 
 #{{{ Gutter pane
-options.gutter.label=Gutter
 options.gutter.code=new GutterOptionPane();
-options.gutter.enabled=Show gutter
-options.gutter.optionalComponents=Optional gutter components
-options.gutter.lineNumbers=Line numbers
-options.gutter.minLineNumberDigits=Minimal number of digits to reserve for line numbers:
-options.gutter.selectionAreaEnabled=Line selection area when line numbers are not shown
-options.gutter.selectionAreaBgColor=Selection area background color:
-options.gutter.selectionAreaWidth=Selection area width (in pixels):
-options.gutter.font=Gutter font:
-options.gutter.foreground=Line number color:
-options.gutter.background=Background color:
-options.gutter.borderWidth=Gutter border width:
-options.gutter.numberAlignment=Line number alignment:
-options.gutter.interval-1=Highlight every\u0020
-options.gutter.interval-2=lines:
-options.gutter.currentLineHighlight=Highlight current line:
-options.gutter.structureHighlight=Show structure scope:
-options.gutter.markerHighlight=Show marker positions:
-options.gutter.foldColor=Fold markers:
-options.gutter.focusBorderColor=Focused gutter border:
-options.gutter.noFocusBorderColor=Unfocused gutter border:
-options.gutter.foldStyle.label=Fold style:
-options.gutter.foldStyleNames.Triangle=Triangle
-options.gutter.foldStyleNames.Square=Square
-options.gutter.foldStyleNames.Circle=Circle
 #}}}
 
 #{{{ Mouse pane
-options.mouse.label=Mouse
 options.mouse.code=new MouseOptionPane();
-options.mouse.dragAndDrop=Drag and drop in text area
-options.mouse.joinNonWordChars=Double-click drag joins non-alphanumeric characters
-options.mouse.middleMousePaste=Quick copy using middle mouse button
-options.mouse.ctrlForRectangularSelection=Switch to rectangular selection while Ctrl is pressed
-options.mouse.gutter.foldClick=Click in gutter:
-options.mouse.gutter.SfoldClick=Shift-click in gutter:
-options.mouse.gutter.toggle-fold=Collapse/expand fold
-options.mouse.gutter.toggle-fold-fully=Collapse/expand fold fully
 #}}}
 
 #{{{ Plugin Manager pane
-options.plugin-manager.label=Plugin Manager
 options.plugin-manager.code=new PluginManagerOptionPane();
-options.plugin-manager.updateMirrors=Update mirror list
-options.plugin-manager.workthread=Updating mirror list ...
-options.plugin-manager.downloadSource=Download plugin source code
-options.plugin-manager.deleteDownloads=Delete archives from download \
-	directory after install
-options.plugin-manager.mirror=Preferred download mirror:
-options.plugin-manager.location=Install plugins in:
-options.plugin-manager.settings-dir=jEdit settings directory
-options.plugin-manager.app-dir=jEdit application directory
-options.plugin-manager.none=Plugin Central default
 #}}}
 
 #{{{ Printing pane
-options.print.label=Printing
 options.print.code=new PrintOptionPane();
-options.print.font=Print font:
-options.print.fontstyle=Print font style:
-options.print.fontsize=Print font size:
-options.print.header=Print a header with the file name
-options.print.footer=Print a footer with the date, time and page number
-options.print.lineNumbers=Print line numbers
-options.print.color=Color printing
-options.print.tabSize=Tab width when printing:
-options.print.workarounds=Workarounds for Java bugs
-options.print.glyphVector=Print spacing workaround (increases spool file size)
-options.print.force13=Use old printing API (enable this if jEdit hangs when \
-	printing)
-options.print.folds=Print folded regions
 #}}}
 
 #{{{ Proxy pane
-options.firewall.label=Proxy Servers
 options.firewall.code=new FirewallOptionPane();
-options.firewall.http.enabled=Use HTTP proxy server
-options.firewall.http.host=HTTP proxy host:
-options.firewall.http.port=HTTP proxy port:
-options.firewall.http.user=Username:
-options.firewall.http.password=Password:
-options.firewall.http.nonProxy=Connect directly to:
-options.firewall.socks.enabled=Use SOCKS proxy server
-options.firewall.socks.host=SOCKS proxy host:
-options.firewall.socks.port=SOCKS proxy port:
 #}}}
 
 #{{{ Save & Backup pane
-options.save-back.label=Saving & Backup
 options.save-back.code=new SaveBackupOptionPane();
-options.save-back.autosave=Autosave frequency (secs):
-options.save-back.backups=Max number of backups:
-options.save-back.backupDirectory=Backup directory:
-options.save-back.backupPrefix=Backup filename prefix:
-options.save-back.backupSuffix=Backup filename suffix:
-options.save-back.backupEverySave=Backup on every save
-options.save-back.backupEverySave.tooltip=Resets file permissions on some file systems
-options.save-back.twoStageSave=Two-stage save (safer but resets file permissions owner on some filesystems)
-options.save-back.twoStageSave.tooltip=Stage 1: Create a temporary file and save to it. Stage 2: Rename the temporary file to the real name.
-options.save-back.confirmSaveAll="Save All Buffers" asks for confirmation
-options.save-back.autosaveUntitled=Autosave untitled buffers
-options.save-back.suppressNotSavedConfirmUntitled=Never mark Untitled buffers dirty.
-options.save-back.suppressNotSavedConfirmUntitled.tooltip=Checking this means untitled buffers get wiped out whenever a new one is created (it's a feature!) 
-options.save-back.useMD5forDirtyCalculation=Never mark buffers dirty if contents are unchanged.
-options.save-back.useMD5forDirtyCalculation.tooltip=Compare with length and MD5 hash of  buffer at load time, to decide if an edited buffer is still dirty.
 #}}}
 
 #{{{ Shortcuts pane
-options.shortcuts.label=Shortcuts
 options.shortcuts.code=new ShortcutsOptionPane();
-options.shortcuts.select.label=Edit Shortcuts:
-options.shortcuts.select.tooltip=You can select globals, macros, or plugin shortcuts
-options.shortcuts.name=Command
-options.shortcuts.shortcut1=Primary shortcut
-options.shortcuts.shortcut2=Alternative shortcut
-options.shortcuts.filter.label=Filter:
-options.shortcuts.filter.tooltip=Show only actions whose name contains this text
-options.shortcuts.clear.label=Clear
-
-grab-key.title=Specify Shortcut
-grab-key.caption=Press the desired shortcut for "{0}", then click OK.
-grab-key.keyboard-test=Input the key strokes that are causing problems.
-grab-key.assigned-to=Currently assigned to: {0}
-grab-key.assigned-to.none=<none>
-grab-key.assigned-to.prefix={0} prefix
-grab-key.clear=Clear
-grab-key.remove=Remove Current
-
-grab-key.remove-ask.title=Remove Shortcut?
-grab-key.remove-ask.message=\
-	You didn't specify a new shortcut.\n\
-	Do you want to remove the current shortcut?
-
-grab-key.duplicate-alt-shortcut.title=Duplicate Shortcut
-grab-key.duplicate-alt-shortcut.message=\
-	The shortcut you selected duplicates the other\n\
-	shortcut for this item. Please choose another.
-
-grab-key.duplicate-shortcut.title=Duplicate Shortcut
-grab-key.duplicate-shortcut.message=\
-	This shortcut is already assigned to\n\
-	"{0}".\n\
-	\n\
-	Do you want to override this assignment?
-
-grab-key.prefix-shortcut.title=Invalid Shortcut
-grab-key.prefix-shortcut.message=\
-	You cannot use this shortcut, because\n\
-	it is a prefix to other shortcuts.\n\
-	Please choose another.
 #}}}
 
 #{{{ Status bar pane
-options.status.label=Status Bar
 options.status.code=new StatusBarOptionPane();
-options.status.visible=Show status bar
-options.status.plainview.visible=Show status bar in plain views
-options.status.foreground=Status bar text:
-options.status.background=Status bar background:
-options.status.memory.foreground=Memory indicator foreground:
-options.status.memory.background=Memory indicator background:
-options.status.edit.title=Edit Status Bar Entry
-options.status.edit.labelRadioButton=label
-options.status.edit.widgetRadioButton=widget
-options.status.edit.labelLabel=Type a label:
-options.status.edit.widgetLabel=Choose a widget:
-options.status.caret.linenumber=Show caret line number
-options.status.caret.dot=Show caret offset from start of line
-options.status.caret.virtual=Show caret virtual offset from start of line
-options.status.caret.offset=Show caret offset from start of file
-options.status.caret.bufferlength=Show length of file
 #}}}
 
 #{{{ Syntax Highlighting pane
-options.syntax.label=Syntax Highlighting
 options.syntax.code=new SyntaxHiliteOptionPane();
-options.syntax.object=Token type
-options.syntax.style=Text style
-options.syntax.foldLine.1=Collapsed fold line, level 1
-options.syntax.foldLine.2=Collapsed fold line, level 2
-options.syntax.foldLine.3=Collapsed fold line, level 3
-options.syntax.foldLine.0=Collapsed fold line, level > 3
 #}}}
 
 #{{{ Text Area pane
-options.textarea.label=Text Area
 options.textarea.code=new TextAreaOptionPane();
-options.textarea.font=Text font:
-options.textarea.fontsubst=Automatic font substitution
-options.textarea.fontsubst.tooltip=Automatically select the appropriate font \
-if the chosen one can't display characters.
-options.textarea.fontsubstlist=Preferred fonts:
-options.textarea.foreground=Text color:
-options.textarea.background=Background color:
-options.textarea.caret=Caret:
-options.textarea.blinkCaret=blinking
-options.textarea.blockCaret=block
-options.textarea.thickCaret=thick
-options.textarea.selection=Single selection:
-options.textarea.multipleSelection=Multiple selection:
-options.textarea.selectionFg=Selection foreground:
-options.textarea.lineHighlight=Highlight current line:
-options.textarea.structureHighlight=Highlight matching elements:
-options.textarea.eolMarkers=End of line markers:
-options.textarea.wrapGuide=Wrap guide:
-options.textarea.electricBorders=Electric (auto scroll) borders
-options.textarea.stdNextPrevWord=Go to next/previous word commands eat whitespace
-options.textarea.antiAlias=Anti Aliased smooth text
-options.textarea.antiAlias.tooltip=Slows down display on some systems
-options.textarea.fracFontMetrics=Fractional font metrics (for better smooth \
-	text display)
-options.textarea.fracFontMetrics.tooltip=Not recommended with subpixel antialiasing
-options.textarea.stripTrailingEOL=Hide final end of line (if any)
-options.textarea.completeFromAllBuffers=Complete words from all open buffers (default is \
-    to limit search to currently visible buffers)
-options.textarea.lineSpacing.label=Extra vertical line spacing (in pixels):
 #}}}
 
 #{{{ Tool Bar pane
-options.toolbar.label=Tool Bar
 options.toolbar.code=new ToolBarOptionPane();
-options.toolbar.showToolbar=Show tool bar
-options.toolbar.caption=Buttons to display on tool bar:
 options.toolbar.add.icon=22x22/actions/list-add.png
-options.toolbar.add=Add...
-options.toolbar.edit=Edit...
-options.toolbar.remove=Remove
 options.toolbar.remove.icon=22x22/actions/list-remove.png
-options.toolbar.moveUp=Move Up
 options.toolbar.moveUp.icon=22x22/actions/go-up.png
-options.toolbar.moveDown=Move Down
 options.toolbar.moveDown.icon=22x22/actions/go-down.png
-options.toolbar.reset=Reset to Default
 options.toolbar.reset.icon=22x22/actions/edit-clear.png
-options.toolbar.edit.title=Edit Tool Bar Entry
-options.toolbar.edit.caption=Type:
-options.toolbar.edit.separator=Separator
-options.toolbar.edit.action=Command or macro:
 options.toolbar.edit.icon=22x22/actions/document-properties.png
-options.toolbar.edit.builtin=Use built-in icon:
-options.toolbar.edit.file=Load icon from file:
-options.toolbar.edit.choose=Choose
-options.toolbar.edit.no-icon=No icon selected
-
-options.toolbar.reset.dialog.title=Reset to Default
-options.toolbar.reset.dialog.message=Are you sure you want to reset the toolbar to the installation default?
 #}}}
 
 #{{{ View pane
-options.view.label=View
 options.view.code=new ViewOptionPane();
-options.view.viewLayout=View layout
-options.view.floatableToolbars=Floatable Toolbars
-options.view.alternateDockingLayout=Alternate docked window placement
-options.view.alternateToolBarLayout=Alternate tool bar placement
-options.view.showFullPath=Show full path of buffer in title bar
-options.view.showSearchbar=Always show search bar
-options.view.beepOnSearchAutoWrap=Beep when searching automatically wraps
-options.view.showBufferSwitcher=Show buffer switcher
-options.view.bufferSwitcherMaxRowsCount=Visible rows in buffer switcher:
-options.view.sortBuffers=Sort buffer sets
-options.view.sortByName=Sort buffer sets by file name, instead of path name
-options.view.fullScreenIncludesMenu=Show the menu bar in full-screen mode
-options.view.fullScreenIncludesToolbar=Show the toolbars in full-screen mode
-options.view.fullScreenIncludesStatus=Show the status bar in full-screen mode
-options.bufferset.scope=BufferSet scope:
-options.editpane.bufferset.contain=New BufferSets contain:
-options.editpane.bufferset.newbufferset.copy=copy of current BufferSet
-options.editpane.bufferset.newbufferset.empty=an empty buffer
-options.editpane.bufferset.newbufferset.currentbuffer=current buffer only
-
 fullScreenIncludesMenu=true
 fullScreenIncludesToolbars=true
 fullScreenIncludesStatus=true
 #}}}
 
-
-
 #{{{ File System Browser panes
-options.browser.label=File System Browser
-
-options.browser.colors.label=Colors
 options.browser.colors.code=new BrowserColorsOptionPane();
-options.browser.colors.glob=File name glob
-options.browser.colors.color=Color
-options.browser.colors.add=Add
-options.browser.colors.remove=Remove
 
-options.browser.general.label=General
 options.browser.general.code=new BrowserOptionPane();
-options.browser.general.defaultPath=Default path:
-options.browser.general.defaultPath.favorites=Favorites
-options.browser.general.defaultPath.home=Home directory
-options.browser.general.defaultPath.last=Most recently visited directory
-options.browser.general.defaultPath.buffer=Parent directory of current buffer
-options.browser.general.defaultPath.working=Working directory of jEdit process
-options.browser.general.showMenubar=Show menu bar
-options.browser.general.showToolbar=Show tool bar
-options.browser.general.showIcons=Show icons
-options.browser.general.showHiddenFiles=Show hidden files
-options.browser.general.sortIgnoreCase=Ignore case when sorting
-options.browser.general.sortMixFilesAndDirs=Mix files and directories
-options.browser.general.doubleClickClose=Double-clicking an open file closes it
-options.browser.general.currentBufferFilter=Filter in file dialogs is \
-	current buffer extension
-options.browser.general.useDefaultIcons=Use default icons
 #}}}
 
 #{{{ Browser Context Menu
-options.browser.custom.context.label=Context menu
-options.browser.custom.context.caption=Custom items in browser right click menu:
 options.browser.custom.context.code=new BrowserContextOptionPane();
 #}}}
 
-#{{{ Font selector
-font-selector.title=Font Selector
-font-selector.family=Font family:
-font-selector.size=Font size:
-font-selector.style=Font style:
-font-selector.plain=Plain
-font-selector.bold=Bold
-font-selector.italic=Italic
-font-selector.bolditalic=Bold italic
-font-selector.preview=Preview
-font-selector.long-text=The quick brown fox jumps over the lazy dog.
-#}}}
-
-#{{{ Color chooser, used by options.syntaxs
-colorChooser.title=Pick a Color
-#}}}
-
-#{{{ Style editor, used by options.syntaxs
-style-editor.title=Style Editor
-style-editor.tokenType=Token type:
-style-editor.italics=Italics
-style-editor.bold=Bold
-style-editor.fgColor=Text color:
-style-editor.bgColor=Background color:
-#}}}
-
-#}}}
-
-#{{{ Plugin options dialog
-plugin-options.title=Options
-options.plugins.label=Plugins
-options.no-plugins.label=No Plugin Options
-#}}}
-
-#{{{ Help viewer
-helpviewer.title=jEdit Help
-helpviewer.loading=Loading...
-helpviewer.back.label=Back
-helpviewer.back.icon=ArrowL.png
-helpviewer.forward.label=Forward
-helpviewer.forward.icon=ArrowR.png
-
-helpviewer.toc.loading=Loading...
-helpviewer.toc.label=Contents
-helpviewer.toc.welcome=Welcome to jEdit
-helpviewer.toc.readme=General Information
-helpviewer.toc.changes=Detailed Change Log
-helpviewer.toc.todo=To Do List and Known Bugs
-helpviewer.toc.copying=GNU General Public License
-helpviewer.toc.copying-doc=GNU Free Documentation License
-helpviewer.toc.copying-apache=Apache License
-helpviewer.toc.copying-plugins=Plugin Licensing Amendment
-helpviewer.toc.plugins=Plugins
-helpviewer.toc.online-apidocs=jEdit API Reference (Online)
-
-helpviewer.search.label=Search
-helpviewer.search.caption=Search for:
-helpviewer.searching=Searching...
-helpviewer.no-results=No results
 #}}}
 
 #{{{ Tip of the day window
-tip.title=Tip of the Day
-tip.caption=Did you know...
-tip.show-next-time=Show tips on startup
-tip.next-tip=Next Tip
-
-tip.not-found=doc/tips directory not found
 # Show on startup?
 tip.show=true
 #}}}
 
-#{{{ Activity log
-log-viewer.title=Activity Log
-log-viewer.caption=Full text of log is stored in {0}.
-log-viewer.copy=Copy
-log-viewer.tail.label=Tail
-#}}}
-
-#{{{ Marker Viewer
-view-markers.label=Vie$w Markers
-view-markers.title=Markers
-#}}}
-
-#{{{ I/O progress monitor
-io-progress-monitor.title=I/O Progress Monitor
-io-progress-monitor.caption={0} pending request(s).
-io-progress-monitor.idle=Thread idle
-io-progress-monitor.abort=Abort
-
-#{{{ I/O abort dialog box
-abort.title=Abort I/O
-abort.message=Are you sure you want to abort the currently executing\n\
-	input/output request? If you are aborting a file save, this may\n\
-	result in data loss.
-#}}}
-
-#}}}
-
-#{{{ Task  monitor
-task-monitor.title=Task Monitor
-#}}}
-
 #{{{ VFS browser
-vfs.browser.title=File Browser
-vfs.browser.longtitle=File System Browser
-vfs.browser.path=Path:
-vfs.browser.path.mnemonic=p
-vfs.browser.filter=Filter:
 vfs.browser.default-filter=*[^~#]
 vfs.browser.filter-enabled=true
-vfs.browser.tree.loading=Loading...
 vfs.browser.file.icon=16x16/mimetypes/text-x-generic.png
+vfs.browser.icon.small=16x16/apps/system-file-manager.png
 vfs.browser.open-file.icon=16x16/actions/edit-select-all.png
 vfs.browser.dir.icon=16x16/places/folder.png
 vfs.browser.open-dir.icon=16x16/status/folder-open.png
@@ -2416,67 +923,27 @@ vfs.browser.filesystem.icon=16x16/devices/drive-harddisk.png
 vfs.browser.loading.icon=16x16/status/image-loading.png
 vfs.browser.expand.icon=16x16/actions/group-expand.png
 vfs.browser.collapse.icon=16x16/actions/group-collapse.png
-
-vfs.browser.name=Name
-vfs.browser.type=Type
-vfs.browser.type.file=File
-vfs.browser.type.directory=Directory
-vfs.browser.type.filesystem=File system
-vfs.browser.status=Status
-vfs.browser.status.no=No access
-vfs.browser.status.ro=Read only
-vfs.browser.status.append=Append only
-vfs.browser.status.rw=Read/write
-vfs.browser.size=Size
-vfs.browser.modified=Last modified
-
-vfs.browser.file_filter.glob=Glob File Filter
-vfs.browser.file_filter.dir_only=Directories Only
+vfs.browser.dock-position=left
 
 #{{{ Actions
-vfs.browser.browse-window.label=Browse in New Window
-vfs.browser.browse.label=Browse
-vfs.browser.close.label=Close
-vfs.browser.copy-path.label=Copy
-vfs.browser.delete.label=Delete...
 vfs.browser.delete.shortcut=DELETE
 vfs.browser.home.icon=22x22/actions/go-home.png
-vfs.browser.home.label=Home Directory
 vfs.browser.home.shortcut=~
-vfs.browser.properties.label=Properties
-vfs.browser.properties.title=File/Directory Properties
-vfs.browser.insert.label=Insert
 vfs.browser.new-directory.icon=22x22/actions/folder-new.png
-vfs.browser.new-directory.label=New Directory...
 vfs.browser.new-directory.shortcut=INSERT
 vfs.browser.new-file.icon=22x22/actions/document-new.png
-vfs.browser.new-file.label=New File
 vfs.browser.new-file.shortcut=C+n
-vfs.browser.open.label=Open
-vfs.browser.open-desktop.label=Open in $Desktop
-vfs.browser.other-encoding-2.label=Other ({0})...
-vfs.browser.other-encoding.label=Other...
 vfs.browser.reload.icon=22x22/actions/view-refresh.png
-vfs.browser.reload.label=Reload Directory
 vfs.browser.reload.shortcut=F5
-vfs.browser.rename.label=Rename...
 vfs.browser.rename.shortcut=F2
 vfs.browser.roots.icon=22x22/devices/drive-harddisk.png
-vfs.browser.roots.label=Root Directory
 vfs.browser.roots.shortcut=/
 vfs.browser.search-directory.icon=22x22/actions/edit-find-in-folder.png
-vfs.browser.search-directory.label=Search in Directory...
-vfs.browser.show-hidden-files.label=Show Hidden Files
 vfs.browser.synchronize.icon=22x22/status/folder-visiting.png
-vfs.browser.synchronize.label=Directory of Current Buffer
 vfs.browser.synchronize.shortcut=-
 vfs.browser.up.icon=22x22/actions/go-parent.png
-vfs.browser.up.label=Parent Directory
 vfs.browser.up.shortcut=A+Up
-vfs.browser.paste.label=Paste
-vfs.browser.previous.label=Previous Directory
 vfs.browser.previous.shortcut=A+Left
-vfs.browser.next.label=Next Directory
 vfs.browser.next.shortcut=A+Right
 vfs.browser.next.icon=22x22/actions/go-next.png
 vfs.browser.previous.icon=22x22/actions/go-previous.png
@@ -2505,258 +972,28 @@ vfs.browser.toolbar-dialog=vfs.browser.previous \
 #}}}
 
 #{{{ Commands menu
-vfs.browser.commands.label=Commands
-vfs.browser.commands.encoding.label=Encoding
-vfs.browser.commands.encoding.auto-detect=Auto-detect
-
-vfs.browser.open-in.label=Open in
 vfs.browser.open-in=vfs.browser.open-view \
 		    vfs.browser.open-plain-view \
 		    vfs.browser.open-split
-vfs.browser.open-view.label=New View
-vfs.browser.open-plain-view.label=New Plain View
-vfs.browser.open-split.label=New Split
-#}}}
-
-#{{{ Plugins menu
-vfs.browser.plugins.label=Plugins
-vfs.browser.plugins.plugin-manager.label=Plugin Manager...
-vfs.browser.plugins.plugin-options.label=Plugin Options...
-vfs.browser.plugins.no-plugins.label=No Plugins
-#}}}
-
-#{{{ Favorites menu
-vfs.browser.favorites.label=Favorites
-vfs.browser.favorites.add-to-favorites.label=Add to Favorites
-vfs.browser.favorites.edit-favorites.label=Edit Favorites
-vfs.browser.favorites.no-favorites.label=No Favorites
-#}}}
-
-vfs.browser.dialog.open=Open
-vfs.browser.dialog.save=Save
-vfs.browser.dialog.choose-dir=Choose
-vfs.browser.dialog.filename=File name:
-vfs.browser.dialog.filename.mnemonic=f
-
-#{{{ Dialogs
-vfs.browser.bad-filter.title=Invalid Filter
-vfs.browser.bad-filter.message=The filter {0} is invalid ({1})
-
-vfs.browser.recurse-favorites.title=Cannot Add Favorites to Itself
-vfs.browser.recurse-favorites.message=The favorites list cannot be added to itself.
-
-vfs.browser.delete-confirm.title=Delete File Confirmation
-vfs.browser.delete-confirm.message=Are you sure you want to delete the following {1}?\n\n\
-	{0}
-
-vfs.browser.delete-favorites.title=Delete From Favorites
-vfs.browser.delete-favorites.message=Are you sure you want to remove the following files \
-	from the favorites?\n\n\
-	{0}
-
-vfs.browser.rename.title=Rename File
-vfs.browser.rename.message=Enter a new name for {0}:
-
-vfs.browser.mkdir.title=New Directory
-vfs.browser.mkdir.message=Name (or path) of new directory:
 #}}}
 
 #}}}
 
-#{{{ I/O status messages
-vfs.status.load=Loading {0}
-vfs.status.load-markers=Loading markers for {0}
-vfs.status.save=Saving {0}
-vfs.status.save-markers=Saving markers for {0}
-vfs.status.autosave=Autosaving {0}
-vfs.status.listing-directory=Listing {0}
-vfs.status.deleting=Deleting {0}
-vfs.status.renaming=Renaming {0} to {1}
-#}}}
-
 #{{{ Plugin manager
-
-plugin-manager.title=Plugin Manager
-
 plugin-manager.export-url=http://plugins.jedit.org/export/gzip_plugin_manager.php
 plugin-manager.mirror-url=http://plugins.jedit.org/export/mirror_list.php
 
-plugin-manager.hide-libraries=Hide libraries
-
-plugin-manager.mgr-options=Download Options...
-plugin-manager.plugin-options=Plugin Options...
-plugin-manager.done=Close
-
-plugin-manager.remove-confirm.title=Remove Plugins
-plugin-manager.remove-confirm.message=Are you sure you want to remove the \
-	following plugins?
-
-plugin-manager.dependency.title=Plugin Dependency
-plugin-manager.dependency.message={0} is required by the following plugins.\n\
-	Deselecting {0} will also deselect the below plugins:
-
-plugin-manager.remove-dependencies.title=Plugin Dependency
-plugin-manager.remove-dependencies.message=The removed plugins are required by the following plugins.\n\
-	Removing them will also deselect the below plugins:
-
-plugin-manager.cleanup.label=Cleanup
-plugin-manager.cleanup.title=Cleanup plugin data
-plugin-manager.cleanup.message=Remove the data of the following plugins:
-
-plugin-manager.noOrphan.label=Find orphan
-plugin-manager.noOrphan.title=No orphan jars found
-plugin-manager.noOrphan.message=There was no orphan jars in your jEdit installation
-
-plugin-manager.findOrphan.label=Find orphan
-plugin-manager.findOrphan.title=Find orphan jars
-plugin-manager.findOrphan.message=The following jars do not belong to any plugin\n\
-	remove them ?\n (be careful, they can be declared dynamically in some \n\
-  plugins like JDBC drivers):
-
-install-plugins.depend.title=Dependency Required
-install-plugins.depend.message=One or more of the plugins you are installing\n\
-	require additional plugins. They will be automatically\n\
-	installed if you continue.
-
-plugin-manager.status.loaded=Loaded
-plugin-manager.status.not-loaded=Not loaded
-plugin-manager.status.error=Error
-
-plugin-manager.list-download-connect=Connecting to plugins.jedit.org
-plugin-manager.list-download=Downloading plugin list from plugins.jedit.org
-plugin-manager.list-download.need-password.title=HTTP Proxy needs password
-plugin-manager.list-download.need-password.message=HTTP Proxy needs password.\n\
-Please configure a valid username/password in "Download Options".
-plugin-manager.list-download.disconnected.title=Error downloading plugin list
-plugin-manager.list-download.disconnected.message=The plugin list can''t be downloaded:\n\
-host {0} is not available. It may be worth checking your internet connection...
-plugin-manager.list-download.generic-error.title=Error downloading plugin list
-plugin-manager.list-download.generic-error.message=Error downloading plugin list:\n\
-error is {0} - {1}
-plugin-manager.filterField=Show only plugins whose name contains this text
-
 #{{{ Plugin management
-manage-plugins.title=Manage
-
-manage-plugins.info.name=Name
-manage-plugins.info.version=Version
-manage-plugins.info.status=Status
-manage-plugins.info.data=Data
-
-manage-plugins.data-size.unknown=<unknown>
-
-manage-plugins.remove=Remove...
-manage-plugins.help=Help...
 manage-plugins.restore.icon=22x22/actions/document-open.png
 manage-plugins.save.icon=22x22/actions/document-save.png
 #}}}
 
 #{{{ Plugin installation
-install-plugins.title=Install
-
-install-plugins.info.name=Name
-install-plugins.info.size=Size
-install-plugins.info.releaseDate=Release date
-install-plugins.info.version=Version
-install-plugins.info.category=Category
-
-install-plugins.totalSize={0} plugin(s), total size: {1}
-install-plugins.select-all=Select All
-install-plugins.install=Install
-install-plugins.show-updates=Show Updates
 install-plugins.choose-plugin-set.icon=22x22/actions/document-open.png
 install-plugins.clear-plugin-set.icon=22x22/actions/edit-clear.png
-
-install-plugins.info=Author: {0}\n\
-	Released: {1}\n\
-	{2}
-
-update-plugins.title=Update
-
-plugin-manager.progress=Downloading {0} from mirror {1}
-plugin-manager.progress.title=Installing plugin(s)
-plugin-manager.progress.stop=Stop
-#}}}
-
-#{{{ Plugin remove error
-plugin-manager.remove-failed.title=Remove Failed
-plugin-manager.remove-failed.message=The plugin {0}\n\
-	could not be removed.
-#}}}
-
-#}}}
-
-#{{{ File Properties Dialog
-fileprop.name=Name
-fileprop.path=Path
-fileprop.lastmod=Last Modified
-fileprop.size=Size
-fileprop.properties=Properties
-fileprop.readable=Readable
-fileprop.writeable=Writeable
-fileprop.attribute=Attribute
-fileprop.okBtn=OK
-fileprop.cancelBtn=Cancel
-fileprop.selectedFiles=Selected files
-fileprop.selectedDirectories=Selected directories
 #}}}
 
-#{{{ Activity log viewer
-log-viewer.dialog.title=Activity Log Settings
-log-viewer.settings.label=Settings
-log-viewer.message.label=Message Display:
-log-viewer.message.debug.label=Debug
-log-viewer.message.message.label=Message
-log-viewer.message.notice.label=Notice
-log-viewer.message.warning.label=Warning
-log-viewer.message.error.label=Error
 #}}}
 
 errorwidget.popupmenu=logs-remove-all-errors
-logs-remove-all-errors.label=Remove all errors
-
-taskmanager.remainingtasks.label={0} remaining task(s)
-
-#{{{ Statusbar Widgets
-# the widgets should have a label and a sample.
-# the label is displayed when choosing the list of widgets
-# the sample is an example of what the widget will show, for the
-# preview in the options
-statusbar.mode.label=Buffer edit mode (ex:java)
-statusbar.mode.sample=java
-statusbar.fold.label=Buffer fold handler (ex:explicit)
-statusbar.fold.sample=explicit
-statusbar.encoding.label=Buffer encoding (ex:UTF-8)
-statusbar.encoding.sample=UTF-8
-statusbar.wrap.label=Buffer wrapping mode (ex:N)
-statusbar.wrap.sample=N
-statusbar.multiSelect.label=Buffer multiple selection mode (ex:m)
-statusbar.multiSelect.sample=m
-statusbar.rectSelect.label=Buffer rectangular selection mode (ex:r)
-statusbar.rectSelect.sample=r
-statusbar.overwrite.label=Buffer overwrite (ex:o)
-statusbar.overwrite.sample=o
-statusbar.lineSep.label=Buffer line separator (ex:U)
-statusbar.lineSep.sample=U
-statusbar.memory-status.label=Memory status (ex:9/24Mb)
-statusbar.memory-status.sample=9/24Mb
-statusbar.clock.label=Clock (ex:16:45)
-statusbar.clock.sample=16:45
-statusbar.buffersets.label=Bufferset scope (ex:G)
-statusbar.buffersets.sample=G
-statusbar.selection-length.label=Selection's length (ex:192)
-statusbar.selection-length.sample=192
-statusbar.last-modified.label=Date of last modification on disk (ex:12/03/11 16:43)
-statusbar.last-modified.sample=12/03/11 16:43
-statusbar.task-monitor.label=Task monitor (ex: 7 task(s))
-statusbar.task-monitor.tooltip=Click to see running tasks dockable
-statusbar.task-monitor.sample=7 task(s)
-statusbar.task-monitor.template={0} task(s)
-#}}}
-
-killring.load-memoryerror.message=<html>Unable to load previously deleted text. Please increase your memory heap space.<br>\
-  Press <b>start</b> to start jEdit anyway, or <br><b>stop</b> to stop and change your settings. <br>You can also <b>delete the history file</b> and start jEdit</html>
-killring.load-memoryerror.title=Memory error
-killring.start=start
-killring.stop=stop
-killring.delete=delete killring and start
+
diff --git a/org/gjt/sp/jedit/jedit_keys.props b/org/gjt/sp/jedit/jedit_keys.props
deleted file mode 100644
index 96bc9ab..0000000
--- a/org/gjt/sp/jedit/jedit_keys.props
+++ /dev/null
@@ -1,235 +0,0 @@
-###
-### jEdit keyboard shortcuts
-### :tabSize=8:indentSize=8:noTabs=false:
-### :folding=explicit:collapseFolds=1:
-### :encoding=ISO-8859-1:
-###
-### Copyright (C) 1998, 2003 Slava Pestov
-###
-
-#{{{ Function keys
-help.shortcut=F1
-show-context-menu.shortcut=CONTEXT_MENU
-#}}}
-
-#{{{ C+X
-select-all.shortcut=C+a
-complete-word.shortcut=C+b
-copy.shortcut=C+c
-delete-line.shortcut=C+d
-# C+e is a prefix
-find.shortcut=C+f
-find-next.shortcut=F3
-# C+h is not usable on MacOS X
-indent-lines.shortcut=C+i
-join-lines.shortcut=C+j
-swap-marker.shortcut=C+k
-goto-line.shortcut=C+g
-# C+m is a prefix
-new-file.shortcut=C+n
-new-file-in-mode.shortcut=CS+n
-open-file.shortcut=C+o
-reload.shortcut=F5
-print.shortcut=C+p
-exit.shortcut=C+q
-# C+r is a prefix
-save.shortcut=C+s
-add-marker-shortcut.shortcut=C+t
-select-marker.shortcut=C+u
-paste.shortcut=C+v
-close-buffer.shortcut=C+w
-cut.shortcut=C+x
-goto-marker.shortcut=C+y
-undo.shortcut=C+z
-unsplit-current.shortcut=C+0
-unsplit.shortcut=C+1
-split-horizontal.shortcut=C+2
-split-vertical.shortcut=C+3
-resplit.shortcut=C+4
-#}}}
-
-#{{{ C+non-alpha
-delete-start-line.shortcut=CS+BACK_SPACE
-delete-end-line.shortcut=CS+DELETE
-prev-paragraph.shortcut=C+UP
-next-paragraph.shortcut=C+DOWN
-select-prev-paragraph.shortcut=CS+UP
-select-next-paragraph.shortcut=CS+DOWN
-backspace-word.shortcut=C+BACK_SPACE
-delete-word.shortcut=C+DELETE
-document-home.shortcut=C+HOME
-document-end.shortcut=C+END
-select-document-home.shortcut=CS+HOME
-select-document-end.shortcut=CS+END
-prev-word.shortcut=C+LEFT
-select-prev-word.shortcut=CS+LEFT
-next-word.shortcut=C+RIGHT
-select-next-word.shortcut=CS+RIGHT
-action-bar.shortcut=C+ENTER
-prev-buffer.shortcut=C+PAGE_UP
-next-buffer.shortcut=C+PAGE_DOWN
-last-action.shortcut=C+SPACE
-
-recent-buffer.shortcut=C+BACK_QUOTE
-select-block.shortcut=C+OPEN_BRACKET
-match-bracket.shortcut=C+CLOSE_BRACKET
-expand-abbrev.shortcut=C+SEMICOLON
-quick-search.shortcut=C+COMMA
-hypersearch.shortcut=C+PERIOD
-scroll-up-line.shortcut=C+QUOTE
-scroll-down-line.shortcut=C+SLASH
-toggle-multi-select.shortcut=C+BACK_SLASH
-#}}}
-
-#{{{ C+e C+X
-# Unused: f, h, q, y
-copy-append.shortcut=C+e C+a
-search-in-open-buffers.shortcut=C+e C+b
-range-comment.shortcut=C+e C+c
-search-in-directory.shortcut=C+e C+d
-replace-and-find-next.shortcut=C+e C+g
-ignore-case.shortcut=C+e C+i
-scroll-to-current-line.shortcut=C+e C+j
-line-comment.shortcut=C+e C+k
-select-line-range.shortcut=C+e C+l
-add-marker.shortcut=C+e C+m
-center-caret.shortcut=C+e C+n
-scroll-and-center=C+l
-open-path.shortcut=C+e C+o
-vertical-paste.shortcut=C+e C+p
-replace-in-selection.shortcut=C+e C+r
-save-all.shortcut=C+e C+s
-toggle-line-numbers.shortcut=C+e C+t
-cut-append.shortcut=C+e C+u
-paste-previous.shortcut=C+e C+v
-close-all.shortcut=C+e C+w
-regexp.shortcut=C+e C+x
-paste-deleted.shortcut=C+e C+y
-redo.shortcut=C+e C+z
-#}}}
-
-#{{{ C+e C+non-alpha
-left-docking-area.shortcut=C+e C+LEFT
-top-docking-area.shortcut=C+e C+UP
-right-docking-area.shortcut=C+e C+RIGHT
-bottom-docking-area.shortcut=C+e C+DOWN
-toggle-full-screen.shortcut=F11
-toggle-dock-areas.shortcut=F12
-global-options.shortcut=C+F12
-
-prev-marker.shortcut=C+e C+COMMA
-next-marker.shortcut=C+e C+PERIOD
-prev-bracket.shortcut=C+e C+OPEN_BRACKET
-next-bracket.shortcut=C+e C+CLOSE_BRACKET
-close-docking-area.shortcut=C+e C+BACK_QUOTE
-#}}}
-
-#{{{ C+e X
-# Unused: b e g h j k m o q t y z
-add-explicit-fold.shortcut=C+e a
-collapse-all-folds.shortcut=C+e c
-delete-paragraph.shortcut=C+e d
-format-paragraph.shortcut=C+e f
-find-previous.shortcut=C+e g
-invert-selection.shortcut=C+e i
-select-line.shortcut=C+e l
-narrow-to-fold.shortcut=C+e n n
-narrow-to-selection.shortcut=C+e n s
-select-paragraph.shortcut=C+e p
-remove-trailing-ws.shortcut=C+e r
-select-fold.shortcut=C+e s
-insert-literal.shortcut=C+e v
-select-word.shortcut=C+e w
-parent-fold.shortcut=C+e u
-expand-all-folds.shortcut=C+e x
-#}}}
-
-#{{{ C+e non-alpha
-expand-folds.shortcut=C+e ENTER
-#}}}
-
-#{{{ C+m C+X
-record-temp-macro.shortcut=C+m C+m
-run-temp-macro.shortcut=C+m C+p
-record-macro.shortcut=C+m C+r
-stop-recording.shortcut=C+m C+s
-last-macro.shortuct=C+m C+l
-#}}}
-
-#{{{ C+r C+X
-copy-append-string-register.shortcut=C+r C+a
-copy-string-register.shortcut=C+r C+c
-clear-register.shortcut=C+r C+l
-vertical-paste-string-register.shortcut=C+r C+p
-cut-append-string-register.shortcut=C+r C+u
-paste-string-register.shortcut=C+r C+v
-cut-string-register.shortcut=C+r C+x
-#}}}
-
-#{{{ A+non-alpha
-prev-fold.shortcut=A+UP
-next-fold.shortcut=A+DOWN
-shift-left.shortcut=A+LEFT
-shift-right.shortcut=A+RIGHT
-collapse-fold.shortcut=A+BACK_SPACE
-expand-fold.shortcut=AS+ENTER
-expand-one-level.shortcut=A+ENTER
-quick-search-word.shortcut=A+COMMA
-hypersearch-word.shortcut=A+PERIOD
-scroll-up-page.shortcut=A+QUOTE
-scroll-down-page.shortcut=A+SLASH
-prev-textarea.shortcut=A+PAGE_UP
-next-textarea.shortcut=A+PAGE_DOWN
-
-focus-buffer-switcher.shortcut=A+BACK_QUOTE
-toggle-rect-select.shortcut=A+BACK_SLASH
-#}}}
-
-#{{{ Other keys
-shift-left.shortcut2=S+TAB
-select-none.shortcut=ESCAPE
-backspace.shortcut=BACK_SPACE
-delete.shortcut=DELETE
-overwrite.shortcut=INSERT
-home.shortcut=HOME
-end.shortcut=END
-select-home.shortcut=S+HOME
-select-end.shortcut=S+END
-prev-page.shortcut=PAGE_UP
-next-page.shortcut=PAGE_DOWN
-select-prev-page.shortcut=S+PAGE_UP
-select-next-page.shortcut=S+PAGE_DOWN
-prev-char.shortcut=LEFT
-select-prev-char.shortcut=S+LEFT
-next-char.shortcut=RIGHT
-select-next-char.shortcut=S+RIGHT
-prev-line.shortcut=UP
-select-prev-line.shortcut=S+UP
-next-line.shortcut=DOWN
-select-next-line.shortcut=S+DOWN
-insert-newline-indent.shortcut=ENTER
-insert-tab-indent.shortcut=TAB
-#}}}
-
-#{{{ Alternative shortcuts for frequently-used commands
-next-page.shortcut2=A+a
-select-next-page.shortcut2=AS+a
-delete.shortcut2=A+d
-prev-line.shortcut2=A+i
-select-prev-line.shortcut2=AS+i
-prev-char.shortcut2=A+j
-select-prev-char.shortcut2=AS+j
-next-line.shortcut2=A+k
-select-next-line.shortcut2=AS+k
-next-char.shortcut2=A+l
-select-next-char.shortcut2=AS+l
-prev-page.shortcut2=A+q
-select-prev-page.shortcut2=AS+q
-end.shortcut2=A+x
-select-end.shortcut2=AS+x
-home.shortcut2=A+z
-select-home.shortcut2=AS+z
-copy.shortcut2=C+INSERT
-paste.shortcut2=S+INSERT
-cut.shortcut2=S+DELETE
-#}}}
diff --git a/org/gjt/sp/jedit/menu/EnhancedCheckBoxMenuItem.java b/org/gjt/sp/jedit/menu/EnhancedCheckBoxMenuItem.java
index 8ef8974..83b338a 100644
--- a/org/gjt/sp/jedit/menu/EnhancedCheckBoxMenuItem.java
+++ b/org/gjt/sp/jedit/menu/EnhancedCheckBoxMenuItem.java
@@ -28,6 +28,8 @@ import java.awt.event.*;
 import java.awt.*;
 import org.gjt.sp.jedit.*;
 import org.gjt.sp.util.Log;
+import org.gjt.sp.jedit.gui.KeyEventTranslator;
+import org.jedit.keymap.Keymap;
 //}}}
 
 /**
@@ -55,9 +57,23 @@ public class EnhancedCheckBoxMenuItem extends JCheckBoxMenuItem
 			setToolTipText(toolTip);
 		}
 		
-		if(OperatingSystem.hasScreenMenuBar() && shortcut != null)
+		if (OperatingSystem.hasScreenMenuBar() && shortcut != null)
 		{
-			setText(label + " ( " + shortcut + " )");
+			if (jEdit.getBooleanProperty("menu.multiShortcut", false))
+			{
+				setText(label + " ( " + shortcut + " )");
+			}
+			else
+			{
+				setText(label);
+				
+				Keymap keymap = jEdit.getKeymapManager().getKeymap();
+				String rawShortcut = keymap.getShortcut(action + ".shortcut");
+				
+				KeyStroke key = KeyEventTranslator.parseKeyStroke(rawShortcut);
+				if (key != null)
+					setAccelerator(key);
+			}
 			shortcut = null;
 		}
 		else
diff --git a/org/gjt/sp/jedit/menu/EnhancedMenuItem.java b/org/gjt/sp/jedit/menu/EnhancedMenuItem.java
index 171af3a..d861770 100644
--- a/org/gjt/sp/jedit/menu/EnhancedMenuItem.java
+++ b/org/gjt/sp/jedit/menu/EnhancedMenuItem.java
@@ -27,7 +27,9 @@ import javax.swing.*;
 import java.awt.event.*;
 import java.awt.*;
 import org.gjt.sp.jedit.*;
+import org.gjt.sp.jedit.gui.KeyEventTranslator;
 import org.gjt.sp.jedit.gui.StatusBar;
+import org.jedit.keymap.Keymap;
 //}}}
 
 /**
@@ -53,9 +55,23 @@ public class EnhancedMenuItem extends JMenuItem
 			setToolTipText(toolTip);
 		}
 
-		if(OperatingSystem.hasScreenMenuBar() && shortcut != null)
+		if (OperatingSystem.hasScreenMenuBar() && shortcut != null)
 		{
-			setText(label + " ( " + shortcut + " )");
+			if (jEdit.getBooleanProperty("menu.multiShortcut", false))
+			{
+				setText(label + " ( " + shortcut + " )");
+			}
+			else
+			{
+				setText(label);
+				
+				Keymap keymap = jEdit.getKeymapManager().getKeymap();
+				String rawShortcut = keymap.getShortcut(action + ".shortcut");
+				
+				KeyStroke key = KeyEventTranslator.parseKeyStroke(rawShortcut);
+				if (key != null)
+					setAccelerator(key);
+			}
 			shortcut = null;
 		}
 		else
diff --git a/org/gjt/sp/jedit/menu/MacrosProvider.java b/org/gjt/sp/jedit/menu/MacrosProvider.java
index 3ec0f38..ac00768 100644
--- a/org/gjt/sp/jedit/menu/MacrosProvider.java
+++ b/org/gjt/sp/jedit/menu/MacrosProvider.java
@@ -64,10 +64,10 @@ public class MacrosProvider implements DynamicMenuProvider
 		JMenu subMenu = null;
 		for(int i = start; i < vector.size(); i++)
 		{
-			if (i != 0 && i % maxItems == 0)
+			if (i != start && i % maxItems == 0)
 			{
 				subMenu = new JMenu(jEdit.getProperty("common.more"));
-				createMacrosMenu(subMenu, vector, i+1);
+				createMacrosMenu(subMenu, vector, i);
 				break;
 			}
 			Object obj = vector.elementAt(i);
@@ -81,7 +81,7 @@ public class MacrosProvider implements DynamicMenuProvider
 			{
 				Vector subvector = (Vector)obj;
 				String name = (String)subvector.elementAt(0);
-				JMenu submenu = new JMenu(name);
+				JMenu submenu = new JMenu(jEdit.getProperty("macros.folder."+ name + ".label", name));
 				createMacrosMenu(submenu,subvector,1);
 				if(submenu.getMenuComponentCount() != 0)
 					menuItems.add(submenu);
diff --git a/org/gjt/sp/jedit/menu/ReloadWithEncodingProvider.java b/org/gjt/sp/jedit/menu/ReloadWithEncodingProvider.java
index b650ed7..348a812 100644
--- a/org/gjt/sp/jedit/menu/ReloadWithEncodingProvider.java
+++ b/org/gjt/sp/jedit/menu/ReloadWithEncodingProvider.java
@@ -35,6 +35,7 @@ import javax.swing.JOptionPane;
 
 import org.gjt.sp.jedit.Buffer;
 import org.gjt.sp.jedit.GUIUtilities;
+import org.gjt.sp.jedit.buffer.JEditBuffer;
 import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.jedit.MiscUtilities;
 import org.gjt.sp.jedit.View;
@@ -45,19 +46,21 @@ import org.gjt.sp.jedit.io.EncodingServer;
  * Menu provider for actions to reload the current buffer with a
  * specific encoding.
  *
- * @version $Id: ReloadWithEncodingProvider.java 16805 2010-01-01 19:33:37Z daleanson $
+ * @version $Id: ReloadWithEncodingProvider.java 20367 2011-11-17 22:29:08Z kpouer $
  */
 public class ReloadWithEncodingProvider implements ActionListener, DynamicMenuProvider
 {	
 	private View view;
 
 	//{{{ updateEveryTime() method
+	@Override
 	public boolean updateEveryTime()
 	{
 		return false;
 	} //}}}
 
 	//{{{ update() method
+	@Override
 	public void update(JMenu menu)
 	{
 		view = GUIUtilities.getView(menu);
@@ -89,7 +92,7 @@ public class ReloadWithEncodingProvider implements ActionListener, DynamicMenuPr
 			JMenuItem mi = new JMenuItem(encodings[i]);
 			mi.setActionCommand("encoding@" + encodings[i]);
 			mi.addActionListener(this);
-			if ((menu.getMenuComponentCount() >= maxItems) && (i < encodings.length))
+			if (menu.getMenuComponentCount() >= maxItems && i < encodings.length)
 			{
 				JMenu newMenu = new JMenu(jEdit.getProperty("common.more"));
 				menu.add(newMenu);
@@ -109,6 +112,7 @@ public class ReloadWithEncodingProvider implements ActionListener, DynamicMenuPr
 	} //}}}
 
 	//{{{ actionPerformed() method
+	@Override
 	public void actionPerformed(ActionEvent ae)
 	{
 		JMenuItem mi = (JMenuItem) ae.getSource();
@@ -120,7 +124,7 @@ public class ReloadWithEncodingProvider implements ActionListener, DynamicMenuPr
 		{
 			encoding = action.substring(9);
 		}
-		else if (action.equals("other-encoding"))
+		else if ("other-encoding".equals(action))
 		{
 			encoding = JOptionPane.showInputDialog(view,
 				jEdit.getProperty("encoding-prompt.message"),
@@ -144,11 +148,11 @@ public class ReloadWithEncodingProvider implements ActionListener, DynamicMenuPr
 		if (encoding != null)
 		{
 			props = new Hashtable();
-			props.put(Buffer.ENCODING, encoding);
+			props.put(JEditBuffer.ENCODING, encoding);
 			// Disable auto-detect because user explicitly
 			// specify an encoding.
 			props.put(Buffer.ENCODING_AUTODETECT, false);
-			view.getBuffer().setStringProperty(Buffer.ENCODING, encoding);
+			view.getBuffer().setStringProperty(JEditBuffer.ENCODING, encoding);
 		}
 
 		String path = view.getBuffer().getPath();
diff --git a/org/gjt/sp/jedit/options/AbbrevsOptionPane.java b/org/gjt/sp/jedit/options/AbbrevsOptionPane.java
index fa07d5e..f2fc00d 100644
--- a/org/gjt/sp/jedit/options/AbbrevsOptionPane.java
+++ b/org/gjt/sp/jedit/options/AbbrevsOptionPane.java
@@ -41,7 +41,7 @@ import org.gjt.sp.util.StandardUtilities;
 /**
  * Abbrev editor.
  * @author Slava Pestov
- * @version $Id: AbbrevsOptionPane.java 14126 2008-12-01 10:09:52Z kpouer $
+ * @version $Id: AbbrevsOptionPane.java 20328 2011-11-13 05:59:59Z ezust $
  */
 public class AbbrevsOptionPane extends AbstractOptionPane
 {
diff --git a/org/gjt/sp/jedit/options/AppearanceOptionPane.java b/org/gjt/sp/jedit/options/AppearanceOptionPane.java
index a8fec80..49a1e2e 100644
--- a/org/gjt/sp/jedit/options/AppearanceOptionPane.java
+++ b/org/gjt/sp/jedit/options/AppearanceOptionPane.java
@@ -24,12 +24,18 @@ package org.gjt.sp.jedit.options;
 
 //{{{ Imports
 import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
+import java.awt.Component;
 import java.awt.Font;
 import java.awt.event.*;
 import java.io.*;
+import java.util.Locale;
+
 import org.gjt.sp.jedit.gui.FontSelector;
 import org.gjt.sp.jedit.gui.NumericTextField;
+
 import org.gjt.sp.jedit.*;
 import org.gjt.sp.util.Log;
 import org.gjt.sp.util.IOUtilities;
@@ -42,7 +48,7 @@ public class AppearanceOptionPane extends AbstractOptionPane
 	 * Possible values of the jedit property 'icon-theme'
 	 */
 	public static final String[] builtInIconThemes = {"tango", "old"};
-	
+
 	//{{{ AppearanceOptionPane constructor
 	public AppearanceOptionPane()
 	{
@@ -78,10 +84,10 @@ public class AppearanceOptionPane extends AbstractOptionPane
 			}
 		});
 
-		
+
 		addComponent(jEdit.getProperty("options.appearance.lf"),
 			lookAndFeel);
-		addDockingFrameworkChooser();
+
 
 		/* Icon Theme */
 		String[] themes = IconTheme.builtInNames();
@@ -96,7 +102,7 @@ public class AppearanceOptionPane extends AbstractOptionPane
 				break;
 			}
 		}
-		
+
 		/* Primary Metal L&F font */
 		Font pf = jEdit.getFontProperty("metal.primary.font");
 		primaryFont = new FontSelector(pf);
@@ -108,13 +114,13 @@ public class AppearanceOptionPane extends AbstractOptionPane
 			"metal.secondary.font"));
 		addComponent(jEdit.getProperty("options.appearance.secondaryFont"),
 			secondaryFont);
-		
+
 		/* HelpViewer font */
 		helpViewerFont = new FontSelector(jEdit.getFontProperty(
 			"helpviewer.font", pf));
 		addComponent(jEdit.getProperty("options.appearance.helpViewerFont"),
 			helpViewerFont);
-		
+
 		/*
 		antiAliasExtras = new JComboBox(AntiAlias.comboChoices);
 		antiAliasExtras.setSelectedIndex(AntiAlias.appearance().val());
@@ -131,11 +137,6 @@ public class AppearanceOptionPane extends AbstractOptionPane
 		menuSpillover = new NumericTextField(jEdit.getProperty("menu.spillover"), true);
 		addComponent(jEdit.getProperty("options.appearance.menuSpillover"),menuSpillover);
 
-		continuousLayout = new JCheckBox(jEdit.getProperty(
-			"options.appearance.continuousLayout.label"));
-		continuousLayout.setSelected(jEdit.getBooleanProperty("appearance.continuousLayout"));
-		addComponent(continuousLayout);
-
 		systemTrayIcon = new JCheckBox(jEdit.getProperty(
 					"options.general.systrayicon", "Show the systray icon"));
 		systemTrayIcon.setSelected(jEdit.getBooleanProperty("systrayicon", true));
@@ -194,12 +195,9 @@ public class AppearanceOptionPane extends AbstractOptionPane
 		jEdit.setProperty("history",history.getText());
 		jEdit.setProperty("menu.spillover",menuSpillover.getText());
 		jEdit.setBooleanProperty("tip.show",showTips.isSelected());
-		jEdit.setBooleanProperty("appearance.continuousLayout",continuousLayout.isSelected());
 		jEdit.setBooleanProperty("systrayicon", systemTrayIcon.isSelected());
 		IconTheme.set(iconThemes.getSelectedItem().toString());
 
-		jEdit.setProperty(View.VIEW_DOCKING_FRAMEWORK_PROPERTY,
-			(String) dockingFramework.getSelectedItem());
 
 		/* AntiAlias nv = AntiAlias.appearance();
 		 int idx = antiAliasExtras.getSelectedIndex();
@@ -209,34 +207,11 @@ public class AppearanceOptionPane extends AbstractOptionPane
 		primaryFont.repaint();
 		secondaryFont.repaint(); */
 
-		// this is handled a little differently from other jEdit settings
-		// as the splash screen flag needs to be known very early in the
+		// This is handled a little differently from other jEdit settings
+		// as this flag needs to be known very early in the
 		// startup sequence, before the user properties have been loaded
-		String settingsDirectory = jEdit.getSettingsDirectory();
-		if(settingsDirectory != null)
-		{
-			File file = new File(settingsDirectory,"nosplash");
-			if(showSplash.isSelected())
-				file.delete();
-			else
-			{
-				FileOutputStream out = null;
-				try
-				{
-					out = new FileOutputStream(file);
-					out.write('\n');
-					out.close();
-				}
-				catch(IOException io)
-				{
-					Log.log(Log.ERROR,this,io);
-				}
-				finally
-				{
-					IOUtilities.closeQuietly(out);
-				}
-			}
-		}
+		setFileFlag("nosplash", !showSplash.isSelected());
+
 		jEdit.setBooleanProperty("textColors",textColors.isSelected());
 		jEdit.setBooleanProperty("decorate.frames",decorateFrames.isSelected());
 		jEdit.setBooleanProperty("decorate.dialogs",decorateDialogs.isSelected());
@@ -251,11 +226,10 @@ public class AppearanceOptionPane extends AbstractOptionPane
 	private FontSelector primaryFont;
 	private FontSelector secondaryFont;
 	private FontSelector helpViewerFont;
-	private JComboBox dockingFramework;
+
 	private JTextField history;
 	private JTextField menuSpillover;
 	private JCheckBox showTips;
-	private JCheckBox continuousLayout;
 	private JCheckBox showSplash;
 	private JCheckBox textColors;
 	private JCheckBox decorateFrames;
@@ -263,6 +237,7 @@ public class AppearanceOptionPane extends AbstractOptionPane
 	private JComboBox antiAliasExtras;
 	private JComboBox iconThemes;
 	private JCheckBox systemTrayIcon;
+	private JCheckBox useQuartz;
 	//}}}
 
 	//{{{ updateEnabled() method
@@ -283,22 +258,38 @@ public class AppearanceOptionPane extends AbstractOptionPane
 			secondaryFont.setEnabled(false);
 		}
 	} //}}}
-	private void addDockingFrameworkChooser()
-	{	
-		String [] frameworks =
-			ServiceManager.getServiceNames(View.DOCKING_FRAMEWORK_PROVIDER_SERVICE);
-		dockingFramework = new JComboBox(frameworks);
-		String framework = View.getDockingFrameworkName();
-		for (int i = 0; i < frameworks.length; i++)
+
+	//}}}
+
+	//{{{ setFileFlag() method
+	private void setFileFlag(String fileName, boolean present)
+	{
+		String settingsDirectory = jEdit.getSettingsDirectory();
+		if(settingsDirectory != null)
 		{
-			if (frameworks[i].equals(framework))
+			File file = new File(settingsDirectory, fileName);
+			if (!present)
 			{
-				dockingFramework.setSelectedIndex(i);
-				break;
+				file.delete();
+			}
+			else
+			{
+				FileOutputStream out = null;
+				try
+				{
+					out = new FileOutputStream(file);
+					out.write('\n');
+					out.close();
+				}
+				catch(IOException io)
+				{
+					Log.log(Log.ERROR,this,io);
+				}
+				finally
+				{
+					IOUtilities.closeQuietly(out);
+				}
 			}
 		}
-		addComponent(new JLabel(jEdit.getProperty("options.appearance.selectFramework.label")), dockingFramework);
-	}
-
-	//}}}
+	} //}}}
 }
diff --git a/org/gjt/sp/jedit/options/BrowserOptionPane.java b/org/gjt/sp/jedit/options/BrowserOptionPane.java
index f70dafc..9e1e2e7 100644
--- a/org/gjt/sp/jedit/options/BrowserOptionPane.java
+++ b/org/gjt/sp/jedit/options/BrowserOptionPane.java
@@ -25,12 +25,14 @@ package org.gjt.sp.jedit.options;
 //{{{ Imports
 import javax.swing.*;
 import org.gjt.sp.jedit.*;
+
+
 //}}}
 
 //{{{ BrowserOptionPane class
 /**
  * @author Slava Pestov
- * @version $Id: BrowserOptionPane.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: BrowserOptionPane.java 20328 2011-11-13 05:59:59Z ezust $
  */
 public class BrowserOptionPane extends AbstractOptionPane
 {
diff --git a/org/gjt/sp/jedit/options/BufferOptionPane.java b/org/gjt/sp/jedit/options/BufferOptionPane.java
index e9122f1..8d498ec 100644
--- a/org/gjt/sp/jedit/options/BufferOptionPane.java
+++ b/org/gjt/sp/jedit/options/BufferOptionPane.java
@@ -57,6 +57,7 @@ public class BufferOptionPane extends AbstractOptionPane
 	private JCheckBox noTabs;
 	private Buffer buffer;
 	private JCheckBox elasticTabstops;
+	private JComboBox autoIndent;
 
 	public BufferOptionPane()
 	{
@@ -162,6 +163,13 @@ public class BufferOptionPane extends AbstractOptionPane
 			folding);
 		//}}}
 
+		//{{{ Automatic indentation
+		String[] indentModes = {"none", "simple", "full"};
+		autoIndent = new JComboBox(indentModes);
+		autoIndent.setSelectedItem(buffer.getStringProperty("autoIndent"));
+		addComponent(jEdit.getProperty("options.editing.autoIndent"), autoIndent);
+		//}}}
+
 		//{{{ Wrap mode
 		String[] wrapModes = {
 			"none",
@@ -207,7 +215,7 @@ public class BufferOptionPane extends AbstractOptionPane
 		noTabs.setSelected(buffer.getBooleanProperty("noTabs"));
 		addComponent(noTabs);
 		//}}}
-		
+
 		//{{{ Elastic tabstops
 		elasticTabstops = new JCheckBox(jEdit.getProperty(
 			"options.editing.elasticTabstops"));
@@ -294,6 +302,7 @@ public class BufferOptionPane extends AbstractOptionPane
 
 		buffer.setBooleanProperty("noTabs",noTabs.isSelected());
 		buffer.setBooleanProperty("elasticTabstops",elasticTabstops.isSelected());
+		buffer.setStringProperty("autoIndent", (String)autoIndent.getSelectedItem());
 
 		index = mode.getSelectedIndex();
 		buffer.setMode(modes[index]);
diff --git a/org/gjt/sp/jedit/options/DockingOptionPane.java b/org/gjt/sp/jedit/options/DockingOptionPane.java
index bba1e65..fce9974 100644
--- a/org/gjt/sp/jedit/options/DockingOptionPane.java
+++ b/org/gjt/sp/jedit/options/DockingOptionPane.java
@@ -26,6 +26,7 @@ package org.gjt.sp.jedit.options;
 import java.awt.BorderLayout;
 import java.awt.Component;
 import java.awt.Dimension;
+import java.awt.FlowLayout;
 import java.awt.GridLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
@@ -50,6 +51,8 @@ import javax.swing.table.TableCellRenderer;
 import javax.swing.table.TableColumn;
 
 import org.gjt.sp.jedit.AbstractOptionPane;
+import org.gjt.sp.jedit.ServiceManager;
+import org.gjt.sp.jedit.View;
 import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.jedit.gui.DockableWindowManager;
 import org.gjt.sp.util.StandardUtilities;
@@ -69,8 +72,11 @@ public class DockingOptionPane extends AbstractOptionPane
 	public void _init()
 	{
 		setLayout(new BorderLayout());
+
 		add(BorderLayout.NORTH,createDockingOptionsPanel());
 		add(BorderLayout.CENTER,createWindowTableScroller());
+		add(BorderLayout.SOUTH, createDockingFrameworkChooser());
+
 		dockableSetSelection.setModel(
 			new DefaultComboBoxModel(windowModel.getDockableSets()));
 	} //}}}
@@ -80,12 +86,15 @@ public class DockingOptionPane extends AbstractOptionPane
 	{
 		jEdit.setBooleanProperty(AUTO_LOAD_MODE_LAYOUT_PROP, autoLoadModeLayout.isSelected());
 		jEdit.setBooleanProperty(AUTO_SAVE_MODE_LAYOUT_PROP, autoSaveModeLayout.isSelected());
+		jEdit.setProperty(View.VIEW_DOCKING_FRAMEWORK_PROPERTY,
+			(String) dockingFramework.getSelectedItem());
 		windowModel.save();
 	} //}}}
 
 	//{{{ Private members
 
 	//{{{ Instance variables
+	private JComboBox dockingFramework;
 	private JTable windowTable;
 	private WindowTableModel windowModel;
 	private JCheckBox autoLoadModeLayout;
@@ -98,7 +107,34 @@ public class DockingOptionPane extends AbstractOptionPane
 	private static final String AUTO_LOAD_MODE_LAYOUT_LABEL = AUTO_LOAD_MODE_LAYOUT_PROP + ".label";
 	public static final String AUTO_SAVE_MODE_LAYOUT_PROP = DOCKING_OPTIONS_PREFIX + "autoSaveModeLayout";
 	private static final String AUTO_SAVE_MODE_LAYOUT_LABEL = AUTO_SAVE_MODE_LAYOUT_PROP + ".label";
-	
+
+	private JPanel createDockingFrameworkChooser()
+	{
+		String [] frameworks =
+			ServiceManager.getServiceNames(View.DOCKING_FRAMEWORK_PROVIDER_SERVICE);
+		dockingFramework = new JComboBox(frameworks);
+
+		String framework = View.getDockingFrameworkName();
+		for (int i = 0; i < frameworks.length; i++)
+		{
+			if (frameworks[i].equals(framework))
+			{
+				dockingFramework.setSelectedIndex(i);
+				break;
+			}
+		}
+		dockingFramework.setToolTipText(jEdit.getProperty("options.docking.system-change.note"));
+		JPanel p = new JPanel();
+		p.setToolTipText(jEdit.getProperty("options.docking.system-change.note"));
+		p.setLayout(new FlowLayout());
+		p.add(new JLabel(jEdit.getProperty("options.docking.selectFramework.label")));
+		p.add(dockingFramework);
+
+		return p;
+
+	}
+
+
 	private JPanel createDockingOptionsPanel()
 	{
 		JPanel p = new JPanel();
@@ -187,6 +223,7 @@ public class DockingOptionPane extends AbstractOptionPane
 				DockableWindowManager.RIGHT
 			});
 			DockPositionCellRenderer.this.setRequestFocusEnabled(false);
+
 		}
 
 		public Component getTableCellRendererComponent(JTable table,
@@ -225,7 +262,7 @@ class WindowTableModel extends AbstractTableModel
 			if (plugin != null)
 				set = PLUGIN_SET_PREFIX + plugin;
 			else
-				set = CORE_DOCKABLE_SET; 
+				set = CORE_DOCKABLE_SET;
 			Vector<Entry> currentSetDockables = dockableSets.get(set);
 			if (currentSetDockables == null)
 			{
diff --git a/org/gjt/sp/jedit/options/EditingOptionPane.java b/org/gjt/sp/jedit/options/EditingOptionPane.java
index 46b4d0b..5cc538e 100644
--- a/org/gjt/sp/jedit/options/EditingOptionPane.java
+++ b/org/gjt/sp/jedit/options/EditingOptionPane.java
@@ -35,7 +35,7 @@ import org.gjt.sp.util.StandardUtilities;
 
 /**
  * @author Slava Pestov
- * @version $Id: EditingOptionPane.java 20348 2011-11-15 08:07:58Z ezust $
+ * @version $Id: EditingOptionPane.java 21723 2012-05-27 14:34:13Z k_satoda $
  */
 public class EditingOptionPane extends AbstractOptionPane
 {
@@ -103,22 +103,33 @@ public class EditingOptionPane extends AbstractOptionPane
 		addComponent(jEdit.getProperty("options.editing.maxLineLen"), maxLineLen);
 		maxLineLen.setEditable(true);
 
+		String[] indentModes = {
+			"none",
+			"simple",
+			"full"
+		};
+		addComponent(jEdit.getProperty("options.editing.autoIndent"),
+			autoIndent = new JComboBox(indentModes));
+
+
 		String[] tabSizes = { "2", "4", "8" };
 		addComponent(jEdit.getProperty("options.editing.tabSize"),
 			tabSize = new JComboBox(tabSizes));
+
 		tabSize.setEditable(true);
 
 		addComponent(jEdit.getProperty("options.editing.indentSize"),
 			indentSize = new JComboBox(tabSizes));
 		indentSize.setEditable(true);
 
+
 		addComponent(noTabs = new JCheckBox(jEdit.getProperty(
 			"options.editing.noTabs")));
-		
+
 		addComponent(elasticTabstops = new JCheckBox(jEdit.getProperty(
 		"options.editing.elasticTabstops")));
 		elasticTabstops.setToolTipText(jEdit.getProperty("options.editing.elasticTabstops.tooltip"));
-		
+
 		addComponent(deepIndent = new JCheckBox(jEdit.getProperty(
 			"options.editing.deepIndent")));
 
@@ -135,6 +146,7 @@ public class EditingOptionPane extends AbstractOptionPane
 		addSeparator();
 
 		defaultMode = new JComboBox(modes);
+
 		defaultMode.setSelectedItem(jEdit.getMode(
 			jEdit.getProperty("buffer.defaultMode")));
 		addComponent(jEdit.getProperty("options.editing.defaultMode"),
@@ -149,6 +161,37 @@ public class EditingOptionPane extends AbstractOptionPane
 		addComponent(resetUndoOnSave);
 		//}}}
 
+		//{{{ Large file mode
+		addSeparator(jEdit.getProperty("options.editing.largefilemode.title"));
+
+		addComponent(new JLabel(jEdit.getProperty("options.editing.largefilemode")));
+		addComponent(askLargeFileMode = new JRadioButton(jEdit.getProperty("options.editing.largefilemode.option.ask")));
+		addComponent(fullSyntaxLargeFileMode = new JRadioButton(jEdit.getProperty("options.editing.largefilemode.option.full")));
+		addComponent(limitedSyntaxLargeFileMode = new JRadioButton(jEdit.getProperty("options.editing.largefilemode.option.limited")));
+		addComponent(noHighlightLargeFileMode = new JRadioButton(jEdit.getProperty("options.editing.largefilemode.option.nohighlight")));
+		String option = jEdit.getProperty("largefilemode", "ask");
+		if ("full".equals(option))
+		{
+			fullSyntaxLargeFileMode.setSelected(true);
+		}
+		else if ("limited".equals(option))
+		{
+			limitedSyntaxLargeFileMode.setSelected(true);
+		}
+		else if ("nohighlight".equals(option))
+		{
+			noHighlightLargeFileMode.setSelected(true);
+		}
+		else
+		{
+			askLargeFileMode.setSelected(true);
+		}
+		ButtonGroup largeFileModeButtonGroup = new ButtonGroup();
+		largeFileModeButtonGroup.add(askLargeFileMode);
+		largeFileModeButtonGroup.add(fullSyntaxLargeFileMode);
+		largeFileModeButtonGroup.add(limitedSyntaxLargeFileMode);
+		largeFileModeButtonGroup.add(noHighlightLargeFileMode);
+		//}}}
 	} //}}}
 
 	//{{{ _save() method
@@ -168,6 +211,23 @@ public class EditingOptionPane extends AbstractOptionPane
 		{
 			modeProps[i].save();
 		}
+
+		if (fullSyntaxLargeFileMode.isSelected())
+		{
+			jEdit.setProperty("largefilemode", "full");
+		}
+		else if (limitedSyntaxLargeFileMode.isSelected())
+		{
+			jEdit.setProperty("largefilemode", "limited");
+		}
+		else if (noHighlightLargeFileMode.isSelected())
+		{
+			jEdit.setProperty("largefilemode", "nohighlight");
+		}
+		else
+		{
+			jEdit.setProperty("largefilemode", "ask");
+		}
 	} //}}}
 
 	//{{{ Private members
@@ -194,7 +254,13 @@ public class EditingOptionPane extends AbstractOptionPane
 	private JComboBox indentSize;
 	private JCheckBox noTabs;
 	private JCheckBox elasticTabstops;
+	private JComboBox autoIndent;
 	private JCheckBox deepIndent;
+	private JRadioButton largeFileMode;
+	private JRadioButton askLargeFileMode;
+	private JRadioButton noHighlightLargeFileMode;
+	private JRadioButton limitedSyntaxLargeFileMode;
+	private JRadioButton fullSyntaxLargeFileMode;
 	//}}}
 
 	//{{{ saveMode() method
@@ -213,6 +279,7 @@ public class EditingOptionPane extends AbstractOptionPane
 		current.indentSize = (String)indentSize.getSelectedItem();
 		current.noTabs = noTabs.isSelected();
 		current.elasticTabstops = elasticTabstops.isSelected();
+		current.autoIndent = (String)autoIndent.getSelectedItem();
 		current.deepIndent = deepIndent.isSelected();
 	} //}}}
 
@@ -242,6 +309,7 @@ public class EditingOptionPane extends AbstractOptionPane
 		indentSize.setSelectedItem(current.indentSize);
 		noTabs.setSelected(current.noTabs);
 		elasticTabstops.setSelected(current.elasticTabstops);
+		autoIndent.setSelectedItem(current.autoIndent);
 		deepIndent.setSelected(current.deepIndent);
 
 		updateEnabled();
@@ -278,6 +346,7 @@ public class EditingOptionPane extends AbstractOptionPane
 		indentSize.setEnabled(enabled);
 		noTabs.setEnabled(enabled);
 		elasticTabstops.setEnabled(enabled);
+		autoIndent.setEnabled(enabled);
 		deepIndent.setEnabled(enabled);
 	} //}}}
 
@@ -324,6 +393,7 @@ public class EditingOptionPane extends AbstractOptionPane
 		String indentSize;
 		boolean noTabs;
 		boolean elasticTabstops;
+		String autoIndent;
 		boolean deepIndent;
 		//}}}
 
@@ -364,6 +434,7 @@ public class EditingOptionPane extends AbstractOptionPane
 				indentSize = mode.getProperty("indentSize").toString();
 				noTabs = mode.getBooleanProperty("noTabs");
 				elasticTabstops = mode.getBooleanProperty("elasticTabstops");
+				autoIndent = mode.getProperty("autoIndent").toString();
 				deepIndent = mode.getBooleanProperty("deepIndent");
 			}
 			else
@@ -378,6 +449,7 @@ public class EditingOptionPane extends AbstractOptionPane
 				indentSize = jEdit.getProperty("buffer.indentSize");
 				noTabs = jEdit.getBooleanProperty("buffer.noTabs");
 				elasticTabstops= jEdit.getBooleanProperty("buffer.elasticTabstops");
+				autoIndent = jEdit.getProperty("buffer.autoIndent");
 				deepIndent = jEdit.getBooleanProperty("buffer.deepIndent");
 			}
 		} //}}}
@@ -414,6 +486,7 @@ public class EditingOptionPane extends AbstractOptionPane
 					jEdit.resetProperty(prefix + "indentSize");
 					jEdit.resetProperty(prefix + "noTabs");
 					jEdit.resetProperty(prefix + "elasticTabstops");
+					jEdit.resetProperty(prefix + "autoIndent");
 					jEdit.resetProperty(prefix + "deepIndent");
 
 					if(!(StandardUtilities.objectsEqual(oldFilenameGlob,
@@ -453,6 +526,7 @@ public class EditingOptionPane extends AbstractOptionPane
 			jEdit.setProperty(prefix + "maxLineLen",maxLineLen);
 			jEdit.setProperty(prefix + "tabSize",tabSize);
 			jEdit.setProperty(prefix + "indentSize",indentSize);
+			jEdit.setProperty(prefix + "autoIndent", autoIndent);
 			jEdit.setBooleanProperty(prefix + "noTabs",noTabs);
 			jEdit.setBooleanProperty(prefix + "elasticTabstops",elasticTabstops);
 			jEdit.setBooleanProperty(prefix + "deepIndent",deepIndent);
diff --git a/org/gjt/sp/jedit/options/EncodingsOptionPane.java b/org/gjt/sp/jedit/options/EncodingsOptionPane.java
index 45914a0..699717b 100644
--- a/org/gjt/sp/jedit/options/EncodingsOptionPane.java
+++ b/org/gjt/sp/jedit/options/EncodingsOptionPane.java
@@ -34,6 +34,7 @@ import org.gjt.sp.jedit.AbstractOptionPane;
 import org.gjt.sp.jedit.gui.PingPongList;
 import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.jedit.buffer.JEditBuffer;
+
 import org.gjt.sp.util.StandardUtilities;
 import static java.awt.GridBagConstraints.BOTH;
 import static java.util.Arrays.sort;
@@ -47,11 +48,11 @@ import static org.gjt.sp.jedit.MiscUtilities.getEncodings;
 //{{{ EncodingsOptionPane class
 /**
  * Encodings options.
- * 
+ *
  * @author Björn Kautler
  * @author Matthieu Casanova
  * @since jEdit 4.3pre6
- * @version $Id: EncodingsOptionPane.java 20765 2012-01-12 23:05:12Z ezust $
+ * @version $Id: EncodingsOptionPane.java 20572 2011-12-07 21:43:12Z kpouer $
  */
 public class EncodingsOptionPane extends AbstractOptionPane
 {
@@ -74,12 +75,13 @@ public class EncodingsOptionPane extends AbstractOptionPane
 	@Override
 	protected void _init()
 	{
-		
+
 		/* Line separator */
 		String[] lineSeps = { jEdit.getProperty("lineSep.unix"),
 			jEdit.getProperty("lineSep.windows"),
 			jEdit.getProperty("lineSep.mac") };
 		lineSeparator = new JComboBox(lineSeps);
+
 		String lineSep = jEdit.getProperty("buffer."+ JEditBuffer.LINESEP,
 			System.getProperty("line.separator"));
 		if("\n".equals(lineSep))
@@ -91,7 +93,7 @@ public class EncodingsOptionPane extends AbstractOptionPane
 		addComponent(jEdit.getProperty("options.general.lineSeparator"),
 			lineSeparator);
 
-		
+
 		// Default file encoding
 		String[] encodings = getEncodings(true);
 		sort(encodings,new StandardUtilities.StringCompare<String>(true));
@@ -107,7 +109,7 @@ public class EncodingsOptionPane extends AbstractOptionPane
 		encodingAutodetect.setSelected(jEdit.getBooleanProperty(
 			"buffer.encodingAutodetect"));
 		addComponent(encodingAutodetect,BOTH);
-		
+
 		// Encoding detectors
 		encodingDetectors = new JTextField(jEdit.getProperty(
 			"encodingDetectors",""));
@@ -139,7 +141,6 @@ public class EncodingsOptionPane extends AbstractOptionPane
 		pingPongList.setLeftTooltip(getProperty("options.encodings.available.tooltip"));
 		pingPongList.setRightTooltip(getProperty("options.encodings.selected.tooltip"));
 		addComponent(pingPongList,BOTH);
-
 	} //}}}
 
 	//{{{ _save() method
@@ -160,7 +161,7 @@ public class EncodingsOptionPane extends AbstractOptionPane
 			break;
 		}
 		jEdit.setProperty("buffer."+ JEditBuffer.LINESEP,lineSep);
-		
+
 		jEdit.setProperty("buffer."+ JEditBuffer.ENCODING,(String)
 			defaultEncoding.getSelectedItem());
 		jEdit.setBooleanProperty("buffer.encodingAutodetect",
diff --git a/org/gjt/sp/jedit/options/GeneralOptionPane.java b/org/gjt/sp/jedit/options/GeneralOptionPane.java
index 3b35e99..af38609 100644
--- a/org/gjt/sp/jedit/options/GeneralOptionPane.java
+++ b/org/gjt/sp/jedit/options/GeneralOptionPane.java
@@ -28,6 +28,9 @@ import org.gjt.sp.jedit.jEdit;
 import org.gjt.sp.util.Log;
 
 import javax.swing.*;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import java.awt.Component;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 //}}}
@@ -65,6 +68,9 @@ public class GeneralOptionPane extends AbstractOptionPane
 	private JCheckBox restoreRemote;
 	private JCheckBox restoreCLI;
 	private JCheckBox restoreSplits;
+
+	private JCheckBox useDefaultLocale;
+	private JComboBox lang;
 	//}}}
 
 	//{{{ GeneralOptionPane constructor
@@ -114,6 +120,7 @@ public class GeneralOptionPane extends AbstractOptionPane
 			jEdit.getProperty("options.general.checkModStatusUpon.none")
 		};
 		checkModStatusUpon = new JComboBox(modCheckUponOptions);
+
 		checkModStatusUpon.setSelectedIndex(jEdit.getIntegerProperty("checkFileStatus"));
 		addComponent(jEdit.getProperty("options.general.checkModStatusUpon"),
 			checkModStatusUpon);
@@ -183,7 +190,29 @@ public class GeneralOptionPane extends AbstractOptionPane
 			hypersearchResultsWarning);
 
 
+		String language = jEdit.getCurrentLanguage();
 
+		String availableLanguages = jEdit.getProperty("available.lang", "en");
+		String[] languages = availableLanguages.split(" ");
+
+		useDefaultLocale = new JCheckBox(jEdit.getProperty("options.appearance.usedefaultlocale.label"));
+		useDefaultLocale.setSelected(jEdit.getBooleanProperty("lang.usedefaultlocale"));
+		useDefaultLocale.addChangeListener(new ChangeListener()
+		{
+			@Override
+			public void stateChanged(ChangeEvent e)
+			{
+				lang.setEnabled(!useDefaultLocale.isSelected());
+			}
+		});
+		lang = new JComboBox(languages);
+		lang.setEnabled(!useDefaultLocale.isSelected());
+		lang.setSelectedItem(language);
+
+		lang.setRenderer(new LangCellRenderer());
+		addSeparator("options.appearance.localization.section.label");
+		addComponent(useDefaultLocale);
+		addComponent(jEdit.getProperty("options.appearance.lang.label"), lang);
 	} //}}}
 
 	//{{{ _save() method
@@ -228,7 +257,24 @@ public class GeneralOptionPane extends AbstractOptionPane
 		{
 			Log.log(Log.WARNING, this, "hypersearchResultsWarning: " + hypersearchResultsWarning.getText() + " is not a valid value for this option");
 		}
-	} //}}}
 
+		jEdit.setBooleanProperty("lang.usedefaultlocale", useDefaultLocale.isSelected());
+		jEdit.setProperty("lang.current", String.valueOf(lang.getSelectedItem()));
+	} //}}}
 
+	//{{{ LangCellRenderer class
+	private static class LangCellRenderer extends DefaultListCellRenderer
+	{
+		@Override
+		public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected,
+							      boolean cellHasFocus)
+		{
+			super.getListCellRendererComponent(list, value, index, isSelected,
+							   cellHasFocus);
+			String label = jEdit.getProperty("options.appearance.lang."+value);
+			if (label != null)
+				setText(label);
+			return this;
+		}
+	} //}}}
 }
diff --git a/org/gjt/sp/jedit/options/GlobalOptions.java b/org/gjt/sp/jedit/options/GlobalOptions.java
index 26855d8..3c7df16 100644
--- a/org/gjt/sp/jedit/options/GlobalOptions.java
+++ b/org/gjt/sp/jedit/options/GlobalOptions.java
@@ -29,7 +29,9 @@ import org.gjt.sp.jedit.gui.OptionsDialog;
 import org.gjt.sp.jedit.msg.PropertiesChanging;
 import org.gjt.sp.jedit.*;
 //}}}
-
+/**
+   @deprecated - use CombinedOptions
+*/
 public class GlobalOptions extends OptionsDialog
 {
 	//{{{ GlobalOptions constructor
diff --git a/org/gjt/sp/jedit/options/GutterOptionPane.java b/org/gjt/sp/jedit/options/GutterOptionPane.java
index de19cfc..751380c 100644
--- a/org/gjt/sp/jedit/options/GutterOptionPane.java
+++ b/org/gjt/sp/jedit/options/GutterOptionPane.java
@@ -34,6 +34,7 @@ import org.gjt.sp.jedit.gui.*;
 import org.gjt.sp.jedit.textarea.JEditTextArea;
 import org.gjt.sp.jedit.*;
 //}}}
+
 import org.gjt.sp.util.SyntaxUtilities;
 
 public class GutterOptionPane extends AbstractOptionPane
@@ -66,7 +67,7 @@ public class GutterOptionPane extends AbstractOptionPane
 		gutterComponents = new JPanel(new GridBagLayout());
 		gutterComponents.setBorder(BorderFactory.createTitledBorder(
 			jEdit.getProperty("options.gutter.optionalComponents")));
-		
+
 		IntegerInputVerifier integerInputVerifier = new IntegerInputVerifier();
 
 		/* Line numbering */
@@ -222,7 +223,7 @@ public class GutterOptionPane extends AbstractOptionPane
 			gutterNoFocusBorder = new ColorWellButton(
 			jEdit.getColorProperty("view.gutter.noFocusBorderColor")),
 			GridBagConstraints.VERTICAL);
-		
+
 		addFoldStyleChooser();
 	} //}}}
 
diff --git a/org/gjt/sp/jedit/options/MouseOptionPane.java b/org/gjt/sp/jedit/options/MouseOptionPane.java
index 6136feb..d8f0e2d 100644
--- a/org/gjt/sp/jedit/options/MouseOptionPane.java
+++ b/org/gjt/sp/jedit/options/MouseOptionPane.java
@@ -23,13 +23,9 @@
 package org.gjt.sp.jedit.options;
 
 //{{{ Imports
-import javax.swing.border.*;
+
 import javax.swing.*;
-import java.awt.event.*;
-import java.awt.*;
-import java.io.*;
 import org.gjt.sp.jedit.*;
-import org.gjt.sp.util.Log;
 //}}}
 
 public class MouseOptionPane extends AbstractOptionPane
@@ -96,6 +92,7 @@ public class MouseOptionPane extends AbstractOptionPane
 		for(int i = 0; i < c; i++)
 		{
 			JComboBox cb = new JComboBox(clickActionNames);
+
 			gutterClickActions[i] = cb;
 
 			String val = jEdit.getProperty("view.gutter."+clickModifierKeys[i]);
@@ -145,7 +142,7 @@ public class MouseOptionPane extends AbstractOptionPane
 		"toggle-fold",
 		"toggle-fold-fully"
 	};
-	
+
 	private static final String[] clickModifierKeys = new String[] {
 		"foldClick",
 		"SfoldClick"
diff --git a/org/gjt/sp/jedit/options/PluginOptions.java b/org/gjt/sp/jedit/options/PluginOptions.java
index 6c90f81..1fcbaec 100644
--- a/org/gjt/sp/jedit/options/PluginOptions.java
+++ b/org/gjt/sp/jedit/options/PluginOptions.java
@@ -30,7 +30,9 @@ import org.gjt.sp.jedit.options.*;
 import org.gjt.sp.jedit.*;
 import org.gjt.sp.util.Log;
 //}}}
-
+/**
+ @deprecated use CombinedOptions
+ */
 public class PluginOptions extends OptionsDialog
 {
 	//{{{ PluginOptions constructor
diff --git a/org/gjt/sp/jedit/options/PrintOptionPane.java b/org/gjt/sp/jedit/options/PrintOptionPane.java
index a9adeaa..274ab56 100644
--- a/org/gjt/sp/jedit/options/PrintOptionPane.java
+++ b/org/gjt/sp/jedit/options/PrintOptionPane.java
@@ -80,7 +80,7 @@ public class PrintOptionPane extends AbstractOptionPane
 			+ ".folds"));
 		printFolds.setSelected(jEdit.getBooleanProperty("print.folds",true));
 		addComponent(printFolds);
-		
+
 		addSeparator("options.print.workarounds");
 
 		/* Spacing workaround */
diff --git a/org/gjt/sp/jedit/options/SaveBackupOptionPane.java b/org/gjt/sp/jedit/options/SaveBackupOptionPane.java
index 2cb9d5e..a3b1560 100644
--- a/org/gjt/sp/jedit/options/SaveBackupOptionPane.java
+++ b/org/gjt/sp/jedit/options/SaveBackupOptionPane.java
@@ -35,7 +35,7 @@ import org.gjt.sp.jedit.browser.VFSBrowser;
  * The Save and Backup option panel.
  *
  * @author Slava Pestov
- * @author $Id: SaveBackupOptionPane.java 20350 2011-11-15 08:24:51Z ezust $
+ * @author $Id: SaveBackupOptionPane.java 21743 2012-05-31 20:23:35Z ezust $
  */
 public class SaveBackupOptionPane extends AbstractOptionPane
 {
@@ -49,12 +49,24 @@ public class SaveBackupOptionPane extends AbstractOptionPane
 	@Override
 	protected void _init()
 	{
+		
+		/* Save-As Uses FSB */
+		
+		saveAsUsesFSB = new JCheckBox(jEdit.getProperty(
+			"options.save-back.saveAsUsesFSB"));
+		saveAsUsesFSB.setSelected(jEdit.getBooleanProperty(
+			"saveAsUsesFSB"));
+		saveAsUsesFSB.setToolTipText(jEdit.getProperty(
+			"options.save-back.saveAsUsesFSB.tooltip"));
+		addComponent(saveAsUsesFSB);
+		
 		/* Two-stage save */
 		twoStageSave = new JCheckBox(jEdit.getProperty(
 			"options.save-back.twoStageSave"));
 		twoStageSave.setSelected(jEdit.getBooleanProperty(
 			"twoStageSave"));
 		twoStageSave.setToolTipText(jEdit.getProperty(
+			
 			"options.save-back.twoStageSave.tooltip"));
 		addComponent(twoStageSave);
 
@@ -123,8 +135,6 @@ public class SaveBackupOptionPane extends AbstractOptionPane
 		/* Backup on every save */
 		backupEverySave = new JCheckBox(jEdit.getProperty(
 			"options.save-back.backupEverySave"));
-		backupEverySave.setToolTipText(jEdit.getProperty(
-			"options.save-back.backupEverySave.tooltip"));
 		backupEverySave.setSelected(jEdit.getBooleanProperty("backupEverySave"));
 		addComponent(backupEverySave);
 	} //}}}
@@ -133,6 +143,7 @@ public class SaveBackupOptionPane extends AbstractOptionPane
 	@Override
 	protected void _save()
 	{
+		jEdit.setBooleanProperty("saveAsUsesFSB", saveAsUsesFSB.isSelected());
 		jEdit.setBooleanProperty("twoStageSave",twoStageSave.isSelected());
 		jEdit.setBooleanProperty("confirmSaveAll",confirmSaveAll.isSelected());
 		jEdit.setProperty("autosave", this.autosave.getText());
@@ -162,6 +173,7 @@ public class SaveBackupOptionPane extends AbstractOptionPane
 	} //}}}
 
 	//{{{ Private members
+	private JCheckBox saveAsUsesFSB;
 	private JCheckBox twoStageSave;
 	private JCheckBox confirmSaveAll;
 	private JTextField autosave;
diff --git a/org/gjt/sp/jedit/options/ShortcutsOptionPane.java b/org/gjt/sp/jedit/options/ShortcutsOptionPane.java
index 129048f..3172222 100644
--- a/org/gjt/sp/jedit/options/ShortcutsOptionPane.java
+++ b/org/gjt/sp/jedit/options/ShortcutsOptionPane.java
@@ -5,6 +5,7 @@
  *
  * Copyright (C) 1999, 2000, 2001 Slava Pestov
  * Copyright (C) 2001 Dirk Moebius
+ * Copyright (C) 2011 Matthieu Casanova
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
@@ -28,9 +29,10 @@ import org.gjt.sp.jedit.*;
 import org.gjt.sp.jedit.gui.FilteredTableModel;
 import org.gjt.sp.jedit.gui.GrabKeyDialog;
 import org.gjt.sp.jedit.gui.GrabKeyDialog.KeyBinding;
+import org.jedit.keymap.Keymap;
+import org.jedit.keymap.KeymapManager;
 import org.gjt.sp.util.Log;
 import org.gjt.sp.util.StandardUtilities;
-
 import javax.swing.*;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
@@ -47,8 +49,9 @@ import java.util.List;
 /**
  * Key binding editor.
  * @author Slava Pestov
- * @version $Id: ShortcutsOptionPane.java 21012 2012-01-29 19:08:10Z voituk $
+ * @version $Id: ShortcutsOptionPane.java 20759 2012-01-12 11:06:22Z kpouer $
  */
+ at SuppressWarnings("serial")
 public class ShortcutsOptionPane extends AbstractOptionPane
 {
 	//{{{ ShortcutsOptionPane constructor
@@ -63,12 +66,47 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 	{
 		allBindings = new Vector<KeyBinding>();
 
-		setLayout(new BorderLayout(12,12));
+		setLayout(new BorderLayout(12, 12));
+
+		KeymapManager keymapManager = jEdit.getKeymapManager();
 
+		String keymapName = jEdit.getProperty("keymap.current");
+		selectedKeymap = keymapManager.getKeymap(keymapName);
+		if (selectedKeymap == null)
+			selectedKeymap = keymapManager.getKeymap(KeymapManager.DEFAULT_KEYMAP_NAME);
 		initModels();
 
+		duplicateKeymap = new JButton(jEdit.getProperty("options.shortcuts.duplicatekeymap.label"));
+		resetKeymap = new JButton(jEdit.getProperty("options.shortcuts.resetkeymap.label"));
+		deleteKeymap = new JButton(jEdit.getProperty("options.shortcuts.deletekeymap.label"));
+		resetButtons();
+
+		ActionListener actionHandler = new ActionHandler();
+
+		ComboBoxModel model = new KeymapsModel();
+		keymaps = new JComboBox(model);
+		keymaps.setRenderer(new KeymapCellRenderer());
+		keymaps.setSelectedItem(keymapName);
+		duplicateKeymap.addActionListener(actionHandler);
+		resetKeymap.addActionListener(actionHandler);
+		deleteKeymap.addActionListener(actionHandler);
+		keymaps.addActionListener(actionHandler);
+		keymaps.setSelectedItem(selectedKeymap);
+
+		Box keymapBox = Box.createHorizontalBox();
+		keymapBox.add(new JLabel(jEdit.getProperty(
+			"options.shortcuts.keymap.label")));
+		keymapBox.add(Box.createHorizontalStrut(6));
+		keymapBox.add(keymaps);
+		keymapBox.add(Box.createHorizontalStrut(6));
+		keymapBox.add(duplicateKeymap);
+		keymapBox.add(resetKeymap);
+		keymapBox.add(deleteKeymap);
+		keymapBox.add(Box.createHorizontalGlue());
+
+		// combobox to choose action set
 		selectModel = new JComboBox(models);
-		selectModel.addActionListener(new ActionHandler());
+		selectModel.addActionListener(actionHandler);
 		selectModel.setToolTipText(jEdit.getProperty("options.shortcuts.select.tooltip"));
 		Box north = Box.createHorizontalBox();
 		north.add(new JLabel(jEdit.getProperty(
@@ -128,7 +166,12 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 		tableFilterPanel.add(BorderLayout.NORTH,filterPanel);
 		tableFilterPanel.add(BorderLayout.CENTER,scroller);
 
-		add(BorderLayout.NORTH,north);
+		Box northBox = Box.createVerticalBox();
+		northBox.add(keymapBox);
+		northBox.add(Box.createVerticalGlue());
+		northBox.add(north);
+
+		add(BorderLayout.NORTH,northBox);
 		add(BorderLayout.CENTER,tableFilterPanel);
 		try
 		{
@@ -141,6 +184,7 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 	@Override
 	protected void _save()
 	{
+		jEdit.setProperty("keymap.current", selectedKeymap.toString());
 		if(keyTable.getCellEditor() != null)
 			keyTable.getCellEditor().stopCellEditing();
 
@@ -148,9 +192,16 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 			model.save();
 
 		Macros.loadMacros();
+		selectedKeymap.save();
 	} //}}}
 
 	//{{{ Private members
+	/** The selected keymap. It is a copy of the current keymap in the beginning, but it may be another one */
+	private Keymap selectedKeymap;
+	private JButton duplicateKeymap;
+	private JButton resetKeymap;
+	private JButton deleteKeymap;
+	private JComboBox keymaps;
 	private JTable keyTable;
 	private Vector<ShortcutsModel> models;
 	private FilteredTableModel<ShortcutsModel> filteredModel;
@@ -167,9 +218,32 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 	//{{{ initModels() method
 	private void initModels()
 	{
-		List<KeyBinding[]> allBindings = new ArrayList<KeyBinding[]>();
-		Set<String> knownBindings = new HashSet<String>();
+		filteredModel = new FilteredTableModel<ShortcutsModel>()
+		{
+			@Override
+			public String prepareFilter(String filter)
+			{
+				return filter.toLowerCase();
+			}
+
+			@Override
+			public boolean passFilter(int row, String filter)
+			{
+				String name = delegated.getBindingAt(row, 0).label.toLowerCase();
+				return name.contains(filter);
+			}
+		};
 		models = new Vector<ShortcutsModel>();
+		reloadModels();
+	} //}}}
+
+	//{{{ reloadModels() method
+	private void reloadModels()
+	{
+		models.clear();
+		allBindings.clear();
+		List<KeyBinding[]> allBindings = new ArrayList<KeyBinding[]>();
+		Collection<String> knownBindings = new HashSet<String>();
 		ActionSet[] actionSets = jEdit.getActionSets();
 		for(int i = 0; i < actionSets.length; i++)
 		{
@@ -184,7 +258,7 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 				}
 				ShortcutsModel model = createModel(modelLabel,
 						actionSet.getActionNames());
-				models.addElement(model);
+				models.add(model);
 				List<KeyBinding[]> bindings = model.getBindings();
 				for (KeyBinding[] binding : bindings)
 				{
@@ -198,24 +272,27 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 			}
 		}
 		if (models.size() > 1)
-			models.addElement(new ShortcutsModel("All", allBindings));
+			models.add(new ShortcutsModel("All", allBindings));
+		ShortcutsModel delegated = filteredModel.getDelegated();
 		Collections.sort(models,new StandardUtilities.StringCompare<ShortcutsModel>(true));
-		ShortcutsModel currentModel = models.elementAt(0);
-		filteredModel = new FilteredTableModel<ShortcutsModel>(currentModel)
+		if (delegated == null)
 		{
-			@Override
-			public String prepareFilter(String filter)
-			{
-				return filter.toLowerCase();
-			}
-
-			@Override
-			public boolean passFilter(int row, String filter)
+			delegated = models.get(0);
+		}
+		else
+		{
+			for (ShortcutsModel model : models)
 			{
-				String name = delegated.getBindingAt(row, 0).label.toLowerCase();
-				return name.contains(filter);
+				// Find the model with the same name
+				if (model.toString().equals(delegated.toString()))
+				{
+					delegated = model;
+					break;
+				}
 			}
-		};
+		}
+		filteredModel.setDelegated(delegated);
+		filteredModel.fireTableDataChanged();
 	} //}}}
 
 	//{{{ createModel() method
@@ -245,9 +322,9 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 		GrabKeyDialog.KeyBinding[] b = new GrabKeyDialog.KeyBinding[2];
 
 		b[0] = createBinding(name,label,
-			jEdit.getProperty(name + ".shortcut"));
+			selectedKeymap.getShortcut(name + ".shortcut"));
 		b[1] = createBinding(name,label,
-			jEdit.getProperty(name + ".shortcut2"));
+			selectedKeymap.getShortcut(name + ".shortcut2"));
 
 		bindings.add(b);
 	} //}}}
@@ -266,8 +343,18 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 		return binding;
 	} //}}}
 
+	// {{{ resetButtons() methods
+	private void resetButtons()
+	{
+		KeymapManager keymapManager = jEdit.getKeymapManager();
+		KeymapManager.State state = keymapManager.getKeymapState(selectedKeymap.toString());
+		resetKeymap.setEnabled(state == KeymapManager.State.SystemModified);
+		deleteKeymap.setEnabled(state == KeymapManager.State.User);
+	} //}}}
+
 	//{{{ Inner classes
 
+
 	//{{{ HeaderMouseHandler class
 	private class HeaderMouseHandler extends MouseAdapter
 	{
@@ -319,19 +406,93 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
-			ShortcutsModel newModel
-				= (ShortcutsModel)selectModel.getSelectedItem();
-			if(filteredModel.getDelegated() != newModel)
+			if (evt.getSource() == selectModel)
 			{
-				jEdit.setIntegerProperty("options.shortcuts.select.index", selectModel.getSelectedIndex());
-				filteredModel.setDelegated(newModel);
-				setFilter();
+				ShortcutsModel newModel
+					= (ShortcutsModel)selectModel.getSelectedItem();
+				if(filteredModel.getDelegated() != newModel)
+				{
+					jEdit.setIntegerProperty("options.shortcuts.select.index", selectModel.getSelectedIndex());
+					filteredModel.setDelegated(newModel);
+					setFilter();
+				}
+			}
+			else if (evt.getSource() == keymaps)
+			{
+				String selectedKeymapName = (String) keymaps.getSelectedItem();
+				KeymapManager keymapManager = jEdit.getKeymapManager();
+				selectedKeymap = keymapManager.getKeymap(selectedKeymapName);
+				resetButtons();
+				reloadModels();
+			}
+			else if (evt.getSource() == duplicateKeymap)
+			{
+				String newName = JOptionPane.showInputDialog(ShortcutsOptionPane.this,
+									     jEdit.getProperty(
+										     "options.shortcuts.duplicatekeymap.dialog.label"),
+									     jEdit.getProperty(
+										     "options.shortcuts.duplicatekeymap.dialog.title"),
+									     JOptionPane.OK_CANCEL_OPTION);
+				KeymapManager manager = jEdit.getKeymapManager();
+				Collection<String> keymapNames = manager.getKeymapNames();
+				while (newName != null)
+				{
+					if (!keymapNames.contains(newName))
+						break;
+					newName = JOptionPane.showInputDialog(ShortcutsOptionPane.this,
+										     jEdit.getProperty(
+											     "options.shortcuts.keymapalreadyexists.dialog.label"),
+										     jEdit.getProperty(
+											     "options.shortcuts.duplicatekeymap.dialog.title"),
+										     JOptionPane.OK_CANCEL_OPTION);
+
+				}
+				if (manager.copyKeymap(selectedKeymap.toString(), newName))
+				{
+					KeymapsModel model = (KeymapsModel) keymaps.getModel();
+					model.reset();
+					keymaps.setSelectedItem(newName);
+				}
+			}
+			else if (evt.getSource() == resetKeymap)
+			{
+				int ret = JOptionPane.showConfirmDialog(ShortcutsOptionPane.this, jEdit.getProperty(
+					"options.shortcuts.resetkeymap.dialog.label"), jEdit.getProperty(
+					"options.shortcuts.resetkeymap.dialog.title"), JOptionPane.YES_NO_OPTION,
+								      JOptionPane.QUESTION_MESSAGE);
+				if (ret == JOptionPane.YES_OPTION)
+				{
+					String name = selectedKeymap.toString();
+					KeymapManager manager = jEdit.getKeymapManager();
+					manager.resetKeymap(name);
+					selectedKeymap = manager.getKeymap(name);
+					resetButtons();
+					reloadModels();
+				}
+			}
+			else if (evt.getSource() == deleteKeymap)
+			{
+				int ret = JOptionPane.showConfirmDialog(ShortcutsOptionPane.this, jEdit.getProperty(
+					"options.shortcuts.deletekeymap.dialog.label"), jEdit.getProperty(
+					"options.shortcuts.deletekeymap.dialog.title"), JOptionPane.YES_NO_OPTION,
+								      JOptionPane.QUESTION_MESSAGE);
+				if (ret == JOptionPane.YES_OPTION)
+				{
+					KeymapManager manager = jEdit.getKeymapManager();
+					KeymapManager.State keymapState = manager.getKeymapState(selectedKeymap.toString());
+					if (keymapState == KeymapManager.State.User)
+					{
+						manager.deleteUserKeymap(selectedKeymap.toString());
+						KeymapsModel model = (KeymapsModel) keymaps.getModel();
+						model.reset();
+					}
+				}
 			}
 		}
 	} //}}}
 
 	//{{{ ShortcutsModel class
-	private static class ShortcutsModel extends AbstractTableModel
+	private class ShortcutsModel extends AbstractTableModel
 	{
 		private final List<GrabKeyDialog.KeyBinding[]> bindings;
 		private final String name;
@@ -404,9 +565,9 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 			case 0:
 				return jEdit.getProperty("options.shortcuts.name");
 			case 1:
-				return jEdit.getProperty("options.shortcuts.shortcut1");
+				return selectedKeymap.getShortcut("options.shortcuts.shortcut1");
 			case 2:
-				return jEdit.getProperty("options.shortcuts.shortcut2");
+				return selectedKeymap.getShortcut("options.shortcuts.shortcut2");
 			default:
 				return null;
 			}
@@ -416,10 +577,10 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 		{
 			for (GrabKeyDialog.KeyBinding[] binding : bindings)
 			{
-				jEdit.setProperty(
+				selectedKeymap.setShortcut(
 					binding[0].name + ".shortcut",
 					binding[0].shortcut);
-				jEdit.setProperty(
+				selectedKeymap.setShortcut(
 					binding[1].name + ".shortcut2",
 					binding[1].shortcut);
 			}
@@ -437,7 +598,7 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 			return name;
 		}
 
-		private static class KeyCompare implements Comparator<GrabKeyDialog.KeyBinding[]>
+		private class KeyCompare implements Comparator<GrabKeyDialog.KeyBinding[]>
 		{
 			private final int col;
 
@@ -481,6 +642,89 @@ public class ShortcutsOptionPane extends AbstractOptionPane
 			}
 		}
 	} //}}}
+
+	//{{{ KeymapsModel class
+	private static class KeymapsModel extends AbstractListModel implements ComboBoxModel
+	{
+		private String[] keymaps;
+
+		private Object selectedItem;
+
+		//{{{ KeymapsModel() constructor
+		private KeymapsModel()
+		{
+			reset();
+		} //}}}
+
+		//{{{ reset() method
+		void reset()
+		{
+			KeymapManager keymapManager = jEdit.getKeymapManager();
+			Collection<String> keymapNames = keymapManager.getKeymapNames();
+			keymaps = keymapNames.toArray(new String[keymapNames.size()]);
+			if (!isValidName(selectedItem))
+				selectedItem = keymaps[0];
+			fireContentsChanged(this, 0, keymaps.length-1);
+		} //}}}
+
+		//{{{ getSize() method
+		@Override
+		public int getSize()
+		{
+			return keymaps.length;
+		} //}}}
+
+		//{{{ getElementAt() method
+		@Override
+		public Object getElementAt(int index)
+		{
+			return keymaps[index];
+		} //}}}
+
+		//{{{ setSelectedItem() method
+		@Override
+		public void setSelectedItem(Object anItem)
+		{
+			if (isValidName(anItem))
+				selectedItem = anItem;
+			else
+				selectedItem = keymaps[0];
+		} //}}}
+
+		//{{{ getSelectedItem() method
+		@Override
+		public Object getSelectedItem()
+		{
+			return selectedItem;
+		} //}}}
+
+		//{{{ isValidName() method
+		private boolean isValidName(Object name)
+		{
+			for (String keymap : keymaps)
+			{
+				if (keymap.equals(name))
+					return true;
+			}
+			return false;
+		} //}}}
+	} //}}}
+
+	//{{{ KeymapsModel class
+	private static class KeymapCellRenderer extends DefaultListCellRenderer
+	{
+		@Override
+		public Component getListCellRendererComponent(JList list, Object value, int index,
+							      boolean isSelected, boolean cellHasFocus)
+		{
+			super.getListCellRendererComponent(list, value, index, isSelected,
+								  cellHasFocus);
+			String label = jEdit.getProperty("keymaps." + value + ".label", String.valueOf(value));
+			setText(label);
+			return this;
+		}
+	} //}}}
+
 	//}}}
 	//}}}
 }
diff --git a/org/gjt/sp/jedit/options/StatusBarOptionPane.java b/org/gjt/sp/jedit/options/StatusBarOptionPane.java
index 94a1c43..1753077 100644
--- a/org/gjt/sp/jedit/options/StatusBarOptionPane.java
+++ b/org/gjt/sp/jedit/options/StatusBarOptionPane.java
@@ -32,12 +32,13 @@ import java.awt.*;
 import java.util.*;
 import org.gjt.sp.jedit.gui.*;
 import org.gjt.sp.jedit.*;
+
 //}}}
 
 /**
  * Status bar editor.
  * @author Matthieu Casanova
- * @version $Id: StatusBarOptionPane.java 21265 2012-03-07 21:12:58Z ezust $
+ * @version $Id: StatusBarOptionPane.java 21616 2012-04-30 08:32:24Z kpouer $
  */
 public class StatusBarOptionPane extends AbstractOptionPane
 {
@@ -297,17 +298,18 @@ public class StatusBarOptionPane extends AbstractOptionPane
 	//{{{ ActionHandler class
 	private class ActionHandler implements ActionListener
 	{
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			Object source = evt.getSource();
 
 			if(source == add)
 			{
-				String value = selectWidget();
-				if (value == null)
+				WidgetSelectionDialog dialog = new WidgetSelectionDialog(StatusBarOptionPane.this);
+				String value = dialog.getValue();
+				if (value == null || value.isEmpty())
 					return;
 
-
 				int index = list.getSelectedIndex();
 				if(index == -1)
 					index = listModel.getSize();
@@ -371,27 +373,19 @@ public class StatusBarOptionPane extends AbstractOptionPane
 				updatePreview();
 			}
 		}
-
-		private String selectWidget()
-		{
-			WidgetSelectionDialog dialog = new WidgetSelectionDialog(StatusBarOptionPane.this);
-			String value = dialog.getValue();
-			if (value != null && value.length() == 0)
-				value = null;
-			return value;
-		}
 	} //}}}
 
 	//{{{ ListHandler class
 	private class ListHandler implements ListSelectionListener
 	{
+		@Override
 		public void valueChanged(ListSelectionEvent evt)
 		{
 			updateButtons();
 		}
 	} //}}}
 
-	private class WidgetListCellRenderer extends DefaultListCellRenderer
+	private static class WidgetListCellRenderer extends DefaultListCellRenderer
 	{
 		@Override
 		public Component getListCellRendererComponent(JList list, Object value, int index,
@@ -412,14 +406,14 @@ public class StatusBarOptionPane extends AbstractOptionPane
 	//{{{ WidgetSelectionDialog class
 	private class WidgetSelectionDialog extends EnhancedDialog
 	{
-		private JButton ok;
-		private JButton cancel;
-		private JTextField labelField;
-		private JLabel labelLabel;
-		private JRadioButton labelRadio;
-		private JComboBox widgetCombo;
-		private JLabel widgetLabel;
-		private JRadioButton widgetRadio;
+		private final JButton ok;
+		private final JButton cancel;
+		private final JTextField labelField;
+		private final JLabel labelLabel;
+		private final JRadioButton labelRadio;
+		private final JComboBox widgetCombo;
+		private final JLabel widgetLabel;
+		private final JRadioButton widgetRadio;
 		private String value;
 
 		//{{{ WidgetSelectionDialog constructors
@@ -437,7 +431,7 @@ public class StatusBarOptionPane extends AbstractOptionPane
 
 			widgetLabel = new JLabel(jEdit.getProperty("options.status.edit.widgetLabel"));
 
-			String[] allWidgets = ServiceManager.getServiceNames("org.gjt.sp.jedit.gui.statusbar.StatusWidget");
+			String[] allWidgets = ServiceManager.getServiceNames("org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory");
 			Arrays.sort(allWidgets);
 			
 			boolean valueIsWidget = value != null && Arrays.binarySearch(allWidgets, value) >= 0;
@@ -560,6 +554,7 @@ public class StatusBarOptionPane extends AbstractOptionPane
 		private class ActionHandler implements ActionListener
 		{
 			//{{{ actionPerformed() method
+			@Override
 			public void actionPerformed(ActionEvent evt)
 			{
 				Object source = evt.getSource();
diff --git a/org/gjt/sp/jedit/options/TextAreaOptionPane.java b/org/gjt/sp/jedit/options/TextAreaOptionPane.java
index c141b00..84a0325 100644
--- a/org/gjt/sp/jedit/options/TextAreaOptionPane.java
+++ b/org/gjt/sp/jedit/options/TextAreaOptionPane.java
@@ -37,9 +37,10 @@ import org.gjt.sp.jedit.gui.ColorWellButton;
 import org.gjt.sp.jedit.gui.RolloverButton;
 //}}}
 
+
 /**
  * @author Slava Pestov
- * @version $Id: TextAreaOptionPane.java 18808 2010-10-21 20:54:15Z daleanson $
+ * @version $Id: TextAreaOptionPane.java 20953 2012-01-25 19:35:49Z ezust $
  */
 public class TextAreaOptionPane extends AbstractOptionPane
 {
@@ -57,14 +58,15 @@ public class TextAreaOptionPane extends AbstractOptionPane
 
 		addComponent(jEdit.getProperty("options.textarea.font"),font);
 
-		fontSubst = new JCheckBox(jEdit.getProperty("options.textarea.fontsubst"));
-		fontSubst.setToolTipText(jEdit.getProperty("options.textarea.fontsubst.tooltip"));
+		fontSubst = new JCheckBox(jEdit.getProperty("options.textarea.fontSubst"));
+		fontSubst.setToolTipText(jEdit.getProperty("options.textarea.fontSubst.tooltip"));
 		fontSubst.setSelected(jEdit.getBooleanProperty("view.enableFontSubst"));
 		fontSubst.addActionListener(new ActionListener()
 			{
 				public void actionPerformed(ActionEvent evt)
 				{
 					fontSubstList.setVisible(fontSubst.isSelected());
+					fontSubstSystemFonts.setVisible(fontSubst.isSelected());
 				}
 			});
 		addComponent(fontSubst);
@@ -73,8 +75,28 @@ public class TextAreaOptionPane extends AbstractOptionPane
 		fontSubstList.setVisible(fontSubst.isSelected());
 		addComponent(fontSubstList, GridBagConstraints.HORIZONTAL);
 
+		fontSubstSystemFonts = new JCheckBox(jEdit.getProperty("options.textarea.fontSubstSystemFonts"));
+		fontSubstSystemFonts.setSelected(jEdit.getBooleanProperty("view.enableFontSubstSystemFonts"));
+		fontSubstSystemFonts.setVisible(fontSubst.isSelected());
+		fontSubstSystemFonts.addActionListener(new ActionListener()
+			{
+				public void actionPerformed(ActionEvent evt)
+				{
+					if (!fontSubstSystemFonts.isSelected()
+						&& (fontSubstList.listSize() == 0))
+					{
+						JOptionPane.showMessageDialog(fontSubstSystemFonts.getParent(),
+							jEdit.getProperty("options.textarea.fontSubstWarning"),
+							jEdit.getProperty("options.textarea.fontSubstWarning.label"),
+							JOptionPane.WARNING_MESSAGE);
+					}
+				}
+			});
+		addComponent(fontSubstSystemFonts, GridBagConstraints.HORIZONTAL);
+
 		/* Anti-aliasing */
 		antiAlias = new JComboBox(AntiAlias.comboChoices);
+
 		antiAlias.setToolTipText(jEdit.getProperty("options.textarea.antiAlias.tooltip"));
 		AntiAlias antiAliasValue = new AntiAlias(jEdit.getProperty("view.antiAlias"));
 		font.setAntiAliasEnabled(antiAliasValue.val()>0);
@@ -98,7 +120,7 @@ public class TextAreaOptionPane extends AbstractOptionPane
 		addComponent(fracFontMetrics);
 
 		/* Extra line spacing */
-		IntegerInputVerifier integerInputVerifier = new IntegerInputVerifier();		
+		IntegerInputVerifier integerInputVerifier = new IntegerInputVerifier();
 		JPanel lineSpacingPanel = new JPanel();
 		lineSpacing = new JTextField(String.valueOf(jEdit.getIntegerProperty("options.textarea.lineSpacing", 0)));
 		lineSpacing.setColumns(4);
@@ -109,7 +131,7 @@ public class TextAreaOptionPane extends AbstractOptionPane
 		addComponent(lineSpacingPanel);
 
 		addSeparator();
-		
+
 		/* Text color */
 		addComponent(jEdit.getProperty("options.textarea.foreground"),
 			foregroundColor = new ColorWellButton(
@@ -201,7 +223,7 @@ public class TextAreaOptionPane extends AbstractOptionPane
 			GridBagConstraints.VERTICAL);
 
 		addSeparator();
-		
+
 		/* Electric borders */
 		electricBorders = new JCheckBox(jEdit.getProperty("options.textarea"
 			+ ".electricBorders"));
@@ -227,6 +249,8 @@ public class TextAreaOptionPane extends AbstractOptionPane
 		jEdit.setFontProperty("view.font",font.getFont());
 		jEdit.setBooleanProperty("view.enableFontSubst",fontSubst.isSelected());
 		fontSubstList.save();
+		jEdit.setBooleanProperty("view.enableFontSubstSystemFonts",
+			fontSubstSystemFonts.isSelected());
 
 		jEdit.setColorProperty("view.fgColor",foregroundColor
 			.getSelectedColor());
@@ -268,7 +292,7 @@ public class TextAreaOptionPane extends AbstractOptionPane
 		jEdit.setBooleanProperty("view.fracFontMetrics",fracFontMetrics.isSelected());
 		jEdit.setBooleanProperty("stripTrailingEOL", stripTrailingEOL.isSelected());
 		jEdit.setBooleanProperty("completeFromAllBuffers", completeFromAllBuffers.isSelected());
-		jEdit.setIntegerProperty("options.textarea.lineSpacing", 
+		jEdit.setIntegerProperty("options.textarea.lineSpacing",
 					 Integer.valueOf(lineSpacing.getText()));
 	} //}}}
 
@@ -276,6 +300,7 @@ public class TextAreaOptionPane extends AbstractOptionPane
 	private FontSelector font;
 	private JCheckBox fontSubst;
 	private FontList fontSubstList;
+	private JCheckBox fontSubstSystemFonts;
 	private ColorWellButton foregroundColor;
 	private ColorWellButton backgroundColor;
 	private JCheckBox blinkCaret;
@@ -321,7 +346,7 @@ public class TextAreaOptionPane extends AbstractOptionPane
 			setLayout(new BorderLayout());
 
 			/* Label. */
-			JLabel l = new JLabel(jEdit.getProperty("options.textarea.fontsubstlist"));
+			JLabel l = new JLabel(jEdit.getProperty("options.textarea.fontSubstList"));
 
 			/* Substitution font list. */
 			Font f;
@@ -430,6 +455,10 @@ public class TextAreaOptionPane extends AbstractOptionPane
 			}
 		}
 
+		public int listSize()
+		{
+			return fontsModel.size();
+		}
 
 		private DefaultListModel fontsModel;
 		private JList fonts;
diff --git a/org/gjt/sp/jedit/options/ToolBarOptionPane.java b/org/gjt/sp/jedit/options/ToolBarOptionPane.java
index 9686e14..4f15534 100644
--- a/org/gjt/sp/jedit/options/ToolBarOptionPane.java
+++ b/org/gjt/sp/jedit/options/ToolBarOptionPane.java
@@ -42,7 +42,7 @@ import org.gjt.sp.util.StandardUtilities;
 /**
  * Tool bar editor.
  * @author Slava Pestov
- * @version $Id: ToolBarOptionPane.java 18967 2010-11-15 23:22:36Z ezust $
+ * @version $Id: ToolBarOptionPane.java 20328 2011-11-13 05:59:59Z ezust $
  */
 public class ToolBarOptionPane extends AbstractOptionPane
 {
@@ -72,7 +72,7 @@ public class ToolBarOptionPane extends AbstractOptionPane
 
 		listModel = new DefaultListModel();
 		reloadButtonList(jEdit.getProperty("view.toolbar"));
-		
+
 		list = new JList(listModel);
 		list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 		list.addListSelectionListener(new ListHandler());
@@ -110,7 +110,7 @@ public class ToolBarOptionPane extends AbstractOptionPane
 		edit.addActionListener(actionHandler);
 		buttons.add(edit);
 		buttons.add(Box.createGlue());
-		
+
 		// add "reset to defaults" button
 		reset = new RolloverButton(GUIUtilities.loadIcon(jEdit.getProperty("options.toolbar.reset.icon")));
 		reset.setToolTipText(jEdit.getProperty("options.toolbar.reset"));
@@ -174,13 +174,13 @@ public class ToolBarOptionPane extends AbstractOptionPane
 		moveDown.setEnabled(index != -1 && index != listModel.getSize() - 1);
 		edit.setEnabled(index != -1);
 	} //}}}
-	
+
 	//{{{ reloadButtonList() method
 	private void reloadButtonList(String toolbar)
 	{
 		StringTokenizer st = new StringTokenizer(toolbar);
 		listModel.clear();
-		
+
 		while(st.hasMoreTokens())
 		{
 			String actionName = st.nextToken();
@@ -219,7 +219,7 @@ public class ToolBarOptionPane extends AbstractOptionPane
 		}
 	}
 	//}}}
-	
+
 	//}}}
 
 	//{{{ Inner classes
@@ -395,19 +395,19 @@ public class ToolBarOptionPane extends AbstractOptionPane
 				int result = GUIUtilities.confirm(list,dialogType,null,
 					JOptionPane.YES_NO_OPTION,
 					JOptionPane.WARNING_MESSAGE);
-				
+
 				if(result == JOptionPane.YES_OPTION)
 				{
-					// the user should be able to cancel the options dialog 
+					// the user should be able to cancel the options dialog
 					// so we need to modify the list, not the actual property
-					// since the default value is not available, 
+					// since the default value is not available,
 					// we reset, fetch default value and re-set to original
 					String orgToolbar = jEdit.getProperty("view.toolbar");
 					jEdit.resetProperty("view.toolbar");
 					String defaultToolbar = jEdit.getProperty("view.toolbar");
 					jEdit.setProperty("view.toolbar", orgToolbar);
 					reloadButtonList(defaultToolbar);
-					
+
 					// reset selection if user had more buttons than default
 					list.setSelectedIndex(0);
 					list.ensureIndexIsVisible(0);
@@ -770,6 +770,6 @@ class ToolBarEditDialog extends EnhancedDialog
 		{
 			return StandardUtilities.compareStrings(o1.getLabel(), o2.getLabel(), false);
 		}
-		
+
 	}
 } //}}}
diff --git a/org/gjt/sp/jedit/options/ViewOptionPane.java b/org/gjt/sp/jedit/options/ViewOptionPane.java
index 235e66b..31795ab 100644
--- a/org/gjt/sp/jedit/options/ViewOptionPane.java
+++ b/org/gjt/sp/jedit/options/ViewOptionPane.java
@@ -94,7 +94,7 @@ public class ViewOptionPane extends AbstractOptionPane
 		floatableToolbars.setSelected(jEdit.getBooleanProperty(
 			"view.toolbar.floatable"));
 		addComponent(floatableToolbars);
-		
+
 		/* Show full path */
 		showFullPath = new JCheckBox(jEdit.getProperty(
 			"options.view.showFullPath"));
@@ -203,7 +203,7 @@ public class ViewOptionPane extends AbstractOptionPane
 		jEdit.setBooleanProperty("view.showFullPath",showFullPath
 			.isSelected());
 		jEdit.setBooleanProperty("view.toolbar.floatable", floatableToolbars.isSelected());
-		
+
 		jEdit.setBooleanProperty("view.showSearchbar",showSearchbar
 			.isSelected());
 		jEdit.setBooleanProperty("search.beepOnSearchAutoWrap",beepOnSearchAutoWrap
diff --git a/org/gjt/sp/jedit/pluginmgr/InstallPanel.java b/org/gjt/sp/jedit/pluginmgr/InstallPanel.java
index 1a67a91..50461a8 100644
--- a/org/gjt/sp/jedit/pluginmgr/InstallPanel.java
+++ b/org/gjt/sp/jedit/pluginmgr/InstallPanel.java
@@ -61,7 +61,7 @@ import java.util.List;
 //}}}
 
 /**
- * @version $Id: InstallPanel.java 19765 2011-08-08 12:41:01Z kpouer $
+ * @version $Id: InstallPanel.java 21767 2012-06-05 13:09:28Z kpouer $
  */
 class InstallPanel extends JPanel implements EBComponent
 {
@@ -88,8 +88,7 @@ class InstallPanel extends JPanel implements EBComponent
 
 		setBorder(new EmptyBorder(12,12,12,12));
 
-		final JSplitPane split = new JSplitPane(
-			JSplitPane.VERTICAL_SPLIT, jEdit.getBooleanProperty("appearance.continuousLayout"));
+		final JSplitPane split = new JSplitPane(JSplitPane.VERTICAL_SPLIT);
 		split.setResizeWeight(0.75);
 		/* Setup the table */
 		table = new JTable(pluginModel = new PluginTableModel());
@@ -812,7 +811,7 @@ class InstallPanel extends JPanel implements EBComponent
 	/**
 	 * @TODO refactor to use the PluginDetailPanel?
 	 */
-	private class PluginInfoBox extends JTextPane implements ListSelectionListener
+	private class PluginInfoBox extends JEditorPane implements ListSelectionListener
 	{
 		private final String[] params;
 		PluginInfoBox()
@@ -820,10 +819,8 @@ class InstallPanel extends JPanel implements EBComponent
 			setBackground(jEdit.getColorProperty("view.bgColor"));
 			setForeground(jEdit.getColorProperty("view.fgColor"));
 			putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, true);
+			setContentType("text/html");
 			setEditable(false);
-			setEditorKit(new HTMLEditorKit());
-//			setLineWrap(true);
-//			setWrapStyleWord(true);
 			params = new String[3];
 			table.getSelectionModel().addListSelectionListener(this);
 		}
@@ -842,7 +839,6 @@ class InstallPanel extends JPanel implements EBComponent
 				params[2] = entry.description;
 				text = jEdit.getProperty("install-plugins.info", params);
 				text = text.replace("\n", "<br>");
-				text = "<html>" + text + "</html>";
 			}
 			setText(text);
 			setCaretPosition(0);
diff --git a/org/gjt/sp/jedit/pluginmgr/ManagePanel.java b/org/gjt/sp/jedit/pluginmgr/ManagePanel.java
index 4092365..c5257db 100644
--- a/org/gjt/sp/jedit/pluginmgr/ManagePanel.java
+++ b/org/gjt/sp/jedit/pluginmgr/ManagePanel.java
@@ -523,7 +523,11 @@ public class ManagePanel extends JPanel
 					if(value.equals(Boolean.FALSE))
 						return;
 
-					PluginJAR.load(entry.jar, true);
+					PluginJAR load = PluginJAR.load(entry.jar, true);
+					if (load == null)
+					{
+						GUIUtilities.error(ManagePanel.this, "plugin-load-error", null);
+					}
 				}
 				else
 				{
diff --git a/org/gjt/sp/jedit/pluginmgr/PluginList.java b/org/gjt/sp/jedit/pluginmgr/PluginList.java
index 72a07c6..bca5054 100644
--- a/org/gjt/sp/jedit/pluginmgr/PluginList.java
+++ b/org/gjt/sp/jedit/pluginmgr/PluginList.java
@@ -40,7 +40,7 @@ import org.gjt.sp.jedit.*;
 /**
  * Plugin list downloaded from server.
  * @since jEdit 3.2pre2
- * @version $Id: PluginList.java 20035 2011-10-01 16:28:09Z kerik-sf $
+ * @version $Id: PluginList.java 21741 2012-05-31 17:42:05Z k_satoda $
  */
 class PluginList
 {
@@ -73,9 +73,11 @@ class PluginList
 	
 	void readPluginList(boolean allowRetry)
 	{
-		gzipURL = jEdit.getProperty("plugin-manager.export-url");	
-		if (!id.equals(MirrorList.Mirror.NONE))
-			gzipURL += "?mirror="+id;		
+		String mirror = buildMirror(id);
+		if (mirror == null)
+			return;
+		gzipURL = jEdit.getProperty("plugin-manager.export-url");
+		gzipURL += "?mirror=" + mirror;
 		String path = null;
 		if (jEdit.getSettingsDirectory() == null)
 		{
@@ -598,4 +600,57 @@ class PluginList
 				+ ",to=" + to + ",plugin=" + plugin + ']';
 		}
 	} //}}}
+
+	//{{{ Private members
+
+	private static String buildMirror(String id)
+	{
+		if (id != null && !id.equals(MirrorList.Mirror.NONE))
+		{
+			return id;
+		}
+		try
+		{
+			return getAutoSelectedMirror();
+		}
+		catch (Exception e)
+		{
+			GUIUtilities.error(jEdit.getActiveView()
+				, "plugin-manager.list-download.mirror-autoselect-error"
+				, new Object[]{e});
+			Log.log(Log.DEBUG, PluginList.class, "Getting auto-selected mirror: error", e);
+		}
+		return null;
+	}
+
+	private static String getAutoSelectedMirror()
+		throws java.io.IOException
+	{
+		final String samplerUrl = "http://sourceforge.net/projects/jedit/files/latest/download";
+		final HttpURLConnection connection = (HttpURLConnection)((new URL(samplerUrl)).openConnection());
+		connection.setInstanceFollowRedirects(false);
+		final int response = connection.getResponseCode();
+		if (response != HttpURLConnection.HTTP_MOVED_TEMP)
+		{
+			throw new RuntimeException("Unexpected response: " + response + ": from " + samplerUrl);
+		}
+		final String redirected = connection.getHeaderField("Location");
+		if (redirected == null)
+		{
+			throw new RuntimeException("Missing Location header: " + samplerUrl);
+		}
+		final String prefix = "use_mirror=";
+		final int found = redirected.lastIndexOf(prefix);
+		if (found == -1)
+		{
+			throw new RuntimeException("Mirror prefix \"use_mirror\" was not found in redirected URL: " + redirected);
+		}
+		final int start = found + prefix.length();
+		final int end = redirected.indexOf('&', start);
+		return end != -1 ?
+			redirected.substring(start, end) :
+			redirected.substring(start);
+	}
+
+	//}}}
 }
diff --git a/org/gjt/sp/jedit/pluginmgr/PluginManager.java b/org/gjt/sp/jedit/pluginmgr/PluginManager.java
index 8060e5e..1d358cd 100644
--- a/org/gjt/sp/jedit/pluginmgr/PluginManager.java
+++ b/org/gjt/sp/jedit/pluginmgr/PluginManager.java
@@ -37,7 +37,7 @@ import org.gjt.sp.util.ThreadUtilities;
 //}}}
 
 /**
- * @version $Id: PluginManager.java 21267 2012-03-07 21:37:39Z ezust $
+ * @version $Id: PluginManager.java 21092 2012-02-08 09:48:48Z kpouer $
  */
 public class PluginManager extends JFrame
 {
diff --git a/org/gjt/sp/jedit/pluginmgr/Roster.java b/org/gjt/sp/jedit/pluginmgr/Roster.java
index ecf0eb2..91ac610 100644
--- a/org/gjt/sp/jedit/pluginmgr/Roster.java
+++ b/org/gjt/sp/jedit/pluginmgr/Roster.java
@@ -1,6 +1,6 @@
 /*
  * Roster.java - A list of things to do, used in various places
- * :tabSize=8:indentSize=8:noTabs=false:
+ * :tabSize=4:indentSize=4:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
  * Copyright (C) 2001, 2004 Slava Pestov
@@ -37,7 +37,7 @@ import static org.gjt.sp.jedit.io.FileVFS.recursiveDelete;
 //}}}
 
 /**
- * @author $Id: Roster.java 21669 2012-05-13 20:40:12Z ezust $
+ * @author $Id: Roster.java 21750 2012-06-02 12:34:56Z jarekczek $
  */
 class Roster
 {
@@ -330,6 +330,14 @@ class Roster
 						try
 						{
 							in = zipFile.getInputStream(entry);
+							// According to java 6/7 doc "in" should never be
+							// null, but it happens with filenames
+							// containing non-ascii characaters, #3531320
+							if (in == null)
+								throw new ZipException("Entry "
+									+ entry.getName() + " from archive "
+									+ zipFile.getName()
+									+ " could not be processed."); 
 							out = new FileOutputStream(file);
 							IOUtilities.copyStream(4096,
 								null,
diff --git a/org/gjt/sp/jedit/print/BufferPrinter1_3.java b/org/gjt/sp/jedit/print/BufferPrinter1_3.java
index 0d3bf55..9a9fd51 100644
--- a/org/gjt/sp/jedit/print/BufferPrinter1_3.java
+++ b/org/gjt/sp/jedit/print/BufferPrinter1_3.java
@@ -83,7 +83,7 @@ public class BufferPrinter1_3
 	public static void print(final View view, final Buffer buffer, boolean selection)
 	{
 		job = getPrintJob();
-		job.setJobName(buffer.getPath());
+		job.setJobName(MiscUtilities.abbreviate(buffer.getPath()));
 		boolean header = jEdit.getBooleanProperty("print.header");
 		boolean footer = jEdit.getBooleanProperty("print.footer");
 		boolean lineNumbers = jEdit.getBooleanProperty("print.lineNumbers");
diff --git a/org/gjt/sp/jedit/print/BufferPrinter1_4.java b/org/gjt/sp/jedit/print/BufferPrinter1_4.java
index 02acd94..d87ee4b 100644
--- a/org/gjt/sp/jedit/print/BufferPrinter1_4.java
+++ b/org/gjt/sp/jedit/print/BufferPrinter1_4.java
@@ -86,7 +86,7 @@ public class BufferPrinter1_4
 	//{{{ print() method
 	public static void print(final View view, final Buffer buffer, boolean selection)
 	{
-		job = getPrintJob(buffer.getPath());
+		job = getPrintJob(MiscUtilities.abbreviate(buffer.getPath()));
 
 		boolean header = jEdit.getBooleanProperty("print.header");
 		boolean footer = jEdit.getBooleanProperty("print.footer");
diff --git a/org/gjt/sp/jedit/search/BufferListSet.java b/org/gjt/sp/jedit/search/BufferListSet.java
index 4d09375..6081a3b 100644
--- a/org/gjt/sp/jedit/search/BufferListSet.java
+++ b/org/gjt/sp/jedit/search/BufferListSet.java
@@ -32,7 +32,7 @@ import org.gjt.sp.util.StandardUtilities;
 /**
  * A file set for searching a user-specified list of buffers.
  * @author Slava Pestov
- * @version $Id: BufferListSet.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: BufferListSet.java 21027 2012-01-30 21:41:40Z kpouer $
  */
 public abstract class BufferListSet implements SearchFileSet
 {
@@ -47,52 +47,29 @@ public abstract class BufferListSet implements SearchFileSet
 		else
 			return files[0];
 	} //}}}
-
-	//{{{ getNextFile() method
-	public synchronized String getNextFile(View view, String path)
+	
+	//{{{ getLastFile() method
+	public synchronized String getLastFile(View view)
 	{
 		if(files == null)
 			files = _getFiles(view);
 
 		if(files == null || files.length == 0)
 			return null;
-
-		if(path == null)
-		{
-			path = view.getBuffer().getSymlinkPath();
-			VFS vfs = VFSManager.getVFSForPath(path);
-			boolean ignoreCase = ((vfs.getCapabilities()
-				& VFS.CASE_INSENSITIVE_CAP) != 0);
-
-			for(int i = 0; i < files.length; i++)
-			{
-				if(StandardUtilities.compareStrings(
-					files[i],path,ignoreCase) == 0)
-				{
-					return path;
-				}
-			}
-
-			return getFirstFile(view);
-		}
 		else
-		{
-			// -1 so that the last isn't checked
-			VFS vfs = VFSManager.getVFSForPath(path);
-			boolean ignoreCase = ((vfs.getCapabilities()
-				& VFS.CASE_INSENSITIVE_CAP) != 0);
-
-			for(int i = 0; i < files.length - 1; i++)
-			{
-				if(StandardUtilities.compareStrings(
-					files[i],path,ignoreCase) == 0)
-				{
-					return files[i+1];
-				}
-			}
+			return files[files.length - 1];
+	} //}}}
 
-			return null;
-		}
+	//{{{ getNextFile() method
+	public synchronized String getNextFile(View view, String path)
+	{
+		return getPrevOrNextFile(view, path, Direction.NEXT);
+	} //}}}
+	
+	//{{{ getPrevFile() method
+	public synchronized String getPrevFile(View view, String path)
+	{
+		return getPrevOrNextFile(view, path, Direction.PREV);
 	} //}}}
 
 	//{{{ getFiles() method
@@ -132,6 +109,82 @@ public abstract class BufferListSet implements SearchFileSet
 		files = null;
 	} //}}}
 
+	//{{{ getPrevOrNextFile method()
+	private enum Direction {PREV, NEXT};
+	private String getPrevOrNextFile(View view, String path, Direction direction)
+	{
+		if(files == null)
+			files = _getFiles(view);
+
+		if(files == null || files.length == 0)
+			return null;
+
+		if(path == null)
+		{
+			path = view.getBuffer().getSymlinkPath();
+			VFS vfs = VFSManager.getVFSForPath(path);
+			boolean ignoreCase = ((vfs.getCapabilities()
+				& VFS.CASE_INSENSITIVE_CAP) != 0);
+
+			for(int i = 0; i < files.length; i++)
+			{
+				if(StandardUtilities.compareStrings(
+					files[i],path,ignoreCase) == 0)
+				{
+					return path;
+				}
+			}
+
+			if (direction == Direction.NEXT)
+			{
+				return getFirstFile(view);
+			}
+			else
+			{
+				return getLastFile(view);
+			}
+		}
+		else
+		{
+			// -1 so that the last isn't checked
+			VFS vfs = VFSManager.getVFSForPath(path);
+			boolean ignoreCase = ((vfs.getCapabilities()
+				& VFS.CASE_INSENSITIVE_CAP) != 0);
+			
+			if (direction == Direction.NEXT &&
+				StandardUtilities.compareStrings(files[files.length - 1],
+					path, ignoreCase) == 0)
+			{
+				// Going forward and already at the last file
+				return null;
+			}
+			else if (direction == Direction.PREV &&
+				StandardUtilities.compareStrings(files[0], path, ignoreCase) == 0)
+			{
+				// Going backward and already at the first file
+				return null;
+			}
+
+			for(int i = 0; i < files.length - 1; i++)
+			{
+				if(StandardUtilities.compareStrings(
+					files[i],path,ignoreCase) == 0)
+				{
+					if (direction == Direction.NEXT)
+						return files[i + 1];
+					else
+					{
+						if (i == 0)
+							return files[files.length - 1];
+						return files[i - 1];
+					}
+				}
+			}
+
+			return null;
+		}
+	} //}}}
+	
 	/**
 	 * Note that the paths in the returned list must be
 	 * fully canonicalized.
diff --git a/org/gjt/sp/jedit/search/CurrentBufferSet.java b/org/gjt/sp/jedit/search/CurrentBufferSet.java
index 9cd0189..810c14a 100644
--- a/org/gjt/sp/jedit/search/CurrentBufferSet.java
+++ b/org/gjt/sp/jedit/search/CurrentBufferSet.java
@@ -27,7 +27,7 @@ import org.gjt.sp.jedit.*;
 /**
  * A file set for searching the current buffer.
  * @author Slava Pestov
- * @version $Id: CurrentBufferSet.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: CurrentBufferSet.java 20610 2011-12-11 15:46:35Z evanpw $
  */
 public class CurrentBufferSet implements SearchFileSet
 {
@@ -36,6 +36,12 @@ public class CurrentBufferSet implements SearchFileSet
 	{
 		return view.getBuffer().getPath();
 	} //}}}
+	
+	//{{{ getLastFile() method
+	public String getLastFile(View view)
+	{
+		return view.getBuffer().getPath();
+	} //}}}
 
 	//{{{ getNextFile() method
 	public String getNextFile(View view, String file)
@@ -45,6 +51,15 @@ public class CurrentBufferSet implements SearchFileSet
 		else
 			return null;
 	} //}}}
+	
+	//{{{ getPrevFile() method
+	public String getPrevFile(View view, String file)
+	{
+		if(file == null)
+			return view.getBuffer().getPath();
+		else
+			return null;
+	} //}}}
 
 	//{{{ getFiles() method
 	public String[] getFiles(View view)
diff --git a/org/gjt/sp/jedit/search/HyperSearchResults.java b/org/gjt/sp/jedit/search/HyperSearchResults.java
index d55e2d4..5e8ce33 100644
--- a/org/gjt/sp/jedit/search/HyperSearchResults.java
+++ b/org/gjt/sp/jedit/search/HyperSearchResults.java
@@ -49,7 +49,7 @@ import org.gjt.sp.util.SyntaxUtilities;
 /**
  * HyperSearch results window.
  * @author Slava Pestov
- * @version $Id: HyperSearchResults.java 19788 2011-08-11 00:57:19Z Vampire0 $
+ * @version $Id: HyperSearchResults.java 20577 2011-12-08 09:19:23Z kpouer $
  */
 public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 {
@@ -131,6 +131,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	} //}}}
 
 	//{{{ focusOnDefaultComponent() method
+	@Override
 	public void focusOnDefaultComponent()
 	{
 		resultTree.requestFocus();
@@ -272,8 +273,9 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 		caption.setText(jEdit.getProperty("hypersearch-results.done",
 				new String [] { trimSearchString() }));
 
-		SwingUtilities.invokeLater(new Runnable()
+		EventQueue.invokeLater(new Runnable()
 		{
+			@Override
 			public void run()
 			{
 				if(!multiStatus)
@@ -338,7 +340,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	private void updateHighlightStatus()
 	{
 		String prop = jEdit.getProperty(HIGHLIGHT_PROP);
-		if (prop != null && prop.length() > 0)
+		if (prop != null && !prop.isEmpty())
 			highlight.setIcon(GUIUtilities.loadIcon(jEdit.getProperty("hypersearch-results.match.highlight.icon")));
 		else
 			highlight.setIcon(GUIUtilities.loadIcon(jEdit.getProperty("hypersearch-results.match.normal.icon")));
@@ -458,7 +460,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	} //}}}
 
 	//{{{ trimSearchString() method
-	private String trimSearchString()
+	private static String trimSearchString()
 	{
 		String s = SearchAndReplace.getSearchString();
 		int length = jEdit.getIntegerProperty("hypersearch.displayQueryLength", 100);
@@ -492,6 +494,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	//{{{ ActionHandler class
 	public class ActionHandler implements ActionListener
 	{
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			Object source = evt.getSource();
@@ -539,11 +542,11 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 		private String prop;
 		private String styleTag;
 
-		public HighlightingTree(DefaultTreeModel model)
+		HighlightingTree(DefaultTreeModel model)
 		{
 			super(model);
 			prop = jEdit.getProperty(HIGHLIGHT_PROP);
-			if (prop != null && prop.length() > 0)
+			if (prop != null && !prop.isEmpty())
 			{
 				Font f = (resultTree != null) ? resultTree.getFont() :
 					UIManager.getFont("Tree.font");
@@ -558,11 +561,10 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			String s = super.convertValueToText(value, selected, expanded, leaf,
 				row, hasFocus);
 			String newProp = jEdit.getProperty(HIGHLIGHT_PROP);
-			if (newProp == null || newProp.length() == 0)
+			if (newProp == null || newProp.isEmpty())
 				return s;
 			DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
-			while ((node != null) &&
-				   (! (node.getUserObject() instanceof HyperSearchOperationNode)))
+			while (node != null && !(node.getUserObject() instanceof HyperSearchOperationNode))
 			{
 				node = (DefaultMutableTreeNode) node.getParent();
 			}
@@ -606,8 +608,9 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 				goToSelectedNode(M_OPEN);
 
 				// fuck me dead
-				SwingUtilities.invokeLater(new Runnable()
+				EventQueue.invokeLater(new Runnable()
 				{
+					@Override
 					public void run()
 					{
 						resultTree.requestFocus();
@@ -721,6 +724,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			super(jEdit.getProperty("hypersearch-results.remove-node"));
 		}
 
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			removeSelectedNode();
@@ -735,6 +739,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			super(jEdit.getProperty("hypersearch-results.remove-all-nodes"));
 		}
 
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			removeAllNodes();
@@ -749,6 +754,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			super(jEdit.getProperty("hypersearch-results.new-search"));
 		}
 
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			TreePath path = resultTree.getSelectionPath();
@@ -773,6 +779,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			super(jEdit.getProperty("hypersearch-results.expand-child-nodes"));
 		}
 
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			TreePath path = resultTree.getSelectionPath();
@@ -789,6 +796,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			super(jEdit.getProperty("hypersearch-results.copy-to-clipboard"));
 		}
 
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			TreePath path = resultTree.getSelectionPath();
@@ -808,6 +816,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	{
 		StringBuilder nodesString = new StringBuilder();
 
+		@Override
 		public boolean processNode(DefaultMutableTreeNode node)
 		{
 			Object userObject = node.getUserObject();
@@ -821,7 +830,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			}
 			else
 				nodesString.append(userObject.toString());
-			nodesString.append(System.getProperty("line.separator"));
+			nodesString.append('\n');
 			return true;
 		}
 	}//}}}
@@ -834,6 +843,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			super(jEdit.getProperty("hypersearch-results.collapse-child-nodes"));
 		}
 
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			TreePath path = resultTree.getSelectionPath();
@@ -851,8 +861,8 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	//{{{ RedoSearchAction class
 	class RedoSearchAction extends AbstractAction
 	{
-		private HyperSearchOperationNode hyperSearchOperationNode;
-		public RedoSearchAction(HyperSearchOperationNode hyperSearchOperationNode)
+		private final HyperSearchOperationNode hyperSearchOperationNode;
+		RedoSearchAction(HyperSearchOperationNode hyperSearchOperationNode)
 		{
 			super(jEdit.getProperty("hypersearch-results.redo"));
 			this.hyperSearchOperationNode = hyperSearchOperationNode;
@@ -861,6 +871,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 		/**
 		 * Invoked when an action occurs.
 		 */
+		@Override
 		public void actionPerformed(ActionEvent e)
 		{
 			SearchAndReplace.setSearchString(hyperSearchOperationNode.getSearchString());
@@ -873,6 +884,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	//{{{ TreeDisplayAction class
 	class TreeDisplayAction extends AbstractAction
 	{
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			JCheckBoxMenuItem menuItem = (JCheckBoxMenuItem) evt.getSource();
@@ -941,6 +953,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 			this.mode = mode;
 		}
 
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			goToSelectedNode(mode);
@@ -1018,6 +1031,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 		{
 			int bufferCount;
 			int resultCount;
+			@Override
 			public boolean processNode(DefaultMutableTreeNode node)
 			{
 				Object userObject = node.getUserObject();
@@ -1068,6 +1082,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	//{{{ BufferLoadedVisitor class
 	static class BufferLoadedVisitor implements ResultVisitor
 	{
+		@Override
 		public void visit(Buffer buffer, HyperSearchResult result)
 		{
 			result.bufferOpened(buffer);
@@ -1077,6 +1092,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	//{{{ BufferClosedVisitor class
 	static class BufferClosedVisitor implements ResultVisitor
 	{
+		@Override
 		public void visit(Buffer buffer, HyperSearchResult result)
 		{
 			result.bufferClosed();
@@ -1086,6 +1102,7 @@ public class HyperSearchResults extends JPanel implements DefaultFocusComponent
 	//{{{ TreeNodeCallbackAdapter class
 	static class TreeNodeCallbackAdapter implements HyperSearchTreeNodeCallback
 	{
+		@Override
 		public boolean processNode(DefaultMutableTreeNode node)
 		{
 			return false;
diff --git a/org/gjt/sp/jedit/search/SearchAndReplace.java b/org/gjt/sp/jedit/search/SearchAndReplace.java
index dca8cf9..6c6a9cd 100644
--- a/org/gjt/sp/jedit/search/SearchAndReplace.java
+++ b/org/gjt/sp/jedit/search/SearchAndReplace.java
@@ -64,7 +64,7 @@ import org.gjt.sp.util.*;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: SearchAndReplace.java 19407 2011-02-28 14:07:12Z kpouer $
+ * @version $Id: SearchAndReplace.java 20610 2011-12-11 15:46:35Z evanpw $
  */
 public class SearchAndReplace
 {
@@ -467,8 +467,6 @@ public class SearchAndReplace
 			return false;
 		}
 
-		boolean _reverse = reverse && fileset instanceof CurrentBufferSet;
-
 		try
 		{
 			view.showWaitCursor();
@@ -498,7 +496,14 @@ loop:			for(;;)
 					 * it inside the buffer == null, or add
 					 * a 'finally' clause. you decide which one's
 					 * worse. */
-					path = fileset.getNextFile(view,path);
+					if (reverse)
+					{
+						path = fileset.getPrevFile(view, path);
+					}
+					else
+					{
+						path = fileset.getNextFile(view, path);
+					}
 
 					if(buffer == null)
 						continue loop;
@@ -516,17 +521,17 @@ loop:			for(;;)
 							textArea.getCaretPosition());
 						if(s == null)
 							start = textArea.getCaretPosition();
-						else if(_reverse)
+						else if(reverse)
 							start = s.getStart();
 						else
 							start = s.getEnd();
 					}
-					else if(_reverse)
+					else if(reverse)
 						start = buffer.getLength();
 					else
 						start = 0;
 
-					if(find(view,buffer,start,repeat,_reverse))
+					if(find(view,buffer,start,repeat,reverse))
 						return true;
 				}
 
@@ -568,7 +573,7 @@ loop:			for(;;)
 				}
 				else
 				{
-					Integer[] args = {Integer.valueOf(_reverse ? 1 : 0)};
+					Integer[] args = {Integer.valueOf(reverse ? 1 : 0)};
 					int result = GUIUtilities.confirm(comp,
 						"keepsearching",args,
 						JOptionPane.YES_NO_OPTION,
@@ -743,9 +748,8 @@ loop:			for(;;)
 				retVal += replaceInSelection(view,textArea,
 					buffer,matcher,smartCaseReplace,s);
 			}
-
-			boolean _reverse = !regexp && reverse && fileset instanceof CurrentBufferSet;
-			if(_reverse)
+			
+			if(reverse)
 			{
 				// so that Replace and Find continues from
 				// the right location
diff --git a/org/gjt/sp/jedit/search/SearchBar.java b/org/gjt/sp/jedit/search/SearchBar.java
index 07b3e44..9c811fb 100644
--- a/org/gjt/sp/jedit/search/SearchBar.java
+++ b/org/gjt/sp/jedit/search/SearchBar.java
@@ -36,7 +36,7 @@ import org.gjt.sp.util.Log;
 
 /**
  * Incremental search tool bar.
- * @version $Id: SearchBar.java 19366 2011-02-15 14:24:42Z kpouer $
+ * @version $Id: SearchBar.java 20196 2011-11-03 16:55:44Z kpouer $
  */
 public class SearchBar extends JToolBar
 {
@@ -109,6 +109,7 @@ public class SearchBar extends JToolBar
 		//{{{ Create the timer used by incremental search
 		timer = new Timer(0,new ActionListener()
 		{
+			@Override
 			public void actionPerformed(ActionEvent evt)
 			{
 				if(!incrementalSearch(searchStart,searchReverse))
@@ -160,7 +161,7 @@ public class SearchBar extends JToolBar
 	public void propertiesChanged()
 	{
 		// Option may have been changed
-		isRemovable = !(jEdit.getBooleanProperty("view.showSearchbar"));
+		isRemovable = !jEdit.getBooleanProperty("view.showSearchbar");
 		
 		Log.log(Log.DEBUG, this, "in SearchBar.propertiesChanged(), isRemovable = " + isRemovable);
 		
@@ -171,15 +172,18 @@ public class SearchBar extends JToolBar
 	//{{{ Private members
 
 	//{{{ Instance variables
-	private View view;
-	private HistoryTextField find;
-	private JCheckBox ignoreCase, regexp, hyperSearch, wholeWord;
-	private Timer timer;
+	private final View view;
+	private final HistoryTextField find;
+	private final JCheckBox ignoreCase;
+	private final JCheckBox regexp;
+	private final JCheckBox hyperSearch;
+	private final JCheckBox wholeWord;
+	private final Timer timer;
 	private boolean wasError;
-	private Color defaultBackground;
-	private Color defaultForeground;
-	private Color errorForeground;
-	private Color errorBackground;
+	private final Color defaultBackground;
+	private final Color defaultForeground;
+	private final Color errorForeground;
+	private final Color errorBackground;
 	// close button only there if 'isRemovable' is true
 	private RolloverButton close;
 
@@ -206,7 +210,7 @@ public class SearchBar extends JToolBar
 		{
 			if(isRemovable)
 			{
-				view.removeToolBar(SearchBar.this);
+				view.removeToolBar(this);
 			}
 			else
 				find.setText(null);
@@ -348,6 +352,7 @@ public class SearchBar extends JToolBar
 	class ActionHandler implements ActionListener
 	{
 		//{{{ actionPerformed() method
+		@Override
 		public void actionPerformed(ActionEvent evt)
 		{
 			Object source = evt.getSource();
@@ -386,6 +391,7 @@ public class SearchBar extends JToolBar
 	class DocumentHandler implements DocumentListener
 	{
 		//{{{ insertUpdate() method
+		@Override
 		public void insertUpdate(DocumentEvent evt)
 		{
 			// on insert, start search from beginning of
@@ -407,6 +413,7 @@ public class SearchBar extends JToolBar
 		} //}}}
 
 		//{{{ removeUpdate() method
+		@Override
 		public void removeUpdate(DocumentEvent evt)
 		{
 			// on backspace, restart from beginning
@@ -443,6 +450,7 @@ public class SearchBar extends JToolBar
 		} //}}}
 
 		//{{{ changedUpdate() method
+		@Override
 		public void changedUpdate(DocumentEvent evt) {}
 		//}}}
 	} //}}}
@@ -450,6 +458,7 @@ public class SearchBar extends JToolBar
 	//{{{ KeyHandler class
 	class KeyHandler extends KeyAdapter
 	{
+		@Override
 		public void keyPressed(KeyEvent evt)
 		{
 			switch(evt.getKeyCode())
@@ -476,6 +485,7 @@ public class SearchBar extends JToolBar
 	//{{{ FocusHandler class
 	class FocusHandler extends FocusAdapter
 	{
+		@Override
 		public void focusLost(FocusEvent e)
 		{
 			getField().addCurrentToHistory();
diff --git a/org/gjt/sp/jedit/search/SearchDialog.java b/org/gjt/sp/jedit/search/SearchDialog.java
index 87d4029..e95aba8 100644
--- a/org/gjt/sp/jedit/search/SearchDialog.java
+++ b/org/gjt/sp/jedit/search/SearchDialog.java
@@ -42,7 +42,7 @@ import org.gjt.sp.jedit.*;
 /**
  * Search and replace dialog.
  * @author Slava Pestov
- * @version $Id: SearchDialog.java 19386 2011-02-24 11:06:57Z kpouer $
+ * @version $Id: SearchDialog.java 20453 2011-11-28 20:24:27Z evanpw $
  */
 public class SearchDialog extends EnhancedDialog
 {
@@ -59,21 +59,16 @@ public class SearchDialog extends EnhancedDialog
 	//{{{ getSearchDialog() method
 	public static SearchDialog getSearchDialog(View view)
 	{
-		if(Debug.DISABLE_SEARCH_DIALOG_POOL)
-			return new SearchDialog(view);
-		else
+		SearchDialog searchDialog = viewHash.get(view);
+		if (searchDialog == null)
 		{
-
-			SearchDialog searchDialog = viewHash.get(view);
-			if (searchDialog == null)
-			{
-				searchDialog = new SearchDialog(view);
-				viewHash.put(view, searchDialog);
-			}
-			return searchDialog;
+			searchDialog = new SearchDialog(view);
+			viewHash.put(view, searchDialog);
 		}
+		
+		return searchDialog;
 	} //}}}
-
+	
 	//{{{ showSearchDialog() method
 	/**
 	 * Displays a search and replace dialog box, reusing an existing one
@@ -254,6 +249,17 @@ public class SearchDialog extends EnhancedDialog
 			load();
 	} //}}}
 
+	//{{{ setVisible() method
+	@Override
+	public void setVisible(boolean b)
+	{
+		super.setVisible(b);
+		if (!b && Debug.DISABLE_SEARCH_DIALOG_POOL)
+		{
+			dispose();
+		}
+	} //}}}
+	
 	//{{{ dispose() method
 	@Override
 	public void dispose()
diff --git a/org/gjt/sp/jedit/search/SearchFileSet.java b/org/gjt/sp/jedit/search/SearchFileSet.java
index e32d2cf..da26737 100644
--- a/org/gjt/sp/jedit/search/SearchFileSet.java
+++ b/org/gjt/sp/jedit/search/SearchFileSet.java
@@ -24,7 +24,7 @@ import org.gjt.sp.jedit.*;
 /**
  * An abstract interface representing a set of files.
  * @author Slava Pestov
- * @version $Id: SearchFileSet.java 12504 2008-04-22 23:12:43Z ezust $
+ * @version $Id: SearchFileSet.java 20610 2011-12-11 15:46:35Z evanpw $
  */
 public interface SearchFileSet
 {
@@ -33,6 +33,13 @@ public interface SearchFileSet
 	 * @param view The view performing the search
 	 */
 	String getFirstFile(View view);
+	
+	/**
+	 * Returns the last file to search.
+	 * @param view The view performing the search
+	 * @since jEdit 5.0
+	 */
+	String getLastFile(View view);
 
 	/**
 	 * Returns the next file to search.
@@ -40,6 +47,13 @@ public interface SearchFileSet
 	 * @param path The last file searched
 	 */
 	String getNextFile(View view, String path);
+	
+	/**
+	 * Returns the previous file in the set.
+	 * @param view The view performing the search
+	 * @param path The last file searched
+	 */
+	String getPrevFile(View view, String path);
 
 	/**
 	 * Returns all path names in this file set.
diff --git a/org/gjt/sp/jedit/services.xml b/org/gjt/sp/jedit/services.xml
index 9445a23..c1ee046 100644
--- a/org/gjt/sp/jedit/services.xml
+++ b/org/gjt/sp/jedit/services.xml
@@ -74,75 +74,80 @@
 
 
 	<!-- {{{ Status Bar widgets -->
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="mode">
-       import org.gjt.sp.jedit.gui.statusbar.*;
-       new ModeWidgetFactory();
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="mode">
+		import org.gjt.sp.jedit.gui.statusbar.*;
+		new ModeWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="fold">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="fold">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new FoldWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="encoding">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="encoding">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new EncodingWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="wrap">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="wrap">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new WrapWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="multiSelect">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="multiSelect">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new MultiSelectWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="rectSelect">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="rectSelect">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new RectSelectWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="overwrite">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="overwrite">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new OverwriteWidgetFactory();
 	</SERVICE>
+	
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="indent">
+		import org.gjt.sp.jedit.gui.statusbar.*;
+		new IndentWidgetFactory();
+	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="lineSep">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="lineSep">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new LineSepWidgetFactory();
 	</SERVICE>
 
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="memory-status">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="memory-status">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new MemoryStatusWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="clock">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="clock">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new ClockWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="errors">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="errors">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new ErrorsWidgetFactory();
 	</SERVICE>
 
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="buffersets">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="buffersets">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new BufferSetWidgetFactory();
 	</SERVICE>
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="selection-length">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="selection-length">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new SelectionLengthWidgetFactory();
 	</SERVICE>
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="last-modified">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="last-modified">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new LastModifiedWidgetFactory();
 	</SERVICE>
-	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidget" NAME="task-monitor">
+	<SERVICE CLASS="org.gjt.sp.jedit.gui.statusbar.StatusWidgetFactory" NAME="task-monitor">
 		import org.gjt.sp.jedit.gui.statusbar.*;
 		new TaskMonitorWidgetFactory();
 	</SERVICE>
@@ -165,4 +170,8 @@
 	<SERVICE CLASS="org.gjt.sp.jedit.gui.tray.JEditTrayIcon" NAME="swing">
 		new org.gjt.sp.jedit.gui.tray.JEditSwingTrayIcon();
 	</SERVICE>
+
+	<SERVICE CLASS="org.jedit.core.MigrationService" NAME="keymap">
+		new org.jedit.migration.KeymapMigration();
+	</SERVICE>
 </SERVICES>
diff --git a/org/gjt/sp/jedit/syntax/Chunk.java b/org/gjt/sp/jedit/syntax/Chunk.java
index 1bda3e1..31476a5 100644
--- a/org/gjt/sp/jedit/syntax/Chunk.java
+++ b/org/gjt/sp/jedit/syntax/Chunk.java
@@ -29,8 +29,10 @@ import java.awt.font.*;
 import java.awt.geom.*;
 import java.awt.*;
 import java.util.ArrayList;
-import java.util.LinkedList;
 import java.util.List;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.lang.ref.SoftReference;
 
 import org.gjt.sp.jedit.Debug;
 import org.gjt.sp.jedit.IPropertyManager;
@@ -43,10 +45,6 @@ import org.gjt.sp.jedit.IPropertyManager;
  */
 public class Chunk extends Token
 {
-	//{{{ Static variables
-	private static final char[] EMPTY_TEXT = new char[0];
-	//}}}
-
 	//{{{ paintChunkList() method
 	/**
 	 * Paints a chunk list.
@@ -79,12 +77,11 @@ public class Chunk extends Token
 						chunks.width,10));
 				}
 
-				if(chunks.accessable && chunks.visible)
+				if(chunks.isAccessible() && chunks.glyphs != null)
 				{
 					gfx.setFont(chunks.style.getFont());
 					gfx.setColor(chunks.style.getForegroundColor());
-
-					if (glyphVector && chunks.glyphs != null)
+					if (glyphVector)
 						chunks.drawGlyphs(gfx, x + _x, y);
 					else if(chunks.str != null)
 					{
@@ -129,7 +126,7 @@ public class Chunk extends Token
 			if(x + _x + chunks.width > clipRect.x
 				&& x + _x < clipRect.x + clipRect.width)
 			{
-				if(chunks.accessable)
+				if(chunks.isAccessible())
 				{
 					//{{{ Paint token background color if necessary
 					Color bgColor = chunks.background;
@@ -171,7 +168,7 @@ public class Chunk extends Token
 
 		while(chunks != null)
 		{
-			if(chunks.accessable && offset < chunks.offset + chunks.length)
+			if(chunks.isAccessible() && offset < chunks.offset + chunks.length)
 				return x + chunks.offsetToX(offset - chunks.offset);
 
 			x += chunks.width;
@@ -197,7 +194,7 @@ public class Chunk extends Token
 
 		while(chunks != null)
 		{
-			if(chunks.accessable && x < _x + chunks.width)
+			if(chunks.isAccessible() && x < _x + chunks.width)
 				return chunks.xToOffset(x - _x,round);
 
 			_x += chunks.width;
@@ -221,11 +218,13 @@ public class Chunk extends Token
 		if (props == null)
 		{
 			fontSubstEnabled = false;
+			fontSubstSystemFontsEnabled = true;
 			preferredFonts = null;
 		}
 		else
 		{
 			fontSubstEnabled = Boolean.parseBoolean(props.getProperty("view.enableFontSubst"));
+			fontSubstSystemFontsEnabled = Boolean.parseBoolean(props.getProperty("view.enableFontSubstSystemFonts"));
 		}
 
 
@@ -248,40 +247,122 @@ public class Chunk extends Token
 		}
 
 		preferredFonts = userFonts.toArray(new Font[userFonts.size()]);
+
+		// Clear cache, not to hold reference to old fonts which
+		// might become unused after properties changed.
+		glyphCache = null;
 	} //}}}
 
-	//{{{ Instance variables
-	public boolean accessable;
-	public boolean initialized;
+	//{{{ Package private members
 
+	//{{{ Instance variables
+	SyntaxStyle style;
 	// set up after init()
-	public SyntaxStyle style;
-	public float width;
+	float width;
 	//}}}
 
 	//{{{ Chunk constructor
-	public Chunk(float width, int offset, ParserRuleSet rules)
+	/**
+	 * Constructs a virtual indent appears at the beggining of a wrapped line.
+	 */
+	Chunk(float width, int offset, ParserRuleSet rules)
 	{
 		super(Token.NULL,offset,0,rules);
 		this.width = width;
+		assert !isAccessible();
+		assert isInitialized();
 	} //}}}
 
 	//{{{ Chunk constructor
-	public Chunk(byte id, int offset, int length, ParserRuleSet rules,
+	Chunk(byte id, int offset, int length, ParserRuleSet rules,
 		SyntaxStyle[] styles, byte defaultID)
 	{
 		super(id,offset,length,rules);
-		accessable = true;
 		style = styles[id];
 		background = style.getBackgroundColor();
 		if(background == null)
 			background = styles[defaultID].getBackgroundColor();
+		assert isAccessible();
+		assert !isInitialized();
+	} //}}}
+
+	//{{{ Chunk constructor
+	Chunk(byte id, int offset, int length, ParserRuleSet rules,
+		SyntaxStyle style, Color background)
+	{
+		super(id,offset,length,rules);
+		this.style = style;
+		this.background = background;
+		assert isAccessible();
+		assert !isInitialized();
+	} //}}}
+
+	//{{{ isAccessible() method
+	/**
+	 * Returns true if this chunk has accesible text.
+	 */
+	final boolean isAccessible()
+	{
+		return length > 0;
+	} //}}}
+
+	//{{{ isInitialized() method
+	/**
+	 * Returns true if this chunk is ready for painting.
+	 */
+	final boolean isInitialized()
+	{
+		return !isAccessible()	// virtual indent
+			|| (glyphs != null)	// normal text
+			|| (width > 0);	// tab
+	} //}}}
+
+	//{{{ isTab() method
+	/**
+	 * Returns true if this chunk represents a tab.
+	 */
+	final boolean isTab(Segment lineText)
+	{
+		return length == 1
+			&& lineText.array[lineText.offset + offset] == '\t';
+	} //}}}
+
+	//{{{ snippetBefore() method
+	/**
+	 * Returns a shorten uninitialized chunk before specific offset.
+	 */
+	final Chunk snippetBefore(int snipOffset)
+	{
+		assert 0 <= snipOffset && snipOffset < length;
+		return new Chunk(id, offset, snipOffset,
+			rules, style, background);
+	} //}}}
+
+	//{{{ snippetAfter() method
+	/**
+	 * Returns a shorten uninitialized chunk after specific offset.
+	 */
+	final Chunk snippetAfter(int snipOffset)
+	{
+		assert 0 <= snipOffset && snipOffset < length;
+		return new Chunk(id, offset + snipOffset, length - snipOffset,
+			rules, style, background);
+	} //}}}
+
+	//{{{ snippetBeforeLineOffset() method
+	/**
+	 * Returns a shorten uninitialized chunk before specific offset.
+	 * The offset is it in the line text, instead of in chunk.
+	 */
+	final Chunk snippetBeforeLineOffset(int lineOffset)
+	{
+		return snippetBefore(lineOffset - this.offset);
 	} //}}}
 
 	//{{{ offsetToX() method
-	public final float offsetToX(int offset)
+	final float offsetToX(int offset)
 	{
-		if(!visible || glyphs == null)
+		if(glyphs == null)
 			return 0.0f;
 
 		float x = 0.0f;
@@ -302,9 +383,9 @@ public class Chunk extends Token
 	} //}}}
 
 	//{{{ xToOffset() method
-	public final int xToOffset(float x, boolean round)
+	final int xToOffset(float x, boolean round)
 	{
-		if (!visible || glyphs == null)
+		if (glyphs == null)
 		{
 			if (round && width - x < x)
 				return offset + length;
@@ -346,65 +427,115 @@ public class Chunk extends Token
 	} //}}}
 
 	//{{{ init() method
-	public void init(Segment seg, TabExpander expander, float x,
+	void init(Segment lineText, TabExpander expander, float x,
 		FontRenderContext fontRenderContext, int physicalLineOffset)
 	{
-		initialized = true;
-
-		if(!accessable)
+		if(!isAccessible())
 		{
 			// do nothing
 		}
-		else if(length == 1 && seg.array[seg.offset + offset] == '\t')
+		else if(isTab(lineText))
 		{
-			visible = false;
 			float newX = expander.nextTabStop(x,physicalLineOffset+offset);
 			width = newX - x;
 		}
 		else
 		{
-			visible = true;
-
-			str = new String(seg.array,seg.offset + offset,length);
-
-			char[] textArray = seg.array;
-			int textStart = seg.offset + offset;
-			width = layoutGlyphs(fontRenderContext,
-					     textArray,
-					     textStart,
-					     textStart + length);
+			str = new String(lineText.array,lineText.offset + offset,length);
+			GlyphKey cacheKey = new GlyphKey(str,
+				style.getFont(), fontRenderContext);
+			GlyphCache cache = getGlyphCache();
+			GlyphVector[] cachedGlyphs = cache.get(cacheKey);
+			if (cachedGlyphs != null)
+			{
+				glyphs = cachedGlyphs;
+			}
+			else
+			{
+				int textStart = lineText.offset + offset;
+				int textEnd = textStart + length;
+				glyphs = layoutGlyphs(style.getFont(),
+					fontRenderContext,
+					lineText.array, textStart, textEnd);
+				cache.put(cacheKey, glyphs);
+			}
+			float w = 0.0f;
+			for (GlyphVector gv: glyphs)
+			{
+				w += (float)gv.getLogicalBounds().getWidth();
+			}
+			width = w;
 		}
+		assert isInitialized();
 	} //}}}
 
+	//}}}
+
 	//{{{ Private members
-	// this is either style.getBackgroundColor() or
-	// styles[defaultID].getBackgroundColor()
-	private Color background;
-	private String str;
-	//private GlyphVector gv;
-	private List<GlyphVector> glyphs;
-	private boolean visible;
+
+	//{{{ Static variables
+	private static final char[] EMPTY_TEXT = new char[0];
 
 	private static boolean fontSubstEnabled;
+	private static boolean fontSubstSystemFontsEnabled;
 	private static Font[] preferredFonts;
 	private static Font[] fontSubstList;
 
+	// This cache is meant to reduce calls of layoutGlyphVector(),
+	// which was an outclassing CPU bottleneck (profiled on jProfiler,
+	// Sun JDK 6, Windows XP).
+	//
+	// The capacity is roughly tuned so that the effect is clearly
+	// noticeable on very large random int table in C mode; like
+	// following:
+	//   int table000[100] = { 232, 190, 69, ..., 80, 246, 78 };
+	//   int table000[100] = { 69, 84, 206, ..., 160, 197, 161 };
+	//   ...
+	//   int table099[100] = { 219, 100, 60, ..., 100, 203, 8 };
+	//   int table100[100] = { 159, 189, 159, ..., 76, 9, 239, };
+	// and the additional heap usage is lower than 1 MB.
+	//
+	// Heap usage was measured as about 400 KB / 256 entries (JRE 7u3,
+	// Windows XP).
+	private static int glyphCacheCapacity = 256;
+	private static SoftReference<GlyphCache> glyphCache;
+
+	//}}}
+
+	//{{{ Instance variables
+	// this is either style.getBackgroundColor() or
+	// styles[defaultID].getBackgroundColor()
+	private Color background;
+	private String str;
+	private GlyphVector[] glyphs;
+	//}}}
+
 	//{{{ getFontSubstList() method
 	private static Font[] getFontSubstList()
 	{
 		if (fontSubstList == null)
 		{
-			Font[] systemFonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
+			if (fontSubstSystemFontsEnabled)
+			{
+				Font[] systemFonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts();
 
-			fontSubstList = new Font[preferredFonts.length +
-						 systemFonts.length];
+				fontSubstList = new Font[preferredFonts.length +
+							 systemFonts.length];
 
-			System.arraycopy(preferredFonts, 0, fontSubstList, 0,
-					 preferredFonts.length);
+				System.arraycopy(preferredFonts, 0, fontSubstList, 0,
+						 preferredFonts.length);
+
+				System.arraycopy(systemFonts, 0, fontSubstList,
+						 preferredFonts.length,
+						 systemFonts.length);
+			}
+			else
+			{
+				fontSubstList = new Font[preferredFonts.length];
 
-			System.arraycopy(systemFonts, 0, fontSubstList,
-					 preferredFonts.length,
-					 systemFonts.length);
+				System.arraycopy(preferredFonts, 0, fontSubstList, 0,
+						 preferredFonts.length);
+			}
 		}
 		return fontSubstList;
 	} //}}}
@@ -434,7 +565,6 @@ public class Chunk extends Token
 		return null;
 	} //}}}
 
-
 	//{{{ drawGlyphs() method
 	/**
 	 * Draws the internal list of glyph vectors into the given
@@ -455,48 +585,34 @@ public class Chunk extends Token
 		}
 	} //}}}
 
-	//{{{ addGlyphVector() method
+	//{{{ layoutGlyphVector() method
 	/**
-	 * Creates a glyph vector for the text with the given font,
-	 * and adds it to the internal list.
-	 *
-	 * @param	font	Font to use for rendering.
-	 * @param	frc	Font rendering context.
-	 * @param	text	Char array with text to render.
-	 * @param	start	Start index of text to render.
-	 * @param	end	End index of text to render.
-	 *
-	 * @return Width of the rendered text.
+	 * A wrapper of Font.layoutGlyphVector() to simplify the calls.
 	 */
-	private float addGlyphVector(
-		Font font, FontRenderContext frc,
+	private static GlyphVector layoutGlyphVector(Font font,
+		FontRenderContext frc,
 		char[] text, int start, int end)
 	{
 		// FIXME: Need BiDi support.
-		int layoutFlags = Font.LAYOUT_LEFT_TO_RIGHT
+		int flags = Font.LAYOUT_LEFT_TO_RIGHT
 			| Font.LAYOUT_NO_START_CONTEXT
 			| Font.LAYOUT_NO_LIMIT_CONTEXT;
 
-		GlyphVector gv = font.layoutGlyphVector(frc,
-						     text,
-						     start,
-						     end,
-						     layoutFlags);
+		GlyphVector result =
+			font.layoutGlyphVector(frc, text, start, end, flags);
 
 		// This is necessary to work around a memory leak in Sun Java 6 where
 		// the sun.font.GlyphLayout is cached and reused while holding an
 		// instance to the char array.
-		font.layoutGlyphVector(frc, EMPTY_TEXT, 0, 0, layoutFlags);
+		font.layoutGlyphVector(frc, EMPTY_TEXT, 0, 0, flags);
 
-		glyphs.add(gv);
-		return (float) gv.getLogicalBounds().getWidth();
+		return result;
 	} // }}}
 
 	//{{{ layoutGlyphs() method
 	/**
 	 * Layout the glyphs to render the given text, applying font
-	 * substitution if configured. GlyphVectors are created and
-	 * added to the internal glyph list.
+	 * substitution if configured.
 	 *
 	 * Font substitution works in the following manner:
 	 *	- All characters that can be rendered with the main
@@ -507,63 +623,225 @@ public class Chunk extends Token
 	 *
 	 * The user can define his list of preferred fonts, which will
 	 * be tried before the system fonts.
-	 *
-	 * @param	frc	Font rendering context.
-	 * @param	text	Char array with text to render.
-	 * @param	start	Start index of text to render.
-	 * @param	end	End index of text to render.
-	 *
-	 * @return Width of the rendered text.
 	 */
-	private float layoutGlyphs(FontRenderContext frc,
-				   char[] text,
-				   int start,
-				   int end)
+	private static GlyphVector[] layoutGlyphs(Font mainFont,
+		FontRenderContext frc,
+		char[] text, int start, int end)
 	{
-		float width = 0.0f;
-		Font mainFont = style.getFont();
-
-		glyphs = new LinkedList<GlyphVector>();
+		int substStart = !fontSubstEnabled ? -1
+			: mainFont.canDisplayUpTo(text, start, end);
+		if (substStart == -1)
+		{
+			GlyphVector gv = layoutGlyphVector(mainFont, frc,
+				text, start, end);
+			return new GlyphVector[] {gv};
+		}
+		else
+		{
+			FontSubstitution subst = new FontSubstitution(
+				mainFont, frc, text, start);
+			subst.addNonSubstRange(substStart - start);
+			doFontSubstitution(subst, mainFont,
+				text, substStart, end);
+			subst.finish();
+			return subst.getGlyphs();
+		}
+	} //}}}
 
-		while (start < end)
+	//{{{ doFontSubstitution() method
+	private static void doFontSubstitution(FontSubstitution subst,
+		Font mainFont,
+		char[] text, int start, int end)
+	{
+		for (;;)
 		{
-			int substStart = !fontSubstEnabled ? -1
-				: mainFont.canDisplayUpTo(text, start, end);
-			if (substStart == -1)
+			assert start < end;
+			int nextChar = Character.codePointAt(text, start);
+			int charCount = Character.charCount(nextChar);
+			assert !mainFont.canDisplay(nextChar);
+			Font substFont = getSubstFont(nextChar);
+			if (substFont != null)
+			{
+				subst.addRange(substFont, charCount);
+			}
+			else
+			{
+				subst.addNonSubstRange(charCount);
+			}
+			start += charCount;
+			if (start >= end)
 			{
-				width += addGlyphVector(
-					mainFont, frc, text, start, end);
 				break;
 			}
-			if (substStart > start)
+			int nextSubstStart =
+				mainFont.canDisplayUpTo(text, start, end);
+			if (nextSubstStart == -1)
 			{
-				width += addGlyphVector(
-					mainFont, frc, text, start, substStart);
+				subst.addNonSubstRange(end - start);
+				break;
 			}
-			int nextChar = Character.codePointAt(text, substStart);
-			Font substFont = getSubstFont(nextChar);
-			int substEnd = substStart + Character.charCount(nextChar);
-			if (substFont != null)
+			subst.addNonSubstRange(nextSubstStart - start);
+			start = nextSubstStart;
+		}
+	} //}}}
+
+	//{{{ class FontSubstitution
+	// A helper class to build GlyphVector[] with least calls to
+	// layoutGlyphVector() no matter how many the font substitution
+	// logic find intermediate boundaries.
+	private static class FontSubstitution
+	{
+		public FontSubstitution(Font mainFont, FontRenderContext frc,
+			char[] text, int start)
+		{
+			this.mainFont = mainFont;
+			this.frc = frc;
+			this.text = text;
+			rangeStart = start;
+			rangeFont = null;
+			rangeLength = 0;
+			glyphs = new ArrayList<GlyphVector>();
+		}
+
+		public void addNonSubstRange(int length)
+		{
+			addRange(null, length);
+		}
+
+		private void addRange(Font font, int length)
+		{
+			assert length >= 0;
+			if (length == 0)
 			{
-				while (substEnd < end &&
-					!mainFont.canDisplay(nextChar = Character.codePointAt(text, substEnd)) &&
-					substFont == getSubstFont(nextChar))
-				{
-					substEnd += Character.charCount(nextChar);
-				}
-				width += addGlyphVector(
-					substFont.deriveFont(mainFont.getStyle(),
-						mainFont.getSize()), frc,
-					text, substStart, substEnd);
+				return;
+			}
+			if (font == rangeFont)
+			{
+				rangeLength += length;
 			}
 			else
 			{
-				width += addGlyphVector(
-					mainFont, frc, text, substStart, substEnd);
+				addGlyphVectorOfLastRange();
+				rangeFont = font;
+				rangeStart += rangeLength;
+				rangeLength = length;
 			}
-			start = substEnd;
 		}
-		return width;
+
+		public void finish()
+		{
+			addGlyphVectorOfLastRange();
+			rangeFont = null;
+			rangeStart += rangeLength;
+			rangeLength = 0;
+		}
+
+		public GlyphVector[] getGlyphs()
+		{
+			return glyphs.toArray(new GlyphVector[glyphs.size()]);
+		}
+
+		private final Font mainFont;
+		private final FontRenderContext frc;
+		private final char[] text;
+		private int rangeStart;
+		private Font rangeFont;
+		private int rangeLength;
+		private final ArrayList<GlyphVector> glyphs;
+
+		private void addGlyphVectorOfLastRange()
+		{
+			if (rangeLength == 0)
+			{
+				return;
+			}
+			Font font = (rangeFont == null) ?
+				mainFont :
+				rangeFont.deriveFont(mainFont.getStyle(),
+					mainFont.getSize());
+			GlyphVector gv = layoutGlyphVector(font, frc,
+				text, rangeStart, rangeStart + rangeLength);
+			glyphs.add(gv);
+		}
+	} //}}}
+
+	//{{{ getGlyphCache() method
+	private static GlyphCache getGlyphCache()
+	{
+		if (glyphCache != null)
+		{
+			GlyphCache cache = glyphCache.get();
+			if (cache != null)
+			{
+				return cache;
+			}
+		}
+		GlyphCache newOne = new GlyphCache(glyphCacheCapacity);
+		glyphCache = new SoftReference<GlyphCache>(newOne);
+		return newOne;
+	} //}}}
+
+	//{{{ class GlyphKey
+	private static class GlyphKey
+	{
+		public final String token;
+		public final Font font;
+		public final FontRenderContext context;
+
+		GlyphKey(String token, Font font, FontRenderContext context)
+		{
+			assert token != null;
+			assert font != null;
+			assert context != null;
+			this.token = token;
+			this.font = font;
+			this.context = context;
+		}
+
+		@Override
+		public final int hashCode()
+		{
+			return token.hashCode()
+				+ font.hashCode()
+				+ context.hashCode();
+		}
+
+		@Override
+		public final boolean equals(Object otherObject)
+		{
+			// should be called only from GlyphCache to
+			// compare with other keys, then explicit type
+			// checking and null checking are not necessary.
+			GlyphKey other = (GlyphKey)otherObject;
+			return token.equals(other.token)
+				&& font.equals(other.font)
+				&& context.equals(other.context);
+		}
+
+		@Override
+		public final String toString()
+		{
+			return token;
+		}
+	} //}}}
+
+	//{{{ class GlyphCache
+	private static class GlyphCache extends LinkedHashMap<GlyphKey, GlyphVector[]>
+	{
+		public GlyphCache(int capacity)
+		{
+			// Avoid rehashing with known limit.
+			super(capacity + 1, 1.0f, true/*accessOrder*/);
+			this.capacity = capacity;
+		}
+
+		@Override
+		protected boolean removeEldestEntry(Map.Entry<GlyphKey, GlyphVector[]> eldest)
+		{
+			return size() > capacity;
+		}
+
+		private final int capacity;
 	} //}}}
 
 	//}}}
diff --git a/org/gjt/sp/jedit/syntax/DisplayTokenHandler.java b/org/gjt/sp/jedit/syntax/DisplayTokenHandler.java
index 1595813..cff998e 100644
--- a/org/gjt/sp/jedit/syntax/DisplayTokenHandler.java
+++ b/org/gjt/sp/jedit/syntax/DisplayTokenHandler.java
@@ -1,7 +1,7 @@
 /*
  * DisplayTokenHandler.java - converts tokens to chunks
  * :tabSize=8:indentSize=8:noTabs=false:
- * :folding=explicit:collapseFolds=1:
+ * :folding=explicit:collapseFolds=1:encoding=utf-8:
  *
  * Copyright (C) 2003 Slava Pestov
  *
@@ -26,17 +26,16 @@ package org.gjt.sp.jedit.syntax;
 import javax.swing.text.*;
 import java.awt.font.*;
 import java.util.List;
+import java.text.BreakIterator;
+import java.text.CharacterIterator;
 //}}}
 
 /**
  * Creates {@link Chunk} objects that can be painted on screen.
- * @version $Id: DisplayTokenHandler.java 19480 2011-03-22 14:08:05Z kpouer $
+ * @version $Id: DisplayTokenHandler.java 21688 2012-05-19 19:44:16Z k_satoda $
  */
 public class DisplayTokenHandler extends DefaultTokenHandler
 {
-	// don't have chunks longer than 100 characters to avoid slowing things down
-	public static final int MAX_CHUNK_LEN = 100;
-
 	//{{{ init() method
 	/**
 	 * Init some variables that will be used when marking tokens.
@@ -57,13 +56,10 @@ public class DisplayTokenHandler extends DefaultTokenHandler
 		float wrapMargin, int physicalLineOffset)
 	{
 		super.init();
-
-		x = 0.0f;
-
 		this.styles = styles;
 		this.fontRenderContext = fontRenderContext;
 		this.expander = expander;
-		this.physicalLineOffset = physicalLineOffset;
+		this.out = out;
 
 		// SILLY: allow for anti-aliased characters' "fuzz"
 		if(wrapMargin != 0.0f)
@@ -71,16 +67,14 @@ public class DisplayTokenHandler extends DefaultTokenHandler
 		else
 			this.wrapMargin = 0.0f;
 
-		this.out = out;
-
-		seenNonWhitespace = false;
-		endX = endOfWhitespace = 0.0f;
-		end = null;
+		this.physicalLineOffset = physicalLineOffset;
 	} //}}}
 
 	//{{{ getChunkList() method
 	/**
 	 * Returns the list of chunks.
+	 * Each element is a head of linked chunks and represents a
+	 * screen line.
 	 * @since jEdit 4.1pre7
 	 */
 	public List<Chunk> getChunkList()
@@ -105,80 +99,71 @@ public class DisplayTokenHandler extends DefaultTokenHandler
 	{
 		if(id == Token.END)
 		{
-			if(firstToken != null)
-				out.add(merge((Chunk)firstToken,seg));
+			makeScreenLine(seg);
 			return;
 		}
 
-		for(int splitOffset = 0; splitOffset < length; splitOffset += MAX_CHUNK_LEN)
+		// first branch to avoid unnecessary instansiation of
+		// BreakIterator.
+		if(length <= MAX_CHUNK_LEN)
 		{
-			int splitLength = Math.min(length - splitOffset,MAX_CHUNK_LEN);
-			Chunk chunk = createChunk(id,offset + splitOffset,splitLength,context);
-			addToken(chunk,context);
+			Chunk chunk = createChunk(id, offset, length, context);
+			addToken(chunk, context);
+			return;
+		}
 
-			if(wrapMargin != 0.0f)
+		// split the token but at character breaks not to affect
+		// the result of painting.
+		final BreakIterator charBreaker = BreakIterator.getCharacterInstance();
+		charBreaker.setText(seg);
+		final int tokenBeinIndex = seg.offset + offset;
+		final int tokenEndIndex = tokenBeinIndex + length;
+		int splitOffset = 0;
+		do
+		{
+			final int beginIndex = tokenBeinIndex + splitOffset;
+			int charBreakIndex = charBreaker.preceding(beginIndex + MAX_CHUNK_LEN + 1);
+			// {{{ care for unrealistic case, to be complete ...
+			// There must be a char break at beginning of token.
+			assert charBreakIndex != BreakIterator.DONE;
+			if(charBreakIndex <= beginIndex)
 			{
-				initChunk(chunk,seg, physicalLineOffset);
-				x += chunk.width;
-
-				if(Character.isWhitespace(seg.array[
-					seg.offset + chunk.offset]))
+				// try splitting after the limit, to
+				// make the chunk shorter anyway.
+				charBreakIndex = charBreaker.following(beginIndex + MAX_CHUNK_LEN);
+				// There must be a char break at end of token.
+				assert charBreakIndex != BreakIterator.DONE;
+				if(charBreakIndex >= tokenEndIndex)
 				{
-					if(seenNonWhitespace)
-					{
-						end = lastToken;
-						endX = x;
-					}
-					else
-						endOfWhitespace = x;
-				}
-				else
-				{
-					if(x > wrapMargin
-						&& end != null
-						&& seenNonWhitespace)
-					{
-						Chunk nextLine = new Chunk(endOfWhitespace,
-							end.offset + end.length,
-							getParserRuleSet(context));
-						initChunk(nextLine,seg,  physicalLineOffset);
-
-						nextLine.next = end.next;
-						end.next = null;
-
-						if(firstToken != null)
-							out.add(merge((Chunk)firstToken,seg));
-
-						firstToken = nextLine;
-
-						x = x - endX + endOfWhitespace;
-
-						end = null;
-						endX = x;
-					}
-
-					seenNonWhitespace = true;
+					// can't split
+					break;
 				}
-			}
+			} //}}}
+			final int splitLength = charBreakIndex - beginIndex;
+			Chunk chunk = createChunk(id, offset + splitOffset,
+					splitLength, context);
+			addToken(chunk, context);
+			splitOffset += splitLength;
 		}
+		while(splitOffset + MAX_CHUNK_LEN < length);
+		Chunk chunk = createChunk(id, offset + splitOffset,
+				length - splitOffset, context);
+		addToken(chunk, context);
 	} //}}}
 
 	//{{{ Private members
 
+	// Don't have chunks longer than a limit to avoid slowing things down.
+	// For example, too long chunks are hardly clipped out at rendering.
+	private static final int MAX_CHUNK_LEN = 100;
+
 	//{{{ Instance variables
 	private SyntaxStyle[] styles;
 	private FontRenderContext fontRenderContext;
 	private TabExpander expander;
-	private float x;
-	private int physicalLineOffset;
-
 	private List<Chunk> out;
 	private float wrapMargin;
-	private float endX;
-	private Token end;
-
-	private boolean seenNonWhitespace;
-	private float endOfWhitespace;
+	private int physicalLineOffset;
 	//}}}
 
 	//{{{ createChunk() method
@@ -191,59 +176,511 @@ public class DisplayTokenHandler extends DefaultTokenHandler
 	} //}}}
 
 	//{{{ initChunk() method
-	protected void initChunk(Chunk chunk, Segment seg, int physicalLineOffset)
+	private void initChunk(Chunk chunk, float x, Segment lineText)
 	{
-		chunk.init(seg,expander,x,fontRenderContext, physicalLineOffset);
+		chunk.init(lineText,expander,x,fontRenderContext, physicalLineOffset);
 	} //}}}
 
-	//{{{ merge() method
-	private Chunk merge(Chunk first, Segment seg)
+	//{{{ initChunks() method
+	private float initChunks(Chunk lineHead, Segment lineText)
 	{
-		if(first == null)
-			return null;
+		float x = 0.0f;
+		for(Chunk chunk = lineHead; chunk != null; chunk = (Chunk)chunk.next)
+		{
+			initChunk(chunk, x, lineText);
+			x += chunk.width;
+		}
+		return x;
+	} //}}}
 
-		Chunk chunk = first;
+	//{{{ mergeAdjucentChunks() method
+	/**
+	 * Merges each adjucent chunks if possible, to reduce the number
+	 * of chunks for rendering performance.
+	 */
+	private void mergeAdjucentChunks(Chunk lineHead, Segment lineText)
+	{
+		Chunk chunk = lineHead;
 		while(chunk.next != null)
 		{
 			Chunk next = (Chunk)chunk.next;
-			if(canMerge(chunk,next,seg))
+			if(canMerge(chunk,next,lineText))
 			{
-				// in case already initialized; un-initialize it
-				chunk.initialized = false;
 				chunk.length += next.length;
-				chunk.width += next.width;
 				chunk.next = next.next;
 			}
 			else
 			{
-				if(!chunk.initialized)
+				chunk = next;
+			}
+		}
+	} //}}}
+
+	//{{{ canMerge() method
+	private static boolean canMerge(Chunk c1, Chunk c2, Segment lineText)
+	{
+		return c1.style == c2.style
+			&& c1.isAccessible() && !c1.isTab(lineText)
+			&& c2.isAccessible() && !c2.isTab(lineText)
+			&& (c1.length + c2.length) <= MAX_CHUNK_LEN;
+	} //}}}
+
+	//{{{ makeWrappedLine() method
+	private Chunk makeWrappedLine(Chunk lineHead,
+		float virtualIndentWidth, Segment lineText)
+	{
+		if(virtualIndentWidth > 0)
+		{
+			final Chunk virtualIndent = new Chunk(virtualIndentWidth,
+				lineHead.offset, lineHead.rules);
+			initChunk(virtualIndent, 0, lineText);
+			virtualIndent.next = lineHead;
+			return virtualIndent;
+		}
+		else
+		{
+			return lineHead;
+		}
+	} //}}}
+
+	//{{{ recalculateTabWidth() method
+	// Returns true if all chunks are recaluculated and the total
+	// width fits in wrap margin.
+	private boolean recalculateTabWidthInWrapMargin(Chunk lineHead, Segment lineText)
+	{
+		float x = 0.0f;
+		for(Chunk chunk = lineHead; chunk != null; chunk = (Chunk)chunk.next)
+		{
+			if(chunk.isTab(lineText))
+			{
+				initChunk(chunk, x, lineText);
+			}
+			x += chunk.width;
+			if(x > wrapMargin)
+			{
+				return false;
+			}
+		}
+		return true;
+	} //}}}
+
+	//{{{ endOffsetOfWhitespaces() method
+	private static int endOffsetOfWhitespaces(Segment lineText, int origin)
+	{
+		int offset = origin;
+		while((offset < lineText.count)
+			&& Character.isWhitespace(
+				lineText.array[lineText.offset + offset]))
+		{
+			++offset;
+		}
+		return offset;
+	} //}}}
+
+	//{{{ makeScreenLineInWrapMargin() method
+	/**
+	 * Do the main job for soft wrap feature.
+	 */
+	private void makeScreenLineInWrapMargin(Chunk lineHead, Segment lineText)
+	{
+		final int endOfWhitespace = endOffsetOfWhitespaces(lineText, 0);
+		final float virtualIndentWidth = Chunk.offsetToX(lineHead, endOfWhitespace);
+		final LineBreaker lineBreaker = new LineBreaker(lineText, endOfWhitespace);
+		if(lineBreaker.currentBreak() == LineBreaker.DONE)
+		{
+			// There is no line break. Can't wrap.
+			out.add(lineHead);
+			return;
+		}
+		for(;;)
+		{
+			final int offsetInMargin = Chunk.xToOffset(lineHead, wrapMargin, false);
+			assert offsetInMargin != -1;
+			lineBreaker.skipToNearest(endOffsetOfWhitespaces(
+						lineText, offsetInMargin));
+			final int lineBreak = lineBreaker.currentBreak();
+			if(lineBreak == LineBreaker.DONE)
+			{
+				// There is no more line break. Can't wrap.
+				out.add(lineHead);
+				return;
+			}
+			lineBreaker.advance();
+			Chunk linePreEnd = null;
+			Chunk lineEnd = lineHead;
+			float endX = 0.0f;
+			while((lineEnd.offset + lineEnd.length) < lineBreak)
+			{
+				endX += lineEnd.width;
+				linePreEnd = lineEnd;
+				lineEnd = (Chunk)lineEnd.next;
+			}
+			if((lineEnd.offset + lineEnd.length) == lineBreak)
+			{
+				final Token nextHead = lineEnd.next;
+				lineEnd.next = null;
+				out.add(lineHead);
+				if(nextHead == null)
 				{
-					initChunk(chunk,seg, physicalLineOffset);
-					if(wrapMargin == 0.0f)
-						x += chunk.width;
+					return;
 				}
-				chunk = next;
+				lineHead = (Chunk)nextHead;
+			}
+			else
+			{
+				final Chunk shortened = lineEnd.snippetBeforeLineOffset(lineBreak);
+				initChunk(shortened, endX, lineText);
+				if(linePreEnd != null)
+				{
+					linePreEnd.next = shortened;
+				}
+				else
+				{
+					lineHead = shortened;
+				}
+				out.add(lineHead);
+				Chunk remaining = lineEnd.snippetAfter(shortened.length);
+				// {{{ The remaining chunk may be split again.
+				// To avoid quadratic repeatation of initChunk() which happens when the
+				// wrap margin is too small or the virtual space is too wide, split it
+				// using an assumption that the split at a line break doesn't change
+				// the widths of parts before and after the break.
+				final float remainingRoom = wrapMargin - virtualIndentWidth;
+				float processedWidth = shortened.width;
+				while (lineEnd.width - processedWidth > remainingRoom
+					&& lineBreaker.currentBreak() != LineBreaker.DONE
+					&& lineBreaker.currentBreak() < (remaining.offset + remaining.length))
+				{
+					final int offsetInRoom = lineEnd.xToOffset(processedWidth + remainingRoom, false);
+					assert offsetInRoom != -1;
+					lineBreaker.skipToNearest(endOffsetOfWhitespaces(
+								lineText, offsetInRoom));
+					final int moreBreak = lineBreaker.currentBreak();
+					assert moreBreak != LineBreaker.DONE;
+					if (moreBreak >= (remaining.offset + remaining.length))
+					{
+						// This can happen if remaining ends with whitespaces.
+						break;
+					}
+					lineBreaker.advance();
+					final Chunk moreShortened = remaining.snippetBeforeLineOffset(moreBreak);
+					initChunk(moreShortened, virtualIndentWidth, lineText);
+					out.add(makeWrappedLine(moreShortened, virtualIndentWidth, lineText));
+					remaining = remaining.snippetAfter(moreShortened.length);
+					processedWidth += moreShortened.width;
+				}
+				//}}}
+				initChunk(remaining, virtualIndentWidth, lineText);
+				remaining.next = lineEnd.next;
+				lineHead = remaining;
+			}
+			lineHead = makeWrappedLine(lineHead, virtualIndentWidth, lineText);
+			if(recalculateTabWidthInWrapMargin(lineHead, lineText))
+			{
+				// Fits in the margin. No more need to wrap.
+				out.add(lineHead);
+				return;
 			}
 		}
+	} //}}}
 
-		if(!chunk.initialized)
-			initChunk(chunk,seg, physicalLineOffset);
+	//{{{ makeScreenLine() method
+	private void makeScreenLine(Segment lineText)
+	{
+		if(firstToken == null)
+		{
+			assert out.isEmpty();
+		}
+		else
+		{
+			Chunk lineHead = (Chunk)firstToken;
+			mergeAdjucentChunks(lineHead, lineText);
+			float endX = initChunks(lineHead, lineText);
+			if(wrapMargin > 0.0f && endX > wrapMargin)
+			{
+				makeScreenLineInWrapMargin(lineHead, lineText);
+			}
+			else
+			{
+				out.add(lineHead);
+			}
+		}
+	} //}}}
+
+	//{{{ class LineBreaker
+	private static class LineBreaker
+	{
+		public static final int DONE = -1;
+
+		public LineBreaker(Segment lineText, int startOffset)
+		{
+			iterator = new LineBreakIterator();
+			iterator.setText(lineText);
+			offsetOrigin = lineText.offset;
+			current = (startOffset < lineText.count)
+					? iterator.following(offsetOrigin
+							+ startOffset)
+					: BreakIterator.DONE;
+			next = (current != BreakIterator.DONE)
+					? iterator.next()
+					: BreakIterator.DONE;
+		}
+
+		public int currentBreak()
+		{
+			return outerOffset(current);
+		}
+
+		public void advance()
+		{
+			current = next;
+			next = iterator.next();
+		}
+
+		public void skipToNearest(int offset)
+		{
+			while(next != BreakIterator.DONE
+				&& ((next - offsetOrigin) <= offset))
+			{
+				advance();
+			}
+		}
 
-		return first;
+		//{{{ Private members
+		private final BreakIterator iterator;
+		private final int offsetOrigin;
+		private int current;
+		private int next;
+
+		private int outerOffset(int iteratorOffset)
+		{
+			return (iteratorOffset != BreakIterator.DONE)
+					? (iteratorOffset - offsetOrigin)
+					: DONE;
+		}
+		//}}}
 	} //}}}
 
-	//{{{ canMerge() method
-	private static boolean canMerge(Chunk c1, Chunk c2, Segment seg)
+	//{{{ class LineBreakIterator
+	/**
+	 * Custom break iterator to unify jEdit's line breaking rules
+	 * and natural language rules.
+	 */
+	private static class LineBreakIterator extends BreakIterator
 	{
-		if(!c1.accessable || !c2.accessable)
-			return false;
+		public LineBreakIterator()
+		{
+			base = BreakIterator.getLineInstance();
+		}
+
+		private LineBreakIterator(LineBreakIterator other)
+		{
+			base = (BreakIterator)(other.base.clone());
+		}
+
+		@Override
+		public Object clone()
+		{
+			return new LineBreakIterator(this);
+		}
+
+		@Override
+		public int current()
+		{
+			int baseBreak = base.current();
+			if (isAcceptableBreak(baseBreak))
+			{
+				return baseBreak;
+			}
+			// can have reached the end of text during
+			// baseOrNext() or baseOrPrevious() which returned
+			// DONE.
+			// Here, current() should return last() or first()
+			// based on which was the last direction.
+			return (base.next() == DONE) ? last() : first();
+		}
+
+		@Override
+		public int first()
+		{
+			return baseOrNext(base.first());
+		}
+
+		@Override
+		public int following(int offset)
+		{
+			return baseOrNext(base.following(offset));
+		}
+
+		@Override
+		public CharacterIterator getText()
+		{
+			return base.getText();
+		}
+
+		@Override
+		public int last()
+		{
+			return baseOrPrevious(base.last());
+		}
+
+		@Override
+		public int next()
+		{
+			return baseOrNext(base.next());
+		}
+
+		@Override
+		public int next(int n)
+		{
+			while (n > 1)
+			{
+				if (next() == DONE)
+					return DONE;
+				--n;
+			}
+			return next();
+		}
+
+		@Override
+		public int previous()
+		{
+			return baseOrPrevious(base.previous());
+		}
+
+		@Override
+		public void setText(CharacterIterator newText)
+		{
+			base.setText(newText);
+			baseOrNext(base.first());
+		}
+
+		private final BreakIterator base;
+
+		private int baseOrNext(int baseBreak)
+		{
+			while(!isAcceptableBreak(baseBreak))
+				baseBreak = base.next();
+			return baseBreak;
+		}
+
+		private int baseOrPrevious(int baseBreak)
+		{
+			while(!isAcceptableBreak(baseBreak))
+				baseBreak = base.previous();
+			return baseBreak;
+		}
+
+		private boolean isAcceptableBreak(int baseBreak)
+		{
+			if (baseBreak == DONE)
+				return true;
+			CharacterIterator text = getText();
+			if (baseBreak <= text.getBeginIndex() || baseBreak > text.getEndIndex())
+				return true;
+			// get characters surrounding the break without
+			// altering the current index of underlying text.
+			int originalIndex = text.getIndex();
+			char next = text.setIndex(baseBreak);
+			char prev = text.previous();
+			text.setIndex(originalIndex);
+			// When breaking at whitespace, jEdit treat the
+			// whitespaces as belonging to the previous line and
+			// make them editable.
+			return !Character.isWhitespace(next)
+				// Assuming that breaking without white spaces
+				// are wanted only for some natural languages
+				// which uses non-ASCII characters. Otherwise
+				// keep traditional jEdit behavior (break only
+				// at whitespaces).
+				&& (Character.isWhitespace(prev)
+					|| prev > 0x7f || next > 0x7f)
+				// Workarounds for the problem reported at
+				// - SF.net bug #3497312; Unexpected softwrap
+				//   in contracted words with ’ as apostrophe.
+				// - SF.net bug #3488310; unexpected soft wrap
+				//   happens at closing "“".
+				// Probably the cause is in the implementation
+				// of BreakIterator for line breaks. Some
+				// similer problems are also reported in
+				// bugs.sun.com.
+				// http://www.google.co.jp/search?q=site%3Abugs.sun.com+BreakIterator+getLineInstance
+				// There seems to be some problems in handling
+				// of quotation marks.
+				&& !(prev == '’'
+					// This test excludes CJK characters
+					// which may come after a closing
+					// quote.
+					&& (Character.isLowerCase(next)
+						|| Character.isUpperCase(next)))
+				&& !isUnacceptableBreakInsideQuote(baseBreak,
+					text, prev, next);
+		}
 
-		char ch1 = seg.array[seg.offset + c1.offset];
-		char ch2 = seg.array[seg.offset + c2.offset];
+		// Retrieves char at specified index without altering
+		// the current index of CharacterIterator.
+		private static char charAt(CharacterIterator text, int index)
+		{
+			int originalIndex = text.getIndex();
+			char c = text.setIndex(index);
+			text.setIndex(originalIndex);
+			return c;
+		}
 
-		return ((c1.style == c2.style)
-			&& ch1 != '\t' && ch2 != '\t'
-			&& (c1.length + c2.length <= MAX_CHUNK_LEN));
+		private static boolean isUnacceptableBreakInsideQuote(
+			int baseBreak, CharacterIterator text,
+			char prev, char next)
+		{
+			// The following quotation marks are accumulated
+			// cases that exhibits the problem under a local
+			// test on JRE 7u3 with samples taken from Wikipedia.
+			// http://en.wikipedia.org/wiki/Non-English_usage_of_quotation_marks
+			//
+			// The last check for enclosing whitespace avoids
+			// unwanted rejection of line breaks in CJK text
+			// (which don't have such whitespace) where default
+			// behavior of BreakIterator is reasonable.
+			//
+			if ("”’»›".indexOf(prev) >= 0
+				&& !Character.isWhitespace(next))
+			{
+				int beforeQuote = baseBreak - 2;
+				int beginIndex = text.getBeginIndex();
+				while (beforeQuote >= beginIndex)
+				{
+					char c = charAt(text, beforeQuote);
+					if (Character.isWhitespace(c))
+						return true;
+					if (Character.isLetterOrDigit(c))
+						return false;
+					// Look farther in case where the
+					// opening quote is enclosed by
+					// something like a opening parenthesis.
+					--beforeQuote;
+				}
+				return true;
+			}
+			else if (!Character.isWhitespace(prev)
+					&& "“„‘‚«‹".indexOf(next) >= 0)
+			{
+				int afterQuote = baseBreak + 1;
+				int endIndex = text.getEndIndex();
+				while (afterQuote < endIndex)
+				{
+					char c = charAt(text, afterQuote);
+					if (Character.isWhitespace(c))
+						return true;
+					if (Character.isLetterOrDigit(c))
+						return false;
+					// Look farther in case where the
+					// closing quote is enclosed by
+					// something like a closing parenthesis.
+					++afterQuote;
+				}
+				return true;
+			}
+			return false;
+		}
 	} //}}}
 
 	//}}}
diff --git a/org/gjt/sp/jedit/syntax/ModeProvider.java b/org/gjt/sp/jedit/syntax/ModeProvider.java
index fec1319..81b1cea 100644
--- a/org/gjt/sp/jedit/syntax/ModeProvider.java
+++ b/org/gjt/sp/jedit/syntax/ModeProvider.java
@@ -51,17 +51,12 @@ public class ModeProvider
 {
 	public static ModeProvider instance = new ModeProvider();
 
-	private LinkedHashMap<String, Mode> modes = new LinkedHashMap<String, Mode>(180);
-
-	// any mode that is added that is already in the 'modes' map is added here. These
-	// 'override' modes are modes loaded from outside of the standard issue catalog files.
-	private LinkedHashMap<String, Mode> overrideModes = new LinkedHashMap<String, Mode>(20);
+	private final LinkedHashMap<String, Mode> modes = new LinkedHashMap<String, Mode>(180);
 
 	//{{{ removeAll() method
 	public void removeAll()
 	{
 		modes.clear();
-		overrideModes.clear();
 	} //}}}
 
 	//{{{ getMode() method
@@ -72,12 +67,7 @@ public class ModeProvider
 	 */
 	public Mode getMode(String name)
 	{
-		Mode mode = overrideModes.get(name);
-		if (mode == null)
-		{
-			mode = modes.get(name);
-		}
-		return mode;
+		return modes.get(name);
 	} //}}}
 
 	//{{{ getModeForFile() method
@@ -104,39 +94,27 @@ public class ModeProvider
 	 */
 	public Mode getModeForFile(String filepath, String filename, String firstLine)
 	{
-		if ((filepath != null) && filepath.endsWith(".gz"))
+		if (filepath != null && filepath.endsWith(".gz"))
 			filepath = filepath.substring(0, filepath.length() - 3);
-		if ((filename != null) && filename.endsWith(".gz"))
+		if (filename != null && filename.endsWith(".gz"))
 			filename = filename.substring(0, filename.length() - 3);
 
 		List<Mode> acceptable = new ArrayList<Mode>();
-
-		// First check overrideModes as these are user supplied modes.
-		// User modes have priority.
-		for(Mode mode : overrideModes.values())
+		for(Mode mode : modes.values())
 		{
 			if(mode.accept(filepath, filename, firstLine))
 			{
 				acceptable.add(mode);
 			}
 		}
-		if (acceptable.size() == 0)
-		{
-			// no user modes were acceptable, so check standard modes.
-			for(Mode mode : modes.values())
-			{
-				if(mode.accept(filepath, filename, firstLine))
-				{
-					acceptable.add(mode);
-				}
-			}
-		}
 		if (acceptable.size() == 1)
 		{
 			return acceptable.get(0);
 		}
 		if (acceptable.size() > 1)
 		{
+			// The check should be in reverse order so that
+			// modes from the user catalog get checked first!
 			Collections.reverse(acceptable);
 
 			// the very most acceptable mode is one whose file
@@ -175,7 +153,6 @@ public class ModeProvider
 		return null;
 	} //}}}
 
-
 	//{{{ getModes() method
 	/**
 	 * Returns an array of installed edit modes.
@@ -183,12 +160,7 @@ public class ModeProvider
 	 */
 	public Mode[] getModes()
 	{
-		Mode[] array = new Mode[modes.size() + overrideModes.size()];
-		Mode[] standard = modes.values().toArray(new Mode[0]);
-		Mode[] override = overrideModes.values().toArray(new Mode[0]);
-		System.arraycopy(standard, 0, array, 0, standard.length);
-		System.arraycopy(override, 0, array, standard.length, override.length);
-		return array;
+		return modes.values().toArray(new Mode[modes.size()]);
 	} //}}}
 
 	//{{{ addMode() method
@@ -201,15 +173,13 @@ public class ModeProvider
 	 */
 	public void addMode(Mode mode)
 	{
-		if (modes.get(mode.getName()) != null)
-		{
-			overrideModes.put(mode.getName(), mode);
-			modes.remove(mode.getName());
-		}
-		else
-		{
-			modes.put(mode.getName(), mode);
-		}
+		String name = mode.getName();
+
+		// The removal makes the "insertion order" in modes
+		// (LinkedHashMap) follow the order of addMode() calls.
+		modes.remove(name);
+
+		modes.put(name, mode);
 	} //}}}
 
 	//{{{ loadMode() method
diff --git a/org/gjt/sp/jedit/syntax/TokenMarker.java b/org/gjt/sp/jedit/syntax/TokenMarker.java
index b4200ea..a88eea1 100644
--- a/org/gjt/sp/jedit/syntax/TokenMarker.java
+++ b/org/gjt/sp/jedit/syntax/TokenMarker.java
@@ -40,7 +40,7 @@ import org.gjt.sp.util.StandardUtilities;
  * or font style for painting that token.
  *
  * @author Slava Pestov, mike dillon
- * @version $Id: TokenMarker.java 21339 2012-03-12 05:39:19Z ezust $
+ * @version $Id: TokenMarker.java 21285 2012-03-09 15:46:47Z k_satoda $
  *
  * @see org.gjt.sp.jedit.syntax.Token
  * @see org.gjt.sp.jedit.syntax.TokenHandler
diff --git a/org/gjt/sp/jedit/syntax/XModeHandler.java b/org/gjt/sp/jedit/syntax/XModeHandler.java
index aed1bbb..804d4a5 100644
--- a/org/gjt/sp/jedit/syntax/XModeHandler.java
+++ b/org/gjt/sp/jedit/syntax/XModeHandler.java
@@ -39,7 +39,7 @@ import org.gjt.sp.util.XMLUtilities;
 
 /**
  * XML handler for mode definition files.
- * @version $Id: XModeHandler.java 19412 2011-03-01 15:07:08Z kpouer $
+ * @version $Id: XModeHandler.java 21612 2012-04-28 16:49:03Z k_satoda $
  */
 public abstract class XModeHandler extends DefaultHandler
 {
@@ -372,7 +372,17 @@ public abstract class XModeHandler extends DefaultHandler
 			{
 				byte token = Token.stringToToken(tag.tagName);
 				if(token != -1)
-					addKeyword(tag.lastKeyword.toString(),token);
+				{
+					if (tag.lastKeyword == null
+						|| tag.lastKeyword.length() == 0)
+					{
+						error("empty-keyword", null);
+					}
+					else
+					{
+						addKeyword(tag.lastKeyword.toString(),token);
+					}
+				}
 			} //}}}
 		}
 		else
@@ -474,12 +484,6 @@ public abstract class XModeHandler extends DefaultHandler
 	//{{{ addKeyword() method
 	private void addKeyword(String k, byte id)
 	{
-		if(k == null)
-		{
-			error("empty-keyword",null);
-			return;
-		}
-
 		if (keywords == null) return;
 		keywords.add(k,id);
 	} //}}}
diff --git a/org/gjt/sp/jedit/textarea/ColumnBlock.java b/org/gjt/sp/jedit/textarea/ColumnBlock.java
index dfeb6bb..10e85bf 100644
--- a/org/gjt/sp/jedit/textarea/ColumnBlock.java
+++ b/org/gjt/sp/jedit/textarea/ColumnBlock.java
@@ -40,7 +40,7 @@ public class ColumnBlock extends Rect implements Node
 
 	private JEditBuffer buffer;
 
-	private boolean isDirty = false;
+	private boolean isDirty;
 
 	@Override
 	//{{{ addChild() method
@@ -49,7 +49,6 @@ public class ColumnBlock extends Rect implements Node
 		// must add the children in sorted order
 		ColumnBlock block = (ColumnBlock) node;
 		ColumnBlock blockBelow = searchChildren(block.startLine);
-		int index = -1;
 		if (blockBelow != null)
 		{
 			if (blockBelow.isLineWithinThisBlock(block.endLine) >= 0)
@@ -57,7 +56,7 @@ public class ColumnBlock extends Rect implements Node
 				throw new IllegalArgumentException("Overlapping column blocks: "
 					+ block + " \n&\n" + blockBelow);
 			}
-			index = children.indexOf(blockBelow);
+			int index = children.indexOf(blockBelow);
 			children.add(index, node);
 		}
 		else
@@ -127,12 +126,14 @@ public class ColumnBlock extends Rect implements Node
 	}//}}}
 
 	//{{{  getStartLine() method
+	@Override
 	public int getStartLine()
 	{
 		return startLine;
 	}//}}}
 
 	//{{{  getEndLine() method
+	@Override
 	public int getEndLine()
 	{
 		return endLine;
@@ -165,24 +166,22 @@ public class ColumnBlock extends Rect implements Node
 	public ColumnBlock getContainingBlock(int line, int offset)
 	{
 		ColumnBlock retBlock = null;
-		int relativeOffset = -1;
-		if ((line >= startLine) && (line <= endLine))
+		if (line >= startLine && line <= endLine)
 		{
-			relativeOffset = offset - buffer.getLineStartOffset(line);
-			if ((lines != null) && (lines.size() > 0))
+			int relativeOffset = offset - buffer.getLineStartOffset(line);
+			if (lines != null && !lines.isEmpty())
 			{
-				ColumnBlockLine blockLine = (ColumnBlockLine) (lines.get(line
-					- startLine));
-				if ((blockLine.getColumnEndIndex() >= relativeOffset)
-					&& (blockLine.getColumnStartIndex() <= relativeOffset))
+				ColumnBlockLine blockLine = lines.get(line - startLine);
+				if (blockLine.getColumnEndIndex() >= relativeOffset
+					&& blockLine.getColumnStartIndex() <= relativeOffset)
 				{
 					retBlock = this;
 				}
 			}
-			if ((retBlock == null) && (children != null) && (children.size() > 0))
+			if (retBlock == null && children != null && !children.isEmpty())
 			{
 				ColumnBlock block = searchChildren(line);
-				if ((block != null) && (block.isLineWithinThisBlock(line) == 0))
+				if (block != null && block.isLineWithinThisBlock(line) == 0)
 				{
 					retBlock = block.getContainingBlock(line, offset);
 				}
@@ -199,30 +198,29 @@ public class ColumnBlock extends Rect implements Node
 			return null;
 		}
 		// int tabSize=-5;
-		ColumnBlock colBlock = null;
 		synchronized (buffer.columnBlockLock)
 		{
-			if ((line >= startLine) && (line <= endLine))
+			ColumnBlock colBlock = null;
+			if (line >= startLine && line <= endLine)
 			{
-				if ((lines != null) && (lines.size() > 0))
+				if (lines != null && !lines.isEmpty())
 				{
-					ColumnBlockLine blockLine = (ColumnBlockLine) (lines
-						.get(line - startLine));
-					if ((blockLine.getColumnEndIndex() + buffer
-						.getLineStartOffset(line)) == offset)
+					ColumnBlockLine blockLine = lines.get(line - startLine);
+					if (blockLine.getColumnEndIndex() + buffer
+						.getLineStartOffset(line) == offset)
 					{
 						// tabSize =
 						// blockLine.getTabSize();
 						colBlock = this;
 					}
 				}
-				if ((colBlock == null) && (children != null)
-					&& (children.size() > 0))
+				if (colBlock == null && children != null
+					&& !children.isEmpty())
 				{
 					ColumnBlock block = searchChildren(line, 0,
 						children.size() - 1);
-					if ((block == null)
-						|| (block.isLineWithinThisBlock(line) != 0))
+					if (block == null
+						|| block.isLineWithinThisBlock(line) != 0)
 					{
 						throwException(offset, line);
 					}
@@ -243,7 +241,7 @@ public class ColumnBlock extends Rect implements Node
 	//{{{ searchChildren() method
 	public ColumnBlock searchChildren(int line)
 	{
-		if ((children != null) && (children.size() > 0))
+		if (children != null && !children.isEmpty())
 		{
 			return searchChildren(line, 0, children.size() - 1);
 		}
@@ -280,7 +278,7 @@ public class ColumnBlock extends Rect implements Node
 			}
 			else if (found > 0)
 			{
-				if ((children.size() - 1) > currentSearchIndex)
+				if (children.size() - 1 > currentSearchIndex)
 				{
 					return searchChildren(line, currentSearchIndex + 1,
 						stopIndex);
@@ -313,18 +311,18 @@ public class ColumnBlock extends Rect implements Node
 	public String toString()
 	{
 		StringBuilder buf = new StringBuilder();
-		buf.append("ColumnBlock[startLine : " + startLine + " ,endLine : " + endLine
-			+ " ,columnBlockWidth : " + columnBlockWidth + "] LINES:");
+		buf.append("ColumnBlock[startLine : ").append(startLine).append(" ,endLine : ").append(endLine)
+		   .append(" ,columnBlockWidth : ").append(columnBlockWidth).append("] LINES:");
 		for (int i = 0; i < lines.size(); i++)
 		{
-			buf.append("\n");
-			buf.append("LINE " + i + ":" + lines.elementAt(i));
+			buf.append('\n');
+			buf.append("LINE ").append(i).append(':').append(lines.elementAt(i));
 		}
 
 		for (int i = 0; i < children.size(); i++)
 		{
-			buf.append("\n");
-			buf.append("CHILD " + i + ":" + children.elementAt(i));
+			buf.append('\n');
+			buf.append("CHILD ").append(i).append(':').append(children.elementAt(i));
 		}
 		return buf.toString();
 	}//}}}
@@ -356,8 +354,8 @@ public class ColumnBlock extends Rect implements Node
 		// update line no. in this column block
 		// update column block lines in this column block
 		// call this method on all children
-		this.startLine += line;
-		this.endLine += line;
+		startLine += line;
+		endLine += line;
 
 		for (int i = 0; i < lines.size(); i++)
 		{
@@ -373,22 +371,21 @@ public class ColumnBlock extends Rect implements Node
 	//{{{ updateColumnBlockLineOffset() method
 	public void updateColumnBlockLineOffset(int line, int offsetAdd, boolean increaseStartOffset)
 	{
-		if ((line >= startLine) && (line <= endLine))
+		if (line >= startLine && line <= endLine)
 		{
-			if ((lines != null) && (lines.size() > 0))
+			if (lines != null && !lines.isEmpty())
 			{
-				ColumnBlockLine blockLine = (ColumnBlockLine) (lines.get(line
-					- startLine));
+				ColumnBlockLine blockLine = lines.get(line - startLine);
 				if (increaseStartOffset)
 				{
 					blockLine.colStartIndex += offsetAdd;
 				}
 				blockLine.colEndIndex += offsetAdd;
 			}
-			if ((children != null) && (children.size() > 0))
+			if (children != null && !children.isEmpty())
 			{
 				ColumnBlock block = searchChildren(line);
-				if ((block != null) && (block.isLineWithinThisBlock(line) == 0))
+				if (block != null && block.isLineWithinThisBlock(line) == 0)
 				{
 					block.updateColumnBlockLineOffset(line, offsetAdd, true);
 				}
@@ -404,15 +401,8 @@ public class ColumnBlock extends Rect implements Node
 	 */
 	public void setTabSizeDirtyStatus(boolean dirty, boolean recursive)
 	{
-		if (dirty)
-		{
-			tabSizesDirty = true;
-		}
-		else
-		{
-			tabSizesDirty = false;
-		}
-		if (recursive && children != null && children.size() > 0)
+		tabSizesDirty = dirty;
+		if (recursive && children != null && !children.isEmpty())
 		{
 			for (int i = 0; i < children.size(); i++)
 			{
diff --git a/org/gjt/sp/jedit/textarea/DisplayManager.java b/org/gjt/sp/jedit/textarea/DisplayManager.java
index dc1af8d..a583d1a 100644
--- a/org/gjt/sp/jedit/textarea/DisplayManager.java
+++ b/org/gjt/sp/jedit/textarea/DisplayManager.java
@@ -35,7 +35,7 @@ import org.gjt.sp.util.Log;
  * 
  * @since jEdit 4.2pre1
  * @author Slava Pestov
- * @version $Id: DisplayManager.java 21374 2012-03-14 23:52:09Z ezust $
+ * @version $Id: DisplayManager.java 21329 2012-03-11 16:45:42Z k_satoda $
  */
 public class DisplayManager
 {
@@ -258,7 +258,7 @@ public class DisplayManager
 		// if the caret is on a collapsed fold, collapse the
 		// parent fold
 		if(line != 0
-			&& line != buffer.getLineCount() - 1
+			&& line != lineCount - 1
 			&& buffer.isFoldStart(line)
 			&& !isLineVisible(line + 1))
 		{
@@ -381,23 +381,25 @@ public class DisplayManager
 		if(buffer.getFoldHandler() instanceof IndentFoldHandler)
 			foldLevel = (foldLevel - 1) * buffer.getIndentSize() + 1;
 
-		showLineRange(0,buffer.getLineCount() - 1);
+		int lineCount = buffer.getLineCount();
+		int end = lineCount - 1;
+		showLineRange(0,end);
 
 		int leastFolded = -1;
 		int firstInvisible = 0;
 
-		for(int i = 0; i < buffer.getLineCount(); i++)
+		for(int i = 0; i < lineCount; i++)
 		{
+			int level = buffer.getFoldLevel(i);
 			// Keep track of the least fold level up to this point in the file,
 			// because we can't hide a line at this level since there will be no "root"
 			// line to unfold it from
-			if (leastFolded == -1 || buffer.getFoldLevel(i) < leastFolded)
+			if (leastFolded == -1 || level < leastFolded)
 			{
-				leastFolded = buffer.getFoldLevel(i);
+				leastFolded = level;
 			}
 		
-			if (buffer.getFoldLevel(i) < foldLevel ||
-			    buffer.getFoldLevel(i) == leastFolded)
+			if (level < foldLevel || level == leastFolded)
 			{
 				if(firstInvisible != i)
 				{
@@ -408,8 +410,8 @@ public class DisplayManager
 			}
 		}
 
-		if(firstInvisible != buffer.getLineCount())
-			hideLineRange(firstInvisible,buffer.getLineCount() - 1);
+		if(firstInvisible != lineCount)
+			hideLineRange(firstInvisible,end);
 
 		notifyScreenLineChanges();
 		if(update && textArea.getDisplayManager() == this)
@@ -439,7 +441,8 @@ public class DisplayManager
 	 */
 	public void narrow(int start, int end)
 	{
-		if(start > end || start < 0 || end >= buffer.getLineCount())
+		int lineCount = buffer.getLineCount();
+		if(start > end || start < 0 || end >= lineCount)
 			throw new ArrayIndexOutOfBoundsException(start + ", " + end);
 
 		if(start < getFirstVisibleLine() || end > getLastVisibleLine())
@@ -447,12 +450,11 @@ public class DisplayManager
 
 		if(start != 0)
 			hideLineRange(0,start - 1);
-		if(end != buffer.getLineCount() - 1)
-			hideLineRange(end + 1,buffer.getLineCount() - 1);
+		if(end != lineCount - 1)
+			hideLineRange(end + 1,lineCount - 1);
 
 		// if we narrowed to a single collapsed fold
-		if(start != buffer.getLineCount() - 1
-			&& !isLineVisible(start + 1))
+		if(start != lineCount - 1 && !isLineVisible(start + 1))
 			expandFold(start,false);
 
 		textArea.fireNarrowActive();
diff --git a/org/gjt/sp/jedit/textarea/ElasticTabStopBufferListener.java b/org/gjt/sp/jedit/textarea/ElasticTabStopBufferListener.java
index 81c28b8..43efd2f 100644
--- a/org/gjt/sp/jedit/textarea/ElasticTabStopBufferListener.java
+++ b/org/gjt/sp/jedit/textarea/ElasticTabStopBufferListener.java
@@ -28,6 +28,8 @@ import org.gjt.sp.jedit.buffer.BufferAdapter;
 import org.gjt.sp.jedit.buffer.JEditBuffer;
 import org.gjt.sp.jedit.textarea.TextArea;
 
+/** Buffer Listener for Elastic Tabstops.  
+  */
 public class ElasticTabStopBufferListener extends BufferAdapter
 {
 	TextArea textArea;
diff --git a/org/gjt/sp/jedit/textarea/ElasticTabstopsTabExpander.java b/org/gjt/sp/jedit/textarea/ElasticTabstopsTabExpander.java
index b71e755..e6677a4 100644
--- a/org/gjt/sp/jedit/textarea/ElasticTabstopsTabExpander.java
+++ b/org/gjt/sp/jedit/textarea/ElasticTabstopsTabExpander.java
@@ -25,6 +25,8 @@ import java.util.Vector;
 
 import javax.swing.text.TabExpander;
 
+/** A Swing TabExpander for Elastic Tabstops. */
+
 public class ElasticTabstopsTabExpander implements TabExpander 
 {
 	TextArea textArea;
diff --git a/org/gjt/sp/jedit/textarea/Gutter.java b/org/gjt/sp/jedit/textarea/Gutter.java
index 2a3c1e6..f45ce55 100644
--- a/org/gjt/sp/jedit/textarea/Gutter.java
+++ b/org/gjt/sp/jedit/textarea/Gutter.java
@@ -50,7 +50,7 @@ import org.gjt.sp.util.Log;
  * @see TextArea
  *
  * @author Mike Dillon and Slava Pestov
- * @version $Id: Gutter.java 20408 2011-11-22 19:45:48Z ezust $
+ * @version $Id: Gutter.java 21683 2012-05-19 09:33:20Z jarekczek $
  */
 public class Gutter extends JComponent implements SwingConstants
 {
@@ -125,13 +125,15 @@ public class Gutter extends JComponent implements SwingConstants
 			public void contentInserted(JEditBuffer buffer, int startLine,
 					int offset, int numLines, int length)
 			{
-				updateLineNumberWidth();
+				if (numLines != 0)
+					updateLineNumberWidth();
 			}
 
 			public void contentRemoved(JEditBuffer buffer, int startLine,
 					int offset, int numLines, int length) 
 			{
-				updateLineNumberWidth();
+				if (numLines != 0)
+					updateLineNumberWidth();
 			}
 		};
 
diff --git a/org/gjt/sp/jedit/textarea/JEditTextArea.java b/org/gjt/sp/jedit/textarea/JEditTextArea.java
index a8e545c..f20e548 100644
--- a/org/gjt/sp/jedit/textarea/JEditTextArea.java
+++ b/org/gjt/sp/jedit/textarea/JEditTextArea.java
@@ -28,7 +28,6 @@ import java.awt.AWTEvent;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
-import java.awt.Point;
 import java.awt.event.MouseEvent;
 import javax.swing.JMenuItem;
 
@@ -50,7 +49,7 @@ import org.gjt.sp.jedit.msg.PositionChanging;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: JEditTextArea.java 21374 2012-03-14 23:52:09Z ezust $
+ * @version $Id: JEditTextArea.java 21772 2012-06-08 19:43:00Z jarekczek $
  */
 public class JEditTextArea extends TextArea
 {
@@ -64,6 +63,7 @@ public class JEditTextArea extends TextArea
 		super(jEdit.getPropertyManager(), view);
 		enableEvents(AWTEvent.FOCUS_EVENT_MASK | AWTEvent.KEY_EVENT_MASK);
 		this.view = view;
+		setRightClickPopupEnabled(true);
 		painter.setLineExtraSpacing(jEdit.getIntegerProperty("options.textarea.lineSpacing", 0));
 		EditBus.addToBus(this);
 	} //}}}
@@ -456,6 +456,8 @@ public class JEditTextArea extends TextArea
 	public void createPopupMenu(MouseEvent evt)
 	{
 		popup = GUIUtilities.loadPopupMenu("view.context", this, evt);
+		if (!jEdit.getBooleanProperty("options.context.includeOptionsLink"))
+			return;
 		JMenuItem customize = new JMenuItem(jEdit.getProperty(
 			"view.context.customize"));
 		customize.addActionListener(new ActionListener()
@@ -469,27 +471,6 @@ public class JEditTextArea extends TextArea
 		popup.add(customize);
 	} //}}}
 
-	//{{{ showPopupMenu() method
-	/**
-	 * Shows the popup menu below the current caret position.
-	 * @since 4.3pre10
-	 */
-	@Override
-	public void showPopupMenu()
-	{
-		if (!popup.isVisible() && hasFocus())
-		{
-			Point caretPos = offsetToXY(getCaretPosition());
-			if (caretPos != null)
-			{
-				// Open the context menu below the caret
-				int lineHeight = getPainter().getLineHeight();
-				GUIUtilities.showPopupMenu(popup,
-					painter,caretPos.x,caretPos.y + lineHeight,true);
-			}
-		}
-	} //}}}
-
 	//{{{ handlePropertiesChanged() method
 	@EBHandler
 	public void handlePropertiesChanged(PropertiesChanged msg)
diff --git a/org/gjt/sp/jedit/textarea/Node.java b/org/gjt/sp/jedit/textarea/Node.java
index 175471a..3a89a7e 100644
--- a/org/gjt/sp/jedit/textarea/Node.java
+++ b/org/gjt/sp/jedit/textarea/Node.java
@@ -1,10 +1,31 @@
+/*
+ * ColumnBlock.java
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright (C) 2010 Anshal Shukla
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
 package org.gjt.sp.jedit.textarea;
 
 import java.util.Vector;
 
 public interface Node 
 {
-	public void addChild(Node node);
-	public Vector  getChildren();
-	public Node getParent();
+	void addChild(Node node);
+	Vector  getChildren();
+	Node getParent();
 }
diff --git a/org/gjt/sp/jedit/textarea/Selection.java b/org/gjt/sp/jedit/textarea/Selection.java
index 8dd526e..c3cdd86 100644
--- a/org/gjt/sp/jedit/textarea/Selection.java
+++ b/org/gjt/sp/jedit/textarea/Selection.java
@@ -42,7 +42,7 @@ import org.gjt.sp.util.StandardUtilities;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: Selection.java 15570 2009-06-25 00:43:57Z ezust $
+ * @version $Id: Selection.java 21723 2012-05-27 14:34:13Z k_satoda $
  * @since jEdit 3.2pre1
  */
 public abstract class Selection implements Cloneable
@@ -394,20 +394,22 @@ public abstract class Selection implements Cloneable
 			if(startOffset == -1)
 			{
 				extraStartVirt = startColumn - width[0];
-				//startOffset = buffer.getLineEndOffset(startLine) - 1;
+				startOffset = buffer.getLineEndOffset(startLine) - 1;
 			}
-			/*else
-				startOffset += buffer.getLineStartOffset(startLine);*/
+			else
+				startOffset += buffer.getLineStartOffset(startLine);
 
 			int endOffset = buffer.getOffsetOfVirtualColumn(endLine,
 				endColumn,width);
 			if(endOffset == -1)
 			{
 				extraEndVirt = endColumn - width[0];
-				//endOffset = buffer.getLineEndOffset(endLine) - 1;
+				endOffset = buffer.getLineEndOffset(endLine) - 1;
 			}
-			/*else
-				endOffset += buffer.getLineStartOffset(endLine);*/
+			else
+				endOffset += buffer.getLineStartOffset(endLine);
+			this.start = startOffset;
+			this.end = endOffset;
 		} //}}}
 
 		//{{{ getStartColumn() method
diff --git a/org/gjt/sp/jedit/textarea/StandaloneTextArea.java b/org/gjt/sp/jedit/textarea/StandaloneTextArea.java
index 72e32f6..a6527e7 100644
--- a/org/gjt/sp/jedit/textarea/StandaloneTextArea.java
+++ b/org/gjt/sp/jedit/textarea/StandaloneTextArea.java
@@ -28,7 +28,6 @@ package org.gjt.sp.jedit.textarea;
 import java.awt.Color;
 import java.awt.Font;
 import java.awt.event.ActionEvent;
-import java.awt.event.MouseEvent;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
@@ -37,7 +36,6 @@ import java.util.Properties;
 import javax.swing.AbstractAction;
 import javax.swing.JFrame;
 import javax.swing.JMenuItem;
-import javax.swing.JPopupMenu;
 import javax.swing.WindowConstants;
 
 import org.gjt.sp.jedit.IPropertyManager;
@@ -65,11 +63,10 @@ import org.gjt.sp.util.Log;
 import org.gjt.sp.util.SyntaxUtilities;
 
 //}}}
-// {{{ class StandaloneTextArea
-/**
- * jEdit's standalone text component.<p>
+
+/** jEdit's standalone text component.
  *
- * Use this class to embed a jEdit text area into other applications.
+ * Use this class to embed a jEdit TextArea into other applications.
  *
  * Example:
  * <code>
@@ -100,7 +97,8 @@ import org.gjt.sp.util.SyntaxUtilities;
  *
  * @author Slava Pestov
  * @author John Gellene (API documentation)
- * @version $Id: StandaloneTextArea.java 17650 2010-04-16 10:43:16Z kpouer $
+   @author Matthieu Casanova
+ * @version $Id: StandaloneTextArea.java 21589 2012-04-18 15:06:09Z kpouer $
  */
 public class StandaloneTextArea extends TextArea
 {
@@ -120,7 +118,6 @@ public class StandaloneTextArea extends TextArea
 	{
 		super(propertyManager, null);
 		this.propertyManager = propertyManager;
-
 		initInputHandler();
 
 		setMouseHandler(new TextAreaMouseHandler(this));
@@ -329,7 +326,7 @@ public class StandaloneTextArea extends TextArea
 		return propertyManager.getProperty(name);
 	} //}}}
 
-	//{{{ getBooleanProperty() method
+	//{{{ getBooleanProperty() methods
 	/**
 	 * Returns the value of a boolean property.
 	 * @param name The property
@@ -337,9 +334,8 @@ public class StandaloneTextArea extends TextArea
 	private boolean getBooleanProperty(String name)
 	{
 		return getBooleanProperty(name,false);
-	} //}}}
+	}
 
-	//{{{ getBooleanProperty() method
 	/**
 	 * Returns the value of a boolean property.
 	 * @param name The property
@@ -385,7 +381,6 @@ public class StandaloneTextArea extends TextArea
 		}
 	} //}}}
 
-
 	//{{{ getFontProperty() methods
 	/**
 	 * Returns the value of a font property. The family is stored
@@ -480,7 +475,6 @@ public class StandaloneTextArea extends TextArea
 			return SyntaxUtilities.parseColor(value, def);
 	} //}}}
 
-
 	//{{{ propertiesChanged() method
 	/**
 	 * Reinitializes the textarea by reading the properties from the property manager
@@ -533,23 +527,6 @@ public class StandaloneTextArea extends TextArea
 		buffer.propertiesChanged();
 	} // }}}
 
-	//{{{ createPopupMenu() method
-	/**
-	 * Creates the popup menu.
-	 * @since 4.3pre15
-	 */
-	@Override
-	public void createPopupMenu(MouseEvent evt)
-	{
-		popup = new JPopupMenu();
-		addMenuItem("undo", "Undo");
-		addMenuItem("redo", "Redo");
-		popup.addSeparator();
-		addMenuItem("cut", "Cut");
-		addMenuItem("copy", "Copy");
-		addMenuItem("paste", "Paste");
-	} //}}}
-
 	//{{{ addMenuItem() method
 	/**
 	 * Adds a menu item from the action context to the popup menu and returns the item.
@@ -583,7 +560,7 @@ public class StandaloneTextArea extends TextArea
 	public static StandaloneTextArea createTextArea()
 	{
 		final Properties props = new Properties();
-		props.putAll(loadProperties("/org/gjt/sp/jedit/jedit_keys.props"));
+		props.putAll(loadProperties("/keymaps/jEdit_keys.props"));
 		props.putAll(loadProperties("/org/gjt/sp/jedit/jedit.props"));
 		StandaloneTextArea textArea = new StandaloneTextArea(new IPropertyManager()
 		{
@@ -683,4 +660,4 @@ public class StandaloneTextArea extends TextArea
 		frame.pack();
 		frame.setVisible(true);
 	} //}}}
-}// }}}
+}
diff --git a/org/gjt/sp/jedit/textarea/TextArea.java b/org/gjt/sp/jedit/textarea/TextArea.java
index 298e109..cd5af2e 100644
--- a/org/gjt/sp/jedit/textarea/TextArea.java
+++ b/org/gjt/sp/jedit/textarea/TextArea.java
@@ -69,7 +69,7 @@ import org.gjt.sp.util.ThreadUtilities;
  *
  * @author Slava Pestov
  * @author kpouer (rafactoring into standalone text area)
- * @version $Id: TextArea.java 21295 2012-03-09 20:50:46Z ezust $
+ * @version $Id: TextArea.java 21727 2012-05-27 17:11:01Z jarekczek $
  */
 public abstract class TextArea extends JComponent
 {
@@ -145,8 +145,6 @@ public abstract class TextArea extends JComponent
 		// when setting the initial caret position for a buffer
 		// (eg, from the recent file list)
 		focusedComponent = this;
-
-		popupEnabled = true;
 	} //}}}
 
 	//{{{ getFoldPainter() method
@@ -1374,6 +1372,7 @@ public abstract class TextArea extends JComponent
 		buffer.getText(begin, end - begin, segment);
 	}//}}}
 
+	//{{{ getVisibleLineSegment() method
 	/**
 	 * Returns the visible part of the given line in a CharSequence.
 	 * The buffer data are not copied. so this should be used in EDT
@@ -1391,7 +1390,7 @@ public abstract class TextArea extends JComponent
 		int begin = xyToOffset(offset + point.x, point.y);
 		int end = xyToOffset(getPainter().getWidth(), point.y);
 		return buffer.getSegment(begin, end - begin);
-	}
+	} //}}}
 
 	//{{{ setText() method
 	/**
@@ -1412,8 +1411,6 @@ public abstract class TextArea extends JComponent
 		}
 	} //}}}
 
-	//}}}
-
 	//{{{ Selection
 
 	//{{{ selectAll() method
@@ -2102,6 +2099,7 @@ forward_scan:	do
 	 * method can be passed as a parameter to such methods as
 	 * {@link JEditBuffer#getLineText(int)}.
 	 *
+	 * @return Non-null, non-zero sized array of line indexes.
 	 * @since jEdit 3.2pre1
 	 */
 	public int[] getSelectedLines()
@@ -3398,12 +3396,18 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 			delete();
 			break;
 		default:
-			boolean indent = buffer.isElectricKey(ch, caretLine);
 			String str = String.valueOf(ch);
 			if(getSelectionCount() == 0)
 			{
 				if(!doWordWrap(ch == ' '))
+				{
+					boolean indent = buffer.isElectricKey(ch, caretLine) &&
+						"full".equals(buffer.getStringProperty("autoIndent")) &&
+						/* if the line is not manually indented */
+						(buffer.getCurrentIndentForLine(caretLine, null) ==
+							buffer.getIdealIndentForLine(caretLine));
 					insert(str,indent);
+				}
 			}
 			else
 				replaceSelection(str);
@@ -4455,7 +4459,8 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 			getToolkit().beep();
 		else
 		{
-			if (buffer.isElectricKey('\n', caretLine))
+			String autoIndent = buffer.getStringProperty("autoIndent");
+			if ("full".equals(autoIndent) && buffer.isElectricKey('\n', caretLine))
 			{
 				buffer.indentLine(caretLine, true);
 			}
@@ -4464,7 +4469,11 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 			{
 				buffer.beginCompoundEdit();
 				setSelectedText("\n");
-				buffer.indentLine(caretLine,true);
+				
+				if ("full".equals(autoIndent))
+					buffer.indentLine(caretLine, true);
+				else if ("simple".equals(autoIndent))
+					buffer.simpleIndentLine(caretLine);
 			}
 			finally
 			{
@@ -4482,7 +4491,8 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 			return;
 		}
 
-		if(getSelectionCount() == 0)
+		boolean indent = "full".equals(buffer.getStringProperty("autoIndent"));
+		if(indent && getSelectionCount() == 0)
 		{
 			// if caret is inside leading whitespace, indent.
 			CharSequence text = buffer.getLineSegment(caretLine);
@@ -4801,17 +4811,20 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 		char[] foo = new char[_tabSize];
 		for(int i = 0; i < foo.length; i++)
 			foo[i] = ' ';
-
 		tabSize = painter.getStringWidth(new String(foo));
 
+		// Calculate an average to use a reasonable value for
+		// propotional fonts.
+		String charWidthSample = " 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
 		charWidth = (int)Math.round(
-			painter.getFont().getStringBounds(foo,0,1,
-			painter.getFontRenderContext()).getWidth());
+			painter.getFont().getStringBounds(charWidthSample,
+				painter.getFontRenderContext()).getWidth() / charWidthSample.length());
 
 		String oldWrap = wrap;
 		wrap = buffer.getStringProperty("wrap");
 		hardWrap = "hard".equals(wrap);
-		softWrap = "soft".equals(wrap);
+		String largeFileMode = buffer.getStringProperty("largefilemode");
+		softWrap = "soft".equals(wrap) && !"limited".equals(largeFileMode) && !"nohighlight".equals(largeFileMode);
 		boolean oldWrapToWidth = wrapToWidth;
 		int oldWrapMargin = wrapMargin;
 		setMaxLineLength(buffer.getIntegerProperty("maxLineLen",0));
@@ -4907,7 +4920,7 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 	/**
 	 * Returns true if the caret is visible, false otherwise.
 	 */
-	final boolean isCaretVisible()
+	public final boolean isCaretVisible()
 	{
 		return blink && hasFocus();
 	} //}}}
@@ -5602,13 +5615,17 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 		else
 			return false;
 
+		String indent = buffer.getStringProperty("autoIndent");
 		try
 		{
 			buffer.beginCompoundEdit();
 			buffer.insert(start + insertNewLineAt,"\n");
 			// caretLine would have been incremented
 			// since insertNewLineAt <= caretPos
-			buffer.indentLine(caretLine,true);
+			if ("full".equals(indent))
+				buffer.indentLine(caretLine,true);
+			else if ("simple".equals(indent))
+				buffer.simpleIndentLine(caretLine);
 		}
 		finally
 		{
@@ -5933,18 +5950,8 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 		}
 		else
 		{
-			// stupidity
-			char[] foo = new char[maxLineLen];
-			for(int i = 0; i < foo.length; i++)
-			{
-				foo[i] = ' ';
-			}
-			int maxRenderedLineLen = (int)painter.getFont().getStringBounds(
-				foo,0,foo.length,
-				painter.getFontRenderContext())
-				.getWidth();
-
-			if (softWrap && painter.getWidth() < maxRenderedLineLen)
+			int estimate = charWidth * maxLineLen;
+			if (softWrap && painter.getWidth() < estimate)
 			{
 				wrapToWidth = true;
 				wrapMargin = painter.getWidth() - charWidth * 3;
@@ -5952,7 +5959,7 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 			else
 			{
 				wrapToWidth = false;
-				wrapMargin = maxRenderedLineLen;
+				wrapMargin = estimate;
 			}
 		}
 	} //}}}
@@ -6198,12 +6205,13 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 	//{{{ createPopupMenu() method
 	/**
 	 * Creates the popup menu.
+	 * If you want a popup menu, don't forget in your class to
+	 * call {@link #setRightClickPopupEnabled(boolean)} to enable the
+	 * popup menu
 	 * @since 4.3pre15
 	 */
 	public void createPopupMenu(MouseEvent evt)
 	{
-		if (popup == null)
-			popup = new JPopupMenu();
 	} //}}}
 
 	//{{{ showPopupMenu() method
@@ -6240,7 +6248,7 @@ loop:		for(int i = lineNo - 1; i >= 0; i--)
 	 *
 	 * @since jEdit 4.1pre1
 	 */
-	private static void showPopupMenu(JPopupMenu popup, Component comp,
+	public static void showPopupMenu(JPopupMenu popup, Component comp,
 		int x, int y, boolean point)
 	{
 		int offsetX = 0;
diff --git a/org/gjt/sp/jedit/visitors/JEditVisitor.java b/org/gjt/sp/jedit/visitors/JEditVisitor.java
index 80bea24..2ea0724 100644
--- a/org/gjt/sp/jedit/visitors/JEditVisitor.java
+++ b/org/gjt/sp/jedit/visitors/JEditVisitor.java
@@ -27,15 +27,14 @@ import org.gjt.sp.jedit.*;
 import org.gjt.sp.jedit.textarea.JEditTextArea;
 //}}}
 
-/**
- * A visitor that can visit a View, an EditPane or a JEditTextArea.
- * You can also extends the default implementation JEditVisitorAdapter
+/** A Visitor can visit a View, an EditPane or a JEditTextArea.
+ *  You can also extend the default implementation, JEditVisitorAdapter
  * To use this visitor.
  * @see jEdit#visit(JEditVisitor)
  * @see View#visit(JEditVisitor)
  *
  * @author Matthieu Casanova
- * @version $Id: GUIUtilities.java 11797 2008-02-15 00:07:23Z Vampire0 $
+ * @version $Id$
  * @since jEdit 4.3pre13
  */
 public interface JEditVisitor
diff --git a/org/gjt/sp/jedit/visitors/JEditVisitorAdapter.java b/org/gjt/sp/jedit/visitors/JEditVisitorAdapter.java
index 1df518b..4f06284 100644
--- a/org/gjt/sp/jedit/visitors/JEditVisitorAdapter.java
+++ b/org/gjt/sp/jedit/visitors/JEditVisitorAdapter.java
@@ -27,8 +27,7 @@ import org.gjt.sp.jedit.*;
 import org.gjt.sp.jedit.textarea.JEditTextArea;
 //}}}
 
-/**
- * A visitor that can visit a View, an EditPane or a JEditTextArea.
+/** Default implementation of a jEditVisitor.  
  *
  * @author Matthieu Casanova
  * @version $Id: GUIUtilities.java 11797 2008-02-15 00:07:23Z Vampire0 $
diff --git a/org/gjt/sp/jedit/visitors/SaveCaretInfoVisitor.java b/org/gjt/sp/jedit/visitors/SaveCaretInfoVisitor.java
index d42f34a..01aab23 100644
--- a/org/gjt/sp/jedit/visitors/SaveCaretInfoVisitor.java
+++ b/org/gjt/sp/jedit/visitors/SaveCaretInfoVisitor.java
@@ -1,6 +1,6 @@
 /*
- * SaveCaretInfoVisitor.java - A visitor that save the carets info of the edit
- * panes
+ * SaveCaretInfoVisitor.java - A visitor that saves the caret info of
+ * an EditPane
  * :tabSize=8:indentSize=8:noTabs=false:
  * :folding=explicit:collapseFolds=1:
  *
@@ -25,7 +25,7 @@ package org.gjt.sp.jedit.visitors;
 
 import org.gjt.sp.jedit.EditPane;
 
-/**
+/** A visitor that saves the caret info of an EditPane
  * @author Matthieu Casanova
  */
 public class SaveCaretInfoVisitor extends JEditVisitorAdapter
diff --git a/org/gjt/sp/jedit/visitors/package.html b/org/gjt/sp/jedit/visitors/package.html
new file mode 100644
index 0000000..299f2cc
--- /dev/null
+++ b/org/gjt/sp/jedit/visitors/package.html
@@ -0,0 +1 @@
+<html><body><p>Visitor classes for EditPanes, Views, and Text Areas.  </p></body></html>
diff --git a/org/gjt/sp/util/StringModel.java b/org/gjt/sp/util/StringModel.java
new file mode 100644
index 0000000..2fb9f9f
--- /dev/null
+++ b/org/gjt/sp/util/StringModel.java
@@ -0,0 +1,52 @@
+package org.gjt.sp.util;
+
+import java.awt.event.TextEvent;
+import java.awt.event.TextListener;
+import java.util.Iterator;
+import java.util.LinkedList;
+
+/**
+ * A model for a single String, which supports TextListeners. Simpler to use
+ * than Document when all you need is to store a single string.
+ * 
+ * @author ezust
+ * 
+ */
+public class StringModel
+{
+
+	String theText = null;
+
+	LinkedList<TextListener> listeners = new LinkedList<TextListener>();
+
+	public void addTextListener(TextListener tl)
+	{
+		listeners.add(tl);
+	}
+
+	void removeTextListener(TextListener tl)
+	{
+		listeners.remove(tl);
+	}
+
+	void fireTextChanged()
+	{
+		TextEvent te = new TextEvent(this, TextEvent.TEXT_VALUE_CHANGED);
+		Iterator<TextListener> itr = listeners.iterator();
+		while (itr.hasNext())
+		{
+			itr.next().textValueChanged(te);
+		}
+	}
+
+	public String toString()
+	{
+		return theText;
+	}
+
+	public void setText(String newText)
+	{
+		this.theText = newText;
+		fireTextChanged();
+	}
+}
diff --git a/org/gjt/sp/util/Task.java b/org/gjt/sp/util/Task.java
index 6ed0a44..2e98825 100644
--- a/org/gjt/sp/util/Task.java
+++ b/org/gjt/sp/util/Task.java
@@ -53,6 +53,7 @@ public abstract class Task implements Runnable, ProgressObserver
 	} //}}}
 
 	//{{{ run() method
+	@Override
 	public final void run()
 	{
 		state = SwingWorker.StateValue.STARTED;
@@ -77,18 +78,21 @@ public abstract class Task implements Runnable, ProgressObserver
 	 */
 	public abstract void _run();
 
+	@Override
 	public final void setValue(long value)
 	{
 		this.value = value;
 		TaskManager.instance.fireValueUpdated(this);
 	}
 
+	@Override
 	public final void setMaximum(long maximum)
 	{
 		this.maximum = maximum;
 		TaskManager.instance.fireMaximumUpdated(this);
 	}
 
+	@Override
 	public void setStatus(String status)
 	{
 		this.status = status;
diff --git a/org/gjt/sp/util/ThreadUtilities.java b/org/gjt/sp/util/ThreadUtilities.java
index b55c7e5..85c44d0 100644
--- a/org/gjt/sp/util/ThreadUtilities.java
+++ b/org/gjt/sp/util/ThreadUtilities.java
@@ -24,6 +24,8 @@ package org.gjt.sp.util;
 
 //{{{ Imports
 import java.awt.EventQueue;
+import java.lang.reflect.InvocationTargetException;
+import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.ThreadFactory;
@@ -62,24 +64,89 @@ public class ThreadUtilities
 	} //}}}
 
 	//{{{ runInDispatchThreadAndWait() method
+	/** Runs the runnable in EDT through <code>invokeLater</code>,
+	 *  but returns only after the runnable is executed.
+	 *  This method is uninterruptible.
+	 *  <p>Note the difference from <code>invokeAndWait</code>.
+	 *  If current thread is not EDT and there are runnables
+	 *  queued in EDT:
+	 *  <ul><li>this method runs the runnable after them</li>
+	 *  <li><code>invokeAndWait</code> runs the runnable before them
+	 *  </li></ul>
+	 */
 	public static void runInDispatchThreadAndWait(Runnable runnable)
 	{
+		boolean interrupted = false;
 		MyRunnable run = new MyRunnable(runnable);
 		runInDispatchThread(run);
-		while (!run.done)
+		while (run.done.getCount() > 0)
 		{
-			synchronized (run)
+			try
+			{
+				run.done.await();
+			}
+			catch (InterruptedException e)
 			{
-				try
-				{
-					run.wait(1000L);
-				}
-				catch (InterruptedException e)
-				{
-					Log.log(Log.ERROR, ThreadUtilities.class, e);
-				}
+				interrupted = true;
 			}
 		}
+		if (interrupted)
+			Thread.currentThread().interrupt();
+	} //}}}
+
+	//{{{ runInDispatchThreadNow() method
+	/**
+	 * Runs the runnable in EDT through <code>invokeAndWait</code>.
+	 * Even if the thread gets interrupted, the call does not return
+	 * until the runnable finishes (uninterruptible method).
+	 * <p>
+	 * This method uses <code>EventQueue.invokeAndWait</code>, so
+	 * the following remark applies:
+	 * <p>If you use invokeAndWait(), make sure that the thread that calls
+	 * invokeAndWait() does not hold any locks that other threads might
+	 * need while the call is occurring.
+	 * From the article:
+	 * <a href="http://java.sun.com/products/jfc/tsc/articles/threads/threads1.html#event_dispatching">
+	 * Threads and Swing</a>
+	 */
+	public static void runInDispatchThreadNow(Runnable runnable)
+	{
+		boolean interrupted = false;
+		MyRunnable run = new MyRunnable(runnable);
+		try
+		{
+			EventQueue.invokeAndWait(run);
+		}
+		catch (InterruptedException e)
+		{
+			interrupted = true;
+		}
+		catch (InvocationTargetException ite)
+		{
+			Throwable cause = ite.getCause();
+			if (cause instanceof RuntimeException)
+				throw (RuntimeException)cause;
+			else
+			{
+				Log.log(Log.ERROR, ThreadUtilities.class,
+					"Invocation Target Exception:");
+				Log.log(Log.ERROR, runnable.getClass(),
+					cause);
+			}
+		}
+		while (run.done.getCount() > 0)
+		{
+			try
+			{
+				run.done.await();
+			}
+			catch (InterruptedException e)
+			{
+				interrupted = true;
+			}
+		}
+		if (interrupted)
+			Thread.currentThread().interrupt();
 	} //}}}
 
 	//{{{ runInBackground() method
@@ -130,6 +197,7 @@ public class ThreadUtilities
 			threadGroup = new ThreadGroup("jEdit Workers");
 		}
 
+		@Override
 		public Thread newThread(Runnable r)
 		{
 			Thread t = new Thread(threadGroup, r);
@@ -157,21 +225,18 @@ public class ThreadUtilities
 	{
 		private final Runnable runnable;
 
-		private volatile boolean done;
+		private CountDownLatch done = new CountDownLatch(1);
 
 		private MyRunnable(Runnable runnable)
 		{
 			this.runnable = runnable;
 		}
 
+		@Override
 		public void run()
 		{
 			runnable.run();
-			done = true;
-			synchronized (this)
-			{
-				notifyAll();
-			}
+			done.countDown();
 		}
 	} //}}}
 
diff --git a/org/gjt/sp/util/WorkThreadPool.java b/org/gjt/sp/util/WorkThreadPool.java
index 3c501e4..39d8721 100644
--- a/org/gjt/sp/util/WorkThreadPool.java
+++ b/org/gjt/sp/util/WorkThreadPool.java
@@ -30,7 +30,7 @@ import java.awt.EventQueue;
 /**
  * A pool of work threads.
  * @author Slava Pestov
- * @version $Id: WorkThreadPool.java 21698 2012-05-22 04:18:50Z ezust $
+ * @version $Id: WorkThreadPool.java 21578 2012-04-12 19:23:47Z jarekczek $
  * @deprecated
  * @see org.gjt.sp.util.ThreadUtilities
  * @since jEdit 2.6pre1
diff --git a/org/jedit/core/FileOpenerService.java b/org/jedit/core/FileOpenerService.java
new file mode 100644
index 0000000..543a39a
--- /dev/null
+++ b/org/jedit/core/FileOpenerService.java
@@ -0,0 +1,82 @@
+/* FileOpenerService.java
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright © 2012 Alan Ezust
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.core;
+
+import org.gjt.sp.jedit.ServiceManager;
+import org.gjt.sp.jedit.View;
+import org.gjt.sp.jedit.jEdit;
+import org.gjt.sp.util.Log;
+
+/**  File Opener Service.
+  *
+  *  FastOpen 2.5 and SmartOpen 1.1 offer this as a service to
+  *  other plugins such as ErrorList 2.0 that can use it to open
+  *  files when, for example, the error message only provides
+  *  a filename and not an absolute path.
+  *
+  *  A response to SF.net ticket #3481157
+  *
+  *  @since jEdit 5.0pre1
+  *  @author Alan Ezust
+  */
+abstract public class FileOpenerService
+{
+	/** Opens a file in jEdit, given only a filename and no path.
+	  *   May cause a dialog to popup asking the user for a choice.
+	  *   @param fileName the file name to search for
+	  *   @param view the parent View
+        */
+	abstract public void openFile(String fileName, View view);
+
+	/** Searches available FileOpenerServices and uses the first, or the
+	*   preferred one based on the "fileopener.service" property.
+	*
+	*   You can set a preferred FileOpener from the Console beanshell like this:
+	*   <pre>
+	*   jEdit.setProperty("fileopener.service", "FastOpen");  // or "SmartOpen"
+	*   </pre>
+	*   This setting is ignored if there is only one FileOpenerService available.
+	*
+	*   @param fileName the file name to search for
+	*   @param view the parent View
+        */
+	static public void open(String fileName, View view)
+	{
+		String[] finders = ServiceManager.getServiceNames(FileOpenerService.class);
+
+		// No installed finders, do nothing
+		if (finders.length == 0) return;
+
+		String myFinder = finders[0];
+		// See if user set a preferred service
+		if (finders.length > 1)
+			myFinder = jEdit.getProperty("fileopener.service", myFinder);
+
+		// try to get the service
+		Object obj = ServiceManager.getService(FileOpenerService.class, myFinder);
+
+		// Preferred service is not found, use the only one available instead
+		if ((obj == null) && (!myFinder.equals(finders[0])))
+			obj = ServiceManager.getService(FileOpenerService.class, finders[0]);
+		// Open the file!
+		((FileOpenerService)obj).openFile(fileName, view);
+	}
+}
diff --git a/org/jedit/core/MigrationService.java b/org/jedit/core/MigrationService.java
new file mode 100644
index 0000000..7fc369d
--- /dev/null
+++ b/org/jedit/core/MigrationService.java
@@ -0,0 +1,43 @@
+/* MigrationService.java
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright © 2011 Matthieu Casanova
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.core;
+
+/** A Migration service.
+ * There is currently only one concrete implementation of this interface and no
+ * general way to add new MigrationServices yet.
+ * <br />
+ * The goal of migration is usually to replace old properties or data files
+ * with a new set, located elsewhere. The fact is that depending on where
+ * the data needs to be updated, the migration may need to be done at
+*  different places during jEdit's startup. <br />
+ * There is no specific time that all migration services are called currently.
+ * The service and interface exists primarily so you don't need to add a compilation
+ * dependency of the org.gjt.sp.jEdit class to your MigrationService class. <br />
+ * <br />
+ * Concrete instances need to gurantee that the migration itself is only done
+ * once.
+ *
+ * @author Matthieu Casanova
+ */
+public interface MigrationService
+{
+	void migrate();
+}
diff --git a/org/jedit/core/package.html b/org/jedit/core/package.html
new file mode 100644
index 0000000..0b92194
--- /dev/null
+++ b/org/jedit/core/package.html
@@ -0,0 +1,2 @@
+<html><body>Core jEdit classes </body></html>
+
diff --git a/org/jedit/keymap/Keymap.java b/org/jedit/keymap/Keymap.java
new file mode 100644
index 0000000..6078ec7
--- /dev/null
+++ b/org/jedit/keymap/Keymap.java
@@ -0,0 +1,49 @@
+/*
+ * jEdit - Programmer's Text Editor
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright © 2011 Matthieu Casanova
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.keymap;
+
+/**
+ * @author Matthieu Casanova
+ * @since jEdit 5.0
+ */
+public interface Keymap
+{
+	/**
+	 * Returns a shortcut.
+	 * @param name the shortcut name
+	 * @return the action name or <code>null</code> if there is no shortcut
+	 */
+	String getShortcut(String name);
+	
+	/**
+	 * Set a new shortcut.
+	 * @param name the shortcut name
+	 * @param shortcut the action name, or <code>null</code> to delete a 
+	 * shortcut
+	 */
+	void setShortcut(String name, String shortcut);
+	
+	/**
+	 * Save the keymaps.
+	 */
+	void save();
+}
diff --git a/org/jedit/keymap/KeymapFileFilter.java b/org/jedit/keymap/KeymapFileFilter.java
new file mode 100644
index 0000000..cf50f55
--- /dev/null
+++ b/org/jedit/keymap/KeymapFileFilter.java
@@ -0,0 +1,40 @@
+/*
+ * jEdit - Programmer's Text Editor
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright © 2011 Matthieu Casanova
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.keymap;
+
+import java.io.File;
+import java.io.FileFilter;
+
+/**
+ * A FileFilter that returns keymaps files.
+ *
+ * @author Matthieu Casanova
+ * @since jEdit 5.0
+ */
+public class KeymapFileFilter implements FileFilter
+{
+	@Override
+	public boolean accept(File pathname)
+	{
+		return pathname.isFile() && pathname.getName().endsWith("_keys.props");
+	}
+}
diff --git a/org/jedit/keymap/KeymapImpl.java b/org/jedit/keymap/KeymapImpl.java
new file mode 100644
index 0000000..8c6909d
--- /dev/null
+++ b/org/jedit/keymap/KeymapImpl.java
@@ -0,0 +1,165 @@
+/*
+ * jEdit - Programmer's Text Editor
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright © 2011 Matthieu Casanova
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.keymap;
+
+//{{{ Imports
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.gjt.sp.util.IOUtilities;
+import org.gjt.sp.util.Log;
+//}}}
+
+/**
+ * The default keymap implementation.
+ * @author Matthieu Casanova
+ * @since jEdit 5.0
+ */
+class KeymapImpl implements Keymap
+{
+	protected Properties props;
+
+	protected final String name;
+	private final File file;
+	private boolean modified;
+
+	//{{{ KeymapImpl() constructor
+	KeymapImpl(String name, File file)
+	{
+		this.name = name;
+		this.file = file;
+		loadProperties();
+	} //}}}
+
+	//{{{ getInputStream() method
+	protected InputStream getInputStream()
+	{
+		return Keymap.class.getResourceAsStream(name + "_keys.props");
+	} //}}}
+
+	//{{{ loadProperties() method
+	private void loadProperties()
+	{
+		props = new Properties();
+		InputStream in = null;
+		try
+		{
+			in = new BufferedInputStream(new FileInputStream(file));
+			props.load(in);
+		}
+		catch (IOException e)
+		{
+			Log.log(Log.ERROR, this, "Unable to load properties", e);
+		}
+		finally
+		{
+			IOUtilities.closeQuietly(in);
+		}
+	} //}}}
+
+	//{{{ getShortcut() method
+	@Override
+	public String getShortcut(String name)
+	{
+		String property = props.getProperty(name);
+		return property;
+	} //}}}
+
+	//{{{ setShortcut() method
+	@Override
+	public void setShortcut(String name, String shortcut)
+	{
+		if (shortcut == null || shortcut.isEmpty())
+		{
+			if (props.containsKey(name))
+			{
+				modified = true;
+				props.remove(name);
+			}
+			return;
+		}
+		String oldShortcut = props.getProperty(name);
+		if (!shortcut.equals(oldShortcut))
+		{
+			modified = true;
+			props.setProperty(name, shortcut);
+		}
+	} //}}}
+
+	//{{{ toString() method
+	@Override
+	public String toString()
+	{
+		return name;
+	} //}}}
+
+	//{{{ hashCode() method
+	@Override
+	public int hashCode()
+	{
+		return name.hashCode();
+	} //}}}
+
+	//{{{ equals() method
+	@Override
+	public boolean equals(Object obj)
+	{
+		if (!(obj instanceof Keymap))
+			return false;
+
+		Keymap keymap = (Keymap) obj;
+		return name.equals(keymap.toString());
+	} //}}}
+
+	//{{{ save() method
+	@Override
+	public void save()
+	{
+		if (modified)
+		{
+			modified = false;
+			File userKeymapFile = KeymapManagerImpl.getUserKeymapFile(name);
+			userKeymapFile.getParentFile().mkdirs();
+			BufferedOutputStream out = null;
+			try
+			{
+				out = new BufferedOutputStream(new FileOutputStream(userKeymapFile));
+				props.store(out, "jEdit's keymap " + name);
+			}
+			catch (IOException e)
+			{
+				Log.log(Log.ERROR, this, "Unable to save properties", e);
+			}
+			finally
+			{
+				IOUtilities.closeQuietly(out);
+			}
+		}
+
+	} //}}}
+}
diff --git a/org/jedit/keymap/KeymapManager.java b/org/jedit/keymap/KeymapManager.java
new file mode 100644
index 0000000..0f37027
--- /dev/null
+++ b/org/jedit/keymap/KeymapManager.java
@@ -0,0 +1,91 @@
+/*
+ * jEdit - Programmer's Text Editor
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright © 2011 Matthieu Casanova
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.keymap;
+
+import java.util.Collection;
+
+/**
+ * @author Matthieu Casanova
+ * @since jEdit 5.0
+ */
+public interface KeymapManager
+{
+	String DEFAULT_KEYMAP_NAME = "jEdit";
+	/**
+	 * Returns the current keymap.
+	 * @return the current keymap
+	 */
+	Keymap getKeymap();
+
+	void reload();
+
+	Collection<String> getKeymapNames();
+
+	/**
+	 * Returns the keymap with that name.
+	 * @param name the keymap name
+	 * @return the user keymap of that name, if it exists, or the system keymap if it doesn't.
+	 * If none exists <code>null</code> is returned
+	 */
+	Keymap getKeymap(String name);
+
+	/**
+	 * Returns the state of the keymap
+	 * @param name the name of the keymap
+	 * @return a state.
+	 */
+	State getKeymapState(String name);
+
+	/**
+	 * Reset the keymap to it's original state if it was a modified system keymap
+	 * @param name the keymap name
+	 */
+	void resetKeymap(String name);
+
+	/**
+	 * Delete a user keymap.
+	 * @param name the keymap name
+	 */
+	void deleteUserKeymap(String name);
+
+	/**
+	 * Copy the keymap to another one
+	 * @param name the original keymap
+	 * @param newName the new keymap
+	 */
+	boolean copyKeymap(String name, String newName);
+
+	/**
+	 * The states of the keymaps
+	 */
+	enum State
+	{
+		/** User keymap. */
+		User,
+		/** System keymap. */
+		System,
+		/** Modified system keymap. */
+		SystemModified,
+		/** Unknown keymap (doesn't exists). */
+		Unknown
+	}
+}
diff --git a/org/jedit/keymap/KeymapManagerImpl.java b/org/jedit/keymap/KeymapManagerImpl.java
new file mode 100644
index 0000000..fd7746b
--- /dev/null
+++ b/org/jedit/keymap/KeymapManagerImpl.java
@@ -0,0 +1,240 @@
+/*
+ * jEdit - Programmer's Text Editor
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright © 2011 Matthieu Casanova
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.keymap;
+
+//{{{ Imports
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import javax.swing.JOptionPane;
+
+import org.gjt.sp.jedit.IPropertyManager;
+import org.gjt.sp.util.IOUtilities;
+import org.gjt.sp.util.Log;
+//}}}
+
+/**
+ * The default keymap manager implementation.
+ * @author Matthieu Casanova
+ * @since jEdit 5.0
+ */
+public class KeymapManagerImpl implements KeymapManager
+{
+	private Keymap currentKeymap;
+	private final IPropertyManager propertyManager;
+	/**
+	 * The userKeymapFolder, it can be null if jEdit runs with nosettings;
+	 */
+	private static File userKeymapFolder;
+	private final File systemKeymapFolder;
+	
+
+	//{{{ KeymapManagerImpl() constructor
+	public KeymapManagerImpl(IPropertyManager propertyManager,
+				 File systemKeymapFolder,
+				 File userKeymapFolder)
+	{
+		this.propertyManager = propertyManager;
+		this.systemKeymapFolder = systemKeymapFolder;
+		if (!systemKeymapFolder.isDirectory())
+		{
+			Log.log(Log.ERROR, this, "System keymap folder do not exist, your installation is broken."
+						 + "Install keymaps in " + systemKeymapFolder.getAbsolutePath());
+			JOptionPane.showMessageDialog(null, "System keymap folder do not exist, your installation is broken."
+							    + "Install keymaps in " + systemKeymapFolder.getAbsolutePath(), "Fatal Error",
+						      JOptionPane.ERROR_MESSAGE);
+			System.exit(10);
+		}
+		this.userKeymapFolder = userKeymapFolder;
+	} //}}}
+
+	//{{{ getKeymap() method
+	@Override
+	public Keymap getKeymap()
+	{
+		return currentKeymap;
+	} //}}}
+
+	//{{{ getKeymapNames() method
+	@Override
+	public Collection<String> getKeymapNames()
+	{
+		Collection<String> systemKeymapNames = getKeymapsFromFolder(systemKeymapFolder);
+		Collection<String> userKeymapNames = getKeymapsFromFolder(userKeymapFolder);
+		Set<String> keyMaps = new HashSet<String>();
+		keyMaps.addAll(systemKeymapNames);
+		keyMaps.addAll(userKeymapNames);
+		return keyMaps;
+	} //}}}
+
+	//{{{ getKeymap() method
+	@Override
+	public Keymap getKeymap(String name)
+	{
+		File keymapFile = getKeymapFile(name);
+		Keymap keymap = null;
+		if (keymapFile.isFile())
+			keymap = new KeymapImpl(name, keymapFile);
+		return keymap;
+	} //}}}
+
+	//{{{ getKeymapState() method
+	@Override
+	public State getKeymapState(String name)
+	{
+		File systemKeymapFile = getSystemKeymapFile(name);
+		File userKeymapFile = getUserKeymapFile(name);
+		if (userKeymapFile.isFile())
+		{
+			if (systemKeymapFile.isFile())
+				return State.SystemModified;
+			return State.User;
+		}
+		if (systemKeymapFile.isFile())
+			return State.System;
+		return State.Unknown;
+	} //}}}
+
+	//{{{ resetKeymap() method
+	@Override
+	public void resetKeymap(String name)
+	{
+		State keymapState = getKeymapState(name);
+		if (keymapState == State.SystemModified)
+		{
+			File userFile = getUserKeymapFile(name);
+			userFile.delete();
+		}
+	} //}}}
+
+	//{{{ deleteUserKeymap() method
+	@Override
+	public void deleteUserKeymap(String name)
+	{
+		State keymapState = getKeymapState(name);
+		if (keymapState == State.User)
+		{
+			File userFile = getUserKeymapFile(name);
+			userFile.delete();
+		}
+	} //}}}
+
+	//{{{ copyKeymap() method
+	@Override
+	public boolean copyKeymap(String name, String newName)
+	{
+		Log.log(Log.DEBUG, this, "copyKeymap(" + name + ',' + newName + ')');
+		File keymapFile = getUserKeymapFile(newName);
+		if (keymapFile.exists())
+			throw new IllegalArgumentException("Keymap " + newName + " already exists");
+
+		File originalKeymap = getKeymapFile(name);
+		if (!originalKeymap.isFile())
+			throw new IllegalArgumentException("Keymap " + name + " doesn't exist");
+		keymapFile.getParentFile().mkdirs();
+		BufferedInputStream in = null;
+		BufferedOutputStream out = null;
+		Log.log(Log.DEBUG, this, "Copying "+ originalKeymap.getAbsolutePath() + " to " + keymapFile.getAbsolutePath());
+		try
+		{
+			in = new BufferedInputStream(new FileInputStream(originalKeymap));
+			out = new BufferedOutputStream(new FileOutputStream(keymapFile));
+			IOUtilities.copyStream(null, in, out, false);
+			return true;
+		}
+		catch (IOException e)
+		{
+			Log.log(Log.ERROR, this, e);
+		}
+		finally
+		{
+			IOUtilities.closeQuietly(in);
+			IOUtilities.closeQuietly(out);
+		}
+		return false;
+	} //}}}
+
+	//{{{ reload() method
+	@Override
+	public void reload()
+	{
+		String name = getCurrentKeymapName();
+		currentKeymap = getKeymap(name);
+		if (currentKeymap == null)
+			currentKeymap = getKeymap(DEFAULT_KEYMAP_NAME);
+	} //}}}
+
+	//{{{ getKeymapFile() method
+	private File getKeymapFile(String name)
+	{
+		File file = getUserKeymapFile(name);
+		if (!file.isFile())
+			file = getSystemKeymapFile(name);
+		return file;
+	} //}}}
+
+	//{{{ getUserKeymapFile() method
+	static File getUserKeymapFile(String name)
+	{
+		return new File(userKeymapFolder, name + "_keys.props");
+	} //}}}
+
+	//{{{ getSystemKeymapFile() method
+	private File getSystemKeymapFile(String name)
+	{
+		return new File(systemKeymapFolder, name + "_keys.props");
+	} //}}}
+
+	//{{{ getKeymapsFromFolder() method
+	private static Collection<String> getKeymapsFromFolder(File folder)
+	{
+		if (folder == null)
+			return Collections.emptyList();
+		Collection<String> names = new ArrayList<String>();
+		File[] files = folder.listFiles(new KeymapFileFilter());
+		if (files != null)
+		{
+			for (File file : files)
+			{
+				String filename = file.getName();
+				String name = filename.substring(0, filename.length() - 11);
+				names.add(name);
+			}
+		}
+		return names;
+	} //}}}
+
+	//{{{ getCurrentKeymapName() method
+	private String getCurrentKeymapName()
+	{
+		return propertyManager.getProperty("keymap.current");
+	} //}}}
+}
diff --git a/org/jedit/keymap/package.html b/org/jedit/keymap/package.html
new file mode 100644
index 0000000..b4d371d
--- /dev/null
+++ b/org/jedit/keymap/package.html
@@ -0,0 +1 @@
+<html><body>Named sets of keyboard shortcuts</body></html>
diff --git a/org/jedit/localization/jedit_cs.props b/org/jedit/localization/jedit_cs.props
new file mode 100644
index 0000000..11a281f
--- /dev/null
+++ b/org/jedit/localization/jedit_cs.props
@@ -0,0 +1,2541 @@
+###
+### jEdit user interface definitions,
+### :tabSize=8:indentSize=8:noTabs=false:
+### :folding=explicit:collapseFolds=1:
+### :encoding=UTF-8:
+###
+### Copyright (C) 1998, 2005 Slava Pestov
+###
+
+#{{{ jEdit core (jedit_gui.props)
+
+#{{{ Default user catalog file
+defaultCatalog=<?xml version="1.0"?>\n\
+	<!DOCTYPE MODES SYSTEM "catalog.dtd">\n\
+	\n\
+	<MODES>\n\
+	\n\
+	<!-- Add lines like the following, one for each edit mode you add: -->\n\
+	<!-- <MODE NAME="foo" FILE="foo.xml" FILE_NAME_GLOB="*.foo" /> -->\n\
+	\n\
+	</MODES>
+#}}}
+
+#{{{ Common strings
+common.ok=OK
+common.cancel=Zrušit
+common.close=Zavřít
+common.error=Chyba
+common.apply=Použít
+common.more=Více...  
+common.insert=Vložit
+common.add=Přidat
+common.remove=Odebrat
+common.moveUp=Posunout nahoru
+common.moveDown=Posunout dolů
+common.clearAll=Vyčistit vše
+common.selectAll=Označit vše
+common.selectNone=Odznačit vše
+
+lineSep.unix=Unix (\\n)
+lineSep.windows=DOS/Windows (\\r\\n)
+lineSep.mac=MacOS (\\r)
+#}}}
+
+#{{{ Miscellaneous
+history.caption=Poslední vložené řetězce:
+
+action-set.jEdit=Vestavěné příkazy
+action-set.browser=Prohlížeč souborového systému
+action-set.macros=Makra
+action-set.plugin=Plugin: {0}
+
+macro-handler.beanshell.lahbel=BeanShell skript
+macro-handler.beanshell.glob=*.bsh
+
+save-layout-failed.message=Nepovedlo se uložit dokovací rozmístění.
+load-layout.title=Načíst dokovací rozmístění
+load-layout.message=Dokovací rozmístění k načtení:
+save-layout.title=Uložit dokovací rozmístění
+save-layout.message=Dokovací rozmístění k uložení:
+#}}}
+
+#{{{ Tool bar
+view.search.find=Hledat:
+view.search.close-tooltip=Skrýt vyhledávací panel (ESCAPE)
+
+view.action.prompt=Akce:
+view.action.no-completions=Nenalezeny žádné odpovídající akce...
+view.action.close-tooltip=Schovat panel akcí (ESCAPE)
+#}}}
+
+#{{{ Context menu
+view.context.customize=Upravit toto menu...
+#}}}
+
+#{{{ System tray menu
+tray.newView.label=Nový pohled
+tray.newPlainView.label=Nový prostý pohled
+tray.exit.label=Ukončit
+#}}}
+
+#{{{ Menu bar
+
+#{{{ File menu
+file.label=$Soubor
+new-file.label=$Nový
+new-file-in-mode.label=Nový v $režimu
+new-file-in-mode.dialog.title=Nový soubor
+new-file-in-mode.dialog.message=S režimem úprav: 
+open-file.label=$Otevřít...
+reload.label=$Znovunačíst
+reload-all.label=Znovunačíst $vše
+close-buffer.label=Zavřít
+close-buffer.tooltip=Zavře buffer pouze v EditPanelové buffer sadě
+global-close-buffer.label=Zavřít (globálně)
+global-close-buffer.tooltip=Zavře buffer ve všech pohledech
+closeall-except-active.tooltip=Za$vře ostatní buffery v EditPanelové buffer sadě
+closeall-except-active.label=Zavřít o$statní
+closeall-bufferset.label=Zavřít vš$e
+closeall-bufferset.tooltip=Vyčistí EditPanelovou buffer sadu
+bufferset-toggle-exclusive.label=Zapnout exkluzivní buffer sadu
+bufferset-toggle-exclusive.tooltip=Je-li buffer nově otevřen, zavře se v jiné nekřížící se buffer sadě 
+close-all.label=Zavřít vše (globálně)
+close-all.tooltip=Zavře všechny buffery ve všech pohledech
+save.label=$Uložit
+save-as.label=U$ložit jako...
+save-a-copy-as.label=Uložit kop$ii jako...
+save-a-copy-as.tooltip=Nezmění aktuální cestu bufferu...
+save-all.label=Uložit $vše...
+print.label=$Tisk...
+page-setup.label=Nastavení $stránky...
+# Print selection not yet implemented
+#print-selection.label=Prin$t Selection...
+exit.label=E$xit
+
+#{{{ Recent Files menu
+recent-files.label=Poslední $Soubory
+recent-files.textfield.tooltip=Prefix filtr nebo pattern můžete vložit sem...
+no-recent-files.label=Žádné nedávné soubory
+clear-recent-files.label=Pročistit nedávno otevřené soubory
+#}}}
+
+reload-encoding.label=Znovunačíst s kódováním
+reload-encoding.error={0} není validní kódování
+
+#}}}
+
+#{{{ Edit menu
+
+edit.label=$Upravit
+undo.label=$Zpět
+redo.label=Z$novu
+cut.label=V$yjmout
+copy.label=$Kopírovat
+paste.label=$Vložit
+select-all.label=Vy$brat vše
+word-count.label=$Počet slov...
+complete-word.label=$Dokončit slovo
+expand-abbrev.label=$Rozbalit zkratku
+goto-line.label=$Jdi na řádek...
+
+#{{{ More Clipboard menu
+clipboard.label=Pokročilá $schránka
+cut-append.label=Vyjmout $přidat
+copy-append.label=$Kopírovat přidat
+vertical-paste.label=Vložit v$ertikálně
+paste-previous.label=$Vložit předchozí...
+paste-deleted.label=Vložit s$mazané...
+paste-special.label=Vložit speciální...
+cut-string-register.label=Vyj$mout do registru
+copy-string-register.label=K$opírovat do registru
+paste-string-register.label=Vložit $registr
+clear-string-register.label=Vyčistit registr
+cut-append-string-register.label=V$yjmout vložit do registru
+copy-append-string-register.label=Kopírov$at vložit do registru
+vertical-paste-string-register.label=Ver$tikálně vložit registr
+view-registers.label=$Zobrazit registr
+#}}}
+
+#{{{ More Selection menu
+selection.label=Další $možnosti výběru
+select-none.label=$Odznačit vše
+select-word.label=Vybrat $slovo
+select-line.label=Vybrat řád$ek
+select-paragraph.label=Vybrat o$dstavec
+invert-selection.label=$Invertovat výběr
+toggle-multi-select.label=Ví$cenásobný výběr
+toggle-rect-select.label=O$bdélníkový výběr
+select-line-range.label=Vybrat $rozsah řádek...
+#}}}
+
+#{{{ Text menu
+text.label=$Text
+delete-line.label=$Smazat řádky
+delete-start-line.label=Smazat do $začátku řádky
+delete-end-line.label=Smazat do $konce řádky
+join-lines.label=S$pojit řádky
+delete-paragraph.label=Smazat $odstavec
+format-paragraph.label=$Formátovat odstavec
+to-lower.label=Na $malá písmena
+to-upper.label=Na $velká písmena
+#}}}
+
+#{{{ Indent menu
+indent.label=$Odsazení
+indent-lines.label=O$dsadit řádky
+shift-left.label=Posunou odrážku v$levo
+shift-right.label=Posunout odrážku v$pravo
+remove-trailing-ws.label=Odebrat $koncové mezery
+spaces-to-tabs.label=$Mezery na tabulátory (Tab)
+tabs-to-spaces.label=$Tabulátory (Tab) na mezery
+#}}}
+
+#{{{ Source menu
+source.label=Zdroj
+range-comment.label=Zakomentovat $výběr
+line-comment.label=$Zakomentovat řádek
+select-block.label=$Vybrat blok kódu
+match-bracket.label=Jdi na $odpovídající závorku
+prev-bracket.label=Jdi na $předchozí závorku
+next-bracket.label=Jdi na $další závorku
+#}}}
+
+#}}}
+
+#{{{ Search menu
+search.label=$Hledat
+find.label=$Najít...
+find-next.label=Najít $další
+find-prev.label=Najít $předchozí
+search-in-open-buffers.label=Hledat v otevřechých $bufferech...
+search-in-directory.label=Hledat v $adresáři...
+replace-in-selection.label=$Nahradit vybrané
+replace-and-find-next.label=Nahradit and Najít $další
+replace-all.label=Nahradit $vše
+quick-search.label=$Inkrementální vyhledávací panel
+hypersearch.label=Panel $hypervyhledávání
+quick-search-word.label=Inkrementální vyhledávání $slova
+hypersearch-word.label=Hypervyhledávání slova
+whole-word.label=$Celé slovo
+ignore-case.label=Ignorovat v$elikost písmen
+regexp.label=$Regulární výrazy
+hypersearch-results.label=Výsledky Hyperhledání
+#}}}
+
+#{{{ Markers menu
+markers.label=$Záložky
+add-marker.label=Přidat/$Odebrat Záložku
+add-marker-shortcut.label=Př$idat záložku se zkratkou
+remove-all-markers.label=Odebrat $všechny záložky
+goto-marker.label=$Jdi na záložku
+select-marker.label=V$yber po záložku
+swap-marker.label=Prohodit záložku a $kurzor
+prev-marker.label=Jdi na $předchozí záložku
+next-marker.label=Jdi na $následujicí záložku
+no-markers.label=Žádné záložky
+markers.blank-line=[Prázdný řádek]
+#}}}
+
+#{{{ Folding menu
+folds.label=F$oldování
+collapse-fold.label=$Sbalit fold
+expand-one-level.label=$Rozbalit jednu úroveň foldu
+expand-fold.label=Rozbalit fold ú$plně
+collapse-all-folds.label=Sbalit $všechny foldy
+expand-folds.label=R$ozbalit foldy s úrovní
+expand-all-folds.label=Ro$zbalit všechny foldy
+select-fold.label=$Vybrat fold
+add-explicit-fold.label=$Přidat explicitní fold
+narrow-to-fold.label=Zúžit na $fold
+narrow-to-selection.label=Zúžit na vý$běr
+parent-fold.label=$Jdi na rodičovský fold
+prev-fold.label=Jdi na př$edchozí fold
+next-fold.label=Jdi na $následující fold
+#}}}
+
+#{{{ View menu
+view.label=$Pohledy
+new-view.label=Nový $pohled 
+new-view.tooltip=Nové hlavní okno s možností $dokování
+new-plain-view.label=Nový $prostý pohled
+new-plain-view.tooltip=Nové hlavní okno s menším množstvím nástrojových panelů a s žádným dokováním
+close-view.label=Z$avřít pohled
+close-view.tooltip=Zavře hlavní okno a jEdit také, pokud je to jediný pohled
+prev-buffer.label=Jdi na předchozí $buffer
+next-buffer.label=Jdi na další b$uffer
+recent-buffer.label=Jdi na poslední bu$ffer
+toggle-buffer-switcher.label=Zobrazit $selektor bufferu
+focus-buffer-switcher.label=Fo$cus na selektor bufferu
+toggle-line-numbers.label=Zobrazit čí$sla řádek
+toggle-statusbar.label=Zobrazit s$tavový řádek
+toggle-gutter.label=Zobrazit $Gutter
+show-context-menu.label=Zobrazit $kontextové menu
+set-view-title.label=Nastavit $název zobrazení
+set-view-title.tooltip=Nastaví název hlavního okna pro jednoduchou identifikaci z plochy.
+toggle-full-screen.label=Zapnout "Na celou obrazovku"
+
+#{{{ Scrolling menu
+scrolling.label=Posunování (skrolování)
+scroll-to-current-line.label=Posunout $na aktuální řádek
+scroll-and-center.label=$Posunout na kurzor a vycentrovat obrazovku
+center-caret.label=$Posunout kurzor na střed obrazovky
+scroll-up-line.label=Posunout o řádek $nahoru
+scroll-down-line.label=Posunou o řádek $dolů
+scroll-up-page.label=Posunout o stránku n$ahoru
+scroll-down-page.label=Posunout o stránku d$olů
+#}}}
+
+#{{{ Splitting menu
+splitting.label=$Rozdělení oken
+split-horizontal.label=Rozdělit $horizontálně
+split-vertical.label=Rozdělit $vertikálně
+unsplit-current.label=$Odrozdělit aktuální
+unsplit.label=Odrozdělit $vše
+resplit.label=O$bnovit rozdělení
+prev-textarea.label=Jdi na $předchozí textovou oblast
+next-textarea.label=Jdi na $další textovou oblast
+buffersets.label=$Bufferové sady
+global-bufferset.label=$Globalní rozsah bufferové sady
+global-bufferset.tooltip=Všechny EditPanely sdílejí stejnou bufferovou sadu.
+view-bufferset.label=$Pohledový rozsah bufferové sady
+view-bufferset.tooltip=EditPanely v jednom Pohledu sdílejí stejnou bufferovou sadu.
+editpane-bufferset.label=$EditPanelový rozsah bufferové sady
+editpane-bufferset.tooltip=Každý EditPanel má svou vlastní bufferovou sadu.
+#}}}
+
+#{{{ Docking menu
+docking.label=$Dokování
+docking.menu.label=Dokovatelné $menu
+toggle-dock-areas.label=$Přepnout dokované oblasti
+left-docking-area.label=Jdi na $levou dokovací oblast
+top-docking-area.label=Jdi na $vrchni dokovací oblast
+right-docking-area.label=Jdi na $pravou dokovací oblast
+bottom-docking-area.label=Jdi na $dolní dokovací oblast
+focus-textarea.label=Jdi na $textové pole
+close-docking-area.label=$Uzavři aktuální dokovací oblast
+layout-load.label=$Načti dokovací rozmístění ...
+layout-save.label=U$lož dokovací rozmístění ...
+layout-load-current-mode.label=Načí$st dokovací rozmístění aktuálního režimu
+layout-save-current-mode.label=Uloži$t dokovací rozmístění aktuálního režimu
+#}}}
+
+#}}}
+
+#{{{ Utilities menu
+
+utils.label=$Nástroje
+vfs.browser.label=$Prohlížeč souborového systému
+action-bar.label=Panel $akcí
+last-action.label=$Opakovat poslední akci
+buffer-options.label=Možnosti $bufferu...
+global-options.label=$Globální možnosti...
+combined-options.label=$Možnosti...
+
+#{{{ Recent Directories menu
+recent-directories.label=$Poslední adresáře
+no-recent-dirs.label=Žádné poslední adresáře...
+#}}}
+
+#{{{ Favorites menu
+favorites.label=$Oblíbené
+add-buffer-to-favorites.label=Přidat $buffer do Oblíbených
+add-dir-to-favorites.label=Přidat $adresář do Oblíbených
+edit-favorites.label=$Upravit Oblíbené
+#}}}
+
+#{{{ Current Directory menu
+current-directory.label=$Aktuální adresář
+#}}}
+
+#{{{ jEdit Home Directory menu
+jedit-directory.label=Domovský adresář $jEdit
+#}}}
+
+#{{{ Settings Directory menu
+settings-directory.label=Adresář $nastavení
+#}}}
+
+#{{{ BeanShell menu
+beanshell.label=$BeanShell
+eval.label=$Vyhodnotit BeanShell výraz...
+eval-for-selected-lines.label=Vyhodnotit $pro vybrané řádky...
+eval-selection.label=Vyhodnotit vý$běr
+#}}}
+
+#{{{ Troubleshooting menu
+troubleshooting.label=$Troubleshooting
+log-viewer.label=Log $aktivit
+update-log.label=Aktualizuj Log aktivit na $disku
+io-progress-monitor.label=$I/O progres
+task-monitor.label=$Monitor úloh
+keyboard-tester.label=Tester $klávesnice...
+memory-status.label=Status $paměti...
+reload-modes.label=Znovunačíst $režimy úprav
+#}}}
+
+#{{{ Quick options menu
+quick-options.label=$Rychlé nastavení
+edit-syntax-style.label=Upravit styl syntaxe tokenu pod kurzorem
+#}}}
+
+#}}}
+
+#{{{ Macros menu
+macros.label=$Makro
+new-macro.label=Nové $makro
+record-macro.label=Začít $nahrávat makro...
+stop-recording.label=$Zastavit nahrávání
+last-macro.label=Opakovat $poslední makro
+record-temp-macro.label=Nahrát $dočasné makro
+run-temp-macro.label=Př$ehrát dočasné makro
+run-other-macro.label=Přehrát $jiné makro...
+rescan-macros.label=$Aktualizovat makra
+no-macros.label=Žádná makra
+#}}}
+
+#{{{ Plugins menu
+plugins.label=$Pluginy
+plugin-manager.label=$Plugin manažer...
+plugin-options.label=Plugin $možnosti...
+no-plugins.label=Žádné pluginy nejsou nainstalovány
+#}}}
+
+#{{{ Help menu
+help-menu.label=Nápověd$a
+about.label=$Něco o jEdit...
+help.label=jEdit Ná$pověda
+tip-of-the-day.label=$Tip dne
+userFeedback.label=Máte připomínky?...
+#}}}
+
+#}}}
+
+#{{{ Macro strings
+
+macro.temp.header=// Toto je dočasné makro. Nejprve zkontrolujte \n\
+                  // potřebné příkazy, abyste se ujistili, že makro \n\
+                  // odráží váš úmysl. Pokud chcete spustit makro,\n\
+                  // přepněte na příslušný buffer a zmáčkněte C+m C+p.\n\
+
+macro.header=// Toto je nahrané makro. Nejprve zkontrolujte \n\
+             // potřebné příkazy, abyste se ujistili, že makro \n\
+             // odráží váš úmysl. Následně uložte tento buffer. \n\
+             // Makro by se mělo objevit v Makro menu.\n\
+
+
+#}}}
+
+#{{{ Commands that don't appear in menus
+backspace-word.label=Smazat předchozí slovo
+backspace-word-std.label=Smazat předchozí slovo (včetně mezer)
+backspace-word-std-after.label=Smazat předchozí slovo (včetně mezer za slovem)
+backspace.label=Smazat předchozí znak
+delete-word.label=Smazat další slovo
+delete-word-std.label=Smazat další slovo (včetně mezer)
+delete.label=Smazat další znak
+document-end.label=Jdi na konec bufferu
+document-home.label=Jdi na začátek bufferu
+end.label=End
+home.label=Home
+smart-end.label=Chytrý End
+smart-home.label=Chytrý Home
+insert-literal.label=Vložit další znak doslovně
+insert-newline.label=Vložit nový řádek
+insert-newline-indent.label=Vložit nový řádek a odrážku
+insert-tab.label=Vložit tabulátor
+insert-tab-indent.label=Vložit tabulátor a odrážku
+line-end.label=Jdi na konec řádky
+line-home.label=Jdi na začátek řádky
+next-char.label=Jdi na další znak
+next-line.label=Jdi na další řádku
+next-page.label=Jdi na další stránku
+next-paragraph.label=Jdi na další odstavec
+next-word.label=Jdi na další slovo
+next-word-std.label=Jdi na další slovo (včetně mezer)
+overwrite.label=Přepisovací režim
+prev-char.label=Jdi na předchozí znak
+prev-line.label=Jdi na předchozí řádek
+prev-page.label=Jdi na předchozí stránku
+prev-paragraph.label=Jdi na předchozí odstavec
+prev-word.label=Jdi na předchozí slovo
+prev-word-std.label=Jdi na předchozí slovo (včetně mezer)
+prev-word-std-after.label=Jdi na předchozí slovo (včetně mezer za slovem)
+select-document-end.label=Vybrat do konce bufferu
+select-document-home.label=Vybrat po začátek bufferu
+select-end.label=Vybrat po Smart End pozici
+select-home.label=Vybrat po Smart Home pozici
+select-line-end.label=Vybrat po konec řádky
+select-line-home.label=Vybrat po začátek řádky
+select-next-char.label=Vybrat další znak
+select-next-line.label=Vybrat další řádek
+select-next-page.label=Vybrat další stránku
+select-next-paragraph.label=Vybrat další odstavec
+select-next-word.label=Vybrat další slovo
+select-next-word-std.label=Vybrat další slovo (včetně mezer)
+select-prev-char.label=Vybrat předchozí znak
+select-prev-line.label=Vybrat předchozí řádek
+select-prev-page.label=Vybrat předchozí stránku
+select-prev-paragraph.label=Vybrat předchozí odstavec
+select-prev-word.label=Vybrat předchozí slovo
+select-prev-word-std.label=Vybrat předchozí slovo (včetně mezer)
+select-prev-word-std-after.label=Vybrat předchozí slovo (včetně mezer za slovem)
+select-visible-end.label=Vybrat po poslední viditelnou řádku
+select-visible-home.label=Vybrat po první viditelnou řádku
+select-whitespace-end.label=Vybrat po konec mezer
+select-whitespace-home.label=Vybrat po začátek mezer
+toggle-line-separator.label=Přepnout řádkový oddělovač
+toggle-word-wrap.label=Přepnout zalamování řádků
+visible-end.label=Jdi na poslední viditelnou řádku
+visible-home.label=Jdi na první viditelnou řádku
+whitespace-end.label=Jdi na konec mezer
+whitespace-home.label=Jdi na začátek mezer
+#}}}
+
+#{{{ View stuff
+
+# Title
+view.title=jEdit -\u0020
+view.title.dirty=\ (změněno)
+
+view.docking.close-tooltip=Skryje aktuální dokované okno
+view.docking.menu-tooltip=Možnosti dokování
+view.docking.menu-floating=Plovoucí
+view.docking.menu-top=Dokovat nahoře
+view.docking.menu-left=Dokovat vlevo
+view.docking.menu-bottom=Dokovat ve spodní části
+view.docking.menu-right=Dokovat vpravo
+view.docking.menu-clone=Nová plovoucí instance
+view.docking.menu-close=Zavřít
+view.docking.menu-undock=Oddokovat
+
+view.docking.toggle.label={0} (Přepnout)
+view.docking.float.label={0} (Nová plovoucí instance)
+
+directory.not-local=Nelze zobrazit adresáře na vzdáleném souborovém systému
+directory.no-files=Žádné soubory
+
+#{{{ Gutter highlight
+view.gutter.marker.no-name=Záložka
+view.gutter.marker=Záložka: {0}
+#}}}
+
+#{{{ Status messages
+view.status.add-marker=Zkratka pro novou záložku? [{0}]
+view.status.auto-wrap=Hledaný řetězec nebyl nalezen - zalamování textu okolo!
+view.status.bracket=Odpovídá řádce {0}: {1}
+view.status.caret-tooltip=Offset, číslo řádky a sloupce (offset,line,column[-virtual] relative%)
+view.status.copy-append-string-register=Název registru do kterého kopírovat a přidat? [{0}]
+view.status.copy-string-register=Registr do kterého kopírovat? [{0}]
+view.status.cut-append-string-register=Registr do kterého vyjmout a přidat? [{0}]
+view.status.cut-string-register=Registr do kterého vyjmout? [{0}]
+view.status.expand-folds=Úroveň foldu? [1-9]
+view.status.goto-marker=Zkratka záložky na kterou chcete jít? [{0}]
+view.status.incomplete-abbrev=Specifikováno {0} parametrů, ale je vyžadováno {1} !
+view.status.insert-literal=Klávesa k vložení doslovně?
+view.status.io-1=I/O: probíhá 1 operace
+view.status.io.done=Input/output hotovo
+view.status.io=I/O: probíhá {0} operací
+view.status.linesep-changed=Oddělovač řádek nastaven na {0}
+view.status.linesep-tooltip=Oddělovač řádek (klikněte pro změnu)
+view.status.memory-tooltip=Java heap memory: {0}Kb/{1}Kb
+view.status.mode-tooltip=Aktuální režim úprav, režim foldování a kódování
+view.status.multi-changed=Vícenásobný režim výběru je {0,choice,0#off|1#on}
+view.status.multi-tooltip=Vícenásobný režim výberu (klikněte pro změnu)
+view.status.narrow=Vyvolat "Rozbalit všechny foldy" pro opětovné zviditelnění veškerého textu
+view.status.no-markers=nejsou nastaveny žádné záložky
+view.status.no-registers=nejsou definovány žádné registry
+view.status.overwrite-changed=Režim přepisování je {0,choice,0#off|1#on}
+view.status.overwrite-tooltip=Indikátor režimu přepisování/vkládání (klikněte pro změnu)
+view.status.paste-string-register=Z jakého registru vkládat? [{0}]
+view.status.print=Tisk stránky {0}
+view.status.quick-copy=Rychlý kopírovací režim - označený text nahradí výběr
+view.status.recording=Nahrávání makra
+view.status.rect-select-changed=Obdélníkový výběr je {0,choice,0#off|1#on}
+view.status.rect-tooltip=Režim obdélníhového výběru (klikněte pro změnu)
+view.status.replace-all=Nahrazeno {0} výskytů v {1} souborech
+view.status.search-not-found=Hledaný řetězec nebyl nalezen.
+view.status.select-marker=Zkratka záložky po kterou chcete vybrat? [{0}]
+view.status.swap-marker=Zkratka záložky se kterou prohodit kurzor? \
+	[{0}]
+view.status.vertical-paste-string-register=Z kterého registru vertikálně vložit?\
+	[{0}]
+view.status.wrap-changed=Režim zalamování slov je nyní "{0}"
+view.status.wrap-tooltip=<html>Režim zalaování slov je {0} (klikněte pro změnu)</html>
+view.status.indent-tooltip=Automatický indikátor odrážek Automatic (klikněte pro změnu)
+view.status.autoindent-changed=Status automatických odrážek je "{0}"
+view.status.bufferset-tooltip=Rozsah bufferových sad je {0}
+wrap.none=vypnutý
+wrap.hard=hard
+wrap.soft=soft
+#}}}
+
+#{{{ Status bar component visibility
+
+#}}}
+
+#}}}
+
+#{{{ Printing
+
+print.headerText=jEdit - {0}
+print.footerText={0} :: strana {1}
+
+print-error.title=Chyba tisku
+print-error.message=Při pokusu o tisk nastala chyba:\n\
+	{0}
+#}}}
+
+#{{{ Various dialog boxes
+
+#{{{ About dialog
+about.title=O jEdit
+about.version=jEdit {0} {1} režim, s použitím {2} Java {3}
+about.mode.standalone=Samostatný
+about.mode.server=server
+about.mode.server-background=server-background
+about.navigate=Využijte šipek pro navigaci v textu
+
+# This text scrolls by in the about dialog box.
+# Hack: Since StringTokenizer treats two consequent \n as one token, we
+# insert a space by itself in the text to create blank lines.
+about.text.prefix=jEdit vám přináší
+about.text.suffix=Rád bych také poděkoval uživatelům za jejich\n\
+                    komentáře, feedback a bug reporty.
+#}}}
+
+#{{{ Error list dialog, used to report I/O and plugin load errors
+error-list.plugin-manager=Plugin manažer
+#}}}
+
+#{{{
+largeBufferDialog.title=Rozsáhlý buffer {0}
+largeBufferDialog.message=Buffer je rozsáhlý a jEdit může přestat odpovídat\n\
+	kvůli zvýrazňování syntaxe. Měli byste zvážit následující možnosti.\n\
+	-Ponechat úplnou syntaxi: Zvýrazňování syntaxe bude pracovat jako obvykle,\n\
+	jEdit však může být velice pomalý, což nedoporučujeme. \n\
+	-Kontextově necitlivé zvýraznění syntaxe. V tomto případě bude jEdit \n\
+	provádět rychlé zvýrazňování, ale výsledek nemusí být dokonalý. Buffer \n\
+	bude zvýrazněn řádek po řádce bez kontroly kontextu předchozích řádek.\n\
+	Je možné že syntaxe nebude přesná, pokud máte tokeny na více řádkách (více-\n\
+	řádkové komentáře, xml tagy ...)\n\
+	-Použijte jEdit "text" režim (žádné zvýrazňování syntaxe)
+largeBufferDialog.fullSyntax=Úplné zvýraznění syntaxe
+largeBufferDialog.contextInsensitive=Kontextově necitlivé zvýraznění syntaxe
+largeBufferDialog.defaultMode=Režim úpravy textu
+#}}}
+
+#{{{ I/O error dialog box
+ioerror.title=I/O Chyba
+ioerror.caption=Následující {0} I/O operace nemohly být dokončeny:
+ioerror.caption-1=Následující I/O operace nemohly být dokončeny:
+
+ioerror={0}
+ioerror.directory-error=Nelze vypsat adresář: {0}
+ioerror.directory-error-nomsg=Nelze vypsat adresář
+ioerror.encoding-error=Soubor nelze načíst správně (některá data mohou být ztracena) \n\
+                     v kódování "{0}".\n\
+	({1})\n\
+        Zkuste vybrat jiné kódování.\n\
+        Můžete jej vybrat v menu Soubor->Znovunačíst s kódováním.\n\
+        Pokud toto chcete provést automaticky, přijdete kandidáty do \n\
+        "Seznam záložních kódování" v Nástroje->Možnosti a Kódování.
+ioerror.write-encoding-error=Nepovedlo se zakódovat znak\n\
+	{3} ve sloupci {2}  na řádce {1} s kódováním "{0}".
+ioerror.read-error=Nelze načíst: {0}
+ioerror.write-error=Nelze uložit: {0}
+ioerror.unsupported-encoding-error={0} charset není podporován vaší JVM
+ioerror.open-directory=Nelze otevřít adresář jako buffer.
+ioerror.save-directory=Nelze uložit buffer přes adresář.
+ioerror.no-read=Nedostatečná oprávnění pro načtení souboru.
+ioerror.no-write=Nedostatečná oprávnění pro uložení souboru.
+ioerror.write-error-readonly=Nelze uložit, soubor je pouze ke čtení.
+ioerror.save-readonly-twostagefail=Nelze uložit, soubor je pouze ke čtení a nelze jej uložit dvoufázově.
+ioerror.badurl=Neplatná URL: {0}
+ioerror.delete-error=Nelze odstranit soubor.
+ioerror.rename-exists=Nelze přepsat existující soubor {0}.
+ioerror.rename-error=Nelze přejmenovat na {0}.
+ioerror.mkdir-error=Nelze vytvořit adresář.
+
+vfs.not-supported.list=Nelze procházet adresáře na "{0}" souborovém systému.
+vfs.not-supported.load=Nelze otevřít soubory na "{0}" souborovém systému.
+vfs.not-supported.save=Nelze uložit soubory na "{0}" souborovém systému.
+
+vfs.overwrite-readonly.title=Soubor je určen pouze ke čtení
+vfs.overwrite-readonly.message=Soubor {0} je určen pouze ke čtení.\n\
+        Chcete jej i tak uložit a resetovat atribut "pouze ke čtení"?\n\
+        Toto použije dvoufázové uložení(resetuje vlastníka souboru na Unix)
+
+vfs.twostageimpossible.title=Nelze použít dvoufázové uložení.
+vfs.twostageimpossible.message=Nelze použít dvoufázové uložení, chcete \n\
+	jej přesto uložit?
+
+out-of-memory-error=Nedostatek Java heap memory pro dokončení\n\
+        tohoto požadavku. Zkuste zvýšit maximální velikost heapu \n\
+        (haldy). \n\
+	\n\
+        Dokumentace týkající se změny velikosti Java heapu (haldy) \n\
+        můžete nalézt v sekci "Buffery", kapitola "jEdit Basics".
+
+#}}}
+
+#{{{ Old I/O error dialog boxes
+ioerror.message=Vyskytla se I/O chyba ({0})
+
+read-error.title=Chyba ve čtení
+# {0} - the path name {1} - the error message
+read-error.message=Soubor {0}\n\
+	nemohl být načten z důvodu I/O chyby.\n\
+	({1})
+
+write-error.title=Chyba při zápisu
+# {0} - the path name {1} - the error message
+write-error.message=Soubor {0}\n\
+	nemohl být uložen z důvodu I/O chyby.\n\
+	({1})
+
+directory-error.title=Chyba v adresáři
+# {0} - the path name {1} - the error message
+directory-error.message=Adresář {0}\n\
+	nemohl být vypsát z důvodu I/O chyby.\n\
+	({1})
+
+directory-error-nomsg.title=Chyba v adresáři
+# {0} - the path name
+directory-error-nomsg.message=Adresář {0}\n\
+	nemohl být vypsán z důvodu I/O chyby.
+
+encoding-error.title=Nekompatibilní kódování
+encoding-error.message=Soubor {0}\n\
+	nemohl být načten s "{1}" kódováním.\n\
+	({2})\n\
+	\n\
+	Pro využití jiného kódování, zkuste příkazy v menu \n\
+        Soubor->Otevřít v kódování
+	\n\
+        Pokud jste opravdu zaseklí a nevíte kudy kam, zkuste \n\
+        kódování "ASCII" nebo "8859_1".
+
+open-directory.title=Nelze otevřít adresář
+open-directory.message={0} je adresář.\n\
+	Adresáře nelze otevřít pro úpravy.
+
+save-directory.title=Nelze uložit adresář
+save-directory.message={0} je adresář.\n\
+	Buffery nemohou být uloženy přes adresáře.
+
+no-read.title=Nelze otevřít soubor
+no-read.message=Nelze číst z {0}.\n\
+	Toto nejspíš znamená, že nemáte dostatečná oprávnění.
+
+no-write.title=Nelze uložit soubor
+no-write.message=Nezle uložit do {0}.\n\
+	Toto nejspíš znamená, že nemáte dostatečná oprávnění.
+
+badurl.title=Špatná URL
+# {0} - the URL
+# {1} - the error
+badurl.message=Následující URL není validní: {0}\n\
+	({1})
+#}}}
+
+#{{{ Go to line dialog
+goto-line.title=Jdi na řádku
+goto-line.message=Jdi na řádku:
+#}}}
+
+#{{{ Word count dialog
+wordcount.title=Počet slov
+# {0} - characters
+# {1} - words
+# {2} - lines
+wordcount.message=Znaky: {0}\nSlova: {1}\nŘádky: {2}
+#}}}
+
+#{{{ Set marker dialog
+setmarker.title=Nastavit záložku
+setmarker.message=Název záložky:
+#}}}
+
+#{{{ File not saved dialog
+notsaved.title=Soubor nebyl uložen
+# {0} - file name
+notsaved.message=Uložit změny do {0}?
+#}}}
+
+#{{{ File changed, still reload dialog
+changedreload.title=Soubor upraven
+changedreload.message=Soubor {0}\n\
+        byl změněn od posledního uložení; pokud budete \n\
+        pokračovat, veškeré změny budou ztraceny. Pokračovat?
+#}}}
+
+#{{{ Autosave file exists dialog
+autosave-found.title=Nalezen soubor s autosave
+# {0} - autosave file name
+autosave-found.message=Autosave soubor {0}\n\
+	byl nalezen. Toto nejspíš znamená, že jEdit spadnul dříve, než \n\
+        jste mohli cokoliv uložit. Chcete otevřít autosave soubor?
+
+autosave-loaded.title=Načten autosave soubor
+autosave-loaded.message=Autosave soubor {0}\n\
+        byl načten. Nyní byste měli zkontrolovat, zda neobsahuje vaše \n\
+        neuložená data. Chcete-li ponechat změny, uložte soubor. V opačném \n\
+        případě vyberte Soubor->Znovunačíst
+#}}}
+
+#{{{ Save all confirm dialog
+saveall.title=Uložit všechny buffery
+saveall.message=Opravdu chcete uložit všechny změněné buffery?
+#}}}
+
+#{{{ Reload all confirm dialog
+reload-all.title=Znovunačíst všechny buffery
+reload-all.message=Opravdu chcete znovunačíst všechny buffery z disku? \n\
+        Neuložené změny v jakémkoli otevřeném bufferu BUDOU ZTRACENY!
+#}}}
+
+#{{{ Encoding prompt
+encoding-prompt.title=Otevřít v jiném kódování
+encoding-prompt.message=Použít ke kódování znaků:
+#}}}
+
+#{{{ Macro recording already in progress dialog
+already-recording.title=Probíhá nahrávání
+already-recording.message=Nahrávání makra již probíhá
+#}}}
+
+#{{{ No temporary macro dialog
+no-temp-macro.title=Žádné dočasné makro
+no-temp-macro.message=Žádné dočasné makro nebylo nahráno.
+#}}}
+
+#{{{ Record macro dialog
+record.title=Nahrávání makra
+record.message=Název makra:
+#}}}
+
+#{{{ Some features don't work with -nosettings dialog
+no-settings.title=Feature vypnuta
+no-settings.message=jEdit byl spuštěn s přepínačem -nosettings. \n\
+        K použítí této feature musíte spustit jEdit bez tohoto přepínače.
+#}}}
+
+#{{{ Some features don't work with the web start version
+no-webstart.title=Feature vypnuta
+no-webstart.message=Tato feature není dostupná ve WebStart verzi jEditu.
+#}}}
+
+#{{{ Search and replace dialog
+search.title=Najít a Nahradit
+
+search.find=Najít:
+search.find.tooltip=PgUp/PgDown nebo pravý-klik pro vyvolání předchozího
+search.find.mnemonic=s
+search.replace=Nahradit za:
+search.replace.mnemonic=w
+search.string-replace-btn=Text
+search.beanshell-replace-btn=Návratová hodnota úryvku BeanShell
+
+search.settings=Nastavení:
+search.keep=Podržet dialog
+search.keep.mnemonic=k
+search.word=Celé slovo
+search.word.mnemonic=q
+search.case=Ignorovat velikost písmen
+search.case.mnemonic=i
+search.regexp=Regulární výrazy
+search.regexp.mnemonic=x
+search.hypersearch=Hyperhledání
+search.hypersearch.mnemonic=h
+search.wrap=Po skončení prohledat od začátku
+search.wrap.mnemonic=t
+
+search.direction=Směr:
+search.back=Vzad
+search.back.mnemonic=b
+search.forward=Vpřed
+search.forward.mnemonic=o
+
+search.fileset=Hledat ve:
+search.selection=Výběru
+search.selection.mnemonic=n
+search.current=Aktuálním bufferu
+search.current.mnemonic=c
+search.all=VÅ¡ech bufferech
+search.all.mnemonic=l
+search.directory=Adresáři:
+search.directory.mnemonic=d
+search.skipHidden=Přeskakovat skryté/zálohy
+search.skipBinary=Přeskakovat binární soubory
+search.skipHidden.mnemonic=h
+search.skipBinary.mnemonic=b
+
+search.directoryField=Adresář:
+search.directoryField.mnemonic=y
+search.filterField=Filtr:
+search.filterField.mnemonic=f
+glob.tooltip={*.c,*.h} pro více koncovek
+search.subdirs=Prohledat podadresáře
+search.subdirs.mnemonic=u
+search.choose=Vybrat...
+search.choose.mnemonic=e
+search.synchronize=Synchronizovat
+search.synchronize.mnemonic=z
+search.synchronize.tooltip=Nastaví filtr a adresář na aktuálníkoncovku/umístění bufferu. 
+search.findBtn=Najít
+search.findBtn.mnemonic=f
+search.replaceBtn=Nahradit
+search.replaceAndFindBtn=Nahradit & Najít
+search.replaceAndFindBtn.mnemonic=r
+search.replaceAllBtn=Nahradit vše
+search.replaceAllBtn.mnemonic=a
+
+# Beep when searching automatically wraps?
+
+#}}}
+
+#{{{ Keep searching dialog
+keepsearching.title=Nenalezeny žádné další shody
+keepsearching.message=Nenalezeny žádné další shody. Pokračovat v hledání od\n\
+	{0,choice,0#beginning|1#end}?
+#}}}
+
+#{{{ HyperSearch results dialog
+hypersearch-results.title=Výsledky hyperhledání
+hypersearch-results.result-caption={0} ({1,choice,1#1 occurrence|1<{1,number,integer} výskytů v '{2,choice,1#1 file|1<{2,number,integer} souborech}'})
+hypersearch-results.open=Otevřít
+hypersearch-results.open-view=Otevřít v novém pohledu
+hypersearch-results.open-plain-view=Otevřít v novém prostém pohledu
+hypersearch-results.open-split=Otevřít v novém rozdělení
+hypersearch-results.remove-node=Odebrat uzel
+hypersearch-results.new-search=Nové hledání odsud
+hypersearch-results.expand-child-nodes=Rozbalit uzel potomka
+hypersearch-results.collapse-child-nodes=Sbalit uzel potomka
+hypersearch-results.copy-to-clipboard=Kopírovat do schránky
+hypersearch-results.redo=Znovu hyperhledání
+hypersearch-results.tree-view=Přepnout stromové zobrazení
+hypersearch-results.clear.label=Odebrat všechny uzly
+hypersearch-results.stop.label=Zastavít hyperhledání a zobrazit aktuální výsledky
+hypersearch-results.multi.label=Přepnout vícenásobné výsledky
+hypersearch-results.highlight.label=Nastavit zvýrazňování shod
+hypersearch-results.file-caption={0} ({1,choice,1#1 occurrence|1<{1,number,integer} výskytů na '{2,choice,1#1 line|1<{2,number,integer} řádkách}'})
+hypersearch-results.searching=Hledám "{0}"...
+hypersearch-results.no-results=Nenalezeny žádné výsledky pro "{0}".
+hypersearch-results.done=Výsledky pro "{0}":
+
+hypersearch-status=Hledání
+#}}}
+
+#{{{ HyperSearch too many results
+hypersearch.tooManyResults.label=Příliš mnoho výsledků
+hypersearch.tooManyResults.title=Příliš mnoho výsledků
+hypersearch.tooManyResults.message=Hledání, které jste provedli, vrátilo {0} \
+        výsledky, ale není ještě hotové. Chcete jej zastavit?
+#}}}
+
+
+#{{{ Search and replace error dialog
+searcherror.title=Chyba při Najít a Nahradit
+# {0} - error message
+searcherror.message=Při provádění této operace se vyskytla chyba.
+#}}}
+
+#{{{ Search and replace error dialog
+searcherror-bsh.title=Chyba při Najít a nahradit
+# {0} - error message
+searcherror-bsh.message=Při provádění této operace se vyskytla chyba.\n\
+        \n\
+        Ujistěte se, že nahrazovací režim je nastaven na "Text", pokud jste \n\
+        nezamýšleli nahradit string, který má být interpretován jako \n\
+        BeanShell výraz.
+#}}}
+
+#{{{ Empty fileset error dialog
+empty-fileset.title=Prázdná množina souborů
+empty-fileset.message=Vybrané hledání souborů nenalezlo žádné soubory. \n\
+        Ujistěte se, prosím, že hledané jméno souboru a adresáře je \n\
+        nastavené správně.
+#}}}
+
+#{{{ Can only search local directories dialog
+remote-dir-search.title=Vybrán nelokální adresář
+remote-dir-search.message=Pro hledání jste zvolili nelokální adresář\n\
+        Tato operace může být velice pomalá kvůli síťové latenci apod.\n\
+        Opravdu chcete pokračovat?
+#}}}
+
+#{{{ "Search in selection" active but nothing selected in text area
+search-no-selection.title=Prázdný výběr
+search-no-selection.message=Prosím vyberte nějaký text nebo deaktivujte \n\
+        možnost "najít ve výběru".
+#}}}
+
+#{{{ Paste previous and paste deleted dialogs
+paste-from-list.whitespace=<whitespace>
+paste-previous.title=Vložit předchozí
+paste-previous.caption=Nedávno kopírovaný a vložený text:
+paste-deleted.title=Vložit smazané
+paste-deleted.caption=Nedávno smazaný text:
+#}}}
+
+#{{{ File changed on disk dialog
+filechanged-save.title=Soubor na disku změněn
+filechanged-save.message=Soubor {0}\n\
+	byl na disku změněn jiným programem. Opravdu chcete soubor\n\
+        uložit?
+#}}}
+
+#{{{ File exists dialog
+fileexists.title=Soubor již existuje
+fileexists.message=Soubor {0} již existuje. Opravdu jej chcete\n\
+	přepsat?
+#}}}
+
+#{{{ Select line range dialog
+selectlinerange.title=Vyberte rozsah řádek
+selectlinerange.caption=Vyberte rozsah řádek:
+selectlinerange.start=Počáteční řádek:
+selectlinerange.end=Konečný řádek:
+#}}}
+  
+#{{{ View registers dialog
+view-registers.title=Registry
+view-registers.caption=Registr:
+view-registers.clipboard=$ (schránka)
+view-registers.selection=% (výběr)
+view-registers.none=Nedefinovány žádné registry
+view-registers.register=Registr:
+view-registers.contents=Obsah:
+view-registers.undefined=__UNDEFINED__
+#}}}
+
+#{{{ Close all buffers dialog
+close.title=Neuložené změny
+close.caption=Následující buffery obsahují neuložené změny:
+close.selectAll=Vybrat vše
+close.selectAll.mnemonic=a
+close.save=Uložit vybrané
+close.save.mnemonic=s
+close.discard=Zahodit vybrané
+close.discard.mnemonic=d
+#}}}
+
+#{{{ Files changed on disk dialog
+files-changed.title=Soubory na disku změněny
+files-changed.caption=Následující soubory byly změněny na disku jiným programem:
+files-changed.deleted=Smazáno na disku; uložte pro znovuvytvoření:
+files-changed.changed-auto=Automaticky znovunačteno:
+files-changed.changed=Změněno na disku:
+files-changed.changed-dirty-auto=Změnený buffer; nebylo znovunačteno:
+files-changed.changed-dirty=Změněný buffer a změněný soubor na disku:
+files-changed.select-all=Vybrat vše
+files-changed.select-all.mnemonic=a
+files-changed.reload=Znovunačíst
+files-changed.reload.mnemonic=r
+files-changed.ignore=Ignorovat
+files-changed.ignore.mnemonic=i
+#}}}
+
+#{{{ Abbrev dialogs
+add-abbrev.title=Přidat zkratku
+add-abbrev.mode=Přidat zkratku specifickou k režimu
+add-abbrev.global=Přidat globální zkratku
+
+edit-abbrev.title=Upravit zkratku
+
+edit-abbrev.duplicate.title=Duplikace zkratky
+edit-abbrev.duplicate.message=\
+	Rozšíření této zkraty již existuje.\n\
+	\n\
+	Chcete přepsat existující rozšíření zkratky?
+
+abbrev-editor.abbrev=Zkratka:
+abbrev-editor.before=Text k vložení před kurzor:
+abbrev-editor.after=Text k vložení za kurzor:
+#}}}
+
+#{{{ XMode errors
+xmode-error.title=Chyba v parsování XML
+# {2} is the column number, but it's not too useful so we don't show it
+xmode-error.message=Při parsování {0} se vyskytla chyba na řádce line {1}:\n\
+	{3}
+xmode-error.dtd=Soubor DTD nemohl být načten\n({0})
+xmode-error.termchar-invalid=Hodnota AT_CHAR atributu není validní ({0}) 
+xmode-error.doctype-invalid=Očekáván dokument typu MODE, nalezen {0}
+xmode-error.empty-tag=Tag {0} nemůže být prázdný.
+xmode-error.token-invalid=Typ tokenu {0} není validní.
+xmode-error.empty-keyword=Klíčové slovo nemůže být prázdné.
+xmode-error.regexp=Nevalidní regulární výraz\n({0})
+xmode-error.hash-char-and-hash-chars-mutually-exclusive=HASH_CHAR a HASH_CHARS nebyly zpecifikovány
+xmode-error.delegate-invalid=Nevalidní delegate: {0}
+#}}}
+
+#{{{ JARClassLoader errors
+plugin-error.title=Chyba Pluginu
+plugin-error.caption=Následujicí pluginy nemohly být načteny:
+plugin-error.caption-1=Následujicí plugin nemohl být načten:
+
+plugin-error.load-error=Nelze načíst: {0}\n\
+	S největší pravděpodobností je poškozený JAR soubor; zkuste\n\
+	jej přeinstalovat. Zkuste Nástroje->Troubleshooting->Log aktivit\n\
+	pro úplný výpis stack trace (zásobník).
+plugin-error.start-error=Nelze spustit: {0}\n\
+	Zkuste updatovat plugin na novější verzi.
+plugin-error.already-loaded=Jsou nainstalovány dvě kopie. Odstraňte prosím \
+	jednu z nich.
+plugin-error.dep-jdk=Vyžaduje Java verze {0} nebo novější, ale vy máte pouze\n\
+			verzi {1}.
+plugin-error.dep-jedit=Vyžaduje jEdit {0} nebo novější, ale vy máte pouze \n\
+		verzi {1}.\n\
+		Stáhněte si novou verzi z <http://www.jedit.org>.
+plugin-error.dep-plugin.no-version=Potřebná verze {0} \
+	nebo novější {1},\n\
+	ale {1} není naistalována.
+plugin-error.dep-plugin.broken=Vyžaduje {0}, ale {0}\n\
+	nemohl být načten.
+plugin-error.dep-plugin=Vyžaduje verzi {0} nebo novější {1}, \
+	ale vy máte pouze {1} verze {2}.
+plugin-error.dep-class=Vyžaduje třídu {0}.\n\
+	Zkuste nainstalovat potřebný plugin nebo sadu knihoven.
+plugin-error.missing-jar=Vyžaduje JAR soubor {0}.\n\
+	Tento JAR soubor je součástí tohoto pluginu, ale nelze jej \n\
+	nalézt. Zkuste plugin přeinstalovat.
+plugin-error.not-42=Tento plugin nepodporuje dynamické načítání. \n\
+	Musíme restartovat jEdit po nainstlování nebo odstranění tohoto \n\
+	pluginu.
+
+plugin-error-download.title=Chyba v pluginu
+plugin-error-download.message=Při stahování pluginu se vyskytla chyba \n\
+	Zkuste prosím jiný mirror\n{0}
+#}}}
+
+#{{{ Macro dialogs
+macro-input.title=Vstup makra
+macro-error.title=Chyba makra
+macro-message.title=Zpráva makra
+macro-confirm.title=Potvrzení makra
+#}}}
+
+#{{{ BeanShell stuff
+beanshell-error.title=BeanShell Chyba
+beanshell-error.message=Vyskytla se BeanShell chyba.
+
+beanshell-eval-input.title=Vyhodnotit BeanShell výraz
+beanshell-eval-input.message=BeanShell výraz:\n\
+	\n\
+	Proměnné:\n\
+	view - Aktuální instance pohledu\n\
+	editPane - Aktuální instance EditPanelu\n\
+	textArea - Aktuální instance textové oblasti\n\
+	buffer - Aktuální buffer
+
+beanshell-eval.title=BeanShell vyhodnocení
+beanshell-eval.message={0}
+
+beanshell-eval-line.title=Vyhodnotit BeanShell výraz
+beanshell-eval-line.message=BeanShell výraz k vyhodnocení pro každý řádek \
+	Vybraný řádek:\n\
+	\n\
+	Proměnné:\n\
+	line - Index (číslo) řádky od počátku bufferu\n\
+	index - Číslo řádky od počátku výběru\n\
+	text - Text řádky\n\
+	view - Aktuální instance pohledu\n\
+	editPane - Aktuální instance EditPanelu\n\
+	textArea - Aktuální instance textové oblasti\n\
+	buffer - Aktuální buffer
+#}}}
+
+#{{{ Macro not recording dialog
+macro-not-recording.title=Nenahrává se
+macro-not-recording.message=Makro není právě nahráváno.
+#}}}
+
+#{{{ Large repeat count warning
+large-repeat-count.title=Velký počet opakování
+large-repeat-count.message=Opravdu chcete vyvolat "{0}" {1} krát?
+
+large-repeat-count.user-input.title=Velký počet opakování
+large-repeat-count.user-input.message=Opravdu chcete vložit "{0}" \
+	{1} krát?
+#}}}
+
+
+#{{{ Wrong fold mode dialog
+folding-not-explicit.title=Špatný folding režim
+folding-not-explicit.message=Tento příkaz může být použit pouze \n\
+	v explicitním folding režimu.
+#}}}
+
+#{{{ Memory status dialog box
+memory-status.title=Java Heap Memory
+memory-status.gc=Garbage collection uvolnil {0} Kb.
+memory-status.use={0} Kb využito, {1} Kb celkově
+#}}}
+
+#{{{ Multiple I/O request errors
+buffer-multiple-io.title=I/O chyba
+buffer-multiple-io.message=Každý buffer může vykonávat jednu \n\
+	vstupní/výstupní operaci najednou. Prosím vyčkejte dokud aktuální\n\
+	operace neskončí (nebo ji zruště v I/O progres monitoru) před\n\
+	započetím další.
+
+browser-multiple-io.title=I/O chyba
+browser-multiple-io.message=Každý jednotlivý prohlížeč souborového systému\n\
+	může vykonávat jednu vstupní/výstupní operaci najednou. Prosím \n\
+	vyčkejte dokud aktuální operace neskončí (nebo ji zrušte v I/O \n\
+	progres monitoru) před započetím další.
+#}}}
+
+#{{{ maxLineLen=0 warning
+format-maxlinelen.title=Zalamovací okraj
+format-maxlinelen.message=Zalamovací okraj musí být nastaven na nenulovou \n\
+	aby tento příkaz pracoval.
+#}}}
+
+#{{{ Text under caret does not have a syntax style (token type)
+syntax-style-no-token.title=Konfigurace způsobu syntaxe
+syntax-style-no-token.message=Text pod kurzorem nemá přiřazen žádný styl \
+	ke konfiguraci.
+#}}}
+
+#{{{ View title dialog
+view.title.select=Zadejte prosím název pro tento pohled:
+#}}}
+#}}}
+
+#{{{ Buffer options dialog
+buffer-options.title=Možnosti bufferu
+buffer-options.caption=Toto dialogové okno mění nastavení pouze pro aktuální \n\
+	buffer. Chcete-li změnit výchozí nastavení pro režim úprav, zkuste \n\
+	Nástroje->Nastavení a Úpravy
+buffer-options.loading-saving=Načítání a ukládání
+buffer-options.lineSeparator=Oddělovač řádky:
+buffer-options.encoding=Kódování znaků:
+buffer-options.gzipped=GZIP (komprese) souboru na disk
+buffer-options.editing=Editování
+buffer-options.mode=Režim úprav:
+#}}}
+
+#{{{ Global options dialog
+options.title=Možnosti
+options.title-template={0}: {1}
+options.jedit.label=jEdit
+
+# Option pane to show by default
+options.last=upravování
+
+#{{{ Options groups
+
+#}}}
+
+#{{{ General pane
+options.general.label=Obecné
+options.general.lineSeparator=Výchozí oddělovač řádek:
+options.general.encoding=Výchozí kódování znaků:
+options.general.encodingAutodetect=Pokud je to možné, detekovat kódování automaticky
+options.general.checkModStatus=Pokud jsou otevřené soubory změněny na disku:
+options.general.checkModStatus.nothing=nedělat nic
+options.general.checkModStatus.prompt=výzva
+options.general.checkModStatus.reload=Automaticky znovunačíst a upozornit uživatele
+options.general.checkModStatus.silentReload=Automaticky znovunačíst bez upozornění
+options.general.checkModStatusUpon=Kontrolovat změnu souboru pokud:
+options.general.checkModStatusUpon.focus=Aplikace má focus
+options.general.checkModStatusUpon.all=Aplikace má focus, buffer má focus nebo probíhá ukládání jakéhokoliv bufferu
+options.general.checkModStatusUpon.operations=buffer má focus nebo probíhá ukládání jakéholiv bufferu
+options.general.checkModStatusUpon.focusBuffer=buffer je právě navštíven nebo probíhá ukládání
+options.general.checkModStatusUpon.none=ukládání bufferu
+options.general.recentFiles=Nedávné soubory k zapamatování:
+options.general.hypersearch.maxWarningResults=Maximální počet výsledků hyperhledání:
+options.general.sortRecent=Seřadit seznam nedávných souborů
+options.general.saveCaret=Uložit pozici kurzoru v seznamu nedávných souborů
+options.general.persistentMarkers=Uložit pozici záložky
+options.general.resetUndo=Resetovat "Zpět" historii při uložení
+options.general.restore=Obnovit dříve otevřené soubory při spuštění
+options.general.restore.splits=Obnovit konfiguraci rozdělení
+options.general.restore.remote=... včetně vzdálených souborů přes VFS
+options.general.restore.cli=... včetně jmen souborů na příkazovém řádku
+options.general.encodingDetectors=Seznam autodetektorů kódování:
+options.general.fallbackEncodings=Seznam  záložních kódování:
+options.general.fallbackEncodings.tooltip=Seznam mezerou oddělených kódování k vyzkoušení při chybách kódování při načítání
+options.general.systrayicon=Zobrazit tray ikonu
+#}}}
+
+#{{{ Abbreviations pane
+options.abbrevs.label=Zkratky
+options.abbrevs.set=Sada zkratek:
+options.abbrevs.expandOnInput=Mezerník rozbaluje zkratky
+options.abbrevs.abbrev=Zkratka
+options.abbrevs.expand=Rozbalení
+options.abbrevs.add=Přidat...
+options.abbrevs.edit=Upravit...
+options.abbrevs.remove=Odebrat
+#}}}
+
+#{{{ Appearance pane
+options.appearance.label=Vzhled
+options.appearance.iconTheme=Téma ikon:
+options.appearance.fonts.antialias=Vyhlazovat písma pro netextovou oblast
+options.appearance.lf=Swing look & feel:
+options.appearance.primaryFont=Písmo tlačítek, menu a popisků:
+options.appearance.secondaryFont=Písmo výpisů a textových polí:
+options.appearance.helpViewerFont=Písmo prohlížeče nápovědy:
+options.appearance.history=Položky textových oblastí k zapamatování:
+options.appearance.menuSpillover=Počet položek než menu přetečou:
+options.appearance.startup.label=Nastavení při spuštění
+options.appearance.showSplash=Ukázat úvodní obrazovku při spuštění
+options.appearance.showTips=Ukázat rady a tipy při spuštění
+options.appearance.experimental.label=Experimentální možnosti
+options.appearance.experimental.caption=Další tři možnosti nemusí pracovat \
+	správně s určitými\n\
+	verzemi Javy. Pokud se setkáte s problémy, vypněte tyto možnosti.
+
+options.appearance.textColors=Použít barvy jEdit textových polí na všechny \
+	textové komponenty
+options.appearance.decorateFrames=Vykreslovat okraje oken s použitím Swing look & feel
+options.appearance.decorateDialogs=Vykreslovat okraje dialogů s použitím Swing look & feel
+
+options.appearance.localization.section.label=Lokalizace
+options.appearance.usedefaultlocale.label=Využít výchozí lokální nastavení
+options.appearance.lang.label=Jazyk (projeví se po restartu aplikace)
+#}}}
+
+#{{{ Context Menu pane
+options.context.label=Kontextové menu
+options.context.caption=Položky v textovém poli pro pravý klik:
+options.context.add=Přidat...
+options.context.remove=Odebrat
+options.context.moveUp=Jít nahoru
+options.context.moveDown=Jít dolu
+options.context.reset=Reset do výchozího
+options.context.add.title=Přidat do kontextového menu
+options.context.add.caption=Přidat do kontextového menu:
+options.context.add.separator=Oddělovač
+options.context.add.action=Přikaz nebo makro:
+options.context.includeOptionsLink.label=Patří "Upravit toto menu ..." odkaz
+
+options.context.reset.dialog.title=Resetovat do výchozího
+options.context.reset.dialog.message=Opravdu chcete resetovat kontextového menu do výchozího (instalačního) stavu?
+#}}}
+
+#{{{ Docking pane
+options.docking.label=Dokování
+options.docking.title=Okno
+options.docking.dockPosition=Dokovací pozice
+options.docking.selectFramework.label=Dokovací framework:
+options.docking.autoSaveModeLayout.label=Automaticky ukládat režimově-specifické dokovací rozmístění
+options.docking.autoLoadModeLayout.label=Automaticky načítat režimově-specifické dokovací rozmístění
+options.docking.selectSet.label=Množina dokovatelných oken:
+options.docking.system-change.note=(Experimentální) Restartovat jEdit kvůli aplikaci změn
+#}}}
+
+#{{{ Editing pane
+options.editing.label=Úpravy
+options.editing.defaultMode=Výchozí režim úprav:
+options.editing.undoCount=Počet "Zpět":
+options.editing.caption-0=\
+	Pro přizpůsobení režimově-specifických nastavení vyberte\n\
+	režim úprav z menu níže. Nyní jsou zobrazena výchozí \n\
+	nastavení.
+options.editing.caption-1=\
+	Odstraňte zaškrtnutí "použít výchozí nastavení" pro \n\
+	přizpůsobení režimově-specifických nastavení. Jinak budou \n\
+	použita nastavení z globálně výchozí sekce.
+options.editing.mode=Změna nastavení pro režim:
+options.editing.global=<globálně výchozí>
+options.editing.useDefaults=Použít výchozí nastavení
+options.editing.filenameGlob=Globální názvy souborů:
+options.editing.firstlineGlob=Globální první řádka:
+options.editing.folding=Foldovací režim:
+options.editing.collapseFolds=Na začátku sbalit foldy s úrovní:
+options.editing.wrap=Zalamování slov:
+options.editing.maxLineLen=Zalamování okrajů:
+options.editing.maxLineLen.tooltip=Zvolte 0 pro šírku odpovídající textové oblasti (soft zalamování pouze)
+options.editing.tabSize=Šířka tabulátoru:
+options.editing.indentSize=Šířka odřážky:
+options.editing.noWordSep=Extra slovní znaky:
+options.editing.camelCasedWords=Oddělovat "CamelCased" slova
+options.editing.noTabs=Soft tabulároty (emulace pomocí mezer)
+options.editing.elasticTabstops=Odrážky s využitím elastických tabstopů
+options.editing.elasticTabstops.tooltip=(Experimentální) - může způsobit nestabilitu jEditu.
+options.editing.deepIndent=Hluboká odrážka
+options.editing.autoIndent=Automatické odrážky
+options.editing.largefilemode.title=Režim rozsáhlých souborů
+options.editing.largefilemode=Co mám dělat v případě rozsáhlých souborů:
+options.editing.largefilemode.option.ask=<html><b>Dotázat se</b> co dělat při otevírání rozsáhlého souboru</html>
+options.editing.largefilemode.option.full=<html><b>Ponechat plnou syntaxi</b> : zvýrazňování syntaxe jEditu bude pracovak jako obvykle,\
+						ale jEdit se může stát <br/><b>velice pomalým, toto není doporučeno</b></html>
+						
+options.editing.largefilemode.option.limited=<html><b>Kontextově necitlivé zvýraznění syntaxe</b>: V tomto případě bude jEdit \
+		provádět rychlé zvýrazňování, </br>ale výsledek nemusí být dokonalý. \
+		Buffer bude zvýrazněn řádek po řádce bez kontroly kontextu <br/> \
+		předchozích řádek. Je možné, že syntaxe nebude přesná, pokud máte \
+		tokeny na více řádcích (víceřádkové komentáře, xml tagy,...) \
+		Soft zalamování je deaktivováno<br/><b>(nejlepší volba)</b></html>
+options.editing.largefilemode.option.nohighlight=Žádné zvýraznění syntaxe, žádné soft zalamování
+#}}}
+
+#{{{ Encodings pane
+options.encodings.label=Kódování
+options.encodings.selectEncodings=Vyberte kódování, která by se měla objevit v kódovacím dialozích:
+options.encodings.available=Dostupná/é kódování
+options.encodings.selected=Vybraná/é kódování
+options.encodings.available.tooltip=<html>Kódování v tomto sloupci <b>nebude</b> vypsáno v kódovacích dialozích.\
+  Přetáhněte je do pravého sloupce pro jejich aktivaci</html>
+options.encodings.selected.tooltip=Kódování v tomto sloupci budou obsažena v kódovacích dialozích.\
+  Přetáhněte je do levého sloupce pro jejich skrytí.
+#}}}
+
+#{{{ Gutter pane
+options.gutter.label=Gutter
+options.gutter.enabled=Zobrazit gutter
+options.gutter.optionalComponents=Volitelné komponenty gutteru
+options.gutter.lineNumbers=Čisla řádek
+options.gutter.minLineNumberDigits=Minimální počet cifer k rezervování pro čísla řádek:
+options.gutter.selectionAreaEnabled=Výběr řádků, když nejsou zobrazena čísla řádek
+options.gutter.selectionAreaBgColor=Barva pozadí při výbrané ploše:
+options.gutter.selectionAreaWidth=Šírka oblasti výběru (v pixelech):
+options.gutter.font=Písmo gutteru:
+options.gutter.foreground=Barva čísla řádky:
+options.gutter.background=Barva pozadí:
+options.gutter.borderWidth=Šírka okraje gutteru:
+options.gutter.numberAlignment=Zarovnání čísla řádky:
+options.gutter.interval-1=Zvýraznit každou \u0020
+options.gutter.interval-2=ou řádku:
+options.gutter.currentLineHighlight=Zvýraznit aktuální řádek:
+options.gutter.structureHighlight=Zobrazit strukturovaný rozsah:
+options.gutter.markerHighlight=Zobrazit pozici záložky:
+options.gutter.foldColor=Sbalit záložky:
+options.gutter.focusBorderColor=Okraj gutteru s focusem:
+options.gutter.noFocusBorderColor=Okraj gutteru bez focusu:
+options.gutter.foldStyle.label=Symbol foldu:
+options.gutter.foldStyleNames.Triangle=Trojúhelník
+options.gutter.foldStyleNames.Square=ÄŒtverec
+options.gutter.foldStyleNames.Circle=Kruh
+#}}}
+
+#{{{ Mouse pane
+options.mouse.label=Myš
+options.mouse.dragAndDrop=Drag and drop v textovém poli
+options.mouse.joinNonWordChars=Double-click drag spojí non-alfanumerické znaky
+options.mouse.middleMousePaste=Rychlé kopírování pomocí prostředního tlačítka myši
+options.mouse.ctrlForRectangularSelection=Přepnout na obdélníkový výběr, když je zmáčknutý Ctrl
+options.mouse.gutter.foldClick=Klik v gutteru:
+options.mouse.gutter.SfoldClick=Shift-klik v gutteru:
+options.mouse.gutter.toggle-fold=Sbalit/Rozbalit oblast
+options.mouse.gutter.toggle-fold-fully=Sbalit/Rozbalit oblast úplně
+#}}}
+
+#{{{ Plugin Manager pane
+options.plugin-manager.label=Plugin manažer
+options.plugin-manager.updateMirrors=Aktualizuj mirror seznam
+options.plugin-manager.workthread=Aktualizuji mirror seznam ...
+options.plugin-manager.downloadSource=Stáhnout zdrojový kód pluginu
+options.plugin-manager.deleteDownloads=Smazat stažené soubory \
+	z download adresáře po instalaci
+options.plugin-manager.mirror=Preferovaný mirror:
+options.plugin-manager.location=Instalovat pluginy do:
+options.plugin-manager.settings-dir=adresáře nastavení jEdit
+options.plugin-manager.app-dir=adresáře aplikace jEdit
+options.plugin-manager.none=Výchozí centrály pluginů
+#}}}
+
+#{{{ Printing pane
+options.print.label=Tisk
+options.print.font=Písmo pro tisk:
+options.print.fontstyle=Styl písma pro tisk:
+options.print.fontsize=Velikost písma pro tisk:
+options.print.header=Tisknout v hlavičce název souboru
+options.print.footer=Tisknout záhlaví datum, čas a číslo stránky
+options.print.lineNumbers=Tisknout čísla řádek
+options.print.color=Barevný tisk
+options.print.tabSize=Šiřka tabulátoru (Tab) při tisku:
+options.print.workarounds=Zástupná řešení pro Java bugy
+options.print.glyphVector=Tisknout mezery (zvětšuje velikost souboru)
+options.print.force13=Použít staré API pro tisk (umožněte pokud se jEdit zasekává\
+	při tisku)
+options.print.folds=Tisknout sbalené oblasti (folds)
+#}}}
+
+#{{{ Proxy pane
+options.firewall.label=Proxy servery
+options.firewall.http.enabled=Použít HTTP proxy server
+options.firewall.http.host=HTTP proxy host:
+options.firewall.http.port=HTTP proxy port:
+options.firewall.http.user=Username:
+options.firewall.http.password=Heslo:
+options.firewall.http.nonProxy=Připojit přímo na:
+options.firewall.socks.enabled=Použít SOCKS proxy server
+options.firewall.socks.host=SOCKS proxy host:
+options.firewall.socks.port=SOCKS proxy port:
+#}}}
+
+#{{{ Save & Backup pane
+options.save-back.label=Ukládání a zálohování
+
+options.save-back.autosave=Frekvence autosave (sekundy):
+options.save-back.backups=Maximální počet záloh:
+options.save-back.backupDirectory=Zálohování adresáře:
+options.save-back.backupPrefix=Zálohovat soubory s předponou:
+options.save-back.backupSuffix=Zálohovat soubory s příponou:
+options.save-back.backupEverySave=Zálohovat při každém uložení
+options.save-back.twoStageSave=Dvoufázové uložení (bezpečnější, ale esetuje oprávnění k souboru na některých souborových systémech)
+options.save-back.twoStageSave.tooltip=Fáze 1: Vytvoří dočasný soubor a uloží do něj. Fáze 2: Přejmenuje dočasný soubor na jeho pravé jméno.
+options.save-back.confirmSaveAll="Uložit všechny buffery" žádá o potvrzení
+options.save-back.autosaveUntitled=Autosave nepojmenovaných bufferů
+options.save-back.suppressNotSavedConfirmUntitled=Nikdy neoznačovat nepojmenované buffery jako změněné.
+options.save-back.suppressNotSavedConfirmUntitled.tooltip=Zaškrnete-li tuto možnost, znamená to, že nepojmenované buffery budou vymazány, kdykoliv je vytvořen nový.(je to feature!)
+options.save-back.useMD5forDirtyCalculation=Nikdy neoznačovat buffery jako změněné, pokud je obsah nezměněn.
+options.save-back.useMD5forDirtyCalculation.tooltip=Porovnáním délky a MD5 hashe bufferu v čase načtení se rozhodne, zda je upravený buffer stále změněný.
+options.save-back.saveAsUsesFSB=Prohlížeč souborového systému využívá jako výchozí uložení "Uložit jako"
+#}}}
+
+#{{{ Shortcuts pane
+options.shortcuts.deletekeymap.label=smazat
+options.shortcuts.deletekeymap.dialog.label=Smazat mapu kláves
+options.shortcuts.deletekeymap.dialog.title=Smazat
+options.shortcuts.duplicatekeymap.label=duplikovat
+options.shortcuts.duplicatekeymap.dialog.label=Vybrat název nové mapy kláves
+options.shortcuts.duplicatekeymap.keymapalreadyexists.label=Tento název již existuje, vyberte jiný
+options.shortcuts.duplicatekeymap.dialog.title=název mapy kláves
+options.shortcuts.resetkeymap.label=resetovat
+options.shortcuts.resetkeymap.dialog.label=Reset mapy kláves
+options.shortcuts.resetkeymap.dialog.title=reset mapy kláves
+options.shortcuts.keymap.label=Vyberte mapu kláves:
+options.shortcuts.label=Zkratky
+options.shortcuts.select.label=Upravit zkratky:
+options.shortcuts.select.tooltip=Můžete vybrat globály, makra nebo plugin zkraty
+options.shortcuts.name=Příkaz
+options.shortcuts.shortcut1=Primární zkratka
+options.shortcuts.shortcut2=Alternativní zkratka
+options.shortcuts.filter.label=Filtr:
+options.shortcuts.filter.tooltip=Zobrazit pouze akce, jejich název obsahuje tento text
+options.shortcuts.clear.label=Vyčistit
+
+grab-key.title=Určete zkratku
+grab-key.caption=Zmáčkněte požadovanou zkratku pro "{0}", poté klikněte na Ok.
+grab-key.keyboard-test=Vložte klávesy, které způsobují problémy.
+grab-key.assigned-to=Aktuálně přiřazen k: {0}
+grab-key.assigned-to.none=<none>
+grab-key.assigned-to.prefix={0} prefix
+grab-key.clear=Vyčistit
+grab-key.remove=Odebrat aktuální
+
+grab-key.remove-ask.title=Odebrat zkratku?
+grab-key.remove-ask.message=\
+	Nevybral jste novou zkratku.\n\
+	Chcete odebrat aktuální zkratku?
+
+grab-key.duplicate-alt-shortcut.title=Duplikace zkratky
+grab-key.duplicate-alt-shortcut.message=\
+	Vybraná zkratka odpovídá jiné zkratce\n\
+	pro tuto položku. Vyberte prosím jinou.
+
+grab-key.duplicate-shortcut.title=Duplikace zkratky
+grab-key.duplicate-shortcut.message=\
+	Tato zkratka je již přiřazena na\n\
+	"{0}".\n\
+	\n\
+	Chcete přepsat toho přiřazení?
+
+grab-key.prefix-shortcut.title=Neplatná zkratka
+grab-key.prefix-shortcut.message=\
+	Nemůžete použít tuto zkratku, protože\n\
+	je prefixem pro jinou zkratku.\n\
+	Vyberte prosím jinou.
+#}}}
+
+#{{{ Status bar pane
+options.status.label=Stavový řádek
+options.status.visible=Zobrazit stavový řádek
+options.status.plainview.visible=Zobrazit stavový řádek v prostém pohledu
+options.status.foreground=Text stavového řádku:
+options.status.background=Pozadí stavového řádku:
+options.status.memory.foreground=Popředí indikátoru paměti:
+options.status.memory.background=Pozadí indikátoru paměti:
+options.status.edit.title=Upravit vstup stavového řádku
+options.status.edit.labelRadioButton=popisek
+options.status.edit.widgetRadioButton=widget
+options.status.edit.labelLabel=Zadejte popisek:
+options.status.edit.widgetLabel=Vyberte widget:
+options.status.caret.linenumber=Zobrazit číslo řádky kurzoru
+options.status.caret.dot=Zobrazit posun kurzoru od počátku řádky
+options.status.caret.virtual=Zobrazit virtuální posun kurzoru od počátku řádky
+options.status.caret.offset=Zobrazit posun kurzoru od počátku souboru
+options.status.caret.bufferlength=Zobrazit délku souboru
+options.status.caret.title=Možnosti zobrazení pozice kurzoru:
+#}}}
+
+#{{{ Syntax Highlighting pane
+options.syntax.label=Zvýrazňování syntaxe
+options.syntax.object=Typ tokenu
+options.syntax.style=Styl textu
+options.syntax.foldLine.1=Sbalené fold řádky, úrovně 1
+options.syntax.foldLine.2=Sbalené fold řádky, úrovně 2
+options.syntax.foldLine.3=Sbalené fold řádky, úrovně 3
+options.syntax.foldLine.0=Sbalené fold řádky, úrovně > 3
+#}}}
+
+#{{{ Text Area pane
+options.textarea.label=Textová oblast
+options.textarea.font=Písmo textu:
+options.textarea.fontSubst=Další písma s fontovou substitucí
+options.textarea.fontSubst.tooltip=Prohledat jiná písma kvůli chybějícím znakům z aktuálního písma (namísto zobrazování obdélníčků)
+options.textarea.fontSubstList=Substituce písma: Preferovaná písma:
+options.textarea.fontSubstSystemFonts=Substituce písma: Prohledat všechna systémová písma
+options.textarea.fontSubstWarning.label=Substituce písma
+options.textarea.fontSubstWarning=Bez systémových písem budete potřebovat preferovaná písma.
+options.textarea.foreground=Barva textu:
+options.textarea.background=Barva pozadí:
+options.textarea.caret=Kurzor:
+options.textarea.blinkCaret=Blikající
+options.textarea.blockCaret=blok
+options.textarea.thickCaret=štíhlý
+options.textarea.selection=Jeden výběr:
+options.textarea.multipleSelection=Vícenásobný výběr:
+options.textarea.selectionFg=Popředí výběru:
+options.textarea.lineHighlight=Zvýraznit aktuální řádek:
+options.textarea.structureHighlight=Zvýraznit shodné elementy:
+options.textarea.eolMarkers=Značení konce řádky:
+options.textarea.wrapGuide=Průvodce zalamování:
+options.textarea.electricBorders=Elektrické okraje (auto skrolování)
+options.textarea.stdNextPrevWord=Go to next/previous word commands eat whitespace
+options.textarea.antiAlias=Vyhlazený hladký text
+options.textarea.antiAlias.tooltip=Zpomaluje zobrazování na některých systémech
+options.textarea.fracFontMetrics=Částečné písmové metriky (pro lepší hladké \ 
+	zobrazení textu)
+options.textarea.fracFontMetrics.tooltip=Není doporučeno se subpixelovým vyhlazováním
+options.textarea.stripTrailingEOL=Skrýt poslední konec řádku (pokud je)
+options.textarea.completeFromAllBuffers=Dokončit slova ve všech otevřených bufferech (výchozí je \
+	omezit hledání na aktuálně viditelné buffery)
+options.textarea.lineSpacing.label=Extra vertikální prostor mezi řádky(v pixelech):
+#}}}
+
+#{{{ Tool Bar pane
+options.toolbar.label=Panel nástrojů
+options.toolbar.showToolbar=Zobrazit panel nástrojů
+options.toolbar.caption=Tlačítka k zobrazení v panelu nástrojů:
+options.toolbar.add=Přidat...
+options.toolbar.edit=Upravit...
+options.toolbar.remove=Odebrat
+options.toolbar.moveUp=Posun nahoru
+options.toolbar.moveDown=Posun dolů
+options.toolbar.reset=Resetovat do výchozího
+options.toolbar.edit.title=Upravit vstup panelu nástrojů
+options.toolbar.edit.caption=Typ:
+options.toolbar.edit.separator=Oddělovač
+options.toolbar.edit.action=Přikaz nebo makro:
+options.toolbar.edit.builtin=Použít vestavěnou ikonu:
+options.toolbar.edit.file=Načíst ikonu ze souboru:
+options.toolbar.edit.choose=Vybrat
+options.toolbar.edit.no-icon=Není vybrána žádná ikona
+
+options.toolbar.reset.dialog.title=Resetovat do výchozího
+options.toolbar.reset.dialog.message=Opravdu chcete resetovat panel nástrojů do výchozího instalačního stavu?
+#}}}
+
+
+#{{{ View pane
+options.view.label=Pohled
+options.view.viewLayout=Rozmístění pohledu
+options.view.floatableToolbars=Plovoucí panely nástrojů
+options.view.alternateDockingLayout=Alternativní rozmístění dokovaných oken
+options.view.alternateToolBarLayout=Alternativní rozmístění panelů nástrojů
+options.view.showFullPath=Zobrazit úplnou cestu bufferu v panelu názvu
+options.view.showSearchbar=Vždy zobrazit panel vyhledávání
+options.view.beepOnSearchAutoWrap=Pípnout, když hledání automaticky začně od počátku
+options.view.showBufferSwitcher=Zobrazit selektor bufferu
+options.view.bufferSwitcherMaxRowsCount=Viditelné řádky v selektoru bufferu:
+options.view.sortBuffers=Řadit sady bufferů
+options.view.sortByName=Řadit sady bufferů pomocí jména souboru namísto cesty k souboru
+options.view.fullScreenIncludesMenu=Zobrazit menu panel v režimu "Na celou obrazovku"
+options.view.fullScreenIncludesToolbar=Zobrazit panely nástrojů v režimu "Na celou obrazovku"
+options.view.fullScreenIncludesStatus=Zobrazit stavový řádek v režimu "Na celou obrazovku"
+options.bufferset.scope=Rozsah sady bufferů:
+options.editpane.bufferset.contain=Nová sada bufferu obsahuje:
+options.editpane.bufferset.newbufferset.copy=kopii aktuální sady bufferů
+options.editpane.bufferset.newbufferset.empty=prázdný buffer
+options.editpane.bufferset.newbufferset.currentbuffer=pouze aktuální buffer
+#}}}
+
+
+
+#{{{ File System Browser panes
+options.browser.label=Prohlížeč souborového systému
+
+options.browser.colors.label=Barvy
+options.browser.colors.glob=Globální název souboru
+options.browser.colors.color=Barva
+options.browser.colors.add=Přidat
+options.browser.colors.remove=Odebrat
+
+options.browser.general.label=Obecné
+options.browser.general.defaultPath=Výchozí cesta:
+options.browser.general.defaultPath.favorites=Oblíbené
+options.browser.general.defaultPath.home=Domovský adresář
+options.browser.general.defaultPath.last=Nedávno navštivané adresáře
+options.browser.general.defaultPath.buffer=Rodičovský adresář aktuálního bufferu
+options.browser.general.defaultPath.working=Pracovní adresaář jEdit procesu
+options.browser.general.showMenubar=Zobrazit nabídku menu
+options.browser.general.showToolbar=Zobrazit panel nástrojů
+options.browser.general.showIcons=Zobrazit ikony
+options.browser.general.showHiddenFiles=Zobrazit skryté soubory
+options.browser.general.sortIgnoreCase=Ignorovat velikost písmen při řazení
+options.browser.general.sortMixFilesAndDirs=Maximální počet souborů a adresářů
+options.browser.general.doubleClickClose=Dvojklik na otevřený soubor jej zavře
+options.browser.general.currentBufferFilter=Koncovka aktuálního bufferu slouží \
+	jako filtr souborů v dialozích
+options.browser.general.useDefaultIcons=Použít výchozí ikony
+#}}}
+
+#{{{ Browser Context Menu
+options.browser.custom.context.label=Kontextové menu
+options.browser.custom.context.caption=Položky v menu po kliku pravým tlačítkem:
+#}}}
+
+#{{{ Font selector
+font-selector.title=Výběr písma
+font-selector.family=Font family:
+font-selector.size=Velikost písma:
+font-selector.style=Styl písma:
+font-selector.plain=Normální
+font-selector.bold=Tučně
+font-selector.italic=Kurzívou
+font-selector.bolditalic=Tučně kurzívou
+font-selector.preview=Náhled
+font-selector.long-text=Rychlá hnědá liška skáče přes líného psa.
+#}}}
+
+#{{{ Color chooser, used by options.syntaxs
+colorChooser.title=Vyberte barvu
+#}}}
+
+#{{{ Style editor, used by options.syntaxs
+style-editor.title=Editor stylu
+style-editor.tokenType=Typ tokenu:
+style-editor.italics=Kurzívou
+style-editor.bold=Tučně
+style-editor.fgColor=Barva textu:
+style-editor.bgColor=Barva pozadí:
+#}}}
+
+#}}}
+
+#{{{ Plugin options dialog
+plugin-options.title=Možnosti
+options.plugins.label=Pluginy
+options.no-plugins.label=Žádná nastavení pluginů
+#}}}
+
+#{{{ Help viewer
+helpviewer.title=jEdit Pomoc
+helpviewer.loading=Načítání...
+helpviewer.back.label=Zpět
+helpviewer.forward.label=Dopředu
+
+helpviewer.toc.loading=Načítání...
+helpviewer.toc.label=Obsah
+helpviewer.toc.welcome=Vítejte v jEdit
+helpviewer.toc.readme=Obecné informace
+helpviewer.toc.changes=Podrobný log změn
+helpviewer.toc.todo=To Do List a známé bugy
+helpviewer.toc.copying=GNU General Public License
+helpviewer.toc.copying-doc=GNU Free Documentation License
+helpviewer.toc.copying-apache=Apache License
+helpviewer.toc.copying-plugins=Plugin Licensing Amendment
+helpviewer.toc.plugins=Pluginy
+helpviewer.toc.online-apidocs=jEdit API Reference (Online)
+
+helpviewer.search.label=Hledat
+helpviewer.search.caption=Hledat:
+helpviewer.searching=Prohledávání...
+helpviewer.no-results=Žádné výsledky
+#}}}
+
+#{{{ Tip of the day window
+tip.title=Tip dne
+tip.caption=Věděli jste, že...
+tip.show-next-time=Zobrazovat tipy při spuštění
+tip.next-tip=Další tip
+
+tip.not-found=doc/tips adresář nebyl nalezen
+#}}}
+
+#{{{ Activity log
+log-viewer.title=Log aktivit
+log-viewer.caption=Celý text logu je uložen v {0}.
+log-viewer.copy=Kopírovat
+log-viewer.tail.label=Dolů
+#}}}
+
+#{{{ Marker Viewer
+view-markers.label=$Zobrazit záložky
+view-markers.title=Záložka
+#}}}
+
+#{{{ I/O progress monitor
+io-progress-monitor.title=I/O progres monitor
+io-progress-monitor.caption={0} čekajících žádostí.
+io-progress-monitor.idle=Nečinné vlákno
+io-progress-monitor.abort=Přerušit
+
+#{{{ I/O abort dialog box
+abort.title=Přerušit I/O
+abort.message=Opravdu chcete přerušit aktuálně vykonávané\n\
+	vstupně/výstupní požadavky? Rozhodnete-li se přerušit ukládání\n\
+	souboru, můžete přijít o data.
+#}}}
+
+#}}}
+
+#{{{ Task  monitor
+task-monitor.title=Monitor úloh
+#}}}
+
+#{{{ VFS browser
+vfs.browser.title=Přohlížeč souborů
+vfs.browser.longtitle=Prohlížeč souborového systému
+vfs.browser.title.open=Prohlížeč souborů - Otevřít
+vfs.browser.title.save=Prohlížeč souborů - Uložit
+vfs.browser.title.dialog=Prohlížeč souborů - Otevřít
+vfs.browser.path=Cesta:
+vfs.browser.path.mnemonic=p
+vfs.browser.filter=Filtr:
+vfs.browser.tree.loading=Načítání...
+
+vfs.browser.name=Název
+vfs.browser.type=Typ
+vfs.browser.type.file=Soubor
+vfs.browser.type.directory=Adresář
+vfs.browser.type.filesystem=Souborový systém
+vfs.browser.status=Status
+vfs.browser.status.no=Bez přístupu
+vfs.browser.status.ro=Pouze pro čtení
+vfs.browser.status.append=Pouze pro přidání
+vfs.browser.status.rw=Čtení/zápis
+vfs.browser.size=Velikost
+vfs.browser.modified=Naposledy upraveno
+
+vfs.browser.file_filter.glob=Globální filtr souborů
+vfs.browser.file_filter.dir_only=Pouze adresáře
+
+#{{{ Actions
+vfs.browser.browse-window.label=Prohlížet v novém okně
+vfs.browser.browse.label=Přohlížet
+vfs.browser.close.label=Zavřít
+vfs.browser.copy-path.label=Kopírovat
+vfs.browser.delete.label=Smazat...
+vfs.browser.delete.shortcut=SMAZAT
+vfs.browser.home.label=Domovský adresář
+vfs.browser.home.shortcut=~
+vfs.browser.properties.label=Vlastnosti
+vfs.browser.properties.title=Vlastnosti souboru/adresáře
+vfs.browser.insert.label=Vložit
+vfs.browser.new-directory.label=Nový adresář...
+vfs.browser.new-directory.shortcut=VLOŽIT
+vfs.browser.new-file.label=Nový soubor
+vfs.browser.new-file.shortcut=C+n
+vfs.browser.open.label=Otevřít
+vfs.browser.open-desktop.label=Otevřít na $ploše
+vfs.browser.other-encoding-2.label=Jiné ({0})...
+vfs.browser.other-encoding.label=Jiné...
+vfs.browser.reload.label=Znovunačíst adresář
+vfs.browser.reload.shortcut=F5
+vfs.browser.rename.label=Přejmenovat...
+vfs.browser.rename.shortcut=F2
+vfs.browser.roots.label=Kořenový adresář
+vfs.browser.roots.shortcut=/
+vfs.browser.search-directory.label=Hledat v adresáři...
+vfs.browser.show-hidden-files.label=Zobrazit skryté souboru
+vfs.browser.synchronize.label=Adresář aktuálního bufferu
+vfs.browser.synchronize.shortcut=-
+vfs.browser.up.label=Rodičovský adresář
+vfs.browser.up.shortcut=A+Up
+vfs.browser.paste.label=Vložit
+vfs.browser.previous.label=Předchozí adresář
+vfs.browser.previous.shortcut=A+Left
+vfs.browser.next.label=Následující adresář
+vfs.browser.next.shortcut=A+Right
+#}}}
+
+#{{{ Tool bar
+
+#}}}
+
+#{{{ Commands menu
+vfs.browser.commands.label=Příkazy
+vfs.browser.commands.encoding.label=Kódování
+vfs.browser.commands.encoding.auto-detect=Autodetekce
+
+vfs.browser.open-in.label=Otevřít v
+vfs.browser.open-view.label=Nový pohled
+vfs.browser.open-plain-view.label=Nový prostý pohled
+vfs.browser.open-split.label=Nové rozdělení
+#}}}
+
+#{{{ Plugins menu
+vfs.browser.plugins.label=Pluginy
+vfs.browser.plugins.plugin-manager.label=Manažer pluginů...
+vfs.browser.plugins.plugin-options.label=Plugin ...
+vfs.browser.plugins.no-plugins.label=Žádné pluginy
+#}}}
+
+#{{{ Favorites menu
+vfs.browser.favorites.label=Oblíbené
+vfs.browser.favorites.add-to-favorites.label=Přidat do oblíbených
+vfs.browser.favorites.edit-favorites.label=Upravit oblíbené
+vfs.browser.favorites.no-favorites.label=Žádné položky v oblíbených
+#}}}
+
+vfs.browser.dialog.open=Otevřít
+vfs.browser.dialog.save=Uložit
+vfs.browser.dialog.choose-dir=Vybrat
+vfs.browser.dialog.filename=Název souboru:
+vfs.browser.dialog.filename.mnemonic=f
+
+#{{{ Dialogs
+vfs.browser.bad-filter.title=Nevalidní filtr
+vfs.browser.bad-filter.message=Filtr {0} není validní ({1})
+
+vfs.browser.recurse-favorites.title=Oblíbené nelze přidat do sebe
+vfs.browser.recurse-favorites.message=Seznam oblíbených nemůže být přidám do sebe.
+
+vfs.browser.delete-confirm.title=Potvrzení smazání souboru
+vfs.browser.delete-confirm.message=Opravdu chcete smazat následující {1}?\n\n\
+	{0}
+
+vfs.browser.delete-favorites.title=Odstranit z oblíbených
+vfs.browser.delete-favorites.message=Opravdu chcete odebrat následující soubory \
+	z oblíbených?\n\n\
+	{0}
+
+vfs.browser.rename.title=Přejmenovat soubor
+vfs.browser.rename.message=Zadejte nový název pro {0}:
+
+vfs.browser.mkdir.title=Nový adresář
+vfs.browser.mkdir.message=Název (nebo cesta) nového adresáře:
+#}}}
+
+#}}}
+
+#{{{ I/O status messages
+vfs.status.load=Načítám {0}
+vfs.status.load-markers=Načítám záložky pro {0}
+vfs.status.save=Ukládám {0}
+vfs.status.save-markers=Ukládám záložky pro {0}
+vfs.status.autosave=Autosaving {0}
+vfs.status.listing-directory=Listing {0}
+vfs.status.deleting=Mažu {0}
+vfs.status.renaming=Přejmenovávám {0} na {1}
+#}}}
+
+#{{{ Plugin manager
+
+plugin-manager.title=Manažer pluginů
+
+plugin-manager.hide-libraries=Ukrýt knihovny
+
+plugin-manager.mgr-options=Možnosti stahování...
+plugin-manager.plugin-options=Možnosti pluginu...
+plugin-manager.done=Zavřít
+
+plugin-manager.remove-confirm.title=Odebrat pluginy
+plugin-manager.remove-confirm.message=Opravdu chcete odebrat následující \
+	pluginy?
+
+plugin-manager.dependency.title=Závislosti pluginu
+plugin-manager.dependency.message={0} je vyžadován následujícími pluginy.\n\
+	Zrušením výběru {0} také zrušíte výběr následujících pluginů:
+
+plugin-manager.remove-dependencies.title=Závislosti pluginu
+plugin-manager.remove-dependencies.message=Odebrané pluginy jsou vyžadovány následujícími pluginy. \n\
+	Jejích odstranění zruší výběr následujících pluginů:
+
+plugin-manager.cleanup.label=Vyčištění
+plugin-manager.cleanup.title=Vyčistit data pluginů
+plugin-manager.cleanup.message=Odebrat data z následujicích pluginů:
+
+plugin-manager.noOrphan.label=Najít sirotka
+plugin-manager.noOrphan.title=Žádní .jar sirotci nenalezeni
+plugin-manager.noOrphan.message=Žádní .jar sirotci nenalezeni ve vaší instalaci jEdit
+
+plugin-manager.findOrphan.label=Najít sirotka
+plugin-manager.findOrphan.title=Najít .jar sirotka
+plugin-manager.findOrphan.message=Následující .jary nepatří do žádného pluginu\n\
+	Odebrat? \n (buďte opatrní, mohou být deklarovány dynamicky v některých\n\
+	pluginech - například JDBC ovladače):
+
+install-plugins.depend.title=Vyžadována závislost
+install-plugins.depend.message=Jeden nebo více pluginů, které instalujete,\n\
+	vyžadují další pluginy. Pokud budete pokračovat, budou\n\
+	automaticky nainstalovány.
+
+plugin-manager.status.loaded=Načteno
+plugin-manager.status.not-loaded=Nenačteno
+plugin-manager.status.error=Chyba
+
+plugin-manager.list-download-connect=Připojuji se k plugins.jedit.org
+plugin-manager.list-download=Stahuji seznam pluginů z plugins.jedit.org
+plugin-manager.list-download.need-password.title=HTTP Proxy vyžaduje heslo
+plugin-manager.list-download.need-password.message=HTTP Proxy vyžaduje heslo.\n\
+	Zadejte prosím správné username/heslo v "Možnosti stahování".
+plugin-manager.list-download.disconnected.title=Chyba při stahování seznamu pluginů
+plugin-manager.list-download.disconnected.message=Seznam pluginů nemohl být stažen:\n\
+	host {0} není dostupný. Zkuste zkontrolovat internetové připojení...
+plugin-manager.list-download.generic-error.title=Chyba při stahování seznamu pluginů
+plugin-manager.list-download.generic-error.message=Chyba při stahování seznamu pluginů:\n\
+	Chyba {0} - {1}
+plugin-manager.filterField=Zobrazit pouze pluginy jejich název obsahuje tento text
+
+#{{{ Plugin management
+manage-plugins.title=Spravovat
+
+manage-plugins.info.name=Název
+manage-plugins.info.version=Verze
+manage-plugins.info.status=Status
+manage-plugins.info.data=Data
+
+manage-plugins.data-size.unknown=<unknown>
+
+manage-plugins.remove=Odebrat...
+manage-plugins.help=Pomoc...
+plugin-load-error.message=Plugin nelze načíst
+plugin-load-error.title=Chyba při načítání pluginu
+#}}}
+
+#{{{ Plugin installation
+install-plugins.title=Instalovat
+
+install-plugins.info.name=Název
+install-plugins.info.size=Velikost
+install-plugins.info.releaseDate=Datum vydání
+install-plugins.info.version=Verze
+install-plugins.info.category=Kategorie
+
+install-plugins.totalSize={0} plugin(ů), celková velikost: {1}
+install-plugins.select-all=Vybrat vše
+install-plugins.install=Instalovat
+install-plugins.show-updates=Zobrazit updaty
+
+install-plugins.info=<b>Autor</b>: {0}\n\
+	<b>Vydáno</b>: {1}\n\
+	{2}
+
+update-plugins.title=Update
+
+plugin-manager.progress=Stahuji {0} z mirroru {1}
+plugin-manager.progress.title=Instaluji plugin(y)
+plugin-manager.progress.stop=Zastavit
+#}}}
+
+#{{{ Plugin remove error
+plugin-manager.remove-failed.title=Odebrání selhalo
+plugin-manager.remove-failed.message=Plugin {0}\n\
+	nemohl být odebrán.
+#}}}
+
+#}}}
+
+#{{{ File Properties Dialog
+fileprop.name=Název
+fileprop.path=Cesta
+fileprop.lastmod=Poslední úprava
+fileprop.size=Velikost
+fileprop.properties=Vlastnosi
+fileprop.readable=Ke čtení
+fileprop.writeable=K zápisu
+fileprop.attribute=Atribut
+fileprop.okBtn=OK
+fileprop.cancelBtn=Ukončit
+fileprop.selectedFiles=Vybrané soubory
+fileprop.selectedDirectories=Vybrané adresáře
+#}}}
+
+#{{{ Activity log viewer
+log-viewer.dialog.title=Nastavení logu aktivit
+log-viewer.settings.label=Nastavení
+log-viewer.message.label=Zobrazená zpráva
+log-viewer.message.debug.label=Debug
+log-viewer.message.message.label=Zpráva
+log-viewer.message.notice.label=Upozornění
+log-viewer.message.warning.label=Varování
+log-viewer.message.error.label=Chyba
+#}}}
+
+logs-remove-all-errors.label=Odebrat všechny chyby
+
+taskmanager.remainingtasks.label={0} zbývajících úloh
+
+#{{{ Statusbar Widgets
+# the widgets should have a label and a sample.
+# the label is displayed when choosing the list of widgets
+# the sample is an example of what the widget will show, for the
+# preview in the options
+statusbar.mode.label=Buffer edit mode (ex:java)
+statusbar.mode.sample=java
+statusbar.fold.label=Buffer fold handler (ex:explicit)
+statusbar.fold.sample=explicit
+statusbar.encoding.label=Buffer encoding (ex:UTF-8)
+statusbar.encoding.sample=UTF-8
+statusbar.wrap.label=Buffer wrapping mode (ex:N)
+statusbar.wrap.sample=N
+statusbar.indent.label=Automatic indentation (ex:F)
+statusbar.indent.sample=F
+statusbar.multiSelect.label=Buffer multiple selection mode (ex:m)
+statusbar.multiSelect.sample=m
+statusbar.rectSelect.label=Buffer rectangular selection mode (ex:r)
+statusbar.rectSelect.sample=r
+statusbar.overwrite.label=Buffer overwrite (ex:o)
+statusbar.overwrite.sample=o
+statusbar.lineSep.label=Buffer line separator (ex:U)
+statusbar.lineSep.sample=U
+statusbar.memory-status.label=Memory status (ex:9/24Mb)
+statusbar.memory-status.sample=9/24Mb
+statusbar.clock.label=Clock (ex:16:45)
+statusbar.clock.sample=16:45
+statusbar.buffersets.label=Bufferset scope (ex:G)
+statusbar.buffersets.sample=G
+statusbar.selection-length.label=Selection's length (ex:192)
+statusbar.selection-length.sample=192
+statusbar.last-modified.label=Date of last modification on disk (ex:12/03/11 16:43)
+statusbar.last-modified.sample=12/03/11 16:43
+statusbar.task-monitor.label=Task monitor (ex: 7 task(s))
+statusbar.task-monitor.tooltip=Click to see running tasks dockable
+statusbar.task-monitor.sample=7 task(s)
+statusbar.task-monitor.template={0} task(s)
+#}}}
+
+killring.load-memoryerror.message=<html>Není možné načíst dříve smazaný text. Prosím zvyšte paměť heapu.<br>\
+  Zmáčkněte <b>start</b> pro spuštění jEdit, nebo <br><b>stop</b> pro zastavení a změňte vaše nastavení. <br>Můžete také <b>smazat soubor s historií</b> a spustit jEdit</html>
+
+killring.load-memoryerror.title=Chyba paměti
+killring.start=start
+killring.stop=stop
+killring.delete=smazat killring a spustit(start)
+
+#}}}
+
+#{{{ Macros                       
+
+#{{{ Properties used by macros     
+
+#{{{ common    
+macro.rs.general.ErrorNotEditableDialog.title=Právo zápisu
+macro.rs.general.ErrorNotEditableDialog.message=Buffer není upravitelný!
+#}}}
+
+#{{{ Clipboard
+
+#{{{ Copy Lines Containing
+macro.rs.CopyLinesContaining.CopyLinesContaining.label=Kopírovat řádky obsahující:
+macro.rs.CopyLinesContaining.LinesCopied.message=řádka/y zkopírována
+#}}}
+
+#{{{ Cut Lines Containing
+macro.rs.CutLinesContaining.CutLinesContaining.label=Vyjmout řádky obsahující:
+macro.rs.CutLinesContaining.LinesCut.message=řadka/y vyjmuta
+#}}}
+
+#}}}
+
+#{{{ Editing
+
+#{{{ Go to column
+macro.rs.GoToColumn.ColumnBefore.label=Sloupec (mezi 1 a
+macro.rs.GoToColumn.ColumnAfter.label=):
+#}}}
+
+#{{{ Key Words to Uppercase
+macro.rs.KeywordsToUpperCase.ConvertedKeywords.message=Konvertovaná klíčová slova na velká písmena
+#}}}
+
+#{{{ Mode Switcher
+macro.rs.BufferModeSwitcher.MainDialog.title=Selektor režimu bufferu
+macro.rs.BufferModeSwitcher.EnterBufferMode.label=Zadejte režim bufferu:
+macro.rs.BufferModeSwitcher.ChangingBufferMode.label=Změna režimu bufferu
+macro.rs.BufferModeSwitcher.To.label=na
+macro.rs.BufferModeSwitcher.Mode.label=režim
+macro.rs.BufferModeSwitcher.NotFound.label=nenalezena
+#}}}
+
+#{{{ Moves Lines Down - Move Lines Up
+macro.rs.MoveLines.NoMultipleSelection.error=Přesun řádek nefunguje s vícenásobným výběrem.
+#}}}
+
+#}}}
+
+#{{{ Files
+
+#{{{ Browse Directory
+macro.rs.BrowseDirectory.DirectoryBrowse.label=Adresář k procházení:
+#}}}
+
+#{{{ Buffer Switcher
+macro.rs.BufferSwitcher.OpenBuffers.label=otevřené buffery
+macro.rs.BufferSwitcher.QuickHelp.label=[ENTER] přepnout na; [SPACE] přepnout na, podržet dialog; [DEL] Zavřít buffer
+macro.rs.BufferSwitcher.Help1.label=Nápověda pro makro přepínače bufferu:
+macro.rs.BufferSwitcher.Help2.label=DELETE zavře vybraný buffer.
+macro.rs.BufferSwitcher.Help3.label=ENTER přepne na vybraný buffer, zavře dialog.
+macro.rs.BufferSwitcher.Help4.label=ESCAPE zavře dialog.
+macro.rs.BufferSwitcher.Help5.label=SPACE přepne na vybraný buffer, nezavře dialog.
+macro.rs.BufferSwitcher.Help6.label=NOTE: Tento dialog bude zobrazen pouze jednou
+#}}}
+
+#{{{ Delete Current
+macro.rs.DeleteCurrent.NotOnDisk.error=Buffer na disku neexistuje.
+macro.rs.DeleteCurrent.DeleteNotSupport.error=nepodporuje smazání.
+macro.rs.DeleteCurrent.Deleted.message=Smazáno:
+#}}}
+
+#{{{ Glob Close
+macro.rs.GlobClose.GlobPattern.label=Globální vzor:
+macro.rs.GlobClose.ErrorGlobPattern.error=Chyba v globálním vzoru:
+#}}}
+
+#{{{ Next Dirty Buffer
+macro.rs.NextDirtyBuffer.NoOtherBufferDirty.message=Žádné další změněné buffery
+macro.rs.NextDirtyBuffer.NoBufferDirty.message=Žádné změněné buffery
+#}}}
+
+#{{{ open Path
+macro.rs.OpenPath.PathName.label=Název cesty:
+#}}}
+
+#{{{Toggle ReadOnly
+macro.rs.ToggleReadOnly.OnlyLocalFiles.error=Toto makro funguje pouze s lokálními soubory-
+macro.rs.ToggleReadOnly.OnlyWindowsUnixMacos.error=Toto makro funguje pouze na OS Windows, Unix, & MacOS X.
+#}}}
+
+#}}}
+
+#{{{ Interface
+
+#{{{ Decrease Font Size - Increase Font Size
+macro.rs.ChangeFontSize.FontSize.message=Aktuální velikost písma:
+#}}}
+
+#}}}
+
+#{{{ Java
+
+#{{{ Create Constructor
+macro.rs.CreateConstructor.UnevenNumber.message=Nerovný počet názvů typů a proměnných.
+#}}}
+
+#{{{ Get Package Name
+macro.rs.GetPackageName.NotWorking1.error=Toto makro nebude fungovat, když Java interpreter
+macro.rs.GetPackageName.NotWorking2.error=načítá jEdit s '-jar' přepínačem.
+macro.rs.GetPackageName.NotFind.error=Nelze najít název balíčku.
+#}}}
+
+#{{{ Java File Save
+macro.rs.JavaFileSave.InfiniteLoop.error=Nekonečná smyčka:
+#}}}
+
+#{{{Make Get and Set Methods
+macro.rs.MakeGetAndSetMethods.GenerateCode.label=Generovat kód
+macro.rs.MakeGetAndSetMethods.CreateGetMethods.label=Vytvořit gettery
+macro.rs.MakeGetAndSetMethods.CreateSetMethods.label=Vytvořit settery
+macro.rs.MakeGetAndSetMethods.CreateGetandSetMethods.label=Vytvořit settery a gettery
+#}}}
+
+#}}}
+
+#{{{ Misc
+
+#{{{ Buffer to HyperSearch Results - HyperSearch Results to Buffer
+macro.rs.HyperSearchResults.WindowNotOpen.error=Okno 'Výsledky hyperhledání' není otevřeno
+macro.rs.HyperSearchResults.NotMatch.error=Žádné výsledky hyperhledání.
+#}}}
+
+#{{{ Debug BufferSets
+macro.rs.DebugBuffersets.BuffersetDebugging.label=DEBUGOVÁNÍ BUFFEROVÝCH SAD
+macro.rs.DebugBuffersets.BufferCount.label=Počet bufferů:
+macro.rs.DebugBuffersets.BufferList.label=SEZNAM BUFFERÅ®
+macro.rs.DebugBuffersets.EndBufferList.label=END SEZNAM BUFFERÅ®
+macro.rs.DebugBuffersets.EditpaneList.label=SEZNAM EDITPANELÅ®
+macro.rs.DebugBuffersets.EndEditpaneList.label=END SEZNAMU EDITPANELÅ®
+#}}}
+
+#{{{ Display Abbreviations
+macro.rs.DisplayAbbreviations.Abbreviation.label=Zkratka
+macro.rs.DisplayAbbreviations.Expansion.label=Rozšířit
+macro.rs.DisplayAbbreviations.Close.label=Zavřít
+macro.rs.DisplayAbbreviations.WriteSet.label=Zapsat sadu
+macro.rs.DisplayAbbreviations.WriteAll.label=Zapsat vše
+macro.rs.DisplayAbbreviations.AbbreviationList.label=Seznam zkratek
+macro.rs.DisplayAbbreviations.CallingWTTNB.label=volání writeTableToNewBuffer pro
+macro.rs.DisplayAbbreviations.SizeVector.label=velikost vektoru:
+macro.rs.DisplayAbbreviations.jEditAbbreviationTable.label=tabulka jEdit zkratek
+macro.rs.DisplayAbbreviations.AbbreviationSet.label=Sada zkratek:
+macro.rs.DisplayAbbreviations.AbbreviationExpansion.label=Zkratka    Rozšíření
+macro.rs.DisplayAbbreviations.NoAbbreviations.label=<< Žádné zkratky >>
+#}}}
+
+#{{{ Display Actions
+macro.rs.DisplayActions.jEditActionBar1.label=Akční panel jEditu můžete otevřít přes Nástroje a obvykle
+macro.rs.DisplayActions.jEditActionBar2.label=je mu přiřazena klávesová zkratka C+ENTER.
+macro.rs.DisplayActions.NoLabel.label=<zádný popisek>
+#}}}
+
+#{{{ Display Character Code
+macro.rs.DisplayCharacterCode.CharacterAtCaret.label=Znak na kurzoru:
+#}}}
+
+#{{{ Display Shorcuts
+macro.rs.DisplayShortcuts.jEditShortcutTable.label=Tabulka klávesových zkratek jEditu
+macro.rs.DisplayShortcuts.Name.label=Název
+macro.rs.DisplayShortcuts.Shortcut1.label=Zkratka - 1
+macro.rs.DisplayShortcuts.Shortcut2.label=Zkratka - 2
+macro.rs.DisplayShortcuts.Close.label=Zavřít
+macro.rs.DisplayShortcuts.WriteToBuffer.label=Zapsat do bufferu
+macro.rs.DisplayShortcuts.ShortcutList.label=Seznam klávesových zkratek
+macro.rs.DisplayShortcuts.Center.label=Střed
+macro.rs.DisplayShortcuts.South.label=Jih
+#}}}
+
+#{{{ Hex Convert
+macro.rs.HexConvert.Before.label=předtím:
+macro.rs.HexConvert.After.label=potom:
+macro.rs.HexConvert.NotValidHex.label=není platný hexa string.
+macro.rs.HexConvert.ByteToString.label=Byte na String:
+#}}}
+
+#{{{ Make Bug Report
+macro.rs.MakeBugReport.OpeningActivityLog.error=Chyba při otevírání logu aktivit.
+macro.rs.MakeBugReport.UsefulEntriesForReport.label=Záznamy logu aktivit mohou být užitečné při nahlašování bugů:\n\n.
+macro.rs.MakeBugReport.MessagejEdit.label=[zpráva] jEdit:
+macro.rs.MakeBugReport.NoticejEdit.label=[upozornění] jEdit:
+macro.rs.MakeBugReport.NoticeJarClassLoader.label=[upozornění] JARClassLoader:
+macro.rs.MakeBugReport.MessagejEditStartupComplete.label=[zpráva] jEdit: Spuštění hotovo
+macro.rs.MakeBugReport.Error.label=[chyba]
+macro.rs.MakeBugReport.ReadingActivityLog.error=Chyba při čtení logu aktivit
+#}}}
+
+#{{{ Run Script
+macro.rs.RunScript.SpecifyParametersForRunning.label=Zadejte parametry pro níže prováděný skript
+macro.rs.RunScript.ScriptExecutionCancelled.message=Spuštění skriptu bylo zrušeno.
+macro.rs.RunScript.FileNotScript.error=Aktuální soubor se nezdá býti skriptem.
+#}}}
+
+#{{{ Show Threads
+macro.rs.ShowThreads.Daemon.label=daemon
+macro.rs.ShowThreads.Priority.label=priorita
+macro.rs.ShowThreads.NotStarted.label=nespuštěn
+macro.rs.ShowThreads.Interrupted.label=přerušen
+macro.rs.ShowThreads.CloseUpdate.label=[Esc] Zavřít     [U] Update
+macro.rs.ShowThreads.CurrentThreads.label=Aktuální vlákna
+#}}}
+
+#}}}
+
+#{{{ Properties
+
+#{{{ Insert Buffer Properties
+macro.rs.InsertBufferProperties.InsertLocalProperties.label=Vložit lokální vlastnosti bufferu
+macro.rs.InsertBufferProperties.Properties.label=Vlastnosti:
+macro.rs.InsertBufferProperties.Insert.label=Vložit
+macro.rs.InsertBufferProperties.MustBeIn10Lines.message=Poznámka: Lokální vlastnosti bufferu musí být na první nebo posledních 10 řádkách bufferu, aby mohly být rozpoznány jEditem. 
+#}}}
+
+#{{{ Look and Feel Properties
+macro.rs.LookAndFeelProperties.Listing.label=--vypisuji názvy look & feel vlastností--
+#}}}
+
+#{{{ System Properties
+macro.rs.SystemProperties.SystemProperties.label=Vlastnosti systému
+#}}}
+
+#}}}
+
+#{{{ Text
+
+#{{{ Add Prefix And Suffix
+macro.rs.AddPrefixAndSuffix.MainDialog.title=Přidat předponu a příponu k vybraným řádkům
+macro.rs.AddPrefixAndSuffix.PrefixToAdd.label=Předpona k přidání:
+macro.rs.AddPrefixAndSuffix.SuffixToAdd.label=Přípona k přidání:
+#}}}
+
+#{{{ Color Picker
+macro.rs.ColorPicker.ColorPicker.label=Výběr barvy
+#}}}
+
+#{{{ Insert Date
+macro.rs.InsertDate.InternetTime.label=Internetový čas
+#}}}
+
+#{{{ Insert Tag
+macro.rs.InsertTag.EnterNameTag.label=Vložte název značky:
+#}}}
+
+#{{{ Line_Filter
+macro.rs.LineFilter.MainDialog.title=Filtrování řádek
+macro.rs.LineFilter.ignoreCaseCheckBox.label=Ignorovat velikost písmen
+macro.rs.LineFilter.regexpPanelBorder.title=Vzor k porovnání (regulární výraz)
+macro.rs.LineFilter.processModeRadioButtonMatching.label=Odpovídající
+macro.rs.LineFilter.processModeRadioButtonNotMatching.label=Neodpovídající
+macro.rs.LineFilter.processModeOptionPanelBorder.title=řádky
+macro.rs.LineFilter.actionModeRadioButtonWrite.label=Zapsat do nového bufferu
+macro.rs.LineFilter.actionModeRadioButtonDelete.label=Smazat
+macro.rs.LineFilter.actionModeOptionPanelBorder.title=Akce
+
+macro.rs.LineFilter.DeleteActionDisabled.message=Mazání není dostupné
+macro.rs.LineFilter.MultipleSelection.message=Vícenásobný výběr není podporován
+macro.rs.LineFilter.BlockSelection.message=Obdélníhový výběr není podporován
+
+macro.rs.LineFilter.SummaryDeleted.label=Řádky smazány!
+macro.rs.LineFilter.SummaryWritten.label=Řádky zapsány do nového bufferu.
+
+macro.rs.LineFilter.ErrorRegexpDialog.title=Neplatný regulární výraz
+macro.rs.LineFilter.ErrorRegexpDialog.message=Regulární výraz je neplatný!
+#}}}
+
+#{{{ Next Char
+macro.rs.InsertTag.EnterCharacter.label=Vložte znak
+#}}}
+
+#{{{ Reverse Lines
+macro.rs.ReverseLines.NotWorkingRectangularSelection.error=Bohužel, toto makro nefunguje s obdélníkovým výběrem.
+#}}}
+
+#{{{ Single Space Buffer
+macro.rs.SingleSpaceBuffer.NotDoubleSpaced.message=nevypadá jako double-spaced:
+macro.rs.SingleSpaceBuffer.Line.message=Řádek
+macro.rs.SingleSpaceBuffer.NotBlank.message=není prázdný.
+#}}}
+
+#}}}
+
+#}}}
+
+#{{{ Macro Names for Macros Menu (only original macros in original folders!)
+
+#{{{ C
+macros.folder.C.label=C
+
+C/Include_Guard.label=Include Guard
+C/Toggle_Header_Source.label=Toggle Header Source
+#}}}
+
+#{{{ Clipboard
+macros.folder.Clipboard.label=Schránka
+
+Clipboard/Copy_Lines.label=Kopírovat řádky
+Clipboard/Copy_Lines_Containing.label=Kopírovat řádky obsahující
+Clipboard/Copy_Visible_Lines.label=Kopírovat viditelné řádky
+Clipboard/Cut_Lines.label=Vyjmout řádky
+Clipboard/Cut_Lines_Containing.label=Vyjmout řádky obsahující
+Clipboard/Paste_Indent.label=Vložit odrážku
+#}}}
+
+#{{{ Editing
+macros.folder.Editing.label=Úpravy
+
+Editing/Duplicate_Lines_Above.label=Duplikovat řádky nad
+Editing/Duplicate_Lines_Below.label=Duplikovat řádky pod
+Editing/Emacs_Ctrl-K.label=Emacs Ctrl-K
+Editing/Emacs_Next_Line.label=Emacs další řádek
+Editing/Emacs_Previous_Line.label=Emacs předchozí řádek
+Editing/Go_to_Column.label=Jdi na sloupec
+Editing/Greedy_Backspace.label=Greedy Backspace
+Editing/Greedy_Delete.label=Greedy Delete
+Editing/Greedy_Left.label=Greedy doleva
+Editing/Greedy_Right.label=Greedy doprava
+Editing/Keywords_to_Upper_Case.label=Klíčová slova na velká písmena
+Editing/Mode_Switcher.label=Přepínač režimu
+Editing/Move_Lines_Down.label=Posunout řádky dolů
+Editing/Move_Lines_Up.label=Posunout řádky nahoru
+Editing/Open_Line_Above.label=Otevři linku nad
+Editing/Open_Line_Below.label=Otevři linku pod
+Editing/Toggle_Fold.label=Přepnout sbalit/zabalit fold
+#}}}
+
+#{{{ Files
+macros.folder.Files.label=Soubory
+
+Files/Browse_Buffer_Directory.label=Prohlížet adresář bufferu
+Files/Browse_Directory.label=Prohlížet adresář
+Files/Buffer_Switcher.label=Přepínač bufferu
+Files/Close_All_Except_Active.label=Zavřít vše kromě aktivního
+Files/Copy_Name_to_Clipboard.label=Kopírovat název do schránky
+Files/Copy_Path_to_Clipboard.label=Kopírovat cestu do schránky
+Files/Delete_Current.label=Smazat aktuální
+Files/Duplicate_Buffer.label=Duplikovat buffer
+Files/Glob_Close.label=Globální zavření
+Files/Insert_Selection.label=Vložit výběr
+Files/Next_Dirty_Buffer.label=Další změněný buffer
+Files/Open_Path.label=Otevřít cestu
+Files/Open_Selection.label=Otevřít výběr
+Files/Send_Buffer_To_Next_Split.label=Odeslat buffer to dalšáho rozdělení
+Files/Toggle_ReadOnly.label=Přepnout ReadOnly (pouze pro čtení)
+#}}}
+
+#{{{ Interface
+macros.folder.Interface.label=Rozhraní
+
+Interface/Decrease_Font_Size.label=Změnšit písmo
+Interface/Increase_Font_Size.label=Zvětšit písmo
+Interface/Open_Context_Menu.label=Otevřít kontextové menu
+Interface/Reset_TextArea.label=Resetovat textovou oblast
+Interface/Splitpane_Grow.label=Zvětšit aktuální textovou oblast
+Interface/Toggle_Bottom_Docking_Area.label=Přepnout spodní dokovací oblast
+Interface/Toggle_Left_Docking_Area.label=Přepnout levou dokovací oblast
+Interface/Toggle_Right_Docking_Area.label=Přepnout pravou dokovací oblast
+Interface/Toggle_Top_Docking_Area.label=Přepnout horní dokovací oblast
+#}}}
+
+#{{{ Java
+macros.folder.Java.label=Java
+
+Java/Create_Constructor.label=Vytvořit konstruktor
+Java/Get_Class_Name.label=Získat název třídy
+Java/Get_Package_Name.label=Získat název balíčku
+Java/Java_File_Save.label=Java File Save
+Java/Make_Get_and_Set_Methods.label=Vytvořit gettery a settery
+Java/Preview_JavaDoc_Of_Current_Buffer.label=Náhled JavaDocu aktuálního bufferu
+#}}}
+
+#{{{ Misc
+macros.folder.Misc.label=Různé
+
+Misc/Buffer_to_HyperSearch_Results.label=Buffer na výsledky hyperhledání
+Misc/Debug_BufferSets.label=Debug BufferSets
+Misc/Display_Abbreviations.label=Zobrazit zkratky
+Misc/Display_Actions.label=Ukázat akce
+Misc/Display_Character_Code.label=Ukázat kód znaku
+Misc/Display_Shortcuts.label=Zobrazit zkratky
+Misc/Evaluate_Buffer_in_BeanShell.label=Vyhodnotit buffer v BeanShell
+Misc/Hex_Convert.label=Hex konverze
+Misc/HyperSearch_Results_to_Buffer.label=Výsledky hyperhledání do bufferu
+Misc/Make_Bug_Report.label=Vytvořit nahlášení bugu
+Misc/Run_Script.label=Spustit skript
+Misc/Show_Threads.label=Zobrazit vlákna
+#}}}
+
+#{{{ Properties
+macros.folder.Properties.label=Vlastnosti
+
+Properties/Create_Plugin_Announcement.label=Vytvořit ohlášení pluginu
+Properties/Insert_Buffer_Properties.label=Vložit vlastnosti bufferu
+Properties/jEdit_Properties.label=Vlastnosti jEdit
+Properties/Look_and_Feel_Properties.label=Vlastnosti Look and Feel
+Properties/System_Properties.label=Vlastnosti systému
+#}}}
+
+#{{{ Text 
+macros.folder.Text.label=Text
+
+Text/Add_Prefix_and_Suffix.label=Přidat předponu a příponu
+Text/Color_Picker.label=Vybrat barvu
+Text/Compose_Tag.label=Složit značku
+Text/Duplicate_Line.label=Duplikovat řádek
+Text/Insert_Date.label=Vložit datum
+Text/Insert_Tag.label=Vložit štítek
+Text/Line_Filter.label=Filtr řádek
+Text/Next_Char.label=Další znak
+Text/Reverse_Lines.label=Obrátit řádky
+Text/Single_Space_Buffer.label=Single Space buffer
+#}}}
+
+#}}}
diff --git a/org/jedit/localization/jedit_de.props b/org/jedit/localization/jedit_de.props
new file mode 100644
index 0000000..a22ed26
--- /dev/null
+++ b/org/jedit/localization/jedit_de.props
@@ -0,0 +1,2223 @@
+# jEdit properties for localization light: GERMAN Language
+#
+#{{{
+# :folding=explicit:collapseFolds=1:noWordSep=_\\:
+# :encoding=UTF-8:
+#
+# Copyright (C) 2006-2012, Robert Schwenn <jedit at rstyx.de>
+#}}}
+#
+# Hints:
+# 1. This file is an excerpt of jedit_gui.props and contains only such properties,
+#    that represent lables for the GUI as well as mnemonics for some dialogs.
+# 2. !!! To get to main menu items via shortcuts (ALT + underlined_key) this
+#    file deactivates several alternative shortcuts!
+#    Also, some shortcuts that are unreachable on German keyboards, are changed.
+#
+#{{{ History:
+#{{{ 21.02.2012  4.4.2.3   - Core Localization separated
+#                            in order to support Localization API
+#}}}
+#}}}
+#
+#{{{ ToDo, Comments
+#
+# Translations to check again:
+#   - Dockable                => Dockbereich, Dock-Fenster, Dockfähige Fenster
+#   - Fractional font metrics => Teilschriftformen ?
+#   - Gutter                     (no translation)
+#   - Parse                      (no translation), parsen, durchsuchen
+#   - Scroll                     (no translation)
+#   - Editpane                => Editorpanel
+#
+#}}}
+#
+#{{{ Localization issues
+#
+#    {{{ General Hints:
+#        version-dependent lables:
+#        - about.title             => active version of java is not provided as {1} in jEdit 4.2
+#        - hypersearch results     => overhauled in jEdit 4.3pre15
+#    }}}
+#
+#    {{{ Missing Properties for Labels
+#
+#        There are several labels (especially dropdown-items) that are not found
+#        in the props file (and therefore translated labels cannot provided for them:
+#
+#        {{{ Global/Buffer Option panes
+#            Textarea:       - names of antiAlias modes
+#            Docking:        - names for dockable sets "all" and "core"
+#            Editing:        - names of folding modes
+#                            - names of word wrap modes
+#            Plugin Manager: - "Cache plugin list for: (minutes)"
+#            Shortcuts:      - name for "all" shortcuts
+#            Status bar:     - Tab titles "options" and "widgets"
+#                            - section header "caret position display options"
+#            View:           - names of BufferSet scopes
+#        }}}
+#
+#        {{{ Miscellaneous
+#            jEdit core      message in status bar: "xxx chars selected"
+#            Plugin Manager: Tab titles in update and install panes, All tooltips (plugin sets)
+#        }}}
+#    }}}
+#}}}
+# -------------------------------------------------------------------------------------------------
+
+
+#{{{ Special German Shortcuts
+
+#{{{ Deactivating alternative shortcuts to get to main menu items via ALT + underlined_key
+
+# Action                  Primary Shortcut    Alternative Shortcut (deactivating)
+# -------------------------------------------------------------------------------
+# Go to Next Character    RIGHT               A+l
+# Go to Next Page         PAGE_DOWN           A+a
+# Delete Next Character   DELETE              A+d
+
+next-char.shortcut2=
+next-page.shortcut2=
+delete.shortcut2=
+#}}}
+
+#{{{ Changing shortcuts that are unreachable on german keyboards
+
+# Action                  Original Shortcut      Changed Shortcut
+# ---------------------------------------------------------------
+# Expand Abbreviation     C+SEMICOLON            CA+SPACE
+# Multiple Selection      C+BACK_SLASH           C+NUMBER_SIGN
+# Rectangular Selection   A+BACK_SLASH           A+NUMBER_SIGN
+# Select Code Block       C+OPEN_BRACKET         C+8
+# Go to Matching Bracket  C+CLOSE_BRACKET        C+9
+# Go to Previous Bracket  C+e C+OPEN_BRACKET     C+e C+8
+# Go to Next Bracket      C+e C+CLOSE_BRACKET    C+e C+9
+
+expand-abbrev.shortcut=CA+SPACE
+toggle-rect-select.shortcut=A+NUMBER_SIGN
+toggle-multi-select.shortcut=C+NUMBER_SIGN
+select-block.shortcut=C+8
+match-bracket.shortcut=C+9
+next-bracket.shortcut=C+e C+9
+prev-bracket.shortcut=C+e C+8
+#}}}
+
+#}}}
+
+#{{{ jEdit core (jedit_gui.props)
+
+#{{{ Common strings
+common.ok=OK
+common.cancel=Abbruch
+common.close=Schließen
+common.error=Fehler
+common.apply=Anwenden
+common.more=Mehr
+common.insert=Einfügen
+common.add=Hinzufügen
+common.remove=Entfernen
+common.moveUp=Nach oben
+common.moveDown=Nach unten
+common.clearAll=Alle löschen
+#}}}
+
+#{{{ Miscellaneous
+history.caption=Zuletzt eingegebene Zeichenketten:
+
+action-set.jEdit=Eingebaute Befehle
+action-set.browser=Dateisystem-Browser
+action-set.macros=Makros
+action-set.plugin=Plugin: {0}
+
+macro-handler.beanshell.label=BeanShell-Skript
+
+save-layout-failed.message=Dock-Layout konnte nicht gespeichert werden.
+load-layout.title=Dock-Layout laden
+load-layout.message=Zu ladendes Dock-Layout:
+save-layout.title=Dock-Layout speichern
+save-layout.message=Zu speicherndes Dock-Layout:
+#}}}
+
+#{{{ Menus (only menu names and special strings)
+
+#{{{ Context menu
+view.context.customize=Dieses Menü anpassen...
+#}}}
+
+#{{{ Menu Bar
+
+#{{{ File menu
+file.label=$Datei
+recent-files.label=Let$zte Dateien
+recent-files.textfield.tooltip=Ein Filter-Präfix oder Glob-Muster kann hier eingegeben werden
+no-recent-files.label=Keine letzten Dateien
+clear-recent-files.label=Letzte Dateien löschen
+reload-encoding.label=Erneut laden mit Zeichenkodierung
+reload-encoding.error={0} ist keine gültige Zeichenkodierung
+#}}}
+
+#{{{ Edit menu
+edit.label=$Bearbeiten
+clipboard.label=Mehr $Zwischenablage
+selection.label=$Mehr Auswahl
+text.label=$Text
+indent.label=Einrü$ckung
+source.label=$Quellkode
+#}}}
+
+#{{{ Search menu
+search.label=$Suche
+#}}}
+
+#{{{ Markers menu
+markers.label=$Lesezeichen
+no-markers.label=Keine Lesezeichen
+#}}}
+
+#{{{ Folding menu
+folds.label=$Falten
+#}}}
+
+#{{{ View menu
+view.label=$Ansicht
+scrolling.label=Sc$rollen
+splitting.label=$Teilen
+docking.label=An$docken
+buffersets.label=D$ateisätze
+#}}}
+
+#{{{ Utilities menu
+utils.label=$Extras
+recent-directories.label=$Letzte Verzeichnisse
+no-recent-dirs.label=Keine letzten Verzeichnisse
+favorites.label=Fa$voriten
+current-directory.label=$Arbeitsverzeichnis
+jedit-directory.label=$jEdit Stammverzeichnis
+settings-directory.label=$Einstellungs-Verzeichnis
+beanshell.label=Bean$Shell
+troubleshooting.label=$Troubleshooting
+quick-options.label=S$chnelleinstellungen
+#}}}
+
+#{{{ Macros menu
+macros.label=$Makros
+#}}}
+
+#{{{ Plugins menu
+plugins.label=$Plugins
+no-Plugins.label=Keine Plugins installiert
+#}}}
+
+#{{{ Help menu
+help-menu.label=$Hilfe
+#}}}
+
+#}}}
+
+#}}}
+
+#{{{ Macro Strings
+macro.temp.header=// Dies ist ein temporäres Makro. Überprüfen Sie zuerst alle Kommandos,\n\
+                  // um sicher zu gehen, dass die beabsichtigten Aktionen ausgeführt werden.\n\
+                  // Um das Makro zu starten, aktivieren Sie die Datei,\n\
+                  // in der das Makro arbeiten soll und drücken C+m C+p.
+
+macro.header=// Dies ist ein aufgenommenes Makro. Überprüfen Sie zuerst alle Kommandos,\n\
+             // um sicher zu gehen, dass die beabsichtigten Aktionen ausgeführt werden.\n\
+             // Um das Makro zu starten, aktivieren Sie die Datei,\n\
+             // in der das Makro arbeiten soll und drücken C+m C+p.
+#}}}
+
+#{{{ Commands, wether they do or do not appear in menus
+backspace-word-std.label=Löschen voriges Wort (Leerräume entfernen)
+backspace-word-std-after.label=Löschen voriges Wort (Leerräume nach dem Wort entfernen)
+backspace-word.label=Löschen voriges Wort
+backspace.label=Löschen voriges Zeichen
+delete-word-std.label=Löschen nächstes Wort (Leerräume entfernen)
+delete-word.label=Löschen nächstes Wort
+delete.label=Löschen nächstes Zeichen
+document-end.label=Gehe zum Dateiende
+document-home.label=Gehe zum Dateianfang
+end.label=Ende
+home.label=Home
+smart-end.label=Smart End
+smart-home.label=Smart Home
+insert-literal.label=Einfügen - Nächstes Zeichen als Literal
+insert-newline-indent.label=Einfügen - Zeilenumbruch und Einrückung
+insert-newline.label=Einfügen - Zeilenumbruch
+insert-tab-indent.label=Einfügen - Tabulator und Einrückung
+insert-tab.label=Einfügen - Tabulator
+line-end.label=Gehe zum Zeilenende
+line-home.label=Gehe zum Zeilenanfang
+logs-remove-all-errors.label=Alle Fehler löschen
+new-file.label=$Neu
+new-file-in-mode.label=Neu mit $Modus
+new-plain-view.label=Neue $einfache Ansicht
+new-view.label=$Neue Ansicht
+next-bracket.label=Gehe zur $nächsten Klammer
+next-buffer.label=$Gehe zur nächsten Datei
+next-char.label=Gehe zum nächsten Zeichen
+next-fold.label=Gehe zur $nächsten Falte
+next-line.label=Gehe zur nächsten Zeile
+next-marker.label=Gehe zum $nächsten Lesezeichen
+next-page.label=Gehe zur nächsten Seite
+next-paragraph.label=Gehe zum nächsten Absatz
+next-textarea.label=Gehe zum $nächsten Textbereich
+next-word-std.label=Gehe zum nächsten Wort (Leerräume entfernen)
+next-word.label=Gehe zum nächsten Wort
+open-file.label=Ö$ffnen...
+overwrite.label=Ãœberschreib-Modus
+page-setup.label=Seite $einrichten...
+parent-fold.label=Gehe zur nächst $höheren Falte
+paste-deleted.label=Einfügen aus zuletzt gelöschten...
+paste-special.label=Einfügen Spezial...
+paste-previous.label=Einfügen aus zuletzt eingefügten...
+paste-string-register.label=Einfügen aus Register
+paste.label=$Einfügen
+prev-bracket.label=Gehe zur $vorigen Klammer
+prev-buffer.label=Gehe zur $vorigen Datei
+prev-char.label=Gehe zum vorigen Zeichen
+prev-fold.label=Gehe zur $vorigen Falte
+prev-line.label=Gehe zur vorigen Zeile
+prev-marker.label=Gehe zum $vorigen Lesezeichen
+prev-page.label=Gehe zur vorigen Seite
+prev-paragraph.label=Gehe zum vorigen Absatz
+prev-textarea.label=Gehe zum v$origen Textbereich
+prev-word-std.label=Gehe zum vorigen Wort (Leerräume entfernen)
+prev-word-std-after.label=Gehe zum vorigen Wort (Leerräume nach dem Wort entfernen)
+prev-word.label=Gehe zum vorigen Wort
+print.label=$Drucken...
+quick-search-word.label=Schnellsuche nach W$ort
+quick-search.label=Schne$llsuche
+range-comment.label=$Block-Kommentar
+toggle-line-numbers.label=$Zeilennummern Ein/Aus
+toggle-statusbar.label=$Statuszeile Ein/Aus
+toggle-gutter.label=G$utter Ein/Aus
+set-view-title.label=Setze Titel für Ansicht...
+set-view-title.tooltip=Setzt den Titel eines Hauptfensters zwecks einfacher Identifizierung auf dem Desktop
+toggle-full-screen.label=Voll$bildmodus Ein/Aus
+show-context-menu.label=Zeige Kontextmenü
+toggle-line-separator.label=Zeilenendezeichen Ein/Aus
+toggle-multi-select.label=$Mehrfachauswahl Ein/Aus
+toggle-rect-select.label=$Spaltenauswahl Ein/Aus
+toggle-word-wrap.label=Wortumbruch-Modus umschalten
+visible-end.label=Gehe zur letzten sichtbaren Zeile
+visible-home.label=Gehe zur ersten sichtbaren Zeile
+whitespace-end.label=Gehe zum Ende des Leerraumes
+whitespace-home.label=Gehe zum Beginn des Leerraumes
+scroll-down-line.label=Zeile nach $unten scrollen
+scroll-down-page.label=Seite nach u$nten scrollen
+scroll-to-current-line.label=Zur $aktiven Zeile scrollen
+scroll-and-center.label=$Scrollen und Cursor zentrieren
+scroll-up-line.label=Zeile nach $oben scrollen
+scroll-up-page.label=Seite nach o$ben scrollen
+search-in-directory.label=Suche in Ver$zeichnis...
+search-in-open-buffers.label=Suche in offenen $Dateien...
+select-all.label=A$lles auswählen
+select-block.label=$Kode-Block auswählen
+select-document-end.label=Auswählen bis Datei$ende
+select-document-home.label=Auswählen bis Datei$anfang
+select-end.label=Auswählen bis Smart End Position
+select-fold.label=Falte aus$wählen
+select-home.label=Auswählen bis Smart Home Position
+select-line-end.label=Auswählen bis Zeilenende
+select-line-home.label=Auswählen bis Zeilenanfang
+select-line-range.label=Zeilen$bereich auswählen...
+select-line.label=$Zeile auswählen
+select-marker.label=Auswählen bis Lesezeichen
+select-next-bracket.label=Auswählen bis zur nächsten Klammer
+select-next-char.label=Auswählen bis zum nächsten Zeichen
+select-next-line.label=Auswählen bis zur nächsten Zeile
+select-next-marker.label=Auswählen bis zum nächsten Lesezeichen
+select-next-page.label=Auswählen bis zur nächsten Seite
+select-next-paragraph.label=Auswählen bis zum nächsten Absatz
+select-next-word-std.label=Auswählen bis zum nächsten Wort (Leerräume entfernen)
+select-next-word.label=Auswählen bis zum nächsten Wort
+select-none.label=Auswahl auf$heben
+select-paragraph.label=$Absatz auswählen
+select-prev-bracket.label=Auswählen bis zur vorigen Klammer
+select-prev-char.label=Auswählen bis zum vorigen Zeichen
+select-prev-line.label=Auswählen bis zur vorigen Zeile
+select-prev-marker.label=Auswählen bis zum vorigen Lesezeichen
+select-prev-page.label=Auswählen bis zur vorigen Seite
+select-prev-paragraph.label=Auswählen bis zum vorigen Absatz
+select-prev-word-std.label=Auswählen bis zum vorigen Wort (Leerräume entfernen)
+select-prev-word-std-after.label=Auswählen bis zum vorigen Wort (Leerräume nach dem Wort entfernen)
+select-prev-word.label=Auswählen bis zum vorigen Wort
+select-visible-end.label=Auswählen bis zur letzten sichtbaren Zeile
+select-visible-home.label=Auswählen bis zur ersten sichtbaren Zeile
+select-whitespace-end.label=Auswählen bis zum Ende des Leerraumes
+select-whitespace-home.label=Auswählen bis zum Anfang des Leerraumes
+select-word.label=$Wort auswählen
+shift-left.label=Einrückung nach $links verschieben
+shift-right.label=Einrückung nach $rechts verschieben
+# obsolete as of 4.3pre18
+show-buffer-switcher.label=Datei-U$mschalter Ein/Aus
+# new in 4.3pre18
+focus-buffer-switcher.label=$Fokus auf Datei-Umschalter
+toggle-buffer-switcher.label=Datei-U$mschalter Ein/Aus
+#
+add-buffer-to-favorites.label=Datei zu Favoriten hinzufügen
+add-dir-to-favorites.label=Verzeichnis zu Favoriten hinzufügen
+add-explicit-fold.label=E$xplizite Faltung hinzufügen
+add-marker-shortcut.label=Lesezeichen hinzufügen mit Tastaturkürzel
+add-marker.label=$Lesezeichen hinzufügen/entfernen
+close-all.label=Alle sc$hließen
+close-buffer.label=S$chließen
+close-buffer.tooltip=Datei wird nur im Dateisatz dieses Editorpanels geschlossen
+global-close-buffer.tooltip=Datei wird in allen Editorpanelen und Ansichten geschlossen
+close-docking-area.label=$Aktiven Dockbereich schließen
+close-view.label=Ansi$cht schließen
+bottom-docking-area.label=Gehe zum un$teren Dockbereich
+left-docking-area.label=Gehe zum l$inken Dockbereich
+right-docking-area.label=Gehe zum $rechten Dockbereich
+top-docking-area.label=Gehe zum $oberen Dockbereich
+toggle-dock-areas.label=Dockbereiche $umschalten
+layout-load.label=Dock-Layout $Laden ...
+layout-save.label=Dock-Layout $Speichern ...
+layout-load-current-mode.label=Dock-Layout des aktiven Modus Laden ...
+layout-save-current-mode.label=Dock-Layout des aktiven Modus Speichern ...
+about.label=ü$ber jEdit...
+action-bar.label=$Kommandozeile
+buffer-options.label=$Datei-Optionen...
+center-caret.label=$Cursor im Bildschirm zentrieren
+complete-word.label=Wort $vervollständigen
+collapse-all-folds.label=A$lle Falten einklappen
+collapse-fold.label=Falte $einklappen
+copy-append-string-register.label=Kopieren (Anfügen an ein Register)
+copy-append.label=Kopieren (Anfügen an Zwischenablage)
+copy-string-register.label=Kopieren in ein Register
+copy.label=$Kopieren
+cut-append-string-register.label=Ausschneiden (Anfügen an ein Register)
+cut-append.label=Ausschneiden (Anfügen an Zwischenablage)
+cut-string-register.label=Ausschneiden in ein Register
+cut.label=$Ausschneiden
+delete-end-line.label=Löschen bis Zeil$enende
+delete-line.label=$Zeile löschen
+delete-paragraph.label=A$bsatz löschen
+delete-start-line.label=Löschen bis Zeilen$anfang
+edit-favorites.label=Favoriten bearbeiten
+edit-syntax-style.label=Syntax-Stil des Token-Typs unter dem Cursor bearbeiten
+eval-for-selected-lines.label=BeanShell-Ausdruck auswerten - ausgewählte $Zeilen
+eval-selection.label=BeanShell-Ausdruck auswerten - Aus$wahl
+eval.label=BeanShell-Ausdruck $auswerten
+exit.label=$Beenden
+expand-abbrev.label=A$bkürzung erweitern
+expand-all-folds.label=$Alle Zeilen anzeigen
+expand-fold.label=Falte $komplett ausklappen
+expand-folds.label=Alle Falten einer Stufe ausklappen
+expand-one-level.label=Falte eine $Stufe ausklappen
+find-next.label=Weitersuchen $vorwärts
+find-prev.label=Weitersuchen $rückwärts
+find.label=$Suche
+format-paragraph.label=Absatz $formatieren
+global-options.label=Gl$obale Optionen...
+goto-line.label=$Gehe zu Zeile...
+goto-marker.label=Gehe zu Lesezeichen
+help.label=jEdit $Hilfe
+hypersearch-results.label=Hypersuche Ergebnisse
+hypersearch-word.label=HyperSuche nach Worten
+hypersearch.label=Schnell-$Hypersuche
+ignore-case.label=Groß-/Klein-Schreibung $ignorieren
+indent-lines.label=$Ausgewählte Zeilen einrücken
+invert-selection.label=Auswahl $umkehren
+io-progress-monitor.label=$I/O-Thread-Monitor
+task-monitor.label=T$ask-Monitor
+join-lines.label=Zeilen $verbinden
+keyboard-tester.label=$Tastatur Tester...
+last-action.label=Letzte Aktion $wiederholen
+last-macro.label=Letztes Makro $wiederholen
+line-comment.label=$Zeilen-Kommentar
+match-bracket.label=Gehe zur $passenden Klammer
+memory-status.label=$Speicher Status...
+narrow-to-fold.label=Alles ausblenden außer $Falte
+narrow-to-selection.label=Alles a$usblenden außer Auswahl
+plugin-manager.label=Plugin $Manager...
+plugin-options.label=Plugin $Optionen...
+recent-buffer.label=Gehe zur $letzten Datei
+record-macro.label=$Makro aufnehmen...
+#record-temp-macro.label=Temporäres Makro a$ufnehmen...
+record-temp-macro.label=Temp. Makro a$ufnehmen...
+redo.label=$Wiederholen
+regexp.label=Re$guläre Ausdrücke Ein/Aus
+reload-all.label=Alle erneut Laden
+reload-modes.label=$Bearbeitungsmodi neu laden
+reload.label=Erneut $Laden
+remove-all-markers.label=Alle Lesezeichen $entfernen
+remove-marker.label=Lesezeichen entfernen
+remove-trailing-ws.label=Leerräume an $Zeilenenden entfernen
+replace-all.label=$Alle ersetzen
+replace-and-find-next.label=$Ersetzen
+replace-in-selection.label=Ersetzen in Aus$wahl
+rescan-macros.label=Makro-Menü $neu aufbauen
+resplit.label=$Letzte Teilung wiederherstellen
+run-other-macro.label=$Anderes Makro ausführen...
+#run-temp-macro.label=Temporäres Makro aus$führen
+run-temp-macro.label=Temp. Makro aus$führen
+save-a-copy-as.label=$Kopie speichern unter...
+save-a-copy-as.tooltip=... diese Kopie wird nicht geöffnet
+save-all.label=$Alle speichern
+save-as.label=Speichern $unter...
+save.label=$Speichern
+spaces-to-tabs.label=L$eerzeichen zu Tabulatoren
+split-horizontal.label=$Horizontal Teilen
+split-vertical.label=$Vertikal Teilen
+stop-recording.label=$Stop Makroaufnahme
+swap-marker.label=Cursor und Lesezeichen tauschen
+tabs-to-spaces.label=$Tabulatoren zu Leerzeichen
+tip-of-the-day.label=$Tip des Tages
+to-lower.label=Zu $Kleinbuchstaben
+to-upper.label=Zu $Grossbuchstaben
+undo.label=$Rückgängig
+unsplit-current.label=Aktive $Teilung aufheben
+unsplit.label=$Alle Teilungen aufheben
+update-log.label=Activity Log auf $Festplatte aktualisieren
+vertical-paste-string-register.label=Vertikal Einfügen aus Register
+vertical-paste.label=$Vertikal Einfügen
+view-registers.label=$Register ansehen...
+word-count.label=W$orte zählen...
+
+editpane-bufferset.label=Dateisatz-Modus => $Editorpanel
+editpane-bufferset.tooltip=Jedes Editorpanel hat seinen eigenen Dateisatz
+global-bufferset.label=Dateisatz-Modus => $Global
+global-bufferset.tooltip=Alle Editorpanele haben einen gemeinsamen Dateisatz
+view-bufferset.label=Dateisatz-Modus => $Ansicht
+view-bufferset.tooltip=Editorpanele innerhalb des gleichen Ansichtsfensters haben einen gemeinsamen Dateisatz
+closeall-except-active.label=Alle ande$ren schließen
+closeall-except-active.tooltip=Dateisatz dieses Editorpanels leeren außer Dateien, die gerade angezeigt werden
+bufferset-toggle-exclusive.label=$Exclusive Dateisätze Ein/Aus
+bufferset-toggle-exclusive.tooltip=Wenn eine Datei geöffnet wird, soll sie in anderen nicht überlappenden Dateisätzen geschlossen werden
+global-close-buffer.label=Schließen ($global)
+
+#}}}
+
+#{{{ View stuff
+
+# Title
+view.title=jEdit -\u0020
+view.title.dirty=\ (geändert)
+
+view.docking.close-tooltip=Schließt den Dockbereich
+view.docking.menu-tooltip=Dock-Optionen
+view.docking.menu-floating=Abdocken
+view.docking.menu-top=Oben andocken
+view.docking.menu-left=Links andocken
+view.docking.menu-bottom=Unten andocken
+view.docking.menu-right=Rechts andocken
+view.docking.menu-clone=Neues schwebendes Fenster
+view.docking.menu-close=Schließen
+view.docking.menu-undock=Abdocken + schließen
+
+# Globale Vorlage für alle Dock-Menüs
+view.docking.toggle.label={0} (Umschalten)
+view.docking.float.label={0} (Neues schwebendes Fenster)
+
+directory.not-local=Verzeichnisse entfernter Dateisystemene können nicht gelistet werden
+directory.no-files=Keine Dateien
+
+#{{{ Gutter highlight
+view.gutter.marker.no-name=Lesezeichen
+view.gutter.marker=Lesezeichen: {0}
+#}}}
+
+#{{{ Status messages
+view.status.add-marker=Kürzel für neues Lesezeichen? [{0}]
+view.status.auto-wrap=Suchtext nicht gefunden; Es geht am anderen Ende weiter!
+view.status.bracket=Passende Klammer in Zeile {0}: {1}
+view.status.caret-tooltip=Position der Einfügemarke (Absolut,Zeile,Spalte relativ%)
+view.status.copy-append-string-register=Kopieren/Anhängen an Register? [{0}]
+view.status.copy-string-register=Kopieren in Register? [{0}]
+view.status.cut-append-string-register=Ausschneiden/Anhängen an Register? [{0}]
+view.status.cut-string-register=Ausschneiden in Register? [{0}]
+view.status.expand-folds=Falt-Ebene? [1-9]
+view.status.goto-marker=Gehe zu Lesezeichen mit Kürzel? [{0}]
+view.status.incomplete-abbrev={0} Parameter angegeben, aber {1} erforderlich!
+view.status.insert-literal=Einzufügendes Literal?
+view.status.io-1=I/O: 1 Operation in Arbeit
+view.status.io.done=Ein-/Ausgabeoperation vollständig
+view.status.io=I/O: {0} Operationen in Arbeit
+view.status.linesep-changed=Zeilenende-Zeichen gesetzt auf "{0}"
+view.status.linesep-tooltip=Zeilenende-Zeichen (zum ändern klicken)
+view.status.memory-tooltip=Java Heap-Speicher: {0}Kb/{1}Kb
+view.status.mode-tooltip=Bearbeitungsmodus, Faltmodus,  Zeichenkodierung
+view.status.multi-changed=Mehrfachauswahl-Modus ist "{0,choice,0#Aus|1#Ein}"
+view.status.multi-tooltip=Mehrfachauswahl-Modus (zum ändern klicken)
+view.status.narrow=Menüpunkt "Alle Zeilen anzeigen" wählen, um den gesamten Text wieder sichtbar zu machen
+view.status.no-markers=keine Lesezeichen gesetzt
+view.status.no-registers=keine Register definiert
+view.status.overwrite-changed=Ãœberschreib-Modus ist "{0,choice,0#Aus|1#Ein}"
+view.status.overwrite-tooltip=Überschreib-Modus (zum ändern klicken)
+view.status.paste-string-register=Einfügen aus Register? [{0}]
+view.status.print=Seite {0} wird gedruckt
+view.status.quick-copy=Schnellkopier-Modus - markierter Text ersetzt Auswahl
+view.status.recording=Makro wird aufgenommen
+view.status.rect-select-changed=Spaltenauswahl ist "{0,choice,0#Aus|1#Ein}"
+view.status.rect-tooltip=Spaltenauswahl-Modus (zum ändern klicken)
+view.status.replace-all={0} Fundstelle(n) in {1} Datei(en) ersetzt
+view.status.search-not-found=Suchtext nicht gefunden!
+view.status.select-marker=Auswählen bis Lesezeichen mit Kürzel? [{0}]
+view.status.swap-marker=Cursor-Position tauschen mit Lesezeichen: Kürzel? [{0}]
+view.status.vertical-paste-string-register=Vertikal einfügen aus Register ? [{0}]
+view.status.wrap-changed=Wortumbruch-Modus ist jetzt "{0}"
+view.status.wrap-tooltip=<html>Wortumbruch-Modus ist {0} (zum ändern klicken)</html>
+view.status.bufferset-tooltip=Dateisatz-Modus ist {0}
+wrap.none=ausgeschaltet
+wrap.hard=hart
+wrap.soft=weich
+#}}}
+
+#}}}
+
+#{{{ Printing
+print-error.title=Fehler beim Drucken
+print-error.message=Ein Fehler trat auf beim Versuch zu drucken:\n  {0}
+#}}}
+
+#{{{ Various dialog boxes
+
+#{{{ New file in mode
+new-file-in-mode.dialog.title=Neue Datei
+new-file-in-mode.dialog.message=Mit Bearbeitungsmodus:
+#}}}
+
+#{{{ About dialog
+about.title=über jEdit
+
+# jEdit 4.2final
+#about.version=jEdit {0}
+
+# until jEdit 4.3pre16
+#about.version=jEdit {0} (verwendet Java {1})
+
+# jEdit 4.3
+#about.version=jEdit {0}, Modus: {1}, benutzt Java: {2})
+
+# jEdit 4.4
+about.version=jEdit {0}, Modus: {1}, benutzt {2} Java {3}
+
+about.mode.standalone=selbständig
+about.mode.server=Server
+about.mode.server-background=Server (bleibt im Hintergrund)
+about.navigate=Pfeil-Tasten ändern Geschwindigkeit und Richtung des laufenden Textes
+# Scrolling Text kept original.
+#}}}
+
+#{{{ Error list dialog, used to report I/O and Plugin load errors
+error-list.plugin-manager=Plugin Manager
+#}}}
+
+#{{{ I/O error dialog box
+ioerror.title=I/O-Fehler
+ioerror.caption=Die folgenden {0} I/O-Operationen konnten nicht abgeschlossen werden:
+ioerror.caption-1=Die folgende I/O-Operation konnte nicht abgeschlossen werden:
+
+ioerror={0}
+ioerror.directory-error=Kann Verzeichnis nicht auflisten: {0}
+ioerror.directory-error-nomsg=Kann Verzeichnis nicht auflisten.
+
+ioerror.encoding-error=Die Datei konnte nicht korrekt (ohne eventuellen Datenverlust) \n\
+  geladen werden mit Zeichenkodierung "{0}".\n\
+  ({1})\n\
+  Versuchen Sie eine andere Kodierung zu wählen.\n\
+  Sie kann eingestellt werden mit dem Menüpunkt "Datei -> Erneut laden mit Zeichenkodierung".\n\
+  Wenn dies künftig automatisch geschehen soll, fügen Sie die Kandidaten der\n\
+  "Liste der Rückfall-Kodierungen" hinzu (Extras -> Globale Optionen -> Zeichenkodierungen)
+ioerror.write-encoding-error=Fehler beim Kodieren des Zeichens\n\
+  {3} in Spalte {2} der Zeile {1} mit der Zeichenkodierung "{0}".
+
+ioerror.read-error=Laden nicht möglich: {0}
+ioerror.write-error=Speichern nicht möglich: {0}
+ioerror.unsupported-encoding-error={0} Zeichensatz wird durch die aktive JVM nicht unterstützt
+ioerror.open-directory=Öffnen eines Verzeichnisses als Datei nicht möglich.
+ioerror.save-directory=Speichern eines Verzeichnisses als Datei nicht möglich.
+ioerror.no-read=Unzureichende Rechte, um Datei zu laden.
+ioerror.no-write=Unzureichende Rechte, um Datei zu speichern.
+ioerror.save-readonly-twostagefail=Die Datei ist schreibgeschützt und zweistufiges Speichern ist nicht möglich
+ioerror.badurl=Ungültige Schreibweise der URL: {0}
+ioerror.delete-error=Datei löschen nicht möglich.
+ioerror.rename-exists=$überschreiben der existierenden Datei "{0}" nicht möglich.
+ioerror.rename-error=Umbenennen nach "{0}" nicht möglich.
+ioerror.mkdir-error=Anlegen des Verzeichnisses nicht möglich.
+
+vfs.not-supported.list=Verzeichnisse des "{0}"-Dateisystems können nicht aufgelistet werden.
+vfs.not-supported.load=Dateien des "{0}"-Dateisystems können nicht geöffnet werden.
+vfs.not-supported.save=Dateien können nicht gespeichert werden in das "{0}"-Dateisystem.
+
+vfs.overwrite-readonly.title=Datei ist schreibgeschützt
+vfs.overwrite-readonly.message=Die Datei "{0}" ist schreibgeschützt.\n\
+  Soll sie trotzdem gespeichert werden?\n\
+  Dafür wird das zweistufige Speichern verwendet (Dateieigentümer \
+  in Unix wird zurückgesetzt)?
+
+vfs.twostageimpossible.title=Zweistufiges Speichern nicht möglich
+vfs.twostageimpossible.message=Zweistufiges Speichern kann nicht angewandt werden, trotzdem speichern?
+
+out-of-memory-error=Es ist nicht genügend Java Heap-Speicher vorhanden, \n\
+  um diese Aufgabe abzuschließen. Versuchen Sie, die maximale Größe des \
+   Heap-Speichers zu erhöhen.\n\
+  \n\
+  Dokumentation bezüglich Änderung der Größe des Java Heap-Speichers: siehe\n\
+  Benutzerhandbuch, Kapitel "jEdit Basics", Abschnitt "Buffers".
+#}}}
+
+#{{{ Old I/O error dialog boxes
+ioerror.message=Ein I/O-Fehler trat auf ({0})
+
+read-error.title=Lesefehler
+# {0} - the path name {1} - the error message
+read-error.message=Die Datei "{0}"\n\
+  konnte aufgrund eines I/O-Fehlers nicht geladen werden.\n\
+  ({1})
+
+write-error.title=Schreibfehler
+# {0} - the path name {1} - the error message
+write-error.message=Die Datei "{0}"\n\
+  konnte aufgrund eines I/O-Fehlers nicht gespeichert werden.\n\
+  ({1})
+
+directory-error.title=Verzeichnisfehler
+# {0} - the path name {1} - the error message
+directory-error.message=Das Verzeichnis "{0}"\n\
+  konnte aufgrund eines I/O-Fehlers nicht aufgelistet werden.\n\
+  ({1})
+
+directory-error-nomsg.title=Verzeichnisfehler
+# {0} - the path name
+directory-error-nomsg.message=Das Verzeichnis "{0}"\n\
+  konnte aufgrund eines I/O-Fehlers nicht aufgelistet werden.
+
+encoding-error.title=Inkompatible Zeichenkodierung
+encoding-error.message=Die Datei "{0}"\n\
+  konnte nicht geladen werden mit "{1}" Zeichenkodierung.\n\
+  ({2})\n\
+  \n\
+  Um eine andere Zeichenkodierung zu verwenden, versuchen Sie diese\n\
+  im Befehle-Menü des Dateisystem-Browser zu wählen.\n\
+  \n\
+  Wenn Sie nicht wissen, welche Zeichenkodierung zu verwenden ist,\n\
+  versuchen Sie "ASCII" oder "8859_1".
+
+open-directory.title=Verzeichnis öffnen nicht möglich.
+open-directory.message="{0}" ist ein Verzeichnis.\n\
+  Verzeichnisse können nicht zum Bearbeiten geöffnet werden.
+
+save-directory.title=Verzeichnis speichern nicht möglich.
+save-directory.message="{0}" ist ein Verzeichnis.\n\
+  Dateien können nicht als Verzeichnisse gespeichert werden.
+
+no-read.title=Datei öffnen nicht möglich
+no-read.message=Lesen der Datei "{0}" nicht möglich.\n\
+  Möglicherweise haben Sie nicht genügend Rechte.
+
+no-write.title=Datei speichern nicht möglich
+no-write.message=Speichern der Datei "{0}" nicht möglich.\n\
+  Möglicherweise haben Sie nicht genügend Rechte.
+
+badurl.title=Ungültige URL
+# {0} - the URL
+# {1} - the error
+badurl.message=Die folgende URL ist ungültig: "{0}"\n\
+  ({1})
+#}}}
+
+#{{{ Go to line dialog
+goto-line.title=Gehe zu Zeile
+goto-line.message=Gehe zu Zeile:
+#}}}
+
+#{{{ Word count dialog
+wordcount.title=Worte zählen
+# {0} - characters
+# {1} - words
+# {2} - lines
+wordcount.message=Zeichen: {0}\nWorte: {1}\nZeilen: {2}
+#}}}
+
+#{{{ Set marker dialog
+setmarker.title=Lesezeichen setzen
+setmarker.message=Name für das Lesezeichen:
+#}}}
+
+#{{{ File not saved dialog
+notsaved.title=Nicht gespeicherte Datei
+# {0} - file name
+notsaved.message=Änderungen speichern nach "{0}"?
+#}}}
+
+#{{{ File changed, still reload dialog
+changedreload.title=Geänderte Datei
+changedreload.message="{0}"\n\
+  wurde seit dem letzten Speichern geändert. Wenn sie neu geladen wird,\n\
+  gehen diese Änderungen verloren. Fortfahren?
+#}}}
+
+#{{{ Autosave file exists dialog
+autosave-found.title=Autosave-Datei gefunden
+# {0} - autosave file name
+autosave-found.message=Die Autosave-Datei "{0}"\n\
+  wurde gefunden! Möglicherweise ist jEdit abgestürzt, bevor Sie\n\
+  speichern konnten. Möchten Sie die Autosave-Datei öffnen?
+
+autosave-loaded.title=Autosave-Datei geladen
+autosave-loaded.message=Die Autosave-Datei "{0}"\n\
+  wurde geladen. Sie sollten nun prüfen, ob sie Ihre ungespeicherten Daten\n\
+  enthält. Wenn Sie die automatisch gesicherten Änderungen behalten möchten, \
+  speichern Sie die Datei.\n\
+  Wenn Sie sie verwerfen möchten, wählen Sie Datei->Erneut laden.
+#}}}
+
+#{{{ Save all confirm dialog
+saveall.title=Alle Dateien speichern
+saveall.message=Alle geänderten Dateien speichern?
+#}}}
+
+#{{{ Reload all confirm dialog
+reload-all.title=Alle Dateien erneut laden
+reload-all.message=Alle Dateien erneut von der Festplatte laden?\n\
+  Ungespeicherte Änderungen in allen Dateien WERDEN VERLOREN GEHEN!
+#}}}
+
+#{{{ Encoding prompt
+encoding-prompt.title=Öffnen mit anderer Zeichenkodierung
+encoding-prompt.message=Zu verwendende Zeichenkodierung:
+#}}}
+
+#{{{ Macro recording already in progress dialog
+already-recording.title=Aufzeichnung läuft bereits
+already-recording.message=Die Aufzeichnung eines Makros läuft bereits.
+#}}}
+
+#{{{ No temporary macro dialog
+no-temp-macro.title=Kein temporäres Makro
+no-temp-macro.message=Es wurde kein temporäres Makro aufgezeichnet.
+#}}}
+
+#{{{ Record macro dialog
+record.title=Makroaufzeichnung
+record.message=Name des Makros:
+#}}}
+
+#{{{ Some features don't work with -nosettings dialog
+no-settings.title=Feature ausgeschaltet.
+no-settings.message=jEdit wurde gestartet mit dem Schalter "-nosettings".\n\
+  Um dieses Feature nutzen zu können, muss jEdit ohne diesen Schalter gestartet werden.
+#}}}
+
+#{{{ Some features don't work with the web start version
+no-webstart.title=Feature ausgeschaltet
+no-webstart.message=Dieses Feature ist nicht verfügbar\n\
+  in der WebStart-Version von jEdit.
+#}}}
+
+#{{{ Search and replace dialog
+search.title=Suchen und Ersetzen
+
+search.find=Suchen nach: (Rechtsklick für letzte Eingaben)
+search.find.tooltip=Bild hoch/Bild runter = letzte Eingaben, STRG+ENTER = Zeilenumbruch
+search.find.mnemonic=s
+search.replace=Ersetzen mit:
+search.replace.mnemonic=e
+search.string-replace-btn=Text
+search.beanshell-replace-btn=Rückgabewert eines BeanShell-Schnipsels
+
+search.settings=Einstellungen:
+search.keep=Dialog nicht schließen
+search.keep.mnemonic=b
+search.case=Groß-/Klein ignorieren
+search.case.mnemonic=i
+search.regexp=Reguläre Ausdrücke
+search.regexp.mnemonic=g
+search.hypersearch=HyperSuche
+search.hypersearch.mnemonic=h
+search.wrap=Rundum
+search.wrap.mnemonic=m
+
+search.direction=Richtung:
+search.back=Rückwärts
+search.back.mnemonic=w
+search.forward=Vorwärts
+search.forward.mnemonic=v
+
+search.fileset=Suchen in:
+search.selection=Auswahl
+search.selection.mnemonic=u
+search.current=Aktiver Datei
+search.current.mnemonic=k
+search.all=Offenen Dateien
+search.all.mnemonic=d
+search.directory=Verzeichnis:
+search.directory.mnemonic=z
+search.skipHidden=keine versteckten/Backups
+search.skipBinary=keine Binärdateien
+search.skipHidden.mnemonic=p
+search.skipBinary.mnemonic=t
+
+search.directoryField=Verzeichnis:
+search.directoryField.mnemonic=c
+search.filterField=Filter:
+search.filterField.mnemonic=f
+search.subdirs=Unterverzeichnisse durchsuchen
+search.choose=wählen...
+search.choose.mnemonic=n
+search.synchronize=von aktiver Datei
+search.synchronize.mnemonic=o
+
+search.findBtn=Suchen
+#search.findBtn.mnemonic=
+search.replaceBtn=Ersetzen
+#search.replaceBtn.mnemonic=
+search.replaceAndFindBtn=Ersetzen & Suchen
+search.replaceAndFindBtn.mnemonic=r
+search.replaceAllBtn=Alle ersetzen
+search.replaceAllBtn.mnemonic=a
+
+# bis jEdit 4.3pre9
+search.filterField.tooltip={*.c,*.h} für mehrere Extensionen
+# ab jEdit 4.3pre10
+glob.tooltip={*.c,*.h} für mehrere Extensionen
+#}}}
+
+#{{{ Keep searching dialog
+keepsearching.title=Keine weiteren übereinstimmungen gefunden
+keepsearching.message=Es wurden keine weiteren übereinstimmungen gefunden.\n\
+ Suche am {0,choice,0#Beginn|1#Ende} fortsetzen?
+#}}}
+
+#{{{ Search and replace error dialog
+searcherror.title=Fehler bei Suchen und Ersetzen
+# {0} - error message
+searcherror.message=Ein Fehler trat auf bei der Ausführung dieser Operation.
+#}}}
+
+#{{{ Search and replace error dialog
+searcherror-bsh.title=Fehler bei Suchen und Ersetzen
+# {0} - error message
+searcherror-bsh.message=Ein Fehler trat auf bei der Ausführung dieser Operation.\n\
+  \n\
+  Setzen Sie den Ersetzen-Modus auf "Text", wenn der Ersatztext\n\
+  nicht als Beanshell-Ausdruck interpretiert werden soll.
+#}}}
+
+#{{{ Empty fileset error dialog
+empty-fileset.title=Leere Dateiliste
+empty-fileset.message=Die angegebene Liste der zu durchsuchenden Dateien ist leer.\n\
+  Bitte sorgen Sie dafür, dass der Dateifilter und\n\
+  das Verzeichnis korrekt gesetzt sind.
+#}}}
+
+#{{{ Reverse regular expression search not supported dialog
+# obsolete as of jEdit 4.3pre16
+regexp-reverse.title=Nicht unterstützt
+regexp-reverse.message=Nach Regulären Ausdrücken kann nicht rückwärts gesucht werden.\n\
+  Entweder vorwärts suchen oder Reguläre Ausdrücke ausschalten.
+#}}}
+
+#{{{ Can only search local directories dialog
+remote-dir-search.title=Nicht-lokales Verzeichnis gewählt
+remote-dir-search.message=Sie möchten ein nicht lokal existierendes Verzeichnis durchsuchen.\n\
+  Dies kann sehr langsam sein wegen Latenz-Zeiten im Netzwerk usw.\n\
+  Sind Sie sicher, dass Sie fortfahren möchten?
+#}}}
+
+#{{{ "Search in selection" active but nothing selected in text area
+search-no-selection.title=Nichts selektiert
+search-no-selection.message=Bitte wählen Sie einigen Text aus oder deaktivieren Sie\n\
+  zuerst die Option "Suche in Auswahl".
+#}}}
+
+#{{{ Paste previous and paste deleted dialogs
+paste-from-list.whitespace=<Leerraum>
+paste-previous.title=Einfügen voriger ...
+paste-previous.caption=Zuletzt kopierte und eingefügte Texte:
+paste-deleted.title=Einfügen gelöschter ...
+paste-deleted.caption=Zuletzt gelöschte Texte:
+#}}}
+
+#{{{ File changed on disk dialog
+filechanged-save.title=Datei auf Festplatte ist geändert
+filechanged-save.message=Die Datei "{0}"\n\
+  wurde von einem anderen Programm auf der Festplatte geändert.\n\
+  Datei wirklich speichern?
+#}}}
+
+#{{{ File exists dialog
+fileexists.title=Datei existiert
+fileexists.message=Die Datei "{0}" existiert bereits.\n\
+  überschreiben?
+#}}}
+
+#{{{ Select line range dialog
+selectlinerange.title=Zeilenbereich auswählen
+selectlinerange.caption=Zeilenbereich auswählen:
+selectlinerange.start=Startzeile:
+selectlinerange.end=Endzeile:
+#}}}
+
+#{{{ Close all buffers dialog
+close.title=Nicht gespeicherte Änderungen
+close.caption=Die folgenden Dateien enthalten noch nicht gespeicherte Änderungen:
+close.selectAll=Alle wählen
+close.selectAll.mnemonic=a
+close.save=Gewählte speichern
+close.save.mnemonic=s
+close.discard=Gewählte verwerfen
+close.discard.mnemonic=v
+#}}}
+
+#{{{ Files changed on disk dialog
+files-changed.title=Dateien auf Festplatte geändert
+files-changed.caption=Die folgenden Dateien wurden von einem anderen Programm auf der Festplatte geändert:
+files-changed.deleted=Auf der Festplatte gelöscht; Speichern zum Wiederherstellen:
+files-changed.changed-auto=Automatisch neu geladen:
+files-changed.changed=Auf Festplatte geändert:
+files-changed.changed-dirty-auto=Datei im Editor ist auch geändert; nicht neu geladen:
+files-changed.changed-dirty=Datei ist im Editor und auf der Festplatte geändert:
+files-changed.select-all=Alle wählen
+files-changed.select-all.mnemonic=a
+files-changed.reload=Neu laden
+files-changed.reload.mnemonic=l
+files-changed.ignore=Ignorieren
+files-changed.ignore.mnemonic=i
+#}#}}}
+
+#{{{ Abbrev dialogs
+add-abbrev.title=Abkürzung hinzufügen
+add-abbrev.mode=Hinzufügen (abhängig vom Bearbeitungsmodus)
+add-abbrev.global=Hinzufügen global
+
+edit-abbrev.title=Abkürzung bearbeiten
+
+edit-abbrev.duplicate.title=Abkürzung duplizieren
+edit-abbrev.duplicate.message=\
+  Es existiert bereits eine andere Erweiterung mit dieser Abkürzung.\n\
+  \n\
+  Existierende Erweiterung überschreiben?
+
+abbrev-editor.abbrev=Abkürzung:
+abbrev-editor.before=Text, der vor dem Cursor einzufügen ist:
+abbrev-editor.after=Text, der nach dem Cursor einzufügen ist:
+#}}}
+
+#{{{ XMode errors
+xmode-error.title=XML Parse Fehler
+# {2} is the column number, but it's not too useful so we don't show it
+xmode-error.message=Ein Fehler trat auf beim Parsen von "{0}", Zeile {1}:\n\
+  {3}
+
+xmode-error.dtd=Die DTD konnte nicht geladen werden\n({0})
+xmode-error.termchar-invalid=Der Wert des AT_CHAR-Attributes ist ungültig ({0})
+xmode-error.doctype-invalid=Erwartet wurde "MODE" als "document type", gefunden wurde "{0}"
+xmode-error.empty-tag=Das Tag "{0}" darf nicht leer sein
+xmode-error.token-invalid=Der TOKEN-Typ "{0}" ist ungültig
+xmode-error.empty-keyword=Das "keyword"-Tag darf nicht leer sein
+xmode-error.regexp=Ungültiger Regulärer Ausdruck\n({0})
+xmode-error.delegate-invalid=Ungültiges "delegate": "{0}"
+
+# until 4.3pre8
+xmode-error.hash-char-invalid=HASH_CHAR muss genau ein Zeichen sein
+# since 4.3pre9
+xmode-error.hash-char-and-hash-chars-mutually-exclusive=HASH_CHAR und HASH_CHARS sollten nicht gleichzeitig angegeben sein.
+#}}}
+
+#{{{ JARClassLoader errors
+plugin-error.title=Plugin Fehler
+plugin-error.caption=Die folgenden Plugins konnten nicht geladen werden:
+plugin-error.caption-1=Das folgende Plugin konnte nicht geladen werden:
+
+plugin-error.load-error=Laden von "{0}" nicht möglich.\n\
+  Der wahrscheinlichste Grund dafür ist, dass die JAR-Datei defekt ist;\n\
+  Versuchen Sie, diese neu zu installieren. Siehe Extras->Troubleshooting->Activity Log\n\
+  für eine vollständige Verfolgung der Debug-Meldungen.
+plugin-error.start-error=Fehler beim Starten: "{0}".\n\
+  Versuchen Sie ein Update auf eine neuere Version des Plugins.
+plugin-error.already-loaded=Zwei Kopien installiert. Bitte entferne Sie eine der beiden Kopien.
+plugin-error.dep-jdk=Erfordert Java {0} oder höer, aber Sie haben nur Version {1}.
+plugin-error.dep-jedit=Erfordert jEdit {0} oder höer, aber Sie haben nur Version {1}.\n\
+  Laden Sie neue Versionen von jEdit herunter von <http://www.jedit.org>.
+plugin-error.dep-Plugin.no-version=Erfordert Version {0} \
+  oder höer von {1},\n\
+  aber {1} ist nicht installiert.
+plugin-error.dep-Plugin.broken=Erfordert {0}, aber {0}\n\
+  kann´nicht geladen werden.
+plugin-error.dep-Plugin=Erfordert Version {0} oder höer von {1}, \
+  aber Sie haben nur {1} in Version {2}.
+plugin-error.dep-class=Erfordert die Klasse {0}.\n\
+  Versuchen Sie, das erforderliche Plugin bzw. die erforderliche Klassenbibliothek zu installieren.
+plugin-error.missing-jar=Erfordert JAR-Datei "{0}".\n\
+  Diese JAR-Datei ist Bestandteil dieses Plugins, kann aber nicht gefunden werden.\n\
+  Versuchen Sie, dieses Plugin neu zu installieren.
+plugin-error.obsolete=Dieses Plugin ist veraltet. Bitte entfernen Sie es.
+plugin-error.not-42=Dieses Plugin unterstützt kein dynamisches Laden.\n\
+  Sie müssen jEdit neu starten nach Entfernen oder Installieren dieses Plugins.
+
+plugin-error-download.title=Plugin-Fehler
+plugin-error-download.message=Fehler beim Herunterladen des Plugins, bitte einen anderen Update-Server versuchen\n{0}
+#}}}
+
+#{{{ Macro dialogs
+macro-input.title=Makro Eingabe
+macro-error.title=Makro Fehler
+macro-message.title=Makro Nachricht
+macro-confirm.title=Makro Bestätigung
+#}}}
+
+#{{{ BeanShell stuff
+beanshell-error.title=BeanShell-Fehler
+beanshell-error.message=Ein BeanShell-Fehler trat auf.
+
+beanshell-eval-input.title=BeanShell-Ausdruck auswerten
+beanshell-eval-input.message=BeanShell-Ausdruck:\n\
+  \n\
+  Variablen:\n\
+  view     - Die aktive Ansicht (view instance)\n\
+  editPane - Das aktive Editorpanel (edit pane instance)\n\
+  textArea - Der aktive Textbereich (text area instance)\n\
+  buffer   - Die aktive Datei (buffer)
+
+beanshell-eval.title=BeanShell Berechnung
+beanshell-eval.message={0}
+
+beanshell-eval-line.title=BeanShell-Ausdruck auswerten
+beanshell-eval-line.message=BeanShell-Ausdruck, der für jede selektierte Zeile \
+  berechnet werden soll:\n\
+  \n\
+  Variablen:\n\
+  line     - Der Index der Zeile bezüglich Beginn der Datei (= Zeilennummer - 1)\n\
+  index    - Der Index der Zeile bezüglich Beginn der Auswahl\n\
+  text     - Der Text der Zeile\n\
+  view     - Die aktive Ansicht (view instance)\n\
+  editPane - Das aktive Editorpanel (edit pane instance)\n\
+  textArea - Der aktive Textbereich (text area instance)\n\
+  buffer   - Die aktive Datei (buffer)
+#}}}
+
+#{{{ Macro not recording dialog
+macro-not-recording.title=Keine Aufzeichnung
+macro-not-recording.message=Zur Zeit wird kein Makro aufgezeichnet.
+#}}}
+
+#{{{ Large repeat count warning
+large-repeat-count.title=Große Anzahl von Wiederholungen
+large-repeat-count.message=Möchten Sie "{0}" wirklich {1} mal ausführen?
+
+large-repeat-count.user-input.title=Große Anzahl von Wiederholungen
+large-repeat-count.user-input.message=Möchten Sie "{0}" wirklich \
+  {1} mal einfügen?
+#}}}
+
+#{{{ Wrong fold mode dialog
+folding-not-explicit.title=Ungültiger Faltmodus
+folding-not-explicit.message=Dieser Befehl kann nur mit Faltmodus "explizit" verwendet werden.
+#}}}
+
+#{{{ Memory status dialog box
+memory-status.title=Java Heap-Speicher
+memory-status.gc=Die "Garbage collection" hat {0} Kb freigegeben.
+memory-status.use={0} Kb verwendet, {1} Kb total.
+#}}}
+
+#{{{ Multiple I/O request errors
+buffer-multiple-io.title=I/O-Fehler
+buffer-multiple-io.message=Jede Datei kann nur eine Ein-/Ausgabe-Operation gleichzeitig\n\
+  ausführen. Bitte warten Sie, bis die aktive Operation\n\
+  beendet ist (oder brechen Sie diese ab mit dem I/O-Thread-Monitor),\n\
+  bevor die nächste gestartet wird.
+
+browser-multiple-io.title=I/O-Fehler
+browser-multiple-io.message=Jeder Dateisystem-Browser kann nur eine Ein-/Ausgabe-Operation\n\
+  gleichzeitig ausführen. Bitte warten Sie, bis die aktive Operation\n\
+  beendet ist (oder brechen Sie diese ab mit dem I/O-Thread-Monitor),\n\
+  bevor die nächste gestartet wird.
+#}}}
+
+#{{{ maxLineLen=0 warning
+format-maxlinelen.title=Rand für den Wortumbruch
+format-maxlinelen.message=Der Rand für den Wortumbruch muss auf einen Wert größer Null gesetzt\n\
+  werden, damit dieser Befehl funktioniert.
+#}}}
+
+#{{{ Text under caret does not have a syntax style (token type)
+syntax-style-no-token.title=Syntax-Stil Konfiguration
+syntax-style-no-token.message=Dem Text unter dem Cursor ist \
+   kein Syntax-Stil zugeordnet .
+#}}}
+
+#{{{ View title dialog
+view.title.select=Bitte einen Namen für diese Ansicht eingeben: Please enter a title for this view:
+#}}}
+
+#}}}
+
+#{{{ Dockables
+
+#{{{ HyperSearch results dialog
+hypersearch-results.title=HyperSuche Ergebnisse
+
+# bis jEdit 4.2/4.3preX: hypersearch-results.result-caption={0} ({1} Fundstellen in {2} Dateien)
+hypersearch-results.result-caption={0} ({1,choice,1#1 Fundstelle|1<{1,number,integer} Fundstellen in '{2,choice,1#1 Datei|1<{2,number,integer} Dateien}'})
+hypersearch-results.result-caption1={0} ({1} Fundstelle in {2} Datei)
+hypersearch-results.result-caption2={0} ({1} Fundstellen in {2} Datei)
+
+
+hypersearch-results.open=Öffnen
+hypersearch-results.open-view=Öffnen in neuer Ansicht
+hypersearch-results.open-plain-view=Öffnen in neuer, einfacher Ansicht
+hypersearch-results.open-split=Öffnen in neuer Teilansicht
+hypersearch-results.remove-node=Knoten entfernen
+hypersearch-results.new-search=Neue Suche von hier
+hypersearch-results.expand-child-nodes=Untergeordnete Knoten ausklappen
+hypersearch-results.collapse-child-nodes=Untergeordnete Knoten einklappen
+hypersearch-results.copy-to-clipboard=Kopie in Zwischenablage
+hypersearch-results.redo=Hypersuche wiederholen
+hypersearch-results.tree-view=Baumansicht umschalten
+hypersearch-results.clear.label=Alle Knoten entfernen
+hypersearch-results.stop.label=Hypersuche stoppen und bisherige Ergebnisse anzeigen
+hypersearch-results.multi.label=Mehrfachergebnisse umschalten
+hypersearch-results.highlight.label=Hervorhebungsstil für Fundstellen
+
+## bis jEdit 4.2/4.3preX: hypersearch-results.file-caption={0} ({1} Fundstellen in {2} Zeilen)
+hypersearch-results.file-caption={0} ({1,choice,1#1 Fundstelle|1<{1,number,integer} Fundstellen in '{2,choice,1#1 Zeile|1<{2,number,integer} Zeilen}'})
+hypersearch-results.file-caption1={0} (1 Fundstelle)
+hypersearch-results.file-caption2={0} ({1} Fundstellen in 1 Zeile)
+
+hypersearch-results.searching=Suchen nach "{0}"...
+hypersearch-results.no-results=Kein Ergebnis für Suche nach "{0}".
+hypersearch-results.done=Ergebnisse für Suche nach "{0}":
+
+hypersearch-status=Searching
+
+#{{{ HyperSearch too many results
+hypersearch.tooManyResults.label=Zu viele Ergebnisse
+hypersearch.tooManyResults.title=Zu viele Ergebnisse
+hypersearch.tooManyResults.message=Die Suche lieferte {0} \
+  Ergebnisse und ist noch nicht beendet. Soll die Suche gestoppt werden?
+#}}}
+
+#}}}
+
+#{{{ Marker Viewer
+view-markers.label=Lesezeichen $ansehen
+view-markers.title=Lesezeichen
+#}}}
+
+#{{{ View registers
+view-registers.title=Register
+view-registers.caption=Register:
+view-registers.clipboard=$ (Zwischenablage)
+view-registers.selection=% (Auswahl)
+view-registers.none=Keine Register definiert
+view-registers.register=Register:
+view-registers.contents=Inhalt:
+# Label or constant?
+view-registers.undefined=__UNDEFINED__
+#}}}
+
+#}}}
+
+#{{{ Buffer options dialog
+buffer-options.title=Datei-Optionen
+buffer-options.caption=Die Einstellungen dieses Dialoges gelten nur für die aktive Datei.\n\
+  Editorweite Einstellungen werden im Dialog Extras->Globale Optionen getroffen.
+buffer-options.loading-saving=Laden und Speichern
+buffer-options.lineSeparator=Zeilenendezeichen:
+buffer-options.encoding=Zeichenkodierung:
+buffer-options.gzipped=GZIP - Datei auf der Festplatte komprimieren
+buffer-options.editing=Bearbeiten
+buffer-options.mode=Bearbeitungsmodus:
+#}}}
+
+#{{{ Global options dialog
+options.title=Optionen
+options.title-template={0}: {1}
+options.jedit.label=jEdit
+
+#{{{ General pane
+options.general.label=Allgemein
+options.general.lineSeparator=Standard Zeilenendezeichen:
+options.general.encoding=Standard Zeichenkodierung:
+options.general.encodingAutodetect=Automatische Erkennung der Zeichenkodierung einer Datei, wenn möglich
+
+options.general.checkModStatus=Reaktion auf geänderte Dateien:
+options.general.checkModStatus.nothing=deaktivieren
+options.general.checkModStatus.prompt=nachfragen
+options.general.checkModStatus.reload=automatisch neu laden mit Benachrichtigung
+options.general.checkModStatus.silentReload=automatisch neu laden ohne Benachrichtigung
+
+options.general.checkModStatusUpon=Prüfung auf Änderung einer Datei bei:
+options.general.checkModStatusUpon.focus=Wechseln zu jEdit
+options.general.checkModStatusUpon.all=Wechseln zu jEdit, Ansehen der Datei oder Speichern einer Datei
+options.general.checkModStatusUpon.operations=Ansehen der Datei oder Speichern einer Datei
+options.general.checkModStatusUpon.focusBuffer=Ansehen oder Speichern der Datei
+options.general.checkModStatusUpon.none=Speichern der Datei
+
+options.general.recentFiles=Länge der Liste letzter Dateien:
+options.general.hypersearch.maxWarningResults=Maximale Anzahl Suchergebnisse für Hypersuche:
+
+options.general.sortRecent=Liste der letzten Dateien sortieren
+options.general.saveCaret=Cursor-Position merken in zuletzt verwendeten Dateien
+options.general.persistentMarkers=Lesezeichen merken
+options.general.resetUndo=Liste der rückgängig zu machenden Aktionen beim Speichern löschen
+options.general.restore=Beim Starten offene Dateien der letzten Sitzung wieder öffnen
+options.general.restore.remote=... einschließlich entfernter Dateien über VFS
+options.general.restore.cli=... einschließlich der auf der Befehlszeile angegebenen Dateien
+options.general.sortBuffers=Liste offener Dateien sortieren (wirksam nach Neustart von jEdit)
+options.general.sortByName=... Sortierung nach Dateinamen statt nach Verzeichnisnamen.
+options.general.newkeyhandling=Vereinfachte Tastaturbehandlung verwenden
+options.general.newkeyhandling.tooltip=(Experimentell) Einige internationale Linux-Benutzer verwenden diesen Modus, der aber bald nicht mehr verfügbar sein könnte, da die regulärere Tastaturbehandlung besser funktioniert
+options.general.encodingDetectors=Erkennungszeichen für Kodierungen:
+options.general.fallbackEncodings=Liste der Rückfall-Kodierungen:
+options.general.fallbackEncodings.tooltip=(Experimentell) Leerzeichen-getrennte Liste von Zeichenkodierungen, die bei Kodierungsfehlern während des Ladens versucht werden sollen
+
+# jedit 4.2
+options.general.confirmSaveAll=Bestätigung für "Alle Dateien speichern"
+options.general.stripTrailingEOL=Letztes Zeilenendezeichen verstecken (falls vorhanden)
+options.general.twoStageSave=Zweistufiges Speichern (Sicherer, setzt aber Dateieigentümer unter Unix zurück)
+#}}}
+
+#{{{ Abbreviations pane
+options.abbrevs.label=Abkürzungen
+options.abbrevs.set=Gültigkeit:
+options.abbrevs.expandOnInput=Leertaste erweitert Abkürzungen
+options.abbrevs.abbrev=Abkürzung
+options.abbrevs.expand=Erweiterung
+options.abbrevs.add=Hinzufügen...
+options.abbrevs.edit=Bearbeiten...
+options.abbrevs.remove=Entfernen
+#}}}
+
+#{{{ Appearance pane
+options.appearance.label=Erscheinungsbild
+options.appearance.iconTheme=Icon Thema:
+options.appearance.lf.note=Look & Feel-Änderungen werden erst nach einem Neustart von jEdit wirksam.\n.
+options.appearance.lf=Swing Look & Feel:
+options.appearance.primaryFont=Schrift für Schaltflächen, Menüs und Titel:
+options.appearance.secondaryFont=Schrift für Listen und Textfelder:
+options.appearance.helpViewerFont=Schriftart Hilfe-Viewer/Browser:
+options.appearance.history=Max. Anzahl der Einträge von History-Textfeldern:
+options.appearance.menuSpillover=Anzahl der Einträge, ab der ein Menü geteilt wird:
+options.appearance.startup.label=Start-Optionen
+options.appearance.showSplash=Zeige Splash-Screen beim Starten
+options.appearance.showTips=Zeige Tips beim Starten
+options.appearance.experimental.label=Experimentelle Optionen
+options.appearance.experimental.caption=Die folgenden drei Optionen arbeiten u.U. \
+  nicht korrekt mit einigen Versionen von Java.\n\
+  Wenn Sie Probleme feststellen, schalten Sie diese aus\n.
+
+options.appearance.textColors=Farben von jEdits Textbereich in allen Textkomponenten verwenden
+options.appearance.decorateFrames=Fensterränder unter Verwendung von Swing look & feel zeichnen
+options.appearance.decorateDialogs=Ränder von Dialogboxen unter Verwendung von Swing look & feel zeichnen
+options.appearance.continuousLayout.label="Continuous Layout" in geteilten Ansichten verwenden
+#}}}
+
+#{{{ Context Menu pane
+options.context.label=Kontextmenü
+options.context.caption=Einträge im Kontextmenü des Textbereiches:
+options.context.add=Hinzufügen...
+options.context.remove=Entfernen
+options.context.moveUp=Nach Oben
+options.context.moveDown=Nach Unten
+options.context.add.title=Hinzufügen zum Kontextmenü
+options.context.add.caption=Hinzufügen zum Kontextmenü:
+options.context.add.separator=Trennlinie
+options.context.add.action=Befehl oder Makro:
+options.context.includeOptionsLink.label=Include "Dieses Menü anpassen..." link
+
+options.context.reset=Standard wiederherstellen
+options.context.reset.dialog.title=Standardmenü
+options.context.reset.dialog.message=Soll das Kontextmenü wirklich auf die Standardeinträge zurückgesetzt werden?
+#}}}
+
+#{{{ Docking pane
+options.docking.label=Andocken
+options.docking.title=Fenster
+options.docking.dockPosition=Dock-Position
+options.appearance.selectFramework.label=Dockfenster-System:
+options.docking.autoSaveModeLayout.label=Modus-abhängiges Dock-Layout automatisch speichern
+options.docking.autoLoadModeLayout.label=Modus-abhängiges Dock-Layout automatisch laden
+options.docking.selectSet.label=Dock-Fenster Satz:
+#}}}
+
+#{{{ Editing pane
+options.editing.label=Bearbeiten
+options.editing.defaultMode=Standard Bearbeitungsmodus:
+options.editing.undoCount=Anzahl Rückgängig-Aktionen:
+options.editing.caption-0=\
+  Um Modus-abhängige Einstellungen zu treffen, wählen Sie einen Bearbeitungsmodus\n\
+  aus der folgenden Liste.\nIm Augenblick werden globale Standard-Einstellungen gezeigt\n.
+options.editing.caption-1=\
+  Um Modus-abhängige Einstellungen zu treffen,\nmuss "Standard-Einstellungen verwenden"\
+  deaktiviert werden.\nAnderenfalls werden die Einstellungen von <Globale Standards> wirksam.\n.
+options.editing.mode=Einstellungen für Bearbeitungsmodus:
+options.editing.global=<Globale Standards>
+options.editing.useDefaults=Standard-Einstellungen verwenden
+options.editing.filenameGlob="glob"-Muster für Dateiname:
+options.editing.firstlineGlob="glob"-Muster für erste Zeile der Datei:
+options.editing.folding=Faltmodus:
+options.editing.collapseFolds=Falten anfäglich einklappen bis Ebene:
+options.editing.wrap=Wortumbruch-Modus:
+options.editing.maxLineLen=Wortumbruch nach Spalte:
+options.editing.maxLineLen.tooltip="0" für Umbruch am Fensterrand (nur bei Modus "soft")
+options.editing.tabSize=Tabulator Breite:
+options.editing.indentSize=Einrückung Breite:
+options.editing.noWordSep=Zusätzliche Wortzeichen:
+options.editing.camelCasedWords="CamelCased" Worte trennen
+options.editing.noTabs=Soft-Tabs (Leerzeichen statt Tabulatoren einfügen)
+options.editing.deepIndent=Tiefe Einrückung
+#}}}
+
+#{{{ Encodings pane
+options.encodings.label=Zeichenkodierungen
+options.encodings.selectEncodings=Zeichenkodierungen, die in entsprechenden Dialogen zur Auswahl stehen sollen:
+options.encodings.available=Verfügbare Zeichenkodierungen
+options.encodings.selected=Gewählte Zeichenkodierung(en)
+options.encodings.available.tooltip=<html>Zeichenkodierungen in dieser Spalte werden <b>nicht</b> in Zeichenkodierungs-Dialogen gelistet. \
+  Zum Aktivieren in die rechte Spalte ziehen!</html>
+options.encodings.selected.tooltip=Zeichenkodierungen in dieser Spalte werden in Zeichenkodierungs-Dialogen gelistet. \
+  Zum Deaktivieren in die linke Spalte ziehen!
+options.encodings.selectAll=Alle wählen
+options.encodings.selectNone=Keine wählen
+#}}}
+
+#{{{ Gutter pane
+options.gutter.label=Gutter
+options.gutter.enabled=Gutter anzeigen
+options.gutter.lineNumbers=Zeilennummern
+options.gutter.minLineNumberDigits=Für Zeilennummern zu reservierende Mindestanzahl Ziffern:
+options.gutter.selectionAreaEnabled=Zeilenauswahlbereich anzeigen, wenn Zeilennummern nicht angezeigt werden
+options.gutter.optionalComponents=Optionale Gutter-Komponenten
+options.gutter.selectionAreaBgColor=Auswahlbereich Hintergrundfarbe:
+options.gutter.selectionAreaWidth=Auswahlbereich Breite (in Pixel):
+options.gutter.font=Gutter Schrift:
+options.gutter.foreground=Farbe der Zeilennummern:
+options.gutter.background=Hintergrundfarbe:
+options.gutter.borderWidth=Gutter Randbreite:
+options.gutter.numberAlignment=Ausrichtung der Zeilennummern:
+options.gutter.interval-1=Hervorhebung alle\u0020
+options.gutter.interval-2=Zeilen:
+options.gutter.currentLineHighlight=Akive Zeile hervorheben:
+options.gutter.structureHighlight=Strukturbereich anzeigen:
+options.gutter.markerHighlight=Lesezeichen anzeigen:
+options.gutter.foldColor=Faltmarken:
+options.gutter.focusBorderColor=Fokussierter Gutter-Rand:
+options.gutter.noFocusBorderColor=Unfokussierter Gutter-Rand:
+options.gutter.foldStyle.label=Faltenstil:
+options.gutter.foldStyleNames.Triangle=Dreieck
+options.gutter.foldStyleNames.Square=Quadrat
+options.gutter.foldStyleNames.Circle=Kreis
+#}}}
+
+#{{{ Mouse pane
+options.mouse.label=Maus
+options.mouse.dragAndDrop=Drag & Drop im Textbereich
+options.mouse.joinNonWordChars=Ziehen nach Doppelklick erweitert Auswahl über Sonderzeichen
+options.mouse.middleMousePaste=Schnelles Kopieren mit mittlerer Maustaste
+options.mouse.ctrlForRectangularSelection=Spaltenauswahl, solange STRG gedrückt ist
+options.mouse.gutter.foldClick=Klick ins Gutter:
+options.mouse.gutter.SfoldClick=Umschalt-Klick ins Gutter:
+options.mouse.gutter.toggle-fold=Falte ein-/ausklappen
+options.mouse.gutter.toggle-fold-fully=Falte vollstängig ein-/ausklappen
+#}}}
+
+#{{{ Plugin Manager pane
+options.plugin-manager.label=Plugin Manager
+options.plugin-manager.updateMirrors=Liste der Update-Server
+options.plugin-manager.downloadSource=Plugin-Quellkode herunterladen
+options.plugin-manager.deleteDownloads=Archive im Download-Verzeichnis nach der Installation löschen
+options.plugin-manager.mirror=Bevorzugter Update-Server:
+options.plugin-manager.location=Plugins installieren in:
+options.plugin-manager.settings-dir=jEdit Einstellungs-Verzeichnis
+options.plugin-manager.app-dir=jEdit Programm-Verzeichnis
+options.plugin-manager.none=Plugin Central Standard
+#}}}
+
+#{{{ Printing pane
+options.print.label=Drucken
+options.print.font=Schrift:
+options.print.fontstyle=Schriftart:
+options.print.fontsize=Schriftgröße:
+options.print.header=Kopfzeile mit Dateiname
+options.print.footer=Fußzeile mit Datum, Zeit und Seitennummer
+options.print.lineNumbers=Zeilennummern
+options.print.color=Farben drucken
+options.print.tabSize=Tabulator-Breite beim Drucken:
+options.print.workarounds=Bekannte Java-Fehler umgehen
+options.print.glyphVector=Workaround für Druck von Leerzeichen (erhöht Größe der Spooldatei)
+options.print.force13=Altes Druckverfahren anwenden (falls jEdit beim Drucken hängen bleibt)
+options.print.folds=Gefaltete Bereiche drucken
+#}}}
+
+#{{{ Proxy pane
+options.firewall.label=Proxy-Server
+options.firewall.http.enabled=HTTP Proxy-Server verwenden
+options.firewall.http.host=HTTP Proxy Host:
+options.firewall.http.port=HTTP Proxy Port:
+options.firewall.http.user=Benutzername:
+options.firewall.http.password=Passwort:
+options.firewall.http.nonProxy=Direkt verbinden zu:
+options.firewall.socks.enabled=SOCKS Proxy-Server verwenden
+options.firewall.socks.host=SOCKS Proxy Host:
+options.firewall.socks.port=SOCKS Proxy Port:
+#}}}
+
+#{{{ Save & Backup pane
+options.save-back.label=Speichern & Backup
+options.save-back.autosave=Auto-Speichern Intervall (Sekunden):
+options.save-back.backupDirectory=Backup Verzeichnis:
+options.save-back.backupPrefix=Backup-Präfix für Dateiname:
+options.save-back.backupSuffix=Backup-Suffix für Dateiname:
+options.save-back.backups=Max. Anzahl von Backups:
+options.save-back.confirmSaveAll=Bestätigung für "Alle Dateien speichern"
+
+options.save-back.backupEverySave=Backup bei jedem Speichern
+options.save-back.twoStageSave=Zweistufiges Speichern (Sicherer, setzt aber bei einigen Dateisystemenen den Dateieigentümer zurück)
+options.save-back.twoStageSave.tooltip=Stufe 1: Anlegen einer temporären Datei und dahinein sichern. Stufe 2: Umbenennen der temporären Datei zum wirklichen Namen
+options.save-back.autosaveUntitled=Unbenannte Dateien automatisch speichern
+options.save-back.suppressNotSavedConfirmUntitled=Unbenannte Dateien niemals als bearbeitet markieren
+options.save-back.useMD5forDirtyCalculation=Dateien mit unverändertem Inhalt niemals als bearbeitet markieren
+options.save-back.useMD5forDirtyCalculation.tooltip=Länge und MD5-Summe der Datei im Editor und der entsprechenden Datei auf der Festplatte werden dafür verglichen.
+
+# jedit 4.2
+options.auto-back.label=Auto-Speichern & Backup
+options.auto-back.autosave=Auto-Speichern Intervall (Sekunden):
+options.auto-back.backupDirectory=Backup Verzeichnis:
+options.auto-back.backupEverySave=Backup bei jedem Speichern
+options.auto-back.backupPrefix=Backup-Präfix für Dateiname:
+options.auto-back.backupSuffix=Backup-Suffix für Dateiname:
+options.auto-back.backups=Max. Anzahl von Backups:
+#}}}
+
+#{{{ Shortcuts pane
+options.shortcuts.label=Tastenkürzel
+options.shortcuts.select.label=Tastenkürzel bearbeiten:
+options.shortcuts.select.tooltip=Filter für: Eingebaute Befehle, Makros, Plugin-Befehle, Dock-Layouts
+options.shortcuts.name=Befehl
+options.shortcuts.shortcut1=Primäres Tastenkürzel
+options.shortcuts.shortcut2=Alternatives Tastenkürzel
+options.shortcuts.filter.label=Filter:
+options.shortcuts.filter.tooltip=Nur Befehle anzeigen, deren Namen diesen Text enthalten
+options.shortcuts.clear.label=Löschen
+
+grab-key.title=Tastenkombination drücken
+grab-key.caption=Gewünschtes Tastenkürzel für "{0}"  drücken, dann OK wählen.
+grab-key.keyboard-test=Drücken Sie die Tasten, die Probleme bereiten.
+grab-key.assigned-to=Aktuell zugeordnet zu: {0}
+grab-key.assigned-to.none=<nichts>
+grab-key.assigned-to.prefix={0} Präfix
+grab-key.clear=Löschen
+grab-key.remove=aktuelle Zuordnung entfernen
+
+grab-key.remove-ask.title=Tastenkürzel entfernen?
+grab-key.remove-ask.message=\
+  Sie haben kein neues Tastenkürzel festgelegt.\n\
+  Möchten Sie das aktuelle Tastenkürzel entfernen?
+
+grab-key.duplicate-alt-shortcut.title=Doppeltes Tastenkürzel
+grab-key.duplicate-alt-shortcut.message=\
+  Das gewählte Tastenkürzel ist bereits für diesen\n\
+  Befehl vergeben. Bitte wählen Sie ein anderes.
+
+grab-key.duplicate-shortcut.title=Doppeltes Tastenkürzel
+grab-key.duplicate-shortcut.message=\
+  Dieses Tastenkürzel ist bereits zugeordnet zu\n\
+  "{0}".\n\
+  \n\
+  Möchten Sie diese Zuordnung überschreiben?
+
+grab-key.prefix-shortcut.title=Ungültiges Tastenkürzel
+grab-key.prefix-shortcut.message=\
+  Sie können dieses Tastenkürzel nicht verwenden, weil\n\
+  es ein Präfix für andere Tastenkürzel ist.\n\
+  Bitte wählen Sie ein anderes.
+#}}}
+
+#{{{ Status bar pane
+options.status.label=Statuszeile
+options.status.visible=Zeige Statuszeile
+options.status.plainview.visible=Zeige Statuszeile in einfachen Ansichten
+options.status.foreground=Statuszeile Text:
+options.status.background=Statuszeile Hintergrund:
+
+options.status.memory.foreground=Speicherindikator Vordergrund:
+options.status.memory.background=Speicherindikator Hintergrund:
+
+options.status.edit.title=Statuszeilen-Element bearbeiten
+options.status.edit.labelRadioButton=Etikett
+options.status.edit.widgetRadioButton=Widget
+options.status.edit.labelLabel=Text eingeben:
+options.status.edit.widgetLabel=Widget wählen:
+options.status.caret.linenumber=Zeige aktuelle Zeile der Einfügemarke
+options.status.caret.dot=Zeige aktuelle Spalte der Einfügemarke
+options.status.caret.virtual=Zeige aktuelle, virtuelle Spalte der Einfügemarke
+options.status.caret.offset=Zeige Offset der Einfügemarke vom Dateianfang
+options.status.caret.bufferlength=Zeige Dateilänge
+
+#{{{ obsolete as of jedit 4.3pre14
+options.status.show-caret-status=Zeige Cursor-Status
+options.status.show-encoding=Zeige Zeichenkodierung
+options.status.show-edit-mode=Zeige Bearbeitungsmodus
+options.status.show-fold-mode=Zeige Faltmodus
+options.status.show-wrap=Zeige Wortumbruch-Modus
+options.status.show-multi-select=Zeige Mehrfachauswahl-Modus
+options.status.show-rect-select=Zeige Spaltenauswahl-Modus
+options.status.show-overwrite=Zeige Ãœberschreib-Status
+options.status.show-line-seperator=Zeige Zeilenendezeichen
+options.status.show-memory=Zeige Speicherindikator
+options.status.show-clock=Zeige Zeit
+#}}}
+#}}}
+
+#{{{ Syntax Highlighting pane
+options.syntax.label=Syntaxhervorhebung
+options.syntax.object=Token-Typ
+options.syntax.style=Textstil
+options.syntax.foldLine.1=Eingeklappte Falte, Ebene 1
+options.syntax.foldLine.2=Eingeklappte Falte, Ebene 2
+options.syntax.foldLine.3=Eingeklappte Falte, Ebene 3
+options.syntax.foldLine.0=Eingeklappte Falte, Ebene > 3
+#}}}
+
+#{{{ Text Area pane
+options.textarea.label=Textbereich
+options.textarea.font=Textstil:
+options.textarea.fontsubst=Automatisches Ersetzen der Schriftart
+options.textarea.fontsubst.tooltip=Eine passende Schriftart wird automatisch gesucht \
+  wenn die gewählte Schriftart nicht alle Zeichen darstellen kann
+options.textarea.fontsubstlist=Bevorzugte Schriftarten:
+options.textarea.foreground=Text normal:
+options.textarea.background=Hintergrund normal:
+options.textarea.caret=Cursor:
+options.textarea.blinkCaret=blinkend
+options.textarea.blockCaret=Rechteck
+options.textarea.thickCaret=dick
+options.textarea.selection=Einzelauswahl:
+options.textarea.multipleSelection=Mehrfachauswahl:
+options.textarea.selectionFg=Text ausgewählt:
+options.textarea.lineHighlight=Hervorhebung der aktiven Zeile:
+options.textarea.structureHighlight=Hervorhebung passender Elemente:
+options.textarea.eolMarkers=Markierung des Zeilenendes:
+options.textarea.wrapGuide=Umbruch-Markierung:
+options.textarea.electricBorders=Elektrische (auto scroll) Ränder
+options.textarea.stdNextPrevWord=Befehle "Gehe zu ... Wort" übergehen Leerräume
+options.textarea.antiAlias=Text mit Kantenglättung (langsam auf einigen Systemen)
+options.textarea.antiAlias.tooltip=Verlangsamt die Anzeige auf einigen Systemen.
+options.textarea.fracFontMetrics=Teilschriftformen (für bessere Textdarstellung)
+options.textarea.fracFontMetrics.tooltip=Nicht empfohlen mit Subpixel-Kantenglättung
+options.textArea.stripTrailingEOL=Letztes Zeilenendezeichen nicht anzeigen (falls vorhanden)
+options.textArea.completeFromAllBuffers=Quelle für Wort-Vervollständigungsliste: alle offenen Dateien \
+    (Standard: alle sichtbaren Dateien)
+#}}}
+
+#{{{ Tool Bar pane
+options.toolbar.label=Symbolleiste
+options.toolbar.showToolbar=Symbolleiste anzeigen
+options.toolbar.caption=Schaltflächen in der Symbolleiste:
+options.toolbar.add=Hinzufügen...
+options.toolbar.edit=Bearbeiten...
+options.toolbar.remove=Entfernen
+options.toolbar.moveUp=Nach Oben
+options.toolbar.moveDown=Nach Unten
+options.toolbar.edit.title=Symbolleistenelement bearbeiten
+options.toolbar.edit.caption=Typ:
+options.toolbar.edit.separator=Trennlinie
+options.toolbar.edit.action=Befehl oder Makro:
+options.toolbar.edit.builtin=eingebautes Icon:
+options.toolbar.edit.file=Icon laden aus Datei:
+options.toolbar.edit.choose=Wählen
+options.toolbar.edit.no-icon=Kein Icon gewählt
+
+options.toolbar.reset=Standard wiederherstellen
+options.toolbar.reset.dialog.title=Standardmenü
+options.toolbar.reset.dialog.message=Soll die Symbolleiste wirklich auf die Standardeinträge zurückgesetzt werden?
+#}}}
+
+#{{{ View pane
+options.view.label=Ansicht
+options.view.viewLayout=Ansichtslayout
+options.view.alternateDockingLayout=Alternatives Dock-Layout
+options.view.alternateToolBarLayout=Alternatives Symbolleisten-Layout
+options.view.showFullPath=Zeige vollständigen Dateipfad in der Titelleiste
+options.view.showSearchbar=Suchzeile immer anzeigen
+options.view.beepOnSearchAutoWrap=Pieps, wenn Suche automatisch am anderen Dateiende fortsetzt
+options.view.showBufferSwitcher=Zeige Datei-Umschalter (Auswahlliste)
+options.view.bufferSwitcherMaxRowsCount= ... Zeilenanzahl in dieser Liste:
+options.view.sortBuffers=Dateisätze sortieren
+options.view.sortByName=... nach Dateiname (statt nach Pfadname)
+options.view.fullScreenIncludesMenu=Zeige Menüleiste im Vollbildmodus
+options.view.fullScreenIncludesToolbar=Zeige Symbolleiste im Vollbildmodus
+options.view.fullScreenIncludesStatus=Zeige Statuszeile im Vollbildmodus
+
+options.editpane.bufferset.default=Dateisatz-Modus für neue Editorpanele:
+options.bufferset.scope=Dateisatz-Modus:
+
+options.editpane.bufferset.contain=Neue Dateisätze enthalten:
+options.editpane.bufferset.newbufferset.copy=Kopie des aktuellen Dateisatzes
+options.editpane.bufferset.newbufferset.empty=nur eine leere Datei
+options.editpane.bufferset.newbufferset.currentbuffer=nur die aktive Datei
+#}}}
+
+#{{{ File System Browser panes
+options.browser.label=Dateisystem-Browser
+
+options.browser.colors.label=Farben
+options.browser.colors.glob="glob"-Muster für Dateiname
+options.browser.colors.color=Farbe
+options.browser.colors.add=Hinzufügen
+options.browser.colors.remove=Entfernen
+
+options.browser.general.label=Allgemein
+options.browser.general.defaultPath=Standardpfad:
+options.browser.general.defaultPath.favorites=Favoriten
+options.browser.general.defaultPath.home=jEdit-Programmverzeichnis
+options.browser.general.defaultPath.last=Zuletzt verwendetes Verzeichnis
+options.browser.general.defaultPath.buffer=Verzeichnis der aktiven Datei
+options.browser.general.defaultPath.working=Arbeitsverzeichnis des jEdit-Prozesses
+options.browser.general.showMenubar=Menüleiste anzeigen
+options.browser.general.showToolbar=Symbolleiste anzeigen
+options.browser.general.showIcons=Icons anzeigen
+options.browser.general.showHiddenFiles=Versteckte Dateien anzeigen
+options.browser.general.sortIgnoreCase=Groß-/Kleinschreibung beim Sortieren ignorieren
+options.browser.general.sortMixFilesAndDirs=Dateien und Verzeichnisse mischen
+options.browser.general.doubleClickClose=Doppelklick auf den Name einer offenen Datei schließt diese
+options.browser.general.currentBufferFilter=Filter in Dateidialogen ist der Typ der aktiven Datei
+options.browser.general.useDefaultIcons=Standard-Icons verwenden
+#}}}
+
+#{{{ Font selector
+font-selector.title=Schriftauswahl
+font-selector.family=Schriftfamilie:
+font-selector.size=Schriftgröße:
+font-selector.style=Schriftstil:
+font-selector.plain=Normal
+font-selector.bold=Fett
+font-selector.italic=Kursiv
+font-selector.bolditalic=Fett Kursiv
+font-selector.preview=Vorschau
+font-selector.long-text=Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich.
+#font-selector.long-text=The quick brown fox jumps over the lazy dog.
+#}}}
+
+#{{{ Color chooser, used by options.syntaxs
+colorChooser.title=Wählen Sie eine Farbe
+#}}}
+
+#{{{ Style editor, used by options.syntaxs
+style-editor.title=Stil-Editor
+style-editor.tokenType=Token-Typ:
+style-editor.italics=Kursiv
+style-editor.bold=Fett
+style-editor.fgColor=Textfarbe:
+style-editor.bgColor=Hintergrundfarbe:
+#}}}
+
+#}}}
+
+#{{{ Plugin options dialog
+plugin-options.title=Optionen
+options.plugins.label=Plugins
+options.no-Plugins.label=Keine Plugin-Optionen
+#}}}
+
+#{{{ Help viewer
+helpviewer.title=jEdit Hilfe
+helpviewer.loading=Laden...
+helpviewer.back.label=Zurück
+helpviewer.forward.label=Vorwärts
+
+helpviewer.toc.loading=Laden...
+helpviewer.toc.label=Inhalt
+helpviewer.toc.welcome=Willkommen zu jEdit
+helpviewer.toc.readme=Allgemeine Informationen
+helpviewer.toc.changes=Detailliertes Änderungsprotokoll
+helpviewer.toc.todo=ToDo-Liste und bekannte Fehler
+helpviewer.toc.copying=GNU General Public License
+helpviewer.toc.copying-doc=GNU Free Documentation License
+helpviewer.toc.copying-apache=Apache License
+helpviewer.toc.copying-Plugins=Plugin Licensing Amendment
+helpviewer.toc.plugins=Plugins
+helpviewer.toc.online-apidocs=jEdit API-Referenz (Online)
+
+helpviewer.search.label=Suche
+helpviewer.search.caption=Suchen nach:
+helpviewer.searching=Suchen...
+helpviewer.no-results=Keine Ergebnisse
+#}}}
+
+#{{{ Tip of the day window
+tip.title=Tip des Tages
+tip.caption=Wussten Sie schon...
+tip.show-next-time=Tips beim Starten zeigen
+tip.next-tip=Nächster Tip
+tip.not-found=Doc/Tips-Verzeichnis nicht gefunden
+#}}}
+
+#{{{ Activity log
+log-viewer.title=Activity Log
+log-viewer.label=Activity $Log
+log-viewer.caption=Vollständiger Log-Text ist gespeichert in {0}.
+log-viewer.copy=Kopieren
+log-viewer.tail.label=Kürzen
+#}}}
+
+#{{{ Activity log viewer
+log-viewer.dialog.title=Activity Log Einstellungen
+log-viewer.settings.label=Einstellungen
+log-viewer.message.label=Nachrichten-Anzeige:
+log-viewer.message.debug.label=Debug
+log-viewer.message.message.label=Nachricht
+log-viewer.message.notice.label=Notiz
+log-viewer.message.warning.label=Warnung
+log-viewer.message.error.label=Fehler
+#}}}
+
+#{{{ I/O progress monitor
+io-progress-monitor.title=I/O-Threads
+io-progress-monitor.caption={0} anstehende Anforderung(en).
+io-progress-monitor.idle=Thread im Leerlauf
+io-progress-monitor.abort=Abbruch
+
+#{{{ I/O abort dialog box
+abort.title=Abort I/O
+abort.message=Are you sure you want to abort the currently executing\n\
+  input/output request? If you are aborting a file save, this may\n\
+  result in data loss.
+#}}}
+
+#}}}
+
+#{{{ Task  monitor, Killring
+task-monitor.title=Task-Monitor
+taskmanager.remainingtasks.label={0} verbleibende Aufgabe(n)
+
+killring.load-memoryerror.message=Zuvor gelöschter Text kann nicht geladen werden. Bitte HEAP-Speicherplatz erhöhen. \
+  JA drücken, um jEdit weiter zu starten, oder NEIN um abzubrechen und die Einstellungen zu ändern.
+killring.load-memoryerror.title=Speicher-Fehler
+#}}}
+
+#{{{ VFS browser
+vfs.browser.title=Datei-Browser
+vfs.browser.longtitle=Dateisystem-Browser
+vfs.browser.path=Pfad:
+vfs.browser.path.mnemonic=p
+vfs.browser.filter=Filter:
+vfs.browser.default-filter=*[^~#]
+vfs.browser.tree.loading=Laden...
+
+vfs.browser.name=Name
+vfs.browser.type=Typ
+vfs.browser.type.file=Datei
+vfs.browser.type.directory=Verzeichnis
+vfs.browser.type.filesystem=Dateisystem
+vfs.browser.status=Status
+vfs.browser.status.no=Kein Zugriff
+vfs.browser.status.ro=schreibgeschützt
+vfs.browser.status.append=Nur Anhängen
+vfs.browser.status.rw=Lesen/Schreiben
+vfs.browser.size=Größe
+vfs.browser.modified=Letzte Änderung
+
+#{{{ Actions
+vfs.browser.label=Dateisystem-$Browser
+vfs.browser.browse-window.label=Browse im neuen Fenster
+vfs.browser.browse.label=Browse
+vfs.browser.close.label=Schließen
+vfs.browser.copy-path.label=Pfadname kopieren
+vfs.browser.delete.label=Löschen...
+vfs.browser.home.label=User-Home-Verzeichnis
+vfs.browser.properties.label=Eigenschaften
+vfs.browser.properties.title=Datei-/Verzeichnis-Eigenschaften
+vfs.browser.insert.label=Einfügen
+vfs.browser.new-directory.label=Neues Verzeichnis...
+vfs.browser.new-file.label=Neue Datei
+vfs.browser.open.label=Öffnen
+vfs.browser.other-encoding-2.label=Andere ({0})...
+vfs.browser.other-encoding.label=Andere...
+vfs.browser.reload.label=Verzeichnis neu laden
+vfs.browser.rename.label=Umbenennen...
+vfs.browser.roots.label=Laufwerke
+vfs.browser.search-directory.label=Suche in Verzeichnis...
+vfs.browser.show-hidden-files.label=Versteckte Dateien anzeigen
+vfs.browser.synchronize.label=Verzeichnis der aktiven Datei
+vfs.browser.up.label=Verzeichnisebene höher
+vfs.browser.paste.label=Einfügen
+vfs.browser.previous.label=Voriges Verzeichnis
+vfs.browser.next.label=Nächstes Verzeichnis
+#}}}
+
+#{{{ Commands menu
+vfs.browser.commands.label=Befehle
+vfs.browser.commands.encoding.label=Zeichenkodierung
+vfs.browser.commands.encoding.auto-detect=Autom. Erkennung
+
+vfs.browser.open-in.label=Öffnen in
+vfs.browser.open-view.label=Neue Ansicht
+vfs.browser.open-plain-view.label=Neue einfache Ansicht
+vfs.browser.open-split.label=Neue Teilansicht
+#}}}
+
+#{{{ Plugins menu
+vfs.browser.plugins.label=Plugins
+vfs.browser.plugins.plugin-manager.label=Plugin Manager...
+vfs.browser.plugins.plugin-options.label=Plugin-Optionen...
+vfs.browser.plugins.no-Plugins.label=Keine Plugins
+#}}}
+
+#{{{ Favorites menu
+vfs.browser.favorites.label=Favoriten
+vfs.browser.favorites.add-to-favorites.label=Zu Favoriten hinzufügen
+vfs.browser.favorites.edit-favorites.label=Favoriten bearbeiten
+vfs.browser.favorites.no-favorites.label=Keine Favorites
+#}}}
+
+vfs.browser.dialog.open=Öffnen
+vfs.browser.dialog.save=Speichern
+vfs.browser.dialog.choose-dir=Wählen
+vfs.browser.dialog.filename=Dateiname:
+vfs.browser.dialog.filename.mnemonic=n
+
+#{{{ Dialogs
+vfs.browser.bad-filter.title=Ungültiger Filter
+vfs.browser.bad-filter.message=Der Filter {0} ist ungültig ({1})
+
+vfs.browser.recurse-favorites.title=Rekursive Favoriten...
+vfs.browser.recurse-favorites.message=Die Favoritenliste kann nicht zu sich selbst hinzugefügt werden
+
+vfs.browser.delete-confirm.title=Datei löschen
+vfs.browser.delete-confirm.message=Möchten Sie die folgenden Dateien wirklich löschen?\n\n\
+  {0}
+
+vfs.browser.delete-favorites.title=Löschen von Favoriten
+vfs.browser.delete-favorites.message=Möchten Sie die folgenden Dateien wirklich \
+  aus der favoritenliste löschen?\n\n\
+  {0}
+
+vfs.browser.rename.title=Datei umbenennen
+vfs.browser.rename.message=Neuer Name für {0}:
+
+vfs.browser.mkdir.title=Neues Verzeichnis anlegen
+vfs.browser.mkdir.message=Name (oder Pfad) des neuen Verzeichnisses:
+#}}}
+
+#}}}
+
+#{{{ I/O status messages
+vfs.status.load=Laden von {0}
+vfs.status.load-markers=Lesezeichen laden für {0}
+vfs.status.save=Speichern von {0}
+vfs.status.save-markers=Lesezeichen speichern für {0}
+vfs.status.autosave=Autom. Speichern von {0}
+vfs.status.listing-directory=Listen von {0}
+vfs.status.deleting=Löschen von {0}
+vfs.status.renaming=Umbenennen von {0} nach {1}
+#}}}
+
+#{{{ Plugin manager
+
+plugin-manager.title=Plugin Manager
+
+plugin-manager.export-url=http://plugins.jedit.org/export/gzip_plugin_manager.php
+plugin-manager.mirror-url=http://plugins.jedit.org/export/mirror_list.php
+
+plugin-manager.hide-libraries=Bibliotheken verstecken
+
+plugin-manager.mgr-options=Download-Optionen...
+plugin-manager.plugin-options=Plugin-Optionen...
+plugin-manager.done=Schließen
+
+plugin-manager.remove-confirm.title=Plugins entfernen
+plugin-manager.remove-confirm.message=Möchten Sie wirklich die folgenden Plugins entfernen?
+
+plugin-manager.dependency.title=Plugin-Abhängigkeiten
+plugin-manager.dependency.message={0} wird benötigt von weiteren Plugins.\n\
+  Deaktivieren von {0} wird auch die folgenden Plugins deaktivieren:
+
+plugin-manager.remove-dependencies.title=Plugin-Abhängigkeiten
+plugin-manager.remove-dependencies.message=Die zu löschenden Plugins werden von folgenden\n\
+  Plugins benötigt, die dann deaktiviert werden:
+
+plugin-manager.cleanup.label=Bereinigen
+plugin-manager.cleanup.title=Plugin-Daten bereinigen
+plugin-manager.cleanup.message=Daten der folgenden Plugins entfernen:
+
+plugin-manager.noOrphan.label=Find orphan
+plugin-manager.noOrphan.title=No orphan jars found
+plugin-manager.noOrphan.message=There was no orphan jars in your jEdit installation
+
+plugin-manager.findOrphan.label=Suche Waisen
+plugin-manager.findOrphan.title=Verwaiste jar-Dateien suchen
+plugin-manager.findOrphan.message=Die folgenden jars gehören scheinbar zu keinem Plugin\n\
+  Entfernen?\n (VORSICHT: Sie könnten dennoch notwendig sein für ein \n\
+  Plugin wie z.B. JDBC-Treiber):
+
+
+install-Plugins.depend.title=Plugin-Abhängigkeiten
+install-Plugins.depend.message=Mindestens eines der zu installierenden Plugins\n\
+  erfordert zusätzliche Plugins. Diese werden automatisch\n\
+  installiert, wenn Sie fortfahren.
+
+plugin-manager.status.loaded=Geladen
+plugin-manager.status.not-loaded=Nicht geladen
+plugin-manager.status.error=Fehler
+
+plugin-manager.list-download-connect=Verbinde mit plugins.jedit.org
+plugin-manager.list-download=Plugin-Liste wird heruntergeladen von Plugins.jedit.org
+plugin-manager.filterField=Nur Plugins anzeigen, deren Namen diesen Text enthalten
+
+#{{{ Error while loading Plugin list
+# obsolete as of jEdit 4.4.1
+plugin-list.ioerror.title=I/O-Fehler
+plugin-list.ioerror.message=Plugin-Liste kann nicht heruntergeladen werden.\n\
+  ({0})\n\
+  \n\
+  Wenn Ihr Rechner hinter einem HTTP- oder SOCKS-Proxy steht,\n\
+  klicken Sie "Proxy-Server", um den Proxy zu konfigurieren\n\
+  und versuchen Sie es noch einmal.
+plugin-list.ioerror.proxy-servers=Proxy-Server...
+
+plugin-list.xmlerror.title=XML-Parser-Fehler
+plugin-list.xmlerror.message=Ein Fehler trat auf beim Parsen von {0}, in Zeile {1}:\n\
+  {2}
+#}}}
+
+#{{{ Plugin management
+manage-Plugins.title=Verwalten
+
+manage-Plugins.info.name=Name
+manage-Plugins.info.version=Version
+manage-Plugins.info.status=Status
+manage-plugins.info.data=Daten
+
+manage-plugins.data-size.unknown=<unbekannt>
+
+
+manage-plugins.remove=Entfernen...
+manage-plugins.help=Hilfe...
+#}}}
+
+#{{{ Plugin installation
+install-Plugins.title=Installation
+
+install-Plugins.info.name=Name
+install-Plugins.info.size=Größe
+install-plugins.info.releaseDate=Release-Datum
+install-Plugins.info.version=Version
+install-Plugins.info.category=Kategorie
+
+install-Plugins.totalSize=Gesamtgröße:\u0020
+install-Plugins.select-all=Alle wählen
+install-Plugins.install=Installieren
+install-Plugins.show-updates=Updates zeigen
+
+install-Plugins.info=<b>Autor</b>: {0}\n\
+  <b>Fertiggestellt</b>: {1}\n\
+  {2}
+
+update-Plugins.title=Update
+
+plugin-manager.progress=Gewählte Plugins werden heruntergeladen von Plugins.jedit.org...
+plugin-manager.progress.stop=Stop
+#}}}
+
+#{{{ Plugin remove error
+plugin-manager.remove-failed.title=Entfernen fehlgeschlagen
+plugin-manager.remove-failed.message=Das Plugin {0}\n\
+  konnte nicht entfernt werden.
+#}}}
+
+#}}}
+
+#{{{ File Properties Dialog
+fileprop.name=Name
+fileprop.path=Pfad
+fileprop.lastmod=Letze Änderung
+fileprop.size=Größe
+fileprop.properties=Eigenschaften
+fileprop.readable=Lesen
+fileprop.writeable=Schreiben
+fileprop.attribute=Attribut
+fileprop.okBtn=OK
+fileprop.cancelBtn=Abbruch
+fileprop.selectedFiles=Gewählte Dateien
+fileprop.selectedDirectories=Gewählte Verzeichnisse
+#}}}
+
+#{{{ gnu.regexp
+# (obsolete since replaced with java native regexp???)
+# Prefix for REException messages
+error.prefix=An Position {0} im Regulären Ausdruck:
+
+# REException (parse error) messages
+repeat.assertion=Wiederholungsangabe ohne vorangehenden Bezeichner
+repeat.chained=Mehrfache Wiederholungsangabe für einen Bezeichner
+repeat.no.token=Quantifizierer (?*+{}) ohne vorangehenden Bezeichner
+repeat.empty.token=Bezeichner mit Wiederholungsangabe ist vielleicht leer
+unmatched.brace=Unvollständiges Paar geschweifter Klammern
+unmatched.bracket=Unvollständiges Paar eckiger Klammern
+unmatched.paren=Unvollständiges Paar runder Klammern
+interval.no.end=Ende des Intervalles erwartet
+class.no.end=Ende der Zeichenklasse erwartet
+subexpr.no.end=Ende des Subausdrucks erwartet
+interval.order=Intervall Minimum ist größer als Maximum
+interval.error=Intervall ist leer oder enthält ungültige Zeichen
+ends.with.backslash=Backslash am Ende des Musters
+
+# RESyntax message
+syntax.final=Die Syntax wurde für endgültig erklärt und kann nicht geändert werden.
+#}}}
+
+#}}}
+
+#{{{ Macros
+
+#{{{ Properties used by macros
+
+#{{{ common
+macro.rs.general.ErrorNotEditableDialog.title=schreibgeschützt
+macro.rs.general.ErrorNotEditableDialog.message=Datei kann nicht bearbeitet werden!
+#}}}
+
+#{{{ Line_Filter
+macro.rs.LineFilter.MainDialog.title=Zeilenfilter
+macro.rs.LineFilter.ignoreCaseCheckBox.label=Groß-/Kleinschreibung ignorieren
+macro.rs.LineFilter.regexpPanelBorder.title=Vergleichsmuster (Regulärer Ausdruck)
+macro.rs.LineFilter.processModeRadioButtonMatching.label=passend
+macro.rs.LineFilter.processModeRadioButtonNotMatching.label=nicht passend
+macro.rs.LineFilter.processModeOptionPanelBorder.title=Zeilen
+macro.rs.LineFilter.actionModeRadioButtonWrite.label=Schreiben in neue Datei
+macro.rs.LineFilter.actionModeRadioButtonDelete.label=Löschen
+macro.rs.LineFilter.actionModeOptionPanelBorder.title=Aktion
+
+macro.rs.LineFilter.DeleteActionDisabled.message=Löschen ist nicht verfügbar
+macro.rs.LineFilter.MultipleSelection.message=Mehrfachauswahl wird nicht unterstützt
+macro.rs.LineFilter.BlockSelection.message=Spaltenauswahl wird nicht unterstützt
+
+macro.rs.LineFilter.SummaryDeleted.label=Zeile(n) gelöscht!
+macro.rs.LineFilter.SummaryWritten.label=Zeile(n) in neue Datei geschrieben
+
+macro.rs.LineFilter.ErrorRegexpDialog.title=Ungültiger Regulärer Ausdruck
+macro.rs.LineFilter.ErrorRegexpDialog.message=Der Reguläre Ausdruck ist ungültig!
+
+# obsolete as of version 1.3
+macro.rs.LineFilter.ErrorNotEditableDialog.title=schreibgeschützt
+macro.rs.LineFilter.ErrorNotEditableDialog.message=Datei kann nicht bearbeitet werden!
+macro.rs.LineFilter.processModeRadioButton1.label=passend
+macro.rs.LineFilter.processModeRadioButton2.label=nicht passend
+macro.rs.LineFilter.actionModeRadioButton1.label=Schreiben in neue Datei
+macro.rs.LineFilter.actionModeRadioButton2.label=Löschen
+#}}}
+
+#}}}
+
+#{{{ Macro Names for Macros Menu (only original macros in original folders!)
+
+#{{{ C
+C/Include_Guard.label=Include Wächter
+C/Toggle_Header_Source.label=Wechseln zwischen Quelle und Header
+#}}}
+
+#{{{ Clipboard
+Clipboard/Copy_Lines.label=Kopiere Zeilen
+Clipboard/Copy_Lines_Containing.label=Kopiere Zeilen (Filter nach Inhalt)
+Clipboard/Copy_Visible_Lines.label=Kopiere sichtbare Zeilen
+Clipboard/Cut_Lines.label=Schneide Zeilen aus
+Clipboard/Cut_Lines_Containing.label=Schneide Zeilen aus (Filter nach Inhalt)
+Clipboard/Paste_Indent.label=Einfügen mit Einrückung
+#}}}
+
+#{{{ Editing
+Editing/Duplicate_Lines_Above.label=Dupliziere Zeilen nach oben
+Editing/Duplicate_Lines_Below.label=Dupliziere Zeilen nach unten
+Editing/Emacs_Ctrl-K.label=Emacs Ctrl-K
+Editing/Emacs_Next_Line.label=Emacs Nächste Zeile
+Editing/Emacs_Previous_Line.label=Emacs Vorige Zeile
+Editing/Go_to_Column.label=Gehe zu Spalte
+Editing/Greedy_Backspace.label=Gefräßig Löschen nach links
+Editing/Greedy_Delete.label=Gefräßig Löschen
+Editing/Greedy_Left.label=Gefräßig nach Links
+Editing/Greedy_Right.label=Gefräßig nach Rechts
+Editing/Keywords_to_Upper_Case.label=Keywords zu Großbuchstaben
+Editing/Mode_Switcher.label=Bearbeitungsmodus umschalten
+Editing/Move_Lines_Down.label=Verschiebe Zeilen nach unten
+Editing/Move_Lines_Up.label=Verschiebe Zeilen nach oben
+Editing/Open_Line_Above.label=Leerzeile einfügen oben
+Editing/Open_Line_Below.label=Leerzeile einfügen unten
+Editing/Toggle_Fold.label=Falte ein-/ausklappen
+#}}}
+
+#{{{ Files
+Files/Browse_Buffer_Directory.label=Dateisystem-Browser im Verzeichnis der aktiven Datei
+Files/Browse_Directory.label=Dateisystem-Browser mit Verzeichnisabfrage
+Files/Buffer_Switcher.label=Datei wechseln
+Files/Close_All_Except_Active.label=Schließe alle anderen
+Files/Copy_Name_to_Clipboard.label=Kopiere Dateiname
+Files/Copy_Path_to_Clipboard.label=Kopiere Dateipfad
+Files/Delete_Current.label=Lösche aktive Datei
+Files/Duplicate_Buffer.label=Dupliziere aktive Datei
+Files/Glob_Close.label=Schließen per Glob-Maske
+Files/Insert_Selection.label=Füge Datei ein (Name in Auswahl)
+Files/Next_Dirty_Buffer.label=Nächste nicht gespeicherte Datei
+Files/Open_Path.label=Öffne Datei (Name eingeben)
+Files/Open_Selection.label=Öffne Datei (Name in Auswahl)
+Files/Send_Buffer_To_Next_Split.label=Datei in den nächsten Dateisatz
+Files/Toggle_ReadOnly.label=Schreibschutz umschalten
+#}}}
+
+#{{{ Interface
+Interface/Decrease_Font_Size.label=Schriftgröße verkleinern
+Interface/Increase_Font_Size.label=Schriftgröße vergrößern
+Interface/Open_Context_Menu.label=Kontextmenü öffnen
+Interface/Reset_TextArea.label=Textbereich zurüksetzen
+Interface/Splitpane_Grow.label=Teilansicht vergrößern
+Interface/Toggle_Bottom_Docking_Area.label=Toggle unteren Dockbereich
+Interface/Toggle_Left_Docking_Area.label=Toggle linken Dockbereich
+Interface/Toggle_Right_Docking_Area.label=Toggle rechten Dockbereich
+Interface/Toggle_Top_Docking_Area.label=Toggle oberen Dockbereich
+#}}}
+
+#{{{ Java
+Java/Create_Constructor.label=Konstruktor erzeugen
+Java/Get_Class_Name.label=Klassenname bestimmen
+Java/Get_Package_Name.label=Paketname bestimmen
+Java/Java_File_Save.label=Java Datei speichern
+Java/Make_Get_and_Set_Methods.label=Get und Set Methoden erzeugen
+Java/Preview_JavaDoc_Of_Current_Buffer.label=JavaDoc-Vorschau der aktiven Datei
+#}}}
+
+#{{{ Misc
+Misc/Debug_BufferSets.label=Debug BufferSets
+Misc/Display_Abbreviations.label=Liste der Abkürzungen
+Misc/Display_Actions.label=Liste der Aktionen
+Misc/Display_Character_Code.label=Zeige Zeichenkodes (Zeichen am Cursor)
+Misc/Display_Shortcuts.label=Liste der Tastenkürzel
+Misc/Evaluate_Buffer_in_BeanShell.label=Datei in BeanShell ausführen
+Misc/Hex_Convert.label=Hex-Konvertierungen
+Misc/HyperSearch_Results_to_Buffer.label=Hypersuche-Ergebnisse - Zeilen-Export in neue Datei
+Misc/Buffer_to_HyperSearch_Results.label=Hypersuche-Ergebnisse - Zeilen-Import aus aktiver Datei
+Misc/Make_Bug_Report.label=jEdit-Info für Bug-Report
+Misc/Run_Script.label=Starte als Skript
+Misc/Show_Threads.label=Liste der Threads
+#}}}
+
+#{{{ Properties
+Properties/Create_Plugin_Announcement.label=Plugin-Bekanntgabe erzeugen
+Properties/Insert_Buffer_Properties.label=jEdit-Dateieigenschaften einfügen
+Properties/Look_and_Feel_Properties.label=Liste der Look and Feel Eigenschaften
+Properties/System_Properties.label=Liste der System Eigenschaften
+Properties/jEdit_Properties.label=Liste der jEdit Eigenschaften
+#}}}
+
+#{{{ Text
+Text/Add_Prefix_and_Suffix.label=Präfix und Suffix einfügen
+Text/Color_Picker.label=Farbwert wählen
+Text/Compose_Tag.label=XML-Tag zusammenstellen (Auswahl)
+Text/Duplicate_Line.label=Zeile duplizieren
+Text/Insert_Date.label=Datum und Internet-Zeit einfügen
+Text/Insert_Tag.label=XML-Tag einfügen
+Text/Line_Filter.label=Zeilenfilter
+Text/Next_Char.label=Auswahl bis Zeichen (eingeben)
+Text/Reverse_Lines.label=Zeilenreihenfolge umkehren
+Text/Single_Space_Buffer.label=Zeilenabstand doppelt => einfach
+#}}}
+
+#}}}
+
+#}}}
diff --git a/org/jedit/localization/jedit_en.props b/org/jedit/localization/jedit_en.props
new file mode 100644
index 0000000..a4ff268
--- /dev/null
+++ b/org/jedit/localization/jedit_en.props
@@ -0,0 +1,2535 @@
+###
+### jEdit user interface definitions,
+### :tabSize=8:indentSize=8:noTabs=false:
+### :folding=explicit:collapseFolds=1:
+### :encoding=UTF-8:
+###
+### Copyright (C) 1998, 2005 Slava Pestov
+###
+
+#{{{ jEdit core (jedit_gui.props)
+
+#{{{ Default user catalog file
+defaultCatalog=<?xml version="1.0"?>\n\
+	<!DOCTYPE MODES SYSTEM "catalog.dtd">\n\
+	\n\
+	<MODES>\n\
+	\n\
+	<!-- Add lines like the following, one for each edit mode you add: -->\n\
+	<!-- <MODE NAME="foo" FILE="foo.xml" FILE_NAME_GLOB="*.foo" /> -->\n\
+	\n\
+	</MODES>
+#}}}
+
+#{{{ Common strings
+common.ok=OK
+common.cancel=Cancel
+common.close=Close
+common.error=Error
+common.apply=Apply
+common.more=More
+common.insert=Insert
+common.add=Add
+common.remove=Remove
+common.moveUp=Move Up
+common.moveDown=Move Down
+common.clearAll=Clear All
+common.selectAll=Select All
+common.selectNone=Select None
+
+lineSep.unix=Unix (\\n)
+lineSep.windows=DOS/Windows (\\r\\n)
+lineSep.mac=MacOS (\\r)
+#}}}
+
+#{{{ Miscellaneous
+history.caption=Previously entered strings:
+
+action-set.jEdit=Built-in Commands
+action-set.browser=File System Browser
+action-set.macros=Macros
+action-set.plugin=Plugin: {0}
+
+macro-handler.beanshell.label=BeanShell script
+macro-handler.beanshell.glob=*.bsh
+
+save-layout-failed.message=Failed to save the docking layout.
+load-layout.title=Load Docking Layout
+load-layout.message=Docking layout to load:
+save-layout.title=Save Docking Layout
+save-layout.message=Docking layout to save:
+#}}}
+
+#{{{ Tool bar
+view.search.find=Search for:
+view.search.close-tooltip=Hide search bar (ESCAPE)
+
+view.action.prompt=Action:
+view.action.no-completions=No matching actions found
+view.action.close-tooltip=Hide action bar (ESCAPE)
+#}}}
+
+#{{{ Context menu
+view.context.customize=Customize This Menu...
+#}}}
+
+#{{{ System tray menu
+tray.newView.label=New view
+tray.newPlainView.label=New plain view
+tray.exit.label=Exit
+#}}}
+
+#{{{ Menu bar
+
+#{{{ File menu
+file.label=$File
+new-file.label=$New
+new-file-in-mode.label=New in $Mode
+new-file-in-mode.dialog.title=New File
+new-file-in-mode.dialog.message=With Edit Mode:
+open-file.label=$Open...
+reload.label=$Reload
+reload-all.label=Reloa$d All
+close-buffer.label=$Close
+close-buffer.tooltip=Close buffer in EditPane's BufferSet only
+global-close-buffer.label=Close (global)
+global-close-buffer.tooltip=Close buffer in all Views
+closeall-except-active.tooltip=Close others in EditPane's BufferSet
+closeall-except-active.label=Close O$thers
+closeall-bufferset.label=Clos$e All
+closeall-bufferset.tooltip=Clear Editpane's BufferSet
+bufferset-toggle-exclusive.label=Toggle E$xclusive BufferSets
+bufferset-toggle-exclusive.tooltip=When a buffer is opened, close it in other non-intersecting buffersets
+close-all.label=Close All (global)
+close-all.tooltip=Close all buffers in all Views
+save.label=$Save
+save-as.label=S$ave As...
+save-a-copy-as.label=Save a Cop$y As...
+save-a-copy-as.tooltip=Does not change the current buffer's path
+save-all.label=Save A$ll...
+print.label=$Print...
+page-setup.label=Pa$ge Setup...
+# Print selection not yet implemented
+#print-selection.label=Prin$t Selection...
+exit.label=E$xit
+
+#{{{ Recent Files menu
+recent-files.label=Recent $Files
+recent-files.textfield.tooltip=a filter prefix or glob-pattern can be entered here
+no-recent-files.label=No Recent Files
+clear-recent-files.label=Clear Recent Files
+#}}}
+
+reload-encoding.label=Reload with $Encoding
+reload-encoding.error={0} is not a valid encoding
+
+#}}}
+
+#{{{ Edit menu
+
+edit.label=$Edit
+undo.label=$Undo
+redo.label=$Redo
+cut.label=$Cut
+copy.label=C$opy
+paste.label=$Paste
+select-all.label=Select $All
+word-count.label=$Word Count...
+complete-word.label=Co$mplete Word
+expand-abbrev.label=E$xpand Abbreviation
+goto-line.label=$Go to Line...
+
+#{{{ More Clipboard menu
+clipboard.label=More Clip$board
+cut-append.label=$Cut Append
+copy-append.label=C$opy Append
+vertical-paste.label=$Vertical Paste
+paste-previous.label=Paste Previo$us...
+paste-deleted.label=Paste $Deleted...
+paste-special.label=Paste Special...
+cut-string-register.label=Cu$t to Register
+copy-string-register.label=Co$py to Register
+paste-string-register.label=Paste $Register
+clear-string-register.label=Clear Register
+cut-append-string-register.label=Cut Appe$nd to Register
+copy-append-string-register.label=Copy $Append to Register
+vertical-paste-string-register.label=V$ertical Paste Register
+view-registers.label=Vie$w Registers
+#}}}
+
+#{{{ More Selection menu
+selection.label=More $Selection
+select-none.label=Select $None
+select-word.label=Select $Word
+select-line.label=Select $Line
+select-paragraph.label=Select $Paragraph
+invert-selection.label=$Invert Selection
+toggle-multi-select.label=$Multiple Selection
+toggle-rect-select.label=$Rectangular Selection
+select-line-range.label=Sele$ct Line Range...
+#}}}
+
+#{{{ Text menu
+text.label=$Text
+delete-line.label=$Delete Lines
+delete-start-line.label=Delete to $Start of Line
+delete-end-line.label=Delete to $End of Line
+join-lines.label=$Join Lines
+delete-paragraph.label=Delete $Paragraph
+format-paragraph.label=$Format Paragraph
+to-lower.label=To $Lower Case
+to-upper.label=To $Upper Case
+#}}}
+
+#{{{ Indent menu
+indent.label=$Indent
+indent-lines.label=$Indent Lines
+shift-left.label=Shift Indent $Left
+shift-right.label=Shift Indent $Right
+remove-trailing-ws.label=Remove Trailing $Whitespace
+spaces-to-tabs.label=$Spaces to Tabs
+tabs-to-spaces.label=$Tabs to Spaces
+#}}}
+
+#{{{ Source menu
+source.label=Sourc$e
+range-comment.label=$Range Comment
+line-comment.label=$Line Comment
+select-block.label=$Select Code Block
+match-bracket.label=Go to $Matching Bracket
+prev-bracket.label=Go to $Previous Bracket
+next-bracket.label=Go to $Next Bracket
+#}}}
+
+#}}}
+
+#{{{ Search menu
+search.label=$Search
+find.label=$Find...
+find-next.label=Fi$nd Next
+find-prev.label=Find Pre$vious
+search-in-open-buffers.label=Search in Open $Buffers...
+search-in-directory.label=Search in $Directory...
+replace-in-selection.label=$Replace in Selection
+replace-and-find-next.label=Re$place and Find Next
+replace-all.label=Replace $All
+quick-search.label=$Incremental Search Bar
+hypersearch.label=$HyperSearch Bar
+quick-search-word.label=I$ncremental Search for Word
+hypersearch-word.label=H$yperSearch for Word
+whole-word.label=$Whole Word
+ignore-case.label=Ignore $Case
+regexp.label=Regular E$xpressions
+hypersearch-results.label=HyperSearch Results
+#}}}
+
+#{{{ Markers menu
+markers.label=$Markers
+add-marker.label=$Add/Remove Marker
+add-marker-shortcut.label=Add Marker $With Shortcut
+remove-all-markers.label=Re$move All Markers
+goto-marker.label=$Go to Marker
+select-marker.label=$Select to Marker
+swap-marker.label=Swa$p Caret and Marker
+prev-marker.label=Go to $Previous Marker
+next-marker.label=Go to $Next Marker
+no-markers.label=No Markers
+markers.blank-line=[Blank line]
+#}}}
+
+#{{{ Folding menu
+folds.label=F$olding
+collapse-fold.label=$Collapse Fold
+expand-one-level.label=$Expand Fold One Level
+expand-fold.label=Expand $Fold Fully
+collapse-all-folds.label=Collapse $All Folds
+expand-folds.label=Expand Fo$lds With Level
+expand-all-folds.label=E$xpand All Folds
+select-fold.label=$Select Fold
+add-explicit-fold.label=A$dd Explicit Fold
+narrow-to-fold.label=Na$rrow to Fold
+narrow-to-selection.label=Narro$w to Selection
+parent-fold.label=$Go to Parent Fold
+prev-fold.label=Go to $Previous Fold
+next-fold.label=Go to $Next Fold
+#}}}
+
+#{{{ View menu
+view.label=$View
+new-view.label=New $View
+new-view.tooltip=New main window with dockables
+new-plain-view.label=Ne$w Plain View
+new-plain-view.tooltip=New main window with fewer toolbars and no dockables
+close-view.label=$Close View
+close-view.tooltip=Closes main window, and exits jEdit if this is the only View
+prev-buffer.label=Go to $Previous Buffer
+next-buffer.label=Go to $Next Buffer
+recent-buffer.label=Go to $Recent Buffer
+toggle-buffer-switcher.label=Toggle $Buffer Switcher
+focus-buffer-switcher.label=Focus on Buffer S$witcher
+toggle-line-numbers.label=Toggle $Line Numbers
+toggle-statusbar.label=Toggle S$tatus Bar
+toggle-gutter.label=Toggle $Gutter
+show-context-menu.label=Show Context Menu
+set-view-title.label=Set view title...
+set-view-title.tooltip=Set the title of the main window for easy identification from your desktop.
+toggle-full-screen.label=Toggle $full-screen mode
+
+#{{{ Scrolling menu
+scrolling.label=Scrollin$g
+scroll-to-current-line.label=Scroll $to Current Line
+scroll-and-center.label=$Scroll and Center Caret
+center-caret.label=$Center Caret on Screen
+scroll-up-line.label=Line Scroll $Up
+scroll-down-line.label=Line Scroll $Down
+scroll-up-page.label=Page Scroll U$p
+scroll-down-page.label=Page Scroll D$own
+#}}}
+
+#{{{ Splitting menu
+splitting.label=$Splitting
+split-horizontal.label=Split $Horizontally
+split-vertical.label=Split $Vertically
+unsplit-current.label=$Unsplit Current
+unsplit.label=Unsplit $All
+resplit.label=$Restore Split
+prev-textarea.label=Go to $Previous Text Area
+next-textarea.label=Go to $Next Text Area
+buffersets.label=$Buffer Sets
+global-bufferset.label=$Global Scope BufferSets
+global-bufferset.tooltip=All EditPanes share the same BufferSet.
+view-bufferset.label=$View Scope BufferSets
+view-bufferset.tooltip=EditPanes in the same View share the same BufferSet.
+editpane-bufferset.label=$EditPane Scope BufferSets
+editpane-bufferset.tooltip=Each Editpane has its own BufferSet.
+#}}}
+
+#{{{ Docking menu
+docking.label=$Docking
+docking.menu.label=Dockable Menu
+toggle-dock-areas.label=Toggle Docked $Areas
+left-docking-area.label=Go to $Left Docking Area
+top-docking-area.label=Go to $Top Docking Area
+right-docking-area.label=Go to $Right Docking Area
+bottom-docking-area.label=Go to $Bottom Docking Area
+focus-textarea.label=Go to Text Area
+close-docking-area.label=$Close Current Docking Area
+layout-load.label=$Load docking layout ...
+layout-save.label=$Save docking layout ...
+layout-load-current-mode.label=Load docking layout of current mode
+layout-save-current-mode.label=Save docking layout of current mode
+#}}}
+
+#}}}
+
+#{{{ Utilities menu
+
+utils.label=$Utilities
+vfs.browser.label=$File System Browser
+action-bar.label=$Action Bar
+last-action.label=Re$peat Last Action
+buffer-options.label=$Buffer Options...
+global-options.label=$Global Options...
+combined-options.label=$Options...
+
+#{{{ Recent Directories menu
+recent-directories.label=$Recent Directories
+no-recent-dirs.label=No Recent Directories
+#}}}
+
+#{{{ Favorites menu
+favorites.label=Fa$vorites
+add-buffer-to-favorites.label=Add Buffer to Favorites
+add-dir-to-favorites.label=Add Directory to Favorites
+edit-favorites.label=Edit Favorites
+#}}}
+
+#{{{ Current Directory menu
+current-directory.label=$Current Directory
+#}}}
+
+#{{{ jEdit Home Directory menu
+jedit-directory.label=$jEdit Home Directory
+#}}}
+
+#{{{ Settings Directory menu
+settings-directory.label=$Settings Directory
+#}}}
+
+#{{{ BeanShell menu
+beanshell.label=B$eanShell
+eval.label=$Evaluate BeanShell Expression...
+eval-for-selected-lines.label=Evaluate $For Selected Lines...
+eval-selection.label=Evaluate $Selection
+#}}}
+
+#{{{ Troubleshooting menu
+troubleshooting.label=$Troubleshooting
+log-viewer.label=$Activity Log
+update-log.label=$Update Activity Log on Disk
+io-progress-monitor.label=$I/O Progress
+task-monitor.label=$Task Monitor
+keyboard-tester.label=$Keyboard Tester...
+memory-status.label=$Memory Status...
+reload-modes.label=$Reload Edit Modes
+#}}}
+
+#{{{ Quick options menu
+quick-options.label=$Quick settings
+edit-syntax-style.label=Edit syntax style of token under caret
+#}}}
+
+#}}}
+
+#{{{ Macros menu
+macros.label=Ma$cros
+new-macro.label=New Macro
+record-macro.label=$Record Macro...
+stop-recording.label=$Stop Recording
+last-macro.label=Repeat Last Macro
+record-temp-macro.label=Record $Temporary Macro
+run-temp-macro.label=Run Tem$porary Macro
+run-other-macro.label=Run $Other Macro...
+rescan-macros.label=Resca$n Macros
+no-macros.label=No Macros
+#}}}
+
+#{{{ Plugins menu
+plugins.label=$Plugins
+plugin-manager.label=Plugin $Manager...
+plugin-options.label=Plugin $Options...
+no-plugins.label=No Plugins Installed
+#}}}
+
+#{{{ Help menu
+help-menu.label=$Help
+about.label=$About jEdit...
+help.label=jEdit $Help
+tip-of-the-day.label=$Tip of the Day
+userFeedback.label=Make a suggestion...
+#}}}
+
+#}}}
+
+#{{{ Macro strings
+
+macro.temp.header=// This is a temporary macro. First, check over the\n\
+		  // commands to make sure this is what you intended.\n\
+		  // Then, to run this macro, switch to the buffer\n\
+		  // where you would like to execute it and press C+m C+p.
+
+macro.header=// This is a recorded macro. First, check over the\n\
+	     // commands to make sure this is what you intended. Then,\n\
+	     // save this buffer, and the macro should appear in the\n\
+	     // Macros menu.
+
+#}}}
+
+#{{{ Commands that don't appear in menus
+backspace-word.label=Delete Previous Word
+backspace-word-std.label=Delete Previous Word (Eat Whitespace)
+backspace-word-std-after.label=Delete Previous Word (Eat Whitespace after word)
+backspace.label=Delete Previous Character
+delete-word.label=Delete Next Word
+delete-word-std.label=Delete Next Word (Eat Whitespace)
+delete.label=Delete Next Character
+document-end.label=Go to End of Buffer
+document-home.label=Go to Start of Buffer
+end.label=End
+home.label=Home
+smart-end.label=Smart End
+smart-home.label=Smart Home
+insert-literal.label=Insert Next Character Literally
+insert-newline.label=Insert Newline
+insert-newline-indent.label=Insert Newline and Indent
+insert-tab.label=Insert Tab
+insert-tab-indent.label=Insert Tab and Indent
+line-end.label=Go to End of Line
+line-home.label=Go to Start of Line
+next-char.label=Go to Next Character
+next-line.label=Go to Next Line
+next-page.label=Go to Next Page
+next-paragraph.label=Go to Next Paragraph
+next-word.label=Go to Next Word
+next-word-std.label=Go to Next Word (Eat Whitespace)
+overwrite.label=Overwrite Mode
+prev-char.label=Go to Previous Character
+prev-line.label=Go to Previous Line
+prev-page.label=Go to Previous Page
+prev-paragraph.label=Go to Previous Paragraph
+prev-word.label=Go to Previous Word
+prev-word-std.label=Go to Previous Word (Eat Whitespace)
+prev-word-std-after.label=Go to Previous Word (Eat Whitespace after word)
+select-document-end.label=Select to End of Buffer
+select-document-home.label=Select to Start of Buffer
+select-end.label=Select to Smart End Position
+select-home.label=Select to Smart Home Position
+select-line-end.label=Select to End of Line
+select-line-home.label=Select to Start of Line
+select-next-char.label=Select Next Character
+select-next-line.label=Select Next Line
+select-next-page.label=Select Next Page
+select-next-paragraph.label=Select Next Paragraph
+select-next-word.label=Select Next Word
+select-next-word-std.label=Select Next Word (Eat Whitespace)
+select-prev-char.label=Select Previous Character
+select-prev-line.label=Select Previous Line
+select-prev-page.label=Select Previous Page
+select-prev-paragraph.label=Select Previous Paragraph
+select-prev-word.label=Select Previous Word
+select-prev-word-std.label=Select Previous Word (Eat Whitespace)
+select-prev-word-std-after.label=Select Previous Word (Eat Whitespace after word)
+select-visible-end.label=Select to Last Visible Line
+select-visible-home.label=Select to First Visible Line
+select-whitespace-end.label=Select to End of White Space
+select-whitespace-home.label=Select to Start of White Space
+toggle-line-separator.label=Toggle Line Separator
+toggle-word-wrap.label=Toggle Word Wrap
+visible-end.label=Go to Last Visible Line
+visible-home.label=Go to First Visible Line
+whitespace-end.label=Go to End of White Space
+whitespace-home.label=Go to Start of White Space
+#}}}
+
+#{{{ View stuff
+
+# Title
+view.title=jEdit -\u0020
+view.title.dirty=\ (modified)
+
+view.docking.close-tooltip=Hides the current docked window
+view.docking.menu-tooltip=Docking options
+view.docking.menu-floating=Float
+view.docking.menu-top=Dock at Top
+view.docking.menu-left=Dock at Left
+view.docking.menu-bottom=Dock at Bottom
+view.docking.menu-right=Dock at Right
+view.docking.menu-clone=New Floating Instance
+view.docking.menu-close=Close
+view.docking.menu-undock=Undock
+
+view.docking.toggle.label={0} (Toggle)
+view.docking.float.label={0} (New Floating Instance)
+
+directory.not-local=Cannot list directories on remote filesystems
+directory.no-files=No Files
+
+#{{{ Gutter highlight
+view.gutter.marker.no-name=Marker
+view.gutter.marker=Marker: {0}
+#}}}
+
+#{{{ Status messages
+view.status.add-marker=Shortcut for new marker? [{0}]
+view.status.auto-wrap=Search string not found; wrapping around!
+view.status.bracket=Matches line {0}: {1}
+view.status.caret-tooltip=Offset, line and column number (offset,line,column[-virtual] relative%)
+view.status.copy-append-string-register=Register name to copy append to? [{0}]
+view.status.copy-string-register=Register to copy to? [{0}]
+view.status.cut-append-string-register=Register to cut append to? [{0}]
+view.status.cut-string-register=Register to cut to? [{0}]
+view.status.expand-folds=Fold level? [1-9]
+view.status.goto-marker=Shortcut of marker to go to? [{0}]
+view.status.incomplete-abbrev={0} parameter(s) specified, but {1} required!
+view.status.insert-literal=Key to insert literally?
+view.status.io-1=I/O: 1 operation in progress
+view.status.io.done=Input/output complete
+view.status.io=I/O: {0} operations in progress
+view.status.linesep-changed=Line separator set to {0}
+view.status.linesep-tooltip=Line separator (click to change)
+view.status.memory-tooltip=Java heap memory: {0}Kb/{1}Kb
+view.status.mode-tooltip=Current edit mode, fold mode, and encoding
+view.status.multi-changed=Multiple selection mode is {0,choice,0#off|1#on}
+view.status.multi-tooltip=Multiple selection mode (click to change)
+view.status.narrow=Invoke "Expand All Folds" to make all text visible again
+view.status.no-markers=no markers set
+view.status.no-registers=no registers defined
+view.status.overwrite-changed=Overwrite mode is {0,choice,0#off|1#on}
+view.status.overwrite-tooltip=Overwrite/insert mode indicator (click to change)
+view.status.paste-string-register=Register to paste from? [{0}]
+view.status.print=Printing page {0}
+view.status.quick-copy=Quick copy mode - marked text will replace selection
+view.status.recording=Macro recording
+view.status.rect-select-changed=Rectangular selection is {0,choice,0#off|1#on}
+view.status.rect-tooltip=Rectangular selection mode (click to change)
+view.status.replace-all=Replaced {0} occurrence(s) in {1} file(s)
+view.status.search-not-found=Search string not found!
+view.status.select-marker=Shortcut of marker to select to? [{0}]
+view.status.swap-marker=Shortcut of marker to swap caret position with? \
+	[{0}]
+view.status.vertical-paste-string-register=Register to vertical paste \
+	from? [{0}]
+view.status.wrap-changed=Word wrap mode is now "{0}"
+view.status.wrap-tooltip=<html>Word wrap mode is {0} (click to change)</html>
+view.status.indent-tooltip=Automatic indentation indicator (click to change)
+view.status.autoindent-changed=Automatic indentation status is now "{0}"
+view.status.bufferset-tooltip=BufferSet scope is {0}
+wrap.none=disabled
+wrap.hard=hard
+wrap.soft=soft
+#}}}
+
+#{{{ Status bar component visibility
+
+#}}}
+
+#}}}
+
+#{{{ Printing
+
+print.headerText=jEdit - {0}
+print.footerText={0} :: page {1}
+
+print-error.title=Print Error
+print-error.message=An error occurred while trying to print:\n\
+	{0}
+#}}}
+
+#{{{ Various dialog boxes
+
+#{{{ About dialog
+about.title=About jEdit
+about.version=jEdit {0} {1} mode, using {2} Java {3}
+about.mode.standalone=standalone
+about.mode.server=server
+about.mode.server-background=server-background
+about.navigate=Press arrow keys to navigate about text
+
+# This text scrolls by in the about dialog box.
+# Hack: Since StringTokenizer treats two consequent \n as one token, we
+# insert a space by itself in the text to create blank lines.
+about.text.prefix=jEdit is brought to you by
+about.text.suffix=I'd also like to thank the users for their\n\
+                  	comments, feedback and bug reports.
+#}}}
+
+#{{{ Error list dialog, used to report I/O and plugin load errors
+error-list.plugin-manager=Plugin Manager
+#}}}
+
+#{{{
+largeBufferDialog.title=Large buffer {0}
+largeBufferDialog.message=The buffer is very large and jEdit may become unresponsive\n\
+	due to syntax highlighting. You should consider the following options.\n\
+	-Keep Full syntax : jEdit's syntax highlight will work as usual, jEdit \n\
+	may become very slow, this is not recommended.\n\
+	-Context insensitive syntax highlighting. In this case, jEdit will\n\
+	do fast highlighting, but the result may not be perfect. The\n\
+	buffer is highlighted line by line without checking context\n\
+	of the previous line. It is possible that the syntax is not accurate\n\
+	if you have tokens on multiple lines (multiline comments, xml tags ...)\n\
+	-Use 'text' mode of jEdit (no syntax highlighting)
+largeBufferDialog.fullSyntax=Full syntax highlight
+largeBufferDialog.contextInsensitive=Context insensitive syntax highlight
+largeBufferDialog.defaultMode=Text edit mode
+#}}}
+
+#{{{ I/O error dialog box
+ioerror.title=I/O Error
+ioerror.caption=The following {0} I/O operations could not be completed:
+ioerror.caption-1=The following I/O operation could not be completed:
+
+ioerror={0}
+ioerror.directory-error=Cannot list directory: {0}
+ioerror.directory-error-nomsg=Cannot list directory.
+ioerror.encoding-error=The file could not be loaded correctly (some data might be lost) with\n\
+	the encoding "{0}".\n\
+	({1})\n\
+	Try selecting a different encoding.\n\
+	It can be selected with the menu File->Reload with Encoding.\n\
+	If you want it to be done automatically, add the candidates into\n\
+	"List of fallback encodings" in Encodings pane of Global Options.
+ioerror.write-encoding-error=Failed to encode the character\n\
+	{3} at column {2} in line {1} with the encoding "{0}".
+ioerror.read-error=Cannot load: {0}
+ioerror.write-error=Cannot save: {0}
+ioerror.unsupported-encoding-error={0} charset is not supported by your JVM
+ioerror.open-directory=Cannot open directory as a buffer.
+ioerror.save-directory=Cannot save buffer over a directory.
+ioerror.no-read=Insufficent permissions to load file.
+ioerror.no-write=Insufficent permissions to save file.
+ioerror.write-error-readonly=Unable to save, the file is readonly.
+ioerror.save-readonly-twostagefail=Unable to save, the file is readonly and it two stage save is impossible.
+ioerror.badurl=Malformed URL: {0}
+ioerror.delete-error=Cannot delete file.
+ioerror.rename-exists=Cannot overwrite existing file {0}.
+ioerror.rename-error=Cannot rename to {0}.
+ioerror.mkdir-error=Cannot create directory.
+
+vfs.not-supported.list=Directories on the "{0}" filesystem cannot be browsed.
+vfs.not-supported.load=Files on the "{0}" filesystem cannot be opened.
+vfs.not-supported.save=Files cannot be saved to the "{0}" filesystem.
+
+vfs.overwrite-readonly.title=File is readonly
+vfs.overwrite-readonly.message=The file {0} is readonly.\n\
+	Would you like to save it anyway, resetting the readonly flag\n\
+	it will use two stage save (resets file owner on Unix)
+
+vfs.twostageimpossible.title=Two stage save cannot be used
+vfs.twostageimpossible.message=Two stage save cannot be used, do you want to\n\
+	save anyway ?
+
+out-of-memory-error=There was insufficent Java heap memory to complete\n\
+	this request. Try increasing the maximum heap size.\n\
+	\n\
+	Documentation on changing the Java heap size can be found in\n\
+	the "Buffers" section of the "jEdit Basics" chapter of the\n\
+	user guide.
+#}}}
+
+#{{{ Old I/O error dialog boxes
+ioerror.message=An I/O error occurred ({0})
+
+read-error.title=Read Error
+# {0} - the path name {1} - the error message
+read-error.message=The file {0}\n\
+	could not be loaded due to an I/O error.\n\
+	({1})
+
+write-error.title=Write Error
+# {0} - the path name {1} - the error message
+write-error.message=The file {0}\n\
+	could not be saved due to an I/O error.\n\
+	({1})
+
+directory-error.title=Directory Error
+# {0} - the path name {1} - the error message
+directory-error.message=The directory {0}\n\
+	could not be listed due to an I/O error.\n\
+	({1})
+
+directory-error-nomsg.title=Directory Error
+# {0} - the path name
+directory-error-nomsg.message=The directory {0}\n\
+	could not be listed due to an I/O error.
+
+encoding-error.title=Incompatible Encoding
+encoding-error.message=The file {0}\n\
+	could not be loaded with the "{1}" encoding.\n\
+	({2})\n\
+	\n\
+	To use a different encoding, try the commands in the\n\
+	File->Open With Encoding menu.\n\
+	\n\
+	If you are really stuck and do not know which encoding\n\
+	to use, try "ASCII" or "8859_1".
+
+open-directory.title=Cannot Open Directory
+open-directory.message={0} is a directory.\n\
+	Directories cannot be opened for editing.
+
+save-directory.title=Cannot Save Directory
+save-directory.message={0} is a directory.\n\
+	Buffers cannot be saved over directories.
+
+no-read.title=Cannot Open File
+no-read.message=Cannot read from {0}.\n\
+	This probably means you have insufficent permissions.
+
+no-write.title=Cannot Save File
+no-write.message=Cannot save to {0}.\n\
+	This probably means you have insufficent permissions.
+
+badurl.title=Invalid URL
+# {0} - the URL
+# {1} - the error
+badurl.message=The following URL is invalid: {0}\n\
+	({1})
+#}}}
+
+#{{{ Go to line dialog
+goto-line.title=Go To Line
+goto-line.message=Go to line:
+#}}}
+
+#{{{ Word count dialog
+wordcount.title=Word Count
+# {0} - characters
+# {1} - words
+# {2} - lines
+wordcount.message=Characters: {0}\nWords: {1}\nLines: {2}
+#}}}
+
+#{{{ Set marker dialog
+setmarker.title=Set Marker
+setmarker.message=Marker name:
+#}}}
+
+#{{{ File not saved dialog
+notsaved.title=File Not Saved
+# {0} - file name
+notsaved.message=Save changes to {0}?
+#}}}
+
+#{{{ File changed, still reload dialog
+changedreload.title=File Modified
+changedreload.message=The file {0}\n\
+	has been modified since last save; if you reload,\n\
+	the changes will be lost. Continue?
+#}}}
+
+#{{{ Autosave file exists dialog
+autosave-found.title=Autosave File Found
+# {0} - autosave file name
+autosave-found.message=An autosave file {0}\n\
+	was found! This probably means that jEdit crashed before you could\n\
+	save. Would you like to open the autosave file?
+
+autosave-loaded.title=Autosave File Loaded
+autosave-loaded.message=The autosave file {0}\n\
+	has been loaded. You should now check if it contains your unsaved\n\
+	data. If you would like to keep the autosaved changes, save the file.\n\
+	If you would like to discard them, select File->Reload.
+#}}}
+
+#{{{ Save all confirm dialog
+saveall.title=Save All Buffers
+saveall.message=Are you sure you want to save all modified buffers?
+#}}}
+
+#{{{ Reload all confirm dialog
+reload-all.title=Reload All Buffers
+reload-all.message=Are you sure you want to reload all buffers from disk?\n\
+	Unsaved changes in any open buffers WILL BE LOST!
+#}}}
+
+#{{{ Encoding prompt
+encoding-prompt.title=Open With Other Encoding
+encoding-prompt.message=Character encoding to use:
+#}}}
+
+#{{{ Macro recording already in progress dialog
+already-recording.title=Already Recording
+already-recording.message=A macro recording is already in progress.
+#}}}
+
+#{{{ No temporary macro dialog
+no-temp-macro.title=No Temporary Macro
+no-temp-macro.message=No temporary macro has been recorded.
+#}}}
+
+#{{{ Record macro dialog
+record.title=Record Macro
+record.message=Macro name:
+#}}}
+
+#{{{ Some features don't work with -nosettings dialog
+no-settings.title=Feature Disabled
+no-settings.message=jEdit was started with the -nosettings switch.\n\
+	To use this feature, you must start jEdit without that switch.
+#}}}
+
+#{{{ Some features don't work with the web start version
+no-webstart.title=Feature Disabled
+no-webstart.message=This feature is not available in the WebStart version\n\
+	of jEdit.
+#}}}
+
+#{{{ Search and replace dialog
+search.title=Search And Replace
+
+search.find=Search for:
+search.find.tooltip=PgUp/PgDown or right-click to recall previous
+search.find.mnemonic=s
+search.replace=Replace with:
+search.replace.mnemonic=w
+search.string-replace-btn=Text
+search.beanshell-replace-btn=Return value of a BeanShell snippet
+
+search.settings=Settings:
+search.keep=Keep dialog
+search.keep.mnemonic=k
+search.word=Whole word
+search.word.mnemonic=q
+search.case=Ignore case
+search.case.mnemonic=i
+search.regexp=Regular expressions
+search.regexp.mnemonic=x
+search.hypersearch=HyperSearch
+search.hypersearch.mnemonic=h
+search.wrap=Auto wrap
+search.wrap.mnemonic=t
+
+search.direction=Direction:
+search.back=Backward
+search.back.mnemonic=b
+search.forward=Forward
+search.forward.mnemonic=o
+
+search.fileset=Search in:
+search.selection=Selection
+search.selection.mnemonic=n
+search.current=Current buffer
+search.current.mnemonic=c
+search.all=All buffers
+search.all.mnemonic=l
+search.directory=Directory:
+search.directory.mnemonic=d
+search.skipHidden=Skip hiddens/backups
+search.skipBinary=Skip binary files
+search.skipHidden.mnemonic=h
+search.skipBinary.mnemonic=b
+
+search.directoryField=Directory:
+search.directoryField.mnemonic=y
+search.filterField=Filter:
+search.filterField.mnemonic=f
+glob.tooltip={*.c,*.h} for multiple extensions
+search.subdirs=Search subdirectories
+search.subdirs.mnemonic=u
+search.choose=Choose...
+search.choose.mnemonic=e
+search.synchronize=Synchronize
+search.synchronize.mnemonic=z
+search.synchronize.tooltip=Sets filter and directory to current buffer's extension/location.
+search.findBtn=Find
+search.findBtn.mnemonic=f
+search.replaceBtn=Replace
+search.replaceAndFindBtn=Replace & Find
+search.replaceAndFindBtn.mnemonic=r
+search.replaceAllBtn=Replace All
+search.replaceAllBtn.mnemonic=a
+
+# Beep when searching automatically wraps?
+
+#}}}
+
+#{{{ Keep searching dialog
+keepsearching.title=No More Matches Found
+keepsearching.message=No more matches were found. Continue search from\n\
+	{0,choice,0#beginning|1#end}?
+#}}}
+
+#{{{ HyperSearch results dialog
+hypersearch-results.title=HyperSearch Results
+hypersearch-results.result-caption={0} ({1,choice,1#1 occurrence|1<{1,number,integer} occurrences in '{2,choice,1#1 file|1<{2,number,integer} files}'})
+hypersearch-results.open=Open
+hypersearch-results.open-view=Open in New View
+hypersearch-results.open-plain-view=Open in New Plain View
+hypersearch-results.open-split=Open in New Split
+hypersearch-results.remove-node=Remove Node
+hypersearch-results.new-search=New Search From Here
+hypersearch-results.expand-child-nodes=Expand Child Nodes
+hypersearch-results.collapse-child-nodes=Collapse Child Nodes
+hypersearch-results.copy-to-clipboard=Copy to clipboard
+hypersearch-results.redo=Redo HyperSearch
+hypersearch-results.tree-view=Toggle Tree View
+hypersearch-results.clear.label=Remove All Nodes
+hypersearch-results.stop.label=Stop HyperSearch and show current results
+hypersearch-results.multi.label=Toggle Multiple Results
+hypersearch-results.highlight.label=Set Match Highlight Style
+hypersearch-results.file-caption={0} ({1,choice,1#1 occurrence|1<{1,number,integer} occurrences in '{2,choice,1#1 line|1<{2,number,integer} lines}'})
+hypersearch-results.searching=Searching for "{0}"...
+hypersearch-results.no-results=No results found for "{0}".
+hypersearch-results.done=Results for "{0}":
+
+hypersearch-status=Searching
+#}}}
+
+#{{{ HyperSearch too many results
+hypersearch.tooManyResults.label=Too many results
+hypersearch.tooManyResults.title=Too many results
+hypersearch.tooManyResults.message=The search you asked returned {0} \
+	results and is not yet finished. Do you want to stop it ?
+#}}}
+
+
+#{{{ Search and replace error dialog
+searcherror.title=Search and Replace Error
+# {0} - error message
+searcherror.message=An error occurred while performing this operation.
+#}}}
+
+#{{{ Search and replace error dialog
+searcherror-bsh.title=Search and Replace Error
+# {0} - error message
+searcherror-bsh.message=An error occurred while performing this operation.\n\
+	\n\
+	Make sure the replace mode is set to "Text" if you did not intend\n\
+	the replace string to be interpreted as a BeanShell expression.
+#}}}
+
+#{{{ Empty fileset error dialog
+empty-fileset.title=Empty File Set
+empty-fileset.message=The specified search file set contains no files.\n\
+	Please ensure that the file name filter and directory to search\n\
+	(if applicable) are set correctly.
+#}}}
+
+#{{{ Can only search local directories dialog
+remote-dir-search.title=Non-Local Directory Chosen
+remote-dir-search.message=You have elected to search a non-local directory.\n\
+	This can be very slow due to network latency and so on.\n\
+	Are you sure you want to continue?
+#}}}
+
+#{{{ "Search in selection" active but nothing selected in text area
+search-no-selection.title=Nothing Selected
+search-no-selection.message=Please select some text or deactivate the\n\
+	"search in selection" option first.
+#}}}
+
+#{{{ Paste previous and paste deleted dialogs
+paste-from-list.whitespace=<whitespace>
+paste-previous.title=Paste Previous
+paste-previous.caption=Recently copied and pasted text:
+paste-deleted.title=Paste Deleted
+paste-deleted.caption=Recently deleted text:
+#}}}
+
+#{{{ File changed on disk dialog
+filechanged-save.title=File Changed on Disk
+filechanged-save.message=The file {0}\n\
+	has been modified on disk by another program. Are you sure\n\
+	you want to continue saving it?
+#}}}
+
+#{{{ File exists dialog
+fileexists.title=File Exists
+fileexists.message=The file {0} already exists. Are you sure you want\n\
+	to overwrite it?
+#}}}
+
+#{{{ Select line range dialog
+selectlinerange.title=Select Line Range
+selectlinerange.caption=Select line range:
+selectlinerange.start=Start line:
+selectlinerange.end=End line:
+#}}}
+
+#{{{ View registers dialog
+view-registers.title=Registers
+view-registers.caption=Register:
+view-registers.clipboard=$ (clipboard)
+view-registers.selection=% (selection)
+view-registers.none=No registers defined
+view-registers.register=Register:
+view-registers.contents=Contents:
+view-registers.undefined=__UNDEFINED__
+#}}}
+
+#{{{ Close all buffers dialog
+close.title=Unsaved Changes
+close.caption=The following buffers have unsaved changes:
+close.selectAll=Select All
+close.selectAll.mnemonic=a
+close.save=Save Selected
+close.save.mnemonic=s
+close.discard=Discard Selected
+close.discard.mnemonic=d
+#}}}
+
+#{{{ Files changed on disk dialog
+files-changed.title=Files Changed on Disk
+files-changed.caption=The following files were changed on disk by another program:
+files-changed.deleted=Deleted on disk; save to recreate:
+files-changed.changed-auto=Automatically reloaded:
+files-changed.changed=Changed on disk:
+files-changed.changed-dirty-auto=Buffer dirty; not reloaded:
+files-changed.changed-dirty=Buffer dirty, and file changed on disk:
+files-changed.select-all=Select All
+files-changed.select-all.mnemonic=a
+files-changed.reload=Reload
+files-changed.reload.mnemonic=r
+files-changed.ignore=Ignore
+files-changed.ignore.mnemonic=i
+#}}}
+
+#{{{ Abbrev dialogs
+add-abbrev.title=Add Abbreviation
+add-abbrev.mode=Add mode-specific
+add-abbrev.global=Add global
+
+edit-abbrev.title=Edit Abbreviation
+
+edit-abbrev.duplicate.title=Duplicate Abbreviation
+edit-abbrev.duplicate.message=\
+	Another expansion already exists with this abbreviation.\n\
+	\n\
+	Do you want to override the existing expansion?
+
+abbrev-editor.abbrev=Abbreviation:
+abbrev-editor.before=Text to insert before caret:
+abbrev-editor.after=Text to insert after caret:
+#}}}
+
+#{{{ XMode errors
+xmode-error.title=XML Parse Error
+# {2} is the column number, but it's not too useful so we don't show it
+xmode-error.message=An error occurred while parsing {0}, line {1}:\n\
+	{3}
+xmode-error.dtd=The DTD could not be loaded\n({0})
+xmode-error.termchar-invalid=The value of the AT_CHAR attribute is invalid ({0})
+xmode-error.doctype-invalid=Expected a document type of MODE, found {0}
+xmode-error.empty-tag=The {0} tag cannot be empty
+xmode-error.token-invalid=The token type {0} is invalid
+xmode-error.empty-keyword=The keyword text cannot be empty
+xmode-error.regexp=Invalid regular expression\n({0})
+xmode-error.hash-char-and-hash-chars-mutually-exclusive=HASH_CHAR and HASH_CHARS may not be specified both
+xmode-error.delegate-invalid=Invalid delegate: {0}
+#}}}
+
+#{{{ JARClassLoader errors
+plugin-error.title=Plugin Error
+plugin-error.caption=The following plugins could not be loaded:
+plugin-error.caption-1=The following plugin could not be loaded:
+
+plugin-error.load-error=Cannot load: {0}\n\
+	The most likely reason is that the JAR file is corrupt; try\n\
+	reinstalling it. See Utilities->Troubleshooting->Activity Log\n\
+	for a full stack trace.
+plugin-error.start-error=Cannot start: {0}\n\
+	Try updating to a newer version of the plugin.
+plugin-error.already-loaded=Two copies installed. Please remove one of the \
+	two copies.
+plugin-error.dep-jdk=Requires Java {0} or later, but you only have version {1}.
+plugin-error.dep-jedit=Requires jEdit {0} or later, but you only have version {1}.\n\
+	Download new jEdit versions from <http://www.jedit.org>.
+plugin-error.dep-plugin.no-version=Requires version {0} \
+	or later of {1},\n\
+	but {1} is not installed.
+plugin-error.dep-plugin.broken=Requires {0}, but {0}\n\
+	could not be loaded.
+plugin-error.dep-plugin=Requires version {0} or later of {1}, \
+	but you only have {1} version {2}.
+plugin-error.dep-class=Requires the class {0}.\n\
+	Try installing the appropriate plugin or class library.
+plugin-error.missing-jar=Requires JAR file {0}.\n\
+	This JAR file is part of this plugin, but it cannot be found.\n\
+	Try reinstalling this plugin.
+plugin-error.not-42=This plugin does not support dynamic loading.\n\
+	You must restart jEdit after removing or installing this plugin.
+
+plugin-error-download.title=Plugin error
+plugin-error-download.message=Error while downloading the plugin, please try another mirror\n{0}
+#}}}
+
+#{{{ Macro dialogs
+macro-input.title=Macro Input
+macro-error.title=Macro Error
+macro-message.title=Macro Message
+macro-confirm.title=Macro Confirmation
+#}}}
+
+#{{{ BeanShell stuff
+beanshell-error.title=BeanShell Error
+beanshell-error.message=A BeanShell error occurred.
+
+beanshell-eval-input.title=Evaluate BeanShell Expression
+beanshell-eval-input.message=BeanShell expression:\n\
+	\n\
+	Variables:\n\
+	view - The current view instance\n\
+	editPane - The current edit pane instance\n\
+	textArea - The current text area instance\n\
+	buffer - The current buffer
+
+beanshell-eval.title=BeanShell Evaluation
+beanshell-eval.message={0}
+
+beanshell-eval-line.title=Evaluate BeanShell Expression
+beanshell-eval-line.message=BeanShell expression to evaluate for each \
+	selected line:\n\
+	\n\
+	Variables:\n\
+	line - The index of the line, from the start of the buffer\n\
+	index - The index of the line, from the start of the selection\n\
+	text - The text of the line\n\
+	view - The current view instance\n\
+	editPane - The current edit pane instance\n\
+	textArea - The current text area instance\n\
+	buffer - The current buffer
+#}}}
+
+#{{{ Macro not recording dialog
+macro-not-recording.title=Not Recording
+macro-not-recording.message=A macro is not currently being recorded.
+#}}}
+
+#{{{ Large repeat count warning
+large-repeat-count.title=Large Repeat Count
+large-repeat-count.message=Are you sure you want to invoke "{0}" {1} times?
+
+large-repeat-count.user-input.title=Large Repeat Count
+large-repeat-count.user-input.message=Are you sure you want to insert "{0}" \
+	{1} times?
+#}}}
+
+#{{{ Wrong fold mode dialog
+folding-not-explicit.title=Wrong Fold Mode
+folding-not-explicit.message=This command can only be used in explicit fold mode.
+#}}}
+
+#{{{ Memory status dialog box
+memory-status.title=Java Heap Memory
+memory-status.gc=Garbage collection released {0} Kb.
+memory-status.use={0} Kb used, {1} Kb total
+#}}}
+
+#{{{ Multiple I/O request errors
+buffer-multiple-io.title=I/O Error
+buffer-multiple-io.message=Each buffer can only execute one input/output\n\
+	operation at a time. Please wait until the current\n\
+	operation finishes (or abort it in the I/O progress monitor)\n\
+	before starting another one.
+
+browser-multiple-io.title=I/O Error
+browser-multiple-io.message=Each file system browser can only execute one input/output\n\
+	operation at a time. Please wait until the current operation\n\
+	finishes (or abort it in the I/O progress monitor) before starting\n\
+	another one.
+#}}}
+
+#{{{ maxLineLen=0 warning
+format-maxlinelen.title=Wrap Margin
+format-maxlinelen.message=The wrap margin must be set to a non-zero value\n\
+	for this command to work.
+#}}}
+
+#{{{ Text under caret does not have a syntax style (token type)
+syntax-style-no-token.title=Syntax Style Configuration
+syntax-style-no-token.message=The text under the caret has no associated \
+	syntax style to configure.
+#}}}
+
+#{{{ View title dialog
+view.title.select=Please enter a title for this view:
+#}}}
+#}}}
+
+#{{{ Buffer options dialog
+buffer-options.title=Buffer Options
+buffer-options.caption=This dialog box changes settings for the current buffer\n\
+	only. To change the default settings for an edit mode, see\n\
+	the Utilities->Global Options->Editing dialog.
+buffer-options.loading-saving=Loading and Saving
+buffer-options.lineSeparator=Line separator:
+buffer-options.encoding=Character encoding:
+buffer-options.gzipped=GZIP (compress) file on disk
+buffer-options.editing=Editing
+buffer-options.mode=Edit mode:
+#}}}
+
+#{{{ Global options dialog
+options.title=Options
+options.title-template={0}: {1}
+options.jedit.label=jEdit
+
+# Option pane to show by default
+options.last=editing
+
+#{{{ Options groups
+
+#}}}
+
+#{{{ General pane
+options.general.label=General
+options.general.lineSeparator=Default line separator:
+options.general.encoding=Default character encoding:
+options.general.encodingAutodetect=Auto-detect file encoding when possible
+options.general.checkModStatus=If open files are changed on disk:
+options.general.checkModStatus.nothing=do nothing
+options.general.checkModStatus.prompt=prompt
+options.general.checkModStatus.reload=automatically reload and notify user
+options.general.checkModStatus.silentReload=autoreload without notification
+options.general.checkModStatusUpon=Check for file change upon:
+options.general.checkModStatusUpon.focus=application focus
+options.general.checkModStatusUpon.all=application focus, visiting the buffer or saving any buffer
+options.general.checkModStatusUpon.operations=visiting the buffer or saving any buffer
+options.general.checkModStatusUpon.focusBuffer=visiting or saving the buffer
+options.general.checkModStatusUpon.none=saving the buffer
+options.general.recentFiles=Recent files to remember:
+options.general.hypersearch.maxWarningResults=Max Hypersearch Results:
+options.general.sortRecent=Sort recent file list
+options.general.saveCaret=Save caret positions in recent file list
+options.general.persistentMarkers=Save marker positions
+options.general.resetUndo=Reset undo history on save
+options.general.restore=Restore previously open files on startup
+options.general.restore.splits=Restore split configuration
+options.general.restore.remote=... including remote files over VFS
+options.general.restore.cli=... including file names specified on the command line
+options.general.encodingDetectors=List of encoding autodetectors:
+options.general.fallbackEncodings=List of fallback encodings:
+options.general.fallbackEncodings.tooltip=A whitespace-separated list of encodings to try against encoding errors on loading
+options.general.systrayicon=Show the systray icon
+#}}}
+
+#{{{ Abbreviations pane
+options.abbrevs.label=Abbreviations
+options.abbrevs.set=Abbrev set:
+options.abbrevs.expandOnInput=Space bar expands abbrevs
+options.abbrevs.abbrev=Abbrev
+options.abbrevs.expand=Expansion
+options.abbrevs.add=Add...
+options.abbrevs.edit=Edit...
+options.abbrevs.remove=Remove
+#}}}
+
+#{{{ Appearance pane
+options.appearance.label=Appearance
+options.appearance.iconTheme=Icon Theme:
+options.appearance.fonts.antialias=Anti-alias Non-TextArea fonts
+options.appearance.lf=Swing look & feel:
+options.appearance.primaryFont=Button, menu and label font:
+options.appearance.secondaryFont=List and text field font:
+options.appearance.helpViewerFont=HelpViewer/Browser Text font:
+options.appearance.history=History text field entries to remember:
+options.appearance.menuSpillover=Number of items before menus spill over:
+options.appearance.startup.label=Startup options
+options.appearance.showSplash=Show splash screen on startup
+options.appearance.showTips=Show tips on startup
+options.appearance.experimental.label=Experimental options
+options.appearance.experimental.caption=The below three options might not work \
+	correctly with some\n\
+	Java versions. If you experience problems, switch them off.
+
+options.appearance.textColors=Use jEdit text area colors in all text \
+	components
+options.appearance.decorateFrames=Draw window borders using Swing look & feel
+options.appearance.decorateDialogs=Draw dialog box borders using Swing look & feel
+
+options.appearance.localization.section.label=Localization
+options.appearance.usedefaultlocale.label=Use defaut locale
+options.appearance.lang.label=Language (change is effective on restart)
+#}}}
+
+#{{{ Context Menu pane
+options.context.label=Context Menu
+options.context.caption=Items in text area right click menu:
+options.context.add=Add...
+options.context.remove=Remove
+options.context.moveUp=Move Up
+options.context.moveDown=Move Down
+options.context.reset=Reset to Default
+options.context.add.title=Add to Context Menu
+options.context.add.caption=Add to context menu:
+options.context.add.separator=Separator
+options.context.add.action=Command or macro:
+options.context.includeOptionsLink.label=Include "Customize This Menu..." link
+
+options.context.reset.dialog.title=Reset to Default
+options.context.reset.dialog.message=Are you sure you want to reset the context menu to the installation default?
+#}}}
+
+#{{{ Docking pane
+options.docking.label=Docking
+options.docking.title=Window
+options.docking.dockPosition=Docking position
+options.docking.selectFramework.label=Docking framework:
+options.docking.autoSaveModeLayout.label=Automatically save mode-specific docking layout
+options.docking.autoLoadModeLayout.label=Automatically load mode-specific docking layout
+options.docking.selectSet.label=Dockable set:
+options.docking.system-change.note=(Experimental) Restart jEdit for changes to take effect
+#}}}
+
+#{{{ Editing pane
+options.editing.label=Editing
+options.editing.defaultMode=Default edit mode:
+options.editing.undoCount=Number of undos:
+options.editing.caption-0=\
+	To customize mode-specific settings, select an edit mode\n\
+	from the below menu. Initially, global defaults are shown.
+options.editing.caption-1=\
+	Uncheck "use default settings" to customize mode-specific\n\
+	settings. Otherwise, settings from the <global defaults>\n\
+	section will be used.
+options.editing.mode=Change settings for mode:
+options.editing.global=<global defaults>
+options.editing.useDefaults=Use default settings
+options.editing.filenameGlob=File name glob:
+options.editing.firstlineGlob=First line glob:
+options.editing.folding=Folding mode:
+options.editing.collapseFolds=Initially collapse folds with level:
+options.editing.wrap=Word wrap:
+options.editing.maxLineLen=Wrap margin:
+options.editing.maxLineLen.tooltip=Select 0 for text area width (soft wrap only)
+options.editing.tabSize=Tab width:
+options.editing.indentSize=Indent width:
+options.editing.noWordSep=Extra word characters:
+options.editing.camelCasedWords=Separate "CamelCased" words
+options.editing.noTabs=Soft (emulated with spaces) tabs
+options.editing.elasticTabstops=Indent using elastic tabstops
+options.editing.elasticTabstops.tooltip=(Experimental) - may cause instability in jEdit.
+options.editing.deepIndent=Deep indent
+options.editing.autoIndent=Automatic indentation
+options.editing.largefilemode.title=Large file mode
+options.editing.largefilemode=What should I do about very big files:
+options.editing.largefilemode.option.ask=<html><b>Ask</b> what to do when opening a large file</html>
+options.editing.largefilemode.option.full=<html><b>Keep Full syntax</b> : jEdit's syntax highlight will work as usual, jEdit \
+                                               	may become<br/><b>very slow, this is not recommended</b></html>
+options.editing.largefilemode.option.limited=<html><b>Context insensitive syntax highlight</b>: In this case jEdit will \
+		do fast highlighting, but the<br/>result may not be perfect. The \
+		buffer is highlighted line by line without taking care of the<br/>context \
+		of the previous line. It is possible that the syntax is not accurate \
+		if you have<br/>tokens on multiple lines (multiline comments, xml tags ...) \
+		Soft wrap is also deactivated<br/><b>(best choice)</b></html>
+options.editing.largefilemode.option.nohighlight=No syntax highlight, no soft wrap
+#}}}
+
+#{{{ Encodings pane
+options.encodings.label=Encodings
+options.encodings.selectEncodings=Select the encodings that should be shown in encoding dialogs:
+options.encodings.available=Available encoding(s)
+options.encodings.selected=Selected encoding(s)
+options.encodings.available.tooltip=<html>Encodings in this column will <b>not</b> be listed in encoding dialogs.\
+  Drag them to the right column to activate them</html>
+options.encodings.selected.tooltip=Encodings in this column be shown in encoding dialogs.\
+  Drag them to the left column to hide them
+#}}}
+
+#{{{ Gutter pane
+options.gutter.label=Gutter
+options.gutter.enabled=Show gutter
+options.gutter.optionalComponents=Optional gutter components
+options.gutter.lineNumbers=Line numbers
+options.gutter.minLineNumberDigits=Minimal number of digits to reserve for line numbers:
+options.gutter.selectionAreaEnabled=Line selection area when line numbers are not shown
+options.gutter.selectionAreaBgColor=Selection area background color:
+options.gutter.selectionAreaWidth=Selection area width (in pixels):
+options.gutter.font=Gutter font:
+options.gutter.foreground=Line number color:
+options.gutter.background=Background color:
+options.gutter.borderWidth=Gutter border width:
+options.gutter.numberAlignment=Line number alignment:
+options.gutter.interval-1=Highlight every\u0020
+options.gutter.interval-2=lines:
+options.gutter.currentLineHighlight=Highlight current line:
+options.gutter.structureHighlight=Show structure scope:
+options.gutter.markerHighlight=Show marker positions:
+options.gutter.foldColor=Fold markers:
+options.gutter.focusBorderColor=Focused gutter border:
+options.gutter.noFocusBorderColor=Unfocused gutter border:
+options.gutter.foldStyle.label=Fold style:
+options.gutter.foldStyleNames.Triangle=Triangle
+options.gutter.foldStyleNames.Square=Square
+options.gutter.foldStyleNames.Circle=Circle
+#}}}
+
+#{{{ Mouse pane
+options.mouse.label=Mouse
+options.mouse.dragAndDrop=Drag and drop in text area
+options.mouse.joinNonWordChars=Double-click drag joins non-alphanumeric characters
+options.mouse.middleMousePaste=Quick copy using middle mouse button
+options.mouse.ctrlForRectangularSelection=Switch to rectangular selection while Ctrl is pressed
+options.mouse.gutter.foldClick=Click in gutter:
+options.mouse.gutter.SfoldClick=Shift-click in gutter:
+options.mouse.gutter.toggle-fold=Collapse/expand fold
+options.mouse.gutter.toggle-fold-fully=Collapse/expand fold fully
+#}}}
+
+#{{{ Plugin Manager pane
+options.plugin-manager.label=Plugin Manager
+options.plugin-manager.updateMirrors=Update mirror list
+options.plugin-manager.workthread=Updating mirror list ...
+options.plugin-manager.downloadSource=Download plugin source code
+options.plugin-manager.deleteDownloads=Delete archives from download \
+	directory after install
+options.plugin-manager.mirror=Preferred download mirror:
+options.plugin-manager.location=Install plugins in:
+options.plugin-manager.settings-dir=jEdit settings directory
+options.plugin-manager.app-dir=jEdit application directory
+options.plugin-manager.none=Plugin Central default
+#}}}
+
+#{{{ Printing pane
+options.print.label=Printing
+options.print.font=Print font:
+options.print.fontstyle=Print font style:
+options.print.fontsize=Print font size:
+options.print.header=Print a header with the file name
+options.print.footer=Print a footer with the date, time and page number
+options.print.lineNumbers=Print line numbers
+options.print.color=Color printing
+options.print.tabSize=Tab width when printing:
+options.print.workarounds=Workarounds for Java bugs
+options.print.glyphVector=Print spacing workaround (increases spool file size)
+options.print.force13=Use old printing API (enable this if jEdit hangs when \
+	printing)
+options.print.folds=Print folded regions
+#}}}
+
+#{{{ Proxy pane
+options.firewall.label=Proxy Servers
+options.firewall.http.enabled=Use HTTP proxy server
+options.firewall.http.host=HTTP proxy host:
+options.firewall.http.port=HTTP proxy port:
+options.firewall.http.user=Username:
+options.firewall.http.password=Password:
+options.firewall.http.nonProxy=Connect directly to:
+options.firewall.socks.enabled=Use SOCKS proxy server
+options.firewall.socks.host=SOCKS proxy host:
+options.firewall.socks.port=SOCKS proxy port:
+#}}}
+
+#{{{ Save & Backup pane
+options.save-back.label=Saving & Backup
+
+options.save-back.autosave=Autosave frequency (secs):
+options.save-back.backups=Max number of backups:
+options.save-back.backupDirectory=Backup directory:
+options.save-back.backupPrefix=Backup filename prefix:
+options.save-back.backupSuffix=Backup filename suffix:
+options.save-back.backupEverySave=Backup on every save
+options.save-back.twoStageSave=Two-stage save (safer but resets file permissions owner on some filesystems)
+options.save-back.twoStageSave.tooltip=Stage 1: Create a temporary file and save to it. Stage 2: Rename the temporary file to the real name.
+options.save-back.confirmSaveAll="Save All Buffers" asks for confirmation
+options.save-back.autosaveUntitled=Autosave untitled buffers
+options.save-back.suppressNotSavedConfirmUntitled=Never mark Untitled buffers dirty.
+options.save-back.suppressNotSavedConfirmUntitled.tooltip=Checking this means untitled buffers get wiped out whenever a new one is created (it's a feature!)
+options.save-back.useMD5forDirtyCalculation=Never mark buffers dirty if contents are unchanged.
+options.save-back.useMD5forDirtyCalculation.tooltip=Compare with length and MD5 hash of  buffer at load time, to decide if an edited buffer is still dirty.
+options.save-back.saveAsUsesFSB="Save As" defaults to File System Browser directory
+#}}}
+
+#{{{ Shortcuts pane
+options.shortcuts.deletekeymap.label=delete
+options.shortcuts.deletekeymap.dialog.label=Delete the keymap
+options.shortcuts.deletekeymap.dialog.title=Delete
+options.shortcuts.duplicatekeymap.label=duplicate
+options.shortcuts.duplicatekeymap.dialog.label=Choose the new keymap name
+options.shortcuts.duplicatekeymap.keymapalreadyexists.label=The name already exists, choose another one
+options.shortcuts.duplicatekeymap.dialog.title=keymap name
+options.shortcuts.resetkeymap.label=reset
+options.shortcuts.resetkeymap.dialog.label=Reset the keymap
+options.shortcuts.resetkeymap.dialog.title=reset keymap
+options.shortcuts.keymap.label=Choose keymap:
+options.shortcuts.label=Shortcuts
+options.shortcuts.select.label=Edit Shortcuts:
+options.shortcuts.select.tooltip=You can select globals, macros, or plugin shortcuts
+options.shortcuts.name=Command
+options.shortcuts.shortcut1=Primary shortcut
+options.shortcuts.shortcut2=Alternative shortcut
+options.shortcuts.filter.label=Filter:
+options.shortcuts.filter.tooltip=Show only actions whose name contains this text
+options.shortcuts.clear.label=Clear
+
+grab-key.title=Specify Shortcut
+grab-key.caption=Press the desired shortcut for "{0}", then click OK.
+grab-key.keyboard-test=Input the key strokes that are causing problems.
+grab-key.assigned-to=Currently assigned to: {0}
+grab-key.assigned-to.none=<none>
+grab-key.assigned-to.prefix={0} prefix
+grab-key.clear=Clear
+grab-key.remove=Remove Current
+
+grab-key.remove-ask.title=Remove Shortcut?
+grab-key.remove-ask.message=\
+	You didn't specify a new shortcut.\n\
+	Do you want to remove the current shortcut?
+
+grab-key.duplicate-alt-shortcut.title=Duplicate Shortcut
+grab-key.duplicate-alt-shortcut.message=\
+	The shortcut you selected duplicates the other\n\
+	shortcut for this item. Please choose another.
+
+grab-key.duplicate-shortcut.title=Duplicate Shortcut
+grab-key.duplicate-shortcut.message=\
+	This shortcut is already assigned to\n\
+	"{0}".\n\
+	\n\
+	Do you want to override this assignment?
+
+grab-key.prefix-shortcut.title=Invalid Shortcut
+grab-key.prefix-shortcut.message=\
+	You cannot use this shortcut, because\n\
+	it is a prefix to other shortcuts.\n\
+	Please choose another.
+#}}}
+
+#{{{ Status bar pane
+options.status.label=Status Bar
+options.status.visible=Show status bar
+options.status.plainview.visible=Show status bar in plain views
+options.status.foreground=Status bar text:
+options.status.background=Status bar background:
+options.status.memory.foreground=Memory indicator foreground:
+options.status.memory.background=Memory indicator background:
+options.status.edit.title=Edit Status Bar Entry
+options.status.edit.labelRadioButton=label
+options.status.edit.widgetRadioButton=widget
+options.status.edit.labelLabel=Type a label:
+options.status.edit.widgetLabel=Choose a widget:
+options.status.caret.linenumber=Show caret line number
+options.status.caret.dot=Show caret offset from start of line
+options.status.caret.virtual=Show caret virtual offset from start of line
+options.status.caret.offset=Show caret offset from start of file
+options.status.caret.bufferlength=Show length of file
+options.status.caret.title=Caret position display options:
+#}}}
+
+#{{{ Syntax Highlighting pane
+options.syntax.label=Syntax Highlighting
+options.syntax.object=Token type
+options.syntax.style=Text style
+options.syntax.foldLine.1=Collapsed fold line, level 1
+options.syntax.foldLine.2=Collapsed fold line, level 2
+options.syntax.foldLine.3=Collapsed fold line, level 3
+options.syntax.foldLine.0=Collapsed fold line, level > 3
+#}}}
+
+#{{{ Text Area pane
+options.textarea.label=Text Area
+options.textarea.font=Text font:
+options.textarea.fontSubst=Additional fonts with font substitution
+options.textarea.fontSubst.tooltip=Search other fonts for glyphs that may be missing from selected Text Font (instead of showing rectangles)
+options.textarea.fontSubstList=Font substitution: Preferred fonts:
+options.textarea.fontSubstSystemFonts=Font substitution: Search all system fonts
+options.textarea.fontSubstWarning.label=Font substitution
+options.textarea.fontSubstWarning=Without system fonts you will need preferred fonts.
+options.textarea.foreground=Text color:
+options.textarea.background=Background color:
+options.textarea.caret=Caret:
+options.textarea.blinkCaret=blinking
+options.textarea.blockCaret=block
+options.textarea.thickCaret=thick
+options.textarea.selection=Single selection:
+options.textarea.multipleSelection=Multiple selection:
+options.textarea.selectionFg=Selection foreground:
+options.textarea.lineHighlight=Highlight current line:
+options.textarea.structureHighlight=Highlight matching elements:
+options.textarea.eolMarkers=End of line markers:
+options.textarea.wrapGuide=Wrap guide:
+options.textarea.electricBorders=Electric (auto scroll) borders
+options.textarea.stdNextPrevWord=Go to next/previous word commands eat whitespace
+options.textarea.antiAlias=Anti Aliased smooth text
+options.textarea.antiAlias.tooltip=Slows down display on some systems
+options.textarea.fracFontMetrics=Fractional font metrics (for better smooth \
+	text display)
+options.textarea.fracFontMetrics.tooltip=Not recommended with subpixel antialiasing
+options.textarea.stripTrailingEOL=Hide final end of line (if any)
+options.textarea.completeFromAllBuffers=Complete words from all open buffers (default is \
+    to limit search to currently visible buffers)
+options.textarea.lineSpacing.label=Extra vertical line spacing (in pixels):
+#}}}
+
+#{{{ Tool Bar pane
+options.toolbar.label=Tool Bar
+options.toolbar.showToolbar=Show tool bar
+options.toolbar.caption=Buttons to display on tool bar:
+options.toolbar.add=Add...
+options.toolbar.edit=Edit...
+options.toolbar.remove=Remove
+options.toolbar.moveUp=Move Up
+options.toolbar.moveDown=Move Down
+options.toolbar.reset=Reset to Default
+options.toolbar.edit.title=Edit Tool Bar Entry
+options.toolbar.edit.caption=Type:
+options.toolbar.edit.separator=Separator
+options.toolbar.edit.action=Command or macro:
+options.toolbar.edit.builtin=Use built-in icon:
+options.toolbar.edit.file=Load icon from file:
+options.toolbar.edit.choose=Choose
+options.toolbar.edit.no-icon=No icon selected
+
+options.toolbar.reset.dialog.title=Reset to Default
+options.toolbar.reset.dialog.message=Are you sure you want to reset the toolbar to the installation default?
+#}}}
+
+#{{{ View pane
+options.view.label=View
+options.view.viewLayout=View layout
+options.view.floatableToolbars=Floatable Toolbars
+options.view.alternateDockingLayout=Alternate docked window placement
+options.view.alternateToolBarLayout=Alternate tool bar placement
+options.view.showFullPath=Show full path of buffer in title bar
+options.view.showSearchbar=Always show search bar
+options.view.beepOnSearchAutoWrap=Beep when searching automatically wraps
+options.view.showBufferSwitcher=Show buffer switcher
+options.view.bufferSwitcherMaxRowsCount=Visible rows in buffer switcher:
+options.view.sortBuffers=Sort buffer sets
+options.view.sortByName=Sort buffer sets by file name, instead of path name
+options.view.fullScreenIncludesMenu=Show the menu bar in full-screen mode
+options.view.fullScreenIncludesToolbar=Show the toolbars in full-screen mode
+options.view.fullScreenIncludesStatus=Show the status bar in full-screen mode
+options.bufferset.scope=BufferSet scope:
+options.editpane.bufferset.contain=New BufferSets contain:
+options.editpane.bufferset.newbufferset.copy=copy of current BufferSet
+options.editpane.bufferset.newbufferset.empty=an empty buffer
+options.editpane.bufferset.newbufferset.currentbuffer=current buffer only
+#}}}
+
+
+
+#{{{ File System Browser panes
+options.browser.label=File System Browser
+
+options.browser.colors.label=Colors
+options.browser.colors.glob=File name glob
+options.browser.colors.color=Color
+options.browser.colors.add=Add
+options.browser.colors.remove=Remove
+
+options.browser.general.label=General
+options.browser.general.defaultPath=Default path:
+options.browser.general.defaultPath.favorites=Favorites
+options.browser.general.defaultPath.home=Home directory
+options.browser.general.defaultPath.last=Most recently visited directory
+options.browser.general.defaultPath.buffer=Parent directory of current buffer
+options.browser.general.defaultPath.working=Working directory of jEdit process
+options.browser.general.showMenubar=Show menu bar
+options.browser.general.showToolbar=Show tool bar
+options.browser.general.showIcons=Show icons
+options.browser.general.showHiddenFiles=Show hidden files
+options.browser.general.sortIgnoreCase=Ignore case when sorting
+options.browser.general.sortMixFilesAndDirs=Mix files and directories
+options.browser.general.doubleClickClose=Double-clicking an open file closes it
+options.browser.general.currentBufferFilter=Filter in file dialogs is \
+	current buffer extension
+options.browser.general.useDefaultIcons=Use default icons
+#}}}
+
+#{{{ Browser Context Menu
+options.browser.custom.context.label=Context menu
+options.browser.custom.context.caption=Custom items in browser right click menu:
+#}}}
+
+#{{{ Font selector
+font-selector.title=Font Selector
+font-selector.family=Font family:
+font-selector.size=Font size:
+font-selector.style=Font style:
+font-selector.plain=Plain
+font-selector.bold=Bold
+font-selector.italic=Italic
+font-selector.bolditalic=Bold italic
+font-selector.preview=Preview
+font-selector.long-text=The quick brown fox jumps over the lazy dog.
+#}}}
+
+#{{{ Color chooser, used by options.syntaxs
+colorChooser.title=Pick a Color
+#}}}
+
+#{{{ Style editor, used by options.syntaxs
+style-editor.title=Style Editor
+style-editor.tokenType=Token type:
+style-editor.italics=Italics
+style-editor.bold=Bold
+style-editor.fgColor=Text color:
+style-editor.bgColor=Background color:
+#}}}
+
+#}}}
+
+#{{{ Plugin options dialog
+plugin-options.title=Options
+options.plugins.label=Plugins
+options.no-plugins.label=No Plugin Options
+#}}}
+
+#{{{ Help viewer
+helpviewer.title=jEdit Help
+helpviewer.loading=Loading...
+helpviewer.back.label=Back
+helpviewer.forward.label=Forward
+
+helpviewer.toc.loading=Loading...
+helpviewer.toc.label=Contents
+helpviewer.toc.welcome=Welcome to jEdit
+helpviewer.toc.readme=General Information
+helpviewer.toc.changes=Detailed Change Log
+helpviewer.toc.todo=To Do List and Known Bugs
+helpviewer.toc.copying=GNU General Public License
+helpviewer.toc.copying-doc=GNU Free Documentation License
+helpviewer.toc.copying-apache=Apache License
+helpviewer.toc.copying-plugins=Plugin Licensing Amendment
+helpviewer.toc.plugins=Plugins
+helpviewer.toc.online-apidocs=jEdit API Reference (Online)
+
+helpviewer.search.label=Search
+helpviewer.search.caption=Search for:
+helpviewer.searching=Searching...
+helpviewer.no-results=No results
+#}}}
+
+#{{{ Tip of the day window
+tip.title=Tip of the Day
+tip.caption=Did you know...
+tip.show-next-time=Show tips on startup
+tip.next-tip=Next Tip
+
+tip.not-found=doc/tips directory not found
+#}}}
+
+#{{{ Activity log
+log-viewer.title=Activity Log
+log-viewer.caption=Full text of log is stored in {0}.
+log-viewer.copy=Copy
+log-viewer.tail.label=Tail
+#}}}
+
+#{{{ Marker Viewer
+view-markers.label=Vie$w Markers
+view-markers.title=Markers
+#}}}
+
+#{{{ I/O progress monitor
+io-progress-monitor.title=I/O Progress Monitor
+io-progress-monitor.caption={0} pending request(s).
+io-progress-monitor.idle=Thread idle
+io-progress-monitor.abort=Abort
+
+#{{{ I/O abort dialog box
+abort.title=Abort I/O
+abort.message=Are you sure you want to abort the currently executing\n\
+	input/output request? If you are aborting a file save, this may\n\
+	result in data loss.
+#}}}
+
+#}}}
+
+#{{{ Task  monitor
+task-monitor.title=Task Monitor
+#}}}
+
+#{{{ VFS browser
+vfs.browser.title=File Browser
+vfs.browser.longtitle=File System Browser
+vfs.browser.title.open=File Browser - Open
+vfs.browser.title.save=File Browser - Save
+vfs.browser.title.dialog=File Browser - Open
+vfs.browser.path=Path:
+vfs.browser.path.mnemonic=p
+vfs.browser.filter=Filter:
+vfs.browser.tree.loading=Loading...
+
+vfs.browser.name=Name
+vfs.browser.type=Type
+vfs.browser.type.file=File
+vfs.browser.type.directory=Directory
+vfs.browser.type.filesystem=File system
+vfs.browser.status=Status
+vfs.browser.status.no=No access
+vfs.browser.status.ro=Read only
+vfs.browser.status.append=Append only
+vfs.browser.status.rw=Read/write
+vfs.browser.size=Size
+vfs.browser.modified=Last modified
+
+vfs.browser.file_filter.glob=Glob File Filter
+vfs.browser.file_filter.dir_only=Directories Only
+
+#{{{ Actions
+vfs.browser.browse-window.label=Browse in New Window
+vfs.browser.browse.label=Browse
+vfs.browser.close.label=Close
+vfs.browser.copy-path.label=Copy
+vfs.browser.delete.label=Delete...
+vfs.browser.delete.shortcut=DELETE
+vfs.browser.home.label=Home Directory
+vfs.browser.home.shortcut=~
+vfs.browser.properties.label=Properties
+vfs.browser.properties.title=File/Directory Properties
+vfs.browser.insert.label=Insert
+vfs.browser.new-directory.label=New Directory...
+vfs.browser.new-directory.shortcut=INSERT
+vfs.browser.new-file.label=New File
+vfs.browser.new-file.shortcut=C+n
+vfs.browser.open.label=Open
+vfs.browser.open-desktop.label=Open in $Desktop
+vfs.browser.other-encoding-2.label=Other ({0})...
+vfs.browser.other-encoding.label=Other...
+vfs.browser.reload.label=Reload Directory
+vfs.browser.reload.shortcut=F5
+vfs.browser.rename.label=Rename...
+vfs.browser.rename.shortcut=F2
+vfs.browser.roots.label=Root Directory
+vfs.browser.roots.shortcut=/
+vfs.browser.search-directory.label=Search in Directory...
+vfs.browser.show-hidden-files.label=Show Hidden Files
+vfs.browser.synchronize.label=Directory of Current Buffer
+vfs.browser.synchronize.shortcut=-
+vfs.browser.up.label=Parent Directory
+vfs.browser.up.shortcut=A+Up
+vfs.browser.paste.label=Paste
+vfs.browser.previous.label=Previous Directory
+vfs.browser.previous.shortcut=A+Left
+vfs.browser.next.label=Next Directory
+vfs.browser.next.shortcut=A+Right
+#}}}
+
+#{{{ Tool bar
+
+#}}}
+
+#{{{ Commands menu
+vfs.browser.commands.label=Commands
+vfs.browser.commands.encoding.label=Encoding
+vfs.browser.commands.encoding.auto-detect=Auto-detect
+
+vfs.browser.open-in.label=Open in
+vfs.browser.open-view.label=New View
+vfs.browser.open-plain-view.label=New Plain View
+vfs.browser.open-split.label=New Split
+#}}}
+
+#{{{ Plugins menu
+vfs.browser.plugins.label=Plugins
+vfs.browser.plugins.plugin-manager.label=Plugin Manager...
+vfs.browser.plugins.plugin-options.label=Plugin Options...
+vfs.browser.plugins.no-plugins.label=No Plugins
+#}}}
+
+#{{{ Favorites menu
+vfs.browser.favorites.label=Favorites
+vfs.browser.favorites.add-to-favorites.label=Add to Favorites
+vfs.browser.favorites.edit-favorites.label=Edit Favorites
+vfs.browser.favorites.no-favorites.label=No Favorites
+#}}}
+
+vfs.browser.dialog.open=Open
+vfs.browser.dialog.save=Save
+vfs.browser.dialog.choose-dir=Choose
+vfs.browser.dialog.filename=File name:
+vfs.browser.dialog.filename.mnemonic=f
+
+#{{{ Dialogs
+vfs.browser.bad-filter.title=Invalid Filter
+vfs.browser.bad-filter.message=The filter {0} is invalid ({1})
+
+vfs.browser.recurse-favorites.title=Cannot Add Favorites to Itself
+vfs.browser.recurse-favorites.message=The favorites list cannot be added to itself.
+
+vfs.browser.delete-confirm.title=Delete File Confirmation
+vfs.browser.delete-confirm.message=Are you sure you want to delete the following {1}?\n\n\
+	{0}
+
+vfs.browser.delete-favorites.title=Delete From Favorites
+vfs.browser.delete-favorites.message=Are you sure you want to remove the following files \
+	from the favorites?\n\n\
+	{0}
+
+vfs.browser.rename.title=Rename File
+vfs.browser.rename.message=Enter a new name for {0}:
+
+vfs.browser.mkdir.title=New Directory
+vfs.browser.mkdir.message=Name (or path) of new directory:
+#}}}
+
+#}}}
+
+#{{{ I/O status messages
+vfs.status.load=Loading {0}
+vfs.status.load-markers=Loading markers for {0}
+vfs.status.save=Saving {0}
+vfs.status.save-markers=Saving markers for {0}
+vfs.status.autosave=Autosaving {0}
+vfs.status.listing-directory=Listing {0}
+vfs.status.deleting=Deleting {0}
+vfs.status.renaming=Renaming {0} to {1}
+#}}}
+
+#{{{ Plugin manager
+
+plugin-manager.title=Plugin Manager
+
+plugin-manager.hide-libraries=Hide libraries
+
+plugin-manager.mgr-options=Download Options...
+plugin-manager.plugin-options=Plugin Options...
+plugin-manager.done=Close
+
+plugin-manager.remove-confirm.title=Remove Plugins
+plugin-manager.remove-confirm.message=Are you sure you want to remove the \
+	following plugins?
+
+plugin-manager.dependency.title=Plugin Dependency
+plugin-manager.dependency.message={0} is required by the following plugins.\n\
+	Deselecting {0} will also deselect the below plugins:
+
+plugin-manager.remove-dependencies.title=Plugin Dependency
+plugin-manager.remove-dependencies.message=The removed plugins are required by the following plugins.\n\
+	Removing them will also deselect the below plugins:
+
+plugin-manager.cleanup.label=Cleanup
+plugin-manager.cleanup.title=Cleanup plugin data
+plugin-manager.cleanup.message=Remove the data of the following plugins:
+
+plugin-manager.noOrphan.label=Find orphan
+plugin-manager.noOrphan.title=No orphan jars found
+plugin-manager.noOrphan.message=There was no orphan jars in your jEdit installation
+
+plugin-manager.findOrphan.label=Find orphan
+plugin-manager.findOrphan.title=Find orphan jars
+plugin-manager.findOrphan.message=The following jars do not belong to any plugin\n\
+	remove them ?\n (be careful, they can be declared dynamically in some \n\
+  plugins like JDBC drivers):
+
+install-plugins.depend.title=Dependency Required
+install-plugins.depend.message=One or more of the plugins you are installing\n\
+	require additional plugins. They will be automatically\n\
+	installed if you continue.
+
+plugin-manager.status.loaded=Loaded
+plugin-manager.status.not-loaded=Not loaded
+plugin-manager.status.error=Error
+
+plugin-manager.list-download-connect=Connecting to plugins.jedit.org
+plugin-manager.list-download=Downloading plugin list from plugins.jedit.org
+plugin-manager.list-download.mirror-autoselect-error.title=Error selecting mirror
+plugin-manager.list-download.mirror-autoselect-error.message=Error auto-selecting mirror:\n\
+	{0}\n\
+	Choosing a specific mirror may work.
+plugin-manager.list-download.need-password.title=HTTP Proxy needs password
+plugin-manager.list-download.need-password.message=HTTP Proxy needs password.\n\
+Please configure a valid username/password in "Download Options".
+plugin-manager.list-download.disconnected.title=Error downloading plugin list
+plugin-manager.list-download.disconnected.message=The plugin list can''t be downloaded:\n\
+host {0} is not available. It may be worth checking your internet connection...
+plugin-manager.list-download.generic-error.title=Error downloading plugin list
+plugin-manager.list-download.generic-error.message=Error downloading plugin list:\n\
+error is {0} - {1}
+plugin-manager.filterField=Show only plugins whose name contains this text
+
+#{{{ Plugin management
+manage-plugins.title=Manage
+
+manage-plugins.info.name=Name
+manage-plugins.info.version=Version
+manage-plugins.info.status=Status
+manage-plugins.info.data=Data
+
+manage-plugins.data-size.unknown=<unknown>
+
+manage-plugins.remove=Remove...
+manage-plugins.help=Help...
+plugin-load-error.message=Unable to load plugin
+plugin-load-error.title=Plugin load error
+#}}}
+
+#{{{ Plugin installation
+install-plugins.title=Install
+
+install-plugins.info.name=Name
+install-plugins.info.size=Size
+install-plugins.info.releaseDate=Release date
+install-plugins.info.version=Version
+install-plugins.info.category=Category
+
+install-plugins.totalSize={0} plugin(s), total size: {1}
+install-plugins.select-all=Select All
+install-plugins.install=Install
+install-plugins.show-updates=Show Updates
+
+install-plugins.info=<b>Author</b>: {0}\n\
+	<b>Released</b>: {1}\n\
+	{2}
+
+update-plugins.title=Update
+
+plugin-manager.progress=Downloading {0} from mirror {1}
+plugin-manager.progress.title=Installing plugin(s)
+plugin-manager.progress.stop=Stop
+#}}}
+
+#{{{ Plugin remove error
+plugin-manager.remove-failed.title=Remove Failed
+plugin-manager.remove-failed.message=The plugin {0}\n\
+	could not be removed.
+#}}}
+
+#}}}
+
+#{{{ File Properties Dialog
+fileprop.name=Name
+fileprop.path=Path
+fileprop.lastmod=Last Modified
+fileprop.size=Size
+fileprop.properties=Properties
+fileprop.readable=Readable
+fileprop.writeable=Writeable
+fileprop.attribute=Attribute
+fileprop.okBtn=OK
+fileprop.cancelBtn=Cancel
+fileprop.selectedFiles=Selected files
+fileprop.selectedDirectories=Selected directories
+#}}}
+
+#{{{ Activity log viewer
+log-viewer.dialog.title=Activity Log Settings
+log-viewer.settings.label=Settings
+log-viewer.message.label=Message Display:
+log-viewer.message.debug.label=Debug
+log-viewer.message.message.label=Message
+log-viewer.message.notice.label=Notice
+log-viewer.message.warning.label=Warning
+log-viewer.message.error.label=Error
+#}}}
+
+logs-remove-all-errors.label=Remove all errors
+
+taskmanager.remainingtasks.label={0} remaining task(s)
+
+#{{{ Statusbar Widgets
+# the widgets should have a label and a sample.
+# the label is displayed when choosing the list of widgets
+# the sample is an example of what the widget will show, for the
+# preview in the options
+statusbar.mode.label=Buffer edit mode (ex:java)
+statusbar.mode.sample=java
+statusbar.fold.label=Buffer fold handler (ex:explicit)
+statusbar.fold.sample=explicit
+statusbar.encoding.label=Buffer encoding (ex:UTF-8)
+statusbar.encoding.sample=UTF-8
+statusbar.wrap.label=Buffer wrapping mode (ex:N)
+statusbar.wrap.sample=N
+statusbar.indent.label=Automatic indentation (ex:F)
+statusbar.indent.sample=F
+statusbar.multiSelect.label=Buffer multiple selection mode (ex:m)
+statusbar.multiSelect.sample=m
+statusbar.rectSelect.label=Buffer rectangular selection mode (ex:r)
+statusbar.rectSelect.sample=r
+statusbar.overwrite.label=Buffer overwrite (ex:o)
+statusbar.overwrite.sample=o
+statusbar.lineSep.label=Buffer line separator (ex:U)
+statusbar.lineSep.sample=U
+statusbar.memory-status.label=Memory status (ex:9/24Mb)
+statusbar.memory-status.sample=9/24Mb
+statusbar.clock.label=Clock (ex:16:45)
+statusbar.clock.sample=16:45
+statusbar.buffersets.label=Bufferset scope (ex:G)
+statusbar.buffersets.sample=G
+statusbar.selection-length.label=Selection's length (ex:192)
+statusbar.selection-length.sample=192
+statusbar.last-modified.label=Date of last modification on disk (ex:12/03/11 16:43)
+statusbar.last-modified.sample=12/03/11 16:43
+statusbar.task-monitor.label=Task monitor (ex: 7 task(s))
+statusbar.task-monitor.tooltip=Click to see running tasks dockable
+statusbar.task-monitor.sample=7 task(s)
+statusbar.task-monitor.template={0} task(s)
+#}}}
+
+killring.load-memoryerror.message=<html>Unable to load previously deleted text. Please increase your memory heap space.<br>\
+  Press <b>start</b> to start jEdit anyway, or <br><b>stop</b> to stop and change your settings. <br>You can also <b>delete the history file</b> and start jEdit</html>
+killring.load-memoryerror.title=Memory error
+killring.start=start
+killring.stop=stop
+killring.delete=delete killring and start
+
+#}}}
+
+#{{{ Macros
+
+#{{{ Properties used by macros
+
+#{{{ common
+macro.rs.general.ErrorNotEditableDialog.title=Write permission
+macro.rs.general.ErrorNotEditableDialog.message=Buffer is not editable!
+#}}}
+
+#{{{ Clipboard
+
+#{{{ Copy Lines Containing
+macro.rs.CopyLinesContaining.CopyLinesContaining.label=Copy lines containing:
+macro.rs.CopyLinesContaining.LinesCopied.message=line(s) copied
+#}}}
+
+#{{{ Cut Lines Containing
+macro.rs.CutLinesContaining.CutLinesContaining.label=Cut lines containing:
+macro.rs.CutLinesContaining.LinesCut.message=line(s) cut
+#}}}
+
+#}}}
+
+#{{{ Editing
+
+#{{{ Go to column
+macro.rs.GoToColumn.ColumnBefore.label=Column (between 1 and
+macro.rs.GoToColumn.ColumnAfter.label=):
+#}}}
+
+#{{{ Key Words to Uppercase
+macro.rs.KeywordsToUpperCase.ConvertedKeywords.message=Converted Keywords to Upper Case
+#}}}
+
+#{{{ Mode Switcher
+macro.rs.BufferModeSwitcher.MainDialog.title=Buffer Mode Switcher
+macro.rs.BufferModeSwitcher.EnterBufferMode.label=Enter buffer mode:
+macro.rs.BufferModeSwitcher.ChangingBufferMode.label=Changing mode of buffer
+macro.rs.BufferModeSwitcher.To.label=to
+macro.rs.BufferModeSwitcher.Mode.label=Mode
+macro.rs.BufferModeSwitcher.NotFound.label=Not found
+#}}}
+
+#{{{ Moves Lines Down - Move Lines Up
+macro.rs.MoveLines.NoMultipleSelection.error=Line move does not work with multiple selection.
+#}}}
+
+#}}}
+
+#{{{ Files
+
+#{{{ Browse Directory
+macro.rs.BrowseDirectory.DirectoryBrowse.label=Directory to browse:
+#}}}
+
+#{{{ Buffer Switcher
+macro.rs.BufferSwitcher.OpenBuffers.label=open Buffers
+macro.rs.BufferSwitcher.QuickHelp.label=[ENTER] Switch to; [SPACE] Switch to, keep dialog; [DEL] Close Buffer
+macro.rs.BufferSwitcher.Help1.label=Help for Buffer Switcher macro:
+macro.rs.BufferSwitcher.Help2.label=DELETE closes selected buffer.
+macro.rs.BufferSwitcher.Help3.label=ENTER switches to selected buffer, closes dialog.
+macro.rs.BufferSwitcher.Help4.label=ESCAPE closes dialog.
+macro.rs.BufferSwitcher.Help5.label=SPACE switches to selected buffer, does not close dialog.
+macro.rs.BufferSwitcher.Help6.label=NOTE: This dialog will only be displayed once
+#}}}
+
+#{{{ Delete Current
+macro.rs.DeleteCurrent.NotOnDisk.error=Buffer doesn't exist on disk.
+macro.rs.DeleteCurrent.DeleteNotSupport.error=doesn't support deleting.
+macro.rs.DeleteCurrent.Deleted.message=Deleted:
+#}}}
+
+#{{{ Glob Close
+macro.rs.GlobClose.GlobPattern.label=Glob Pattern:
+macro.rs.GlobClose.ErrorGlobPattern.error=Error in glob pattern:
+#}}}
+
+#{{{ Next Dirty Buffer
+macro.rs.NextDirtyBuffer.NoOtherBufferDirty.message=No other buffers are dirty
+macro.rs.NextDirtyBuffer.NoBufferDirty.message=No buffers are dirty
+#}}}
+
+#{{{ open Path
+macro.rs.OpenPath.PathName.label=Path name:
+#}}}
+
+#{{{Toggle ReadOnly
+macro.rs.ToggleReadOnly.OnlyLocalFiles.error=This macro only works on local files.
+macro.rs.ToggleReadOnly.OnlyWindowsUnixMacos.error=This macro only works on Windows, Unix, & MacOS X.
+#}}}
+
+#}}}
+
+#{{{ Interface
+
+#{{{ Decrease Font Size - Increase Font Size
+macro.rs.ChangeFontSize.FontSize.message=Font size now:
+#}}}
+
+#}}}
+
+#{{{ Java
+
+#{{{ Create Constructor
+macro.rs.CreateConstructor.UnevenNumber.message=Uneven number of type names and variables.
+#}}}
+
+#{{{ Get Package Name
+macro.rs.GetPackageName.NotWorking1.error=This macro will not work when the Java interpreter
+macro.rs.GetPackageName.NotWorking2.error=loads jEdit with the '-jar' command line option.
+macro.rs.GetPackageName.NotFind.error=Could not find a package name.
+#}}}
+
+#{{{ Java File Save
+macro.rs.JavaFileSave.InfiniteLoop.error=Infinite loop:
+#}}}
+
+#{{{Make Get and Set Methods
+macro.rs.MakeGetAndSetMethods.GenerateCode.label=Generate Code
+macro.rs.MakeGetAndSetMethods.CreateGetMethods.label=Create Get Methods
+macro.rs.MakeGetAndSetMethods.CreateSetMethods.label=Create Set Methods
+macro.rs.MakeGetAndSetMethods.CreateGetandSetMethods.label=Create Get and Set Methods
+#}}}
+
+#}}}
+
+#{{{ Misc
+
+#{{{ Buffer to HyperSearch Results - HyperSearch Results to Buffer
+macro.rs.HyperSearchResults.WindowNotOpen.error=The 'HyperSearch Results' window is not open.
+macro.rs.HyperSearchResults.NotMatch.error=No HyperSearch matches.
+#}}}
+
+#{{{ Debug BufferSets
+macro.rs.DebugBuffersets.BuffersetDebugging.label=BUFFERSET DEBUGGING
+macro.rs.DebugBuffersets.BufferCount.label=BufferCount:
+macro.rs.DebugBuffersets.BufferList.label=BUFFER LIST
+macro.rs.DebugBuffersets.EndBufferList.label=END BUFFER LIST
+macro.rs.DebugBuffersets.EditpaneList.label=EDITPANE LIST
+macro.rs.DebugBuffersets.EndEditpaneList.label=END EDITPANE LIST
+#}}}
+
+#{{{ Display Abbreviations
+macro.rs.DisplayAbbreviations.Abbreviation.label=Abbreviation
+macro.rs.DisplayAbbreviations.Expansion.label=Expansion
+macro.rs.DisplayAbbreviations.Close.label=Close
+macro.rs.DisplayAbbreviations.WriteSet.label=Write set
+macro.rs.DisplayAbbreviations.WriteAll.label=Write all
+macro.rs.DisplayAbbreviations.AbbreviationList.label=Abbreviation list
+macro.rs.DisplayAbbreviations.CallingWTTNB.label=calling writeTableToNewBuffer for
+macro.rs.DisplayAbbreviations.SizeVector.label=size of vector:
+macro.rs.DisplayAbbreviations.jEditAbbreviationTable.label=jEdit Abbreviation Table
+macro.rs.DisplayAbbreviations.AbbreviationSet.label=Abbreviation set:
+macro.rs.DisplayAbbreviations.AbbreviationExpansion.label=Abbreviation    Expansion
+macro.rs.DisplayAbbreviations.NoAbbreviations.label=<< No abbreviations >>
+#}}}
+
+#{{{ Display Actions
+macro.rs.DisplayActions.jEditActionBar1.label=The jEdit action bar can be opened via the Utilities menu and is usually
+macro.rs.DisplayActions.jEditActionBar2.label=assigned to the C+ENTER keyboard shortcut.
+macro.rs.DisplayActions.NoLabel.label=<no label>
+#}}}
+
+#{{{ Display Character Code
+macro.rs.DisplayCharacterCode.CharacterAtCaret.label=Character at caret:
+#}}}
+
+#{{{ Display Shorcuts
+macro.rs.DisplayShortcuts.jEditShortcutTable.label=jEdit Keyboard Shortcut Table
+macro.rs.DisplayShortcuts.Name.label=Name
+macro.rs.DisplayShortcuts.Shortcut1.label=Shortcut - 1
+macro.rs.DisplayShortcuts.Shortcut2.label=Shortcut - 2
+macro.rs.DisplayShortcuts.Close.label=Close
+macro.rs.DisplayShortcuts.WriteToBuffer.label=Write to buffer
+macro.rs.DisplayShortcuts.ShortcutList.label=Keyboard shortcut list
+macro.rs.DisplayShortcuts.Center.label=Center
+macro.rs.DisplayShortcuts.South.label=South
+#}}}
+
+#{{{ Hex Convert
+macro.rs.HexConvert.Before.label=before:
+macro.rs.HexConvert.After.label=after:
+macro.rs.HexConvert.NotValidHex.label=is not valid hex string.
+macro.rs.HexConvert.ByteToString.label=Byte to String:
+#}}}
+
+#{{{ Make Bug Report
+macro.rs.MakeBugReport.OpeningActivityLog.error=Error opening Activity Log.
+macro.rs.MakeBugReport.UsefulEntriesForReport.label=Activity log entries that might be useful in a bug report:\n\n.
+macro.rs.MakeBugReport.MessagejEdit.label=[message] jEdit:
+macro.rs.MakeBugReport.NoticejEdit.label=[notice] jEdit:
+macro.rs.MakeBugReport.NoticeJarClassLoader.label=[notice] JARClassLoader:
+macro.rs.MakeBugReport.MessagejEditStartupComplete.label=[message] jEdit: Startup complete
+macro.rs.MakeBugReport.Error.label=[error]
+macro.rs.MakeBugReport.ReadingActivityLog.error=Error reading Activity Log
+#}}}
+
+#{{{ Run Script
+macro.rs.RunScript.SpecifyParametersForRunning.label=Specify parameters for running script under
+macro.rs.RunScript.ScriptExecutionCancelled.message=Script execution was cancelled.
+macro.rs.RunScript.FileNotScript.error=The current file does not appear to be a script.
+#}}}
+
+#{{{ Show Threads
+macro.rs.ShowThreads.Daemon.label=daemon
+macro.rs.ShowThreads.Priority.label=prio
+macro.rs.ShowThreads.NotStarted.label=not started
+macro.rs.ShowThreads.Interrupted.label=interrupted
+macro.rs.ShowThreads.CloseUpdate.label=[Esc] Close      [U] Update
+macro.rs.ShowThreads.CurrentThreads.label=Current Threads
+#}}}
+
+#}}}
+
+#{{{ Properties
+
+#{{{ Insert Buffer Properties
+macro.rs.InsertBufferProperties.InsertLocalProperties.label=Insert Buffer Local Properties
+macro.rs.InsertBufferProperties.Properties.label=Properties:
+macro.rs.InsertBufferProperties.Insert.label=Insert
+macro.rs.InsertBufferProperties.MustBeIn10Lines.message=Note: Buffer Local properties must in the first or last 10 lines of a buffer to be recognized by jEdit.
+#}}}
+
+#{{{ Look and Feel Properties
+macro.rs.LookAndFeelProperties.Listing.label=--listing look and feel property names--
+#}}}
+
+#{{{ System Properties
+macro.rs.SystemProperties.SystemProperties.label=System Properties
+#}}}
+
+#}}}
+
+#{{{ Text
+
+#{{{ Add Prefix And Suffix
+macro.rs.AddPrefixAndSuffix.MainDialog.title=Add prefix and suffix to selected lines
+macro.rs.AddPrefixAndSuffix.PrefixToAdd.label=Prefix to add:
+macro.rs.AddPrefixAndSuffix.SuffixToAdd.label=Suffix to add:
+#}}}
+
+#{{{ Color Picker
+macro.rs.ColorPicker.ColorPicker.label=Color Picker
+#}}}
+
+#{{{ Insert Date
+macro.rs.InsertDate.InternetTime.label=Internet Time
+#}}}
+
+#{{{ Insert Tag
+macro.rs.InsertTag.EnterNameTag.label=Enter name of tag:
+#}}}
+
+#{{{ Line_Filter
+macro.rs.LineFilter.MainDialog.title=LineFilter
+macro.rs.LineFilter.ignoreCaseCheckBox.label=Ignore case
+macro.rs.LineFilter.regexpPanelBorder.title=Pattern to compare (Regular Expression)
+macro.rs.LineFilter.processModeRadioButtonMatching.label=Matching
+macro.rs.LineFilter.processModeRadioButtonNotMatching.label=Not matching
+macro.rs.LineFilter.processModeOptionPanelBorder.title=Lines
+macro.rs.LineFilter.actionModeRadioButtonWrite.label=Write to new buffer
+macro.rs.LineFilter.actionModeRadioButtonDelete.label=Delete
+macro.rs.LineFilter.actionModeOptionPanelBorder.title=Action
+
+macro.rs.LineFilter.DeleteActionDisabled.message=Delete is not available
+macro.rs.LineFilter.MultipleSelection.message=Multiple selection is not supported
+macro.rs.LineFilter.BlockSelection.message=Rectangular selection is not supported
+
+macro.rs.LineFilter.SummaryDeleted.label=Lines deleted!
+macro.rs.LineFilter.SummaryWritten.label=Lines written to a new buffer.
+
+macro.rs.LineFilter.ErrorRegexpDialog.title=Invalid regular expression
+macro.rs.LineFilter.ErrorRegexpDialog.message=The regular expression is invalid!
+#}}}
+
+#{{{ Next Char
+macro.rs.InsertTag.EnterCharacter.label=Enter a character
+#}}}
+
+#{{{ Reverse Lines
+macro.rs.ReverseLines.NotWorkingRectangularSelection.error=Sorry, this macro doesn't work with Rectangular Selections.
+#}}}
+
+#{{{ Single Space Buffer
+macro.rs.SingleSpaceBuffer.NotDoubleSpaced.message=doesn't appear to be double-spaced:
+macro.rs.SingleSpaceBuffer.Line.message=Line
+macro.rs.SingleSpaceBuffer.NotBlank.message=isn't blank.
+#}}}
+
+#}}}
+
+#}}}
+
+#{{{ Macro Names for Macros Menu (only original macros in original folders!)
+
+#{{{ C
+macros.folder.C.label=C
+
+C/Include_Guard.label=Include Guard
+C/Toggle_Header_Source.label=Toggle Header Source
+#}}}
+
+#{{{ Clipboard
+macros.folder.Clipboard.label=Clipboard
+
+Clipboard/Copy_Lines.label=Copy Lines
+Clipboard/Copy_Lines_Containing.label=Copy Lines Containing
+Clipboard/Copy_Visible_Lines.label=Copy Visible Lines
+Clipboard/Cut_Lines.label=Cut Lines
+Clipboard/Cut_Lines_Containing.label=Cut Lines Containing
+Clipboard/Paste_Indent.label=Paste Indent
+#}}}
+
+#{{{ Editing
+macros.folder.Editing.label=Editing
+
+Editing/Duplicate_Lines_Above.label=Duplicate Lines Above
+Editing/Duplicate_Lines_Below.label=Duplicate Lines Below
+Editing/Emacs_Ctrl-K.label=Emacs Ctrl-K
+Editing/Emacs_Next_Line.label=Emacs Next Line
+Editing/Emacs_Previous_Line.label=Emacs Previous Line
+Editing/Go_to_Column.label=Go To Column
+Editing/Greedy_Backspace.label=Greedy Backspace
+Editing/Greedy_Delete.label=Greedy Delete
+Editing/Greedy_Left.label=Greedy Left
+Editing/Greedy_Right.label=Greedy Right
+Editing/Keywords_to_Upper_Case.label=Keywords to Upper Case
+Editing/Mode_Switcher.label=Mode Switcher
+Editing/Move_Lines_Down.label=Move Lines Down
+Editing/Move_Lines_Up.label=Move Lines Up
+Editing/Open_Line_Above.label=Open Line Above
+Editing/Open_Line_Below.label=Open Line Below
+Editing/Toggle_Fold.label=Toggle Fold
+#}}}
+
+#{{{ Files
+macros.folder.Files.label=Files
+
+Files/Browse_Buffer_Directory.label=Browse Buffer Directory
+Files/Browse_Directory.label=Browse Directory
+Files/Buffer_Switcher.label=Buffer Switcher
+Files/Close_All_Except_Active.label=Close All Except Active
+Files/Copy_Name_to_Clipboard.label=Copy Name to Clipboard
+Files/Copy_Path_to_Clipboard.label=Copy Path to Clipboard
+Files/Delete_Current.label=Delete Current
+Files/Duplicate_Buffer.label=Duplicate Buffer
+Files/Glob_Close.label=Glob Close
+Files/Insert_Selection.label=Insert Selection
+Files/Next_Dirty_Buffer.label=Next Dirty Buffer
+Files/Open_Path.label=Open Path
+Files/Open_Selection.label=Open Selection
+Files/Send_Buffer_To_Next_Split.label=Send Buffer To Next Split
+Files/Toggle_ReadOnly.label=Toggle ReadOnly
+#}}}
+
+#{{{ Interface
+macros.folder.Interface.label=Interface
+
+Interface/Decrease_Font_Size.label=Decrease Font Size
+Interface/Increase_Font_Size.label=Increase Font Size
+Interface/Open_Context_Menu.label=Open Context Menu
+Interface/Reset_TextArea.label=Reset TextArea
+Interface/Splitpane_Grow.label=Splitpane Grow
+Interface/Toggle_Bottom_Docking_Area.label=Toggle Bottom Docking Area
+Interface/Toggle_Left_Docking_Area.label=Toggle Left Docking Area
+Interface/Toggle_Right_Docking_Area.label=Toggle Right Docking Area
+Interface/Toggle_Top_Docking_Area.label=Toggle Top Docking Area
+#}}}
+
+#{{{ Java
+macros.folder.Java.label=Java
+
+Java/Create_Constructor.label=Create Constructor
+Java/Get_Class_Name.label=Get Class Name
+Java/Get_Package_Name.label=Get Package Name
+Java/Java_File_Save.label=Java File Save
+Java/Make_Get_and_Set_Methods.label=Make Get and Set Methods
+Java/Preview_JavaDoc_Of_Current_Buffer.label=Preview JavaDoc Of Current Buffer
+#}}}
+
+#{{{ Misc
+macros.folder.Misc.label=Misc
+
+Misc/Buffer_to_HyperSearch_Results.label=Buffer to HyperSearch_Results
+Misc/Debug_BufferSets.label=Debug BufferSets
+Misc/Display_Abbreviations.label=Display Abbreviations
+Misc/Display_Actions.label=Display Actions
+Misc/Display_Character_Code.label=Display Character Code
+Misc/Display_Shortcuts.label=Display Shortcuts
+Misc/Evaluate_Buffer_in_BeanShell.label=Evaluate Buffer in BeanShell
+Misc/Hex_Convert.label=Hex Convert
+Misc/HyperSearch_Results_to_Buffer.label=HyperSearch Results to Buffer
+Misc/Make_Bug_Report.label=Make Bug Report
+Misc/Run_Script.label=Run Script
+Misc/Show_Threads.label=Show Threads
+#}}}
+
+#{{{ Properties
+macros.folder.Properties.label=Properties
+
+Properties/Create_Plugin_Announcement.label=Create Plugin Announcement
+Properties/Insert_Buffer_Properties.label=Insert Buffer Properties
+Properties/jEdit_Properties.label=jEdit Properties
+Properties/Look_and_Feel_Properties.label=Look and Feel Properties
+Properties/System_Properties.label=System Properties
+#}}}
+
+#{{{ Text
+macros.folder.Text.label=Text
+
+Text/Add_Prefix_and_Suffix.label=Add Prefix and Suffix
+Text/Color_Picker.label=Color Picker
+Text/Compose_Tag.label=Compose Tag
+Text/Duplicate_Line.label=Duplicate Line
+Text/Insert_Date.label=Insert Date
+Text/Insert_Tag.label=Insert Tag
+Text/Line_Filter.label=Line Filter
+Text/Next_Char.label=Next Char
+Text/Reverse_Lines.label=Reverse Lines
+Text/Single_Space_Buffer.label=Single Space Buffer
+#}}}
+
+#}}}
+
+#}}}
diff --git a/org/jedit/localization/jedit_fr.props b/org/jedit/localization/jedit_fr.props
new file mode 100644
index 0000000..52cd89d
--- /dev/null
+++ b/org/jedit/localization/jedit_fr.props
@@ -0,0 +1,2529 @@
+###
+### jEdit user interface definitions,
+### :tabSize=8:indentSize=8:noTabs=false:
+### :folding=explicit:collapseFolds=1:
+### :encoding=UTF-8:
+###
+### Copyright (C) 1998, 2005 Slava Pestov
+### French translation by Jojaba (http://jojaba.free.fr)
+
+#{{{ jEdit core (jedit_gui.props)
+
+#{{{ Default user catalog file
+defaultCatalog=<?xml version="1.0"?>\n\
+	<!DOCTYPE MODES SYSTEM "catalog.dtd">\n\
+	\n\
+	<MODES>\n\
+	\n\
+	<!-- Ajoutez des lignes comme la suivante, une pour chaque mode d'édition ajouté : -->\n\
+	<!-- <MODE NAME="foo" FILE="foo.xml" FILE_NAME_GLOB="*.foo" /> -->\n\
+	\n\
+	</MODES>
+#}}}
+
+#{{{ Common strings
+common.ok=OK
+common.cancel=Annuler
+common.close=Fermer
+common.error=Erreur
+common.apply=Appliquer
+common.more=Plus
+common.insert=Insérer
+common.add=Ajouter
+common.remove=Supprimer
+common.moveUp=Monter
+common.moveDown=Descendre
+common.clearAll=Tout effacer
+common.selectAll=Tout sélectionner
+common.selectNone=Ne rien sélectionner
+
+lineSep.unix=Unix (\\n)
+lineSep.windows=DOS/Windows (\\r\\n)
+lineSep.mac=MacOS (\\r)
+#}}}
+
+#{{{ Miscellaneous
+history.caption=Historique de saisie
+
+action-set.jEdit=Commandes intégrées
+action-set.browser=Explorateur de fichiers
+action-set.macros=Macros
+action-set.plugin=Plugin : {0}
+
+macro-handler.beanshell.label=Script BeanShell
+macro-handler.beanshell.glob=*.bsh
+
+save-layout-failed.message=Impossible d''enregistrer la disposition d'ancrage.
+load-layout.title=Chargement de la disposition d'ancrage
+load-layout.message=Disposition d''ancrage à charger :
+save-layout.title=Enregistrement de la disposition d'ancrage
+save-layout.message=Disposition d''ancrage à enregistrer :
+#}}}
+
+#{{{ Tool bar
+view.search.find=Rechercher :
+view.search.close-tooltip=Masquer la barre de recherche (ÉCHAP)
+
+view.action.prompt=Action :
+view.action.no-completions=Aucune action de ce type trouvée
+view.action.close-tooltip=Masquer la barre action (ÉCHAP)
+#}}}
+
+#{{{ Context menu
+view.context.customize=Personnaliser ce menu...
+#}}}
+
+#{{{ System tray menu
+tray.newView.label=Nouvel affichage
+tray.newPlainView.label=Nouvel affichage simple
+tray.exit.label=Fermer
+#}}}
+
+#{{{ Menu bar
+
+#{{{ File menu
+file.label=$Fichier
+new-file.label=$Nouveau
+new-file-in-mode.label=Nouveau en $mode
+new-file-in-mode.dialog.title=Nouveau fichier
+new-file-in-mode.dialog.message=Avec mode d'édition :
+open-file.label=$Ouvrir...
+reload.label=$Recharger
+reload-all.label=Tout rechar$ger...
+close-buffer.label=$Fermer
+close-buffer.tooltip=Fermer le tampon dans le panneau d'édition des tampons uniquement.
+global-close-buffer.label=Fermer (général)
+global-close-buffer.tooltip=Fermer le tampon dans tous les panneaux d'édition et fenêtres
+closeall-except-active.tooltip=Effacer le jeu de tampons dans le panneau d'édition courant à l'exception du(des) tampon(s) affichés
+closeall-except-active.label=Fermer les au$tres
+closeall-bufferset.label=Tou&t fermer
+closeall-bufferset.tooltip=Fermer le jeu de tampons dans le panneau d'édition
+bufferset-toggle-exclusive.label=Basculer vers les jeux de tampons exclusifs
+bufferset-toggle-exclusive.tooltip=Lorsqu'un tampon est ouvert, le fermer dans d'autres jeux de tampons non inclus.
+close-all.label=Tout fer$mer (général)
+close-all.tooltip=Fermer tous les tampons dans toutes les fenêtres
+save.label=$Enregistrer
+save-as.label=Enregistrer $sous...
+save-a-copy-as.label=Enregistrer une co$pie sous...
+save-a-copy-as.tooltip=Ne modifie pas le chemin du tampon courant
+save-all.label=$Tout enregistrer...
+print.label=Impr$imer...
+page-setup.label=Mise en pag$e...
+# Print selection not yet implemented
+#print-selection.label=Imprime$r la sélection...
+exit.label=$Quitter
+
+#{{{ Recent Files menu
+recent-files.label=$Fichiers ouverts récemment
+recent-files.textfield.tooltip=Commencer é saisir le nom pour rechercher les résultats correspondants
+no-recent-files.label=Aucun fichier récemment ouvert
+clear-recent-files.label=Effacer la liste des fichiers
+#}}}
+
+reload-encoding.label=Recharger avec $encodage
+reload-encoding.error={0} n'est pas un encodage valide
+
+#}}}
+
+#{{{ Edit menu
+
+edit.label=$Édition
+undo.label=$Annuler
+redo.label=$Rétablir
+cut.label=$Couper
+copy.label=C$opier
+paste.label=Co$ller
+select-all.label=$Tout sélectionner
+word-count.label=Compter les $mots...
+complete-word.label=Com$pléter le mot
+expand-abbrev.label=Dé$velopper l'abréviation
+goto-line.label=Atteindre la li$gne...
+
+#{{{ More Clipboard menu
+clipboard.label=Plus de fonctions presse-$papiers
+cut-append.label=C$ouper et ajouter
+copy-append.label=$Copier et ajouter
+vertical-paste.label=Collage $vertical
+paste-previous.label=Coller l'élément précéd$ent...
+paste-deleted.label=Coller l'élément $supprimé...
+paste-special.label=Collage spécial...
+cut-string-register.label=Co$uper et placer dans le registre
+copy-string-register.label=Cop$ier vers le registre
+paste-string-register.label=Coller le contenu du $registre
+clear-string-register.label=Effacer le contenu du registre
+cut-append-string-register.label=Couper et ajou$ter au registre
+copy-append-string-register.label=Copier et $ajouter au registre
+vertical-paste-string-register.label=Collage vertica$l du contenu du registre
+view-registers.label=Voir les re$gistres...
+#}}}
+
+#{{{ More Selection menu
+selection.label=Autres types de $sélections
+select-none.label=$Aucune sélection
+select-word.label=Sélectionner un $mot
+select-line.label=Sélectionner une $ligne
+select-paragraph.label=Sélectionner un $paragraphe
+invert-selection.label=$Inverser la sélection
+toggle-multi-select.label=Sélection $multiple
+toggle-rect-select.label=Sélection $rectangulaire
+select-line-range.label=Séle$ction de lignes...
+#}}}
+
+#{{{ Text menu
+text.label=$Texte
+delete-line.label=$Supprimer les lignes
+delete-start-line.label=Supprimer à partir du $début de la ligne
+delete-end-line.label=Supprimer jusqu'à la $fin de la ligne
+join-lines.label=$Rassembler les lignes
+delete-paragraph.label=Supprimer le $paragraphe
+format-paragraph.label=F$ormater le paragraphe
+to-lower.label=Mettre en $minuscules
+to-upper.label=Mettre en m$ajuscules
+#}}}
+
+#{{{ Indent menu
+indent.label=$Retrait
+indent-lines.label=Retrait des $lignes selectionnées
+shift-left.label=$Diminuer le retrait
+shift-right.label=$Augmenter le retrait
+remove-trailing-ws.label=$Supprimer les espaces en fin de ligne
+spaces-to-tabs.label=Convertir les espaces en $tabulations
+tabs-to-spaces.label=Convertir les tabulations en $espaces
+#}}}
+
+#{{{ Source menu
+source.label=Code
+range-comment.label=Plage en commentai$re
+line-comment.label=$Ligne en commentaire
+select-block.label=$Sélectionner le bloc de code
+match-bracket.label=Atteindre la parenthèse $correspondante
+prev-bracket.label=Atteindre la parenthèse $précédente
+next-bracket.label=Atteindre la parenthèse suiva$nte
+#}}}
+
+#}}}
+
+#{{{ Search menu
+search.label=$Rechercher
+find.label=$Rechercher...
+find-next.label=Rechercher le $suivant
+find-prev.label=Rechercher le pré$cédent
+search-in-open-buffers.label=Rechercher dans les ta$mpons ouverts...
+search-in-directory.label=Rechercher dans un ré$pertoire...
+replace-in-selection.label=Remp$lacer dans la sélection
+replace-and-find-next.label=Remplacer et rec$hercher le suivant
+replace-all.label=To$ut remplacer
+quick-search.label=Barre de recherche $incrémentale
+hypersearch.label=Barre d'$Hyper-recherche
+quick-search-word.label=Recherche incrémentale de m$ot
+hypersearch-word.label=Hyper-recherche de mot
+whole-word.label=$Tout le mot
+ignore-case.label=Ignorer la $casse
+regexp.label=E$xpressions régulières
+hypersearch-results.label=Résultats de l'Hyper-recherche
+#}}}
+
+#{{{ Markers menu
+markers.label=$Marqueurs
+add-marker.label=$Ajouter/supprimer un marqueur
+add-marker-shortcut.label=Ajouter un marqueur ave$c raccourci
+remove-all-markers.label=Supprimer tous les $marqueurs
+goto-marker.label=A$tteindre un marqueur
+select-marker.label=Envoyer la $sélection vers le marqueur
+swap-marker.label=$Permuter curseur et marqueur
+prev-marker.label=Atteindre le marqueur p$récédent
+next-marker.label=Atteindre le marqueur sui$vant
+no-markers.label=Pas de marqueurs
+markers.blank-line=[Ligne vide]
+#}}}
+
+#{{{ Folding menu
+folds.label=$Replis
+collapse-fold.label=$Fermer le repli
+expand-one-level.label=$Développer le repli d'un niveau
+expand-fold.label=Développer le repli $entièrement
+collapse-all-folds.label=Fermer $tous les replis
+expand-folds.label=Ouvrir les replis avec niveaux
+expand-all-folds.label=Ou$vrir tous les replis
+select-fold.label=$Sélectionner un repli
+add-explicit-fold.label=A$jout d'un repli explicite
+narrow-to-fold.label=Tout sauf le re$pli
+narrow-to-selection.label=Tout sauf la sé$lection
+parent-fold.label=Atteindre le repli pare$nt
+prev-fold.label=Atteindre le repli $précédent
+next-fold.label=Atteindre le repli sui$vant
+#}}}
+
+#{{{ View menu
+view.label=$Fenêtres
+new-view.label=Nouvelle $fenêtre
+new-view.tooltip=Nouvelle fenêtre principale avec fenêtres ancrées
+new-plain-view.label=Nouve$lle fenêtre simple
+new-plain-view.tooltip=Nouvelle fenêtre principale avec moins de barre d'outils et sans fenêtres ancrées
+close-view.label=$Fermer la fenêtre
+close-view.tooltip=Ferme la fenêtre principale et quitte jEdit s'il n'y a qu'une fenêtre
+prev-buffer.label=Atteindre le tampon $précédent
+next-buffer.label=Atteindre le tampon $suivant
+recent-buffer.label=Atteindre le de$rnier tampon
+toggle-buffer-switcher.label=Sélecteur de $tampons
+focus-buffer-switcher.label=Activer le sélecteur de tampons
+toggle-line-numbers.label=Numéros de $Lignes
+toggle-statusbar.label=$Barre d'état
+toggle-gutter.label=$Marge
+show-context-menu.label=Menu contextuel
+set-view-title.label=Définir un titre à la fenêtre...
+set-view-title.tooltip=Défini le titre de la fenêtre principale pour identification aisée à partir du bureau.
+toggle-full-screen.label=Mode $plein écran
+
+#{{{ Scrolling menu
+scrolling.label=Défilemen$t
+scroll-to-current-line.label=Se rendre à la $ligne active
+scroll-and-center.label=$Se déplacer et centrer le curseur
+center-caret.label=$Placer le curseur au centre de l'écran
+scroll-up-line.label=Re$monter d'une ligne
+scroll-down-line.label=De$scendre d'une ligne
+scroll-up-page.label=$Remonter d'une page
+scroll-down-page.label=$Descendre d'une page
+#}}}
+
+#{{{ Splitting menu
+splitting.label=$Partage
+split-horizontal.label=Partager $horizontalement
+split-vertical.label=Partager $verticalement
+unsplit-current.label=$Annuler le partage de la zone courante
+unsplit.label=Annuler $tous les partages
+resplit.label=$Rétablir le partage
+prev-textarea.label=Atteindre la zone de texte pré$cédente
+next-textarea.label=Atteindre la zone de texte su$ivante
+buffersets.label=Localisation des $jeux de tampons
+global-bufferset.label=$Partout
+global-bufferset.tooltip=Tous les panneaux d'édition partagent le même jeu de tampons.
+view-bufferset.label=Dans la $fenêtre
+view-bufferset.tooltip=Les panneaux d'édition dans la même fenêtre partagent le même jeu de tampons
+editpane-bufferset.label=Dans le panneau d'$édition
+editpane-bufferset.tooltip=Chaque panneau d'édition comporte son propre jeu de tampons.
+#}}}
+
+#{{{ Docking menu
+docking.label=$Ancrage
+docking.menu.label=Menu ancrable
+toggle-dock-areas.label=Afficher/masquer les zones $ancrées
+left-docking-area.label=Atteindre la zone d'ancrage à $gauche
+top-docking-area.label=Atteindre la zone d'ancrage en $haut
+right-docking-area.label=Atteindre la zone d'ancrage é $droite
+bottom-docking-area.label=Atteindre la zone d'ancrage en $bas
+focus-textarea.label=Atteindre la zone de texte
+close-docking-area.label=$Fermer la zone d'ancrage courante
+layout-load.label=$Charger une disposition d'ancrage...
+layout-save.label=$Enregistrer la disposition d'ancrage...
+layout-load-current-mode.label=Charger la disposition d'ancrage du mode actuel
+layout-save-current-mode.label=Enregistrer la disposition d'ancrage du mode actuel
+#}}}
+
+#}}}
+
+#{{{ Utilities menu
+
+utils.label=$Utilitaires
+vfs.browser.label=$Explorateur de fichiers
+action-bar.label=$Afficher la barre d'action
+last-action.label=Ré$péter la dernière action
+buffer-options.label=Options du $tampon...
+global-options.label=Options $générales...
+combined-options.label=$Options...
+
+#{{{ Recent Directories menu
+recent-directories.label=$Derniers dossiers ouverts
+no-recent-dirs.label=Aucun dossier récemment ouvert
+#}}}
+
+#{{{ Favorites menu
+favorites.label=Fa$voris
+add-buffer-to-favorites.label=Ajouter le tampon aux favoris
+add-dir-to-favorites.label=Ajouter le dossier aux favoris
+edit-favorites.label=Éditer les favoris
+#}}}
+
+#{{{ Current Directory menu
+current-directory.label=Dossier $courant
+#}}}
+
+#{{{ jEdit Home Directory menu
+jedit-directory.label=Répertoire racine de $jEdit
+#}}}
+
+#{{{ Settings Directory menu
+settings-directory.label=$Dossier utilisateur jEdit
+#}}}
+
+#{{{ BeanShell menu
+beanshell.label=B$eanshell
+eval.label=$Évaluer une expression BeanShell...
+eval-for-selected-lines.label=Évaluer pour les $lignes sélectionnées...
+eval-selection.label=Évaluer la $sélection
+#}}}
+
+#{{{ Troubleshooting menu
+troubleshooting.label=$Dépannage
+log-viewer.label=$Fichier journal d'activité
+update-log.label=$Mettre à jour le fichier journal d'activité
+io-progress-monitor.label=Progression $I/O
+task-monitor.label=Gestionnaire des $tâches
+keyboard-tester.label=$Tester un raccourci clavier...
+memory-status.label=Utilisation de la $mémoire...
+reload-modes.label=$Recharger l'éditeur de modes
+#}}}
+
+#{{{ Quick options menu
+quick-options.label=$Paramétrage rapide
+edit-syntax-style.label=Éditer le style de syntaxe de la marque sous le curseur
+#}}}
+
+#}}}
+
+#{{{ Macros menu
+macros.label=Ma$cros
+new-macro.label=Nouvelle macro
+record-macro.label=$Enregistrer une macro...
+stop-recording.label=$Arrêter l'enregistrement
+last-macro.label=Relancer la $dernière macro
+record-temp-macro.label=Enregistrer une macro $temporaire
+run-temp-macro.label=Lancer la macro tem$poraire
+run-other-macro.label=Lancer une $autre macro...
+rescan-macros.label=Rec$hercher des macros
+no-macros.label=Aucune macro
+#}}}
+
+#{{{ Plugins menu
+plugins.label=$Plugins
+plugin-manager.label=$Gestionnaire de plugins...
+plugin-options.label=$Options des plugins...
+no-plugins.label=Aucun plugin installé
+#}}}
+
+#{{{ Help menu
+help-menu.label=$Aide
+about.label=À $propos de jEdit...
+help.label=Aide de $jEdit
+tip-of-the-day.label=$Astuce du jour
+userFeedback.label=Faire une suggestion...
+#}}}
+
+#}}}
+
+#{{{ Macro strings
+
+macro.temp.header=// Ceci est une macro temporaire. Veuillez d'abord vérifier que\n\
+                  // les commandes correspondent à ce que vous souhaitez définir.\n\
+                  // Ensuite retournez dans le tampon dans lequel vous souhaitez\n\
+                  // exécuter cette macro et appuyez sur les touches C+m C+p pour la lancer.
+
+macro.header=// Ceci est une macro enregistrée. Veuillez d'abord vérifier que\n\
+             // les commandes correspondent à ce que vous souhaitez définir.\n\
+             // Ensuite enregistrez ce tampon et la macro devrait apparaître\n\
+             // dans le menu Macros.
+
+#}}}
+
+#{{{ Commands that don't appear in menus
+backspace-word.label=Effacer le mot précédent
+backspace-word-std.label=Effacer le mot précédent (l'espace aussi)
+backspace-word-std-after.label=Effacer le mot précédent (l'espace après le mot aussi)
+backspace.label=Effacer le caractère précédent
+delete-word.label=Effacer le mot suivant
+delete-word-std.label=Effacer le mot suivant (avec espace)
+delete.label=Effacer le caractére suivant
+document-end.label=Atteindre la fin du tampon
+document-home.label=Atteindre le début du tampon
+end.label=Fin de ligne
+home.label=Début de ligne
+smart-end.label=Fin intelligente
+smart-home.label=Début intelligent
+insert-literal.label=Insérer le caractére suivant littéralement
+insert-newline.label=Insérer une nouvelle ligne
+insert-newline-indent.label=Insérer une nouvelle ligne en retrait
+insert-tab.label=Insérer une tabulation
+insert-tab-indent.label=Insérer une tabulation en retrait
+line-end.label=Atteindre la fin de la ligne
+line-home.label=Atteindre le début de ligne
+next-char.label=Atteindre le prochain caractére
+next-line.label=Atteindre la ligne suivante
+next-page.label=Atteindre la page suivante
+next-paragraph.label=Atteindre le paragraphe suivant
+next-word.label=Atteindre le mot suivant
+next-word-std.label=Atteindre le mot suivant (ignorer les espaces)
+overwrite.label=Mode de remplacement
+prev-char.label=Atteindre le caractère précédent
+prev-line.label=Atteindre la ligne précédente
+prev-page.label=Atteindre la page précédente
+prev-paragraph.label=Atteindre le paragraphe précédent
+prev-word.label=Atteindre le mot précédent
+prev-word-std.label=Atteindre le mot précédent (ignorer l'espace)
+prev-word-std-after.label=Atteindre le mot précédent (ignorer l'espaceaprès le mot)
+select-document-end.label=Sélectionner jusqu'à la fin du tampon
+select-document-home.label=Sélectionner à partir du début du tampon
+select-end.label=Sélectionner jusqu'à la fin intuitive
+select-home.label=Sélectionner à partir du début intuitif
+select-line-end.label=Sélectionner jusqu'à la fin de ligne
+select-line-home.label=Sélectionner à partir du début de ligne
+select-next-char.label=Sélectionner le caractère suivant
+select-next-line.label=Sélectionner la ligne suivante
+select-next-page.label=Sélectionner la page suivante
+select-next-paragraph.label=Sélectionner le paragraphe suivant
+select-next-word.label=Sélectionner le mot suivant
+select-next-word-std.label=Sélectionner le mot suivant (ignorer l'espace)
+select-prev-char.label=Sélectionner le caractère précédent
+select-prev-line.label=Sélectionner la ligne précédente
+select-prev-page.label=Sélectionner la page précédente
+select-prev-paragraph.label=Sélectionner le paragraphe précédent
+select-prev-word.label=Sélectionner le mot précédent
+select-prev-word-std.label=Sélectionner le mot précédent (ignorer l'espace)
+select-prev-word-std-after.label=Sélectionner le mot précédent (ignorer l'espace après le mot)
+select-visible-end.label=Sélectionner jusqu'à la dernière ligne visible
+select-visible-home.label=Sélectionner à partir de la premiére ligne visible
+select-whitespace-end.label=Sélectionner jusqu'à la fin de l'espace
+select-whitespace-home.label=Sélectionner à partir du début de l'espace
+toggle-line-separator.label=Afficher/masquer le séparateur de ligne
+toggle-word-wrap.label=Activer/désactiver la césure de mots
+visible-end.label=Atteindre la dernière ligne visible
+visible-home.label=Atteindre la première ligne visible
+whitespace-end.label=Atteindre la fin de l'espace
+whitespace-home.label=Atteindre le début de l'espace
+#}}}
+
+#{{{ View stuff
+
+# Title
+view.title=jEdit -\u0020
+view.title.dirty=\ (modifié)
+
+view.docking.close-tooltip=Masque la fenêtre ancrée courante
+view.docking.menu-tooltip=Options d'ancrage
+view.docking.menu-floating=Fenêtre flottante
+view.docking.menu-top=Ancrée en haut
+view.docking.menu-left=Ancrée à gauche
+view.docking.menu-bottom=Ancrée en bas
+view.docking.menu-right=Ancrée à droite
+view.docking.menu-clone=Nouvelle fenêtre flottante
+view.docking.menu-close=Fermer
+view.docking.menu-undock=Détacher
+
+view.docking.toggle.label={0} (Afficher/masquer)
+view.docking.float.label={0} (Nouvelle fenêtre flottante)
+
+directory.not-local=Impossible de lister les dossiers de l'arborescence distante
+directory.no-files=Aucun fichier
+
+#{{{ Gutter highlight
+view.gutter.marker.no-name=Marqueur
+view.gutter.marker=Marqueur : {0}
+#}}}
+
+#{{{ Status messages
+view.status.add-marker=Raccourci pour le nouveau marqueur ? [{0}]
+view.status.auto-wrap=Recherche infructueuse !
+view.status.bracket=Lignes correspondantes {0}: {1}
+view.status.caret-tooltip=Numéro d'offset, de ligne et de colonne (offset,line,column[-virtual] relative%)
+view.status.copy-append-string-register=Nom du registre vers lequel ajouter la sélection ? [{0}]
+view.status.copy-string-register=Registre vers lequel copier ? [{0}]
+view.status.cut-append-string-register=Registre vers lequel déplacer la sélection ? [{0}]
+view.status.cut-string-register=Registre vers lequel déplacer ? [{0}]
+view.status.expand-folds=Niveau de repli ? [1-9]
+view.status.goto-marker=Quel raccourci de marqueur atteindre ? [{0}]
+view.status.incomplete-abbrev={0} paramètre(s) spécifié(s) ou {1} est(sont) requis !
+view.status.insert-literal=Touche à insérer littéralement ?
+view.status.io-1=I/O : 1 opération en cours
+view.status.io.done=Entrée/sortie effectuée
+view.status.io=I/O : {0} opérations en cours
+view.status.linesep-changed=Séparateur de ligne défini ainsi : {0}
+view.status.linesep-tooltip=Séparateur de ligne (clic pour modifier)
+view.status.memory-tooltip=Mémoire allouée é Java : {0}Ko/{1}Ko
+view.status.mode-tooltip=Mode d'édition, mode de repli et encodage courants
+view.st,atus.multi-changed=Le mode de sélection multiple est {0,choice,0#désactivé|1#activé}
+view.status.multi-tooltip=Mode de sélection multiple (clic pour modifier)
+view.status.narrow=Sélectionner « Développer tous les replis » pour afficher à nouveau tout le texte
+view.status.no-markers=Aucun marqueur défini
+view.status.no-registers=Aucun registre défini
+view.status.overwrite-changed=Le mode de remplacement est {0,choice,0#désactivé|1#activé}
+view.status.overwrite-tooltip=Indicateur du mode de remplacement/insertion (clic pour modifier)
+view.status.paste-string-register=Registre é partir duquel coller ? [{0}]
+view.status.print=Impression de la page {0}
+view.status.quick-copy=Mode de copie rapide - le texte marqué remplacera la sélection
+view.status.recording=Enregistrement de macro
+view.status.rect-select-changed=La sélection rectangulaire est {0,choice,0#désactivée|1#activée}
+view.status.rect-tooltip=Mode de sélection rectangulaire (clic pour modifier)
+view.status.replace-all={0} occurrence(s) a(ont) été remplacée(s) dans {1} tampon(s)
+view.status.search-not-found=Chaîne de caractères introuvable !
+view.status.select-marker=Raccourci du marqueur jusqu'où sélectionner ? [{0}]
+view.status.swap-marker=Raccourci du marqueur par rapport auquel définir la position du curseur ? \
+	[{0}]
+view.status.vertical-paste-string-register=Registre vers collage vertical \
+	à partir de ? [{0}]
+view.status.wrap-changed=Le mode de retour à la ligne : "{0}"
+view.status.wrap-tooltip=<html>Mode de retour à la ligne {0} (cliquer pour modifier)</html>
+view.status.indent-tooltip=Indicateur de retrait automatique (cliquer pour modifier)
+view.status.autoindent-changed=État du retrait automatique : "{0}"
+view.status.bufferset-tooltip=localisation du jeu de tampons : {0}
+wrap.none=désactivé
+wrap.hard=strict
+wrap.soft=souple
+#}}}
+
+#{{{ Status bar component visibility
+
+#}}}
+
+#}}}
+
+#{{{ Printing
+
+print.headerText=jEdit - {0}
+print.footerText={0} :: page {1}
+
+print-error.title=Erreur d'impression
+print-error.message=Une erreur s''est produite lors de l''impression de :\n\
+	{0}
+#}}}
+
+#{{{ Various dialog boxes
+
+#{{{ About dialog
+about.title=À propos de jEdit
+about.version=jEdit {0}, mode {1}, utilisant la version {2} de Java
+about.mode.standalone=indépendant
+about.mode.server=serveur
+about.mode.server-background=serveur en arrière-plan
+about.navigate=Utilisez les flèches pour naviguer dans le texte
+
+# This text scrolls by in the about dialog box.
+# Hack: Since StringTokenizer treats two consequent \n as one token, we
+# insert a space by itself in the text to create blank lines.
+about.text.prefix=jEdit a été conçu pour vous par
+about.text.suffix=Je souhaiterais également remercier les utilisateurs pour\n\
+                  	leurs commentaires, et signalements de bogues.
+#}}}
+
+#{{{ Error list dialog, used to report I/O and plugin load errors
+error-list.plugin-manager=Gestionnaire de Plugins
+#}}}
+
+#{{{
+largeBufferDialog.title=Tampon volumineux {0}
+largeBufferDialog.message=Le tampon est très volumineux et jEdit risque de ne plus répondre\n\
+	à cause de la coloration syntaxique. Vous devriez prendre en considération les options suivantes.\n\
+	-Conserver la coloration complète : la coloration syntaxique fonctionnera comme habituellement\n\
+	jEdit ralentira probablement, ceci n''est pas recommandé.\n\
+	-Coloration syntaxique hors contexte. Dans ce cas, jEdit procédera\n\
+	à une coloration rapide, mais le résultat ne sera pas parfait. Le\n\
+	tampon est coloré ligne par ligne sans vérification du contexte\n\
+	de la ligne précédente. Il est possible que la coloration ne soit pas précise\n\
+	si vous avez des portions de code sur plusieurs lignes (commentaires, balises xml...)\n\
+	-Utilisez le mode d''édition brut de jEdit (pas de coloration syntaxique)
+largeBufferDialog.fullSyntax=Coloration syntaxique complète
+largeBufferDialog.contextInsensitive=Coloration syntaxique hors contexte
+largeBufferDialog.defaultMode=Mode d''édition brut
+#}}}
+
+#{{{ I/O error dialog box
+ioerror.title=Erreur I/O
+ioerror.caption=Les {0} opérations I/O suivantes ont été interrompues :
+ioerror.caption-1=Cette opération I/O a été inerrompue :
+
+ioerror={0}
+ioerror.directory-error=Impossible de lister les fichiers du dossier : {0}
+ioerror.directory-error-nomsg=Impossible de lister les fichiers de dossier.
+ioerror.encoding-error=Chargement correct du fichier impossible (des données ont pu être perdues) en utilisant\n\
+	un encodage « {0} ».\n\
+	({1})\n\
+	Esssayez de choisir un encodage différent.\n\
+	Pour ce faire allez dans Fichier->Recharger avec encodage.\n\
+	Si vous souhaitez que cela se fasse automatiquement, ajoutez les éléments\n\
+	dans la "Liste des encodages ajoutés" dans le panneau encodage des options générales.
+ioerror.write-encoding-error=Encodage du caractère suivant impossible :\n\
+	{3} colonne {2} ligne {1} encodé en "{0}".
+ioerror.read-error=Chargement impossible de {0}
+ioerror.write-error=Enregistrement impossible de {0}
+ioerror.unsupported-encoding-error=Pas de prise en charge du jeu de caractères {0} par votre MVJ
+ioerror.open-directory=Ouverture du dossier en tant que tampon impossible.
+ioerror.save-directory=Enregistrement du tampon dans un dossier impossible.
+ioerror.no-read=Droits insuffisants pour ouvrir le fichier.
+ioerror.no-write=Droits insuffisants pour enregistrer le fichier.
+ioerror.write-error-readonly=Enregistrement impossible, le fichier est en lecture seule.
+ioerror.save-readonly-twostagefail=Enregistrement impossible, le fichier est en lecture seule et, dans ce cas, enregistrer en 2 étapes est impossible.
+ioerror.badurl=URL invalide : {0}
+ioerror.delete-error=Impossible de supprimer le fichier.
+ioerror.rename-exists=Écrasement de fichier existant {0} impossible.
+ioerror.rename-error=Impossible de renommer ainsi : {0}.
+ioerror.mkdir-error=Impossible de créer le dossier.
+
+vfs.not-supported.list=Les dossiers dans "{0}" ne peuvent être parcourus.
+vfs.not-supported.load=Les fichiers dans "{0}" ne peuvent être ouverts.
+vfs.not-supported.save=Les fichiers ne peuvent étre enregistrés vers "{0}".
+
+vfs.overwrite-readonly.title=Fichier en lecture seule
+vfs.overwrite-readonly.message=Le fichier {0} est en lecture seule.\n\
+	Souhaitez-vous tout de même enregistrer ce fichier, en réinitialisant son niveau d'accès\n\
+	un enregistrement en 2 étapes sera utilisé (réinitialise le propriétaire sur Unix)
+
+vfs.twostageimpossible.title=Un enregistrement en 2 étapes ne peut être utilisé
+vfs.twostageimpossible.message=Un enregistrement en 2 étapes ne peut être utilisé, souhaitez-vous\n\
+	tout de même enregistrer ?
+
+out-of-memory-error=La mémoire allouée à Java est insuffisante pour achever\n\
+	cette requête. Veuillez augmenter la mémoire allouée.\n\
+	\n\
+	Pour vous aider, de la documentation expliquant comment faire\n\
+	se trouve dans le menu "Aide de jEdit", chapitre "jEdit Basics", \n\
+	rubrique "Buffers" (en anglais).
+#}}}
+
+#{{{ Old I/O error dialog boxes
+ioerror.message=Une erreur I/O est survenue ({0})
+
+read-error.title=Erreur de lecture
+# {0} - the path name {1} - the error message
+read-error.message=Chargement du fichier {0}\n\
+	impossible dû à une erreur I/O.\n\
+	({1})
+
+write-error.title=Erreur de modification
+# {0} - the path name {1} - the error message
+write-error.message=Enregistrement du fichier {0}\n\
+	impossible dû à une erreur I/O.\n\
+	({1})
+
+directory-error.title=Erreur de dossier
+# {0} - the path name {1} - the error message
+directory-error.message=Ouverture du dossier {0}\n\
+	impossible dû à une erreur I/O.\n\
+	({1})
+
+directory-error-nomsg.title=Erreur de dossier
+# {0} - the path name
+directory-error-nomsg.message=Ouverture du dossier {0}\n\
+	impossible dû à une erreur I/O.
+
+encoding-error.title=Encodage incompatible
+encoding-error.message=Ouverture du fichier {0}\n\
+	impossible étant encodé en "{1}".\n\
+	({2})\n\
+	\n\
+	Pour utiliser un autre encodage, allez dans les commandes\n\
+	du menu Fichier->Ouvrir... et cliquez sur "Encodage".\n\
+	\n\
+	Si vous ne savez vraiment pas quel encodage utiliser\n\
+	essayez "ASCII" ou "8859_1".
+
+open-directory.title=Ouverture du dossier impossible
+open-directory.message={0} est un dossier.\n\
+	Les dossiers ne peuvent être ouverts pour édition et modification.
+
+save-directory.title=Enregistrement du dossier impossible
+save-directory.message={0} est un dossier.\n\
+	Les dossiers ne peuvent être enregistrés dans des tampons.
+
+no-read.title=Ouverture du fichier impossible
+no-read.message=Impossible de lire à partir de {0}.\n\
+	Vous ne possédez probablement pas les droits suffisants.
+
+no-write.title=Enreistrement du fichier impossible
+no-write.message=Enregistrement impossible dans {0}.\n\
+	Vous ne possédez probablement pas les droits suffisants.
+
+badurl.title=URL invalide
+# {0} - L'URL
+# {1} - L'erreur
+badurl.message=Cette URL est invalide : {0}\n
+	({1})
+#}}}
+
+#{{{ Go to line dialog
+goto-line.title=Atteindre une ligne
+goto-line.message=Atteindre la ligne :
+#}}}
+
+#{{{ Word count dialog
+wordcount.title=Comptage de mots
+# {0} - caractères
+# {1} - mots
+# {2} - lignes
+wordcount.message=Nombre de caractères : {0}\nNombre de mots : {1}\nNombre de lignes : {2}
+#}}}
+
+#{{{ Set marker dialog
+setmarker.title=Définir un marqueur
+setmarker.message=Nom du marqueur :
+#}}}
+
+#{{{ File not saved dialog
+notsaved.title=Le fichier non enregistré
+# {0} - file name
+notsaved.message=Enregistrer les modifications de {0} ?
+#}}}
+
+#{{{ File changed, still reload dialog
+changedreload.title=Fichier modifié
+changedreload.message=Le fichier {0}\n\
+	a été modifié depuis le dernier enregistrement ; si vous le rechargez,\n\
+	les modifications seront perdues. Continuer ?
+#}}}
+
+#{{{ Autosave file exists dialog
+autosave-found.title=Fichier enregistré automatiquement trouvé
+# {0} - autosave file name
+autosave-found.message=le fichier {0} enregistré automatiquement\n\
+	 a été trouvé ! Cela signifie probablement que jEdit\n\
+	a été refermé avant son enregistrement. Souhaitez-vous ouvrir ce fichier ?
+
+autosave-loaded.title=Chargement de fichier enregistré automatiquement
+autosave-loaded.message=Le fichier {0} enregistré automatiquement\n\
+	a été chargé. Vous devriez vérifier à présent si les données non enregistrées\n\
+	sont bien là. Si vous souhaitez garder les modifications enregistrées automatiquement, enregistrez le fichier.\n\
+	Sinon, allez dans Fichier->Recharger.
+#}}}
+
+#{{{ Save all confirm dialog
+saveall.title=Enregistrer tous les tampons
+saveall.message=Souhaitez-vous vraiment enregistrer tous les tampons modifiés ?
+#}}}
+
+#{{{ Reload all confirm dialog
+reload-all.title=Recharger tous les tampons
+reload-all.message=Souhaitez-vous vraiment recharger tous les tampons à partir du disque ?\n\
+	Les modifications effectuées lors de cette session SERONT PERDUES !
+#}}}
+
+#{{{ Encoding prompt
+encoding-prompt.title=Ouvrir avec un encodage différent
+encoding-prompt.message=Encodage de caractères à utiliser :
+#}}}
+
+#{{{ Macro recording already in progress dialog
+already-recording.title=Enregistrement déjà en cours
+already-recording.message=Un enregistrement de macro est déjà en cours.
+#}}}
+
+#{{{ No temporary macro dialog
+no-temp-macro.title=Aucune macro temporaire
+no-temp-macro.message=Aucune macro temporaire enregistrée.
+#}}}
+
+#{{{ Record macro dialog
+record.title=Enregistrer la macro
+record.message=Nom de la macro :
+#}}}
+
+#{{{ Some features don't work with -nosettings dialog
+no-settings.title=Fonctionnalité désactivée
+no-settings.message=jEdit a été lancé avec un argument -nosettings (pas de paramètres).\n\
+	Pour utiliser cette fonctionnalité, vous devez démarrer jEdit sans cet argument.
+#}}}
+
+#{{{ Some features don't work with the web start version
+no-webstart.title=Fonctionnalité désactivée
+no-webstart.message=Cette fonctionnalité est indisponible dans la version de démarrage Web\n\
+	de jEdit.
+#}}}
+
+#{{{ Search and replace dialog
+search.title=Rechercher et remplacer
+
+search.find=Rechercher :
+search.find.tooltip=Page précédente/Page suivante ou clic droit pour rappeler le texte saisi précédemment
+search.find.mnemonic=h
+search.replace=Remplacer par :
+search.replace.mnemonic=R
+search.string-replace-btn=Texte
+search.beanshell-replace-btn=Retourner la valeur d'un fragment de code BeanShell
+
+search.settings=Paramètres :
+search.keep=Laisser la boîte ouverte
+search.keep.mnemonic=o
+search.word=Mot entier
+search.word.mnemonic=e
+search.case=Ignorer la casse
+search.case.mnemonic=i
+search.regexp=Expressions régulières
+search.regexp.mnemonic=x
+search.hypersearch=Hyper-recherche
+search.hypersearch.mnemonic=y
+search.wrap=En boucle
+search.wrap.mnemonic=b
+
+search.direction=Direction :
+search.back=En arrière
+search.back.mnemonic=r
+search.forward=En avant
+search.forward.mnemonic=v
+
+search.fileset=Rechercher dans :
+search.selection=La sélection
+search.selection.mnemonic=n
+search.current=Le tampon courant
+search.current.mnemonic=c
+search.all=Tous les tampons
+search.all.mnemonic=T
+search.directory=Le dossier :
+search.directory.mnemonic=d
+search.skipHidden=Ignorer les fichiers cachés et les sauvegardes
+search.skipBinary=Ignorer les fichiers binaires
+search.skipHidden.mnemonic=h
+search.skipBinary.mnemonic=b
+
+search.directoryField=Dossier :
+search.directoryField.mnemonic=i
+search.filterField=Filtre :
+search.filterField.mnemonic=f
+glob.tooltip={*.c,*.h} pour plusieurs extensions
+search.subdirs=Recherche dans les sous-dossiers
+search.subdirs.mnemonic=u
+search.choose=Parcourir...
+search.choose.mnemonic=c
+search.synchronize=Synchroniser
+search.synchronize.mnemonic=y
+search.synchronize.tooltip=Défini filtre d'extension et dossier pour la localisation ou l'extension du tampon courant.
+search.findBtn=Rechercher
+search.findBtn.mnemonic=h
+search.replaceBtn=Remplacer
+search.replaceAndFindBtn=Remplacer & rechercher
+search.replaceAndFindBtn.mnemonic=r
+search.replaceAllBtn=Tout remplacer
+search.replaceAllBtn.mnemonic=a
+
+# Beep when searching automatically wraps?
+
+#}}}
+
+#{{{ Keep searching dialog
+keepsearching.title=Aucune autre correspondance trouvée
+keepsearching.message=Aucune autre correspondance trouvée. Continuer la recherche à partir\n\
+	 {0,choice,0#du début|1#de la fin} ?
+#}}}
+
+#{{{ HyperSearch results dialog
+hypersearch-results.title=Résultats de l'Hyper-recherche
+hypersearch-results.result-caption={0} ({1,choice,1#1 occurrence|1<{1,number,integer} occurrences dans '{2,choice,1#1 fichier|1<{2,number,integer} fichiers}'})
+hypersearch-results.open=Ouvrir
+hypersearch-results.open-view=Ouvrir dans une nouvelle fenêtre
+hypersearch-results.open-plain-view=Ouvrir dans une nouvelle fenêtre - mode simple
+hypersearch-results.open-split=Ouvrir dans une nouvelle zone de partage
+hypersearch-results.remove-node=Supprimer le noeud
+hypersearch-results.new-search=Nouvelle recherche à partir d'ici
+hypersearch-results.expand-child-nodes=Développer les noeuds enfants
+hypersearch-results.collapse-child-nodes=Refermer les noeuds enfants
+hypersearch-results.copy-to-clipboard=Copier vers le presse-paiers
+hypersearch-results.redo=Refaire une hyper-recherche
+hypersearch-results.tree-view=Développer/réduire l'arborescence
+hypersearch-results.clear.label=Supprimer tous les noeuds
+hypersearch-results.stop.label=Arrêter l'hyper-recherche et afficher les résultats actuels
+hypersearch-results.multi.label=Afficher/masquer les résultats multiples
+hypersearch-results.highlight.label=Définir le style de mise en évidence pour correspondance
+hypersearch-results.file-caption={0} ({1,choice,1#1 occurrence|1<{1,number,integer} occurrences dans '{2,choice,1#1 ligne|1<{2,number,integer} lignes}'})
+hypersearch-results.searching=Recherche de "{0}" en cours...
+hypersearch-results.no-results=Aucun résultat trouvé pour "{0}".
+hypersearch-results.done=Résultats pour "{0}" :
+
+hypersearch-status=Recherche en cours
+#}}}
+
+#{{{ HyperSearch too many results
+hypersearch.tooManyResults.label=Trop de résultats
+hypersearch.tooManyResults.title=Trop de résultats
+hypersearch.tooManyResults.message=La recherche que vous avez lancée propose {0} \
+	résultats et est encore en cours. Souhaitez-vous interrompre la recherche ?
+#}}}
+
+
+#{{{ Search and replace error dialog
+searcherror.title=Erreur lors de la recherche et du remplacement
+# {0} - error message
+searcherror.message=Une erreur est survenue lors de cette opération.
+#}}}
+
+#{{{ Search and replace error dialog
+searcherror-bsh.title=Erreur lors de la recherche et remplacement
+# {0} - error message
+searcherror-bsh.message=Une erreur est survenue lors de cette opération.\n\
+	\n\
+	Veuillez vérifier que vous avez bien sélectionné le mode "texte" si vous\n\
+	ne souhaitez pas que le texte remplacé soit interprété comme une expression BeanShell.
+#}}}
+
+#{{{ Empty fileset error dialog
+empty-fileset.title=Pas de données de recherche
+empty-fileset.message=Les données spécifiées ne contiennent pas de fichiers.\n\
+	Veuillez vérifier que le nom du filtre et le dossier à explorer\n\
+	(si définis) sont correctement définis.
+#}}}
+
+#{{{ Can only search local directories dialog
+remote-dir-search.title=Dossier distant choisi
+remote-dir-search.message=Vous avez choisi de rechercher dans un dossier distant.\n\
+	Le traitement dépendra du type de connexion et de la qualité du réseau.\n\
+	Souhaitez-vous vraiment continuer ?
+#}}}
+
+#{{{ "Search in selection" active but nothing selected in text area
+search-no-selection.title=Aucune sélectionné
+search-no-selection.message=Veuillez sélectionner du texte ou désactiver\n\
+	"Rechercher dans la sélection" en premier.
+#}}}
+
+#{{{ Paste previous and paste deleted dialogs
+paste-from-list.whitespace=<espace>
+paste-previous.title=Coller le précédent
+paste-previous.caption=Texte copié et collé récemment :
+paste-deleted.title=Collage(s) supprimé(s)
+paste-deleted.caption=Texte supprimé récemment :
+#}}}
+
+#{{{ File changed on disk dialog
+filechanged-save.title=Fichier modifié sur le disque
+filechanged-save.message=Le fichier {0}\n\
+	a été modifié par un autre programme. Souhaitez-vous vraiment\n\
+	poursuivre l'enregistrement ?
+#}}}
+
+#{{{ File exists dialog
+fileexists.title=Fichier existant
+fileexists.message=Le fichier {0} existe déjà. Souhaitez-vous vraiment\n\
+	le remplacer ?
+#}}}
+
+#{{{ Select line range dialog
+selectlinerange.title=Sélectionner plusieurs lignes
+selectlinerange.caption=Sélectionner plusieurs lignes :
+selectlinerange.start=Première ligne :
+selectlinerange.end=Dernière ligne :
+#}}}
+
+#{{{ View registers dialog
+view-registers.title=Registres
+view-registers.caption=Registre :
+view-registers.clipboard=$ (presse-papiers)
+view-registers.selection=% (sélection)
+view-registers.none=Aucun registre défini
+view-registers.register=Registre :
+view-registers.contents=Contenu :
+view-registers.undefined=__INDEFINI__
+#}}}
+
+#{{{ Close all buffers dialog
+close.title=Modifications non enregistrées
+close.caption=Les tampons suivants ne sont pas encore enregistrés après modification :
+close.selectAll=Tout sélectionner
+close.selectAll.mnemonic=T
+close.save=Enregistrer la sélection
+close.save.mnemonic=s
+close.discard=Ne pas enregistrer la sélection
+close.discard.mnemonic=p
+#}}}
+
+#{{{ Files changed on disk dialog
+files-changed.title=Fichiers modifiés sur le disque
+files-changed.caption=Les fichiers suivants ont été modifiés par un autre programme :
+files-changed.deleted=Supprimé sur le disque, enregistrer pour le recréer :
+files-changed.changed-auto=Rechargé automatiquement :
+files-changed.changed=Modifié sur le disque :
+files-changed.changed-dirty-auto=Tampon détérioré, pas rechargé :
+files-changed.changed-dirty=Tampon détérioré et fichier modifié sur le disque :
+files-changed.select-all=Tout sélectionner
+files-changed.select-all.mnemonic=t
+files-changed.reload=Recharger
+files-changed.reload.mnemonic=r
+files-changed.ignore=Ignorer
+files-changed.ignore.mnemonic=i
+#}}}
+
+#{{{ Abbrev dialogs
+add-abbrev.title=Ajouter une abréviation
+add-abbrev.mode=Spécifique au mode
+add-abbrev.global=Générale
+
+edit-abbrev.title=Éditer l'abréviation
+
+edit-abbrev.duplicate.title=Abréviation en doublon
+edit-abbrev.duplicate.message=\
+	Une autre expansion de cette abréviation existe déjà.\n\
+	\n\
+	Souhaitez-vous remplacer cette expansion existante ?
+
+abbrev-editor.abbrev=Abréviation :
+abbrev-editor.before=Texte à insérer avant le curseur :
+abbrev-editor.after=Texte à insérer après le curseur :
+#}}}
+
+#{{{ XMode errors
+xmode-error.title=Erreur d'analyse XML
+# {2} is the column number, but it's not too useful so we don't show it
+xmode-error.message=Une erreur est survenue en analysant {0}, à la ligne {1} :\n\
+	{3}
+xmode-error.dtd=Chargement du DTD impossible\n({0})
+xmode-error.termchar-invalid=La valeur de AT_CHAR (attribut) est invalide ({0})
+xmode-error.doctype-invalid=Type de document du MODE attendu, trouvé {0}
+xmode-error.empty-tag=La balise {0} ne peut rester vide
+xmode-error.token-invalid=Le type de marque {0} est invalide
+xmode-error.empty-keyword=Le mot-clé doit être indiqué
+xmode-error.regexp=Expression régulière invalide\n({0})
+xmode-error.hash-char-and-hash-chars-mutually-exclusive=HASH_CHAR et HASH_CHARS ne doivent pas être spécifiés ensemble
+xmode-error.delegate-invalid=Délégation invalide : {0}
+#}}}
+
+#{{{ JARClassLoader errors
+plugin-error.title=Erreur de plugin
+plugin-error.caption=Chargement des plugins suivants impossible :
+plugin-error.caption-1=Chargement du plugin suivant impossible :
+
+plugin-error.load-error=Impossible de charger : {0}\n\
+	Ceci est le plus fréquemment dû à un fichier JAR corrompu ; essayez\n\
+	de le réinstaller. Voyez dans le menu Utilitaires->Dépannage->Journal activité\n\
+	pour de plus amples informations.
+plugin-error.start-error=Impossible de démarrer : {0}\n\
+	Essayez de mettre le plugin à jour.
+plugin-error.already-loaded=Deux copies installées. Veuillez supprimer une des \
+	deux copies.
+plugin-error.dep-jdk=Nécessite la version {0} de Java ou supérieure, or vous utilisez la version {1}.
+plugin-error.dep-jedit=Nécessite jEdit {0} ou supérieur, or vous utilisez la version {1}.\n\
+	Téléchargez une nouvelle version de jEdit sur <http://www.jedit.org>.
+plugin-error.dep-plugin.no-version=Nécessite la version {0} \
+	ou supérieure de {1},\n\
+	cette version {1} doit être installée.
+plugin-error.dep-plugin.broken=Nécessite {0}, mais chargement\n\
+	de {0} impossible.
+plugin-error.dep-plugin=Nécessite la version {0} ou supérieure de {1}, \
+	or vous utilisez la version {2} de {1}.
+plugin-error.dep-class=Nécessite la classe {0}.\n\
+	Tentez une installation du plugin ou de la bibliothèque de class appropriée.
+plugin-error.missing-jar=Nécessite le fichier JAR {0}.\n\
+	Ce fichier JAR est partie intégrante de ce plugin, mais il est introuvable.\n\
+	Tentez de réinstaller ce plugin.
+plugin-error.not-42=Ce plugin est incompatible avec le chargement dynamique.\n\
+	Vous devez redémarrer jEdit après suppression ou installation de ce plugin.
+
+plugin-error-download.title=Erreur de plugin
+plugin-error-download.message=Erreur lors du téléchargement du plugin, veuillez utiliser un autre miroir\n{0}
+#}}}
+
+#{{{ Macro dialogs
+macro-input.title=Définition de macro
+macro-error.title=Erreur de macro
+macro-message.title=Message de macro
+macro-confirm.title=Confirmation de macro
+#}}}
+
+#{{{ BeanShell stuff
+beanshell-error.title=Erreur BeanShell
+beanshell-error.message=Une erreur BeanShell est survenue.
+
+beanshell-eval-input.title=Évaluer une expression BeanShell
+beanshell-eval-input.message=Expression BeanShell :\n\
+	\n\
+	Variables :\n\
+	view - Instance de la fenêtre courante\n\
+	editPane - Instance courante du panneau pour édition\n\
+	textArea - Instance courante de zone de texte\n\
+	buffer - Le tampon courant
+
+beanshell-eval.title=Évaluation BeanShell
+beanshell-eval.message={0}
+
+beanshell-eval-line.title=Évaluer l'expression BeanShell
+beanshell-eval-line.message=Expression BeanShell à évaluer pour chaque \
+	ligne sélectionnée :\n\
+	\n\
+	Variables:\n\
+	line - Index de la ligne à partir du début du tampon\n\
+	index - Index de la ligne à partir du début de la sélection\n\
+	text - Le texte de la ligne\n\
+	view - Instance de la fenêtre courante\n\
+	editPane - Instance du panneau pour édition courant\n\
+	textArea - Instance de la zone de texte courante\n\
+	buffer - Le tampon courant
+#}}}
+
+#{{{ Macro not recording dialog
+macro-not-recording.title=Enregistrement pas en cours
+macro-not-recording.message=Aucun enregistrement de macro en cours.
+#}}}
+
+#{{{ Large repeat count warning
+large-repeat-count.title=Grand nombre de répétitions
+large-repeat-count.message=Souhaitez-vous vraiment appeler "{0}" {1} fois?
+
+large-repeat-count.user-input.title=Grand nombre de répétitions
+large-repeat-count.user-input.message=Souhaitez-vous vraiment insérer "{0}" \
+	{1} fois ?
+#}}}
+
+#{{{ Wrong fold mode dialog
+folding-not-explicit.title=Mauvais mode de repli
+folding-not-explicit.message=Cette commande est utilisable en mode explicite uniquement.
+#}}}
+
+#{{{ Memory status dialog box
+memory-status.title=Mémoire allouée à Java
+memory-status.gc=Mémoire diponible {0} Ko.
+memory-status.use={0} Ko utilisés sur {1} Ko au total
+#}}}
+
+#{{{ Multiple I/O request errors
+buffer-multiple-io.title=Erreur I/O
+buffer-multiple-io.message=Seule une opération entrée/sortie à la fois peut être\n\
+	exécutée par chaque tampon. Veuillez patienter la fin de la tâche courante\n\
+	(ou annulez-la dans le moniteur de progression I/O)\n\
+	avant le lancement de la tâche suivante.
+
+browser-multiple-io.title=Erreur I/O
+browser-multiple-io.message=Seule une opération entrée/sortie à la fois peut être\n\
+	exécutée par chaque explorateur de fichiers. Veuillez patienter la fin de la tâche courante\n\
+	(ou annulez-la dans le moniteur de progression I/O)\n\
+	avant le lancement de la tâche suivante.
+#}}}
+
+#{{{ maxLineLen=0 warning
+format-maxlinelen.title=Longueur de ligne
+format-maxlinelen.message=La valeur indiquée pour définir le retour à la ligne doit être\n\
+	non nulle pour que cette commande fonctionne.
+#}}}
+
+#{{{ Text under caret does not have a syntax style (token type)
+syntax-style-no-token.title=Configuration du style de la syntaxe
+syntax-style-no-token.message=Le texte sous le curseur ne correspond à aucun \
+	style de syntaxe pour configuration.
+#}}}
+
+#{{{ View title dialog
+view.title.select=Veuillez indiquer un titre pour cette fenêtre :
+#}}}
+#}}}
+
+#{{{ Buffer options dialog
+buffer-options.title=Options du tampon
+buffer-options.caption=Cette boîte de dialogue permet de modifier les paramètres du tampon courant uniquement.\n\
+	Pour modifier les paramètres généraux (valables donc pour tous les tampons),allez dans\n\
+	le menu Utilitaires->Options générales...->Édition.
+buffer-options.loading-saving=Chargement et enregistrement
+buffer-options.lineSeparator=Séparateur de ligne :
+buffer-options.encoding=Encodage de caractères :
+buffer-options.gzipped=Fichier GZIP (compressé) sur le disque
+buffer-options.editing=Édition
+buffer-options.mode=Mode d'édition :
+#}}}
+
+#{{{ Global options dialog
+options.title=Options
+options.title-template={0} : {1}
+options.jedit.label=jEdit
+
+# Option pane to show by default
+options.last=édition
+
+#{{{ Options groups
+
+#}}}
+
+#{{{ General pane
+options.general.label=Générales
+options.general.lineSeparator=Séparateur de ligne par défaut :
+options.general.encoding=Encodage de caractères par défaut :
+options.general.encodingAutodetect=Détecter automatiquement l'encodage si possible
+options.general.checkModStatus=Si les fichiers ouverts ont été modifiés sur le disque :
+options.general.checkModStatus.nothing=ne rien faire
+options.general.checkModStatus.prompt=demander ce qu'il faut faire
+options.general.checkModStatus.reload=recharger automatiquement et avertir l'utilisateur
+options.general.checkModStatus.silentReload=recharger automatiquement sans avertir l'utilisateur
+options.general.checkModStatusUpon=Vérifier la modification de fichier lorsque :
+options.general.checkModStatusUpon.focus=l'application est active
+options.general.checkModStatusUpon.all=l'application est active, le tampon est visité ou un tampon est enregistré
+options.general.checkModStatusUpon.operations=le tampon est visité ou un tampon est enregistré
+options.general.checkModStatusUpon.focusBuffer=le tampon est visité ou enregistré
+options.general.checkModStatusUpon.none=le tampon est enregistré
+options.general.recentFiles=Fichiers ouverts récemment à mémoriser :
+options.general.hypersearch.maxWarningResults=Nombre de résultats d'hyper-recherche max :
+options.general.sortRecent=Mettre la liste dans l'ordre alphabétique
+options.general.saveCaret=Enregistrer la position du curseur dans la liste
+options.general.persistentMarkers=Enregistrer la position du marqueur
+options.general.resetUndo=Effacer l'historique des modifications lors de l'enregistrement
+options.general.restore=Rétablir au démarrage les fichiers précédemment ouverts
+options.general.restore.splits=Rétablir la configuration de partage
+options.general.restore.remote=...en incluant les fichiers distants VFS
+options.general.restore.cli=...en incluant les noms de fichiers spécifiés en ligne de commande
+options.general.encodingDetectors=Liste des détecteurs automatiques d'encodage :
+options.general.fallbackEncodings=Liste des encodages ajoutés pour prise en charge automatique :
+options.general.fallbackEncodings.tooltip=Une liste d'encodages séparés par un espace pour résoudre des problèmes de reconnaissance d'encodage au démarrage
+options.general.systrayicon=Afficher l'icône de la zone de notification
+#}}}
+
+#{{{ Abbreviations pane
+options.abbrevs.label=Abréviations
+options.abbrevs.set=Définition d'abréviations :
+options.abbrevs.expandOnInput=La barre d'espacement permet l'expansion des abréviations
+options.abbrevs.abbrev=Abréviation
+options.abbrevs.expand=Expansion
+options.abbrevs.add=Ajouter...
+options.abbrevs.edit=Éditer...
+options.abbrevs.remove=Supprimer
+#}}}
+
+#{{{ Appearance pane
+options.appearance.label=Apparence
+options.appearance.iconTheme=Thème des icônes :
+options.appearance.fonts.antialias=Anti-alias des polices ne se trouvant pas dans une zone de texte
+options.appearance.lf=Modifications « look & feel » :
+options.appearance.primaryFont=Police des boutons, menus et textes :
+options.appearance.secondaryFont=Police des champs de liste et de texte :
+options.appearance.helpViewerFont=Police pour affichage d'aide et navigateur :
+options.appearance.history=Historique des entrées de champ de texte mémorisées :
+options.appearance.menuSpillover=Nombre limite d'éléments par menu :
+options.appearance.startup.label=Options de démarrage
+options.appearance.showSplash=Afficher l'image d'accueil au démarrage
+options.appearance.showTips=Afficher les astuces au démarrage
+options.appearance.experimental.label=Options expérimentales
+options.appearance.experimental.caption=Les options ci-dessous pourraient ne pas fonctionner \
+	correctement avec certaines\n\
+	versions de Java. Si vous rencontrez des problèmes, désactivez-les.
+
+options.appearance.textColors=Utiliser les couleurs des zones de texte jEdit dans tous \
+	les composants textes
+options.appearance.decorateFrames=Utiliser Swing look & feel pour le style des bordures
+options.appearance.decorateDialogs=Utiliser Swing look & feel pour le style des bordures des boîtes de dialogue
+
+options.appearance.localization.section.label=Localisation
+options.appearance.usedefaultlocale.label=Utiliser la langue par défaut
+options.appearance.lang.label=Langue (la modification est effective après redémarrage)
+#}}}
+
+#{{{ Context Menu pane
+options.context.label=Menu contextuel
+options.context.caption=Éléments à afficher dans le menu contextuel :
+options.context.add=Ajouter...
+options.context.remove=Retirer
+options.context.moveUp=Monter
+options.context.moveDown=Descendre
+options.context.reset=Rétablir les éléments par défaut
+options.context.add.title=Ajout au menu contextuel
+options.context.add.caption=Ajouter au menu contextuel :
+options.context.add.separator=Séparateur
+options.context.add.action=Commande ou macro :
+options.context.includeOptionsLink.label=Inclure "Personnaliser ce menu ..." lien
+
+options.context.reset.dialog.title=Rétablissement des éléments par défaut
+options.context.reset.dialog.message=Souhaitez-vous vraiment rétablir le menu contextuel installé par défaut ?
+#}}}
+
+#{{{ Docking pane
+options.docking.label=Ancrage
+options.docking.title=Fenêtre
+options.docking.dockPosition=Position d'ancrage
+options.appearance.selectFramework.label=Système d'ancrage :
+options.docking.autoSaveModeLayout.label=Enregistrer automatiquement la disposition d'ancrage spécifique au mode
+options.docking.autoLoadModeLayout.label=Charger automatiquement la disposition d'ancrage spécifique au mode
+options.docking.selectSet.label=Éléments ancrables :
+options.docking.system-change.note=(Expérimental) Redémarrer jEdit pour que les modifications prennent effet
+#}}}
+
+#{{{ Editing pane
+options.editing.label=Édition
+options.editing.defaultMode=Mode d'édition par défaut :
+options.editing.undoCount=Nombre d'annulations d'opérations :
+options.editing.caption-0=\
+	Pour personnaliser les paramètres spécifiques au mode, sélectionnez un mode d'édition\n\
+	à partir du menu déroulant ci-dessous. Ici, sont présentés les paramètres généraux\n\
+	par défaut.
+options.editing.caption-1=\
+	Décochez « Utiliser les paramétres par défaut » pour personnaliser les paramètres du\n\
+	mode. Sinon, les paramètres de la section <Paramètres généraux par défaut>\n\
+	seront utilisés.
+options.editing.mode=Modifier les paramètres pour le mode :
+options.editing.global=<Paramètres généraux par défaut>
+options.editing.useDefaults=Utiliser les paramètres par défaut
+options.editing.filenameGlob=Extension(s) associée(s) à ce mode :
+options.editing.firstlineGlob=Première ligne :
+options.editing.folding=Mode repli :
+options.editing.collapseFolds=À l'ouverture, plier au niveau suivant :
+options.editing.wrap=Retour à la ligne :
+options.editing.maxLineLen=Longueur de ligne avant retour à la ligne :
+options.editing.maxLineLen.tooltip=Choisissez 0 pour la largeur de zone de texte (uniquement retour à la ligne doux)
+options.editing.tabSize=Profondeur de tabulation :
+options.editing.indentSize=Retrait :
+options.editing.noWordSep=Caractères pour mots spéciaux :
+options.editing.camelCasedWords=Séparer les mots « CamelCase » (exemple : BackColor->Back Color)
+options.editing.noTabs=Tabulation « souple » (émulée avec des espaces)
+options.editing.elasticTabstops=Retrait via une tabulation « élastique »
+options.editing.elasticTabstops.tooltip=(Expérimental) - peut rendre jEdit instable.
+options.editing.deepIndent=Retrait augmenté
+options.editing.autoIndent=Retrait automatique
+options.editing.largefilemode.title=Mode de fichier volumineux
+options.editing.largefilemode=Que dois-je faire en cas de fichier volumineux :
+options.editing.largefilemode.option.ask=<html><b>Demander</b> que faire lors de l'ouverture d'un fichier volumineux</html>
+options.editing.largefilemode.option.full=<html><b>Conserver la coloration complète</b> : la coloration syntaxique de jEdit fonctionnera comme habituellement, jEdit \
+                                               	pourra devenir <b>très lent, ceci n'est pas recommandé</b></html>
+options.editing.largefilemode.option.limited=<html><b>Coloration syntaxique insensible au contexte</b> : dans ce cas jEdit procédera à \
+		une coloration rapide, mais le résultat ne sera peut-être pas parfait. Le<br/>\
+		tampon est coloré ligne par ligne sans prendre en compte le contexte \
+		de la ligne précédente. Il est possible que la syntaxe ne soit pas précise<br/>\
+		si vous avez des portions de code sur plusieurs lignes (commentaires sur plusieurs lignes, balises xml ...) \
+		Le retour à la ligne souple est également désactivé <b>(meilleur choix)</b></html>
+options.editing.largefilemode.option.nohighlight=Pas de coloration syntaxique, pas de retour à la ligne souple
+#}}}
+
+#{{{ Encodings pane
+options.encodings.label=Encodages
+options.encodings.selectEncodings=Choisissez les éléments devant figurer dans la boîte de dialogue des encodages :
+options.encodings.available=Encodage(s) disponible(s)
+options.encodings.selected=Encodage(s) sélectionné(s)
+options.encodings.available.tooltip=<html>Les encodages dans cette colonne <b>ne</b> seront <b>pas</b> listés dans la boîte de dialogue des encodages.\
+  Déposez-les dans la colonne de droite pour les activer</html>
+options.encodings.selected.tooltip=Les encodages de cette colonne sont affichés dans la boîte de dialogue des encodages.\
+  Déposez-les dans la colonne de gauche pour les masquer
+#}}}
+
+#{{{ Gutter pane
+options.gutter.label=Marge
+options.gutter.enabled=Afficher la marge
+options.gutter.optionalComponents=Composants optionnels de la marge
+options.gutter.lineNumbers=Numérotation des lignes
+options.gutter.minLineNumberDigits=Nombre minimum de chiffres à réserver pour la numérotation :
+options.gutter.selectionAreaEnabled=Zone de sélection de ligne lorsque la numérotation n'est pas affichée
+options.gutter.selectionAreaBgColor=Couleur de fond de la zone de sélection :
+options.gutter.selectionAreaWidth=Largeur de la zone de sélection (en pixels) :
+options.gutter.font=Police :
+options.gutter.foreground=Couleur de la numérotation :
+options.gutter.background=Couleur du fond :
+options.gutter.borderWidth=Épaisseur de la bordure de marge :
+options.gutter.numberAlignment=Alignement de la numérotation :
+options.gutter.interval-1=Surligner toutes les\u0020
+options.gutter.interval-2=lignes :
+options.gutter.currentLineHighlight=Surlignage de la ligne courante :
+options.gutter.structureHighlight=Couleur de mise en évidence des intervalles :
+options.gutter.markerHighlight=Affichage de la position du marqueur :
+options.gutter.foldColor=Marqueurs de repli :
+options.gutter.focusBorderColor=Bordure de marge active :
+options.gutter.noFocusBorderColor=Bordure de marge inactive :
+options.gutter.foldStyle.label=Style du repli :
+options.gutter.foldStyleNames.Triangle=Triangle
+options.gutter.foldStyleNames.Square=Carré
+options.gutter.foldStyleNames.Circle=Cercle
+#}}}
+
+#{{{ Mouse pane
+options.mouse.label=Souris
+options.mouse.dragAndDrop=Glisser-déposer dans zone de texte
+options.mouse.joinNonWordChars=Double-clic-glisser attache des caractères non-alphanumériques
+options.mouse.middleMousePaste=Copie rapide en utilisant le clic du milieu
+options.mouse.ctrlForRectangularSelection=Passer en mode de sélection rectangulaire en maintenant la touche ctrl
+options.mouse.gutter.foldClick=Clic dans la marge :
+options.mouse.gutter.SfoldClick=Maj-clic dans la marge :
+options.mouse.gutter.toggle-fold=plier/déplier les replis
+options.mouse.gutter.toggle-fold-fully=plier/déplier les replis complètement
+#}}}
+
+#{{{ Plugin Manager pane
+options.plugin-manager.label=Gestionnaire de plugin
+options.plugin-manager.updateMirrors=Mettre à jour la liste des miroirs
+options.plugin-manager.workthread=Mise à jour de la liste des miroirs en cours...
+options.plugin-manager.downloadSource=Télécharger le code source du plugin
+options.plugin-manager.deleteDownloads=Supprimer les archives du dossier de \
+	téléchargement après installation
+options.plugin-manager.mirror=Miroir de téléchargement favori :
+options.plugin-manager.location=Installer les plugins dans :
+options.plugin-manager.settings-dir=Le dossier de paramètres utilisateur
+options.plugin-manager.app-dir=Le dossier d'installation de jEdit
+options.plugin-manager.none=Centrale de plugins par défaut
+#}}}
+
+#{{{ Printing pane
+options.print.label=Impression
+options.print.font=Police d'impression :
+options.print.fontstyle=Style de police d'impression :
+options.print.fontsize=Taille de police d'impression :
+options.print.header=Imprimer un en-tête indiquant le nom du fichier
+options.print.footer=Imprimer un bas de page indiquant date, heure et numéro de page
+options.print.lineNumbers=Imprimer les numéros de ligne
+options.print.color=Couleur d'impression
+options.print.tabSize=Tabulation pour l'impression :
+options.print.workarounds=Solutions pour bogues Java
+options.print.glyphVector=Solution pour délai d'impression (augmente la taille du fichier de spool)
+options.print.force13=Utiliser la vieille API d'impression (activer cela en cas de problèmes \
+	d'impression)
+options.print.folds=Imprimer les zones repliées
+#}}}
+
+#{{{ Proxy pane
+options.firewall.label=Serveurs proxies
+options.firewall.http.enabled=Utiliser un serveur proxy HTTP
+options.firewall.http.host=Hôte proxy HTTP :
+options.firewall.http.port=Port proxy HTTP :
+options.firewall.http.user=Nom d'utilisateur :
+options.firewall.http.password=Mot de passe :
+options.firewall.http.nonProxy=Se connecter directement à :
+options.firewall.socks.enabled=Utiliser un serveur proxy SOCKS
+options.firewall.socks.host=Hôte proxy SOCKS :
+options.firewall.socks.port=Port proxy SOCKS :
+#}}}
+
+#{{{ Save & Backup pane
+options.save-back.label=Enregistrements & Sauvegardes
+
+options.save-back.autosave=Fréquence d'enregistrement automatique (s) :
+options.save-back.backups=Nombre maximum de sauvegardes :
+options.save-back.backupDirectory=Dossier de sauvegarde :
+options.save-back.backupPrefix=Préfixe du nom de fichier de sauvegarde :
+options.save-back.backupSuffix=Suffixe du nom de fichier de sauvegarde :
+options.save-back.backupEverySave=Sauvegarde à chaque enregistrement
+options.save-back.twoStageSave=Enregistrement à deux niveaux (plus sûr mais réinitialise le propriétaire du fichier sur certains systèmes de fichiers)
+options.save-back.twoStageSave.tooltip=Niveau 1 : Renomme l'ancien fichier. Niveau 2: créé un nouveau fichier qui le remplace.
+options.save-back.confirmSaveAll=Demander confirmation pour « Enregistrer tous les tampons »
+options.save-back.autosaveUntitled=Enregistrer automatiquement les tampons sans titre
+options.save-back.suppressNotSavedConfirmUntitled=Ne jamais marquer les tampons sans titre comme étant modifiés mais non enregistrés.
+options.save-back.suppressNotSavedConfirmUntitled.tooltip=Si ceci est coché, cela signifie que les tampons sans titres seront supprimés quand un autre est créé (c'est une fonctionnalité !)
+options.save-back.useMD5forDirtyCalculation=Ne jamais marquer les tampons comme étant modifiés mais pas enregistrés si le contenu n'a pas changé.
+options.save-back.useMD5forDirtyCalculation.tooltip=Comparer la longueur et le MD5 hash du tampon à l'horaire de chargement pour décider si un tampon édité est modifié mais pas encore enregistré.
+options.save-back.saveAsUsesFSB="Enregistrer sous" par défaut vers le dossier de l'explorateur de fichiers
+#}}}
+
+#{{{ Shortcuts pane
+options.shortcuts.deletekeymap.label=supprimer
+options.shortcuts.deletekeymap.dialog.label=Supprimer le jeu de raccourcis
+options.shortcuts.deletekeymap.dialog.title=Supprimer
+options.shortcuts.duplicatekeymap.label=dupliquer
+options.shortcuts.duplicatekeymap.dialog.label=Choisir le nouveau nom du jeu de raccourcis
+options.shortcuts.duplicatekeymap.keymapalreadyexists.label=Le nom existe déjà, choisissez-en un autre
+options.shortcuts.duplicatekeymap.dialog.title=nom du jeu de raccourcis
+options.shortcuts.resetkeymap.label=réinitialiser
+options.shortcuts.resetkeymap.dialog.label=Réinitialiser le jeu de raccourcis
+options.shortcuts.resetkeymap.dialog.title=réinitialiser le jeu de raccourcis
+options.shortcuts.keymap.label=Choix du jeu de raccourcis :
+options.shortcuts.label=Raccourcis
+options.shortcuts.select.label=Éditer les raccourcis :
+options.shortcuts.select.tooltip=Vous pouvez choisir des raccourcis généraux, de macros ou de plugins
+options.shortcuts.name=Commande
+options.shortcuts.shortcut1=Raccourci principal
+options.shortcuts.shortcut2=Raccourci alternatif
+options.shortcuts.filter.label=Filtre :
+options.shortcuts.filter.tooltip=N'afficher que les actions dont le nom contient ce texte
+options.shortcuts.clear.label=Effacer
+
+grab-key.title=Définir le raccourci
+grab-key.caption=Appuyez sur le raccourci désiré pour « {0} », puis cliquez sur OK.
+grab-key.keyboard-test=Indiquez les combinaisons de touches posant problèmes.
+grab-key.assigned-to=Actuellement assigné à : {0}
+grab-key.assigned-to.none=<rien>
+grab-key.assigned-to.prefix=Préfixe de {0}
+grab-key.clear=Effacer
+grab-key.remove=Supprimer
+
+grab-key.remove-ask.title=Supprimer le raccourci ?
+grab-key.remove-ask.message=\
+	Vous n'avez pas défini de nouveau raccourci.\n\
+	Souhaitez-vous vraiment supprimer ce raccourci ?
+
+grab-key.duplicate-alt-shortcut.title=Raccourci en doublon
+grab-key.duplicate-alt-shortcut.message=\
+	Le raccourci que vous avez choisi est le même que l'autre\n\
+	raccourci prévu pour cet élément. Veuillez en choisir un autre.
+
+grab-key.duplicate-shortcut.title=Raccourci en doublon
+grab-key.duplicate-shortcut.message=\
+	Ce raccourci est déjà assigné à\n\
+	« {0} ».\n\
+	\n\
+	Souhaitez-vous l'assigner à ce nouvel élément ?
+
+grab-key.prefix-shortcut.title=Raccourci invalide
+grab-key.prefix-shortcut.message=\
+	Vous ne pouvez utiliser ce raccourci, car\n\
+	c'est le préfixe d'autres raccourcis.\n\
+	Veuillez en choisir un autre.
+#}}}
+
+#{{{ Status bar pane
+options.status.label=Barre d'état
+options.status.visible=Affficher la barre d'état
+options.status.plainview.visible=Afficher la barre d'état dans les fenêtres simples
+options.status.foreground=Texte dans la barre d'état :
+options.status.background=Fond de la barre d'état :
+options.status.memory.foreground=Premier plan de l'indicateur de mémoire :
+options.status.memory.background=Arrière-plan de l'indicateur mémoire :
+options.status.edit.title=Éditer les éléments de la barre d'état
+options.status.edit.labelRadioButton=Intitulé
+options.status.edit.widgetRadioButton=Élément
+options.status.edit.labelLabel=Indiquez un titre :
+options.status.edit.widgetLabel=Choisissez un élément :
+options.status.caret.linenumber=Afficher le numéro de la ligne où se trouve le curseur
+options.status.caret.dot=Afficher la distance entre le curseur et le début de ligne
+options.status.caret.virtual=Afficher la distance virtuelle entre le curseur et le début de ligne
+options.status.caret.offset=Afficher la distance entre le curseur et le début du fichier
+options.status.caret.bufferlength=Afficher la longueur du fichier
+options.status.caret.title=Option d'affichage de la position du curseur :
+#}}}
+
+#{{{ Syntax Highlighting pane
+options.syntax.label=Coloration syntaxique
+options.syntax.object=Type de marque
+options.syntax.style=Style du texte
+options.syntax.foldLine.1=Ligne repliée, niveau 1
+options.syntax.foldLine.2=Ligne repliée, niveau 2
+options.syntax.foldLine.3=Ligne repliée, niveau 3
+options.syntax.foldLine.0=Ligne repliée, niveau > 3
+#}}}
+
+#{{{ Text Area pane
+options.textarea.label=Zone de texte
+options.textarea.font=Police :
+options.textarea.fontSubst=Polices supplémentaires pour la substitution
+options.textarea.fontSubst.tooltip=Rechercher des symboles dans les autres polices qui pourraient manquer dans la police de texte sélectionnée (au lieu d'afficher des rectangles)
+options.textarea.fontSubstList=Polices préférées pour le remplacement :
+options.textarea.fontSubstSystemFonts=Police de substitution : Rechercher toutes les polices système
+options.textarea.fontSubstWarning.label=Substitution de police
+options.textarea.fontSubstWarning=Sans aucune police système, vous aurez besoin de polices préférées.
+options.textarea.foreground=Couleur du texte :
+options.textarea.background=Couleur du fond :
+options.textarea.caret=Curseur :
+options.textarea.blinkCaret=clignotant
+options.textarea.blockCaret=bloc
+options.textarea.thickCaret=fin
+options.textarea.selection=Sélection simple :
+options.textarea.multipleSelection=Sélection multiple :
+options.textarea.selectionFg=Premier plan de sélection :
+options.textarea.lineHighlight=Surlignage de la ligne courante :
+options.textarea.structureHighlight=Surlignage des éléments trouvés lors d'une recherche :
+options.textarea.eolMarkers=Marqueurs de fin de ligne :
+options.textarea.wrapGuide=Repère de retour à la ligne :
+options.textarea.electricBorders=Bordures électriques (défilement automatique)
+options.textarea.stdNextPrevWord=La commande « Atteindre le mot suivant/précédent » ignore les espaces
+options.textarea.antiAlias=Lissage du texte
+options.textarea.antiAlias.tooltip=Ralentit l'affichage sur certains systèmes
+options.textarea.fracFontMetrics=Police à espacement proportionnel (pour un affichage plus « doux » \
+	du texte)
+options.textarea.fracFontMetrics.tooltip=Non recommandé avec l'antialiasing de sous-pixel
+options.textarea.stripTrailingEOL=Masquer la fin de ligne (si existante)
+options.textarea.completeFromAllBuffers=Mots complets de tous les tampons ouverts (par défaut, \
+    la recherche est limitée aux tampons visibles actuellement)
+options.textarea.lineSpacing.label=Espacement supplémentaire entre les lignes (en pixels):
+#}}}
+
+#{{{ Tool Bar pane
+options.toolbar.label=Barre d'outils
+options.toolbar.showToolbar=Afficher la barre d'outils
+options.toolbar.caption=Boutons à afficher sur la barre d'outils :
+options.toolbar.add=Ajouter...
+options.toolbar.edit=éditer...
+options.toolbar.remove=Supprimer
+options.toolbar.moveUp=Monter
+options.toolbar.moveDown=Descendre
+options.toolbar.reset=Rétablir la barre par défaut
+options.toolbar.edit.title=Éditer l'élément de barre d'outils
+options.toolbar.edit.caption=Type :
+options.toolbar.edit.separator=Séparateur
+options.toolbar.edit.action=Commande ou macro :
+options.toolbar.edit.builtin=Utiliser l'icône par défaut :
+options.toolbar.edit.file=Charger une icône à partir d'un fichier :
+options.toolbar.edit.choose=Parcourir...
+options.toolbar.edit.no-icon=Aucune icône sélectionnée
+
+options.toolbar.reset.dialog.title=Rétablir la barre par défaut
+options.toolbar.reset.dialog.message=Souhaitez-vous vraiment rétablir la barre d'outils proposée par défaut à l'installation ?
+#}}}
+
+#{{{ View pane
+options.view.label=Fenêtres
+options.view.viewLayout=Disposition des fenêtres
+options.view.floatableToolbars=Barres d'outils flottantes
+options.view.alternateDockingLayout=Placement alternatif de fenêtre ancrée
+options.view.alternateToolBarLayout=Placement alternatif de la barre d'outils
+options.view.showFullPath=Afficher le chemin complet du tampon dans la barre de titre
+options.view.showSearchbar=Toujours afficher la barre de recherche
+options.view.beepOnSearchAutoWrap=Signal sonore lors de la recherche de retour à la ligne automatique
+options.view.showBufferSwitcher=Afficher le sélecteur de tampon
+options.view.bufferSwitcherMaxRowsCount=Nombre de lignes visibles dans le sélecteur :
+options.view.sortBuffers=Trier les jeux de tampons
+options.view.sortByName=Trier les jeux de tampons par nom de fichier au lieu du nom de chemin
+options.view.fullScreenIncludesMenu=Afficher la barre de menu en mode plein écran
+options.view.fullScreenIncludesToolbar=Afficher les barres d'outils en mode plein écran
+options.view.fullScreenIncludesStatus=Afficher la barre d'état en mode plein écran
+options.bufferset.scope=Localisation du jeu de tampons :
+options.editpane.bufferset.contain=Les nouveaux jeux de tampons se composent :
+options.editpane.bufferset.newbufferset.copy=d'une copie du jeu de tampon courant
+options.editpane.bufferset.newbufferset.empty=d'un tampon vide
+options.editpane.bufferset.newbufferset.currentbuffer=du tampon courant uniquement
+#}}}
+
+
+
+#{{{ File System Browser panes
+options.browser.label=Explorateur de fichiers
+
+options.browser.colors.label=Couleurs
+options.browser.colors.glob=Extensions
+options.browser.colors.color=Couleur
+options.browser.colors.add=Ajouter
+options.browser.colors.remove=Supprimer
+
+options.browser.general.label=Générales
+options.browser.general.defaultPath=Chemin par défaut :
+options.browser.general.defaultPath.favorites=favoris
+options.browser.general.defaultPath.home=répertoire racine
+options.browser.general.defaultPath.last=derniers dossiers visités
+options.browser.general.defaultPath.buffer=dossier parent du tampon courant
+options.browser.general.defaultPath.working=dossier de travail des processus jEdit
+options.browser.general.showMenubar=Afficher la barre de menu
+options.browser.general.showToolbar=Afficher la barre d'outils
+options.browser.general.showIcons=Afficher les icônes
+options.browser.general.showHiddenFiles=Afficher les fichiers cachés
+options.browser.general.sortIgnoreCase=Ignorer la casse pour trier
+options.browser.general.sortMixFilesAndDirs=Afficher les fichiers et les dossiers
+options.browser.general.doubleClickClose=Fermer un fichier ouvert par double-clic
+options.browser.general.currentBufferFilter=Le filtre dans l'explorateur de fichiers est \
+	l'extension du tampon courant
+options.browser.general.useDefaultIcons=Utiliser les icônes par défaut
+#}}}
+
+#{{{ Browser Context Menu
+options.browser.custom.context.label=Menu contextuel
+options.browser.custom.context.caption=Éléments personnalisés dans le menu ouvert via le clic droit :
+#}}}
+
+#{{{ Font selector
+font-selector.title=Sélecteur de police
+font-selector.family=Famille de police :
+font-selector.size=Taille de police :
+font-selector.style=Style de police :
+font-selector.plain=Simple
+font-selector.bold=Gras
+font-selector.italic=Italique
+font-selector.bolditalic=Gras italique
+font-selector.preview=Aperçu
+font-selector.long-text=Portez ce vieux whisky au juge blond qui fume.
+#}}}
+
+#{{{ Color chooser, used by options.syntaxs
+colorChooser.title=Choix d'une couleur
+#}}}
+
+#{{{ Style editor, used by options.syntaxs
+style-editor.title=Éditeur de style
+style-editor.tokenType=Type de marque :
+style-editor.italics=Italiques
+style-editor.bold=Gras
+style-editor.fgColor=Couleur du texte :
+style-editor.bgColor=Couleur de fond :
+#}}}
+
+#}}}
+
+#{{{ Plugin options dialog
+plugin-options.title=Options
+options.plugins.label=Plugins
+options.no-plugins.label=Aucune option de plugin
+#}}}
+
+#{{{ Help viewer
+helpviewer.title=Aide de jEdit
+helpviewer.loading=Chargement en cours...
+helpviewer.back.label=Précédente
+helpviewer.forward.label=Suivante
+
+helpviewer.toc.loading=Chargement en cours...
+helpviewer.toc.label=Contenus
+helpviewer.toc.welcome=Bienvenue dans jEdit
+helpviewer.toc.readme=Informations générales
+helpviewer.toc.changes=Détails des améliorations
+helpviewer.toc.todo=Ce qu'il reste à faire et bogues connus
+helpviewer.toc.copying=Licence GNU General Public License
+helpviewer.toc.copying-doc=Licence GNU Free Documentation
+helpviewer.toc.copying-apache=Licence Apache
+helpviewer.toc.copying-plugins=Amendement de licence de plugin
+helpviewer.toc.plugins=Plugins
+helpviewer.toc.online-apidocs=Référence API jEdit (en ligne)
+
+helpviewer.search.label=Rechercher
+helpviewer.search.caption=Rechercher :
+helpviewer.searching=Recherche en cours...
+helpviewer.no-results=Aucun résultat
+#}}}
+
+#{{{ Tip of the day window
+tip.title=Astuce du jour
+tip.caption=Saviez-vous que...
+tip.show-next-time=Afficher les astuces au démarrage
+tip.next-tip=Astuce suivante
+
+tip.not-found=Le dossier contenant les astuces (docs\tips) est introuvable
+#}}}
+
+#{{{ Activity log
+log-viewer.title=Journal d'activité
+log-viewer.caption=Le texte complet du journal est stocké dans {0}.
+log-viewer.copy=Copier
+log-viewer.tail.label=Fin
+#}}}
+
+#{{{ Marker Viewer
+view-markers.label=A$fficher les marqueurs
+view-markers.title=Marqueurs
+#}}}
+
+#{{{ I/O progress monitor
+io-progress-monitor.title=Moniteur de progression I/O
+io-progress-monitor.caption={0} requête(s) en attente.
+io-progress-monitor.idle=Processus interrompu
+io-progress-monitor.abort=Interrompre
+
+#{{{ I/O abort dialog box
+abort.title=Interrompre I/O
+abort.message=Souhaitez-vous vraiment interrompre cette opération\n\
+	entrée/sortie ? Si vous annulez un enregistrement de fichier,\n\
+	cela pourra entraîner des pertes de données.
+#}}}
+
+#}}}
+
+#{{{ Task  monitor
+task-monitor.title=Gestionnaire de tâches
+#}}}
+
+#{{{ VFS browser
+vfs.browser.title=Explorateur
+vfs.browser.longtitle=Explorateur de fichiers
+vfs.browser.title.open=Explorateur - Ouvrir
+vfs.browser.title.save=Explorateur - Enregistrer
+vfs.browser.title.dialog=Explorateur - Ouvrir
+vfs.browser.path=Chemin :
+vfs.browser.path.mnemonic=C
+vfs.browser.filter=Filtre :
+vfs.browser.tree.loading=Chargement en cours...
+
+vfs.browser.name=Nom
+vfs.browser.type=Type
+vfs.browser.type.file=Fichier
+vfs.browser.type.directory=Dossier
+vfs.browser.type.filesystem=Arborescence
+vfs.browser.status=État
+vfs.browser.status.no=Pas d'accès
+vfs.browser.status.ro=En lecture seule
+vfs.browser.status.append=Ajout uniquement
+vfs.browser.status.rw=Lecture/écriture
+vfs.browser.size=Taille
+vfs.browser.modified=Dernière modification
+
+vfs.browser.file_filter.glob=Filtre d'extensions de fichier
+vfs.browser.file_filter.dir_only=Uniquement les dossiers
+
+#{{{ Actions
+vfs.browser.browse-window.label=Explorer dans une nouvelle fenêtre
+vfs.browser.browse.label=Explorer
+vfs.browser.close.label=Fermer
+vfs.browser.copy-path.label=Copier le chemin
+vfs.browser.delete.label=Supprimer...
+vfs.browser.delete.shortcut=SUPPR
+vfs.browser.home.label=Dossier utilisateur
+vfs.browser.home.shortcut=~
+vfs.browser.properties.label=Propriétés
+vfs.browser.properties.title=Propriétés de fichier/dossier
+vfs.browser.insert.label=Insérer
+vfs.browser.new-directory.label=Nouveau dossier...
+vfs.browser.new-directory.shortcut=INSERT
+vfs.browser.new-file.label=Nouveau fichier
+vfs.browser.new-file.shortcut=C+n
+vfs.browser.open.label=Ouvrir
+vfs.browser.open-desktop.label=Ouvrir sur le $Bureau
+vfs.browser.other-encoding-2.label=Autre ({0})...
+vfs.browser.other-encoding.label=Autre...
+vfs.browser.reload.label=Actualiser le dossier
+vfs.browser.reload.shortcut=F5
+vfs.browser.rename.label=Renommer...
+vfs.browser.rename.shortcut=F2
+vfs.browser.roots.label=Répertoire racine
+vfs.browser.roots.shortcut=/
+vfs.browser.search-directory.label=Rechercher dans le dossier...
+vfs.browser.show-hidden-files.label=Afficher les fichiers cachés
+vfs.browser.synchronize.label=Dossier du tampon courant
+vfs.browser.synchronize.shortcut=-
+vfs.browser.up.label=Dossier parent
+vfs.browser.up.shortcut=A+Flèche haut
+vfs.browser.paste.label=Coller le fichier ici
+vfs.browser.previous.label=Dossier précédent
+vfs.browser.previous.shortcut=A+Flèche gauche
+vfs.browser.next.label=Dossier suivant
+vfs.browser.next.shortcut=A+Flèche droite
+#}}}
+
+#{{{ Tool bar
+
+#}}}
+
+#{{{ Commands menu
+vfs.browser.commands.label=Commandes
+vfs.browser.commands.encoding.label=Encodage
+vfs.browser.commands.encoding.auto-detect=Détection automatique
+
+vfs.browser.open-in.label=Ouvrir dans...
+vfs.browser.open-view.label=une nouvelle fenêtre
+vfs.browser.open-plain-view.label=une nouvelle fenêtre simple
+vfs.browser.open-split.label=une nouvelle zone de partage
+#}}}
+
+#{{{ Plugins menu
+vfs.browser.plugins.label=Plugins
+vfs.browser.plugins.plugin-manager.label=Gestionnaire de plugins...
+vfs.browser.plugins.plugin-options.label=Options du plugin...
+vfs.browser.plugins.no-plugins.label=Aucun plugin
+#}}}
+
+#{{{ Favorites menu
+vfs.browser.favorites.label=Favoris
+vfs.browser.favorites.add-to-favorites.label=Ajouter aux favoris
+vfs.browser.favorites.edit-favorites.label=Éditer les favoris
+vfs.browser.favorites.no-favorites.label=Aucun favori
+#}}}
+
+vfs.browser.dialog.open=Ouvrir
+vfs.browser.dialog.save=Enregistrer
+vfs.browser.dialog.choose-dir=Parcourir...
+vfs.browser.dialog.filename=Nom de fichier :
+vfs.browser.dialog.filename.mnemonic=f
+
+#{{{ Dialogs
+vfs.browser.bad-filter.title=Filtre invalide
+vfs.browser.bad-filter.message=Le filtre {0} est invalide ({1})
+
+vfs.browser.recurse-favorites.title=Impossible d'ajouter des favoris à eux-mêmes
+vfs.browser.recurse-favorites.message=La liste des favoris ne peut étre ajoutée à elle-même.
+
+vfs.browser.delete-confirm.title=Confirmation de suppression de fichiers
+vfs.browser.delete-confirm.message=Souhaitez-vous vraiment supprimer les fichiers suivants {1}?\n\n\
+	{0}
+
+vfs.browser.delete-favorites.title=Retirer des favoris
+vfs.browser.delete-favorites.message=Souhaitez-vous vraiment supprimer les dossiers/fichiers suivants \
+	de la liste des favoris ?\n\n\
+	{0}
+
+vfs.browser.rename.title=Renommer le fichier
+vfs.browser.rename.message=Indiquez le nouveau nom pour {0} :
+
+vfs.browser.mkdir.title=Nouveau dossier
+vfs.browser.mkdir.message=Nom (ou chemin) du nouveau dossier :
+#}}}
+
+#}}}
+
+#{{{ I/O status messages
+vfs.status.load=Chargement de {0}
+vfs.status.load-markers=Chargement des marqueurs pour {0}
+vfs.status.save=Enregistrement de {0}
+vfs.status.save-markers=Enregistrement des marqueurs pour {0}
+vfs.status.autosave=Enregistrement automatique de {0}
+vfs.status.listing-directory=Listing du dossier {0}
+vfs.status.deleting=Suppression de {0}
+vfs.status.renaming=Renommage de {0} en {1}
+#}}}
+
+#{{{ Plugin manager
+
+plugin-manager.title=Gestionnaire de plugin
+
+plugin-manager.hide-libraries=Masquer les bibliothèques
+
+plugin-manager.mgr-options=Options de téléchargement...
+plugin-manager.plugin-options=Options des plugins...
+plugin-manager.done=Fermer
+
+plugin-manager.remove-confirm.title=Désinstallation de plugins
+plugin-manager.remove-confirm.message=Souhaitez-vous vraiment désinstaller les \
+	plugins suivants ?
+
+plugin-manager.dependency.title=Plugin nécessaire pour fonctionnement
+plugin-manager.dependency.message={0} est nécessaire pour que les plugins suivants fonctionnent.\n\
+	Si vous désélectionnez {0}, cela désélectionnera également les plugins ci-dessous :
+
+plugin-manager.remove-dependencies.title=Plugin nécessaire pour fonctionnement
+plugin-manager.remove-dependencies.message=Les plugins désinstallés sont nécessaires pour que les plugins suivants fonctionnent.\n\
+	Si vous les désélectionnez, cela désélectionnera également les plugins ci-dessous :
+
+plugin-manager.cleanup.label=Nettoyer
+plugin-manager.cleanup.title=Suppressions des données de plugin
+plugin-manager.cleanup.message=Supprimer les données des plugins suivants :
+
+plugin-manager.noOrphan.label=Recherche des orphelins
+plugin-manager.noOrphan.title=Aucun jar orphelin trouvé
+plugin-manager.noOrphan.message=Aucun jar orphelin dans votre installation jEdit détecté
+
+plugin-manager.findOrphan.label=Recherche des orphelins
+plugin-manager.findOrphan.title=jars orphelins trouvés
+plugin-manager.findOrphan.message=Apparatenance des jars suivants à aucun plugin\n\
+	Les supprimer ?\n (soyez prudents, ils peuvent être déclarés dynamiquement dans certains \n\
+  plugins comme les pilotes JDBC) :
+
+install-plugins.depend.title=Installation de plugins supplémentaires
+install-plugins.depend.message=Un ou plusieurs plugins que vous installez\n\
+	nécessite(nt) des plugins supplémentaires pour fonctionner. Ils\n\
+	seront automatiquement installés si vous continuez.
+
+plugin-manager.status.loaded=Chargé
+plugin-manager.status.not-loaded=Non chargé
+plugin-manager.status.error=Erreur
+
+plugin-manager.list-download-connect=Connexion à plugins.jedit.org
+plugin-manager.list-download=Téléchargement de la liste des plugins à partir de plugins.jedit.org
+plugin-manager.list-download.need-password.title=Le proxy HTTP nécessite un mot de passe
+plugin-manager.list-download.need-password.message=Le proxy HTTP nécessite un mot de passe.\n\
+Veuillez indiquer un nom utilisateur/mot de passe valide dans les "options de téléchargement".
+plugin-manager.list-download.disconnected.title=Erreur lors du téléchargementde la liste des plugins
+plugin-manager.list-download.disconnected.message=Impossible de télécharger la liste des plugins :\n\
+hôte {0} est indisponible. Veuillez vérifier votre connection Internet...
+plugin-manager.list-download.generic-error.title=Erreur lors du téléchargement de la liste des plugins
+plugin-manager.list-download.generic-error.message=Erreur lors du téléchargement de la liste des plugins :\n\
+erreur : {0} - {1}
+plugin-manager.filterField=Afficher uniquement les plugins dont le nom comporte ce texte
+
+#{{{ Plugin management
+manage-plugins.title=Gestion
+
+manage-plugins.info.name=Nom
+manage-plugins.info.version=Version
+manage-plugins.info.status=État
+manage-plugins.info.data=Données
+
+manage-plugins.data-size.unknown=<inconnu>
+
+manage-plugins.remove=Supprimer...
+manage-plugins.help=Aide...
+plugin-load-error.message=Impossible de charger le plugin
+plugin-load-error.title=Erreur de chargement de plugin
+#}}}
+
+#{{{ Plugin installation
+install-plugins.title=Installation
+
+install-plugins.info.name=Nom
+install-plugins.info.size=Taille
+install-plugins.info.releaseDate=Date de mise à disposition
+install-plugins.info.version=Version
+install-plugins.info.category=Catégorie
+
+install-plugins.totalSize={0} plugin(s), taille totale : {1}
+install-plugins.select-all=Tout sélectionner
+install-plugins.install=Installer
+install-plugins.show-updates=Afficher les mises à jour
+
+install-plugins.info=<b>Auteur</b>: {0}\n\
+	<b>Mis à disposition</b>: {1}\n\
+	{2}
+
+update-plugins.title=Mise à jour
+
+plugin-manager.progress=Téléchargement de {0} à partir du miroir {1}
+plugin-manager.progress.title=Installation de plugin(s)
+plugin-manager.progress.stop=Stop
+#}}}
+
+#{{{ Plugin remove error
+plugin-manager.remove-failed.title=Échec de la suppression
+plugin-manager.remove-failed.message=Impossible de supprimer\n\
+	le plugin {0}.
+#}}}
+
+#}}}
+
+#{{{ File Properties Dialog
+fileprop.name=Nom
+fileprop.path=Chemin
+fileprop.lastmod=Dernière modification
+fileprop.size=Taille
+fileprop.properties=Propriétés
+fileprop.readable=Lecture possible
+fileprop.writeable=Écriture possible
+fileprop.attribute=Attribut
+fileprop.okBtn=OK
+fileprop.cancelBtn=Annuler
+fileprop.selectedFiles=Fichiers sélectionnés
+fileprop.selectedDirectories=Dossiers sélectionnés
+#}}}
+
+#{{{ Activity log viewer
+log-viewer.dialog.title=Paramètres du journal d'activité
+log-viewer.settings.label=Paramètres
+log-viewer.message.label=Affichage de message :
+log-viewer.message.debug.label=Déboguer
+log-viewer.message.message.label=Message
+log-viewer.message.notice.label=Notice
+log-viewer.message.warning.label=Avertissement
+log-viewer.message.error.label=Erreur
+#}}}
+
+logs-remove-all-errors.label=Supprimer toutes les erreurs
+
+taskmanager.remainingtasks.label={0} tâche(s) restante(s)
+
+#{{{ Statusbar Widgets
+# the widgets should have a label and a sample.
+# the label is displayed when choosing the list of widgets
+# the sample is an example of what the widget will show, for the
+# preview in the options
+statusbar.mode.label=Mode d'édition du tampon (ex : java)
+statusbar.mode.sample=java
+statusbar.fold.label=traitement du repli du tampon (ex : explicite)
+statusbar.fold.sample=explicite
+statusbar.encoding.label=Encodage du tampon (ex : UTF-8)
+statusbar.encoding.sample=UTF-8
+statusbar.wrap.label=Mode de retour à la ligne du tampon (ex : N)
+statusbar.wrap.sample=N
+statusbar.indent.label=Retrait automatique (ex : F)
+statusbar.indent.sample=F
+statusbar.multiSelect.label=Mode de sélection multiple (ex : m)
+statusbar.multiSelect.sample=m
+statusbar.rectSelect.label=Mode de sélection rectangulaire (ex :r )
+statusbar.rectSelect.sample=r
+statusbar.overwrite.label=Remplacement du tampon (ex : o)
+statusbar.overwrite.sample=o
+statusbar.lineSep.label=Ligne de séparation (ex : U)
+statusbar.lineSep.sample=U
+statusbar.memory-status.label=État de la mémoire (ex : 9/24Mo)
+statusbar.memory-status.sample=9/24Mo
+statusbar.clock.label=Horloge (ex :16:45)
+statusbar.clock.sample=16:45
+statusbar.buffersets.label=Localisation du jeu de tampons (ex : G)
+statusbar.buffersets.sample=G
+statusbar.selection-length.label=Longueur de la sélection (ex : 192)
+statusbar.selection-length.sample=192
+statusbar.last-modified.label=Date de dernière modification sur le disque (ex : 12/03/11 16:43)
+statusbar.last-modified.sample=12/03/11 16:43
+statusbar.task-monitor.label=Moniteur de tâches (ex : 7 tâche(s))
+statusbar.task-monitor.tooltip=Cliquer pour afficher la fenêtre ancrabe des tâches en cours
+statusbar.task-monitor.sample=7 tâche(s)
+statusbar.task-monitor.template={0} tâche(s)
+#}}}
+
+killring.load-memoryerror.message=<html>Impossible de charger le texte supprimé précédemment. Veuillez augmenter la mémoire allouée.<br>\
+  Appuyer sur <b>démarrer</b> pour démarrer tout de même jEdit ou <br><b>arrêter</b> pour arrêter et modifier vos paramètres. <br>Vous pouvez également <b>supprimer le fichier historique</b> et démarrer jEdit</html>
+killring.load-memoryerror.title=Erreur de mémoire
+killring.start=démarrer
+killring.stop=arrêter
+killring.delete=arrêter la boucle infinie et démarrer
+
+#}}}
+
+#{{{ Macros
+
+#{{{ Properties used by macros
+
+#{{{ common
+macro.rs.general.ErrorNotEditableDialog.title=permission d'écriture
+macro.rs.general.ErrorNotEditableDialog.message=Impossible de modifier le fichier !
+#}}}
+
+#{{{ Clipboard
+
+#{{{ Copy Lines Containing
+macro.rs.CopyLinesContaining.CopyLinesContaining.label=Copier les lignes contenant :
+macro.rs.CopyLinesContaining.LinesCopied.message=lipne(s) copiée(s)
+#}}}
+
+#{{{ Cut Lines Containing
+macro.rs.CutLinesContaining.CutLinesContaining.label=Couper les lignes contenant :
+macro.rs.CutLinesContaining.LinesCut.message=ligne(s) coupées
+#}}}
+
+#}}}
+
+#{{{ Editing
+
+#{{{ Go to column
+macro.rs.GoToColumn.ColumnBefore.label=Colonne (entre 1 et
+macro.rs.GoToColumn.ColumnAfter.label=):
+#}}}
+
+#{{{ Key Words to Uppercase
+macro.rs.KeywordsToUpperCase.ConvertedKeywords.message=Mots-clés convertis en majuscules
+#}}}
+
+#{{{ Mode Switcher
+macro.rs.BufferModeSwitcher.MainDialog.title=Sélecteur de mode de tampon
+macro.rs.BufferModeSwitcher.EnterBufferMode.label=Indiquer le mode du tampon :
+macro.rs.BufferModeSwitcher.ChangingBufferMode.label=Modification du mode du tampon
+macro.rs.BufferModeSwitcher.To.label=en
+macro.rs.BufferModeSwitcher.Mode.label=Mode
+macro.rs.BufferModeSwitcher.NotFound.label=introuvable
+#}}}
+
+#{{{ Moves Lines Down - Move Lines Up
+macro.rs.MoveLines.NoMultipleSelection.error=Le déplacement de lignes ne fonctionne pas avec la sélection multiple.
+#}}}
+
+#}}}
+
+#{{{ Files
+
+#{{{ Browse Directory
+macro.rs.BrowseDirectory.DirectoryBrowse.label=Dossier à explorer :
+#}}}
+
+#{{{ Buffer Switcher
+macro.rs.BufferSwitcher.OpenBuffers.label=ouvrir les tampons
+macro.rs.BufferSwitcher.QuickHelp.label=[ENTRÉE] basculer vers; [ESPACE] basculer vers, laisser la boîte ouverte; [SUPPR] fermer le tampon
+macro.rs.BufferSwitcher.Help1.label=Aide pour la macro « Sélecteur de tampon » :
+macro.rs.BufferSwitcher.Help2.label=SUPPRIMER ferme le tampon sélectionné.
+macro.rs.BufferSwitcher.Help3.label=ENTRÉE bascule vers le tampon sélectionné, ferme la boîte de dialogue.
+macro.rs.BufferSwitcher.Help4.label=ÉCHAP ferme la boîte de dialogue.
+macro.rs.BufferSwitcher.Help5.label=ESPACE bascule vers le tampon sélectionné, ne ferme pas la boîte d edialogue.
+macro.rs.BufferSwitcher.Help6.label=REMARQUE : cette boîte de dialogue ne s'affichera qu'une fois
+#}}}
+
+#{{{ Delete Current
+macro.rs.DeleteCurrent.NotOnDisk.error=Le tampon n'existe pas sur le disque.
+macro.rs.DeleteCurrent.DeleteNotSupport.error=ne permet pas de supprimer.
+macro.rs.DeleteCurrent.Deleted.message=Supprimé(s) :
+#}}}
+
+#{{{ Glob Close
+macro.rs.GlobClose.GlobPattern.label=Motif :
+macro.rs.GlobClose.ErrorGlobPattern.error=Erreur dans le motif :
+#}}}
+
+#{{{ Next Dirty Buffer
+macro.rs.NextDirtyBuffer.NoOtherBufferDirty.message=Aucun autre tampon n'est modifié
+macro.rs.NextDirtyBuffer.NoBufferDirty.message=Aucun tampon n'est modifié
+#}}}
+
+#{{{ open Path
+macro.rs.OpenPath.PathName.label=Nom du chemin :
+#}}}
+
+#{{{Toggle ReadOnly
+macro.rs.ToggleReadOnly.OnlyLocalFiles.error=Cette macro ne fonctionne que sur les fichiers locaux.
+macro.rs.ToggleReadOnly.OnlyWindowsUnixMacos.error=Cette macro ne fonctionne que sur Windows, Unix, & MacOS X.
+#}}}
+
+#}}}
+
+#{{{ Interface
+
+#{{{ Decrease Font Size - Increase Font Size
+macro.rs.ChangeFontSize.FontSize.message=Taiile de la police à présent :
+#}}}
+
+#}}}
+
+#{{{ Java
+
+#{{{ Create Constructor
+macro.rs.CreateConstructor.UnevenNumber.message=Pas le même nombre de noms de types et de variables.
+#}}}
+
+#{{{ Get Package Name
+macro.rs.GetPackageName.NotWorking1.error=Cette macro ne fonctionnera pas lorsque l'interpréteur Java
+macro.rs.GetPackageName.NotWorking2.error=charge jEdit avec l'option de ligne de commande '-jar'.
+macro.rs.GetPackageName.NotFind.error=Impossible de trouver un nom de paquetage.
+#}}}
+
+#{{{ Java File Save
+macro.rs.JavaFileSave.InfiniteLoop.error=Boucle infinie :
+#}}}
+
+#{{{Make Get and Set Methods
+macro.rs.MakeGetAndSetMethods.GenerateCode.label=Générer le code
+macro.rs.MakeGetAndSetMethods.CreateGetMethods.label=Créer des méthodes Get
+macro.rs.MakeGetAndSetMethods.CreateSetMethods.label=Créer des méthodes Set
+macro.rs.MakeGetAndSetMethods.CreateGetandSetMethods.label=Créer des méthodes Get et Get
+#}}}
+
+#}}}
+
+#{{{ Misc
+
+#{{{ Buffer to HyperSearch Results - HyperSearch Results to Buffer
+macro.rs.HyperSearchResults.WindowNotOpen.error=La fenêtre d'hyper-recherche n'est pas ouverte.
+macro.rs.HyperSearchResults.NotMatch.error=Aucune correspondance trouvée.
+#}}}
+
+#{{{ Debug BufferSets
+macro.rs.DebugBuffersets.BuffersetDebugging.label=BUFFERSET DEBUGGING
+macro.rs.DebugBuffersets.BufferCount.label=BufferCount:
+macro.rs.DebugBuffersets.BufferList.label=BUFFER LIST
+macro.rs.DebugBuffersets.EndBufferList.label=END BUFFER LIST
+macro.rs.DebugBuffersets.EditpaneList.label=EDITPANE LIST
+macro.rs.DebugBuffersets.EndEditpaneList.label=END EDITPANE LIST
+#}}}
+
+#{{{ Display Abbreviations
+macro.rs.DisplayAbbreviations.Abbreviation.label=Abréviation
+macro.rs.DisplayAbbreviations.Expansion.label=Expansion
+macro.rs.DisplayAbbreviations.AbbreviationSet.label=Jeu d'abréviations :
+macro.rs.DisplayAbbreviations.Close.label=Fermer
+macro.rs.DisplayAbbreviations.WriteSet.label=Afficher le jeu
+macro.rs.DisplayAbbreviations.WriteAll.label=Tout afficher
+macro.rs.DisplayAbbreviations.AbbreviationList.label=Liste des abréviations
+macro.rs.DisplayAbbreviations.CallingWTTNB.label=appel de writeTableToNewBuffer pour
+macro.rs.DisplayAbbreviations.SizeVector.label=taille du vecteur :
+macro.rs.DisplayAbbreviations.jEditAbbreviationTable.label=Tableau des abréviations jEdit
+macro.rs.DisplayAbbreviations.AbbreviationSet.label=Jeu d'abréviations :
+macro.rs.DisplayAbbreviations.AbbreviationExpansion.label=Abréviation    Expansion
+macro.rs.DisplayAbbreviations.NoAbbreviations.label=<< Aucune abréviation >>
+#}}}
+
+#{{{ Display Actions
+macro.rs.DisplayActions.jEditActionBar1.label=La barre d'action jEdit peut être ouverte via le menu Utilitaires et est habituellement
+macro.rs.DisplayActions.jEditActionBar2.label=assignée au raccourci-clavier C+ENTRÉE.
+macro.rs.DisplayActions.NoLabel.label=<aucun libellé>
+#}}}
+
+#{{{ Display Character Code
+macro.rs.DisplayCharacterCode.CharacterAtCaret.label=Caractère au curseur :
+#}}}
+
+#{{{ Display Shorcuts
+macro.rs.DisplayShortcuts.jEditShortcutTable.label=Tableau des raccourcis-claviers de jEdit
+macro.rs.DisplayShortcuts.Name.label=Nom
+macro.rs.DisplayShortcuts.Shortcut1.label=Raccourci - 1
+macro.rs.DisplayShortcuts.Shortcut2.label=Raccourci - 2
+macro.rs.DisplayShortcuts.Close.label=Fermer
+macro.rs.DisplayShortcuts.WriteToBuffer.label=Afficher dans un tampon
+macro.rs.DisplayShortcuts.ShortcutList.label=Liste des raccourcis-claviers
+#}}}
+
+#{{{ Hex Convert
+macro.rs.HexConvert.Before.label=avant :
+macro.rs.HexConvert.After.label=après :
+macro.rs.HexConvert.NotValidHex.label=n'est pas une chaîne hex valide.
+macro.rs.HexConvert.ByteToString.label=Hex à convertir en caractère :
+#}}}
+
+#{{{ Make Bug Report
+macro.rs.MakeBugReport.OpeningActivityLog.error=Erreur lors de l'ouverture du journal d'activité.
+macro.rs.MakeBugReport.UsefulEntriesForReport.label=Les entrées du journal d'activité qui peuvent être utiles dans un signalement de bogue :\n\n.
+macro.rs.MakeBugReport.MessagejEdit.label=[message] jEdit:
+macro.rs.MakeBugReport.NoticejEdit.label=[notice] jEdit:
+macro.rs.MakeBugReport.NoticeJarClassLoader.label=[notice] JARClassLoader:
+macro.rs.MakeBugReport.MessagejEditStartupComplete.label=[message] jEdit: Startup complete
+macro.rs.MakeBugReport.Error.label=[error]
+macro.rs.MakeBugReport.ReadingActivityLog.error=Erreur lors de la lecture du journal d'activité
+#}}}
+
+#{{{ Run Script
+macro.rs.RunScript.SpecifyParametersForRunning.label=Spécifier les paramètres afin d'exécuter le script sous
+macro.rs.RunScript.ScriptExecutionCancelled.message=L'exécution du script a été annulée.
+macro.rs.RunScript.FileNotScript.error=Le fichier courant semble ne pas être un script.
+#}}}
+
+#{{{ Show Threads
+macro.rs.ShowThreads.Daemon.label=démon
+macro.rs.ShowThreads.Priority.label=prio
+macro.rs.ShowThreads.NotStarted.label=pas démarré
+macro.rs.ShowThreads.Interrupted.label=interrompu
+macro.rs.ShowThreads.CloseUpdate.label=[ÉCHAPP] Fermer      [U] Mettre à jour
+macro.rs.ShowThreads.CurrentThreads.label=Processus courants
+#}}}
+
+#}}}
+
+#{{{ Properties
+
+#{{{ Insert Buffer Properties
+macro.rs.InsertBufferProperties.InsertLocalProperties.label=Insérer les propriétés locales du tampon
+macro.rs.InsertBufferProperties.Properties.label=Propriétés :
+macro.rs.InsertBufferProperties.Insert.label=Insérer
+macro.rs.InsertBufferProperties.MustBeIn10Lines.message=Remarque : les propriétés loclaes du tampon doivent se trouver dans les 10 premières ou dernières lignes pour être reconnues par jEdit.
+#}}}
+
+#{{{ Look and Feel Properties
+macro.rs.LookAndFeelProperties.Listing.label=--listing des noms de propriétés look and feel--
+#}}}
+
+#{{{ System Properties
+macro.rs.SystemProperties.SystemProperties.label=Propriétés Système
+#}}}
+
+#}}}
+
+#{{{ Text
+
+#{{{ Add Prefix And Suffix
+macro.rs.AddPrefixAndSuffix.MainDialog.title=Ajouter un préfixe et un suffixe aux lignes sélectionnées
+macro.rs.AddPrefixAndSuffix.PrefixToAdd.label=Préfixe à ajouter :
+macro.rs.AddPrefixAndSuffix.SuffixToAdd.label=Suffixe à ajouter :
+#}}}
+
+#{{{ Color Picker
+macro.rs.ColorPicker.ColorPicker.label=Palette de couleurs
+#}}}
+
+#{{{ Insert Date
+macro.rs.InsertDate.InternetTime.label=Date et horaire Internet
+#}}}
+
+#{{{ Insert Tag
+macro.rs.InsertTag.EnterNameTag.label=Indiquer le nom de la balise :
+#}}}
+
+#{{{ Line_Filter
+macro.rs.LineFilter.MainDialog.title=Filtre de lignes
+macro.rs.LineFilter.ignoreCaseCheckBox.label=Ignorer la casse
+macro.rs.LineFilter.regexpPanelBorder.title=Motif de comparaison (Expression régulière)
+macro.rs.LineFilter.processModeRadioButtonMatching.label=qui correspondent
+macro.rs.LineFilter.processModeRadioButtonNotMatching.label=qui ne correspondent pas
+macro.rs.LineFilter.processModeOptionPanelBorder.title=Lignes
+macro.rs.LineFilter.actionModeRadioButtonWrite.label=Écrire dans un nouveau tampon
+macro.rs.LineFilter.actionModeRadioButtonDelete.label=Supprimer
+macro.rs.LineFilter.actionModeOptionPanelBorder.title=Action
+
+macro.rs.LineFilter.DeleteActionDisabled.message=Impossible de supprimer
+macro.rs.LineFilter.MultipleSelection.message=La sélection rectangulaire n''est pas prise en charge
+macro.rs.LineFilter.BlockSelection.message=La sélection lacunaire n''est pas prise en charge
+
+macro.rs.LineFilter.SummaryDeleted.label=Ligne(s) effacée(s) !
+macro.rs.LineFilter.SummaryWritten.label=Nouvelle(s) ligne(s) écrite(s) dans nouveau fichier
+
+macro.rs.LineFilter.ErrorRegexpDialog.title=Expression régulière invalide
+macro.rs.LineFilter.ErrorRegexpDialog.message=Cette expression régulière est invalide !
+#}}}
+
+#{{{ Next Char
+macro.rs.InsertTag.EnterCharacter.label=Indiquer un caractère
+#}}}
+
+#{{{ Reverse Lines
+macro.rs.ReverseLines.NotWorkingRectangularSelection.error=Désolé, cette macro ne fonctionne pas avec la sélection rectangulaire.
+#}}}
+
+#{{{ Single Space Buffer
+macro.rs.SingleSpaceBuffer.NotDoubleSpaced.message=semble ne pas contenir d'espace double :
+macro.rs.SingleSpaceBuffer.Line.message=La ligne
+macro.rs.SingleSpaceBuffer.NotBlank.message=n'est pas vide.
+#}}}
+
+#}}}
+
+#}}}
+
+#{{{ Macro Names for Macros Menu (only original macros in original folders!)
+
+#{{{ C
+macros.folder.C.label=C
+
+C/Include_Guard.label=Gardien Include
+C/Toggle_Header_Source.label=Basculer entre le header et la source
+#}}}
+
+#{{{ Clipboard
+macros.folder.Clipboard.label=Presse-papiers
+
+Clipboard/Copy_Lines.label=Copier les lignes
+Clipboard/Copy_Lines_Containing.label=Copier les lignes contenant...
+Clipboard/Copy_Visible_Lines.label=Copier les lignes visibles
+Clipboard/Cut_Lines.label=Couper les lignes
+Clipboard/Cut_Lines_Containing.label=Couper les lignes contenant...
+Clipboard/Paste_Indent.label=Coller avec retrait
+#}}}
+
+#{{{ Editing
+macros.folder.Editing.label=Édition
+
+Editing/Duplicate_Lines_Above.label=Dupliquer les lignes vers le haut
+Editing/Duplicate_Lines_Below.label=Dupliquer les lignes vers le bas
+Editing/Emacs_Ctrl-K.label=Emacs Ctrl-K
+Editing/Emacs_Next_Line.label=Emacs ligne suivante
+Editing/Emacs_Previous_Line.label=Emacs ligne précédente
+Editing/Go_to_Column.label=Atteindre la colonne
+Editing/Greedy_Backspace.label=Suppression arrière gourmande
+Editing/Greedy_Delete.label=Suppression gourmande
+Editing/Greedy_Left.label=Gourmande vers la gauche
+Editing/Greedy_Right.label=Gourmande vers la droite
+Editing/Keywords_to_Upper_Case.label=Mots-clés en majuscule
+Editing/Mode_Switcher.label=Sélecteur de mode
+Editing/Move_Lines_Down.label=Déplacer les lignes vers le bas
+Editing/Move_Lines_Up.label=Déplacer les lignes vers le haut
+Editing/Open_Line_Above.label=Ajouter une ligne vide au-dessus
+Editing/Open_Line_Below.label=Ajouter une ligne vide en-dessous
+Editing/Toggle_Fold.label=Fermer/développer le repli
+#}}}
+
+#{{{ Files
+macros.folder.Files.label=Fichiers
+
+Files/Browse_Buffer_Directory.label=Explorer le dossier du tampon courant
+Files/Browse_Directory.label=Ouvrir un dossier
+Files/Buffer_Switcher.label=Sélecteur de fichier
+Files/Close_All_Except_Active.label=Fermer tous les autres
+Files/Copy_Name_to_Clipboard.label=Copier le nom de fichier
+Files/Copy_Path_to_Clipboard.label=Copier le chemin du fichier
+Files/Delete_Current.label=Supprimer le fichier courant
+Files/Duplicate_Buffer.label=Dupliquer le fichier courant
+Files/Glob_Close.label=Fermer selon un motif
+Files/Insert_Selection.label=Insérer la sélection
+Files/Next_Dirty_Buffer.label=Fichier modifié suivant
+Files/Open_Path.label=Ouvrir le fichier (demande du nom)
+Files/Open_Selection.label=Ouvrir le fichier sélectionné
+Files/Send_Buffer_To_Next_Split.label=Placer le tampon dans la zone de partage suivante
+Files/Toggle_ReadOnly.label=Modifier les permissions
+#}}}
+
+#{{{ Interface
+macros.folder.Interface.label=Interface
+
+Interface/Decrease_Font_Size.label=Diminuer la taille de police
+Interface/Increase_Font_Size.label=Augmenter la taille de police
+Interface/Open_Context_Menu.label=Ouvrir le menu contextuel
+Interface/Reset_TextArea.label=Réinitialiser la zone de texte
+Interface/Splitpane_Grow.label=Agrandir la zone de partage
+Interface/Toggle_Bottom_Docking_Area.label=Afficher/masquer la fenêtre ancrée en bas
+Interface/Toggle_Left_Docking_Area.label=Afficher/masquer la fenêtre ancrée à gauche
+Interface/Toggle_Right_Docking_Area.label=Afficher/masquer la fenêtre ancrée à droite
+Interface/Toggle_Top_Docking_Area.label=Afficher/masquer la fenêtre ancrée en haut
+#}}}
+
+#{{{ Java
+macros.folder.Java.label=Java
+
+Java/Create_Constructor.label=Créer un constructeur
+Java/Get_Class_Name.label=Obtenir le nom de classe
+Java/Get_Package_Name.label=Obtenir le nom du paquetage
+Java/Java_File_Save.label=Enregistrer le fichier Java
+Java/Make_Get_and_Set_Methods.label=Générer les méthodes Get et Set
+Java/Preview_JavaDoc_Of_Current_Buffer.label=Aperçu JavaDoc du tampon courant
+#}}}
+
+#{{{ Misc
+macros.folder.Misc.label=Divers
+
+Misc/Buffer_to_HyperSearch_Results.label=Résultats de l'Hyper-recherche importée du tampon courant
+Misc/Debug_BufferSets.label=Déboguer le jeu de tampons
+Misc/Display_Abbreviations.label=Liste des abréviations
+Misc/Display_Actions.label=Liste des Actions
+Misc/Display_Character_Code.label=Afficher le code du caractère
+Misc/Display_Shortcuts.label=Liste des raccourcis
+Misc/Evaluate_Buffer_in_BeanShell.label=Lancer le tampon en tant que code BeanShell
+Misc/Hex_Convert.label=Conversion hexadécimale
+Misc/HyperSearch_Results_to_Buffer.label=Résultats de l'Hyper-recherche dans un nouveau tampon
+Misc/Make_Bug_Report.label=Infos jEdit pour débogage
+Misc/Run_Script.label=Lancer en tant que script
+Misc/Show_Threads.label=Liste des processus
+#}}}
+
+#{{{ Properties
+macros.folder.Properties.label=Propriétés
+
+Properties/Create_Plugin_Announcement.label=Créer une annonce de plugin
+Properties/Insert_Buffer_Properties.label=Insérer les propriétés du tampon
+Properties/jEdit_Properties.label=Liste des propriétés de jEdit
+Properties/Look_and_Feel_Properties.label=Liste des propriétés Look and Feel
+Properties/System_Properties.label=Liste des propriétés système
+#}}}
+
+#{{{ Text
+macros.folder.Text.label=Texte
+
+Text/Add_Prefix_and_Suffix.label=Ajouter un préfixe et un suffixe
+Text/Color_Picker.label=Palette de couleurs
+Text/Compose_Tag.label=Créer une balise XML
+Text/Duplicate_Line.label=Dupliquer la ligne
+Text/Insert_Date.label=Ajouter la date et l'horaire Internet
+Text/Insert_Tag.label=Insérer une balise XML
+Text/Line_Filter.label=Filtre de lignes
+Text/Next_Char.label=Sélection jusqu'au caractère (à indiquer)
+Text/Reverse_Lines.label=Inverser l'ordre des lignes
+Text/Single_Space_Buffer.label=Réduire l'espace entre les lignes
+#}}}
+
+#}}}
diff --git a/org/jedit/localization/jedit_ja.props b/org/jedit/localization/jedit_ja.props
new file mode 100644
index 0000000..1b592d6
--- /dev/null
+++ b/org/jedit/localization/jedit_ja.props
@@ -0,0 +1,2535 @@
+###
+### jEdit user interface definitions,
+### :tabSize=8:indentSize=8:noTabs=false:
+### :folding=explicit:collapseFolds=1:
+### :encoding=UTF-8:
+###
+### Copyright (C) 1998, 2005 Slava Pestov
+###
+
+#{{{ jEdit core (jedit_gui.props)
+
+#{{{ Default user catalog file
+defaultCatalog=<?xml version="1.0"?>\n\
+	<!DOCTYPE MODES SYSTEM "catalog.dtd">\n\
+	\n\
+	<MODES>\n\
+	\n\
+	<!-- Add lines like the following, one for each edit mode you add: -->\n\
+	<!-- <MODE NAME="foo" FILE="foo.xml" FILE_NAME_GLOB="*.foo" /> -->\n\
+	\n\
+	</MODES>
+#}}}
+
+#{{{ Common strings
+common.ok=OK
+common.cancel=キャンセル
+common.close=閉じる
+common.error=エラー
+common.apply=適用
+common.more=さらに
+common.insert=挿入
+common.add=追加
+common.remove=削除
+common.moveUp=上へ
+common.moveDown=下へ
+common.clearAll=すべてクリア
+common.selectAll=すべて選択
+common.selectNone=選択解除
+
+lineSep.unix=Unix (\\n)
+lineSep.windows=DOS/Windows (\\r\\n)
+lineSep.mac=MacOS (\\r)
+#}}}
+
+#{{{ Miscellaneous
+history.caption=入力履歴:
+
+action-set.jEdit=ビルトイン コマンド
+action-set.browser=ファイルシステム ブラウザ
+action-set.macros=マクロ
+action-set.plugin=プラグイン: {0}
+
+macro-handler.beanshell.label=BeanShell スクリプト
+macro-handler.beanshell.glob=*.bsh
+
+save-layout-failed.message=ドッキングレイアウトの保存に失敗しました。
+load-layout.title=ドッキングレイアウトの読み込み
+load-layout.message=読み込むドッキングレイアウト:
+save-layout.title=ドッキングレイアウトの保存
+save-layout.message=保存するドッキングレイアウト:
+#}}}
+
+#{{{ Tool bar
+view.search.find=検索:
+view.search.close-tooltip=検索バーを隠す (ESC)
+
+view.action.prompt=アクション:
+view.action.no-completions=該当するアクションはありません
+view.action.close-tooltip=アクションバーを隠す (ESC)
+#}}}
+
+#{{{ Context menu
+view.context.customize=メニューをカスタマイズ...
+#}}}
+
+#{{{ System tray menu
+tray.newView.label=新規ビュー
+tray.newPlainView.label=新規プレーンビュー
+tray.exit.label=終了
+#}}}
+
+#{{{ Menu bar
+
+#{{{ File menu
+file.label=ファイル($F)
+new-file.label=新規作成($N)
+new-file-in-mode.label=モードを指定して新規作成($M)
+new-file-in-mode.dialog.title=新規ファイル
+new-file-in-mode.dialog.message=編集モード:
+open-file.label=開く($O)...
+reload.label=再読み込み($R)
+reload-all.label=すべて再読み込み($D)...
+close-buffer.label=閉じる($C)
+close-buffer.tooltip=この編集ペインのバッファセット内でのみ閉じます。
+global-close-buffer.label=閉じる (グローバル)
+global-close-buffer.tooltip=すべての編集ペインとビューでバッファを閉じます。
+closeall-except-active.tooltip=編集ペインのバッファセット中で他のものを閉じます。
+closeall-except-active.label=他を閉じる($T)
+closeall-bufferset.label=すべて閉じる($E)
+closeall-bufferset.tooltip=編集ペインのバッファセットをクリアします。
+bufferset-toggle-exclusive.label=排他バッファセットの切り替え($X)
+bufferset-toggle-exclusive.tooltip=バッファが開かれるとき、他の無関係なバッファセット中にあれば閉じます。
+close-all.label=すべて閉じる(グローバル)
+close-all.tooltip=すべてのビューのすべてのバッファを閉じます。
+save.label=保存($S)
+save-as.label=名前を付けて保存($A)...
+save-a-copy-as.label=複製に名前を付けて保存($Y)...
+save-a-copy-as.tooltip=現在のバッファのパスは変化しません。
+save-all.label=すべて保存($L)...
+print.label=印刷($P)...
+page-setup.label=印刷設定($G)...
+# Print selection not yet implemented
+#print-selection.label=選択範囲を印刷($T)...
+exit.label=終了($X)
+
+#{{{ Recent Files menu
+recent-files.label=最近開いたファイル($F)
+recent-files.textfield.tooltip=ここにフィルタプレフィクスやグロブパターンを入力するこどができます
+no-recent-files.label=最近開いたファイルはありません
+clear-recent-files.label=ファイル履歴のクリア
+#}}}
+
+reload-encoding.label=エンコーディングを指定して再読み込み($E)
+reload-encoding.error={0} は有効なエンコーディングではありません
+
+#}}}
+
+#{{{ Edit menu
+
+edit.label=編集($E)
+undo.label=元に戻す($U)
+redo.label=やり直し($R)
+cut.label=切り取り($C)
+copy.label=コピー($O)
+paste.label=貼り付け($P)
+select-all.label=すべて選択($A)
+word-count.label=単語カウント($W)...
+complete-word.label=単語補完($M)
+expand-abbrev.label=略語の展開($X)
+goto-line.label=行を指定して移動($G)...
+
+#{{{ More Clipboard menu
+clipboard.label=クリップボード拡張($B)
+cut-append.label=追加切り取り($C)
+copy-append.label=追加コピー($O)
+vertical-paste.label=垂直貼り付け($V)
+paste-previous.label=クリップボード履歴から貼り付け($U)...
+paste-deleted.label=削除履歴から貼り付け($D)...
+paste-special.label=形式を選択して貼り付け...
+cut-string-register.label=レジスタに切り取り($T)
+copy-string-register.label=レジスタにコピー($P)
+paste-string-register.label=レジスタを貼り付け($R)
+clear-string-register.label=レジスタをクリア
+cut-append-string-register.label=レジスタに追加切り取り($N)
+copy-append-string-register.label=レジスタに追加コピー($A)
+vertical-paste-string-register.label=レジスタを垂直貼り付け($E)
+view-registers.label=レジスタの閲覧($W)
+#}}}
+
+#{{{ More Selection menu
+selection.label=選択範囲拡張($S)
+select-none.label=選択解除($N)
+select-word.label=単語を選択($W)
+select-line.label=行を選択($L)
+select-paragraph.label=段落の選択($P)
+invert-selection.label=選択範囲の反転($I)
+toggle-multi-select.label=マルチ選択($M)
+toggle-rect-select.label=矩形選択($R)
+select-line-range.label=行範囲を指定して選択($C)...
+#}}}
+
+#{{{ Text menu
+text.label=テキスト($T)
+delete-line.label=行削除($D)
+delete-start-line.label=行頭まで削除($S)
+delete-end-line.label=行末まで削除($E)
+join-lines.label=行結合($J)
+delete-paragraph.label=段落削除($P)
+format-paragraph.label=段落整形($F)
+to-lower.label=小文字に変換($L)
+to-upper.label=大文字に変換($U)
+#}}}
+
+#{{{ Indent menu
+indent.label=インデント($I)
+indent-lines.label=行をインデント($I)
+shift-left.label=インデントを左へ($)
+shift-right.label=インデントを右へ($)
+remove-trailing-ws.label=末尾空白を除去($W)
+spaces-to-tabs.label=スペースをタブに変換($S)
+tabs-to-spaces.label=タブをスペースに変換($T)
+#}}}
+
+#{{{ Source menu
+source.label=ソース($E)
+range-comment.label=範囲コメント($R)
+line-comment.label=行コメント($L)
+select-block.label=コードブロック選択($S)
+match-bracket.label=対応する括弧に移動($M)
+prev-bracket.label=前の括弧に移動($P)
+next-bracket.label=次の括弧に移動($N)
+#}}}
+
+#}}}
+
+#{{{ Search menu
+search.label=検索($S)
+find.label=検索/置換($F)...
+find-next.label=次を検索($N)
+find-prev.label=前を検索($V)
+search-in-open-buffers.label=操作中バッファを検索($B)...
+search-in-directory.label=ディレクトリを検索($D)...
+replace-in-selection.label=選択範囲内で置換($R)
+replace-and-find-next.label=置換して次を検索($P)
+replace-all.label=すべて置換($A)
+quick-search.label=インクリメンタル検索($I)
+hypersearch.label=ハイパーサーチバー($H)
+quick-search-word.label=選択単語をインクリメンタル検索($N)
+hypersearch-word.label=選択単語をハイパーサーチ($Y)
+whole-word.label=完全一致単語のみ($W)
+ignore-case.label=大文字小文字を区別しない($C)
+regexp.label=正規表現($X)
+hypersearch-results.label=ハイパーサーチ結果
+#}}}
+
+#{{{ Markers menu
+markers.label=マーカー($M)
+add-marker.label=マーカーの追加/削除($A)
+add-marker-shortcut.label=マーカーショートカットとして追加($W)
+remove-all-markers.label=マーカーをすべて削除($M)
+goto-marker.label=マーカーへ移動($G)
+select-marker.label=マーカーまで選択($S)
+swap-marker.label=選択行を現在のマーカーと入れ替え($P)
+prev-marker.label=前のマーカーへ移動($P)
+next-marker.label=次のマーカーへ移動($N)
+no-markers.label=マーカーがありません
+markers.blank-line=[Blank line]
+#}}}
+
+#{{{ Folding menu
+folds.label=フォールド($O)
+collapse-fold.label=フォールドを閉じる($C)
+expand-one-level.label=フォールド階層をひとつ開く($E)
+expand-fold.label=フォールド階層をすべて開く($F)
+collapse-all-folds.label=すべてのフォールドを閉じる($A)
+expand-folds.label=階層を指定してフォールドを開く($L)
+expand-all-folds.label=すべてのフォールドを開く($X)
+select-fold.label=フォールドを選択($S)
+add-explicit-fold.label=明示的フォールドを追加($D)
+narrow-to-fold.label=子階層のみ表示($R)
+narrow-to-selection.label=選択領域のみ表示($W)
+parent-fold.label=親フォールドへ移動($G)
+prev-fold.label=前のフォールドへ移動($P)
+next-fold.label=次のフォールドへ移動($N)
+#}}}
+
+#{{{ View menu
+view.label=ビュー($V)
+new-view.label=新規ビュー($V)
+new-view.tooltip=ドッキングありの新規メインウィンドウ
+new-plain-view.label=新規プレーンビュー($W)
+new-plain-view.tooltip=よりツールバーが少なくドッキングなしの新規メインウィンドウ
+close-view.label=ビューを閉じる($C)
+close-view.tooltip=メインウィンドウを閉じ、もしこれが最後のビューなら jEdit を終了します。
+prev-buffer.label=前のバッファへ移動($P)
+next-buffer.label=次のバッファへ移動($N)
+recent-buffer.label=直前のバッファへ移動($R)
+toggle-buffer-switcher.label=バッファスイッチャの表示($B)
+focus-buffer-switcher.label=バッファスイッチャにフォーカス($W)
+toggle-line-numbers.label=行番号の表示($L)
+toggle-statusbar.label=ステータスバーの表示($T)
+toggle-gutter.label=ガターの表示($G)
+show-context-menu.label=コンテキストメニューを表示
+set-view-title.label=ビューのタイトルを設定...
+set-view-title.tooltip=デスクトップ上で区別しやすいよう、メインウィンドウのタイトルを設定します。
+toggle-full-screen.label=フルスクリーンモードに切り替え($F)
+
+#{{{ Scrolling menu
+scrolling.label=スクロール($G)
+scroll-to-current-line.label=現在行までスクロール($T)
+scroll-and-center.label=スクロールしてキャレットを中央へ($S)
+center-caret.label=キャレットをスクリーンの中央へ($C)
+scroll-up-line.label=前行にスクロール($U)
+scroll-down-line.label=次行にスクロール($D)
+scroll-up-page.label=前ページにスクロール($P)
+scroll-down-page.label=次ページにスクロール($O)
+#}}}
+
+#{{{ Splitting menu
+splitting.label=分割($S)
+split-horizontal.label=水平分割($H)
+split-vertical.label=垂直分割($V)
+unsplit-current.label=分割解除($U)
+unsplit.label=すべて分割解除($A)
+resplit.label=分割を復元($R)
+prev-textarea.label=前のテキストエリアへ($P)
+next-textarea.label=次のテキストエリアへ($N)
+buffersets.label=バッファセット($B)
+global-bufferset.label=グローバルスコープ($G)
+global-bufferset.tooltip=すべての編集ペインで同じバッファセットを共有します。
+view-bufferset.label=ビュースコープ($V)
+view-bufferset.tooltip=同じビューにある編集ペインは同じバッファセットを共有します。
+editpane-bufferset.label=編集ペインスコープ($E)
+editpane-bufferset.tooltip=各編集ペインがそれぞれ個別にバッファセット持ちます。
+#}}}
+
+#{{{ Docking menu
+docking.label=ドッキング($D)
+docking.menu.label=ドッキング可能メニュー
+toggle-dock-areas.label=ドッキングエリアの表示切り替え($A)
+left-docking-area.label=左ドッキングエリアにフォーカス($L)
+top-docking-area.label=上ドッキングエリアにフォーカス($T)
+right-docking-area.label=右ドッキングエリアにフォーカス($R)
+bottom-docking-area.label=下ドッキングエリアにフォーカス($B)
+focus-textarea.label=テキストエリアにフォーカス
+close-docking-area.label=現在のドッキングエリアを閉じる($C)
+layout-load.label=ドッキングレイアウトの読み込み($L)...
+layout-save.label=ドッキングレイアウトの保存($S)...
+layout-load-current-mode.label=現在のモードのドッキングレイアウトを読み込み
+layout-save-current-mode.label=現在のモードのドッキングレイアウトを保存
+#}}}
+
+#}}}
+
+#{{{ Utilities menu
+
+utils.label=ユーティリティ($U)
+vfs.browser.label=ファイルシステム ブラウザ($F)
+action-bar.label=アクションバー($A)
+last-action.label=最後のアクションを繰り返す($P)
+buffer-options.label=バッファ オプション($B)...
+global-options.label=グローバル オプション($G)...
+combined-options.label=オプション($O)...
+
+#{{{ Recent Directories menu
+recent-directories.label=最近開いたディレクトリ($R)
+no-recent-dirs.label=最近開いたディレクトリはありません
+#}}}
+
+#{{{ Favorites menu
+favorites.label=お気に入り($V)
+add-buffer-to-favorites.label=バッファをお気に入りに追加
+add-dir-to-favorites.label=ディレクトリをお気に入りに追加
+edit-favorites.label=お気に入りを編集
+#}}}
+
+#{{{ Current Directory menu
+current-directory.label=カレントディレクトリ($C)
+#}}}
+
+#{{{ jEdit Home Directory menu
+jedit-directory.label=$jEdit ホームディレクトリ
+#}}}
+
+#{{{ Settings Directory menu
+settings-directory.label=個人設定ディレクトリ($S)
+#}}}
+
+#{{{ BeanShell menu
+beanshell.label=B$eanShell
+eval.label=BeanShell 式を評価($E)...
+eval-for-selected-lines.label=選択行ごとに評価式を適用($F)...
+eval-selection.label=選択範囲を評価し置換($S)
+#}}}
+
+#{{{ Troubleshooting menu
+troubleshooting.label=トラブルシューティング($T)
+log-viewer.label=アクティビティ ログ($A)
+update-log.label=保存されたアクティビティ ログを更新($U)
+io-progress-monitor.label=$I/O プロセスモニタ
+task-monitor.label=タスクモニタ($T)
+keyboard-tester.label=キーボードテスタ($K)...
+memory-status.label=メモリステータス($M)...
+reload-modes.label=編集モードを再読み込み($R)
+#}}}
+
+#{{{ Quick options menu
+quick-options.label=クイック設定($Q)
+edit-syntax-style.label=キャレット位置のトークンのシンタクススタイルを編集
+#}}}
+
+#}}}
+
+#{{{ Macros menu
+macros.label=マクロ($C)
+new-macro.label=新規マクロ
+record-macro.label=マクロの記録($R)...
+stop-recording.label=記録停止($S)
+last-macro.label=最後のマクロを繰り返す
+record-temp-macro.label=一時マクロの記録($T)
+run-temp-macro.label=一時マクロ実行($P)
+run-other-macro.label=その他のマクロ実行($O)...
+rescan-macros.label=マクロの再スキャン($N)
+no-macros.label=マクロがありません
+#}}}
+
+#{{{ Plugins menu
+plugins.label=プラグイン($P)
+plugin-manager.label=プラグイン マネージャ($M)...
+plugin-options.label=プラグイン オプション($O)...
+no-plugins.label=プラグインはインストールされていません
+#}}}
+
+#{{{ Help menu
+help-menu.label=ヘルプ($H)
+about.label=jEdit について($A)...
+help.label=jEdit ヘルプ($H)
+tip-of-the-day.label=今日のヒント($T)
+userFeedback.label=提案を送る...
+#}}}
+
+#}}}
+
+#{{{ Macro strings
+
+macro.temp.header=// This is a temporary macro. First, check over the\n\
+		  // commands to make sure this is what you intended.\n\
+		  // Then, to run this macro, switch to the buffer\n\
+		  // where you would like to execute it and press C+m C+p.
+
+macro.header=// This is a recorded macro. First, check over the\n\
+	     // commands to make sure this is what you intended. Then,\n\
+	     // save this buffer, and the macro should appear in the\n\
+	     // Macros menu.
+
+#}}}
+
+#{{{ Commands that don't appear in menus
+backspace-word.label=直前の単語を削除
+backspace-word-std.label=直前の単語を削除 (ホワイトスペースを含む)
+backspace-word-std-after.label=直前の単語を削除 (単語の後のホワイトスペースを含む)
+backspace.label=直前の文字を削除
+delete-word.label=直後の単語を削除
+delete-word-std.label=直後の単語を削除 (ホワイトスペースを含む)
+delete.label=直後の文字を削除
+document-end.label=バッファの末尾に移動
+document-home.label=バッファの先頭に移動
+end.label=エンド
+home.label=ホーム
+smart-end.label=スマート エンド
+smart-home.label=スマート ホーム
+insert-literal.label=直後にリテラル文字を挿入
+insert-newline.label=改行を挿入
+insert-newline-indent.label=改行とインデントを挿入
+insert-tab.label=タブ文字を挿入
+insert-tab-indent.label=タブ文字とインデントを挿入
+line-end.label=行末に移動
+line-home.label=行頭に移動
+next-char.label=直後の文字に移動
+next-line.label=直後の行に移動
+next-page.label=直後のページに移動
+next-paragraph.label=直後の段落に移動
+next-word.label=直後の単語に移動
+next-word-std.label=直後の単語に移動 (ホワイトスペースを含む)
+overwrite.label=上書きモード
+prev-char.label=直前の文字に移動
+prev-line.label=直前の行に移動
+prev-page.label=直前のページに移動
+prev-paragraph.label=直前の段落に移動
+prev-word.label=直前の単語に移動
+prev-word-std.label=直前の単語に移動 (ホワイトスペースを含む)
+prev-word-std-after.label=直前の単語に移動 (単語の後のホワイトスペースを含む)
+select-document-end.label=バッファの末尾までを選択
+select-document-home.label=バッファの先頭までを選択
+select-end.label=スマートエンド位置までを選択
+select-home.label=スマートホーム位置までを選択
+select-line-end.label=行末までを選択
+select-line-home.label=行頭までを選択
+select-next-char.label=直後の文字を選択
+select-next-line.label=直後の行を選択
+select-next-page.label=直後のページを選択
+select-next-paragraph.label=直後の段落を選択
+select-next-word.label=直後の単語を選択
+select-next-word-std.label=直後の単語を選択 (ホワイトスペースを含む)
+select-prev-char.label=直前の文字を選択
+select-prev-line.label=直前の行を選択
+select-prev-page.label=直前のページを選択
+select-prev-paragraph.label=直前の段落を選択
+select-prev-word.label=直前の単語を選択
+select-prev-word-std.label=直前の単語を選択 (ホワイトスペースを含む)
+select-prev-word-std-after.label=直後の単語を選択 (単語の後のホワイトスペースを含む)
+select-visible-end.label=末尾表示行までを選択
+select-visible-home.label=先頭表示行までを選択
+select-whitespace-end.label=ホワイトスペースの終了までを選択
+select-whitespace-home.label=ホワイトスペースの開始までを選択
+toggle-line-separator.label=改行文字を切り替え
+toggle-word-wrap.label=ワードラップを切り替え
+visible-end.label=末尾表示行に移動
+visible-home.label=先頭表示行に移動
+whitespace-end.label=ホワイトスペースの末尾に移動
+whitespace-home.label=ホワイトスペースの先頭に移動
+#}}}
+
+#{{{ View stuff
+
+# Title
+view.title=jEdit -\u0020
+view.title.dirty=\ (変更)
+
+view.docking.close-tooltip=現在のドッキングウィンドウを隠す
+view.docking.menu-tooltip=ドッキングオプション
+view.docking.menu-floating=フロート
+view.docking.menu-top=上にドッキング
+view.docking.menu-left=左にドッキング
+view.docking.menu-bottom=下にドッキング
+view.docking.menu-right=右にドッキング
+view.docking.menu-clone=新規インスタンス
+view.docking.menu-close=閉じる
+view.docking.menu-undock=ドッキングから除去
+
+view.docking.toggle.label={0} (切り替え)
+view.docking.float.label={0} (新規フロートインスタンス)
+
+directory.not-local=リモートファイルシステムのディレクトリを一覧できません
+directory.no-files=ファイルがありません
+
+#{{{ Gutter highlight
+view.gutter.marker.no-name=マーカー
+view.gutter.marker=マーカー: {0}
+#}}}
+
+#{{{ Status messages
+view.status.add-marker=新規マーカーのショートカット? [{0}]
+view.status.auto-wrap=検索文字列が見つかりません。巡回します!
+view.status.bracket=一致 行 {0}: {1}
+view.status.caret-tooltip=オフセット/行/列番号 (オフセット,行,列[-仮想] 相対%)
+view.status.copy-append-string-register=追加コピーするレジスタ? [{0}]
+view.status.copy-string-register=コピーするレジスタ? [{0}]
+view.status.cut-append-string-register=追加切り取りするレジスタ? [{0}]
+view.status.cut-string-register=切り取りするレジスタ? [{0}]
+view.status.expand-folds=フォールドレベル? [1-9]
+view.status.goto-marker=移動に使用するマーカーのショートカット? [{0}]
+view.status.incomplete-abbrev={0} 個のパラメータが指定されましたが {1} 個が要求されます!
+view.status.insert-literal=そのまま挿入するキー?
+view.status.io-1=I/O: 操作が進行中
+view.status.io.done=I/O 完了
+view.status.io=I/O: {0} 件の操作が進行中
+view.status.linesep-changed=改行文字を設定 {0}
+view.status.linesep-tooltip=改行文字 (クリックで変更)
+view.status.memory-tooltip=Java ヒープメモリ: {0}Kb/{1}Kb
+view.status.mode-tooltip=編集モード/フォールドモード/エンコーディング
+view.status.multi-changed=マルチ選択モード {0,choice,0#オフ|1#オン}
+view.status.multi-tooltip=マルチ選択モード (クリックで変更)
+view.status.narrow=すべてのテキストを表示するには、"すべてのフォールドを開く"を実行
+view.status.no-markers=マーカーは設定されていません
+view.status.no-registers=レジスタは定義されていません
+view.status.overwrite-changed=上書きモード {0,choice,0#オフ|1#オン}
+view.status.overwrite-tooltip=上書き/挿入モードインジケータ (クリックで変更)
+view.status.paste-string-register=これを貼り付け用に登録? [{0}]
+view.status.print=印刷中 ページ {0}
+view.status.quick-copy=クィックコピーモード - マークされたテキストは選択範囲で置換されます
+view.status.recording=マクロ記録中
+view.status.rect-select-changed=矩形選択 {0,choice,0#オフ|1#オン}
+view.status.rect-tooltip=矩形選択モード (クリックで変更)
+view.status.replace-all={1} ファイル中 {0} 件が置換されました
+view.status.search-not-found=検索文字列は見つかりません!
+view.status.select-marker=選択に使用するマーカーのショートカット? [{0}]
+view.status.swap-marker=キャレット位置と置き換えるマーカーのショートカット? \
+	[{0}]
+view.status.vertical-paste-string-register=垂直貼り付けに使用するレジスタ \
+	[{0}]
+view.status.wrap-changed=ワードラップモードは現在 "{0}" です
+view.status.wrap-tooltip=<html>ワードラップモードは {0} です。(クリックで変更)</html>
+view.status.indent-tooltip=自動インデントインジケータ (クリックで変更)
+view.status.autoindent-changed=インデントの状態は現在 "{0}" です。
+view.status.bufferset-tooltip=バッファセットスコープは {0} です。
+wrap.none=なし
+wrap.hard=ハード
+wrap.soft=ソフト
+#}}}
+
+#{{{ Status bar component visibility
+
+#}}}
+
+#}}}
+
+#{{{ Printing
+
+print.headerText=jEdit - {0}
+print.footerText={0} :: ページ {1}
+
+print-error.title=印刷エラー
+print-error.message=以下を印刷中にエラーが発生しました:\n\
+	{0}
+#}}}
+
+#{{{ Various dialog boxes
+
+#{{{ About dialog
+about.title=jEdit について
+about.version=jEdit {0} {1} モード Java {2}
+about.mode.standalone=スタンドアローン
+about.mode.server=サーバ
+about.mode.server-background=サーバ バックグラウンド
+about.navigate=矢印キーを押してクレジットをスクロールできます
+
+# This text scrolls by in the about dialog box.
+# Hack: Since StringTokenizer treats two consequent \n as one token, we
+# insert a space by itself in the text to create blank lines.
+about.text.prefix=jEdit は以下の人たちからあなたに提供されました。
+about.text.suffix=ユーザの皆さんのご意見、フィードバック、バグ報告にも\n\
+	また深く感謝したいと思います。
+#}}}
+
+#{{{ Error list dialog, used to report I/O and plugin load errors
+error-list.plugin-manager=プラグイン マネージャ
+#}}}
+
+#{{{
+largeBufferDialog.title=巨大バッファ {0}
+largeBufferDialog.message=バッファが非常に大きく、シンタクスハイライトのために jEdit が応答しなくなる恐れが\n\
+	あります。下記の選択肢を考慮してください。\n\
+	-完全な文法を維持 : jEdit のシンタクスハイライトは通常どおり機能しますが、jEdit が\n\
+	とても遅くなるかもしれません。これは推奨されません。\n\
+	-文脈を検知しないシンタクスハイライト。この場合 jEdit はいくらかはシンタクスハイライト\n\
+	を維持しようとしますが、結果は完全でないかもしれません。バッファは前の行の文脈を無視して、\n\
+	個々の行ごとにハイライトされます。もし複数行にわたる句 (複数行コメントやXMLタグ...) が\n\
+	あれば、文法が正確でないことがありえます。\n\
+	-jEdit のデフォルトの編集モードを使用 (通常はシンタクスハイライトのないテキストモード)
+
+largeBufferDialog.fullSyntax=完全なシンタクスハイライト
+largeBufferDialog.contextInsensitive=文脈を検知しないシンタクスハイライト
+largeBufferDialog.defaultMode=テキスト編集モード
+#}}}
+
+#{{{ I/O error dialog box
+ioerror.title=I/O エラー
+ioerror.caption=以下の {0} 件の I/O 操作を完了できませんでした:
+ioerror.caption-1=以下の I/O 操作を完了できませんでした:
+
+ioerror={0}
+ioerror.directory-error=ディレクトリが一覧できません: {0}
+ioerror.directory-error-nomsg=ディレクトリが一覧できません。
+ioerror.encoding-error=エンコーディング"{0}"では読み込めませんでした。\n\
+	({1})\n\
+	異なるエンコーディングを選んでみてください。\n\
+	メニューの ファイル->エンコーディングを指定して再読み込み で選択できます。\n\
+	自動的にこの操作が実行されるようにしたい場合、グローバルオプションのエンコーディング\n\
+	ペインにある「代替エンコーディング(複数可)」に候補を追加します。
+
+ioerror.write-encoding-error=エンコーディング"{0}"で、{1}行目の{2}列目にある\n\
+	文字{3}のエンコードに失敗しました。
+ioerror.read-error=読み込めません: {0}
+ioerror.write-error=保存できません: {0}
+ioerror.unsupported-encoding-error={0} 文字セットはこのJVMでサポートされていません。
+ioerror.open-directory=ディレクトリはバッファとして開けません。
+ioerror.save-directory=ディレクトリにはバッファを保存できません。
+ioerror.no-read=ファイルを読み込むには権限が不足しています。
+ioerror.no-write=ファイルを読み込むには権限が不足しています。
+ioerror.write-error-readonly=保存できません。ファイルは読み込み専用です。
+ioerror.save-readonly-twostagefail=保存できません。ファイルが読み込み専用のため、ツーステージ保存が不可能です。
+ioerror.badurl=不正な URL: {0}
+ioerror.delete-error=ファイルを削除できません。
+ioerror.rename-exists=既存ファイル {0} を上書きできません。
+ioerror.rename-error={0} に名前を変更できません。
+ioerror.mkdir-error=ディレクトリを作成できません。
+
+vfs.not-supported.list=ファイルシステム "{0}" 上のディレクトリはブラウズできません。
+vfs.not-supported.load=ファイルシステム "{0}" 上のファイルを開くことはできません。
+vfs.not-supported.save=ファイルシステム "{0}" には保存することが出来ません。
+
+vfs.overwrite-readonly.title=ファイルは読み込み専用です
+vfs.overwrite-readonly.message=ファイル {0} は読み込み専用です。\n\
+	ツーステージ保存(Unixではファイル所有者をリセット)が使用する\
+	読み込み専用フラグをリセットして保存しますか。
+
+vfs.twostageimpossible.title=ツーステージ保存は使用できません。
+vfs.twostageimpossible.message=ツーステージ保存は使用できませが、どうしても\n\
+	保存したいですか ?
+
+out-of-memory-error=Javaヒープメモリが不足していたため、この要求を完了\
+	できませんでした。最大ヒープサイズを増加させて再試行してください。\n\
+	\n\
+	Javaヒープサイズの変更についてのドキュメントは、ユーザーガイドの\
+	"jEdit Basics" 章の "Buffers" 節にあります。
+
+#}}}
+
+#{{{ Old I/O error dialog boxes
+ioerror.message=I/O エラー発生 ({0})
+
+read-error.title=読み込みエラー
+# {0} - the path name {1} - the error message
+read-error.message=ファイル名 {0}\n\
+	I/O エラーのためロードできません。\n\
+	({1})
+
+write-error.title=書き込みエラー
+# {0} - the path name {1} - the error message
+write-error.message=ファイル名 {0}\n\
+	I/O エラーのため保存できません。\n\
+	({1})
+
+directory-error.title=ディレクトリ エラー
+# {0} - the path name {1} - the error message
+directory-error.message=ディレクトリ名 {0}\n\
+	I/O エラーのため一覧できません。\n\
+	({1})
+
+directory-error-nomsg.title=ディレクトリ エラー
+# {0} - the path name
+directory-error-nomsg.message=ディレクトリ名 {0}\n\
+	I/O エラーのため一覧できません。
+
+encoding-error.title=非互換エンコーディング
+encoding-error.message=ファイル名 {0}\n\
+	"{1}" エンコーディングではロードできません。\n\
+	({2})\n\
+	\n\
+	異なるエンコーディングを使用するには、ファイル->開く \n\
+	にある"コマンド"の"エンコーディング"メニューを試してください。\n\
+	\n\
+	本当に行き詰まり、どのエンコーディングを使っていいかわからない\n\
+	場合は、"ASCII" か "8859_1" を試してください。
+
+open-directory.title=ディレクトリは開けません
+open-directory.message={0} はディレクトリです。\n\
+	ディレクトリを編集するために開くことは出来ません。
+
+save-directory.title=ディレクトリは保存できません
+save-directory.message={0} はディレクトリです。\n\
+	バッファをディレクトリに上書き保存することはできません。
+
+no-read.title=ファイルを開けません
+no-read.message={0} から読み込むことが出来ません。\n\
+	権限が不足している可能性があります。
+
+no-write.title=ファイルを保存できません
+no-write.message={0} に保存することができません。\n\
+	権限が不足している可能性があります。
+
+badurl.title=無効なURL
+# {0} - the URL
+# {1} - the error
+badurl.message=この URL は無効です: {0}\n\
+	({1})
+#}}}
+
+#{{{ Go to line dialog
+goto-line.title=行移動
+goto-line.message=移動先の行:
+#}}}
+
+#{{{ Word count dialog
+wordcount.title=単語カウント
+# {0} - characters
+# {1} - words
+# {2} - lines
+wordcount.message=文字: {0}\n単語: {1}\n行: {2}
+#}}}
+
+#{{{ Set marker dialog
+setmarker.title=マーカー設置
+setmarker.message=マーカー名:
+#}}}
+
+#{{{ File not saved dialog
+notsaved.title=ファイルは保存されていません
+# {0} - file name
+notsaved.message={0} への変更を保存しますか?
+#}}}
+
+#{{{ File changed, still reload dialog
+changedreload.title=ファイルは変更されています
+changedreload.message=ファイル {0}\n\
+	は最後の保存以降に変更されています。再読み込みすると\n\
+	変更は失われます。続けますか?
+#}}}
+
+#{{{ Autosave file exists dialog
+autosave-found.title=自動保存ファイルがあります
+# {0} - autosave file name
+autosave-found.message=自動保存ファイル {0}\n\
+	が見つかりました! 保存できないうちに jEdit がクラッシュした\n\
+	可能性があります。自動保存ファイルを開きますか?
+
+autosave-loaded.title=自動保存ファイルのロード完了
+autosave-loaded.message=自動保存ファイル {0}\n\
+	をロードしました。すぐに、保存されていないデータを含んでいないかを確認してください。\n\
+	自動保存された変更を維持したい場合、このファイルを保存します。\n\
+	これらを破棄したい場合、ファイル->再読み込み を実行します。
+#}}}
+
+#{{{ Save all confirm dialog
+saveall.title=すべてのバッファを保存
+saveall.message=修正されたすべてのバッファを保存してもよろしいですか?
+#}}}
+
+#{{{ Reload all confirm dialog
+reload-all.title=すべてのバッファを再読み込み
+reload-all.message=すべてのバッファをディスクから再読み込みしてもよろしいですか?\n\
+	開いているバッファの保存していない変更は、すべて失われることになります!
+#}}}
+
+#{{{ Encoding prompt
+encoding-prompt.title=異なるエンコーディングで開く
+encoding-prompt.message=使用する文字エンコーディング:
+#}}}
+
+#{{{ Macro recording already in progress dialog
+already-recording.title=すでに記録中
+already-recording.message=マクロの記録はすでに開始されています。
+#}}}
+
+#{{{ No temporary macro dialog
+no-temp-macro.title=一時マクロなし
+no-temp-macro.message=記録されている一時マクロはありません。
+#}}}
+
+#{{{ Record macro dialog
+record.title=マクロの記録
+record.message=マクロ名:
+#}}}
+
+#{{{ Some features don't work with -nosettings dialog
+no-settings.title=機能は無効です
+no-settings.message=jEdit は -nosettings スイッチで起動されています。\n\
+	この機能を使うには、そのスイッチなしで jEdit を起動しなければなりません。
+#}}}
+
+#{{{ Some features don't work with the web start version
+no-webstart.title=機能は無効です
+no-webstart.message=この機能は WebStart 版の jEdit では使用できません。
+
+#}}}
+
+#{{{ Search and replace dialog
+search.title=検索/置換
+
+search.find=検索(S):
+search.find.tooltip=PgUp/PgDownか右クリックで履歴呼び出し
+search.find.mnemonic=S
+search.replace=置換(W):
+search.replace.mnemonic=W
+search.string-replace-btn=テキスト
+search.beanshell-replace-btn=BeanShell スニペットからの戻り値
+
+search.settings=オプション:
+search.keep=ダイアログを維持(K)
+search.keep.mnemonic=K
+search.word=完全一致単語のみ(Q)
+search.word.mnemonic=Q
+search.case=大文字小文字を区別しない(I)
+search.case.mnemonic=I
+search.regexp=正規表現(X)
+search.regexp.mnemonic=X
+search.hypersearch=ハイパーサーチ(H)
+search.hypersearch.mnemonic=H
+search.wrap=自動ラップ(T)
+search.wrap.mnemonic=T
+
+search.direction=方向:
+search.back=後方(B)
+search.back.mnemonic=B
+search.forward=前方(O)
+search.forward.mnemonic=O
+
+search.fileset=検索対象:
+search.selection=選択範囲(N)
+search.selection.mnemonic=N
+search.current=現在のバッファ(C)
+search.current.mnemonic=C
+search.all=すべてのバッファ(L)
+search.all.mnemonic=L
+search.directory=ディレクトリ(D):
+search.directory.mnemonic=D
+search.skipHidden=隠し/バックアップを無視(H)
+search.skipBinary=バイナリファイルを無視(B)
+search.skipHidden.mnemonic=H
+search.skipBinary.mnemonic=B
+
+search.directoryField=ディレクトリ(Y):
+search.directoryField.mnemonic=Y
+search.filterField=フィルタ(F):
+search.filterField.mnemonic=F
+search.filterField.tooltip={*.c,*.h} で拡張子複数対応
+search.subdirs=サブディレクトリの検索(U)
+search.subdirs.mnemonic=U
+search.choose=選択(E)...
+search.choose.mnemonic=E
+search.synchronize=同期(Z)
+search.synchronize.mnemonic=Z
+search.synchronize.tooltip=フィルタとディレクトリに現在のバッファの拡張子と場所をセットします。
+search.findBtn=検索(F)
+search.findBtn.mnemonic=F
+search.replaceBtn=置換
+search.replaceAndFindBtn=置換して検索(R)
+search.replaceAndFindBtn.mnemonic=R
+search.replaceAllBtn=すべて置換(A)
+search.replaceAllBtn.mnemonic=A
+
+# Beep when searching automatically wraps?
+
+#}}}
+
+#{{{ Keep searching dialog
+keepsearching.title=これ以上の一致は発見できません
+keepsearching.message=これ以上の一致は発見できません。\n\
+	{0,choice,0#先頭|1#末尾}から検索を続けますか?
+#}}}
+
+#{{{ HyperSearch results dialog
+hypersearch-results.title=ハイパーサーチ結果
+hypersearch-results.result-caption={0} ({1} 箇所 / {2} ファイル中)
+hypersearch-results.open=開く
+hypersearch-results.open-view=新規ビューで開く
+hypersearch-results.open-plain-view=新規プレーンビューで開く
+hypersearch-results.open-split=新規スプリットで開く
+hypersearch-results.remove-node=ノード削除
+hypersearch-results.new-search=ここから新規検索
+hypersearch-results.expand-child-nodes=子ノードの展開
+hypersearch-results.collapse-child-nodes=子ノードの折りたたみ
+hypersearch-results.copy-to-clipboard=クリップボードにコピー
+hypersearch-results.redo=ハイパーサーチ やり直し
+hypersearch-results.tree-view=ツリービュー表示の切り替え
+hypersearch-results.clear.label=すべてのノードを削除
+hypersearch-results.stop.label=ハイパーサーチを中止して、現在の結果を表示
+hypersearch-results.multi.label=複数結果表示の切り替え
+hypersearch-results.highlight.label=一致ハイライトスタイルを設定
+hypersearch-results.file-caption={0} ({1} 箇所 / {2} 行中)
+hypersearch-results.searching="{0}" の検索中...
+hypersearch-results.no-results="{0}" は見つかりませんでした。
+hypersearch-results.done="{0}" の検索結果:
+
+hypersearch-status=検索中
+#}}}
+
+#{{{ HyperSearch too many results
+hypersearch.tooManyResults.label=結果が多すぎます
+hypersearch.tooManyResults.title=結果が多すぎます
+hypersearch.tooManyResults.message=この検索はまだ完了していませんが、\n\
+	{0}件もの結果を返しました。中止しますか?。
+#}}}
+
+
+#{{{ Search and replace error dialog
+searcherror.title=検索/置換エラー
+# {0} - error message
+searcherror.message=この操作を実行中にエラーが発生しました。
+#}}}
+
+#{{{ Search and replace error dialog
+searcherror-bsh.title=検索/置換エラー
+# {0} - error message
+searcherror-bsh.message=この操作を実行中にエラーが発生しました。\n\
+	\n\
+	置換文字列をBeanShell式として解釈する意図がないなら、\n\
+	置換モードが"テキスト"に設定されていることを確認してください。
+#}}}
+
+#{{{ Empty fileset error dialog
+empty-fileset.title=空のファイルセット
+empty-fileset.message=指定された検索ファイルセットはファイルを含んでいません。
+	ファイル名フィルタと検索対象ディレクトリ(適用可能なら)を\n\
+	正しく設定してください。
+#}}}
+
+#{{{ Can only search local directories dialog
+remote-dir-search.title=非ローカルディレクトリの選択
+remote-dir-search.message=非ローカルディレクトリへの検索を実行しました。\n\
+	ネットワーク遅延等のために非常に遅くなる場合があります。\n\
+	継続してもよろしいですか?
+#}}}
+
+#{{{ "Search in selection" active but nothing selected in text area
+search-no-selection.title=何も選択されていません
+search-no-selection.message=いくらかのテキストを選択するか、"選択範囲を\n\
+	検索"オプションを無効にしてください。
+#}}}
+
+#{{{ Paste previous and paste deleted dialogs
+paste-from-list.whitespace=<ホワイトスペース>
+paste-previous.title=履歴から貼り付け
+paste-previous.caption=最近 コピー/切り取り されたテキスト:
+paste-deleted.title=削除履歴から貼り付け
+paste-deleted.caption=最近削除されたテキスト:
+#}}}
+
+#{{{ File changed on disk dialog
+filechanged-save.title=ディスク上のファイル変更
+filechanged-save.message=ファイル {0} は\n\
+	ディスク上で他のプログラムによって変更されています。\n\
+	保存処理を継続してもよろしいですか?
+#}}}
+
+#{{{ File exists dialog
+fileexists.title=既存ファイルあり
+fileexists.message=ファイル {0} はすでに存在します。\n\
+	上書きしてもよろしいですか?
+#}}}
+
+#{{{ Select line range dialog
+selectlinerange.title=行範囲を指定して選択
+selectlinerange.caption=選択する行範囲:
+selectlinerange.start=開始行:
+selectlinerange.end=終了行:
+#}}}
+
+#{{{ View registers dialog
+view-registers.title=レジスタ
+view-registers.caption=レジスタ:
+view-registers.clipboard=$ (クリップボード)
+view-registers.selection=% (選択範囲)
+view-registers.none=レジスタは定義されていません
+view-registers.register=レジスタ:
+view-registers.contents=内容:
+view-registers.undefined=__UNDEFINED__
+#}}}
+
+#{{{ Close all buffers dialog
+close.title=未保存の変更
+close.caption=以下のバッファには未保存の変更があります:
+close.selectAll=すべて選択(A)
+close.selectAll.mnemonic=A
+close.save=選択を保存(S)
+close.save.mnemonic=S
+close.discard=選択を破棄(D)
+close.discard.mnemonic=D
+#}}}
+
+#{{{ Files changed on disk dialog
+files-changed.title=ディスク上でのファイル変更
+files-changed.caption=以下のファイルはディスク上で他のプログラムによって変更されました:
+files-changed.deleted=ディスク上で削除されたので再作成して保存:
+files-changed.changed-auto=自動的に再読み込み:
+files-changed.changed=ディスク上での変更:
+files-changed.changed-dirty-auto=バッファ編集中のため再読み込みされません:
+files-changed.changed-dirty=バッファ編集中でディスク上のファイル変更:
+files-changed.select-all=すべて選択(A)
+files-changed.select-all.mnemonic=A
+files-changed.reload=再読み込み(R)
+files-changed.reload.mnemonic=R
+files-changed.ignore=無視(I)
+files-changed.ignore.mnemonic=I
+#}}}
+
+#{{{ Abbrev dialogs
+add-abbrev.title=略語の追加
+add-abbrev.mode=モード別追加
+add-abbrev.global=グローバル追加
+
+edit-abbrev.title=略語の編集
+
+edit-abbrev.duplicate.title=略語の重複
+edit-abbrev.duplicate.message=\
+	この略語にはすでに他の展開後が存在します。\n\
+	\n\
+	既存の展開語をオーバーライドしますか?
+
+abbrev-editor.abbrev=略語:
+abbrev-editor.before=キャレットの前に挿入するテキスト:
+abbrev-editor.after=キャレットの後に挿入するテキスト:
+#}}}
+
+#{{{ XMode errors
+xmode-error.title=XML パースエラー
+# {2} is the column number, but it's not too useful so we don't show it
+xmode-error.message={0} のパース中にエラーが発生しました。行 {1}:\n\
+	{3}
+xmode-error.dtd=DTDをロードできません。\n({0})
+xmode-error.termchar-invalid=AT_CHAR 属性の値が不正です ({0})
+xmode-error.doctype-invalid=MODE ドキュメントタイプが期待されますが、存在するのは {0} でした
+xmode-error.empty-tag={0} タグは空にできません
+xmode-error.token-invalid=トークンタイプ {0} は不正です
+xmode-error.empty-keyword=キーワードテキストは空にできません
+xmode-error.regexp=不正な正規表現\n({0})
+xmode-error.hash-char-and-hash-chars-mutually-exclusive=HASH_CHAR と HASH_CHARS を両方指定することはできません
+xmode-error.delegate-invalid=不正なデリゲート: {0}
+#}}}
+
+#{{{ JARClassLoader errors
+plugin-error.title=プラグインエラー
+plugin-error.caption=以下のプラグインをロードできません:
+plugin-error.caption-1=以下のプラグインをロードできません:
+
+plugin-error.load-error=ロードできません: {0}\n\
+	もっとも有力な原因は、JARファイルが壊れていることです。\n\
+	再インストールしてみてください。完全なスタックトレースを見るには、\n\
+	ユーティリティ->トラブルシューティング->アクティビティ ログ を参照\n\
+	してください。
+plugin-error.start-error=開始できません: {0}\n\
+	プラグインをより最新のバージョンにアップデートしてみてください。
+plugin-error.already-loaded=ふたつのコピーがインストールされています。\
+	ふたつのコピーのうち一方を削除してください。
+plugin-error.dep-jdk=Java {0} かそれ以降が必要ですが、バージョン {1} しかありません。
+plugin-error.dep-jedit=jEdit {0} かそれ以降が必要ですが、バージョン {1} しかありません。\n\
+	新しいバージョンの jEdit を <http://www.jedit.org> からダウンロードしてください。.
+plugin-error.dep-plugin.no-version={1} のバージョン {0} かそれ以降が必要ですが、\
+	{1} はインストールされていません。
+plugin-error.dep-plugin.broken={0} が必要ですが、{0}\n\
+	をロードできません。
+plugin-error.dep-plugin={1} のバージョン {0} かそれ以降が必要ですが、\
+	{1} はバージョン {2} しかありません。
+plugin-error.dep-class=クラス {0} が必要です。\n\
+	適切なプラグインかクラスライブラリをインストールしてみてください。
+plugin-error.missing-jar=JAR ファイル {0} が必要です。\n\
+	この JAR ファイルはプラグインの一部ですが、見つかりません。\n\
+	プラグインを再インストールしてみてください。
+plugin-error.not-42=このプラグインは動的ローディングをサポートしません。\n\
+	このプラグインのインストール/削除後に、jEdit を再起動する必要があります。
+
+plugin-error-download.title=プラグインエラー
+plugin-error-download.message=プラグインのダウンロード中にエラーが発生しました。他のミラーを試してください。\n{0}
+#}}}
+
+#{{{ Macro dialogs
+macro-input.title=マクロ 入力
+macro-error.title=マクロ エラー
+macro-message.title=マクロ メッセージ
+macro-confirm.title=マクロ 確認
+#}}}
+
+#{{{ BeanShell stuff
+beanshell-error.title=BeanShell エラー
+beanshell-error.message=BeanShellエラーが発生しました。
+
+beanshell-eval-input.title=BeanShell式の評価
+beanshell-eval-input.message=BeanShell式:\n\
+	\n\
+	変数:\n\
+	view - 現在のビューインスタンス\n\
+	editPane - 現在の編集ペインインスタンス\n\
+	textArea - 現在のテキストエリアインスタンス\n\
+	buffer - 現在のバッファ
+
+beanshell-eval.title=BeanShell評価
+beanshell-eval.message={0}
+
+beanshell-eval-line.title=BeanShell式の評価
+beanshell-eval-line.message=各選択行を評価するBeanShell\
+	式:\n\
+	\n\
+	変数:\n\
+	line - バッファの開始からの行インデックス\n\
+	index - 選択範囲開始からの行インデックス\n\
+	text - 行のテキスト\n\
+	view - 現在のビューインスタンス\n\
+	editPane - 現在の編集ペインインスタンス\n\
+	textArea - 現在のテキストエリアインスタンス\n\
+	buffer - 現在のバッファ
+#}}}
+
+#{{{ Macro not recording dialog
+macro-not-recording.title=記録されていません
+macro-not-recording.message=現在マクロは記録されていません。
+#}}}
+
+#{{{ Large repeat count warning
+large-repeat-count.title=非常に多い反復回数
+large-repeat-count.message=本当に "{0}" を {1} 回実行しますか?
+
+large-repeat-count.user-input.title=非常に多い反復回数
+large-repeat-count.user-input.message=本当に "{0}" を {1} 回挿入しますか?
+
+#}}}
+
+#{{{ Wrong fold mode dialog
+folding-not-explicit.title=誤ったフォールドモード
+folding-not-explicit.message=このコマンドは明示的なフォールドモードでのみ使用できます。
+#}}}
+
+#{{{ Memory status dialog box
+memory-status.title=Java ヒープメモリ
+memory-status.gc=ガベージコレクションで {0} Kb 解放されました。
+memory-status.use=使用 {0} Kb / 合計 {1} Kb
+#}}}
+
+#{{{ Multiple I/O request errors
+buffer-multiple-io.title=I/O エラー
+buffer-multiple-io.message=各バッファは、いちどにひとつの入出力操作しかできません。\n\
+	他の操作を開始するのは、現在の操作が完了(もしくはI/O\n\
+	進捗モニタで中止)するまで待ってください。
+
+
+browser-multiple-io.title=I/O エラー
+browser-multiple-io.message=各ファイルシステムブラウザは、いちどにひとつの入出力操作しかできません。\n\
+	他の操作を開始するのは、現在の操作が完了(もしくはI/O\n\
+	進捗モニタで中止)するまで待ってください。
+	
+#}}}
+
+#{{{ maxLineLen=0 warning
+format-maxlinelen.title=ラップマージン
+format-maxlinelen.message=このコマンドを実行するには、ラップマージンを0に\n\
+	設定しなければなりません。
+#}}}
+
+#{{{ Text under caret does not have a syntax style (token type)
+syntax-style-no-token.title=シンタクス書式設定
+syntax-style-no-token.message=キャレット位置のテキストは設定できる\
+	シンタクス書式に関連していません。
+#}}}
+
+#{{{ View title dialog
+view.title.select=このビューのタイトルを入力してください:
+#}}}
+#}}}
+
+#{{{ Buffer options dialog
+buffer-options.title=バッファ オプション
+buffer-options.caption=このダイアログボックスは現在のバッファのみ設定を変更します。\n\
+	編集モードのデフォルト設定を変更するには、\n\n
+	ユーティリティ->グローバル オプション->編集 ダイアログを参照してください。
+buffer-options.loading-saving=読み込み/保存
+buffer-options.lineSeparator=改行文字:
+buffer-options.encoding=文字エンコーディング:
+buffer-options.gzipped=GZIP(圧縮)ファイル
+buffer-options.editing=編集
+buffer-options.mode=編集モード:
+#}}}
+
+#{{{ Global options dialog
+options.title=オプション
+options.title-template={0}: {1}
+options.jedit.label=jEdit
+
+# Option pane to show by default
+options.last=editing
+
+#{{{ Options groups
+
+#}}}
+
+#{{{ General pane
+options.general.label=一般
+options.general.lineSeparator=デフォルト改行文字:
+options.general.encoding=デフォルト文字エンコーディング:
+options.general.encodingAutodetect=可能な場合ファイルのエンコーディングを自動検出
+options.general.checkModStatus=編集中のファイルがディスク上で変更されたとき:
+options.general.checkModStatus.nothing=何もしない
+options.general.checkModStatus.prompt=問い合わせる
+options.general.checkModStatus.reload=自動的に更新し通知する
+options.general.checkModStatus.silentReload=通知せずに自動更新
+options.general.checkModStatusUpon=ファイル変更を確認するきっかけ:
+options.general.checkModStatusUpon.focus=アプリケーションフォーカス
+options.general.checkModStatusUpon.all=アプリケーションフォーカス 対象バッファ表示 他バッファの保存
+options.general.checkModStatusUpon.operations=対象バッファ表示 他バッファの保存
+options.general.checkModStatusUpon.focusBuffer=対象バッファ表示および保存
+options.general.checkModStatusUpon.none=対象バッファの保存
+options.general.recentFiles=最近開いたファイルの記憶:
+options.general.hypersearch.maxWarningResults=ハイパーサーチの中止を問う閾値:
+options.general.sortRecent=最近開いたファイルをソート
+options.general.saveCaret=最近開いたファイルのキャレット位置を保存
+options.general.persistentMarkers=マーカーの位置を保存
+options.general.resetUndo=保存時に元に戻す履歴をリセット
+options.general.restore=起動時に前回開いていたファイルを開く
+options.general.restore.splits=分割設定を復元
+options.general.restore.remote=... VFS経由のリモートファイルも開く
+options.general.restore.cli=... コマンドラインでファイル名が指定された場合も開く
+options.general.encodingDetectors=エンコーディング検出方法(複数可):
+options.general.fallbackEncodings=代替エンコーディング(複数可):
+options.general.fallbackEncodings.tooltip=ロード中のエンコーディングエラーに対して再試行する、ホワイトスペースで分割された複数のエンコーディング
+options.general.systrayicon=システムトレイアイコンを表示
+#}}}
+
+#{{{ Abbreviations pane
+options.abbrevs.label=略語
+options.abbrevs.set=略語セット:
+options.abbrevs.expandOnInput=スペースキーで略語を展開する
+options.abbrevs.abbrev=略語
+options.abbrevs.expand=展開
+options.abbrevs.add=追加...
+options.abbrevs.edit=編集...
+options.abbrevs.remove=削除
+#}}}
+
+#{{{ Appearance pane
+options.appearance.label=外観
+options.appearance.iconTheme=アイコンテーマ:
+options.appearance.fonts.antialias=テキストエリア以外のフォントをアンチエイリアス
+options.appearance.lf=Swing のルック・アンド・フィール:
+options.appearance.primaryFont=ボタン/メニュー/ラベルのフォント:
+options.appearance.secondaryFont=リスト/テキストフィールドのフォント:
+options.appearance.helpViewerFont=ヘルプビュアー/ブラウザテキストのフォント:
+options.appearance.history=テキストフィールド入力の履歴数:
+options.appearance.menuSpillover=これ以上のメニュー項目はあふれ出す:
+options.appearance.startup.label=起動オプション
+options.appearance.showSplash=起動時にスプラッシュスクリーンを表示
+options.appearance.showTips=起動時にヒントを表示
+options.appearance.experimental.label=実験的なオプション
+options.appearance.experimental.caption=Java のバージョンによっては以下の\
+	オプションが正しく機能しない\n\
+	かもしれません。問題がある場合はこれらをオフにしてください。
+
+options.appearance.textColors=すべてのテキストコンポーネントに jEditテキスト\
+	エリアの色を反映
+options.appearance.decorateFrames=Swing のルック・アンド・フィールを使ってウィンドウの境界を描画
+options.appearance.decorateDialogs=Swing のルック・アンド・フィールを使ってダイアログボックスの境界を描画
+
+options.appearance.localization.section.label=ローカライズ
+options.appearance.usedefaultlocale.label=デフォルトのロケールを使用
+options.appearance.lang.label=言語 (再起動で変更が反映されます)
+#}}}
+
+#{{{ Context Menu pane
+options.context.label=コンテキストメニュー
+options.context.caption=テキストエリア右クリックメニューの項目:
+options.context.add=追加...
+options.context.remove=削除
+options.context.moveUp=上へ
+options.context.moveDown=下へ
+options.context.reset=デフォルトに戻す
+options.context.add.title=コンテキストメニューに追加
+options.context.add.caption=コンテキストメニューに追加:
+options.context.add.separator=セパレータ
+options.context.add.action=コマンド/マクロ:
+options.context.includeOptionsLink.label="このメニューをカスタマイズ..."を含むリンク
+
+options.context.reset.dialog.title=デフォルトに戻す
+options.context.reset.dialog.message=本当にコンテキストメニューをインストールデフォルトに戻しますか?
+#}}}
+
+#{{{ Docking pane
+options.docking.label=ドッキング
+options.docking.title=ウィンドウ
+options.docking.dockPosition=ドッキング位置
+options.docking.selectFramework.label=ドッキングフレームワーク:
+options.docking.autoSaveModeLayout.label=モードで指定したドッキングレイアウトを自動的に保存
+options.docking.autoLoadModeLayout.label=モードで指定したドッキングレイアウトを自動的に読み込み
+options.docking.selectSet.label=ドッキング可能セット:
+options.docking.system-change.note=(実験的) 変更を反映するには jEdit を再起動してください
+#}}}
+
+#{{{ Editing pane
+options.editing.label=編集
+options.editing.defaultMode=デフォルト編集モード:
+options.editing.undoCount=アンドゥ回数:
+options.editing.caption-0=\
+	モードごとの設定をカスタマイズするには、以下のメニューから\n\
+	編集モードを選択します。初期状態はグローバルデフォルトが適用\n\
+	されます。
+options.editing.caption-1=\
+	モードごとの設定をカスタマイズするには、"デフォルト設定を使用"\n\
+	チェックを外します。そうでなければ、<グローバルデフォルト>セク\n\
+	ションの設定が使用されます。
+options.editing.mode=設定を変更するモード:
+options.editing.global=<グローバルデフォルト>
+options.editing.useDefaults=デフォルト設定を使用
+options.editing.filenameGlob=ファイル名フィルタ:
+options.editing.firstlineGlob=先頭行フィルタ:
+options.editing.folding=フォールディングモード:
+options.editing.collapseFolds=初期状態で閉じているフォールド階層:
+options.editing.wrap=ワードラップ:
+options.editing.maxLineLen=ラップマージン:
+options.editing.maxLineLen.tooltip=0でテキストエリアの幅に一致 (ソフトラップのみ)
+options.editing.tabSize=タブ幅:
+options.editing.indentSize=インデント幅:
+options.editing.noWordSep=単語の一部とされる文字:
+options.editing.camelCasedWords=キャメルケースの単語を分離
+options.editing.noTabs=ソフトタブ (スペースで近似)
+options.editing.elasticTabstops=エラスティックタブストップを使ってインデント
+options.editing.elasticTabstops.tooltip=(実験的) - jEdit が不安定になるかもしれません。
+options.editing.deepIndent=深いインデント
+options.editing.autoIndent=自動インデント
+options.editing.largefilemode.title=巨大ファイルモード
+options.editing.largefilemode=非常に大きなファイルではどうすべきですか:
+options.editing.largefilemode.option.ask=<html><b>問い合わせ</b>: 大きなファイルを開いたときどうするか聞きます。</html>
+options.editing.largefilemode.option.full=<html><b>完全なシンタックスを維持</b>: jEdit のシンタックスハイライトはいつもどおりはたらきます。\
+                                               	jEdit が<br/><b>とても遅くなるのでお勧めしません</b></html>
+options.editing.largefilemode.option.limited=<html><b>文脈を無視するシンタックスハイライト</b>: この場合jEditは高速にハイライトを行いますが、結果は完全ではありません。<br/>\
+		バッファは前の行を気にすることなく、行ごとにハイライトされます。もし複数行のトークン(複数行コメントやXMLタグなど)がある場合は<br/>\
+		文法が正確でなくなる可能性があります。禁則処理も無効化されます。<b>(推奨)</b></html>
+
+
+options.editing.largefilemode.option.nohighlight=シンタックスハイライトと禁則処理なし
+#}}}
+
+#{{{ Encodings pane
+options.encodings.label=エンコーディング
+options.encodings.selectEncodings=エンコーディングダイアログで表示されるエンコーディングを選択してください:
+options.encodings.available=使用可能エンコーディング
+options.encodings.selected=選択済みエンコーディング
+options.encodings.available.tooltip=<html>このボックス内のエンコーディングは、エンコーディングダイアログには<b>表示されません</b>。\
+  有効にするには、右のボックスに項目をドラッグしてください。</html>
+options.encodings.selected.tooltip=このボックス内のエンコーディングは、エンコーディングダイアログに表示されます。\
+  非表示にするには、左のボックスに項目をドラッグしてください。
+#}}}
+
+#{{{ Gutter pane
+options.gutter.label=ガター
+options.gutter.enabled=ガターを表示
+options.gutter.optionalComponents=追加のガターコンポーネント
+options.gutter.lineNumbers=行番号
+options.gutter.minLineNumberDigits=行番号のために確保する最小桁数:
+options.gutter.selectionAreaEnabled=行番号が非表示のとき行選択エリアを表示
+options.gutter.selectionAreaBgColor=選択エリア背景色:
+options.gutter.selectionAreaWidth=選択エリア幅 (ピクセル):
+options.gutter.font=ガターフォント:
+options.gutter.foreground=行番号の色:
+options.gutter.background=背景色:
+options.gutter.borderWidth=ガター境界幅:
+options.gutter.numberAlignment=行番号位置揃え:
+options.gutter.interval-1=周期的にハイライト
+options.gutter.interval-2=行:
+options.gutter.currentLineHighlight=現在行ハイライト:
+options.gutter.structureHighlight=構造スコープの表示:
+options.gutter.markerHighlight=マーカー位置の表示:
+options.gutter.foldColor=フォールドマーカー:
+options.gutter.focusBorderColor=フォーカスを持つガターの境界:
+options.gutter.noFocusBorderColor=フォーカスを持たないガターの境界:
+options.gutter.foldStyle.label=フォールドスタイル:
+options.gutter.foldStyleNames.Triangle=三角形
+options.gutter.foldStyleNames.Square=正方形
+options.gutter.foldStyleNames.Circle=円
+#}}}
+
+#{{{ Mouse pane
+options.mouse.label=マウス
+options.mouse.dragAndDrop=テキストエリアへのドラッグ&ドロップ
+options.mouse.joinNonWordChars=ダブルクリックドラッグは非アルファベット文字を結合
+options.mouse.middleMousePaste=クィックコピーに中マウスボタンを使用
+options.mouse.ctrlForRectangularSelection=Ctrlキーが押されている間矩形選択に切り替える
+options.mouse.gutter.foldClick=ガターのクリック:
+options.mouse.gutter.SfoldClick=ガターのShift+クリック:
+options.mouse.gutter.toggle-fold=フォールドの開閉
+options.mouse.gutter.toggle-fold-fully=下位フォールド階層すべての開閉
+#}}}
+
+#{{{ Plugin Manager pane
+options.plugin-manager.label=プラグインマネージャ
+options.plugin-manager.updateMirrors=ミラーリストの更新
+options.plugin-manager.workthread=ミラーリストの更新中 ...
+options.plugin-manager.downloadSource=プラグインのソースコードをダウンロード
+options.plugin-manager.deleteDownloads=インストール後にダウンロードディレクトリ\
+	の圧縮ファイルを削除
+options.plugin-manager.mirror=選択中のダウンロードミラー:
+options.plugin-manager.location=プラグインのインストール先:
+options.plugin-manager.settings-dir=jEdit 個人設定ディレクトリ
+options.plugin-manager.app-dir=jEdit アプリケーションディレクトリ
+options.plugin-manager.none=デフォルトのプラグインセンター
+#}}}
+
+#{{{ Printing pane
+options.print.label=印刷
+options.print.font=印刷フォント:
+options.print.fontstyle=印刷フォントスタイル:
+options.print.fontsize=印刷フォントサイズ:
+options.print.header=ファイル名をヘッダに印刷
+options.print.footer=日付/時刻/ページ番号をフッタに印刷
+options.print.lineNumbers=行番号を印刷
+options.print.color=印刷に色を反映
+options.print.tabSize=印刷時のタブ幅:
+options.print.workarounds=Java バグの問題回避
+options.print.glyphVector=空白印刷の問題回避 (スプールのファイルサイズが増加します)
+options.print.force13=旧式の印刷APIを使用 (印刷時に jEdit がハングアップする\
+	場合に有効化してください)
+options.print.folds=フォールドされた領域を印刷
+#}}}
+
+#{{{ Proxy pane
+options.firewall.label=プロキシサーバ
+options.firewall.http.enabled=HTTPプロキシサーバを使用
+options.firewall.http.host=HTTPプロキシ ホスト:
+options.firewall.http.port=HTTPプロキシ ポート:
+options.firewall.http.user=ユーザ名:
+options.firewall.http.password=パスワード:
+options.firewall.http.nonProxy=直接接続する接続先:
+options.firewall.socks.enabled=SOCKSプロキシサーバを使用
+options.firewall.socks.host=SOCKSプロキシ ホスト:
+options.firewall.socks.port=SOCKSプロキシ ポート:
+#}}}
+
+#{{{ Save & Backup pane
+options.save-back.label=保存 & バックアップ
+
+options.save-back.autosave=自動保存の周期 (秒):
+options.save-back.backups=バックアップの最大数:
+options.save-back.backupDirectory=バックアップディレクトリ:
+options.save-back.backupPrefix=バックアップファイル名プレフィクス:
+options.save-back.backupSuffix=バックアップファイル名サフィクス:
+options.save-back.backupEverySave=保存のたびにバックアップ
+options.save-back.twoStageSave=ツー・ステージ セーブ (より安全ですが、Unixではファイル所有者がリセットされます)
+options.save-back.twoStageSave.tooltip=ステージ 1: 古いファイルをリネーム。 ステージ 2: その場に新規ファイルを作成。
+options.save-back.confirmSaveAll="すべて保存"コマンドは確認ダイアログを表示
+options.save-back.autosaveUntitled=無題バッファを自動保存
+options.save-back.suppressNotSavedConfirmUntitled=無題バッファはダーティーとしてマークしない。
+options.save-back.suppressNotSavedConfirmUntitled.tooltip=これをチェックすると新規バッファが作られるとき常に無題バッファが排除されることになります。(これは仕様です!)
+options.save-back.useMD5forDirtyCalculation=内容が変わっていなければダーティーとしてマークしない。
+options.save-back.useMD5forDirtyCalculation.tooltip=読み込み時のバッファの長さとMD5ハッシュで比較し、バッファがダーティーかどうか判別。
+options.save-back.saveAsUsesFSB="名前を付けて保存" のデフォルトはファイルシステムブラウザのディレクトリ
+#}}}
+
+#{{{ Shortcuts pane
+options.shortcuts.deletekeymap.label=削除
+options.shortcuts.deletekeymap.dialog.label=キーマップを削除しますか
+options.shortcuts.deletekeymap.dialog.title=削除
+options.shortcuts.duplicatekeymap.label=複製
+options.shortcuts.duplicatekeymap.dialog.label=キーマップ名を決めてください
+options.shortcuts.duplicatekeymap.keymapalreadyexists.label=この名前はすでに存在します。違うものにしてください
+options.shortcuts.duplicatekeymap.dialog.title=キーマップ名
+options.shortcuts.resetkeymap.label=リセット
+options.shortcuts.resetkeymap.dialog.label=キーマップのリセット
+options.shortcuts.resetkeymap.dialog.title=キーマップのリセット
+options.shortcuts.keymap.label=キーマップ:
+options.shortcuts.label=ショートカット
+options.shortcuts.select.label=ショートカットの編集:
+options.shortcuts.select.tooltip=グローバル/マクロ/プラグインのショートカットを選択できます
+options.shortcuts.name=コマンド
+options.shortcuts.shortcut1=優先ショートカット
+options.shortcuts.shortcut2=代替ショートカット
+options.shortcuts.filter.label=フィルタ:
+options.shortcuts.filter.tooltip=名称がこの文字列を含むアクションだけを表示
+options.shortcuts.clear.label=クリア
+
+grab-key.title=ショートカットを指定してください
+grab-key.caption="{0}"に割当てたいショートカットキーを押し、了解をクリックしてください。
+grab-key.keyboard-test=問題を起こしているキーストロークを入力してください。
+grab-key.assigned-to=現在の割当: {0}
+grab-key.assigned-to.none=<なし>
+grab-key.assigned-to.prefix={0} プレフィクス
+grab-key.clear=クリア
+grab-key.remove=割当の解除
+
+grab-key.remove-ask.title=ショートカットを解除しますか?
+grab-key.remove-ask.message=\
+	新たなショートカットが指定されませんでした。\n\
+	現在のショートカットを解除しますか?
+
+grab-key.duplicate-alt-shortcut.title=重複ショートカット
+grab-key.duplicate-alt-shortcut.message=\
+	選択されたショートカットはこの項目の別のショートカットと\n\n
+	重複します。他のものを選択してください。
+
+grab-key.duplicate-shortcut.title=重複ショートカット
+grab-key.duplicate-shortcut.message=\
+	このショートカットはすでに以下に割当てられています。\n\
+	"{0}".\n\
+	\n\
+	この割当をオーバーライドしますか?
+
+grab-key.prefix-shortcut.title=不適切なショートカット
+grab-key.prefix-shortcut.message=\
+	他のショートカットのプレフィクスと一致するため、\n\
+	このショートカットは使えません。\n\
+	他のものを選択してください。
+#}}}
+
+#{{{ Status bar pane
+options.status.label=ステータスバー
+options.status.visible=ステータスバーの表示
+options.status.plainview.visible=プレーンビューでステータスバーを表示
+options.status.foreground=ステータスバーのテキスト:
+options.status.background=ステータスバーの背景:
+options.status.memory.foreground=メモリインジケータ前景:
+options.status.memory.background=メモリインジケータ背景:
+options.status.edit.title=ステータスバー項目を編集
+options.status.edit.labelRadioButton=ラベル
+options.status.edit.widgetRadioButton=ウィジェット
+options.status.edit.labelLabel=ラベルを入力:
+options.status.edit.widgetLabel=ウィジェットを選択:
+options.status.caret.linenumber=キャレット行番号を表示
+options.status.caret.dot=行頭からのキャレット位置を表示
+options.status.caret.virtual=行頭からのキャレット仮想位置を表示
+options.status.caret.offset=ファイル先頭からのキャレット位置を表示
+options.status.caret.bufferlength=ファイル長を表示
+options.status.caret.title=キャレット位置表示オプション:
+#}}}
+
+#{{{ Syntax Highlighting pane
+options.syntax.label=シンタクス ハイライト
+options.syntax.object=トークンタイプ
+options.syntax.style=テキストスタイル
+options.syntax.foldLine.1=閉じたフォールド行 レベル 1
+options.syntax.foldLine.2=閉じたフォールド行 レベル 2
+options.syntax.foldLine.3=閉じたフォールド行 レベル 3
+options.syntax.foldLine.0=閉じたフォールド行 レベル > 3
+#}}}
+
+#{{{ Text Area pane
+options.textarea.label=テキストエリア
+options.textarea.font=テキストフォント:
+options.textarea.fontSubst=フォント置換用の追加フォント
+options.textarea.fontsubst.tooltip=選ばれた文字を表示できない場合、自動的に適切なフォントを選択します。
+options.textarea.fontsubstlist=フォント置換: 推奨フォント:
+options.textarea.fontSubstSystemFonts=Font substitution: Search all system fonts
+options.textarea.fontSubstWarning.label=Font substitution
+options.textarea.fontSubstWarning=Without system fonts you will need preferred fonts.
+options.textarea.foreground=テキスト色:
+options.textarea.background=背景色:
+options.textarea.caret=キャレット:
+options.textarea.blinkCaret=点滅
+options.textarea.blockCaret=ブロック
+options.textarea.thickCaret=幅広
+options.textarea.selection=単一選択:
+options.textarea.multipleSelection=マルチ選択:
+options.textarea.selectionFg=選択中の文字色:
+options.textarea.lineHighlight=現在行のハイライト:
+options.textarea.structureHighlight=一致要素ハイライト:
+options.textarea.eolMarkers=行末マーカー:
+options.textarea.wrapGuide=ラップガイド:
+options.textarea.electricBorders=自動スクロール
+options.textarea.stdNextPrevWord=次/前の単語へ移動するときホワイトスペースを含む
+options.textarea.antiAlias=アンチエイリアス スムーズフォント
+options.textarea.antiAlias.tooltip=いくつかのシステムで表示が遅くなります
+options.textarea.fracFontMetrics=Fractional フォントメトリクス (文字の表示が\
+	よりスムーズになります)
+options.textarea.fracFontMetrics.tooltip=サブピクセルアンチエイリアスとの併用はお薦めしません
+options.textarea.stripTrailingEOL=最終行末を隠す (あれば)
+options.textarea.completeFromAllBuffers=開いているすべてのバッファから単語補完 (デフォルト\
+    では現在画面表示中のバッファからの検索に制限されます)
+options.textarea.lineSpacing.label=追加の水平行間隔 (ピクセル単位):
+#}}}
+
+#{{{ Tool Bar pane
+options.toolbar.label=ツールバー
+options.toolbar.showToolbar=ツールバーの表示
+options.toolbar.caption=ツールバーに表示されるボタン:
+options.toolbar.add=追加...
+options.toolbar.edit=編集...
+options.toolbar.remove=削除
+options.toolbar.moveUp=上へ
+options.toolbar.moveDown=下へ
+options.toolbar.reset=デフォルトに戻す
+options.toolbar.edit.title=ツールバーエントリの編集
+options.toolbar.edit.caption=タイプ:
+options.toolbar.edit.separator=セパレータ
+options.toolbar.edit.action=コマンド/マクロ:
+options.toolbar.edit.builtin=ビルトインアイコンを使用:
+options.toolbar.edit.file=ファイルからアイコンをロード:
+options.toolbar.edit.choose=選択
+options.toolbar.edit.no-icon=アイコンが選択されていません
+
+options.toolbar.reset.dialog.title=デフォルトに戻す
+options.toolbar.reset.dialog.message=本当にツールバーをインストールデフォルトに戻しますか?
+#}}}
+
+#{{{ View pane
+options.view.label=ビュー
+options.view.viewLayout=ビューレイアウト
+options.view.floatableToolbars=フロート可能なツールバー
+options.view.alternateDockingLayout=別のドッキングウィンドウ配置
+options.view.alternateToolBarLayout=別のツールバー配置
+options.view.showFullPath=タイトルバーにバッファのフルパスを表示
+options.view.showSearchbar=検索バーを常に表示
+options.view.beepOnSearchAutoWrap=検索が自動的に巡回したとき音を鳴らす
+options.view.showBufferSwitcher=バッファスイッチャを表示
+options.view.bufferSwitcherMaxRowsCount=バッファスイッチャ内の表示行数:
+options.view.sortBuffers=バッファセットをソート
+options.view.sortByName=パス名の代わりにファイル名でバッファセットをソート
+options.view.fullScreenIncludesMenu=フルスクリーンモードでメニューバーを表示
+options.view.fullScreenIncludesToolbar=フルスクリーンモードでツールバーを表示
+options.view.fullScreenIncludesStatus=フルスクリーンモードでステータスバーを表示
+options.bufferset.scope=バッファセットのスコープ:
+options.editpane.bufferset.contain=新規バッファセットの内容:
+options.editpane.bufferset.newbufferset.copy=現在のバッファセットのコピー
+options.editpane.bufferset.newbufferset.empty=空のバッファひとつ
+options.editpane.bufferset.newbufferset.currentbuffer=現在のバッファのみ
+#}}}
+
+
+
+#{{{ File System Browser panes
+options.browser.label=ファイルシステム ブラウザ
+
+options.browser.colors.label=色
+options.browser.colors.glob=ファイル名フィルタ
+options.browser.colors.color=色
+options.browser.colors.add=追加
+options.browser.colors.remove=削除
+
+options.browser.general.label=一般
+options.browser.general.defaultPath=デフォルトパス:
+options.browser.general.defaultPath.favorites=お気に入り
+options.browser.general.defaultPath.home=ホームディレクトリ
+options.browser.general.defaultPath.last=最近開いたディレクトリ
+options.browser.general.defaultPath.buffer=現在のバッファの親ディレクトリ
+options.browser.general.defaultPath.working=jEdit プロセスの作業ディレクトリ
+options.browser.general.showMenubar=メニューバーを表示
+options.browser.general.showToolbar=ツールバーを表示
+options.browser.general.showIcons=アイコンを表示
+options.browser.general.showHiddenFiles=隠しファイルを表示
+options.browser.general.sortIgnoreCase=ソート時に大文字小文字を区別しない
+options.browser.general.sortMixFilesAndDirs=ファイルとディレクトリを混在させる
+options.browser.general.doubleClickClose=開いているファイルをダブルクリックしたときは閉じる
+options.browser.general.currentBufferFilter=ファイルダイアログのフィルタを\
+	現在のバッファの拡張子にする
+options.browser.general.useDefaultIcons=デフォルトアイコンを使用
+#}}}
+
+#{{{ Browser Context Menu
+options.browser.custom.context.label=コンテキストメニュー
+options.browser.custom.context.caption=ブラウザの右クリックメニューのカスタム項目:
+#}}}
+
+#{{{ Font selector
+font-selector.title=フォントの選択
+font-selector.family=フォント名:
+font-selector.size=サイズ:
+font-selector.style=スタイル:
+font-selector.plain=標準
+font-selector.bold=太字
+font-selector.italic=斜体
+font-selector.bolditalic=太字 斜体
+font-selector.preview=プレビュー
+font-selector.long-text=The quick brown fox jumps over the lazy dog.
+#}}}
+
+#{{{ Color chooser, used by options.syntaxs
+colorChooser.title=色の選択
+#}}}
+
+#{{{ Style editor, used by options.syntaxs
+style-editor.title=スタイルエディタ
+style-editor.tokenType=トークンの区分:
+style-editor.italics=斜体
+style-editor.bold=太字
+style-editor.fgColor=文字色:
+style-editor.bgColor=背景色:
+#}}}
+
+#}}}
+
+#{{{ Plugin options dialog
+plugin-options.title=オプション
+options.plugins.label=プラグイン
+options.no-plugins.label=プラグインオプションはありません
+#}}}
+
+#{{{ Help viewer
+helpviewer.title=jEdit ヘルプ
+helpviewer.loading=ロード中...
+helpviewer.back.label=戻る
+helpviewer.forward.label=進む
+
+helpviewer.toc.loading=ロード中...
+helpviewer.toc.label=コンテンツ
+helpviewer.toc.welcome=Welcome to jEdit
+helpviewer.toc.readme=General Information
+helpviewer.toc.changes=Detailed Change Log
+helpviewer.toc.todo=To Do List and Known Bugs
+helpviewer.toc.copying=GNU General Public License
+helpviewer.toc.copying-doc=GNU Free Documentation License
+helpviewer.toc.copying-apache=Apache License
+helpviewer.toc.copying-plugins=Plugin Licensing Amendment
+helpviewer.toc.plugins=Plugins
+helpviewer.toc.online-apidocs=jEdit API Reference (Online)
+
+helpviewer.search.label=検索
+helpviewer.search.caption=検索語:
+helpviewer.searching=検索中...
+helpviewer.no-results=該当なし
+#}}}
+
+#{{{ Tip of the day window
+tip.title=今日のヒント
+tip.caption=ご存知ですか...
+tip.show-next-time=起動時にヒントを表示
+tip.next-tip=次のヒント
+
+tip.not-found=doc/tips ディレクトリがありません
+#}}}
+
+#{{{ Activity log
+log-viewer.title=アクティビティ ログ
+log-viewer.caption=ログの全テキストの保存先 {0}
+log-viewer.copy=コピー
+log-viewer.tail.label=末尾
+#}}}
+
+#{{{ Marker Viewer
+view-markers.label=マーカーリストを表示($W)
+view-markers.title=マーカーリスト
+#}}}
+
+#{{{ I/O progress monitor
+io-progress-monitor.title=I/O 進捗モニタ
+io-progress-monitor.caption={0} 件を保留中。
+io-progress-monitor.idle=スレッド アイドル中
+io-progress-monitor.abort=中断
+
+#{{{ I/O abort dialog box
+abort.title=I/O の中断
+abort.message=現在の入出力要求を本当に中断しますか?\n\
+	ファイルの保存を中断した場合、データが失われるかもしれません。
+
+#}}}
+
+#}}}
+
+#{{{ Task  monitor
+task-monitor.title=タスクモニタ
+#}}}
+
+#{{{ VFS browser
+vfs.browser.title=ファイルブラウザ
+vfs.browser.longtitle=ファイルシステム ブラウザ
+vfs.browser.title.open=ファイルブラウザ - 開く
+vfs.browser.title.save=ファイルブラウザ- 保存
+vfs.browser.title.dialog=ファイルブラウザ - 開く
+vfs.browser.path=パス:
+vfs.browser.path.mnemonic=p
+vfs.browser.filter=フィルタ:
+vfs.browser.tree.loading=読み込み中...
+
+vfs.browser.name=名前
+vfs.browser.type=種類
+vfs.browser.type.file=ファイル
+vfs.browser.type.directory=ディレクトリ
+vfs.browser.type.filesystem=ファイルシステム
+vfs.browser.status=状態
+vfs.browser.status.no=アクセス禁止
+vfs.browser.status.ro=読み取り専用
+vfs.browser.status.append=追記専用
+vfs.browser.status.rw=読み書き可能
+vfs.browser.size=サイズ
+vfs.browser.modified=最終更新日
+
+vfs.browser.file_filter.glob=グロブファイルフィルタ
+vfs.browser.file_filter.dir_only=ディレクトリのみ
+
+#{{{ Actions
+vfs.browser.browse-window.label=新規ウィンドウでブラウズ
+vfs.browser.browse.label=ブラウズ
+vfs.browser.close.label=閉じる
+vfs.browser.copy-path.label=コピー
+vfs.browser.delete.label=削除...
+vfs.browser.delete.shortcut=DELETE
+vfs.browser.home.label=ホームディレクトリ
+vfs.browser.home.shortcut=~
+vfs.browser.properties.label=プロパティ
+vfs.browser.properties.title=ファイル/ディレクトリ プロパティ
+vfs.browser.insert.label=挿入
+vfs.browser.new-directory.label=新規ディレクトリ...
+vfs.browser.new-directory.shortcut=INSERT
+vfs.browser.new-file.label=新規ファイル
+vfs.browser.new-file.shortcut=C+n
+vfs.browser.open.label=開く
+vfs.browser.open-desktop.label=デスクトップに開く($D)
+vfs.browser.other-encoding-2.label=その他 ({0})...
+vfs.browser.other-encoding.label=その他...
+vfs.browser.reload.label=ディレクトリの再読み込み
+vfs.browser.reload.shortcut=F5
+vfs.browser.rename.label=名前の変更...
+vfs.browser.rename.shortcut=F2
+vfs.browser.roots.label=ルートディレクトリ
+vfs.browser.roots.shortcut=/
+vfs.browser.search-directory.label=ディレクトリ内検索...
+vfs.browser.show-hidden-files.label=隠しファイルの表示
+vfs.browser.synchronize.label=現在のバッファのディレクトリ
+vfs.browser.synchronize.shortcut=-
+vfs.browser.up.label=親ディレクトリ
+vfs.browser.up.shortcut=A+Up
+vfs.browser.paste.label=貼り付け
+vfs.browser.previous.label=前のディレクトリ
+vfs.browser.previous.shortcut=A+Left
+vfs.browser.next.label=次のディレクトリ
+vfs.browser.next.shortcut=A+Right
+#}}}
+
+#{{{ Tool bar
+
+#}}}
+
+#{{{ Commands menu
+vfs.browser.commands.label=コマンド
+vfs.browser.commands.encoding.label=エンコーディング
+vfs.browser.commands.encoding.auto-detect=自動検出
+
+vfs.browser.open-in.label=ここで開く
+vfs.browser.open-view.label=新規ビュー
+vfs.browser.open-plain-view.label=新規プレーンビュー
+vfs.browser.open-split.label=新規スプリット
+#}}}
+
+#{{{ Plugins menu
+vfs.browser.plugins.label=プラグイン
+vfs.browser.plugins.plugin-manager.label=プラグイン マネージャ...
+vfs.browser.plugins.plugin-options.label=プラグイン オプション...
+vfs.browser.plugins.no-plugins.label=プラグインはありません
+#}}}
+
+#{{{ Favorites menu
+vfs.browser.favorites.label=お気に入り
+vfs.browser.favorites.add-to-favorites.label=お気に入りに追加
+vfs.browser.favorites.edit-favorites.label=お気に入りの編集
+vfs.browser.favorites.no-favorites.label=お気に入りはありません
+#}}}
+
+vfs.browser.dialog.open=開く
+vfs.browser.dialog.save=保存
+vfs.browser.dialog.choose-dir=選択
+vfs.browser.dialog.filename=ファイル名(F):
+vfs.browser.dialog.filename.mnemonic=F
+
+#{{{ Dialogs
+vfs.browser.bad-filter.title=無効なフィルタ
+vfs.browser.bad-filter.message=フィルタ {0} は無効です ({1})
+
+vfs.browser.recurse-favorites.title=自己循環するお気に入りの禁止
+vfs.browser.recurse-favorites.message=お気に入りリストをそれ自身に追加することはできません。
+
+vfs.browser.delete-confirm.title=ファイル削除の確認
+vfs.browser.delete-confirm.message=以下の{1}を本当に削除しますか?\n\n\
+	{0}
+
+vfs.browser.delete-favorites.title=お気に入りからの削除
+vfs.browser.delete-favorites.message=以下のファイルを本当にお気に入りから削除しますか?\n\n\
+	{0}
+
+
+vfs.browser.rename.title=ファイル名の変更
+vfs.browser.rename.message={0}の新しいファイル名を入力:
+
+vfs.browser.mkdir.title=新規ディレクトリ
+vfs.browser.mkdir.message=新しいディレクトリの名前(またはパス):
+#}}}
+
+#}}}
+
+#{{{ I/O status messages
+vfs.status.load=ロード中 {0}
+vfs.status.load-markers=マーカーのロード中 {0}
+vfs.status.save=保存中 {0}
+vfs.status.save-markers=マーカーの保存中 {0}
+vfs.status.autosave=自動保存中 {0}
+vfs.status.listing-directory=読み込み中 {0}
+vfs.status.deleting=削除中 {0}
+vfs.status.renaming=名前変更中 {0} から {1}
+#}}}
+
+#{{{ Plugin manager
+
+plugin-manager.title=プラグイン マネージャ
+
+plugin-manager.hide-libraries=ライブラリを非表示
+
+plugin-manager.mgr-options=ダウンロード オプション...
+plugin-manager.plugin-options=プラグイン オプション...
+plugin-manager.done=閉じる
+
+plugin-manager.remove-confirm.title=プラグインの削除
+plugin-manager.remove-confirm.message=以下のプラグインを本当に削除しますか?
+
+
+plugin-manager.dependency.title=プラグイン依存関係
+plugin-manager.dependency.message={0} は以下のプラグインが利用します。\n\
+	{0} を選択解除すると以下のプラグインは選択解除されます:
+
+plugin-manager.remove-dependencies.title=プラグイン依存関係
+plugin-manager.remove-dependencies.message=削除されるプラグインは以下のプラグインが利用します。\n\
+	これらを削除すると以下のプラグインは選択解除されます:
+
+plugin-manager.cleanup.label=クリーンアップ
+plugin-manager.cleanup.title=プラグインデータをクリーンアップ
+plugin-manager.cleanup.message=以下のプラグインのデータを削除:
+
+plugin-manager.noOrphan.label=未使用の検索
+plugin-manager.noOrphan.title=未使用のjarはありません
+plugin-manager.noOrphan.message=このjEditインストレーションには未使用のjarがひとつもありませんでした
+
+plugin-manager.findOrphan.label=未使用の検索
+plugin-manager.findOrphan.title=未使用のjarを発見
+plugin-manager.findOrphan.message=以下のjarはどのプラグインにも属していません\n\
+	削除しますか?\n (注 これらはJDBCドライバのように、なんらかのプラグインで動的に\n\
+	宣言されることがありえます):
+
+install-plugins.depend.title=依存プラグインが必要です
+install-plugins.depend.message=インストールしようとしているプラグインには、さらに\n\
+	プラグインが必要です。このまま継続するとそれらが自動的に\n\
+	インストールされます。
+
+plugin-manager.status.loaded=ロードされています
+plugin-manager.status.not-loaded=ロードされていません
+plugin-manager.status.error=エラー
+
+plugin-manager.list-download-connect=plugins.jedit.org に接続中
+plugin-manager.list-download=プラグインリストを plugins.jedit.org からダウンロード中
+plugin-manager.list-download.mirror-autoselect-error.title=ミラー選択エラー
+plugin-manager.list-download.mirror-autoselect-error.message=ミラーの自動選択エラー:\n\
+	{0}\n\
+	別のミラーを選ぶと動作するかもしれません。
+plugin-manager.list-download.need-password.title=HTTPプロキシはパスワードが必要です
+plugin-manager.list-download.need-password.message=HTTPプロキシはパスワードが必要です。\n\
+  有効なユーザ名とパスワードを "ダウンロード オプション" で設定して下さい。
+plugin-manager.list-download.disconnected.title=プラグインリストのダウンロードエラー
+plugin-manager.list-download.disconnected.message=プラグインリストがダウンロードできません:\n\
+  ホスト {0} が見えません。インターネット接続を確認したほうがよいかもしれません...
+plugin-manager.list-download.generic-error.title=プラグインリストのダウンロードエラー
+plugin-manager.list-download.generic-error.message=プラグインリストのダウンロードエラー:\n\
+  エラー {0} - {1}
+plugin-manager.filterField=名称にこの文字列を含むプラグインだけを表示
+
+#{{{ Plugin management
+manage-plugins.title=管理
+
+manage-plugins.info.name=名前
+manage-plugins.info.version=バージョン
+manage-plugins.info.status=ステータス
+manage-plugins.info.data=データ
+
+manage-plugins.data-size.unknown=<不明>
+
+manage-plugins.remove=削除...
+manage-plugins.help=ヘルプ...
+plugin-load-error.message=プラグインをロードできません
+plugin-load-error.title=プラグインロードエラー
+#}}}
+
+#{{{ Plugin installation
+install-plugins.title=インストール
+
+install-plugins.info.name=名前
+install-plugins.info.size=サイズ
+install-plugins.info.releaseDate=リリース日
+install-plugins.info.version=バージョン
+install-plugins.info.category=カテゴリ
+
+install-plugins.totalSize=プラグイン数 {0} / 合計サイズ: {1}
+install-plugins.select-all=すべて選択
+install-plugins.install=インストール
+install-plugins.show-updates=アップデートの表示
+
+install-plugins.info=<b>作者</b>: {0}\n\
+	<b>リリース日</b>: {1}\n\
+	{2}
+
+update-plugins.title=アップデート
+
+plugin-manager.progress=ダウンロード中 {0} ミラー {1} から
+plugin-manager.progress.title=プラグインのインストール中
+plugin-manager.progress.stop=中止
+#}}}
+
+#{{{ Plugin remove error
+plugin-manager.remove-failed.title=削除失敗
+plugin-manager.remove-failed.message=プラグイン {0} は\n\
+	削除されませんでした。
+#}}}
+
+#}}}
+
+#{{{ File Properties Dialog
+fileprop.name=名前
+fileprop.path=パス
+fileprop.lastmod=最終更新日
+fileprop.size=サイズ
+fileprop.properties=プロパティ
+fileprop.readable=読込み可能
+fileprop.writeable=書込み可能
+fileprop.attribute=属性
+fileprop.okBtn=了解
+fileprop.cancelBtn=取消し
+fileprop.selectedFiles=選択されたファイル
+fileprop.selectedDirectories=選択されたディレクトリ
+#}}}
+
+#{{{ Activity log viewer
+log-viewer.dialog.title=アクティビティログ設定
+log-viewer.settings.label=設定
+log-viewer.message.label=メッセージ表示:
+log-viewer.message.debug.label=Debug
+log-viewer.message.message.label=Message
+log-viewer.message.notice.label=Notice
+log-viewer.message.warning.label=Warning
+log-viewer.message.error.label=Error
+#}}}
+
+logs-remove-all-errors.label=すべてのエラーを削除
+
+taskmanager.remainingtasks.label=残りタスク {0}
+
+#{{{ Statusbar Widgets
+# the widgets should have a label and a sample.
+# the label is displayed when choosing the list of widgets
+# the sample is an example of what the widget will show, for the
+# preview in the options
+statusbar.mode.label=バッファの編集モード (例:java)
+statusbar.mode.sample=java
+statusbar.fold.label=バッファのフォールドモード (例:explicit)
+statusbar.fold.sample=explicit
+statusbar.encoding.label=バッファのエンコーディング (例:UTF-8)
+statusbar.encoding.sample=UTF-8
+statusbar.wrap.label=バッファのワードラップモード (例:N)
+statusbar.wrap.sample=N
+statusbar.indent.label=自動インデント (例:F)
+statusbar.indent.sample=F
+statusbar.multiSelect.label=バッファのマルチ選択モード (例:m)
+statusbar.multiSelect.sample=m
+statusbar.rectSelect.label=バッファの矩形選択モード (例:r)
+statusbar.rectSelect.sample=r
+statusbar.overwrite.label=バッファの上書き (例:o)
+statusbar.overwrite.sample=o
+statusbar.lineSep.label=バッファの改行文字 (例:U)
+statusbar.lineSep.sample=U
+statusbar.memory-status.label=メモリステータス (例:9/24Mb)
+statusbar.memory-status.sample=9/24Mb
+statusbar.clock.label=時計 (例:16:45)
+statusbar.clock.sample=16:45
+statusbar.buffersets.label=バッファセットのスコープ (例:G)
+statusbar.buffersets.sample=G
+statusbar.selection-length.label=選択範囲の長さ (例:192)
+statusbar.selection-length.sample=192
+statusbar.last-modified.label=ディスク上の最終更新日 (例:12/03/11 16:43)
+statusbar.last-modified.sample=12/03/11 16:43
+statusbar.task-monitor.label=タスクモニタ (例: 7 task(s))
+statusbar.task-monitor.tooltip=実行中のタスクを見るにはクリック
+statusbar.task-monitor.sample=7 task(s)
+statusbar.task-monitor.template={0} task(s)
+#}}}
+
+killring.load-memoryerror.message=<html>前回削除されたテキストを読み込めません。メモリヒープ空間を大きくしてください。<br>\
+  それでも jEdit を起動する場合は<b>開始する<b/>を押してください。<br>起動せず設定を変更するには<b>中止する</b>を押して下さい。<br><b>ヒストリファイルを削除</b>してから jEdit を起動することもできます。</html>
+killring.load-memoryerror.title=メモリエラー
+killring.start=開始する
+killring.stop=中止する
+killring.delete=キルリングを削除して起動
+
+#}}}
+
+#{{{ Macros
+
+#{{{ Properties used by macros
+
+#{{{ common
+macro.rs.general.ErrorNotEditableDialog.title=書き込み権限
+macro.rs.general.ErrorNotEditableDialog.message=バッファは編集可能ではありません!
+#}}}
+
+#{{{ Clipboard
+
+#{{{ Copy Lines Containing
+macro.rs.CopyLinesContaining.CopyLinesContaining.label=次の内容を含む行をコピー:
+macro.rs.CopyLinesContaining.LinesCopied.message=行コピー
+#}}}
+
+#{{{ Cut Lines Containing
+macro.rs.CutLinesContaining.CutLinesContaining.label=次の内容を含む行を切り取り:
+macro.rs.CutLinesContaining.LinesCut.message=行切り取り
+#}}}
+
+#}}}
+
+#{{{ Editing
+
+#{{{ Go to column
+macro.rs.GoToColumn.ColumnBefore.label=列 ( 1 から
+macro.rs.GoToColumn.ColumnAfter.label=の間で指定):
+#}}}
+
+#{{{ Key Words to Uppercase
+macro.rs.KeywordsToUpperCase.ConvertedKeywords.message=キーワードを大文字に変換
+#}}}
+
+#{{{ Mode Switcher
+macro.rs.BufferModeSwitcher.MainDialog.title=バッファモードスイッチャ
+macro.rs.BufferModeSwitcher.EnterBufferMode.label=バッファモードを入力:
+macro.rs.BufferModeSwitcher.ChangingBufferMode.label=バッファのモード変更
+macro.rs.BufferModeSwitcher.To.label=から
+macro.rs.BufferModeSwitcher.Mode.label=モード
+macro.rs.BufferModeSwitcher.NotFound.label=存在しません
+#}}}
+
+#{{{ Moves Lines Down - Move Lines Up
+macro.rs.MoveLines.NoMultipleSelection.error=マルチ選択中は行移動できません。
+#}}}
+
+#}}}
+
+#{{{ Files
+
+#{{{ Browse Directory
+macro.rs.BrowseDirectory.DirectoryBrowse.label=ブラウズするディレクトリ:
+#}}}
+
+#{{{ Buffer Switcher
+macro.rs.BufferSwitcher.OpenBuffers.label=バッファを開く
+macro.rs.BufferSwitcher.QuickHelp.label=[ENTER] 切り替え; [SPACE] 切り替えてダイアログを維持; [DEL] バッフを閉じる
+macro.rs.BufferSwitcher.Help1.label=バッファスイッチャマクロのヘルプ:
+macro.rs.BufferSwitcher.Help2.label=DELETE は選択したバッファを閉じます。
+macro.rs.BufferSwitcher.Help3.label=ENTER は選択したバッファに切り替えて、ダイアログを閉じます。
+macro.rs.BufferSwitcher.Help4.label=ESCAPE はダイアログを閉じます。
+macro.rs.BufferSwitcher.Help5.label=SPACE は選択したバッファに切り替え、ダイアログを閉じません。
+macro.rs.BufferSwitcher.Help6.label=NOTE: このダイアログは一度だけ表示されます
+#}}}
+
+#{{{ Delete Current
+macro.rs.DeleteCurrent.NotOnDisk.error=バッファはディスク上に存在しません。
+macro.rs.DeleteCurrent.DeleteNotSupport.error=は削除をサポートしていません。
+macro.rs.DeleteCurrent.Deleted.message=削除されたもの:
+#}}}
+
+#{{{ Glob Close
+macro.rs.GlobClose.GlobPattern.label=グロブパターン:
+macro.rs.GlobClose.ErrorGlobPattern.error=グロブパターンにエラー:
+#}}}
+
+#{{{ Next Dirty Buffer
+macro.rs.NextDirtyBuffer.NoOtherBufferDirty.message=他に編集中バッファはありません
+macro.rs.NextDirtyBuffer.NoBufferDirty.message=編集中バッファはありません
+#}}}
+
+#{{{ open Path
+macro.rs.OpenPath.PathName.label=パス名:
+#}}}
+
+#{{{Toggle ReadOnly
+macro.rs.ToggleReadOnly.OnlyLocalFiles.error=このマクロはローカルファイルでしか動きません。
+macro.rs.ToggleReadOnly.OnlyWindowsUnixMacos.error=このマクロは Windows か Unix か MacOS X でしか動きません。
+#}}}
+
+#}}}
+
+#{{{ Interface
+
+#{{{ Decrease Font Size - Increase Font Size
+macro.rs.ChangeFontSize.FontSize.message=現在のフォントサイズ:
+#}}}
+
+#}}}
+
+#{{{ Java
+
+#{{{ Create Constructor
+macro.rs.CreateConstructor.UnevenNumber.message=型名と値の数が不足しています。
+#}}}
+
+#{{{ Get Package Name
+macro.rs.GetPackageName.NotWorking1.error=このマクロは '-jar' コマンドラインオプションで jEdit を
+macro.rs.GetPackageName.NotWorking2.error=ロードしている Java インタプリタの場合は動作しません。
+macro.rs.GetPackageName.NotFind.error=パッケージ名がありません。
+#}}}
+
+#{{{ Java File Save
+macro.rs.JavaFileSave.InfiniteLoop.error=無限ループ:
+#}}}
+
+#{{{Make Get and Set Methods
+macro.rs.MakeGetAndSetMethods.GenerateCode.label=コード生成
+macro.rs.MakeGetAndSetMethods.CreateGetMethods.label=Get メソッド生成
+macro.rs.MakeGetAndSetMethods.CreateSetMethods.label=Set メソッド生成
+macro.rs.MakeGetAndSetMethods.CreateGetandSetMethods.label=Get および Set メソッド生成
+#}}}
+
+#}}}
+
+#{{{ Misc
+
+#{{{ Buffer to HyperSearch Results - HyperSearch Results to Buffer
+macro.rs.HyperSearchResults.WindowNotOpen.error='ハイパーサーチ結果' ウィンドウが開いていません。
+macro.rs.HyperSearchResults.NotMatch.error=ハイパーサーチの一致結果がありません。
+#}}}
+
+#{{{ Debug BufferSets
+macro.rs.DebugBuffersets.BuffersetDebugging.label=BUFFERSET DEBUGGING
+macro.rs.DebugBuffersets.BufferCount.label=バッファ数:
+macro.rs.DebugBuffersets.BufferList.label=BUFFER LIST
+macro.rs.DebugBuffersets.EndBufferList.label=END BUFFER LIST
+macro.rs.DebugBuffersets.EditpaneList.label=EDITPANE LIST
+macro.rs.DebugBuffersets.EndEditpaneList.label=END EDITPANE LIST
+#}}}
+
+#{{{ Display Abbreviations
+macro.rs.DisplayAbbreviations.Abbreviation.label=略語
+macro.rs.DisplayAbbreviations.Expansion.label=展開
+macro.rs.DisplayAbbreviations.Close.label=閉じる
+macro.rs.DisplayAbbreviations.WriteSet.label=セットを書き出し
+macro.rs.DisplayAbbreviations.WriteAll.label=すべて書き出し
+macro.rs.DisplayAbbreviations.AbbreviationList.label=略語リスト
+macro.rs.DisplayAbbreviations.CallingWTTNB.label=呼び出し中 writeTableToNewBuffer for
+macro.rs.DisplayAbbreviations.SizeVector.label=配列サイズ:
+macro.rs.DisplayAbbreviations.jEditAbbreviationTable.label=jEdit 略語表
+macro.rs.DisplayAbbreviations.AbbreviationSet.label=略語セット:
+macro.rs.DisplayAbbreviations.AbbreviationExpansion.label=略語    展開
+macro.rs.DisplayAbbreviations.NoAbbreviations.label=<< 略語はありません >>
+#}}}
+
+#{{{ Display Actions
+macro.rs.DisplayActions.jEditActionBar1.label=jEdit のアクションバーはユーティリティメニューから開くことができます。
+macro.rs.DisplayActions.jEditActionBar2.label=また、通常は C+ENTER キーボードショートカットに割り当てられています。
+macro.rs.DisplayActions.NoLabel.label=<ラベルなし>
+#}}}
+
+#{{{ Display Character Code
+macro.rs.DisplayCharacterCode.CharacterAtCaret.label=キャレット位置の文字:
+#}}}
+
+#{{{ Display Shorcuts
+macro.rs.DisplayShortcuts.jEditShortcutTable.label=jEdit キーボードショートカット表
+macro.rs.DisplayShortcuts.Name.label=名前
+macro.rs.DisplayShortcuts.Shortcut1.label=ショートカット - 1
+macro.rs.DisplayShortcuts.Shortcut2.label=ショートカット - 2
+macro.rs.DisplayShortcuts.Close.label=閉じる
+macro.rs.DisplayShortcuts.WriteToBuffer.label=バッファに書き出し
+macro.rs.DisplayShortcuts.ShortcutList.label=キーボードショートカット リスト
+macro.rs.DisplayShortcuts.Center.label=Center
+macro.rs.DisplayShortcuts.South.label=South
+#}}}
+
+#{{{ Hex Convert
+macro.rs.HexConvert.Before.label=変換前:
+macro.rs.HexConvert.After.label=変換後:
+macro.rs.HexConvert.NotValidHex.label=は正しい16進数文字列ではありません。
+macro.rs.HexConvert.ByteToString.label=文字列化するバイト値:
+#}}}
+
+#{{{ Make Bug Report
+macro.rs.MakeBugReport.OpeningActivityLog.error=アクティビティログを開くときエラーが発生しました。
+macro.rs.MakeBugReport.UsefulEntriesForReport.label=Activity log entries that might be useful in a bug report:\n\n.
+macro.rs.MakeBugReport.MessagejEdit.label=[message] jEdit:
+macro.rs.MakeBugReport.NoticejEdit.label=[notice] jEdit:
+macro.rs.MakeBugReport.NoticeJarClassLoader.label=[notice] JARClassLoader:
+macro.rs.MakeBugReport.MessagejEditStartupComplete.label=[message] jEdit: Startup complete
+macro.rs.MakeBugReport.Error.label=[error]
+macro.rs.MakeBugReport.ReadingActivityLog.error=アクティビティログ読み取りエラー
+#}}}
+
+#{{{ Run Script
+macro.rs.RunScript.SpecifyParametersForRunning.label=以下のスクリプトを実行するためのパラメータを指定してください
+macro.rs.RunScript.ScriptExecutionCancelled.message=スクリプトの実行はキャンセルされました。
+macro.rs.RunScript.FileNotScript.error=現在のファイルはスクリプトとして評価できません。
+#}}}
+
+#{{{ Show Threads
+macro.rs.ShowThreads.Daemon.label=デーモン
+macro.rs.ShowThreads.Priority.label=優先度
+macro.rs.ShowThreads.NotStarted.label=未スタート
+macro.rs.ShowThreads.Interrupted.label=割り込み発生中
+macro.rs.ShowThreads.CloseUpdate.label=[Esc] 閉じる      [U] 更新
+macro.rs.ShowThreads.CurrentThreads.label=現在のスレッド
+#}}}
+
+#}}}
+
+#{{{ Properties
+
+#{{{ Insert Buffer Properties
+macro.rs.InsertBufferProperties.InsertLocalProperties.label=バッファローカルプロパティの挿入
+macro.rs.InsertBufferProperties.Properties.label=プロパティ:
+macro.rs.InsertBufferProperties.Insert.label=挿入
+macro.rs.InsertBufferProperties.MustBeIn10Lines.message=ヒント: バッファローカルプロパティをjEditは認識させるには、先頭か末尾の10行内に書く必要があります。
+#}}}
+
+#{{{ Look and Feel Properties
+macro.rs.LookAndFeelProperties.Listing.label=--ルック・アンド・フィールのプロパティ名一覧--
+#}}}
+
+#{{{ System Properties
+macro.rs.SystemProperties.SystemProperties.label=システムプロパティ
+#}}}
+
+#}}}
+
+#{{{ Text
+
+#{{{ Add Prefix And Suffix
+macro.rs.AddPrefixAndSuffix.MainDialog.title=選択行にプレフィクスとサフィックスを追加
+macro.rs.AddPrefixAndSuffix.PrefixToAdd.label=追加するプレフィクス:
+macro.rs.AddPrefixAndSuffix.SuffixToAdd.label=追加するサフィックス:
+#}}}
+
+#{{{ Color Picker
+macro.rs.ColorPicker.ColorPicker.label=カラーピッカー
+#}}}
+
+#{{{ Insert Date
+macro.rs.InsertDate.InternetTime.label=インターネット時刻
+#}}}
+
+#{{{ Insert Tag
+macro.rs.InsertTag.EnterNameTag.label=タグ名の入力:
+#}}}
+
+#{{{ Line_Filter
+macro.rs.LineFilter.MainDialog.title=行フィルタ
+macro.rs.LineFilter.ignoreCaseCheckBox.label=大文字小文字を区別しない
+macro.rs.LineFilter.regexpPanelBorder.title=照合パターン (正規表現)
+macro.rs.LineFilter.processModeRadioButtonMatching.label=一致したとき
+macro.rs.LineFilter.processModeRadioButtonNotMatching.label=不一致のとき
+macro.rs.LineFilter.processModeOptionPanelBorder.title=行が
+macro.rs.LineFilter.actionModeRadioButtonWrite.label=新規バッファに書き出し
+macro.rs.LineFilter.actionModeRadioButtonDelete.label=削除
+macro.rs.LineFilter.actionModeOptionPanelBorder.title=アクション
+
+macro.rs.LineFilter.DeleteActionDisabled.message=削除はできません
+macro.rs.LineFilter.MultipleSelection.message=マルチ選択はサポートされません
+macro.rs.LineFilter.BlockSelection.message=矩形選択はサポートされません
+
+macro.rs.LineFilter.SummaryDeleted.label=行が削除されました!
+macro.rs.LineFilter.SummaryWritten.label=行が新規バッファに書き出されました。
+
+macro.rs.LineFilter.ErrorRegexpDialog.title=不正な正規表現
+macro.rs.LineFilter.ErrorRegexpDialog.message=正規表現が不正です!
+#}}}
+
+#{{{ Next Char
+macro.rs.InsertTag.EnterCharacter.label=文字の入力
+#}}}
+
+#{{{ Reverse Lines
+macro.rs.ReverseLines.NotWorkingRectangularSelection.error=申し訳ありませんが、このマクロは矩形選択では動きません。
+#}}}
+
+#{{{ Single Space Buffer
+macro.rs.SingleSpaceBuffer.NotDoubleSpaced.message=ダブルスペースではないようです:
+macro.rs.SingleSpaceBuffer.Line.message=行
+macro.rs.SingleSpaceBuffer.NotBlank.message=は空ではありません。
+#}}}
+
+#}}}
+
+#}}}
+
+#{{{ Macro Names for Macros Menu (only original macros in original folders!)
+
+#{{{ C
+macros.folder.C.label=C
+
+C/Include_Guard.label=インクルードガード
+C/Toggle_Header_Source.label=ヘッダとソースの切り替え
+#}}}
+
+#{{{ Clipboard
+macros.folder.Clipboard.label=クリップボード
+
+Clipboard/Copy_Lines.label=行をコピー
+Clipboard/Copy_Lines_Containing.label=テキストを含む行をコピー
+Clipboard/Copy_Visible_Lines.label=表示されている行をコピー
+Clipboard/Cut_Lines.label=行を切り取り
+Clipboard/Cut_Lines_Containing.label=テキストを含む行を切り取り
+Clipboard/Paste_Indent.label=インデントして貼り付け
+#}}}
+
+#{{{ Editing
+macros.folder.Editing.label=編集
+
+Editing/Duplicate_Lines_Above.label=上の行を複製
+Editing/Duplicate_Lines_Below.label=下の行を複製
+Editing/Emacs_Ctrl-K.label=Emacs の Ctrl-K
+Editing/Emacs_Next_Line.label=Emacs の次行
+Editing/Emacs_Previous_Line.label=Emacs の前行
+Editing/Go_to_Column.label=列に移動
+Editing/Greedy_Backspace.label=貪欲なバックスペース
+Editing/Greedy_Delete.label=貪欲なデリート
+Editing/Greedy_Left.label=貪欲な左移動
+Editing/Greedy_Right.label=貪欲な右移動
+Editing/Keywords_to_Upper_Case.label=キーワードを大文字に
+Editing/Mode_Switcher.label=モード切替
+Editing/Move_Lines_Down.label=行を下へ移動
+Editing/Move_Lines_Up.label=行を上へ移動
+Editing/Open_Line_Above.label=上に行を空ける
+Editing/Open_Line_Below.label=下に行を空ける
+Editing/Toggle_Fold.label=フォールド切り替え
+#}}}
+
+#{{{ Files
+macros.folder.Files.label=ファイル
+
+Files/Browse_Buffer_Directory.label=バッファのディレクトリをブラウズ
+Files/Browse_Directory.label=ディレクトリをブラウズ
+Files/Buffer_Switcher.label=バッファスイッチャ
+Files/Close_All_Except_Active.label=アクティブ以外をすべて閉じる
+Files/Copy_Name_to_Clipboard.label=クリップボードに名前をコピー
+Files/Copy_Path_to_Clipboard.label=クリップボードにパスをコピー
+Files/Delete_Current.label=現在のファイルを削除
+Files/Duplicate_Buffer.label=バッファの複製
+Files/Glob_Close.label=グロブで閉じる
+Files/Insert_Selection.label=選択を挿入
+Files/Next_Dirty_Buffer.label=次のダーティーバッファ
+Files/Open_Path.label=パスを開く
+Files/Open_Selection.label=選択を開く
+Files/Send_Buffer_To_Next_Split.label=バッファを次のスプリットに送る
+Files/Toggle_ReadOnly.label=読み込み専用の切り替え
+#}}}
+
+#{{{ Interface
+macros.folder.Interface.label=インターフェース
+
+Interface/Decrease_Font_Size.label=フォントサイズを小さく
+Interface/Increase_Font_Size.label=フォントサイズを大きく
+Interface/Open_Context_Menu.label=コンテキストメニューを開く
+Interface/Reset_TextArea.label=テキストエリアをリセット
+Interface/Splitpane_Grow.label=分割ペインをやや大きく
+Interface/Toggle_Bottom_Docking_Area.label=下ドッキングエリアの切り替え
+Interface/Toggle_Left_Docking_Area.label=左ドッキングエリアの切り替え
+Interface/Toggle_Right_Docking_Area.label=右ドッキングエリアの切り替え
+Interface/Toggle_Top_Docking_Area.label=上ドッキングエリアの切り替え
+#}}}
+
+#{{{ Java
+macros.folder.Java.label=Java
+
+Java/Create_Constructor.label=コンストラクタの生成
+Java/Get_Class_Name.label=クラス名の取得
+Java/Get_Package_Name.label=パッケージ名の取得
+Java/Java_File_Save.label=Java ファイルとして保存
+Java/Make_Get_and_Set_Methods.label=get/setメソッドを作成
+Java/Preview_JavaDoc_Of_Current_Buffer.label=現在のバッファの JavaDoc をプレビュー
+#}}}
+
+#{{{ Misc
+macros.folder.Misc.label=その他
+
+Misc/Buffer_to_HyperSearch_Results.label=バッファからハイパーサーチ結果へ
+Misc/Debug_BufferSets.label=バッファセットをデバッグ
+Misc/Display_Abbreviations.label=略語を表示
+Misc/Display_Actions.label=アクションを表示
+Misc/Display_Character_Code.label=文字コードを表示
+Misc/Display_Shortcuts.label=ショートカットを表示
+Misc/Evaluate_Buffer_in_BeanShell.label=バッファを BeanShell で評価
+Misc/Hex_Convert.label=16進数変換
+Misc/HyperSearch_Results_to_Buffer.label=ハイパーサーチ結果からバッファへ
+Misc/Make_Bug_Report.label=バグレポートを作成
+Misc/Run_Script.label=スクリプトを実行
+Misc/Show_Threads.label=スレッドを表示
+#}}}
+
+#{{{ Properties
+macros.folder.Properties.label=プロパティ
+
+Properties/Create_Plugin_Announcement.label=プラグインアナウンスを作成
+Properties/Insert_Buffer_Properties.label=バッファのプロパティを挿入
+Properties/jEdit_Properties.label=jEdit プロパティ
+Properties/Look_and_Feel_Properties.label=ルック・アンド・フィールのプロパティ
+Properties/System_Properties.label=システムプロパティ
+#}}}
+
+#{{{ Text
+macros.folder.Text.label=テキスト
+
+Text/Add_Prefix_and_Suffix.label=プレフィックスとサフィックスの追加
+Text/Color_Picker.label=カラーピッカー
+Text/Compose_Tag.label=タグに変換
+Text/Duplicate_Line.label=行の複製
+Text/Insert_Date.label=日付の挿入
+Text/Insert_Tag.label=タグの挿入
+Text/Line_Filter.label=行フィルタ
+Text/Next_Char.label=次の文字
+Text/Reverse_Lines.label=行の反転
+Text/Single_Space_Buffer.label=バッファのシングルスペース化
+#}}}
+
+#}}}
+
+#}}}
diff --git a/org/jedit/migration/KeymapMigration.java b/org/jedit/migration/KeymapMigration.java
new file mode 100644
index 0000000..c95b0d1
--- /dev/null
+++ b/org/jedit/migration/KeymapMigration.java
@@ -0,0 +1,67 @@
+/*
+ * jEdit - Programmer's Text Editor
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright © 2011 Matthieu Casanova
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.migration;
+
+import java.io.File;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import org.gjt.sp.jedit.jEdit;
+import org.jedit.core.MigrationService;
+import org.jedit.keymap.Keymap;
+import org.jedit.keymap.KeymapManager;
+
+/** Extracts, removes the shortcuts from jEdit 4.5 properties, and places them into the "imported" keymap. 
+ * @author Matthieu Casanova
+ */
+public class KeymapMigration implements MigrationService
+{
+	@Override
+	public void migrate()
+	{
+		String settingsDirectory = jEdit.getSettingsDirectory();
+		if (settingsDirectory == null)
+			return;
+		File keymapFolder = new File(settingsDirectory, "keymaps");
+		if (keymapFolder.exists())
+			return;
+
+		KeymapManager keymapManager = jEdit.getKeymapManager();
+		keymapManager.copyKeymap(KeymapManager.DEFAULT_KEYMAP_NAME, "imported");
+		Keymap imported = keymapManager.getKeymap("imported");
+		Properties properties = jEdit.getProperties();
+		Set<Map.Entry<Object,Object>> entries = properties.entrySet();
+		for (Map.Entry<Object, Object> entry:entries)
+		{
+		        String key = entry.getKey().toString();
+			if (key.endsWith(".shortcut") || key.endsWith(".shortcut2"))
+			{
+				imported.setShortcut(key, entry.getValue().toString());
+				jEdit.resetProperty(key);
+			}
+		}
+		imported.save();
+		jEdit.setProperty("keymap.current", "imported");
+		keymapManager.reload();
+	}
+}
diff --git a/org/jedit/migration/package.html b/org/jedit/migration/package.html
new file mode 100644
index 0000000..51ad332
--- /dev/null
+++ b/org/jedit/migration/package.html
@@ -0,0 +1,2 @@
+<html><body>One-time migration steps</body></html>
+
diff --git a/org/jedit/options/CombinedOptions.java b/org/jedit/options/CombinedOptions.java
new file mode 100644
index 0000000..5aad1f9
--- /dev/null
+++ b/org/jedit/options/CombinedOptions.java
@@ -0,0 +1,87 @@
+/*
+ * CombinedOptions.java - Combined options dialog
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:
+ *
+ * Copyright (C) 2011 Alan Ezust
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+*/ 
+package org.jedit.options;
+import java.awt.Frame;
+import org.gjt.sp.jedit.jEdit;
+
+// {{{ class CombinedOptions
+/**
+ * 
+ * An OptionDialog which combines Global and Plugin options 
+ * into 2 tabs on a single dialog.
+ * 
+ * @author Alan Ezust
+ * @since jEdit 5.0pre1 
+ */
+
+public class CombinedOptions extends TabbedOptionDialog
+{
+
+	// {{{ Members
+
+	GlobalOptionGroup globalOptions;
+	PluginOptionGroup pluginOptions;
+	// BufferOptionPane bufferOptions;
+
+	int startingIndex = 0;
+	// }}}
+	
+	// {{{ CombinedOptions Constructors	
+	/**
+	 * Static constructor that remembers the previously used tab.
+	 */
+	public static CombinedOptions combinedOptions(Frame parent) 
+	{
+		int startingIndex = jEdit.getIntegerProperty("optional.last.tab", 0);
+		return new CombinedOptions(parent, startingIndex);
+	}
+	
+
+	public CombinedOptions(Frame parent, int tabIndex)
+	{
+		super(parent, "Combined Options");
+		startingIndex = tabIndex;
+		_init();
+
+	}
+
+	public CombinedOptions(Frame parent)
+	{
+		this(parent, 0);
+	} // }}}
+
+	// {{{ _init() method
+	public void _init()
+	{
+		//String title = jEdit.getProperty("options.title");
+		//setTitle(title);
+		addOptionGroup(new GlobalOptionGroup());
+		addOptionGroup(new PluginOptionGroup());
+		// addOptionPane(new BufferOptionPane());
+		setSelectedIndex(startingIndex);
+		OptionGroupPane p = (OptionGroupPane) (tabs.getSelectedComponent());
+		setTitle(p.getTitle());
+		setVisible(true);
+	}// }}}
+
+}// }}}
+
diff --git a/org/jedit/options/GlobalOptionGroup.java b/org/jedit/options/GlobalOptionGroup.java
new file mode 100644
index 0000000..08ad832
--- /dev/null
+++ b/org/jedit/options/GlobalOptionGroup.java
@@ -0,0 +1,92 @@
+/*
+ * GlobalOptionGroup.java -
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:
+ *
+ * Copyright (C) 1998, 2003 Slava Pestov
+ * Portions copyright (C) 1999 mike dillon
+ * Copyright (C) 2006 Alan Ezust
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.options;
+
+import org.gjt.sp.jedit.OptionGroup;
+import org.gjt.sp.jedit.jEdit;
+
+// {{{ class GlobalOptionGroup
+/**
+ * A model for all of the Global Options.
+ * 
+ */
+
+public class GlobalOptionGroup extends OptionGroup
+{
+	// {{{ Members
+	OptionGroup root;
+	
+	// }}}
+	// {{{ Constructors
+	public GlobalOptionGroup()
+	{
+		this(null);
+	}
+
+	public GlobalOptionGroup(OptionGroup rootGroup)
+	{
+		super("Global Options");
+		root = rootGroup;
+
+		String optionGroups = jEdit.getProperty("options.groups","jedit browser");
+		String[] groups = optionGroups.split(" ");
+		for (String group : groups)
+		{
+			OptionGroup optionGroup = new OptionGroup(group);
+			String paneList = "options.group." + group;
+			String def = "";
+			if ("jedit".equals(group))
+			{
+				def = "general abbrevs appearance context docking editing encodings gutter mouse " +
+					"plugin-manager print firewall save-back shortcuts status syntax textarea " +
+					"toolbar view";
+			}
+			else if ("browser".equals(group))
+			{
+				def = "browser.general browser.colors";
+			}
+			String optionPanes = jEdit.getProperty(paneList, def);
+			String[] panes = optionPanes.split(" ");
+			for (String pane : panes)
+			{
+				optionGroup.addOptionPane(pane);
+			}
+			addGroup(optionGroup);
+		}
+	} // }}}
+	
+	// {{{ addGroup() method
+	void addGroup(OptionGroup group)
+	{
+		if (root != null)
+		{
+			root.addOptionGroup(group);
+		}
+		else
+		{
+			addOptionGroup(group);
+		}
+	}// }}}
+} // }}}
diff --git a/org/jedit/options/OptionGroupPane.java b/org/jedit/options/OptionGroupPane.java
new file mode 100644
index 0000000..9930304
--- /dev/null
+++ b/org/jedit/options/OptionGroupPane.java
@@ -0,0 +1,548 @@
+/*
+ * OptionGroupPane.java - A Pane (view) for displaying/selecting OptionGroups.
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:
+ *
+ * Copyright (C) 2005 Slava Pestov
+ * Copyright (C) 2011 Alan Ezust 
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+package org.jedit.options;
+
+import java.awt.BorderLayout;
+import java.awt.Dimension;
+import java.awt.event.TextListener;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.JTree;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.EventListenerList;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreePath;
+
+import org.gjt.sp.util.StringModel;
+
+import org.gjt.sp.jedit.AbstractOptionPane;
+import org.gjt.sp.jedit.BeanShell;
+import org.gjt.sp.jedit.OperatingSystem;
+import org.gjt.sp.jedit.OptionGroup;
+import org.gjt.sp.jedit.OptionPane;
+import org.gjt.sp.jedit.jEdit;
+import org.gjt.sp.jedit.gui.OptionsDialog.PaneNameRenderer;
+import org.gjt.sp.util.Log;
+
+
+/**
+ * An option pane for displaying groups of options. There is code here
+ * which was taken from OptionsDialog, but this class is a component which can
+ * be embedded in other Dialogs.
+ * 
+ * Shows a JTree on the left, and an option pane on the right, with a splitter
+ * between. 
+ * 
+ * @see org.gjt.sp.jedit.gui.OptionsDialog OptionsDialog
+ * 
+ * @author ezust
+ * 
+ */
+public class OptionGroupPane extends AbstractOptionPane implements TreeSelectionListener
+{
+	// {{{ Members
+	OptionGroup optionGroup;
+
+	JSplitPane splitter;
+
+	JTree paneTree;
+
+	OptionPane currentPane;
+
+	OptionTreeModel optionTreeModel;
+
+	HashMap<Object, OptionPane> deferredOptionPanes;
+
+	JPanel stage;
+
+	StringModel title = new StringModel();
+	// }}}
+
+	public OptionGroupPane(OptionGroup group)
+	{
+		super(group.getName());
+		optionGroup = group;
+
+		init();
+	}
+
+	void addTextListener(TextListener l)
+	{
+		title.addTextListener(l);
+	}
+
+	public String getTitle() 
+	{
+		return title.toString();
+	}
+	void setTitle(String newTitle)
+	{
+		title.setText(newTitle);
+	}
+
+	// {{{ valueChanged() method
+	public void valueChanged(TreeSelectionEvent evt)
+	{
+		TreePath path = evt.getPath();
+
+		if (path == null)
+			return;
+
+		Object lastPathComponent = path.getLastPathComponent();
+		if (!(lastPathComponent instanceof String || lastPathComponent instanceof OptionPane))
+		{
+			return;
+		}
+
+		Object[] nodes = path.getPath();
+
+		StringBuffer buf = new StringBuffer();
+
+		OptionPane optionPane = null;
+
+		int lastIdx = nodes.length - 1;
+
+		for (int i = paneTree.isRootVisible() ? 0 : 1; i <= lastIdx; i++)
+		{
+			String label;
+			Object node = nodes[i];
+			if (node instanceof OptionPane)
+			{
+				optionPane = (OptionPane) node;
+				label = jEdit.getProperty("options." + optionPane.getName()
+					+ ".label");
+			}
+			else if (node instanceof OptionGroup)
+			{
+				label = ((OptionGroup) node).getLabel();
+			}
+			else if (node instanceof String)
+			{
+				label = jEdit.getProperty("options." + node + ".label");
+				optionPane = (OptionPane) deferredOptionPanes.get((String) node);
+				if (optionPane == null)
+				{
+					String propName = "options." + node + ".code";
+					String code = jEdit.getProperty(propName);
+					if (code != null)
+					{
+						optionPane = (OptionPane) BeanShell.eval(jEdit
+							.getActiveView(), BeanShell.getNameSpace(),
+							code);
+
+						if (optionPane != null)
+						{
+							deferredOptionPanes.put(node, optionPane);
+						}
+						else
+							continue;
+					}
+					else
+					{
+						Log.log(Log.ERROR, this, propName + " not defined");
+						continue;
+					}
+				}
+			}
+			else
+			{
+				continue;
+			}
+			if (label != null)
+				buf.append(label);
+
+			if (i > 0 && i < lastIdx)
+				buf.append(": ");
+		}
+
+		if (optionPane == null)
+			return;
+		
+		String ttext = jEdit.getProperty("optional.title-template", new Object[] {
+			optionGroup.getName(), buf.toString() });
+		setTitle(ttext);
+
+		try
+		{
+			optionPane.init();
+		}
+		catch (Throwable t)
+		{
+			Log.log(Log.ERROR, this, "Error initializing option pane:");
+			Log.log(Log.ERROR, this, t);
+		}
+
+		if (currentPane != null)
+			stage.remove(currentPane.getComponent());
+		currentPane = optionPane;
+		stage.add(BorderLayout.CENTER, currentPane.getComponent());
+		stage.revalidate();
+		stage.repaint();
+
+		currentPane = optionPane;
+	} // }}}
+
+        // {{{ selectPane() methods
+	private boolean selectPane(OptionGroup node, String name)
+	{
+		return selectPane(node, name, new ArrayList());
+	} 
+
+	private boolean selectPane(OptionGroup node, String name, ArrayList path)
+	{
+		path.add(node);
+
+		Enumeration e = node.getMembers();
+		while (e.hasMoreElements())
+		{
+			Object obj = e.nextElement();
+			if (obj instanceof OptionGroup)
+			{
+				OptionGroup grp = (OptionGroup) obj;
+				if (grp.getName().equals(name))
+				{
+					path.add(grp);
+					path.add(grp.getMember(0));
+					TreePath treePath = new TreePath(path.toArray());
+					if (treePath != null)
+					{
+						paneTree.scrollPathToVisible(treePath);
+						paneTree.setSelectionPath(treePath);
+
+						return true;
+					}
+				}
+				else if (selectPane((OptionGroup) obj, name, path))
+				{
+					return true;
+				}
+			}
+			else if (obj instanceof OptionPane)
+			{
+				OptionPane pane = (OptionPane) obj;
+				if (pane.getName().equals(name) || name == null)
+				{
+					path.add(pane);
+					TreePath treePath = new TreePath(path.toArray());
+					paneTree.scrollPathToVisible(treePath);
+					paneTree.setSelectionPath(treePath);
+
+					return true;
+				}
+			}
+			else if (obj instanceof String)
+			{
+				String pane = (String) obj;
+				if (pane.equals(name) || name == null)
+				{
+					path.add(pane);
+					TreePath treePath = new TreePath(path.toArray());
+					paneTree.scrollPathToVisible(treePath);
+					try {
+						paneTree.setSelectionPath(treePath);
+					}
+					catch (NullPointerException npe) {}
+
+					return true;
+				}
+			}
+		}
+
+		path.remove(node);
+
+		return false;
+	} // }}}
+
+	// {{{ init() method
+	protected void _init()
+	{
+
+		setLayout(new BorderLayout());
+		deferredOptionPanes = new HashMap<Object, OptionPane>();
+		optionTreeModel = new OptionTreeModel();
+		OptionGroup rootGroup = (OptionGroup) optionTreeModel.getRoot();
+		rootGroup.addOptionGroup(optionGroup);
+		paneTree = new JTree(optionTreeModel);
+		paneTree.setVisibleRowCount(1);
+		paneTree.setRootVisible(false);
+		paneTree.setCellRenderer(new PaneNameRenderer());
+
+		JPanel content = new JPanel(new BorderLayout(12, 12));
+		content.setBorder(new EmptyBorder(12, 12, 12, 12));
+		add(content, BorderLayout.CENTER);
+
+		stage = new JPanel(new BorderLayout());
+
+		// looks bad with the OS X L&F, apparently...
+		if (!OperatingSystem.isMacOSLF())
+			paneTree.putClientProperty("JTree.lineStyle", "Angled");
+
+		paneTree.setShowsRootHandles(true);
+		paneTree.setRootVisible(false);
+
+		JScrollPane scroller = new JScrollPane(paneTree,
+			JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,
+			JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
+		scroller.setMinimumSize(new Dimension(120, 0));
+		splitter = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, scroller, new JScrollPane(stage));
+		content.add(splitter, BorderLayout.CENTER);
+
+		// register the Options dialog as a TreeSelectionListener.
+		// this is done before the initial selection to ensure that the
+		// first selected OptionPane is displayed on startup.
+		paneTree.getSelectionModel().addTreeSelectionListener(this);
+
+		OptionGroup rootNode = (OptionGroup) paneTree.getModel().getRoot();
+		for (int i = 0; i < rootNode.getMemberCount(); i++)
+		{
+			paneTree.expandPath(new TreePath(new Object[] { rootNode,
+				rootNode.getMember(i) }));
+		}
+
+		// returns false if no such pane exists; calling with null
+		// param selects first option pane found
+		String name = optionGroup.getName();
+		selectPane(rootNode, null);
+		/*
+		 * if ((defaultPaneName != null) && (!selectPane(rootNode,
+		 * defaultPaneName))) selectPane(rootNode, null);
+		 */
+
+		splitter.setDividerLocation(paneTree.getPreferredSize().width
+			+ scroller.getVerticalScrollBar().getPreferredSize().width);
+
+		String pane = jEdit.getProperty(name + ".last");
+		selectPane(rootNode, pane);
+
+		int dividerLocation = jEdit.getIntegerProperty(name + ".splitter", -1);
+		if (dividerLocation != -1)
+			splitter.setDividerLocation(dividerLocation);
+
+	} //}}}
+
+	//{{{ save() methods
+	protected void _save()
+	{
+		if (currentPane != null)
+			jEdit.setProperty(getName() + ".last", currentPane.getName());
+		int dividerPosition = splitter.getDividerLocation();
+		jEdit.setIntegerProperty(optionGroup.getName() + ".splitter", dividerPosition);
+		save(optionGroup);
+	}
+
+	private void save(Object obj)
+	{
+
+		if (obj instanceof OptionGroup)
+		{
+			OptionGroup grp = (OptionGroup) obj;
+			Enumeration members = grp.getMembers();
+			while (members.hasMoreElements())
+			{
+				save(members.nextElement());
+			}
+		}
+		else if (obj instanceof OptionPane)
+		{
+			try
+			{
+				((OptionPane) obj).save();
+			}
+			catch (Throwable t)
+			{
+				Log.log(Log.ERROR, this, "Error saving options:");
+				Log.log(Log.ERROR, this, t);
+			}
+		}
+		else if (obj instanceof String)
+		{
+			save(deferredOptionPanes.get(obj));
+		}
+	} // }}}
+	
+	// {{{ class OptionTreeModel
+	public class OptionTreeModel implements TreeModel
+	{
+		private OptionGroup root = new OptionGroup(null);
+		private EventListenerList listenerList = new EventListenerList();
+
+		public void addTreeModelListener(TreeModelListener l)
+		{
+			listenerList.add(TreeModelListener.class, l);
+		}
+
+		public void removeTreeModelListener(TreeModelListener l)
+		{
+			listenerList.remove(TreeModelListener.class, l);
+		}
+
+		public Object getChild(Object parent, int index)
+		{
+			if (parent instanceof OptionGroup)
+			{
+				return ((OptionGroup)parent).getMember(index);
+			}
+			else
+			{
+				return null;
+			}
+		}
+
+		public int getChildCount(Object parent)
+		{
+			if (parent instanceof OptionGroup)
+			{
+				return ((OptionGroup)parent).getMemberCount();
+			}
+			else
+			{
+				return 0;
+			}
+		}
+
+		public int getIndexOfChild(Object parent, Object child)
+		{
+			if (parent instanceof OptionGroup)
+			{
+				return ((OptionGroup)parent)
+					.getMemberIndex(child);
+			}
+			else
+			{
+				return -1;
+			}
+		}
+
+		public Object getRoot()
+		{
+			return root;
+		}
+
+		public boolean isLeaf(Object node)
+		{
+			return !(node instanceof OptionGroup);
+		}
+
+		public void valueForPathChanged(TreePath path, Object newValue)
+		{
+			// this model may not be changed by the TableCellEditor
+		}
+
+		protected void fireNodesChanged(Object source, Object[] path,
+			int[] childIndices, Object[] children)
+		{
+			Object[] listeners = listenerList.getListenerList();
+
+			TreeModelEvent modelEvent = null;
+			for (int i = listeners.length - 2; i >= 0; i -= 2)
+			{
+				if (listeners[i] != TreeModelListener.class)
+					continue;
+
+				if (modelEvent == null)
+				{
+					modelEvent = new TreeModelEvent(source,
+						path, childIndices, children);
+				}
+
+				((TreeModelListener)listeners[i + 1])
+					.treeNodesChanged(modelEvent);
+			}
+		}
+
+		protected void fireNodesInserted(Object source, Object[] path,
+			int[] childIndices, Object[] children)
+		{
+			Object[] listeners = listenerList.getListenerList();
+
+			TreeModelEvent modelEvent = null;
+			for (int i = listeners.length - 2; i >= 0; i -= 2)
+			{
+				if (listeners[i] != TreeModelListener.class)
+					continue;
+
+				if (modelEvent == null)
+				{
+					modelEvent = new TreeModelEvent(source,
+						path, childIndices, children);
+				}
+
+				((TreeModelListener)listeners[i + 1])
+					.treeNodesInserted(modelEvent);
+			}
+		}
+
+		protected void fireNodesRemoved(Object source, Object[] path,
+			int[] childIndices, Object[] children)
+		{
+			Object[] listeners = listenerList.getListenerList();
+
+			TreeModelEvent modelEvent = null;
+			for (int i = listeners.length - 2; i >= 0; i -= 2)
+			{
+				if (listeners[i] != TreeModelListener.class)
+					continue;
+
+				if (modelEvent == null)
+				{
+					modelEvent = new TreeModelEvent(source,
+						path, childIndices, children);
+				}
+
+				((TreeModelListener)listeners[i + 1])
+					.treeNodesRemoved(modelEvent);
+			}
+		}
+
+		protected void fireTreeStructureChanged(Object source,
+			Object[] path, int[] childIndices, Object[] children)
+		{
+			Object[] listeners = listenerList.getListenerList();
+
+			TreeModelEvent modelEvent = null;
+			for (int i = listeners.length - 2; i >= 0; i -= 2)
+			{
+				if (listeners[i] != TreeModelListener.class)
+					continue;
+
+				if (modelEvent == null)
+				{
+					modelEvent = new TreeModelEvent(source,
+						path, childIndices, children);
+				}
+
+				((TreeModelListener)listeners[i + 1])
+					.treeStructureChanged(modelEvent);
+			}
+		}
+	} //}}}
+}
diff --git a/org/jedit/options/PluginOptionGroup.java b/org/jedit/options/PluginOptionGroup.java
new file mode 100644
index 0000000..970df01
--- /dev/null
+++ b/org/jedit/options/PluginOptionGroup.java
@@ -0,0 +1,269 @@
+/*
+ * PluginOptionGroup.java - Plugin options model
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Portions Copyright (C) 2003 Slava Pestov
+ * Copyright (C) 2012 Alan Ezust
+ * 
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+package org.jedit.options;
+
+import javax.swing.event.EventListenerList;
+import javax.swing.event.TreeModelEvent;
+import javax.swing.event.TreeModelListener;
+import javax.swing.tree.TreeModel;
+import javax.swing.tree.TreePath;
+
+import org.gjt.sp.jedit.AbstractOptionPane;
+import org.gjt.sp.jedit.EditPlugin;
+import org.gjt.sp.jedit.OptionGroup;
+import org.gjt.sp.jedit.jEdit;
+
+
+/**
+*  Refactored from PluginOptions.java - this class
+*  contains only the OptionGroup
+*  and none of the GUI code.
+*  @since jedit5.0
+*
+*/
+// {{{ PluginOptionGroup class
+public class PluginOptionGroup extends OptionGroup 
+{
+	// {{{ PluginOptionGroup()
+	public PluginOptionGroup() 
+	{
+		super("Plugin Options");
+		createOptionTreeModel();
+	} // }}}
+	
+	// {{{ createOptionTreeModel() 
+	public OptionTreeModel createOptionTreeModel() {
+		OptionTreeModel paneTreeModel = new OptionTreeModel();
+		OptionGroup rootGroup = (OptionGroup) paneTreeModel.getRoot();
+
+		// initialize the Plugins branch of the options tree
+		setSort(true);
+
+		// Query plugins for option panes
+		EditPlugin[] plugins = jEdit.getPlugins();
+		for(int i = 0; i < plugins.length; i++)
+		{
+			EditPlugin ep = plugins[i];
+			if(ep instanceof EditPlugin.Broken)
+				continue;
+
+			String className = ep.getClassName();
+			String optionPane = jEdit.getProperty(
+				"plugin." + className + ".option-pane");
+			if(optionPane != null)
+				addOptionPane(optionPane);
+			else
+			{
+				String options = jEdit.getProperty(
+					"plugin." + className
+					+ ".option-group");
+				if(options != null)
+				{
+					addOptionGroup(
+						new OptionGroup(
+						"plugin." + className,
+						jEdit.getProperty("plugin."
+						+ className + ".name"),
+						options)
+					);
+				}
+			}
+
+		}
+
+		// only add the Plugins branch if there are OptionPanes
+		if (getMemberCount() == 0)
+			addOptionPane(new NoPluginsPane());
+
+		rootGroup.addOptionGroup(this);
+
+		return paneTreeModel;
+	} // }}}		
+		
+	// {{{ class OptionTreeModel
+	public class OptionTreeModel implements TreeModel
+	{
+		private OptionGroup root = new OptionGroup(null);
+		private EventListenerList listenerList = new EventListenerList();
+		public void addTreeModelListener(TreeModelListener l)
+		{
+			listenerList.add(TreeModelListener.class, l);
+		}
+
+		public void removeTreeModelListener(TreeModelListener l)
+		{
+			listenerList.remove(TreeModelListener.class, l);
+		}
+
+		public Object getChild(Object parent, int index)
+		{
+			if (parent instanceof OptionGroup)
+			{
+				return ((OptionGroup)parent).getMember(index);
+			}
+			else
+			{
+				return null;
+			}
+		}
+
+		public int getChildCount(Object parent)
+		{
+			if (parent instanceof OptionGroup)
+			{
+				return ((OptionGroup)parent).getMemberCount();
+			}
+			else
+			{
+				return 0;
+			}
+		}
+
+		public int getIndexOfChild(Object parent, Object child)
+		{
+			if (parent instanceof OptionGroup)
+			{
+				return ((OptionGroup)parent)
+					.getMemberIndex(child);
+			}
+			else
+			{
+				return -1;
+			}
+		}
+
+		public Object getRoot()
+		{
+			return root;
+		}
+
+		public boolean isLeaf(Object node)
+		{
+			return !(node instanceof OptionGroup);
+		}
+
+		public void valueForPathChanged(TreePath path, Object newValue)
+		{
+			// this model may not be changed by the TableCellEditor
+		}
+
+		protected void fireNodesChanged(Object source, Object[] path,
+			int[] childIndices, Object[] children)
+		{
+			Object[] listeners = listenerList.getListenerList();
+
+			TreeModelEvent modelEvent = null;
+			for (int i = listeners.length - 2; i >= 0; i -= 2)
+			{
+				if (listeners[i] != TreeModelListener.class)
+					continue;
+
+				if (modelEvent == null)
+				{
+					modelEvent = new TreeModelEvent(source,
+						path, childIndices, children);
+				}
+
+				((TreeModelListener)listeners[i + 1])
+					.treeNodesChanged(modelEvent);
+			}
+		}
+
+		protected void fireNodesInserted(Object source, Object[] path,
+			int[] childIndices, Object[] children)
+		{
+			Object[] listeners = listenerList.getListenerList();
+
+			TreeModelEvent modelEvent = null;
+			for (int i = listeners.length - 2; i >= 0; i -= 2)
+			{
+				if (listeners[i] != TreeModelListener.class)
+					continue;
+
+				if (modelEvent == null)
+				{
+					modelEvent = new TreeModelEvent(source,
+						path, childIndices, children);
+				}
+
+				((TreeModelListener)listeners[i + 1])
+					.treeNodesInserted(modelEvent);
+			}
+		}
+
+		protected void fireNodesRemoved(Object source, Object[] path,
+			int[] childIndices, Object[] children)
+		{
+			Object[] listeners = listenerList.getListenerList();
+
+			TreeModelEvent modelEvent = null;
+			for (int i = listeners.length - 2; i >= 0; i -= 2)
+			{
+				if (listeners[i] != TreeModelListener.class)
+					continue;
+
+				if (modelEvent == null)
+				{
+					modelEvent = new TreeModelEvent(source,
+						path, childIndices, children);
+				}
+
+				((TreeModelListener)listeners[i + 1])
+					.treeNodesRemoved(modelEvent);
+			}
+		}
+
+		protected void fireTreeStructureChanged(Object source,
+			Object[] path, int[] childIndices, Object[] children)
+		{
+			Object[] listeners = listenerList.getListenerList();
+
+			TreeModelEvent modelEvent = null;
+			for (int i = listeners.length - 2; i >= 0; i -= 2)
+			{
+				if (listeners[i] != TreeModelListener.class)
+					continue;
+
+				if (modelEvent == null)
+				{
+					modelEvent = new TreeModelEvent(source,
+						path, childIndices, children);
+				}
+
+				((TreeModelListener)listeners[i + 1])
+					.treeStructureChanged(modelEvent);
+			}
+		}
+
+
+	} //}}}
+	//{{{ NoPluginsPane class
+	public static class NoPluginsPane extends AbstractOptionPane
+	{
+		public NoPluginsPane()
+		{
+			super("no-plugins");
+		}
+	} //}}}
+
+} // }}}
diff --git a/org/jedit/options/TabbedOptionDialog.java b/org/jedit/options/TabbedOptionDialog.java
new file mode 100644
index 0000000..46fd79e
--- /dev/null
+++ b/org/jedit/options/TabbedOptionDialog.java
@@ -0,0 +1,236 @@
+/*
+ * TabbedOptionDialog.java - Options Dialog with tabs. 
+ * :tabSize=8:indentSize=8:noTabs=false:
+ * :folding=explicit:collapseFolds=1:
+ *
+ * Copyright (C) 2005 Slava Pestov
+ * Copyright (C) 2011 Alan Ezust
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+
+package org.jedit.options;
+
+import java.awt.BorderLayout;
+import java.awt.Dialog;
+import java.awt.Dimension;
+import java.awt.Frame;
+import java.awt.Point;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.TextEvent;
+import java.awt.event.TextListener;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Set;
+
+import javax.swing.Box;
+import javax.swing.BoxLayout;
+import javax.swing.JButton;
+import javax.swing.JPanel;
+import javax.swing.JTabbedPane;
+import javax.swing.border.EmptyBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+
+import org.gjt.sp.jedit.GUIUtilities;
+import org.gjt.sp.jedit.OptionGroup;
+import org.gjt.sp.jedit.OptionPane;
+import org.gjt.sp.jedit.jEdit;
+import org.gjt.sp.jedit.gui.EnhancedDialog;
+
+// {{{ TabbedOptionDialog class
+/**
+ * Replacement for OptionsDialog. It uses OptionGroupPane instead of
+ * managing its own options.
+ * 
+ * @author ezust
+ * 
+ */
+
+public class TabbedOptionDialog extends EnhancedDialog implements ActionListener, ChangeListener
+{
+	// {{{ Members
+	JTabbedPane tabs;
+
+	LinkedList<OptionPane> panes;
+	Set<OptionPane> shownPanes;
+
+	private JButton ok;
+
+	private JButton cancel;
+
+	private JButton apply;
+	// }}}
+	
+	// {{{ TabbedOptionDialog constructor
+	public TabbedOptionDialog(Frame frame, String name)
+	{
+		super(frame, jEdit.getProperty(name + ".title"), true);
+		setName(name);
+		setupTabs();
+
+	} // }}}
+
+	// {{{ OptionsDialog constructor
+	public TabbedOptionDialog(Dialog dialog, String name)
+	{
+		super(dialog, jEdit.getProperty(name + ".title"), true);
+		setName(name);
+		setupTabs();
+
+	} // }}}
+
+	// {{{ setSelectedIndex()
+	void setSelectedIndex(int index)
+	{
+		tabs.setSelectedIndex(index);
+		
+	} // }}}
+	
+	// {{{ setupTabs()
+	void setupTabs()
+	{
+		panes = new LinkedList<OptionPane>();
+		shownPanes = new HashSet<OptionPane>();
+		tabs = new JTabbedPane();
+		JPanel content = new JPanel(new BorderLayout());
+		content.setBorder(new EmptyBorder(12, 12, 12, 12));
+
+		content.add(tabs, BorderLayout.CENTER);
+
+		Box buttons = new Box(BoxLayout.X_AXIS);
+		buttons.add(Box.createGlue());
+
+		ok = new JButton(jEdit.getProperty("common.ok"));
+		ok.addActionListener(this);
+		buttons.add(ok);
+		buttons.add(Box.createHorizontalStrut(6));
+		getRootPane().setDefaultButton(ok);
+		cancel = new JButton(jEdit.getProperty("common.cancel"));
+		cancel.addActionListener(this);
+		buttons.add(cancel);
+		buttons.add(Box.createHorizontalStrut(6));
+		apply = new JButton(jEdit.getProperty("common.apply"));
+		apply.addActionListener(this);
+		buttons.add(apply);
+
+		buttons.add(Box.createGlue());
+
+		content.add(buttons, BorderLayout.SOUTH);
+		setContentPane(content);
+		GUIUtilities.loadGeometry(this, getName());
+		tabs.addChangeListener(this);
+
+	} // }}}
+
+	// {{{ actionPerformed()
+	public void actionPerformed(ActionEvent evt)
+	{
+		Object source = evt.getSource();
+
+		if (source == ok)
+		{
+			ok();
+		}
+		else if (source == cancel)
+		{
+			cancel();
+		}
+		else if (source == apply)
+		{
+			ok(false);
+		}
+	} // }}}
+
+	// {{{ addOptionPane()
+	public void addOptionPane(OptionPane pane)
+	{
+		panes.add(pane);
+		JPanel panel = (JPanel) pane;
+		tabs.addTab(pane.getName(), panel);
+
+	} // }}}
+
+	// {{{ addOptionGroup()
+	public void addOptionGroup(OptionGroup group)
+	{
+		OptionGroupPane pane = new OptionGroupPane(group);
+		pane.addTextListener(new TitleChanger());
+		addOptionPane(pane);
+	} // }}}
+
+	// {{{ ok() 
+	public void ok()
+	{
+		ok(true);
+	}
+
+	public void ok(boolean dispose)
+	{
+		GUIUtilities.saveGeometry(this, getName());
+
+		Iterator<OptionPane> itr = panes.iterator();
+		while (itr.hasNext())
+		{
+			OptionPane op = itr.next();
+			if (shownPanes.contains(op))
+				op.save();
+		}
+		Point p = getLocation();
+		Dimension d = getSize();
+
+		/* This will fire the PROPERTIES_CHANGED event */
+		jEdit.propertiesChanged();
+
+		// Save settings to disk
+		jEdit.saveSettings();
+
+		// get rid of this dialog if necessary
+		if (dispose)
+			dispose();
+	} // }}}
+
+	// {{{ cancel()
+	public void cancel()
+	{
+		GUIUtilities.saveGeometry(this, getName());
+
+		dispose();
+	} // }}}
+
+	// {{{ TitleChanger class
+	class TitleChanger implements TextListener
+	{
+
+		public void textValueChanged(TextEvent e)
+		{
+			setTitle(e.getSource().toString());
+		}
+
+	}
+
+	// {{{ stateChanged()
+	public void stateChanged(ChangeEvent e)
+	{
+
+		OptionPane op = (OptionPane) tabs.getSelectedComponent();
+		shownPanes.add(op);
+		jEdit.setIntegerProperty("optional.last.tab", tabs.getSelectedIndex());
+		setTitle(op.getName());
+	} // }}}
+
+} // }}}
diff --git a/org/jedit/options/package.html b/org/jedit/options/package.html
new file mode 100644
index 0000000..686671b
--- /dev/null
+++ b/org/jedit/options/package.html
@@ -0,0 +1 @@
+<html><body>Option-Pane classes</body></html>
diff --git a/org/jedit/package.html b/org/jedit/package.html
new file mode 100644
index 0000000..c907e1c
--- /dev/null
+++ b/org/jedit/package.html
@@ -0,0 +1 @@
+<html><body>jEdit 5 API</body></html>
diff --git a/package-files/linux/deb/Packages b/package-files/linux/deb/Packages
index 2b7150d..1454868 100644
--- a/package-files/linux/deb/Packages
+++ b/package-files/linux/deb/Packages
@@ -1,10 +1,10 @@
 Package: jedit
-Version: 4:@jedit.build.number@
+Version: 5:@jedit.build.number@
 Architecture: all
 Maintainer: Contributors <jedit-devel at lists.sourceforge.net>
 Installed-Size: @deb.installed.size@
-Recommends: sun-java6-jre
-Suggests: exuberant-ctags, cscope, global, ant, sun-java6-jdk
+Recommends: default-jre | openjdk-6-jre
+Suggests: default-jdk | openjdk-6-jdk, exuberant-ctags, cscope, global, ant 
 Conflicts: jedit-cvs
 Replaces: jedit-cvs
 Filename: @deb.repository.file@
@@ -17,15 +17,15 @@ Priority: optional
 Homepage: http://www.jedit.org/
 Description: A plugin-based editor for programmers.
  As one of the most feature rich editors available, jEdit boasts support for
- syntax highlighting in more than 140 languages. jEdit combines the power of
+ syntax highlighting in more than 200 languages. jEdit combines the power of
  Emacs, the user-friendliness of Kate, and the advanced editing features
  (such as vertical paste) of Ultraedit, to bring you an open-source
  plugin-based programmer's editor of professional quality.
  .
- It is possible to define complex macros in BeanShell or Jython, or other
- languages that fit into the BSF. jEdit offers a powerful and user-friendly
- keyboard mapping system (including 2-keystroke shortcuts), making it
- possible to give jEdit a very Emacs-like feel, if you so desire.
+ It is possible to define complex macros in BeanShell, JavaScript, 
+ Jython, or other languages that fit into the BSF. jEdit offers a powerful 
+ and user-friendly keyboard mapping system (including 2-keystroke shortcuts), 
+ making it possible to give jEdit a very Emacs-like feel, if you so desire.
  .
  Its functionality is easily extended by the use of 'plugins' which can be
  downloaded, updated, and installed, all without exiting the editor. These
diff --git a/package-files/linux/deb/control b/package-files/linux/deb/control
index 60734ec..e8f23e3 100644
--- a/package-files/linux/deb/control
+++ b/package-files/linux/deb/control
@@ -1,27 +1,27 @@
 Package: jedit
-Version: 4:@jedit.build.number@
+Version: 5:@jedit.build.number@
 Architecture: all
 Maintainer: Contributors <jedit-devel at lists.sourceforge.net>
 Section: contrib/editors
 Homepage: http://www.jedit.org/
 Conflicts: jedit-cvs
 Replaces: jedit-cvs
-Recommends: sun-java6-jre
-Build-depends: sun-java6-jdk, ant
-Suggests: exuberant-ctags, cscope, global, ant, sun-java6-jdk
+Recommends: default-jre | openjdk-6-jre
+Build-depends: default-jdk | openjdk-6-jdk, ant
+Suggests: exuberant-ctags, cscope, global, ant, openjdk-6-jdk | default-jdk
 Priority: optional
 Installed-Size: @deb.installed.size@
 Description: A plugin-based editor for programmers.
  As one of the most feature rich editors available, jEdit boasts support for
- syntax highlighting in more than 140 languages. jEdit combines the power of
+ syntax highlighting in more than 200 languages. jEdit combines the power of
  Emacs, the user-friendliness of Kate, and the advanced editing features
  (such as vertical paste) of Ultraedit, to bring you an open-source
  plugin-based programmer's editor of professional quality.
  .
- It is possible to define complex macros in BeanShell or Jython, or other
- languages that fit into the BSF. jEdit offers a powerful and user-friendly
- keyboard mapping system (including 2-keystroke shortcuts), making it
- possible to give jEdit a very Emacs-like feel, if you so desire.
+ It is possible to define complex macros in BeanShell, JavaScript, 
+ Jython, or other languages that fit into the BSF. jEdit offers a powerful 
+ and user-friendly keyboard mapping system (including 2-keystroke shortcuts),
+ making it possible to give jEdit a very Emacs-like feel, if you so desire.
  .
  Its functionality is easily extended by the use of 'plugins' which can be
  downloaded, updated, and installed, all without exiting the editor. These
diff --git a/package-files/linux/deb/jedit.desktop b/package-files/linux/deb/jedit.desktop
index 9f75348..7923c7a 100644
--- a/package-files/linux/deb/jedit.desktop
+++ b/package-files/linux/deb/jedit.desktop
@@ -2,10 +2,12 @@
 Name=jEdit
 GenericName=Programmer's Text Editor
 GenericName[ca]=Editor de text per a programadors
+GenericName[cs]=Textový editor pro programátory
 GenericName[de]=Texteditor für Programmierer
 GenericName[es]=Editor de textos para programadores
 Comment=Edit text files
 Comment[ca]=Editeu fitxers de text
+Comment[cs]=Edituje textové soubory
 Comment[de]=Editiere Textdateien
 Comment[es]=Modifique archivos de texto
 Exec=jedit %U
@@ -16,3 +18,4 @@ Categories=Development;TextEditor;
 StartupNotify=true
 MimeType=text/plain;
 StartupWMClass=org-gjt-sp-jedit-jEdit
+Keywords=Code;Editor;Programming;PHP;FTP;
diff --git a/package-files/linux/slackware/jEdit.desktop b/package-files/linux/slackware/jEdit.desktop
index 3295925..1980f41 100644
--- a/package-files/linux/slackware/jEdit.desktop
+++ b/package-files/linux/slackware/jEdit.desktop
@@ -10,3 +10,4 @@ Terminal=false
 Type=Application
 Categories=Application;Development;
 StartupNotify=true
+Keywords=Code;Editor;Programming;PHP;FTP;
diff --git a/package-files/os2/jedit.cmd b/package-files/os2/jedit.cmd
deleted file mode 100644
index 2391e4d..0000000
--- a/package-files/os2/jedit.cmd
+++ /dev/null
@@ -1,73 +0,0 @@
-/* MAINTAINERS: Robert Henschel (os2info at gmx.net)
- *              Christoph vogt (ch.vogt at gmx.net)
- *              Gili Tzabari (junk at bbs.darktech.org)
- * PLATFORM: OS/2, eCS
- * 
- * Used to run JEdit 3.1
- */
-
-
-rc = QueryJavaVersion()
-if (rc = -1) then
-do
-  say "java.exe cannot be found"
-  return -1;
-end
-if (rc = -2) then
-  say "Unexpected response to JAVA -VERSION. Assuming newest version is being used."
-
-arguments = "-settings=%HOME%\.jedit -server=%HOME%\.jedit\server"
-jedit_dir = GetExecPath()
-
-if (iMajor = 1 & iMid <= 1) then
-    'java -Xmx192M -classpath %classpath%;'jedit_dir'\jedit.jar org.gjt.sp.jedit.jEdit 'arguments
-  else
-    'java -Xmx192M -jar 'jedit_dir'\jedit.jar 'arguments
-
-return 0
-
-
-
-
-
- /*
-  * Java version detector.
-  * Assumes java -version return quoted ("") version number.
-  * Written by os2bird on #netlabs
-  *
-  * Returns -1 on no java or failed to execute
-  *         -2 on invalid java version string.
-  *         version number.
-  */
-QueryJavaVersion: procedure expose iMajor iMid iMinor
-cQueued =  queued();
-'@echo off'
-'java -version 2>&1 | rxqueue /LIFO'
-i = queued();
-do while i > cQueued
-    pull sStr
-    if (pos("JAVA VERSION ", sStr) > 0) | (pos("JAVA.EXE VERSION ", sStr) > 0) then
-    do
-        do while(queued() > 0) 
-          pull sStrIngore; /* flush input stream */
-        end
-        parse var sStr sStuff '"'iMajor'.'iMid'.'iMinor'"'
-        if (iMinor <> '') then
-            return iMajor*100 + iMid * 10 + iMinor;
-         else
-             return -2
-     end
-     i = i - 1;
- end
- return -1;
-
-
-/*
- * Returns the path of the script being executed.
- */
-GetExecPath: procedure
-parse source result
-parse var result 'OS/2 ' dummy result                        /* Get full path of script */
-result=filespec("drive", result) || filespec("path", result) /* strip away filename */
-result=substr(result, 1, length(result)-1)                   /* remove backslash */
-return result
\ No newline at end of file
diff --git a/package-files/windows/win32installer.iss b/package-files/windows/win32installer.iss
index ed03726..06ea99c 100644
--- a/package-files/windows/win32installer.iss
+++ b/package-files/windows/win32installer.iss
@@ -24,7 +24,9 @@ ChangesEnvironment=true
 DefaultDirName={pf}\jEdit
 DefaultGroupName=jEdit
 FlatComponentsList=false
-LicenseFile=@dist.dir.for.innosetup@\doc\COPYING.txt
+; Do not use LicenseFile here as the GPL does not require acceptance of
+; the license for running the program, but still show it as information
+InfoBeforeFile=@dist.dir.for.innosetup@\doc\COPYING.txt
 OutputBaseFilename=@win.filename@
 OutputDir=@dist.dir.for.innosetup@
 SetupIconFile=@base.dir.for.innosetup@\icons\jedit.ico
@@ -60,6 +62,7 @@ Source: doc\*; DestDir: {app}\doc; Excludes: \doc\api\*; Flags: ignoreversion re
 Source: doc\api\*; DestDir: {app}\doc\api; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname; Components: apidoc
 Source: jars\QuickNotepad.jar; DestDir: {app}\jars; Flags: ignoreversion sortfilesbyextension sortfilesbyname; Components: main
 Source: macros\*; DestDir: {app}\macros; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname; Components: macros
+Source: keymaps\*; DestDir: {app}\keymaps; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname; Components: main
 Source: modes\*; DestDir: {app}\modes; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname; Components: main
 Source: properties\*; DestDir: {app}\properties; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname; Components: main
 Source: startup\*; DestDir: {app}\startup; Flags: ignoreversion recursesubdirs createallsubdirs sortfilesbyextension sortfilesbyname; Components: main
@@ -97,30 +100,41 @@ Name: sl; MessagesFile: compiler:Languages\Slovenian.isl
 Name: es; MessagesFile: compiler:Languages\Spanish.isl
 
 [CustomMessages]
+; Default messages
 APIDocumentation=API Documentation (for macro and plugin development)
-de.APIDocumentation=API Dokumentation (für Macro und Plugin Entwicklung)
 Macros=Default set of macros (highly recommended)
-de.Macros=Standard Makros (sehr empfohlen)
 AutostartJEditServer=Start jEdit Server automatically on system startup
-de.AutostartJEditServer=jEdit Server automatisch beim Hochfahren starten
 QuitProgram=Quit %1
-de.QuitProgram=%1 beenden
 OpenWithProgram=Open with %1
-de.OpenWithProgram=Mit %1 öffnen
 pleaseQuitJEdit=The installer will now try to quit a running instance of jEdit.%nPlease save your work and exit jEdit for the installation to continue.
-de.pleaseQuitJEdit=Die Installation wird nun versuchen eine laufende Instanz von jEdit zu beenden.%nBitte speichern Sie Ihre Arbeit und beenden Sie jEdit um mit der Installation fortzufahren.
 ViewFile=View %1
+; German messages
+de.APIDocumentation=API Dokumentation (für Macro und Plugin Entwicklung)
+de.Macros=Standard Makros (sehr empfohlen)
+de.AutostartJEditServer=jEdit Server automatisch beim Hochfahren starten
+de.QuitProgram=%1 beenden
+de.OpenWithProgram=Mit %1 öffnen
+de.pleaseQuitJEdit=Die Installation wird nun versuchen eine laufende Instanz von jEdit zu beenden.%nBitte speichern Sie Ihre Arbeit und beenden Sie jEdit um mit der Installation fortzufahren.
 de.ViewFile=%1 anzeigen
+; French messages
+fr.APIDocumentation=API Documentation (pour développement de Macro et Plugin)
+fr.Macros=Macros standards (vraiment recommandées)
+fr.AutostartJEditServer=Démarrer automatiquement le serveur jEdit au démarrage de l'ordinateur
+fr.QuitProgram=Quitter %1
+fr.OpenWithProgram=Ouvrir avec %1
+fr.pleaseQuitJEdit=L'installation va tenter à présent de quitter une instance de jEdit en cours.%nVeuillez enregistrer votre travail et quitter jEdit afin de poursuivre l'installation.
+fr.ViewFile=Afficher %1
 
 [Registry]
 Root: HKCR; Subkey: *\Shell; Flags: uninsdeletekeyifempty
 Root: HKCR; Subkey: *\Shell\{cm:OpenWithProgram,jEdit}; Flags: uninsdeletekey
 Root: HKCR; Subkey: *\Shell\{cm:OpenWithProgram,jEdit}\Command; ValueType: string; ValueData: """{app}\jedit.exe"" ""%1"""
+Root: HKCR; Subkey: *\Shell\{cm:OpenWithProgram,jEdit}; ValueName: Icon; ValueType: string; ValueData: "{app}\jedit.exe"
 Root: HKLM; Subkey: SOFTWARE\Microsoft\Windows\CurrentVersion\Run; ValueType: string; ValueName: jEdit Server; ValueData: """{app}\jedit.exe"" -background -nogui --l4j-dont-wait"; Flags: uninsdeletevalue; Tasks: autostartserver
 
 [Run]
-Filename: {app}\jedit.exe; Description: {cm:ViewFile,README}; Parameters: "--l4j-dont-wait -nosettings {app}\doc\README.txt"; WorkingDir: {app}; Flags: nowait postinstall skipifsilent
-Filename: {app}\jedit.exe; Description: {cm:ViewFile,CHANGES}; Parameters: "--l4j-dont-wait -nosettings {app}\doc\CHANGES.txt"; WorkingDir: {app}; Flags: nowait postinstall skipifsilent
+Filename: {app}\jedit.exe; Description: {cm:ViewFile,README}; Parameters: "--l4j-dont-wait -nosettings ""{app}\doc\README.txt"""; WorkingDir: {app}; Flags: nowait postinstall skipifsilent
+Filename: {app}\jedit.exe; Description: {cm:ViewFile,CHANGES}; Parameters: "--l4j-dont-wait -nosettings ""{app}\doc\CHANGES.txt"""; WorkingDir: {app}; Flags: nowait postinstall skipifsilent
 Filename: {app}\jedit.exe; Description: {cm:LaunchProgram,jEdit}; Parameters: "--l4j-dont-wait"; WorkingDir: {app}; Flags: nowait postinstall skipifsilent; Tasks: not autostartserver
 Filename: {app}\jedit.exe; Description: {cm:LaunchProgram,jEdit}; Parameters: "--l4j-dont-wait -background"; WorkingDir: {app}; Flags: nowait postinstall skipifsilent; Tasks: autostartserver
 

-- 
jedit - Java plugin-based editor for programmers



More information about the pkg-java-commits mailing list