Index: tmp/org.txm.xmleditor.rcp/src/org/txm/xmleditor/messages/XMLEditorMessages.java
===================================================================
--- tmp/org.txm.xmleditor.rcp/src/org/txm/xmleditor/messages/XMLEditorMessages.java	(revision 2401)
+++ tmp/org.txm.xmleditor.rcp/src/org/txm/xmleditor/messages/XMLEditorMessages.java	(revision 2402)
@@ -4,18 +4,19 @@
 import org.txm.utils.messages.Utf8NLS;
 
 public class XMLEditorMessages extends NLS {
-
+	
 	private static final String BUNDLE_NAME = "org.txm.xmleditor.messages.messages"; //$NON-NLS-1$
 	
 	public static String OpenXMLEditor_1;
+	
 	public static String OpenXMLEditor_3;
+	
 	public static String OpenXMLEditor_4;
 	
 	static {
 		// initialize resource bundle
 		Utf8NLS.initializeMessages(BUNDLE_NAME, XMLEditorMessages.class);
 	}
-
-	private XMLEditorMessages() {
-	}
+	
+	private XMLEditorMessages() {}
 }
Index: tmp/org.txm.xmleditor.rcp/src/org/txm/xmleditor/OpenXMLEditor.java
===================================================================
--- tmp/org.txm.xmleditor.rcp/src/org/txm/xmleditor/OpenXMLEditor.java	(revision 2401)
+++ tmp/org.txm.xmleditor.rcp/src/org/txm/xmleditor/OpenXMLEditor.java	(revision 2402)
@@ -41,9 +41,10 @@
 import org.txm.utils.logger.Log;
 import org.txm.xmleditor.messages.XMLEditorMessages;
 
-public class OpenXMLEditor  extends AbstractHandler {
-
+public class OpenXMLEditor extends AbstractHandler {
+	
 	public static final String ID = "org.txm.xmleditor.OpenXMLEditor"; //$NON-NLS-1$
+	
 	public static String lastopenedfile;
 	
 	
@@ -53,7 +54,7 @@
 		Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell();
 		IEditorPart editor = HandlerUtil.getActiveWorkbenchWindowChecked(event).getActivePage().getActiveEditor();
 		ISelection iselection = HandlerUtil.getCurrentSelection(event);
-		Object  selection = null;
+		Object selection = null;
 		if (iselection instanceof IStructuredSelection) {
 			selection = ((IStructuredSelection) iselection).getFirstElement();
 		}
@@ -62,72 +63,77 @@
 		String filename = event.getParameter("org.txm.rcp.commands.commandParameter2"); //$NON-NLS-1$
 		IEditorPart reditor = null;
 		if (editor instanceof SynopticEditionEditor) {
-			Text text = ((SynopticEditionEditor)editor).getEditionPanel(0).getEdition().getText();
-			String[] wordSelection = ((SynopticEditionEditor)editor).getEditionPanel(0).getWordSelection();
+			Text text = ((SynopticEditionEditor) editor).getEditionPanel(0).getEdition().getText();
+			String[] wordSelection = ((SynopticEditionEditor) editor).getEditionPanel(0).getWordSelection();
 			
 			File txmFile = text.getXMLTXMFile();
 			if (txmFile != null && txmFile.exists()) {
 				reditor = openfile(txmFile);
-			} else { // wrong link ?
-				txmFile = new File(text.getProject().getProjectDirectory(), "txm/"+text.getProject().getName()+"/"+text.getName()+".xml");
+			}
+			else { // wrong link ?
+				txmFile = new File(text.getProject().getProjectDirectory(), "txm/" + text.getProject().getName() + "/" + text.getName() + ".xml");
 				reditor = openfile(txmFile);
 			}
 			
 			if (wordSelection[0] != null && reditor instanceof XMLMultiPageEditorPart) {
-				XMLMultiPageEditorPart xmlEditor = (XMLMultiPageEditorPart)reditor;
-				System.out.println("xmlEditor="+xmlEditor);
-				System.out.println("word="+wordSelection[0]);
+				XMLMultiPageEditorPart xmlEditor = (XMLMultiPageEditorPart) reditor;
+				System.out.println("xmlEditor=" + xmlEditor);
+				System.out.println("word=" + wordSelection[0]);
 				Object selectedPage = xmlEditor.getSelectedPage();
 				if (selectedPage != null && selectedPage instanceof StructuredTextEditor) {
-//					StructuredTextEditor textEditor = (StructuredTextEditor) selectedPage;
-//					
-//					String search = "\""+wordSelection[0]+"\"";
+					// StructuredTextEditor textEditor = (StructuredTextEditor) selectedPage;
+					//
+					// String search = "\""+wordSelection[0]+"\"";
 					if (wordSelection[1] == null) {
-						System.out.println("Selected word: "+wordSelection[0]);
-					} else {
-						System.out.println("Selected word: from "+wordSelection[0]+" to "+wordSelection[1]);
+						System.out.println("Selected word: " + wordSelection[0]);
 					}
+					else {
+						System.out.println("Selected word: from " + wordSelection[0] + " to " + wordSelection[1]);
+					}
 				}
 			}
-		} else if (selection != null && selection instanceof Line) {
-			Line line = (Line)selection;
+		}
+		else if (selection != null && selection instanceof Line) {
+			Line line = (Line) selection;
 			Concordance conc = line.getConcordance();
 			String text = line.getTextId();
-	
-			File txmFile = new File(conc.getProject().getProjectDirectory(), "txm/"+conc.getCorpus().getID()+"/"+text+".xml");
+			
+			File txmFile = new File(conc.getProject().getProjectDirectory(), "txm/" + conc.getCorpus().getID() + "/" + text + ".xml");
 			reditor = openfile(txmFile);
 			if (reditor != null & reditor instanceof XMLMultiPageEditorPart) {
-				XMLMultiPageEditorPart xmlEditor = (XMLMultiPageEditorPart)reditor;
+				XMLMultiPageEditorPart xmlEditor = (XMLMultiPageEditorPart) reditor;
 				Object selectedPage = xmlEditor.getSelectedPage();
 				if (selectedPage != null && selectedPage instanceof StructuredTextEditor) {
-					System.out.println("Word selection: "+line.getKeywordIds());
+					System.out.println("Word selection: " + line.getKeywordIds());
 				}
 			}
-		} else if (filename != null && !filename.matches("") && !filename.matches(" ")) { //$NON-NLS-1$ //$NON-NLS-2$
-			String filepath = txmhome + "/scripts/" + filename; //$NON-NLS-1$ 
+		}
+		else if (filename != null && !filename.matches("") && !filename.matches(" ")) { //$NON-NLS-1$ //$NON-NLS-2$
+			String filepath = txmhome + "/scripts/" + filename; //$NON-NLS-1$
 			return openfile(new File(filepath));
 		}
-
+		
 		if (reditor != null) return null;
 		
 		
 		File file = null;
 		if (iselection != null & iselection instanceof IStructuredSelection) {
-			for (Object o : ((IStructuredSelection)iselection).toList()) {
-				if(o != null && o instanceof File) {
-					file = (File)o;
+			for (Object o : ((IStructuredSelection) iselection).toList()) {
+				if (o != null && o instanceof File) {
+					file = (File) o;
 					break;
 				}
 			}
 		}
-
+		
 		if (file == null) {
-
+			
 			FileDialog dialog = new FileDialog(shell, SWT.OPEN);
 			if (LastOpened.getFile(ID) != null) {
 				dialog.setFilterPath(LastOpened.getFolder(ID));
 				dialog.setFileName(LastOpened.getFile(ID));
-			} else {
+			}
+			else {
 				dialog.setFilterPath(txmhome);
 			}
 			if (dialog.open() == null) return null;
@@ -136,7 +142,8 @@
 			lastopenedfile = filepath;
 			LastOpened.set(ID, dialog.getFilterPath(), dialog.getFileName());
 			openfile(new File(filepath));
-		} else {
+		}
+		else {
 			if (file.isDirectory()) {
 				FileDialog dialog = new FileDialog(shell, SWT.OPEN);
 				dialog.setFilterPath(file.getAbsolutePath());
@@ -144,38 +151,40 @@
 				String filepath = dialog.getFilterPath()
 						+ "/" + dialog.getFileName(); //$NON-NLS-1$
 				openfile(new File(filepath));
-			} else {
+			}
+			else {
 				openfile(file);
 			}
 		}
-
+		
 		return null;
 	}
-
+	
 	private IEditorPart openfile(File file) {
-		//XMLMultiPageEditorPart editorInput = new ConcordancesEditorInput(corpus, null);
+		// XMLMultiPageEditorPart editorInput = new ConcordancesEditorInput(corpus, null);
 		Log.fine(XMLEditorMessages.OpenXMLEditor_1);
 		IFileStore fileOnLocalDisk = EFS.getLocalFileSystem().getStore(
 				file.toURI());
-
+		
 		FileStoreEditorInput editorInput = new FileStoreEditorInput(fileOnLocalDisk);
 		IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		IWorkbenchPage page = window.getActivePage();
-
+		
 		String ID = "org.eclipse.wst.xml.ui.internal.tabletree.XMLMultiPageEditorPart"; //$NON-NLS-1$
 		try {
 			StatusLine.setMessage(XMLEditorMessages.OpenXMLEditor_3);
-			IEditorPart editor = page.openEditor(editorInput, ID); //$NON-NLS-1$
+			IEditorPart editor = page.openEditor(editorInput, ID); // $NON-NLS-1$
 			if (editor != null && editor instanceof XMLMultiPageEditorPart) {
-				XMLMultiPageEditorPart xmlEditor = ((XMLMultiPageEditorPart)editor);
+				XMLMultiPageEditorPart xmlEditor = ((XMLMultiPageEditorPart) editor);
 				xmlEditor.removePage(0);
 				return xmlEditor;
 			}
 			
 			return editor;
-		} catch (PartInitException e) {
-			System.out.println(XMLEditorMessages.OpenXMLEditor_4+e);
 		}
+		catch (PartInitException e) {
+			System.out.println(XMLEditorMessages.OpenXMLEditor_4 + e);
+		}
 		return null;
 	}
 }
Index: tmp/org.txm.xmleditor.rcp/.classpath
===================================================================
--- tmp/org.txm.xmleditor.rcp/.classpath	(revision 2401)
+++ tmp/org.txm.xmleditor.rcp/.classpath	(revision 2402)
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.translate.rcp/.classpath
===================================================================
--- tmp/org.txm.translate.rcp/.classpath	(revision 2401)
+++ tmp/org.txm.translate.rcp/.classpath	(revision 2402)
@@ -1,13 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
-	  <classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry exported="true" kind="con"
+		path="GROOVY_SUPPORT" />
+	<classpathentry exported="true" kind="con"
+		path="GROOVY_DSL_SUPPORT" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.wordcloud.rcp/.classpath
===================================================================
--- tmp/org.txm.wordcloud.rcp/.classpath	(revision 2401)
+++ tmp/org.txm.wordcloud.rcp/.classpath	(revision 2402)
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditor.java
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditor.java	(revision 2401)
+++ tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditor.java	(revision 2402)
@@ -16,34 +16,34 @@
 import org.txm.wordcloud.rcp.messages.WordCloudUIMessages;
 
 /**
- * Word cloud editor. 
+ * Word cloud editor.
  * 
  * @author mdecorde
  * @author sjacquot
  *
  */
 public class WordCloudEditor extends ChartEditor<WordCloud> {
-
 	
-	@Parameter(key=WordCloudPreferences.F_MIN)
+	
+	@Parameter(key = WordCloudPreferences.F_MIN)
 	protected Spinner fMinSpinner;
-
-	@Parameter(key=WordCloudPreferences.V_MAX)
-	protected Spinner vMaxSpinner; 
 	
-	@Parameter(key=WordCloudPreferences.ROTATION_PERCENT)
-	protected FloatSpinner rotationPercent; 
+	@Parameter(key = WordCloudPreferences.V_MAX)
+	protected Spinner vMaxSpinner;
 	
-	@Parameter(key=WordCloudPreferences.RANDOM_POSITIONS)
+	@Parameter(key = WordCloudPreferences.ROTATION_PERCENT)
+	protected FloatSpinner rotationPercent;
+	
+	@Parameter(key = WordCloudPreferences.RANDOM_POSITIONS)
 	protected Button randomPositions;
 	
 	
 	
 	@Override
 	public void __createPartControl() {
-
+		
 		Composite extendedParametersGroup = this.getExtendedParametersGroup();
-
+		
 		// extended parameters
 		
 		// Filters
@@ -54,36 +54,36 @@
 		// fmin
 		this.fMinSpinner.setMinimum(1);
 		this.fMinSpinner.setMaximum(100000000);
-
+		
 		// max words / vmax
 		this.vMaxSpinner.setMinimum(10);
 		this.vMaxSpinner.setMaximum(100000);
-
+		
 		// rotation percent
 		new Label(extendedParametersGroup, SWT.NONE).setText(WordCloudUIMessages.percentOfRotatedLabelsColon);
 		rotationPercent = new FloatSpinner(extendedParametersGroup, SWT.BORDER);
 		rotationPercent.setMaximumAsFloat(100);
-
+		
 		// random positions
 		randomPositions = new Button(extendedParametersGroup, SWT.CHECK);
 		randomPositions.setText(WordCloudUIMessages.randomizePositions);
 		
-
+		
 		// FIXME: temporary fix, later must enable the font, rendering mode, etc. in WordCloud R calls
 		// disable all component of the rendering tool bar
 		this.advancedChartToolBar.setEnabled(false);
 		
-		//extendedParametersGroup.pack();
-
+		// extendedParametersGroup.pack();
+		
 		Log.info(WordCloudUIMessages.wordCloudReadyColon + this.getResult());
-
+		
 	}
-
-
-
+	
+	
+	
 	@Override
 	public void updateEditorFromChart(boolean update) {
 		// Nothing to do
 	}
 	
-}
\ No newline at end of file
+}
Index: tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/handlers/ComputeWordCloud.java
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/handlers/ComputeWordCloud.java	(revision 2401)
+++ tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/handlers/ComputeWordCloud.java	(revision 2402)
@@ -48,14 +48,14 @@
  */
 public class ComputeWordCloud extends BaseAbstractHandler {
 	
-
+	
 	@Override
 	public Object execute(final ExecutionEvent event) throws ExecutionException {
-
-		if(!this.checkStatsEngine()) {
+		
+		if (!this.checkStatsEngine()) {
 			return null;
 		}
-
+		
 		Object selection = this.getCorporaViewSelectedObject(event);
 		WordCloud wordCloud = null;
 		
@@ -63,16 +63,16 @@
 		if (selection instanceof WordCloud) {
 			wordCloud = ((WordCloud) selection);
 		}
-		else	{
+		else {
 			// Inits R packages
-			if(!WordCloud.initPackages())	{
+			if (!WordCloud.initPackages()) {
 				OpenBrowser.openfile("https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud"); //$NON-NLS-1$
 			}
-
+			
 			// Creating from Corpus
 			if (selection instanceof CQPCorpus) {
 				try {
-					CQPCorpus corpus = (CQPCorpus) selection; 
+					CQPCorpus corpus = (CQPCorpus) selection;
 					String lang = corpus.getLang();
 					CQLQuery query;
 					if (corpus.getProperty(lang + "pos") != null) { //$NON-NLS-1$
@@ -83,8 +83,8 @@
 					}
 					
 					System.out.println("Used query: " + query); //$NON-NLS-1$
-
-					Index index = new Index((CQPCorpus)selection);
+					
+					Index index = new Index((CQPCorpus) selection);
 					index.setQuery(query);
 					index.setProperty(corpus.getWordProperty());
 					
@@ -97,19 +97,19 @@
 			}
 			// Creating from Index
 			else if (selection instanceof Index) {
-				wordCloud = new WordCloud((Index)selection);
+				wordCloud = new WordCloud((Index) selection);
 			}
 			// Error
-			else	{
+			else {
 				return super.logCanNotExecuteCommand(selection);
 			}
-
+			
 		}
 		
 		StatusLine.setMessage(WordCloudCoreMessages.info_openingWordCloudResult);
-
+		
 		ChartEditor.openEditor(wordCloud);
-							
+		
 		return null;
 	}
 }
Index: tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/preferences/WordCloudPreferencePage.java
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/preferences/WordCloudPreferencePage.java	(revision 2401)
+++ tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/preferences/WordCloudPreferencePage.java	(revision 2402)
@@ -1,6 +1,7 @@
 package org.txm.wordcloud.rcp.preferences;
 
 // Copyright © 2010-2013 ENS de Lyon.
+
 // Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
 // Lyon 2, University of Franche-Comté, University of Nice
 // Sophia Antipolis, University of Paris 3.
@@ -42,13 +43,14 @@
 
 /**
  * Word cloud preference page.
+ * 
  * @author mdecorde
  * @author sjacquot
  *
  */
 public class WordCloudPreferencePage extends TXMPreferencePage {
-
-
+	
+	
 	@Override
 	public void createFieldEditors() {
 		
@@ -62,14 +64,14 @@
 		
 		// other shared preferences
 		SWTChartsComponentsProvider.createChartsRenderingPreferencesFields(this, chartsTab);
-
+		
 	}
 	
 	
 	@Override
 	public void init(IWorkbench workbench) {
 		this.setPreferenceStore(new TXMPreferenceStore(WordCloudPreferences.getInstance().getPreferencesNodeQualifier()));
-		//this.setTitle("WordCloud");
+		// this.setTitle("WordCloud");
 		this.setImageDescriptor(WordCloudAdapterFactory.ICON);
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/adapters/WordCloudAdapterFactory.java
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/adapters/WordCloudAdapterFactory.java	(revision 2401)
+++ tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/adapters/WordCloudAdapterFactory.java	(revision 2402)
@@ -16,18 +16,18 @@
  * @author sjacquot
  */
 public class WordCloudAdapterFactory extends TXMResultAdapterFactory {
-
 	
-	public static final ImageDescriptor ICON =
-			AbstractUIPlugin.imageDescriptorFromPlugin(FrameworkUtil.getBundle(WordCloudAdapterFactory.class).getSymbolicName(),
-					"platform:/plugin/"+ FrameworkUtil.getBundle(WordCloudAdapterFactory.class).getSymbolicName() + "/icons/functions/wordcloud.png"); //$NON-NLS-1$
-
 	
+	public static final ImageDescriptor ICON = AbstractUIPlugin.imageDescriptorFromPlugin(FrameworkUtil.getBundle(WordCloudAdapterFactory.class).getSymbolicName(),
+			"platform:/plugin/" + FrameworkUtil.getBundle(WordCloudAdapterFactory.class).getSymbolicName() + "/icons/functions/wordcloud.png"); //$NON-NLS-1$
 	
+	
+	
 	@Override
 	public Object getAdapter(Object adaptableObject, Class adapterType) {
-		if(this.canAdapt(adapterType) && adaptableObject instanceof WordCloud)	{
+		if (this.canAdapt(adapterType) && adaptableObject instanceof WordCloud) {
 			return new TXMResultAdapter() {
+				
 				@Override
 				public ImageDescriptor getImageDescriptor(Object object) {
 					return ICON;
@@ -36,6 +36,6 @@
 		}
 		return null;
 	}
-
-
+	
+	
 }
Index: tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/WordCloudUIMessages.java
===================================================================
--- tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/WordCloudUIMessages.java	(revision 2401)
+++ tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/WordCloudUIMessages.java	(revision 2402)
@@ -13,21 +13,28 @@
 	
 	private static final String BUNDLE_NAME = "org.txm.wordcloud.rcp.messages.messages"; //$NON-NLS-1$
 	
-	public static String vmax; 
-	public static String fmin; 
-	public static String percentOfRotatedLabelsColon; 
-	public static String randomizePositions; 
-	public static String wordCloudReadyColon; 
-	public static String numberOfUsedWords; 
-	public static String minimalFrequencyForUsedWords; 
-	public static String percentOfRotatedWords; 
-	public static String randomWordPositions; 
-
+	public static String vmax;
+	
+	public static String fmin;
+	
+	public static String percentOfRotatedLabelsColon;
+	
+	public static String randomizePositions;
+	
+	public static String wordCloudReadyColon;
+	
+	public static String numberOfUsedWords;
+	
+	public static String minimalFrequencyForUsedWords;
+	
+	public static String percentOfRotatedWords;
+	
+	public static String randomWordPositions;
+	
 	static {
 		// initialize resource bundle
 		Utf8NLS.initializeMessages(BUNDLE_NAME, WordCloudUIMessages.class);
 	}
-
-	private WordCloudUIMessages() {
-	}
+	
+	private WordCloudUIMessages() {}
 }
Index: tmp/org.txm.tokenizer.core/src/org/txm/tokenizer/package.html
===================================================================
--- tmp/org.txm.tokenizer.core/src/org/txm/tokenizer/package.html	(revision 2401)
+++ tmp/org.txm.tokenizer.core/src/org/txm/tokenizer/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>All necessary classes to tokenize XML-TEI</p>
+	<p>All necessary classes to tokenize XML-TEI</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.tokenizer.core/.classpath
===================================================================
--- tmp/org.txm.tokenizer.core/.classpath	(revision 2401)
+++ tmp/org.txm.tokenizer.core/.classpath	(revision 2402)
@@ -1,9 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
-	  <classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins" />
+	<classpathentry kind="src" path="src" />
+	<classpathentry exported="true" kind="con"
+		path="GROOVY_SUPPORT" />
+	<classpathentry exported="true" kind="con"
+		path="GROOVY_DSL_SUPPORT" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.textsbalance.core/.classpath
===================================================================
--- tmp/org.txm.textsbalance.core/.classpath	(revision 2401)
+++ tmp/org.txm.textsbalance.core/.classpath	(revision 2402)
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.treetagger.core/src/org/txm/importer/xmltxm/package.html
===================================================================
--- tmp/org.txm.treetagger.core/src/org/txm/importer/xmltxm/package.html	(revision 2401)
+++ tmp/org.txm.treetagger.core/src/org/txm/importer/xmltxm/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>Manages xml-tei-txm files</p>
+	<p>Manages xml-tei-txm files</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.treetagger.core/.classpath
===================================================================
--- tmp/org.txm.treetagger.core/.classpath	(revision 2401)
+++ tmp/org.txm.treetagger.core/.classpath	(revision 2402)
@@ -1,13 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
-	  <classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry exported="true" kind="con"
+		path="GROOVY_SUPPORT" />
+	<classpathentry exported="true" kind="con"
+		path="GROOVY_DSL_SUPPORT" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.treetaggerinstaller.rcp/.classpath
===================================================================
--- tmp/org.txm.treetaggerinstaller.rcp/.classpath	(revision 2401)
+++ tmp/org.txm.treetaggerinstaller.rcp/.classpath	(revision 2402)
@@ -1,12 +1,15 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry exported="true" kind="lib" path="TreeTagger/"/>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry exported="true" kind="lib"
+		path="TreeTagger/" />
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.treetaggerinstaller.rcp/src/org/txm/treetagger/DoInstallStep.java
===================================================================
--- tmp/org.txm.treetaggerinstaller.rcp/src/org/txm/treetagger/DoInstallStep.java	(revision 2401)
+++ tmp/org.txm.treetaggerinstaller.rcp/src/org/txm/treetagger/DoInstallStep.java	(revision 2402)
@@ -19,6 +19,7 @@
 
 
 public class DoInstallStep extends PostInstallationStep {
+	
 	protected String name = "TreeTaggerInstaller"; //$NON-NLS-1$
 	
 	@Override
@@ -26,7 +27,9 @@
 		
 	}
 	
-	public DoInstallStep() { name = "TreeTagger"; }
+	public DoInstallStep() {
+		name = "TreeTagger";
+	}
 	
 	@Override
 	public void install() {
@@ -41,19 +44,21 @@
 				return; // nothing to do
 			}
 		}
-		System.out.println("Updating TreeTagger preferences for TreeTaggerInstaller version="+currentVersion);
+		System.out.println("Updating TreeTagger preferences for TreeTaggerInstaller version=" + currentVersion);
 		
 		String os = "win";
-		if (Util.isWindows()) { //$NON-NLS-1$
+		if (Util.isWindows()) { // $NON-NLS-1$
 			os = "win";
-		} else if (Util.isMac()) { //$NON-NLS-1$
+		}
+		else if (Util.isMac()) { // $NON-NLS-1$
 			os = "macosx";
-		} else {
+		}
+		else {
 			os = "linux32";
 			if (System.getProperty("os.arch").contains("64"))
 				os = "linux64";
 		}
-
+		
 		File bundleDir = BundleUtils.getBundleFile("TreeTaggerInstaller");
 		if (bundleDir == null) {
 			System.out.println("Error while retrieving TreeTaggerInstaller bundle directory.");
@@ -62,55 +67,62 @@
 		File treetaggerDir = new File(bundleDir, "TreeTagger");
 		File OSDir = new File(treetaggerDir, os);
 		final File treetaggerModelsDir = new File(treetaggerDir, "models");
-
+		
 		TreeTaggerPreferences.getInstance().put(TreeTaggerPreferences.INSTALL_PATH, OSDir.getAbsolutePath());
 		
 		final String previousModelDirectoryPath = TreeTaggerPreferences.getInstance().getString(TreeTaggerPreferences.MODELS_PATH);
 		if (previousModelDirectoryPath == null) {
-			Log.info("Set TreeTagger model directory to: "+treetaggerModelsDir);
+			Log.info("Set TreeTagger model directory to: " + treetaggerModelsDir);
 			TreeTaggerPreferences.getInstance().put(TreeTaggerPreferences.MODELS_PATH, treetaggerModelsDir.getAbsolutePath());
-		} else if (previousModelDirectoryPath.equals(treetaggerModelsDir.getAbsolutePath())) {
-			// nothing to do	
+		}
+		else if (previousModelDirectoryPath.equals(treetaggerModelsDir.getAbsolutePath())) {
+			// nothing to do
 			Log.info("No change to TreeTagger model directory.");
-		} else {
+		}
+		else {
 			final File previousModelDirectoryDirectory = new File(previousModelDirectoryPath);
 			final File[] files = previousModelDirectoryDirectory.listFiles();
-			if (previousModelDirectoryDirectory.exists() && previousModelDirectoryDirectory.isDirectory() 
+			if (previousModelDirectoryDirectory.exists() && previousModelDirectoryDirectory.isDirectory()
 					&& files != null && files.length > 0) {
 				
-				Log.info("TreeTagger model directory already set to: "+previousModelDirectoryDirectory);
-//				final ;
-//				if (Display.getCurrent() == null) display = Display.getDefault();
-//				else display = Display.getCurrent();
-//				
-//				if (display == null) return;
+				Log.info("TreeTagger model directory already set to: " + previousModelDirectoryDirectory);
+				// final ;
+				// if (Display.getCurrent() == null) display = Display.getDefault();
+				// else display = Display.getCurrent();
+				//
+				// if (display == null) return;
 				final Display display = TXMWindows.getDisplay();
 				display.syncExec(new Runnable() {
+					
 					@Override
 					public void run() {
 						Shell shell = display.getActiveShell(); // ask user if he's sure
 						String[] filenames = new String[files.length];
-						for (int i = 0 ; i < files.length ; i++) filenames[i] = files[i].getName();
-						boolean b = MessageDialog.openConfirm(shell, "TreeTagger model directory", "The TreeTagger model directory is already set in TXM preferences and is not empty: \n  - "+StringUtils.join(filenames, "\n  - ")+"\n\nKeep using this one ?\n("+previousModelDirectoryPath+")");
+						for (int i = 0; i < files.length; i++)
+							filenames[i] = files[i].getName();
+						boolean b = MessageDialog.openConfirm(shell, "TreeTagger model directory", "The TreeTagger model directory is already set in TXM preferences and is not empty: \n  - "
+								+ StringUtils.join(filenames, "\n  - ") + "\n\nKeep using this one ?\n(" + previousModelDirectoryPath + ")");
 						if (!b) {
-							Log.info("Set TreeTagger model directory to: "+treetaggerModelsDir);
+							Log.info("Set TreeTagger model directory to: " + treetaggerModelsDir);
 							TreeTaggerPreferences.getInstance().put(TreeTaggerPreferences.MODELS_PATH, treetaggerModelsDir.getAbsolutePath());
-						} else {
-							Log.info("Keep TreeTagger model directory to: "+previousModelDirectoryDirectory);
 						}
+						else {
+							Log.info("Keep TreeTagger model directory to: " + previousModelDirectoryDirectory);
+						}
 					}
 				});
-			} else {
+			}
+			else {
 				TreeTaggerPreferences.getInstance().put(TreeTaggerPreferences.MODELS_PATH, treetaggerModelsDir.getAbsolutePath());
 			}
 		}
 		
 		String ttdir = TreeTaggerPreferences.getInstance().getString(TreeTaggerPreferences.INSTALL_PATH);
 		String ttmodeldir = TreeTaggerPreferences.getInstance().getString(TreeTaggerPreferences.MODELS_PATH);
-		Log.warning("TreeTagger preferences set to: "+ttdir+ " and "+ttmodeldir);
+		Log.warning("TreeTagger preferences set to: " + ttdir + " and " + ttmodeldir);
 		TXMPreferences.put(TreeTaggerInstallerPreferences.PREFERENCES_NODE, TreeTaggerInstallerPreferences.VERSION, currentVersion.toString());
 		
-		//FIXME: to beremoved when 0.8.0 preferences are ready 
+		// FIXME: to beremoved when 0.8.0 preferences are ready
 		TreeTaggerPreferences.getInstance().put(TreeTaggerPreferences.INSTALL_PATH, ttdir);
 		TreeTaggerPreferences.getInstance().put(TreeTaggerPreferences.MODELS_PATH, ttmodeldir);
 	}
Index: tmp/org.txm.treetaggerinstaller.rcp/src/org/txm/treetagger/Activator.java
===================================================================
--- tmp/org.txm.treetaggerinstaller.rcp/src/org/txm/treetagger/Activator.java	(revision 2401)
+++ tmp/org.txm.treetaggerinstaller.rcp/src/org/txm/treetagger/Activator.java	(revision 2402)
@@ -4,38 +4,38 @@
 import org.osgi.framework.BundleContext;
 
 public class Activator implements BundleActivator {
-
+	
 	@Override
 	public void start(BundleContext context) throws Exception {
 		
-//		System.out.println("Activating TreeTagger plugin");
-//		String os = "win";
-//		if (Util.isWindows()) { //$NON-NLS-1$
-//			os = "win";
-//		} else if (Util.isMac()) { //$NON-NLS-1$
-//			os = "macosx";
-//		} else {
-//			os = "linux32";
-//			if (System.getProperty("os.arch").contains("64"))
-//				os = "linux64";
-//		}
-//
-//		URL url = FileLocator.find(Platform.getBundle("TreeTaggerInstaller"), new Path("TreeTagger"), null);
-//		
-//		String treetaggerDir = url.getFile();
-//		File treetaggerOSDir = new File(treetaggerDir, os);
-//		File treetaggerModelsDir = new File(treetaggerDir,"models");
-//		
-//		System.out.println("Set TreeTagger preferences to: "+treetaggerDir);
-//		
-//		TxmPreferences.set(TreeTaggerPreferencePage.TREETAGGER_INSTALL_PATH, treetaggerOSDir.getAbsolutePath());
-//		TxmPreferences.set(TreeTaggerPreferencePage.TREETAGGER_MODELS_PATH, treetaggerModelsDir.getAbsolutePath());
+		// System.out.println("Activating TreeTagger plugin");
+		// String os = "win";
+		// if (Util.isWindows()) { //$NON-NLS-1$
+		// os = "win";
+		// } else if (Util.isMac()) { //$NON-NLS-1$
+		// os = "macosx";
+		// } else {
+		// os = "linux32";
+		// if (System.getProperty("os.arch").contains("64"))
+		// os = "linux64";
+		// }
+		//
+		// URL url = FileLocator.find(Platform.getBundle("TreeTaggerInstaller"), new Path("TreeTagger"), null);
+		//
+		// String treetaggerDir = url.getFile();
+		// File treetaggerOSDir = new File(treetaggerDir, os);
+		// File treetaggerModelsDir = new File(treetaggerDir,"models");
+		//
+		// System.out.println("Set TreeTagger preferences to: "+treetaggerDir);
+		//
+		// TxmPreferences.set(TreeTaggerPreferencePage.TREETAGGER_INSTALL_PATH, treetaggerOSDir.getAbsolutePath());
+		// TxmPreferences.set(TreeTaggerPreferencePage.TREETAGGER_MODELS_PATH, treetaggerModelsDir.getAbsolutePath());
 	}
-
+	
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		// TODO Auto-generated method stub
-
+		
 	}
-
+	
 }
Index: tmp/org.txm.textsbalance.rcp/.classpath
===================================================================
--- tmp/org.txm.textsbalance.rcp/.classpath	(revision 2401)
+++ tmp/org.txm.textsbalance.rcp/.classpath	(revision 2402)
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.tigersearch.rcp/.classpath
===================================================================
--- tmp/org.txm.tigersearch.rcp/.classpath	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/.classpath	(revision 2402)
@@ -1,23 +1,28 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry exported="true" kind="lib" path="lib/"/>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry exported="true"
-                   kind="con"
-                   path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry exported="true" kind="lib" path="lib/dom4j-1.6.1.jar"/>
-	  <classpathentry exported="true" kind="lib" path="lib/log4j-1.2.12.jar"/>
-	  <classpathentry exported="true" kind="lib" path="lib/TigerSearch.jar">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry exported="true" kind="con" path="GROOVY_SUPPORT"/>
-	  <classpathentry exported="true" kind="con" path="GROOVY_DSL_SUPPORT"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry exported="true" kind="lib" path="lib/" />
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry exported="true" kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry exported="true" kind="lib"
+		path="lib/dom4j-1.6.1.jar" />
+	<classpathentry exported="true" kind="lib"
+		path="lib/log4j-1.2.12.jar" />
+	<classpathentry exported="true" kind="lib"
+		path="lib/TigerSearch.jar">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry exported="true" kind="con"
+		path="GROOVY_SUPPORT" />
+	<classpathentry exported="true" kind="con"
+		path="GROOVY_DSL_SUPPORT" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/srcmf/package.html
===================================================================
--- tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/srcmf/package.html	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/srcmf/package.html	(revision 2402)
@@ -1,5 +1,6 @@
 <html>
 <body>
-<p>TIGERSearch import module. This is a prototype that can only manage SRCMF TIGERSearch sources</p>
+	<p>TIGERSearch import module. This is a prototype that can only
+		manage SRCMF TIGERSearch sources</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXML.xsd
===================================================================
--- tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXML.xsd	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXML.xsd	(revision 2402)
@@ -1,70 +1,69 @@
 <?xml version="1.0" encoding="UTF-8"?>
-  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
- <!-- ==================================================================
-      XML Schema for the TIGER-XML format
-      http://www.ims.uni-stuttgart.de/projekte/TIGER/public/TigerXML.xsd
-      ==================================================================
-      TIGER Project, Wolfgang Lezius
-      IMS, University of Stuttgart, 04/01/2003
-      ================================================================== -->
+	<!-- ================================================================== 
+		XML Schema for the TIGER-XML format http://www.ims.uni-stuttgart.de/projekte/TIGER/public/TigerXML.xsd 
+		================================================================== TIGER 
+		Project, Wolfgang Lezius IMS, University of Stuttgart, 04/01/2003 ================================================================== -->
 
 
-  <!-- ======================================================
-       INCLUDES DECLARATION OF THE HEADER
-       ====================================================== -->
-  <xs:include schemaLocation="TigerXMLHeader.xsd"/>
+	<!-- ====================================================== INCLUDES DECLARATION 
+		OF THE HEADER ====================================================== -->
+	<xs:include schemaLocation="TigerXMLHeader.xsd" />
 
 
-  <!-- ======================================================
-       INCLUDES DECLARATION OF SUBCORPORA AND SENTENCES
-       ====================================================== -->
-  <xs:include schemaLocation="TigerXMLSubcorpus.xsd"/>
+	<!-- ====================================================== INCLUDES DECLARATION 
+		OF SUBCORPORA AND SENTENCES ====================================================== -->
+	<xs:include schemaLocation="TigerXMLSubcorpus.xsd" />
 
 
-  <!-- ======================================================
-       DECLARATION OF THE CORPUS DOCUMENT
-       ====================================================== -->
+	<!-- ====================================================== DECLARATION 
+		OF THE CORPUS DOCUMENT ====================================================== -->
 
-  <!-- declaration of the root element: corpus -->
+	<!-- declaration of the root element: corpus -->
 
-  <xs:element name="corpus">
-  
-    
-  
-        <xs:complexType>
+	<xs:element name="corpus">
 
-      <xs:sequence>
 
-        <xs:choice>           
-           <!-- header of the document is optional -->
-           <xs:element name="head" type="headType" minOccurs="0" maxOccurs="1" />
-        <xs:/choice>
 
-        <xs:element name="body" type="bodyType" minOccurs="1" maxOccurs="1" />
+		<xs:complexType>
 
-      <xs:/sequence>
+			<xs:sequence>
 
-      <!-- corpus ID -->
-      <xs:attribute name="id" type="idType" use="required" />
+				<xs:choice>
+					<!-- header of the document is optional -->
+					<xs:element name="head" type="headType" minOccurs="0"
+						maxOccurs="1" />
+					<xs: / choice>
 
-      <!-- optional attribute: TigerXML version; used by TIGERSearch only -->
-      <xs:attribute name="version" type="xsd:string" use="optional" />
+						<xs:element name="body" type="bodyType" minOccurs="1"
+							maxOccurs="1" />
 
-    <xs:/complexType>
-    <xs:/element>
+						<xs: / sequence>
 
+							<!-- corpus ID -->
+							<xs:attribute name="id" type="idType" use="required" />
 
-  <!-- declaration of the body type -->
+							<!-- optional attribute: TigerXML version; used by TIGERSearch only -->
+							<xs:attribute name="version" type="xsd:string"
+								use="optional" />
 
-  <xs:complexType name="bodyType">
+							<xs: / complexType>
+								<xs: / element>
 
-    <xs:choice minOccurs="1" maxOccurs="unbounded">
-      <xs:element name="subcorpus" type="subcorpusType" minOccurs="1" maxOccurs="1"/>
-      <xs:element name="s" type="sentenceType" minOccurs="1" maxOccurs="1"/>
-    <xs:/choice>
 
-  <xs:/complexType>
+									<!-- declaration of the body type -->
 
+									<xs:complexType name="bodyType">
 
-<xs:/schema>
\ No newline at end of file
+										<xs:choice minOccurs="1" maxOccurs="unbounded">
+											<xs:element name="subcorpus" type="subcorpusType"
+												minOccurs="1" maxOccurs="1" />
+											<xs:element name="s" type="sentenceType"
+												minOccurs="1" maxOccurs="1" />
+											<xs: / choice>
+
+												<xs: / complexType>
+
+
+													<xs: / schema>
\ No newline at end of file
Index: tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/ts.xsl
===================================================================
--- tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/ts.xsl	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/ts.xsl	(revision 2402)
@@ -1,84 +1,83 @@
 <?xml version="1.0"?>
 <xsl:stylesheet version="1.0"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
-                xmlns:tei="http://www.tei-c.org/ns/1.0"
-                xmlns:xd="http://www.pnp-software.com/XSLTdoc"
-                xmlns:edate="http://exslt.org/dates-and-times"
-                exclude-result-prefixes="edate xd">
+	xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+	xmlns:tei="http://www.tei-c.org/ns/1.0"
+	xmlns:xd="http://www.pnp-software.com/XSLTdoc"
+	xmlns:edate="http://exslt.org/dates-and-times"
+	exclude-result-prefixes="edate xd">
 
-  <xd:doc type="stylesheet">
+	<xd:doc type="stylesheet">
 
-    <xd:short>
-      Feuille de transformation du format TIGER-XML vers le format XML-TXM
-    </xd:short>
+		<xd:short>
+			Feuille de transformation du format TIGER-XML vers le format XML-TXM
+		</xd:short>
 
-    <xd:detail>
-      This stylesheet is free software; you can redistribute it and/or
-      modify it under the terms of the GNU Lesser General Public
-      License as published by the Free Software Foundation; either
-      version 3 of the License, or (at your option) any later version.
-      
-      This stylesheet 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
-      Lesser General Public License for more details.
-      
-      You should have received a copy of GNU Lesser Public License with
-      this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
-    </xd:detail>
+		<xd:detail>
+			This stylesheet is free software; you can redistribute it and/or
+			modify it under the terms of the GNU Lesser General Public
+			License as published by the Free Software Foundation; either
+			version 3 of the License, or (at your option) any later version.
 
-    <xd:author>Matthieu Decorde, matthieu.decorde AT ens-lyon.fr</xd:author>
-    <xd:author>Serge Heiden, slh AT ens-lyon.fr</xd:author>
-    <xd:author>Alexey Lavrentev, alexei.lavrentev AT ens-lyon.fr></xd:author>
+			This stylesheet 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
+			Lesser General Public License for more details.
 
-    <xd:copyright>2016, ENS de Lyon/CNRS (UMR IHRIM Cactus)</xd:copyright>
+			You should have received a copy of GNU Lesser Public License with
+			this stylesheet. If not, see http://www.gnu.org/licenses/lgpl.html
+		</xd:detail>
 
-  </xd:doc>
-  
-  <xsl:output 
-   method="xml"
-   encoding="UTF-8"
-   indent="yes" />
+		<xd:author>Matthieu Decorde, matthieu.decorde AT ens-lyon.fr</xd:author>
+		<xd:author>Serge Heiden, slh AT ens-lyon.fr</xd:author>
+		<xd:author>Alexey Lavrentev, alexei.lavrentev AT ens-lyon.fr></xd:author>
 
-  <xsl:template match="corpus">
-    <corpus>
-    	<xsl:choose>
-    		<xsl:when test="subcorpus">
-    			<xsl:apply-templates select="subcorpus"/>
-    		</xsl:when>
-    		<xsl:otherwise>
-    			<text>
-    				<xsl:apply-templates select="s"/>
-    			</text>			
-    		</xsl:otherwise>
-    	</xsl:choose>
-    	<xsl:apply-templates/>
-    </corpus>
-  </xsl:template>
-  
-  <xsl:template match="subcorpus">
-    <text>
-	<xsl:attribute name="name"><xsl:value-of select="@name"/></xsl:attribute>
-	<xsl:apply-templates select="s"/>
-    </text>
-  </xsl:template>
-  
-  <xsl:template match="s">
-	<p>
-	  <s>
-	    <xsl:attribute name="id"><xsl:value-of select="@id"/></xsl:attribute>
-	      <xsl:apply-templates select="graph/terminals/t" />
-	  </s>
-	</p>
-  </xsl:template>
+		<xd:copyright>2016, ENS de Lyon/CNRS (UMR IHRIM Cactus)</xd:copyright>
 
-  <xsl:template match="t">
+	</xd:doc>
+
+	<xsl:output method="xml" encoding="UTF-8" indent="yes" />
+
+	<xsl:template match="corpus">
+		<corpus>
+			<xsl:choose>
+				<xsl:when test="subcorpus">
+					<xsl:apply-templates select="subcorpus" />
+				</xsl:when>
+				<xsl:otherwise>
+					<text>
+						<xsl:apply-templates select="s" />
+					</text>
+				</xsl:otherwise>
+			</xsl:choose>
+			<xsl:apply-templates />
+		</corpus>
+	</xsl:template>
+
+	<xsl:template match="subcorpus">
+		<text>
+			<xsl:attribute name="name"><xsl:value-of
+				select="@name" /></xsl:attribute>
+			<xsl:apply-templates select="s" />
+		</text>
+	</xsl:template>
+
+	<xsl:template match="s">
+		<p>
+			<s>
+				<xsl:attribute name="id"><xsl:value-of
+					select="@id" /></xsl:attribute>
+				<xsl:apply-templates select="graph/terminals/t" />
+			</s>
+		</p>
+	</xsl:template>
+
+	<xsl:template match="t">
 		<w>
 			<xsl:for-each select="@*[not(name()='word')]">
-				<xsl:copy/>
+				<xsl:copy />
 			</xsl:for-each>
-	        <xsl:value-of select="@word"/>
+			<xsl:value-of select="@word" />
 		</w>
-  </xsl:template>
+	</xsl:template>
 
 </xsl:stylesheet>
Index: tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXMLSubcorpus.xsd
===================================================================
--- tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXMLSubcorpus.xsd	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXMLSubcorpus.xsd	(revision 2402)
@@ -1,270 +1,325 @@
 <?xml version="1.0" encoding="UTF-8"?>
-  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
- <!-- ===========================================================================
-      XML Schema for the subcorpus part of the TIGER-XML format
-      http://www.ims.uni-stuttgart.de/projekte/TIGER/public/TigerXMLSubcorpus.xsd
-      ===========================================================================
-      TIGER Project, Wolfgang Lezius
-      IMS, University of Stuttgart, 04/01/2003
-      =========================================================================== -->
+	<!-- =========================================================================== 
+		XML Schema for the subcorpus part of the TIGER-XML format http://www.ims.uni-stuttgart.de/projekte/TIGER/public/TigerXMLSubcorpus.xsd 
+		=========================================================================== 
+		TIGER Project, Wolfgang Lezius IMS, University of Stuttgart, 04/01/2003 =========================================================================== -->
 
-  <!-- ======================================================
-       DECLARATION OF SUBCORPORA AND SENTENCES
-       ====================================================== -->
+	<!-- ====================================================== DECLARATION 
+		OF SUBCORPORA AND SENTENCES ====================================================== -->
 
 
-  <!-- declaration of the subcorpus element -->
+	<!-- declaration of the subcorpus element -->
 
-  <xs:element name="subcorpus" type="subcorpusType"/>
+	<xs:element name="subcorpus" type="subcorpusType" />
 
 
-  <!-- declaration of the subcorpus type -->
+	<!-- declaration of the subcorpus type -->
 
-  <xs:complexType name="subcorpusType">
+	<xs:complexType name="subcorpusType">
 
-    <!-- A subcorpus may comprise another subcorpora or sentences -->
+		<!-- A subcorpus may comprise another subcorpora or sentences -->
 
-    <xs:choice minOccurs="0" maxOccurs="unbounded">
-      <xs:element name="subcorpus" type="subcorpusType" minOccurs="1" maxOccurs="1"/>
-      <xs:element name="s" type="sentenceType" minOccurs="1" maxOccurs="1"/>
-    <xs:/choice>
+		<xs:choice minOccurs="0" maxOccurs="unbounded">
+			<xs:element name="subcorpus" type="subcorpusType"
+				minOccurs="1" maxOccurs="1" />
+			<xs:element name="s" type="sentenceType" minOccurs="1"
+				maxOccurs="1" />
+			<xs: / choice>
 
-    <!-- required: subcorpus name -->
- 
-    <xs:attribute name="name" type="xsd:string" use="required"/>
+				<!-- required: subcorpus name -->
 
-    <!-- optional: reference to external subcorpus file 
+				<xs:attribute name="name" type="xsd:string"
+					use="required" />
 
-         A subcorpus of a TigerXML corpus can also be stored in separate file. 
-         This attribute points to the external subcorpus file. The pointer is
-         an URI. Examples: file:relative.xml or file:/path/to/absolute.xml 
+				<!-- optional: reference to external subcorpus file A subcorpus of a 
+					TigerXML corpus can also be stored in separate file. This attribute points 
+					to the external subcorpus file. The pointer is an URI. Examples: file:relative.xml 
+					or file:/path/to/absolute.xml Note: If there is a pointer to an external 
+					file, the subcorpus element must be empty. -->
 
-         Note: If there is a pointer to an external file, the subcorpus
-               element must be empty. -->
+				<xs:attribute name="external" type="xsd:anyURI" />
 
-    <xs:attribute name="external" type="xsd:anyURI"/>  
+				<xs: / complexType>
 
-  <xs:/complexType>
 
+					<!-- declaration of the sentence type -->
 
-  <!-- declaration of the sentence type -->
+					<xs:complexType name="sentenceType">
 
-  <xs:complexType name="sentenceType">
+						<xs:sequence>
+							<xs:element name="graph" type="graphType"
+								minOccurs="0" maxOccurs="1" />
+							<xs:element name="matches" type="matchesType"
+								minOccurs="0" maxOccurs="1" />
+							<xs: / sequence>
 
-    <xs:sequence>
-      <xs:element name="graph" type="graphType" minOccurs="0" maxOccurs="1"/>
-      <xs:element name="matches" type="matchesType" minOccurs="0" maxOccurs="1"/>
-    <xs:/sequence>
+								<xs:attribute name="id" type="idType"
+									use="required" />
 
-    <xs:attribute name="id" type="idType" use="required"/>
+								<xs: / complexType>
 
-  <xs:/complexType>
 
+									<!-- declaration of the graph type -->
 
-  <!-- declaration of the graph type -->
+									<xs:complexType name="graphType">
 
-  <xs:complexType name="graphType">
+										<xs:sequence>
+											<xs:element name="terminals" type="terminalsType"
+												minOccurs="1" maxOccurs="1" />
+											<xs:element name="nonterminals"
+												type="nonterminalsType" minOccurs="1" maxOccurs="1" />
+											<xs: / sequence>
 
-    <xs:sequence>
-      <xs:element name="terminals" type="terminalsType" minOccurs="1" maxOccurs="1"/>
-      <xs:element name="nonterminals" type="nonterminalsType" minOccurs="1" maxOccurs="1"/>
-    <xs:/sequence>
+												<xs:attribute name="root" type="idrefType"
+													use="required" />
 
-    <xs:attribute name="root" type="idrefType" use="required"/>
+												<!-- indicated that the exported sentence is discontinuous -->
+												<xs:attribute name="discontinuous"
+													type="xsd:boolean" default="false" use="optional" />
 
-    <!-- indicated that the exported sentence is discontinuous -->
-    <xs:attribute name="discontinuous" type="xsd:boolean" default="false" use="optional"/>
+												<xs: / complexType>
 
-  <xs:/complexType>
 
+													<!-- declaration of the terminals type -->
 
-  <!-- declaration of the terminals type -->
+													<xs:complexType name="terminalsType">
 
-  <xs:complexType name="terminalsType">
+														<xs:sequence>
+															<xs:element name="t" type="tType"
+																minOccurs="1" maxOccurs="unbounded" />
+															<xs: / sequence>
 
-    <xs:sequence>
-      <xs:element name="t" type="tType" minOccurs="1" maxOccurs="unbounded"/>
-    <xs:/sequence>
+																<xs: / complexType>
 
-  <xs:/complexType>
 
+																	<!-- declaration of the t element -->
 
-  <!-- declaration of the t element -->
+																	<xs:complexType name="tType">
 
-  <xs:complexType name="tType">
+																		<!-- secondary edges possible -->
+																		<xs:sequence>
+																			<xs:element name="secedge"
+																				type="secedgeType" minOccurs="0"
+																				maxOccurs="unbounded" />
+																			<xs: / sequence>
 
-    <!-- secondary edges possible -->
-    <xs:sequence>
-      <xs:element name="secedge" type="secedgeType" minOccurs="0" maxOccurs="unbounded"/>
-    <xs:/sequence>
+																				<xs:attribute name="id" type="idType"
+																					use="required" />
+																				<xs:attributeGroup
+																					ref="tfeatureAttributes" />
 
-    <xs:attribute name="id" type="idType" use="required"/>    
-    <xs:attributeGroup ref="tfeatureAttributes"/>
+																				<xs: / complexType>
 
-  <xs:/complexType>
 
+																					<!-- declaration of the nonterminals type -->
 
-  <!-- declaration of the nonterminals type -->
+																					<xs:complexType
+																						name="nonterminalsType">
 
-  <xs:complexType name="nonterminalsType">
+																						<xs:sequence>
+																							<xs:element name="nt" type="ntType"
+																								minOccurs="0" maxOccurs="unbounded" />
+																							<xs: / sequence>
 
-    <xs:sequence>
-      <xs:element name="nt" type="ntType" minOccurs="0" maxOccurs="unbounded"/>
-    <xs:/sequence>
+																								<xs: / complexType>
 
-  <xs:/complexType>
 
+																									<!-- declaration of the nt element -->
 
-  <!-- declaration of the nt element -->
+																									<xs:complexType name="ntType">
 
-  <xs:complexType name="ntType">
+																										<!-- edge and secondary edges possible -->
+																										<xs:sequence>
+																											<xs:element name="edge"
+																												type="edgeType" minOccurs="0"
+																												maxOccurs="unbounded" />
+																											<xs:element name="secedge"
+																												type="secedgeType" minOccurs="0"
+																												maxOccurs="unbounded" />
+																											<xs: / sequence>
 
-    <!-- edge and secondary edges possible -->
-    <xs:sequence>
-      <xs:element name="edge" type="edgeType" minOccurs="0" maxOccurs="unbounded"/>
-      <xs:element name="secedge" type="secedgeType" minOccurs="0" maxOccurs="unbounded"/>
-    <xs:/sequence>
+																												<xs:attribute name="id"
+																													type="idType" use="required" />
+																												<xs:attributeGroup
+																													ref="ntfeatureAttributes" />
 
-    <xs:attribute name="id" type="idType" use="required"/>    
-    <xs:attributeGroup ref="ntfeatureAttributes"/>
+																												<xs: / complexType>
 
-  <xs:/complexType>
 
+																													<!-- declaration of the edge type -->
 
-  <!-- declaration of the edge type -->
+																													<xs:complexType
+																														name="edgeType">
 
-  <xs:complexType name="edgeType">
+																														<xs:attribute name="idref"
+																															type="idrefType" use="required" />
 
-    <xs:attribute name="idref" type="idrefType" use="required"/>    
+																														<xs:attributeGroup
+																															ref="edgelabelAttribute" />
 
-    <xs:attributeGroup ref="edgelabelAttribute"/>
+																														<xs: / complexType>
 
-  <xs:/complexType>
 
+																															<!-- declaration of the secondary edge type -->
 
-  <!-- declaration of the secondary edge type -->
+																															<xs:complexType
+																																name="secedgeType">
 
-  <xs:complexType name="secedgeType">
+																																<xs:attribute name="idref"
+																																	type="idrefType" use="required" />
 
-    <xs:attribute name="idref" type="idrefType" use="required"/>    
+																																<xs:attributeGroup
+																																	ref="secedgelabelAttribute" />
 
-    <xs:attributeGroup ref="secedgelabelAttribute"/>
+																																<xs: / complexType>
 
-  <xs:/complexType>
 
+																																	<!-- declaration of the matches type -->
 
-  <!-- declaration of the matches type -->
+																																	<xs:complexType
+																																		name="matchesType">
 
-  <xs:complexType name="matchesType">
+																																		<xs:sequence>
+																																			<xs:element name="match"
+																																				type="matchType" minOccurs="1"
+																																				maxOccurs="unbounded" />
+																																			<xs: / sequence>
 
-    <xs:sequence>
-      <xs:element name="match" type="matchType" minOccurs="1" maxOccurs="unbounded"/>
-    <xs:/sequence>
+																																				<xs: / complexType>
 
-  <xs:/complexType>
 
+																																					<!-- declaration of the match type -->
 
-  <!-- declaration of the match type -->
+																																					<xs:complexType
+																																						name="matchType">
 
-  <xs:complexType name="matchType">
+																																						<xs:sequence>
+																																							<xs:element
+																																								name="variable" type="varType"
+																																								minOccurs="1"
+																																								maxOccurs="unbounded" />
+																																							<xs: / sequence>
 
-    <xs:sequence>
-      <xs:element name="variable" type="varType" minOccurs="1" maxOccurs="unbounded"/>
-    <xs:/sequence>
+																																								<xs:attribute
+																																									name="subgraph"
+																																									type="idrefType" use="required" />
 
-    <xs:attribute name="subgraph" type="idrefType" use="required"/>    
+																																								<xs: / complexType>
 
-  <xs:/complexType>
 
+																																									<!-- declaration of the variable 
+																																										type -->
 
-  <!-- declaration of the variable type -->
+																																									<xs:complexType
+																																										name="varType">
 
-  <xs:complexType name="varType">
+																																										<xs:attribute
+																																											name="name" type="xsd:string"
+																																											use="required" />
 
-    <xs:attribute name="name" type="xsd:string" use="required"/>    
+																																										<xs:attribute
+																																											name="idref" type="idrefType"
+																																											use="required" />
 
-    <xs:attribute name="idref" type="idrefType" use="required"/>    
+																																										<xs: / complexType>
 
-  <xs:/complexType>
 
+																																											<!-- ====================================================== 
+																																												SENTENCE DECLARATIONS THAT SHOULD BE REFINED ====================================================== -->
 
-  <!-- ======================================================
-       SENTENCE DECLARATIONS THAT SHOULD BE REFINED
-       ====================================================== -->
+																																											<!-- declaration of the TERMINAL 
+																																												FEATURE ATTRIBUTES; this group is unrestricted, but should be refined by 
+																																												a specialised, corpus-dependent schema -->
 
-  <!-- declaration of the TERMINAL FEATURE ATTRIBUTES;
-       this group is unrestricted, but should be refined by a 
-       specialised, corpus-dependent schema -->
+																																											<xs:attributeGroup
+																																												name="tfeatureAttributes">
 
-  <xs:attributeGroup name="tfeatureAttributes">
-  
-    <xs:anyAttribute processContents="skip"/>
+																																												<xs:anyAttribute
+																																													processContents="skip" />
 
-  <xs:/attributeGroup>
+																																												<xs: / attributeGroup>
 
 
-  <!-- declaration of the NONTERMINAL FEATURE ATTRIBUTES;
-       this group is unrestricted, but should be refined by a 
-       specialised, corpus-dependent schema -->
+																																													<!-- declaration of the NONTERMINAL 
+																																														FEATURE ATTRIBUTES; this group is unrestricted, but should be refined by 
+																																														a specialised, corpus-dependent schema -->
 
-  <xs:attributeGroup name="ntfeatureAttributes">
-  
-    <xs:anyAttribute processContents="skip"/>
+																																													<xs:attributeGroup
+																																														name="ntfeatureAttributes">
 
-  <xs:/attributeGroup>
+																																														<xs:anyAttribute
+																																															processContents="skip" />
 
+																																														<xs: / attributeGroup>
 
-  <!-- declaration of the EDGE-LABEL ATTRIBUTE;
-       the label attribute is optional which should be refined by a 
-       specialised, corpus-dependent schema -->
 
-  <xs:attributeGroup name="edgelabelAttribute">
-  
-    <xs:attribute name="label" type="xsd:string" use="optional"/>    
+																																															<!-- declaration of the EDGE-LABEL 
+																																																ATTRIBUTE; the label attribute is optional which should be refined by a specialised, 
+																																																corpus-dependent schema -->
 
-  <xs:/attributeGroup>
-    
+																																															<xs:attributeGroup
+																																																name="edgelabelAttribute">
 
-  <!-- declaration of the SECONDARY-EDGE-LABEL ATTRIBUTE;
-       the label attribute is optional which should be refined by a 
-       specialised, corpus-dependent schema -->
+																																																<xs:attribute
+																																																	name="label"
+																																																	type="xsd:string"
+																																																	use="optional" />
 
-  <xs:attributeGroup name="secedgelabelAttribute">
-  
-    <xs:attribute name="label" type="xsd:string" use="optional"/>    
+																																																<xs: /
+																																																	attributeGroup>
 
-  <xs:/attributeGroup>
- 
 
-  <!-- ======================================================
-       ID and IDREF TYPE DECLARATIONS
-       ====================================================== -->
+																																																	<!-- declaration of the 
+																																																		SECONDARY-EDGE-LABEL ATTRIBUTE; the label attribute is optional which should 
+																																																		be refined by a specialised, corpus-dependent schema -->
 
-  <!-- Even though XML Schema are a W3C Recommendation, schema
-       support of XML parsers is still restricted. Using some
-       parsers you might have problems with the ID and IDREF
-       attributes in combination with an "anyAttribute"
-       declaration. In this case, just modify the base type 
-       of the following two declarations to "xsd:string".  -->
+																																																	<xs:attributeGroup
+																																																		name="secedgelabelAttribute">
 
+																																																		<xs:attribute
+																																																			name="label"
+																																																			type="xsd:string"
+																																																			use="optional" />
 
-  <!-- declaration of idType -->
+																																																		<xs: /
+																																																			attributeGroup>
 
-  <xs:simpleType name="idType">
 
-    <xs:restriction base="xsd:ID"/>
+																																																			<!-- ====================================================== 
+																																																				ID and IDREF TYPE DECLARATIONS ====================================================== -->
 
-  <xs:/simpleType>
+																																																			<!-- Even though XML Schema 
+																																																				are a W3C Recommendation, schema support of XML parsers is still restricted. 
+																																																				Using some parsers you might have problems with the ID and IDREF attributes 
+																																																				in combination with an "anyAttribute" declaration. In this case, just modify 
+																																																				the base type of the following two declarations to "xsd:string". -->
 
 
-  <!-- declaration of idrefType -->
+																																																			<!-- declaration of idType -->
 
-  <xs:simpleType name="idrefType">
+																																																			<xs:simpleType
+																																																				name="idType">
 
-    <xs:restriction base="xsd:IDREF"/>
+																																																				<xs:restriction
+																																																					base="xsd:ID" />
 
-  <xs:/simpleType>
+																																																				<xs: /
+																																																					simpleType>
 
 
-<xs:/schema>
\ No newline at end of file
+																																																					<!-- declaration of 
+																																																						idrefType -->
+
+																																																					<xs:simpleType
+																																																						name="idrefType">
+
+																																																						<xs:restriction
+																																																							base="xsd:IDREF" />
+
+																																																						<xs: /
+																																																							simpleType>
+
+
+																																																							<xs: / schema>
\ No newline at end of file
Index: tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/package.html
===================================================================
--- tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/package.html	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/package.html	(revision 2402)
@@ -1,5 +1,6 @@
 <html>
 <body>
-<p>TIGERSearch import module. This is a prototype that can only manage SRCMF TIGERSearch sources</p>
+	<p>TIGERSearch import module. This is a prototype that can only
+		manage SRCMF TIGERSearch sources</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXMLHeader.xsd
===================================================================
--- tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXMLHeader.xsd	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/groovy/org/txm/scripts/importer/tigersearch/TigerXMLHeader.xsd	(revision 2402)
@@ -1,142 +1,157 @@
 <?xml version="1.0" encoding="UTF-8"?>
-  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
 
- <!-- =======================================================================
-      XML SubSchema for the header part of the TIGER-XML format
-      http://www.ims.uni-stuttgart.de/projekte/TIGER/publicTigerXMLHeader.xsd
-      =======================================================================
-      TIGER Project, Wolfgang Lezius 
-      IMS, University of Stuttgart, 04/01/2003
-      ======================================================================= -->
+	<!-- ======================================================================= 
+		XML SubSchema for the header part of the TIGER-XML format http://www.ims.uni-stuttgart.de/projekte/TIGER/publicTigerXMLHeader.xsd 
+		======================================================================= TIGER 
+		Project, Wolfgang Lezius IMS, University of Stuttgart, 04/01/2003 ======================================================================= -->
 
 
-  <!-- ======================================================
-       DECLARATION OF THE HEADER
-       ====================================================== -->
+	<!-- ====================================================== DECLARATION 
+		OF THE HEADER ====================================================== -->
 
 
-  <!-- declaration of the head element -->
+	<!-- declaration of the head element -->
 
-  <xs:element name="head" type="headType"/>
+	<xs:element name="head" type="headType" />
 
 
-  <!-- declaration of the header type -->
+	<!-- declaration of the header type -->
 
-  <xs:complexType name="headType">
+	<xs:complexType name="headType">
 
-     <xs:sequence>
-        <xs:element name="meta" type="metaType" minOccurs="0" maxOccurs="1"/>
-        <xs:element name="annotation" type="annotationType" minOccurs="0" maxOccurs="1"/>
-     <xs:/sequence>    
+		<xs:sequence>
+			<xs:element name="meta" type="metaType" minOccurs="0"
+				maxOccurs="1" />
+			<xs:element name="annotation" type="annotationType"
+				minOccurs="0" maxOccurs="1" />
+			<xs: / sequence>
 
-     <!-- optional: reference to external header file 
+				<!-- optional: reference to external header file The header of a TigerXML 
+					corpus can also be stored in separate file. This attribute points to the 
+					external header file. The pointer is an URI. Examples: file:relative.xml 
+					or file:/path/to/absolute.xml Note: If there is a pointer to an external 
+					file, the head element must be empty. -->
 
-          The header of a TigerXML corpus can also be stored in separate file. 
-          This attribute points to the external header file. The pointer is
-          an URI. Examples: file:relative.xml or file:/path/to/absolute.xml
+				<xs:attribute name="external" type="xsd:anyURI" />
 
-          Note: If there is a pointer to an external file, the head
-                element must be empty. -->
+				<xs: / complexType>
 
-     <xs:attribute name="external" type="xsd:anyURI"/>  
 
-  <xs:/complexType>
+					<!-- declaration of the meta information type -->
 
+					<xs:complexType name="metaType">
 
-  <!-- declaration of the meta information type -->
+						<xs:sequence>
+							<xs:element name="name" type="xsd:string"
+								minOccurs="0" maxOccurs="1" />
+							<xs:element name="author" type="xsd:string"
+								minOccurs="0" maxOccurs="1" />
+							<xs:element name="date" type="xsd:string"
+								minOccurs="0" maxOccurs="1" />
+							<xs:element name="description" type="xsd:string"
+								minOccurs="0" maxOccurs="1" />
+							<xs:element name="format" type="xsd:string"
+								minOccurs="0" maxOccurs="1" />
+							<xs:element name="history" type="xsd:string"
+								minOccurs="0" maxOccurs="1" />
+							<xs: / sequence>
 
-  <xs:complexType name="metaType">
+								<xs: / complexType>
 
-    <xs:sequence>
-      <xs:element name="name" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-      <xs:element name="author" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-      <xs:element name="date" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-      <xs:element name="description" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-      <xs:element name="format" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-      <xs:element name="history" type="xsd:string" minOccurs="0" maxOccurs="1"/>
-    <xs:/sequence>    
 
-  <xs:/complexType>
-  
+									<!-- declaration of the annotation type -->
 
-  <!-- declaration of the annotation type -->
+									<xs:complexType name="annotationType">
 
-  <xs:complexType name="annotationType">
+										<xs:sequence>
+											<xs:element name="feature" type="featureType"
+												minOccurs="1" maxOccurs="unbounded" />
+											<xs:element name="edgelabel" type="edgelabelType"
+												minOccurs="0" maxOccurs="1" />
+											<xs:element name="secedgelabel"
+												type="edgelabelType" minOccurs="0" maxOccurs="1" />
+											<xs: / sequence>
 
-    <xs:sequence>
-      <xs:element name="feature" type="featureType" minOccurs="1" maxOccurs="unbounded"/>
-      <xs:element name="edgelabel" type="edgelabelType" minOccurs="0" maxOccurs="1"/>
-      <xs:element name="secedgelabel" type="edgelabelType" minOccurs="0" maxOccurs="1"/>
-    <xs:/sequence>
+												<xs: / complexType>
 
-  <xs:/complexType>
 
+													<!-- declaration of the feature type -->
 
-  <!-- declaration of the feature type -->
+													<xs:complexType name="featureType">
 
-  <xs:complexType name="featureType">
+														<xs:sequence>
+															<xs:element name="value"
+																type="featurevalueType" minOccurs="0"
+																maxOccurs="unbounded" />
+															<xs: / sequence>
 
-    <xs:sequence>
-       <xs:element name="value" type="featurevalueType" minOccurs="0" maxOccurs="unbounded"/>
-    <xs:/sequence>
-    
-    <xs:attribute name="name" type="featurenameType" use="required"/>
+																<xs:attribute name="name"
+																	type="featurenameType" use="required" />
 
-    <xs:attribute name="domain" use="required">
-       <xs:simpleType>
-         <xs:restriction base="xsd:string">
-           <xs:enumeration value="T"/>     <!-- feature for terminal nodes -->
-           <xs:enumeration value="NT"/>    <!-- feature for nonterminal nodes -->
-           <xs:enumeration value="FREC"/>  <!-- feature for both -->
-         <xs:/restriction>
-       <xs:/simpleType>
-    <xs:/attribute>
+																<xs:attribute name="domain" use="required">
+																	<xs:simpleType>
+																		<xs:restriction base="xsd:string">
+																			<xs:enumeration value="T" />     <!-- feature for terminal nodes -->
+																			<xs:enumeration value="NT" />    <!-- feature for nonterminal nodes -->
+																			<xs:enumeration value="FREC" />  <!-- feature for both -->
+																			<xs: / restriction>
+																				<xs: / simpleType>
+																					<xs: / attribute>
 
-  <xs:/complexType>
+																						<xs: / complexType>
 
 
-  <!-- declaration of the (secondary) edge label type -->
+																							<!-- declaration of the (secondary) edge label type -->
 
-  <xs:complexType name="edgelabelType">
+																							<xs:complexType
+																								name="edgelabelType">
 
-    <xs:sequence>
-       <xs:element name="value" type="featurevalueType" minOccurs="0" maxOccurs="unbounded"/>
-    <xs:/sequence>
-    
-  <xs:/complexType>
+																								<xs:sequence>
+																									<xs:element name="value"
+																										type="featurevalueType" minOccurs="0"
+																										maxOccurs="unbounded" />
+																									<xs: / sequence>
 
+																										<xs: / complexType>
 
-  <!-- declaration of the feature value type -->
 
-  <xs:complexType name="featurevalueType">
+																											<!-- declaration of the feature value type -->
 
-    <xs:simpleContent>   <!-- element content: documentation of the feature value -->
-      <xs:extension base="xsd:string">
-        <xs:attribute name="name" type="xsd:string"/>
-      <xs:/extension>
-    <xs:/simpleContent>
+																											<xs:complexType
+																												name="featurevalueType">
 
+																												<xs:simpleContent>   <!-- element content: documentation of the feature value -->
+																													<xs:extension
+																														base="xsd:string">
+																														<xs:attribute name="name"
+																															type="xsd:string" />
+																														<xs: / extension>
+																															<xs: / simpleContent>
 
-  <xs:/complexType>
 
+																																<xs: / complexType>
 
-  <!-- ======================================================
-       HEADER DECLARATIONS THAT SHOULD BE REFINED
-       ====================================================== -->
 
-  <!-- declaration of the FEATURE NAMES used in the corpus header;
-       this type is unrestricted, but should be refined by a 
-       specialised, corpus-dependent schema -->
+																																	<!-- ====================================================== 
+																																		HEADER DECLARATIONS THAT SHOULD BE REFINED ====================================================== -->
 
-  <xs:simpleType name="featurenameType">
+																																	<!-- declaration of the FEATURE NAMES used 
+																																		in the corpus header; this type is unrestricted, but should be refined by 
+																																		a specialised, corpus-dependent schema -->
 
-    <xs:restriction base="xsd:string">
-      <xs:minLength value="1"/>
-      <xs:maxLength value="20"/>
-      <xs:whiteSpace value="preserve"/>
-    <xs:/restriction>
+																																	<xs:simpleType
+																																		name="featurenameType">
 
-  <xs:/simpleType>
+																																		<xs:restriction
+																																			base="xsd:string">
+																																			<xs:minLength value="1" />
+																																			<xs:maxLength value="20" />
+																																			<xs:whiteSpace
+																																				value="preserve" />
+																																			<xs: / restriction>
 
+																																				<xs: / simpleType>
 
-<xs:/schema>
\ No newline at end of file
+
+																																					<xs: / schema>
\ No newline at end of file
Index: tmp/org.txm.tigersearch.rcp/src/org/txm/export/ts/package.html
===================================================================
--- tmp/org.txm.tigersearch.rcp/src/org/txm/export/ts/package.html	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/src/org/txm/export/ts/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>Contains scripts to build the TIGERSearch concordances</p>
+	<p>Contains scripts to build the TIGERSearch concordances</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.tigersearch.rcp/src/org/txm/searchengine/ts/package.html
===================================================================
--- tmp/org.txm.tigersearch.rcp/src/org/txm/searchengine/ts/package.html	(revision 2401)
+++ tmp/org.txm.tigersearch.rcp/src/org/txm/searchengine/ts/package.html	(revision 2402)
@@ -1,5 +1,6 @@
 <html>
 <body>
-<p>Implementation of syntax querying using the TIGERSearch engine.
+	<p>Implementation of syntax querying using the TIGERSearch engine.
+	
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.wordcloud.core/.classpath
===================================================================
--- tmp/org.txm.wordcloud.core/.classpath	(revision 2401)
+++ tmp/org.txm.wordcloud.core/.classpath	(revision 2402)
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/chartsengine/r/RWordCloudChartCreator.java
===================================================================
--- tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/chartsengine/r/RWordCloudChartCreator.java	(revision 2401)
+++ tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/chartsengine/r/RWordCloudChartCreator.java	(revision 2402)
@@ -11,8 +11,8 @@
 import org.txm.wordcloud.core.functions.WordCloud;
 
 public class RWordCloudChartCreator extends RChartCreator {
-
-
+	
+	
 	@Override
 	public File createChartFile(ChartResult result, File file) {
 		
@@ -28,69 +28,70 @@
 			
 			
 			RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-//	System.out.println("load wordcloud...");
+			// System.out.println("load wordcloud...");
 			rw.eval("library(wordcloud)"); //$NON-NLS-1$
-			//System.out.println("tmpfreqs...");
+			// System.out.println("tmpfreqs...");
 			rw.addVectorToWorkspace("tmpfreqs", wordCloud.getFreqs()); //$NON-NLS-1$
-			//System.out.println("tmplabels...");
+			// System.out.println("tmplabels...");
 			rw.addVectorToWorkspace("tmplabels", wordCloud.getLabels()); //$NON-NLS-1$
 			
-			//wordcloud(words,freq,
+			// wordcloud(words,freq,
 			// scale : A vector of length 2 indicating the range of the size of the words.
-			// min.freq:  words with frequency below min.freq will not be plotted
+			// min.freq: words with frequency below min.freq will not be plotted
 			// max.words : Maximum number of words to be plotted. least frequent terms dropped
 			// random.order : plot words in random order. If false, they will be plotted in decreasing frequency
 			// random.color : choose colors randomly from the colors. If false, the color is chosen based on the frequency
 			// rot.per : proportion words with 90 degree rotation
 			// colors : color words from least to most frequent
 			// ordered.colors : if true, then colors are assigned to words in order
-			//System.out.println("wordcloud...");
+			// System.out.println("wordcloud...");
 			String cmd = "wordcloud(tmplabels, tmpfreqs, random.color=FALSE, colors=brewer.pal(10,\"Dark2\")"; //$NON-NLS-1$
 			
 			if (randomOrder == false)
 				cmd += ", random.order=FALSE"; //$NON-NLS-1$
 			
 			if (maxWords > 0) {
-				cmd += ", max.words="+maxWords; //$NON-NLS-1$
-			} else {
+				cmd += ", max.words=" + maxWords; //$NON-NLS-1$
+			}
+			else {
 				cmd += ", max.words=Inf"; //$NON-NLS-1$
 			}
 			
 			if (minFreq > 0) {
-				cmd += ", min.freq="+minFreq; //$NON-NLS-1$
+				cmd += ", min.freq=" + minFreq; //$NON-NLS-1$
 			}
 			
 			if (rotPer >= 0 && rotPer <= 1) {
-				cmd += ", rot.per="+rotPer; //$NON-NLS-1$
+				cmd += ", rot.per=" + rotPer; //$NON-NLS-1$
 			}
-			cmd +=");"; //$NON-NLS-1$
-//System.out.println("ploting...");
-			//rw.plot(svgFile, cmd, device);
-
+			cmd += ");"; //$NON-NLS-1$
+			// System.out.println("ploting...");
+			// rw.plot(svgFile, cmd, device);
+			
 			((RChartsEngine) this.chartsEngine).plot(file, cmd);
-				
-				
-				//System.out.println("cleaning");
-				rw.eval("rm(tmplabels)"); //$NON-NLS-1$
-				rw.eval("rm(tmpfreqs)"); //$NON-NLS-1$
+			
+			
+			// System.out.println("cleaning");
+			rw.eval("rm(tmplabels)"); //$NON-NLS-1$
+			rw.eval("rm(tmpfreqs)"); //$NON-NLS-1$
 		}
-		catch(RWorkspaceException e) {
+		catch (RWorkspaceException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
-		catch(StatException e) {
+		catch (StatException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 		
 		return file;
 	}
-
+	
 	@Override
 	public Class getResultDataClass() {
 		return WordCloud.class;
 	}
-
-
-
+	
+	
+	
 }
Index: tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/chartsengine/jfreechart/JFCWordCloudChartCreator.java
===================================================================
--- tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/chartsengine/jfreechart/JFCWordCloudChartCreator.java	(revision 2401)
+++ tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/chartsengine/jfreechart/JFCWordCloudChartCreator.java	(revision 2402)
@@ -7,14 +7,14 @@
 import org.txm.wordcloud.core.functions.WordCloud;
 
 public class JFCWordCloudChartCreator extends JFCChartCreator {
-
+	
 	public JFCWordCloudChartCreator() {
 		// TODO Auto-generated constructor stub
 	}
-
+	
 	@Override
 	public JFreeChart createChart(ChartResult result) {
-
+		
 		// TODO Auto-generated method stub
 		System.err.println("JFCWordCloudChartCreator.createChart(): Not yet implemented");
 		
@@ -23,54 +23,55 @@
 		
 		
 		JFreeChart chart = null;
-
+		
 		XYSeriesCollection dataset = new XYSeriesCollection();
-
-//		XYSeries series = new XYSeries("test wordcloud");
-//		dataset.addSeries(series);
-
-        String[] xAxisSymbols = new String[0];
-
-
-//		for (int i = 0 ; i < 0 ; i++) {
-//			//series.add(i, Math.random());
-//
-//			// Add X axis symbol
-//			xAxisSymbols[i] = "test " + i;
-//		}
-
+		
+		// XYSeries series = new XYSeries("test wordcloud");
+		// dataset.addSeries(series);
+		
+		String[] xAxisSymbols = new String[0];
+		
+		
+		// for (int i = 0 ; i < 0 ; i++) {
+		// //series.add(i, Math.random());
+		//
+		// // Add X axis symbol
+		// xAxisSymbols[i] = "test " + i;
+		// }
+		
 		// Create chart title
 		String title = "";
-
+		
 		// Create the chart
-        chart = this.getChartsEngine().createXYBarChart(dataset, title, "", "", false, true, false, xAxisSymbols);
-        //((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_PARTITION_DIMENSIONS);
-
-        chart.getPlot().setNoDataMessage("JFCWordCloudChartCreator.createChart(): Not yet implemented in JFreeChart charts engine.");
-        
-
-        // Custom range axis for ticks drawing options
-        //chart.getXYPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getXYPlot().getRangeAxis(), false, true, 0, DatasetUtilities.findMaximumRangeValue(chart.getXYPlot().getDataset()).doubleValue()));
-
-        //this.getChartsEngine().getTheme().apply(chart);
-
-
+		chart = this.getChartsEngine().createXYBarChart(dataset, title, "", "", false, true, false, xAxisSymbols);
+		// ((IItemSelectionRenderer) chart.getXYPlot().getRenderer()).setChartType(ChartsEngine.CHART_TYPE_PARTITION_DIMENSIONS);
+		
+		chart.getPlot().setNoDataMessage("JFCWordCloudChartCreator.createChart(): Not yet implemented in JFreeChart charts engine.");
+		
+		
+		// Custom range axis for ticks drawing options
+		// chart.getXYPlot().setRangeAxis(new ExtendedNumberAxis((NumberAxis) chart.getXYPlot().getRangeAxis(), false, true, 0,
+		// DatasetUtilities.findMaximumRangeValue(chart.getXYPlot().getDataset()).doubleValue()));
+		
+		// this.getChartsEngine().getTheme().apply(chart);
+		
+		
 		return chart;
 		
 	}
-
+	
 	@Override
-	// FIXME: to not load the chart creator, to remove when implemented 
+	// FIXME: to not load the chart creator, to remove when implemented
 	public Class getChartsEngineClass() {
 		return null;
 	}
-
-
+	
+	
 	@Override
 	public Class getResultDataClass() {
 		return WordCloud.class;
 	}
 	
 	
-
+	
 }
Index: tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/preferences/WordCloudPreferences.java
===================================================================
--- tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/preferences/WordCloudPreferences.java	(revision 2401)
+++ tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/preferences/WordCloudPreferences.java	(revision 2402)
@@ -7,15 +7,17 @@
 
 /**
  * Preferences initializer and manager.
+ * 
  * @author mdecorde
  * @author sjacquot
  *
  */
 public class WordCloudPreferences extends ChartsEnginePreferences {
-
+	
 	public static final String ROTATION_PERCENT = "rotation_percent"; //$NON-NLS-1$
+	
 	public static final String RANDOM_POSITIONS = "random_positions"; //$NON-NLS-1$
-
+	
 	@Override
 	public void initializeDefaultPreferences() {
 		super.initializeDefaultPreferences();
@@ -34,9 +36,10 @@
 	
 	/**
 	 * Gets the instance.
+	 * 
 	 * @return the instance
 	 */
-	public static TXMPreferences getInstance()	{
+	public static TXMPreferences getInstance() {
 		if (!TXMPreferences.instances.containsKey(WordCloudPreferences.class)) {
 			new WordCloudPreferences();
 		}
Index: tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/messages/WordCloudCoreMessages.java
===================================================================
--- tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/messages/WordCloudCoreMessages.java	(revision 2401)
+++ tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/messages/WordCloudCoreMessages.java	(revision 2402)
@@ -17,19 +17,24 @@
 	public static String RESULT_TYPE;
 	
 	public static String info_aborting;
+	
 	public static String error_couldNotInstallRPackage;
+	
 	public static String info_installingRPackage;
+	
 	public static String info_loadingRPackage;
+	
 	public static String error_rPackagesInstallationFailed;
+	
 	public static String info_rPackagesLoaded;
+	
 	public static String info_openingWordCloudResult;
-
 	
+	
 	static {
 		// initialize resource bundle
 		Utf8NLS.initializeMessages(BUNDLE_NAME, WordCloudCoreMessages.class);
 	}
-
-	private WordCloudCoreMessages() {
-	}
+	
+	private WordCloudCoreMessages() {}
 }
Index: tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/functions/WordCloud.java
===================================================================
--- tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/functions/WordCloud.java	(revision 2401)
+++ tmp/org.txm.wordcloud.core/src/org/txm/wordcloud/core/functions/WordCloud.java	(revision 2402)
@@ -25,52 +25,55 @@
 	
 	
 	private int[] freqs;
+	
 	private String[] labels;
 	
 	
 	/**
 	 * Minimum frequency.
 	 */
-	@Parameter(key=TXMPreferences.F_MIN)
+	@Parameter(key = TXMPreferences.F_MIN)
 	protected int fMin;
 	
 	/**
 	 * 
 	 */
-	@Parameter(key=TXMPreferences.V_MAX)
+	@Parameter(key = TXMPreferences.V_MAX)
 	protected int maxWordsCount;
-
+	
 	/**
 	 * 
 	 */
-	@Parameter(key=WordCloudPreferences.ROTATION_PERCENT)
+	@Parameter(key = WordCloudPreferences.ROTATION_PERCENT)
 	protected float rotationPercent;
 	
 	/**
 	 * 
 	 */
-	@Parameter(key=WordCloudPreferences.RANDOM_POSITIONS)
+	@Parameter(key = WordCloudPreferences.RANDOM_POSITIONS)
 	protected boolean randomPositions;
-
 	
 	
+	
 	/**
 	 * Creates a not computed words cloud.
+	 * 
 	 * @param index
 	 */
-	public WordCloud(Index parent)	{
+	public WordCloud(Index parent) {
 		super(parent);
 	}
-
+	
 	/**
 	 * Creates a not computed words cloud
+	 * 
 	 * @param parametersNodePath
 	 */
-	public WordCloud(String parametersNodePath)	{
+	public WordCloud(String parametersNodePath) {
 		super(parametersNodePath);
 	}
 	
-		
+	
 	/**
 	 * 
 	 * @param index
@@ -87,80 +90,81 @@
 			i++;
 		}
 	}
-
 	
+	
 	@Override
 	protected boolean __compute() {
-//		// FIXME: source must always be an Index because the corpus source produces an Index
-//		// from corpus
-//		if (source instanceof Corpus)	{ 
-//			try {
-//				Corpus corpus = (Corpus) source;
-//				Query query;
-//				String lang = corpus.getLang();
-//				if (corpus.getProperty(lang + "pos") != null) {
-//					query = new Query(getQueryForLang(lang));
-//				}
-//				else {
-//					query = new Query("[]");
-//				}
-//				
-//				System.out.println("Used query: " + query);
-//				
-//				ArrayList<Property> props = new ArrayList<Property>();
-//				props.add(corpus.getWordProperty());
-//				Index index = new Index(corpus);
-//				index.setParameters(query, props, null, null, null, null);
-//				if (!query.toString().equals("[]")) {
-//					corpus.addChild(index);
-//				}
-//
-//				index.compute(false, monitor);
-//				
-//				index.addChild(this);
-//					
-//				List<Line> lines = index.getAllLines();
-//				if (lines != null && lines.size() > 0) {
-//					this.initWith(index);
-//				}
-//				else {
-//					Log.severe("Error: Could not build a word selection with this corpus");
-//					throw new IllegalArgumentException("Error: Index failed with corpus " + corpus + " with lang " + lang + " and query " + query);
-//				}
-//			}
-//			catch(Exception e) {
-//				System.out.println("Error: "+e.getLocalizedMessage());
-//				Log.printStackTrace(e);
-//				return false;
-//			}
-			this.initWith((Index)parent);
-//		}
-//		// from index
-//		else if(this.source instanceof Index)	{
-//			this.initWith((Index) this.source);
-//			return true;
-//		}
-//		
+		// // FIXME: source must always be an Index because the corpus source produces an Index
+		// // from corpus
+		// if (source instanceof Corpus) {
+		// try {
+		// Corpus corpus = (Corpus) source;
+		// Query query;
+		// String lang = corpus.getLang();
+		// if (corpus.getProperty(lang + "pos") != null) {
+		// query = new Query(getQueryForLang(lang));
+		// }
+		// else {
+		// query = new Query("[]");
+		// }
+		//
+		// System.out.println("Used query: " + query);
+		//
+		// ArrayList<Property> props = new ArrayList<Property>();
+		// props.add(corpus.getWordProperty());
+		// Index index = new Index(corpus);
+		// index.setParameters(query, props, null, null, null, null);
+		// if (!query.toString().equals("[]")) {
+		// corpus.addChild(index);
+		// }
+		//
+		// index.compute(false, monitor);
+		//
+		// index.addChild(this);
+		//
+		// List<Line> lines = index.getAllLines();
+		// if (lines != null && lines.size() > 0) {
+		// this.initWith(index);
+		// }
+		// else {
+		// Log.severe("Error: Could not build a word selection with this corpus");
+		// throw new IllegalArgumentException("Error: Index failed with corpus " + corpus + " with lang " + lang + " and query " + query);
+		// }
+		// }
+		// catch(Exception e) {
+		// System.out.println("Error: "+e.getLocalizedMessage());
+		// Log.printStackTrace(e);
+		// return false;
+		// }
+		this.initWith((Index) parent);
+		// }
+		// // from index
+		// else if(this.source instanceof Index) {
+		// this.initWith((Index) this.source);
+		// return true;
+		// }
+		//
 		return true;
 	}
 	
 	// FIXME: to remove?
 	private void removeDiacritics() {
-		//for (int i = 0; i < labels.length ; i++)
-		//	labels[i] = AsciiUtils.convertNonAscii(labels[i]);
+		// for (int i = 0; i < labels.length ; i++)
+		// labels[i] = AsciiUtils.convertNonAscii(labels[i]);
 	}
-
+	
 	/**
 	 * Check and init R packages.
+	 * 
 	 * @return true if all packages are installed and initialized
 	 */
-	// FIXME: to factorize and move to RWorkspace 
-	public static boolean initPackages()	{
-		String[] packages = {"Rcpp", "RColorBrewer", "wordcloud"}; //$NON-NLS-1$ //$NON-NLS-2$  //$NON-NLS-3$
-			if (!loadAndInstallNeededPackages(packages)) {
-				System.out.println(WordCloudCoreMessages.info_aborting);
-				return false;
-			}
+	// FIXME: to factorize and move to RWorkspace
+	public static boolean initPackages() {
+		String[] packages = { "Rcpp", "RColorBrewer", "wordcloud" }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		if (!loadAndInstallNeededPackages(packages)) {
+			System.out.println(WordCloudCoreMessages.info_aborting);
+			return false;
+		}
 		return true;
 	}
 	
@@ -177,24 +181,27 @@
 			try {
 				Log.severe(WordCloudCoreMessages.bind(WordCloudCoreMessages.info_loadingRPackage, p));
 				RWorkspace.getRWorkspaceInstance().loadPackage(p);
-			} catch(Exception e) {
-				//Log.severe(Messages.bind(Messages.ComputeWordCloud_3,p,e));
+			}
+			catch (Exception e) {
+				// Log.severe(Messages.bind(Messages.ComputeWordCloud_3,p,e));
 				System.out.println(WordCloudCoreMessages.bind(WordCloudCoreMessages.info_installingRPackage, p));
 				try {
-					RWorkspace.getRWorkspaceInstance().eval("install.packages(\""+p+"\", dependencies=TRUE, repos=\"http://cran.rstudio.com\");"); //$NON-NLS-1$ //$NON-NLS-2$
+					RWorkspace.getRWorkspaceInstance().eval("install.packages(\"" + p + "\", dependencies=TRUE, repos=\"http://cran.rstudio.com\");"); //$NON-NLS-1$ //$NON-NLS-2$
 					RWorkspace.getRWorkspaceInstance().loadPackage(p);
-				} catch(Exception e2) {
+				}
+				catch (Exception e2) {
 					Log.warning(WordCloudCoreMessages.bind(WordCloudCoreMessages.error_couldNotInstallRPackage, p));
 					Log.printStackTrace(e2);
 					installFailed = true;
 				}
 			}
 		}
-
+		
 		if (installFailed) {
 			Log.severe(WordCloudCoreMessages.error_rPackagesInstallationFailed);
 			return false;
-		} else {
+		}
+		else {
 			Log.fine(WordCloudCoreMessages.info_rPackagesLoaded);
 			return true;
 		}
@@ -206,32 +213,32 @@
 	 * @param p
 	 * @throws RWorkspaceException
 	 */
-
+	
 	/**
 	 * @return the freqs
 	 */
 	public int[] getFreqs() {
 		return freqs;
 	}
-
+	
 	/**
 	 * @return the labels
 	 */
 	public String[] getLabels() {
 		return labels;
 	}
-
+	
 	@Override
 	public boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
 		// TODO Auto-generated method stub
 		return false;
 	}
-
+	
 	@Override
 	public void clean() {
 		// TODO Auto-generated method stub
 	}
-
+	
 	@Override
 	public String getName() {
 		return this.getSimpleName();
@@ -239,20 +246,20 @@
 	
 	@Override
 	public String getSimpleName() {
-		return "Fmin=" + this.fMin + " Vmax=" + this.maxWordsCount; //$NON-NLS-1$  //$NON-NLS-2$  //$NON-NLS-3$
+		return "Fmin=" + this.fMin + " Vmax=" + this.maxWordsCount; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
-
+	
 	@Override
 	public String getDetails() {
 		return this.getSimpleName();
 	}
-
 	
+	
 	@Override
 	public boolean canCompute() {
 		return this.parent != null;
 	}
-
+	
 	@Override
 	public boolean setParameters(TXMParameters parameters) {
 		
@@ -260,24 +267,26 @@
 			Object value = parameters.get(TXMPreferences.F_MIN);
 			if (value instanceof String) {
 				this.fMin = Integer.parseInt(value.toString());
-			} else if (value instanceof Integer) {
-				this.fMin = (Integer)value;
 			}
+			else if (value instanceof Integer) {
+				this.fMin = (Integer) value;
+			}
 		}
 		
 		if (parameters.containsKey(TXMPreferences.V_MAX)) {
 			Object value = parameters.get(TXMPreferences.V_MAX);
 			if (value instanceof String) {
 				this.maxWordsCount = Integer.parseInt(value.toString());
-			} else if (value instanceof Integer) {
-				this.maxWordsCount = (Integer)value;
 			}
+			else if (value instanceof Integer) {
+				this.maxWordsCount = (Integer) value;
+			}
 		}
 		
 		return true;
 	}
-
 	
+	
 	/**
 	 * 
 	 * @param lang
@@ -295,20 +304,20 @@
 		}
 	}
 	
-
-
+	
+	
 	@Override
 	public boolean loadParameters() throws Exception {
 		// nothing to do
 		return true;
 	}
-
+	
 	@Override
 	public boolean saveParameters() throws Exception {
 		// nothing to do
 		return true;
 	}
-
+	
 	/**
 	 * 
 	 * @return
@@ -316,56 +325,56 @@
 	public int getFMin() {
 		return fMin;
 	}
-
+	
 	/**
 	 * @return the maxWordsCount
 	 */
 	public int getMaxWordsCount() {
 		return maxWordsCount;
 	}
-
+	
 	/**
 	 * @param maxWordsCount the maxWordsCount to set
 	 */
 	public void setMaxWordsCount(int maxWordsCount) {
 		this.maxWordsCount = maxWordsCount;
 	}
-
+	
 	/**
 	 * @return the rotationPercent
 	 */
 	public float getRotationPercent() {
 		return rotationPercent;
 	}
-
+	
 	/**
 	 * @param rotationPercent the rotationPercent to set
 	 */
 	public void setRotationPercent(float rotationPercent) {
 		this.rotationPercent = rotationPercent;
 	}
-
+	
 	/**
 	 * @return the randomPositions
 	 */
 	public boolean isRandomPositions() {
 		return randomPositions;
 	}
-
+	
 	/**
 	 * @param randomPositions the randomPositions to set
 	 */
 	public void setRandomPositions(boolean randomPositions) {
 		this.randomPositions = randomPositions;
 	}
-
+	
 	/**
 	 * @param fMin the fMin to set
 	 */
 	public void setFMin(int fMin) {
 		this.fMin = fMin;
 	}
-
+	
 	@Override
 	public String getResultType() {
 		return WordCloudCoreMessages.RESULT_TYPE;
Index: tmp/org.txm.utils/src/org/txm/utils/Watcher.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Watcher.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/Watcher.java	(revision 2402)
@@ -33,45 +33,47 @@
  *
  * @author mdecorde
  * 
- * Watch for an external tool (such as CWB or R) to be OK and try to restart it
+ *         Watch for an external tool (such as CWB or R) to be OK and try to
+ *         restart it
  */
-public abstract class Watcher implements Runnable{
+public abstract class Watcher implements Runnable {
 
 	/** The process. */
 	boolean process = true;
-	
+
 	/** The processname. */
-	protected String processname="noname"; //$NON-NLS-1$
-	
+	protected String processname = "noname"; //$NON-NLS-1$
+
 	/** The restartcount. */
 	int restartcount = 0;
-	
+
 	/** The MAXRESTARTCOUNT. */
 	static int MAXRESTARTCOUNT = 10;
-	
+
 	/** The DELAY. */
 	static int DELAY = 10000;
-	
+
 	/** The DEBUG. */
 	static boolean DEBUG = true;
-	
-	
+
 	/**
 	 * Sets the debug.
 	 *
-	 * @param state the new debug
+	 * @param state
+	 *            the new debug
 	 */
-	public static void setDebug(boolean state)
-	{
+	public static void setDebug(boolean state) {
 		DEBUG = state;
 	}
-	
-	/* (non-Javadoc)
+
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Runnable#run()
 	 */
 	@Override
 	public void run() {
-		
+
 		while (process) {
 			try {
 				Thread.sleep(DELAY);
@@ -80,33 +82,34 @@
 				org.txm.utils.logger.Log.printStackTrace(e);
 				return;
 			}
-			if (DEBUG) {System.out.println("check "+processname);} //$NON-NLS-1$
-			if (!check())
-			{
-				if (DEBUG){System.out.println("restart "+processname);} //$NON-NLS-1$
-				if (!restart())
-				{
-					System.out.println("Failed to restart : "+processname); //$NON-NLS-1$
+			if (DEBUG) {
+				System.out.println("check " + processname); //$NON-NLS-1$
+			}
+			if (!check()) {
+				if (DEBUG) {
+					System.out.println("restart " + processname); //$NON-NLS-1$
+				}
+				if (!restart()) {
+					System.out.println("Failed to restart : " + processname); //$NON-NLS-1$
 					return;
 				}
-				
+
 				restartcount++;
-				if (restartcount >= MAXRESTARTCOUNT)
-				{
-					System.out.println(processname+" have been restarted "+MAXRESTARTCOUNT+" times, You should restart TXM."); //$NON-NLS-1$ //$NON-NLS-2$
+				if (restartcount >= MAXRESTARTCOUNT) {
+					System.out.println(processname + " have been restarted " + MAXRESTARTCOUNT + " times, You should restart TXM."); //$NON-NLS-1$ //$NON-NLS-2$
 					return;
 				}
 			}
 		}
 	}
-	
+
 	/**
 	 * Check.
 	 *
 	 * @return true, if successful
 	 */
 	abstract protected boolean check();
-	
+
 	/**
 	 * Restart.
 	 *
Index: tmp/org.txm.utils/src/org/txm/utils/logger/LocalizedLogger.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/LocalizedLogger.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/LocalizedLogger.java	(revision 2402)
@@ -46,17 +46,16 @@
 	 * private Logger logger; private Localizer localizer;
 	 * 
 	 * // TODO : manage elsewhere the log configuration! static {
-	 * BasicConfigurator.configure();
-	 * Logger.getRootLogger().setLevel(Level.INFO); }
+	 * BasicConfigurator.configure(); Logger.getRootLogger().setLevel(Level.INFO); }
 	 * 
-	 * public LocalizedLogger(Class<?> clazz) { logger =
-	 * Logger.getLogger(clazz); localizer = new Localizer(clazz); }
+	 * public LocalizedLogger(Class<?> clazz) { logger = Logger.getLogger(clazz);
+	 * localizer = new Localizer(clazz); }
 	 * 
 	 * public void info(String key, Object[] arg) {
 	 * logger.info(localizer.message(key, arg)); }
 	 * 
-	 * public void info(String key, Object arg) {
-	 * logger.info(localizer.message(key, arg)); }
+	 * public void info(String key, Object arg) { logger.info(localizer.message(key,
+	 * arg)); }
 	 * 
 	 * public void info(String key) { logger.info(localizer.message(key)); }
 	 * 
Index: tmp/org.txm.utils/src/org/txm/utils/logger/TXMLogger.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/TXMLogger.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/TXMLogger.java	(revision 2402)
@@ -18,152 +18,160 @@
 // You should have received a copy of the GNU General
 // Public License along with the TXM platform. If not, see
 // http://www.gnu.org/licenses.
-
-//
-// This file is part of the TXM platform.
-//
-// The TXM platform is free software: you can redistribute it and/or modif y
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
-// 
-// 
-// 
-// $LastChangedDate: 2013-09-05 09:27:13 +0200 (jeu., 05 sept. 2013) $
-// $LastChangedRevision: 2529 $
-// $LastChangedBy: mdecorde $ 
-//
-package org.txm.utils.logger;
-
+
+//
+// This file is part of the TXM platform.
+//
+// The TXM platform is free software: you can redistribute it and/or modif y
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// 
+// 
+// $LastChangedDate: 2013-09-05 09:27:13 +0200 (jeu., 05 sept. 2013) $
+// $LastChangedRevision: 2529 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils.logger;
+
 import java.util.logging.Filter;
 import java.util.logging.Handler;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
-import java.util.logging.Logger;
-
+import java.util.logging.Logger;
 
-/**
- * no instanciation to do manage better Exceptions' log.
- *
- * @author mdecorde
- */
-public class TXMLogger extends Logger {
+/**
+ * no instanciation to do manage better Exceptions' log.
+ *
+ * @author mdecorde
+ */
+public class TXMLogger extends Logger {
 
 	/** The caller information. */
 	protected static String sourceMethodName;
 	protected static String sourceClassName;
-	
-	/**
-	 * Instantiates a new tXM logger.
-	 *
-	 * @param name the name
-	 * @param resourceBundleName the resource bundle name
-	 */
-	protected TXMLogger(String name, String resourceBundleName) {
-		super(name, resourceBundleName);
-	}
-
-	/**
-	 * Info.
-	 *
-	 * @param e the e
-	 */
-	public void info(Exception e) {
-		this.info(exceptionToString(e));
-	}
-
-	/**
-	 * Severe.
-	 *
-	 * @param e the e
-	 */
-	public void severe(Exception e) {
-		this.severe(exceptionToString(e));
-	}
-
-	/**
-	 * Error.
-	 *
-	 * @param e the e
-	 */
-	public void error(Exception e) {
-		this.severe(exceptionToString(e));
-	}
-
-	/**
-	 * Warning.
-	 *
-	 * @param e the e
-	 */
-	public void warning(Exception e) {
-		this.warning(exceptionToString(e));
-	}
-
-	/**
-	 * Fine.
-	 *
-	 * @param e the e
-	 */
-	public void fine(Exception e) {
-		this.fine(exceptionToString(e));
-	}
-
-	/**
-	 * Finer.
-	 *
-	 * @param e the e
-	 */
-	public void finer(Exception e) {
-		this.finer(exceptionToString(e));
-	}
-
-	/**
-	 * Finest.
-	 *
-	 * @param e the e
-	 */
-	public void finest(Exception e) {
-		this.finest(exceptionToString(e));
-	}
-
-	/**
-	 * Exception to string.
-	 *
-	 * @param e the e
-	 * @return the string
-	 */
-	public static String exceptionToString(Exception e) {
-		StackTraceElement t = e.getStackTrace()[0];
-		return t.getFileName() + ": " + t.getMethodName() + ", l." //$NON-NLS-1$ //$NON-NLS-2$
-				+ t.getLineNumber() + " -> " + e.toString(); //$NON-NLS-1$
+
+	/**
+	 * Instantiates a new tXM logger.
+	 *
+	 * @param name
+	 *            the name
+	 * @param resourceBundleName
+	 *            the resource bundle name
+	 */
+	protected TXMLogger(String name, String resourceBundleName) {
+		super(name, resourceBundleName);
 	}
-	
+
 	/**
-	 * Method from Logger
-	 * Create a LogRecord then calls the log method
+	 * Info.
+	 *
+	 * @param e
+	 *            the e
+	 */
+	public void info(Exception e) {
+		this.info(exceptionToString(e));
+	}
+
+	/**
+	 * Severe.
+	 *
+	 * @param e
+	 *            the e
+	 */
+	public void severe(Exception e) {
+		this.severe(exceptionToString(e));
+	}
+
+	/**
+	 * Error.
+	 *
+	 * @param e
+	 *            the e
+	 */
+	public void error(Exception e) {
+		this.severe(exceptionToString(e));
+	}
+
+	/**
+	 * Warning.
+	 *
+	 * @param e
+	 *            the e
+	 */
+	public void warning(Exception e) {
+		this.warning(exceptionToString(e));
+	}
+
+	/**
+	 * Fine.
+	 *
+	 * @param e
+	 *            the e
+	 */
+	public void fine(Exception e) {
+		this.fine(exceptionToString(e));
+	}
+
+	/**
+	 * Finer.
+	 *
+	 * @param e
+	 *            the e
+	 */
+	public void finer(Exception e) {
+		this.finer(exceptionToString(e));
+	}
+
+	/**
+	 * Finest.
+	 *
+	 * @param e
+	 *            the e
+	 */
+	public void finest(Exception e) {
+		this.finest(exceptionToString(e));
+	}
+
+	/**
+	 * Exception to string.
+	 *
+	 * @param e
+	 *            the e
+	 * @return the string
+	 */
+	public static String exceptionToString(Exception e) {
+		StackTraceElement t = e.getStackTrace()[0];
+		return t.getFileName() + ": " + t.getMethodName() + ", l." //$NON-NLS-1$ //$NON-NLS-2$
+				+ t.getLineNumber() + " -> " + e.toString(); //$NON-NLS-1$
+	}
+
+	/**
+	 * Method from Logger Create a LogRecord then calls the log method
 	 * 
 	 * @param level
 	 * @param msg
 	 */
 	public void log(Level level, String msg) {
-        int levelValue = this.getLevel().intValue();
+		int levelValue = this.getLevel().intValue();
 		if (level.intValue() < levelValue || levelValue == Level.OFF.intValue()) {
-            return;
-        }
-        LogRecord lr = new LogRecord(level, msg);
-        inferCaller();
-        lr.setSourceClassName(sourceClassName);
-        lr.setSourceMethodName(sourceMethodName);
-        log(lr);
-    }
+			return;
+		}
+		LogRecord lr = new LogRecord(level, msg);
+		inferCaller();
+		lr.setSourceClassName(sourceClassName);
+		lr.setSourceMethodName(sourceMethodName);
+		log(lr);
+	}
 
 	/**
 	 * Method from Logger to perform a log
@@ -171,46 +179,47 @@
 	 * @param record
 	 */
 	public void log(LogRecord record) {
-        Filter theFilter = this.getFilter();
-        if (theFilter != null && !theFilter.isLoggable(record)) {
-            return;
-        }
+		Filter theFilter = this.getFilter();
+		if (theFilter != null && !theFilter.isLoggable(record)) {
+			return;
+		}
 
-        // Post the LogRecord to all our Handlers, and then to
-        // our parents' handlers, all the way up the tree.
+		// Post the LogRecord to all our Handlers, and then to
+		// our parents' handlers, all the way up the tree.
 
-        Logger logger = this;
-        while (logger != null) {
-            for (Handler handler : logger.getHandlers()) {
-                handler.publish(record);
-            }
+		Logger logger = this;
+		while (logger != null) {
+			for (Handler handler : logger.getHandlers()) {
+				handler.publish(record);
+			}
 
-            if (!logger.getUseParentHandlers()) {
-                break;
-            }
+			if (!logger.getUseParentHandlers()) {
+				break;
+			}
 
-            logger = logger.getParent();
-        }
-    }
-	
+			logger = logger.getParent();
+		}
+	}
+
 	/**
-	 * Method from LogRecord to infer the caller's class and method names 
+	 * Method from LogRecord to infer the caller's class and method names
 	 */
 	protected static final void inferCaller() {
-		//JavaLangAccess access = SharedSecrets.getJavaLangAccess();
-		
+		// JavaLangAccess access = SharedSecrets.getJavaLangAccess();
+
 		Throwable throwable = new Throwable();
 		StackTraceElement[] stack = throwable.getStackTrace();
-		
-		//int depth = access.getStackTraceDepth(throwable); // JAVA 7
+
+		// int depth = access.getStackTraceDepth(throwable); // JAVA 7
 		int depth = stack.length;
-		
+
 		boolean lookingForLogger = true;
 		for (int ix = 0; ix < depth; ix++) {
 			// Calling getStackTraceElement directly prevents the VM
 			// from paying the cost of building the entire stack frame.
-			
-			//StackTraceElement frame = access.getStackTraceElement(throwable, ix); // JAVA7
+
+			// StackTraceElement frame = access.getStackTraceElement(throwable, ix); //
+			// JAVA7
 			StackTraceElement frame = stack[ix];
 			String cname = frame.getClassName();
 			boolean isLoggerImpl = Log.isLoggerImplFrame(cname);
@@ -222,8 +231,7 @@
 			} else {
 				if (!isLoggerImpl) {
 					// skip reflection call
-					if (!cname.startsWith("java.lang.reflect.")
-							&& !cname.startsWith("sun.reflect.")) {
+					if (!cname.startsWith("java.lang.reflect.") && !cname.startsWith("sun.reflect.")) {
 						// We've found the relevant frame.
 						sourceClassName = cname;
 						sourceMethodName = frame.getMethodName();
@@ -234,5 +242,5 @@
 		}
 		// We haven't found a suitable frame, so just punt. This is
 		// OK as we are only committed to making a "best effort" here.
-	}
+	}
 }
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/logger/MessageBox.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/MessageBox.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/MessageBox.java	(revision 2402)
@@ -44,8 +44,10 @@
 	/**
 	 * Severe.
 	 *
-	 * @param title the title
-	 * @param message the message
+	 * @param title
+	 *            the title
+	 * @param message
+	 *            the message
 	 */
 	public static void severe(String title, String message) {
 		if (Log.txm.getLevel().intValue() <= Level.SEVERE.intValue())
@@ -55,8 +57,10 @@
 	/**
 	 * Warning.
 	 *
-	 * @param title the title
-	 * @param message the message
+	 * @param title
+	 *            the title
+	 * @param message
+	 *            the message
 	 */
 	public static void warning(String title, String message) {
 		if (Log.txm.getLevel().intValue() < Level.WARNING.intValue())
@@ -66,8 +70,10 @@
 	/**
 	 * Info.
 	 *
-	 * @param title the title
-	 * @param message the message
+	 * @param title
+	 *            the title
+	 * @param message
+	 *            the message
 	 */
 	public static void info(String title, String message) {
 		if (Log.txm.getLevel().intValue() <= Level.INFO.intValue())
@@ -77,8 +83,10 @@
 	/**
 	 * Fine.
 	 *
-	 * @param title the title
-	 * @param message the message
+	 * @param title
+	 *            the title
+	 * @param message
+	 *            the message
 	 */
 	public static void fine(String title, String message) {
 		if (Log.txm.getLevel().intValue() <= Level.FINE.intValue())
@@ -88,8 +96,10 @@
 	/**
 	 * Finer.
 	 *
-	 * @param title the title
-	 * @param message the message
+	 * @param title
+	 *            the title
+	 * @param message
+	 *            the message
 	 */
 	public static void finer(String title, String message) {
 		if (Log.txm.getLevel().intValue() <= Level.FINER.intValue())
@@ -99,8 +109,10 @@
 	/**
 	 * Finest.
 	 *
-	 * @param title the title
-	 * @param message the message
+	 * @param title
+	 *            the title
+	 * @param message
+	 *            the message
 	 */
 	public static void finest(String title, String message) {
 		if (Log.txm.getLevel().intValue() <= Level.FINEST.intValue())
@@ -110,7 +122,8 @@
 	/**
 	 * Severe.
 	 *
-	 * @param message the message
+	 * @param message
+	 *            the message
 	 */
 	public static void severe(String message) {
 		severe(UtilsCoreMessages.MessageBox_0, message);
@@ -119,7 +132,8 @@
 	/**
 	 * Error.
 	 *
-	 * @param message the message
+	 * @param message
+	 *            the message
 	 */
 	public static void error(String message) {
 		severe(message);
@@ -128,8 +142,10 @@
 	/**
 	 * Error.
 	 *
-	 * @param title the title
-	 * @param message the message
+	 * @param title
+	 *            the title
+	 * @param message
+	 *            the message
 	 */
 	public static void error(String title, String message) {
 		severe(title, message);
@@ -138,7 +154,8 @@
 	/**
 	 * Warning.
 	 *
-	 * @param message the message
+	 * @param message
+	 *            the message
 	 */
 	public static void warning(String message) {
 		warning(UtilsCoreMessages.MessageBox_1, message);
@@ -147,7 +164,8 @@
 	/**
 	 * Info.
 	 *
-	 * @param message the message
+	 * @param message
+	 *            the message
 	 */
 	public static void info(String message) {
 		info(UtilsCoreMessages.MessageBox_2, message);
@@ -156,7 +174,8 @@
 	/**
 	 * Fine.
 	 *
-	 * @param message the message
+	 * @param message
+	 *            the message
 	 */
 	public static void fine(String message) {
 		fine("", message); //$NON-NLS-1$
@@ -165,7 +184,8 @@
 	/**
 	 * Finer.
 	 *
-	 * @param message the message
+	 * @param message
+	 *            the message
 	 */
 	public static void finer(String message) {
 		finer("", message); //$NON-NLS-1$
@@ -174,7 +194,8 @@
 	/**
 	 * Finest.
 	 *
-	 * @param message the message
+	 * @param message
+	 *            the message
 	 */
 	public static void finest(String message) {
 		finest("", message); //$NON-NLS-1$
@@ -183,30 +204,29 @@
 	/**
 	 * Displays a Swing alert pop up (in the Swing thread).
 	 *
-	 * @param title the title
-	 * @param message the message
-	 * @param level the level
+	 * @param title
+	 *            the title
+	 * @param message
+	 *            the message
+	 * @param level
+	 *            the level
 	 */
 	public static void show(final String title, final String message, final int level) {
-		
+
 		SwingUtilities.invokeLater(new Runnable() {
-			
+
 			@Override
 			public void run() {
-				
+
 				if (level > 900) {
-					javax.swing.JOptionPane.showMessageDialog(null, message, title,
-							javax.swing.JOptionPane.ERROR_MESSAGE);
+					javax.swing.JOptionPane.showMessageDialog(null, message, title, javax.swing.JOptionPane.ERROR_MESSAGE);
 				} else if (level > 800) {
-					javax.swing.JOptionPane.showMessageDialog(null, message, title,
-							javax.swing.JOptionPane.WARNING_MESSAGE);
+					javax.swing.JOptionPane.showMessageDialog(null, message, title, javax.swing.JOptionPane.WARNING_MESSAGE);
 				} else if (level > 700) {
-					javax.swing.JOptionPane.showMessageDialog(null, message, title,
-							javax.swing.JOptionPane.INFORMATION_MESSAGE);
+					javax.swing.JOptionPane.showMessageDialog(null, message, title, javax.swing.JOptionPane.INFORMATION_MESSAGE);
 				} else// if (level > 600)
 				{
-					javax.swing.JOptionPane.showMessageDialog(null, message, title,
-							javax.swing.JOptionPane.CLOSED_OPTION);
+					javax.swing.JOptionPane.showMessageDialog(null, message, title, javax.swing.JOptionPane.CLOSED_OPTION);
 				}
 			}
 		});
Index: tmp/org.txm.utils/src/org/txm/utils/logger/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/package.html	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>Extending logging package.</p>
+	<p>Extending logging package.</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/logger/Log.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/Log.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/Log.java	(revision 2402)
@@ -41,7 +41,8 @@
 import org.txm.utils.messages.UtilsCoreMessages;
 
 /**
- * The Class Log contains methods to print messages in the console depending on a log level
+ * The Class Log contains methods to print messages in the console depending on
+ * a log level
  * 
  * see the severe(), warning(), info(), fine(), finer() and finest() methods
  * 
@@ -57,17 +58,20 @@
 	/** The fh. */
 	protected static FileHandler fh;
 
-	/** The CONSOLE flags indicates if messages with level < INFO are printed in console*/
+	/**
+	 * The CONSOLE flags indicates if messages with level < INFO are printed in
+	 * console
+	 */
 	public static boolean CONSOLE = false;
 
 	/** The caller information. */
 	protected static String sourceMethodName;
-	protected static String sourceClassName;	
+	protected static String sourceClassName;
 	/** The logger frame list. */
 	protected static List<String> frameList;
 
 	static {
-		//System.out.println("INIT TXMLOGGER");
+		// System.out.println("INIT TXMLOGGER");
 		txm = new TXMLogger("TXMFileLogger", null);
 		txm.setLevel(Level.SEVERE); // default is to show errors
 		txm.setUseParentHandlers(true);
@@ -78,7 +82,8 @@
 	/**
 	 * Sets the level.
 	 * 
-	 * @param l the new level
+	 * @param l
+	 *            the new level
 	 */
 	public static void setLevel(Level l) {
 		txm.setLevel(l);
@@ -87,7 +92,8 @@
 	/**
 	 * Sets the prints the in file.
 	 * 
-	 * @param b the new prints the in file
+	 * @param b
+	 *            the new prints the in file
 	 */
 	public static String setPrintInFile(boolean b) {
 		// System.out.println("set print in file: "+b);
@@ -96,7 +102,7 @@
 			try {
 				SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$
 
-				filename = System.getProperty("java.io.tmpdir")+"/TXM-" + f.format(new Date()) + ".log"; //$NON-NLS-1$ //$NON-NLS-2$
+				filename = System.getProperty("java.io.tmpdir") + "/TXM-" + f.format(new Date()) + ".log"; //$NON-NLS-1$ //$NON-NLS-2$
 
 				fh = new FileHandler(filename, false);
 				System.out.println(UtilsCoreMessages.Log_3 + new File(filename).getAbsolutePath());
@@ -115,22 +121,20 @@
 	}
 
 	static SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$
+
 	/**
 	 * Sets the prints the in file.
 	 * 
-	 * @param b the new prints the in file
+	 * @param b
+	 *            the new prints the in file
 	 */
 	public static void setPrintInFile(boolean b, File logfiledir) {
 		if (b) {
 			if (txm.getHandlers().length == 0 && logfiledir.exists()) {
 				try {
 
-					fh = new FileHandler(
-							logfiledir.getAbsolutePath()
-							+ "/TXM-" + f.format(new Date()) + ".log", false); //$NON-NLS-1$ //$NON-NLS-2$
-					System.out.println(UtilsCoreMessages.Log_5
-							+ logfiledir.getAbsolutePath()
-							+ "TXM-" + f.format(new Date()) + ".log"); //$NON-NLS-2$ //$NON-NLS-1$
+					fh = new FileHandler(logfiledir.getAbsolutePath() + "/TXM-" + f.format(new Date()) + ".log", false); //$NON-NLS-1$ //$NON-NLS-2$
+					System.out.println(UtilsCoreMessages.Log_5 + logfiledir.getAbsolutePath() + "TXM-" + f.format(new Date()) + ".log"); //$NON-NLS-2$ //$NON-NLS-1$
 					fh.setFormatter(new SimpleFormatter());
 					fh.setEncoding("UTF-8"); //$NON-NLS-1$
 					txm.addHandler(fh);
@@ -154,18 +158,17 @@
 	/**
 	 * To string.
 	 * 
-	 * @param e the e
+	 * @param e
+	 *            the e
 	 * @return the string
 	 */
 	public static String toString(Exception e) {
 		try {
 			StackTraceElement t = e.getStackTrace()[0];
-			if (txm.getLevel().equals(Level.SEVERE)
-					|| txm.getLevel().equals(Level.ALL)) {
+			if (txm.getLevel().equals(Level.SEVERE) || txm.getLevel().equals(Level.ALL)) {
 				StringBuffer message = new StringBuffer();
 
-				message.append(t.getFileName()
-						+ ": " + t.getMethodName() + ", l." //$NON-NLS-1$ //$NON-NLS-2$
+				message.append(t.getFileName() + ": " + t.getMethodName() + ", l." //$NON-NLS-1$ //$NON-NLS-2$
 						+ t.getLineNumber() + " -> " + e.toString()); //$NON-NLS-1$
 
 				if (log_stacktrace_boolean) {
@@ -185,7 +188,8 @@
 	/**
 	 * Sets the prints the in console.
 	 * 
-	 * @param b the new prints the in console
+	 * @param b
+	 *            the new prints the in console
 	 */
 	public static void setPrintInConsole(boolean b) {
 		CONSOLE = b;
@@ -194,17 +198,18 @@
 	/**
 	 * Sets the prints the in console.
 	 * 
-	 * @param b the new prints the in console
+	 * @param b
+	 *            the new prints the in console
 	 */
 	public static boolean getPrintInConsole() {
 		return txm.getUseParentHandlers();
 	}
 
-
 	/**
 	 * Log a severe message using the default flag
 	 * 
-	 * @param t the error to print
+	 * @param t
+	 *            the error to print
 	 */
 	public static void severe(Throwable t) {
 		severe(t.getLocalizedMessage());
@@ -217,7 +222,7 @@
 	 * @param message
 	 */
 	public static void severe(String message) {
-		
+
 		if (Level.SEVERE.intValue() >= txm.getLevel().intValue()) {
 			System.out.println(message);
 
@@ -226,35 +231,38 @@
 			int maxClassNameLength = 0;
 			int maxMethodNameLength = 0;
 
-			for (StackTraceElement t : st) {            
+			for (StackTraceElement t : st) {
 				String cn = t.getClassName();
 				if (cn.startsWith("org.txm.") && !cn.startsWith(Log.class.getName())) {
 					int cns = cn.length();
-					if (cns > maxClassNameLength) maxClassNameLength = cns;
+					if (cns > maxClassNameLength)
+						maxClassNameLength = cns;
 					int mns = t.getMethodName().length();
-					if (mns > maxMethodNameLength) maxMethodNameLength = mns;
+					if (mns > maxMethodNameLength)
+						maxMethodNameLength = mns;
 					stL++;
 				}
 			}
 
-			int stLs = (int)Math.log10(stL)+1;
+			int stLs = (int) Math.log10(stL) + 1;
 			String format = String.format("[%%%dd]  %%%ds.%%%ds  %%s, %%s", stLs, maxClassNameLength, maxMethodNameLength);
 
 			System.out.println("Stacktrace: ");
 			int n = 1;
-			for (StackTraceElement t : st) {            
+			for (StackTraceElement t : st) {
 				if (t.getClassName().startsWith("org.txm.") && !t.getClassName().startsWith(Log.class.getName())) {
 					System.out.println(String.format(format, n++, t.getClassName(), t.getMethodName(), t.getFileName(), t.getLineNumber()));
 				}
 			}
 
-			//			System.out.println("Stacktrace: ");
-			//			int n = 1;
-			//			for (StackTraceElement t : Thread.currentThread().getStackTrace()) {
-			//				if (t.getClassName().startsWith("org.txm.") && !t.getClassName().startsWith(Log.class.getName())) {
-			//					System.out.println(String.format("[%2d]\t",n++)+t);
-			//				}
-			//			}
+			// System.out.println("Stacktrace: ");
+			// int n = 1;
+			// for (StackTraceElement t : Thread.currentThread().getStackTrace()) {
+			// if (t.getClassName().startsWith("org.txm.") &&
+			// !t.getClassName().startsWith(Log.class.getName())) {
+			// System.out.println(String.format("[%2d]\t",n++)+t);
+			// }
+			// }
 		}
 
 		txm.severe(message);
@@ -263,7 +271,8 @@
 	/**
 	 * Log a warning message using the default flag
 	 * 
-	 * @param t the error to print
+	 * @param t
+	 *            the error to print
 	 */
 	public static void warning(Throwable e) {
 		warning(e.getLocalizedMessage());
@@ -278,23 +287,24 @@
 	public static void warning(String message) {
 		if (Level.WARNING.intValue() >= txm.getLevel().intValue()) {
 			System.out.println(message);
-			//			System.out.print("AT: ");
-			//			int n = 1;
-			//			for (StackTraceElement t : Thread.currentThread().getStackTrace()) {
-			//				if (t.getClassName().startsWith("org.txm.") && !t.getClassName().startsWith(Log.class.getName())) {
-			//					System.out.println(t);
-			//					break;
-			//				}
-			//			}
+			// System.out.print("AT: ");
+			// int n = 1;
+			// for (StackTraceElement t : Thread.currentThread().getStackTrace()) {
+			// if (t.getClassName().startsWith("org.txm.") &&
+			// !t.getClassName().startsWith(Log.class.getName())) {
+			// System.out.println(t);
+			// break;
+			// }
+			// }
 		}
 		txm.warning(message);
 	}
 
-
 	/**
 	 * Log an info message using the default flag
 	 * 
-	 * @param t the error to print
+	 * @param t
+	 *            the error to print
 	 */
 	public static void info(Throwable t) {
 		info(t.getLocalizedMessage());
@@ -305,7 +315,8 @@
 	 * Log an info message
 	 * 
 	 * @param message
-	 * @param flag where to print the message
+	 * @param flag
+	 *            where to print the message
 	 */
 	public static void info(String message) {
 		if (Level.INFO.intValue() >= txm.getLevel().intValue()) {
@@ -314,7 +325,6 @@
 		txm.info(message);
 	}
 
-
 	/**
 	 * Logs a finest level message.
 	 * 
@@ -328,7 +338,8 @@
 	}
 
 	/**
-	 * Logs a finest level message adding the class and method of callers stack according to the specified trace depth.
+	 * Logs a finest level message adding the class and method of callers stack
+	 * according to the specified trace depth.
 	 * 
 	 * @param message
 	 * @param stackDepth
@@ -338,22 +349,22 @@
 
 		// Log callers
 		String lead = ""; //$NON-NLS-1$
-		for(int i = 2; i < 10; i++)	{
+		for (int i = 2; i < 10; i++) {
 			lead += " "; //$NON-NLS-1$
 			try {
 				Log.finest(lead + Thread.currentThread().getStackTrace()[i].getClassName() + "." + Thread.currentThread().getStackTrace()[i].getMethodName()); //$NON-NLS-1$
-			}
-			catch (Exception e) {
+			} catch (Exception e) {
 				// nothing to do
 			}
 		}
 	}
-	
+
 	/**
 	 * Log an info message
 	 * 
 	 * @param message
-	 * @param flag where to print the message
+	 * @param flag
+	 *            where to print the message
 	 */
 	public static void fine(String message) {
 		if (CONSOLE && Level.FINE.intValue() >= txm.getLevel().intValue()) {
@@ -366,7 +377,8 @@
 	 * Log an info message
 	 * 
 	 * @param message
-	 * @param flag where to print the message
+	 * @param flag
+	 *            where to print the message
 	 */
 	public static void finer(String message) {
 		if (CONSOLE && Level.FINER.intValue() >= txm.getLevel().intValue()) {
@@ -375,13 +387,13 @@
 		txm.finer(message);
 	}
 
-
 	public static boolean log_stacktrace_boolean = true;
 
 	/**
 	 * Log a stacktrace if the 'Log.log_stacktrace_boolean' is set to true
 	 * 
-	 * @param e the Throwable
+	 * @param e
+	 *            the Throwable
 	 */
 	public static void printStackTrace(Throwable e) {
 		if (log_stacktrace_boolean) {
@@ -394,15 +406,16 @@
 	}
 
 	public static boolean isPrintingErrors() {
-		if (txm == null) return false;
+		if (txm == null)
+			return false;
 		return txm.getLevel().intValue() <= Level.INFO.intValue();
 	}
 
-
 	/**
 	 * Method from LogRecord to determine if a frame is a logger frame
 	 * 
-	 * @param cname the frame
+	 * @param cname
+	 *            the frame
 	 * @return
 	 */
 	protected static boolean isLoggerImplFrame(String cname) {
@@ -419,23 +432,25 @@
 		int maxClassNameLength = 0;
 		int maxMethodNameLength = 0;
 
-		for (StackTraceElement t : st) {            
+		for (StackTraceElement t : st) {
 			String cn = t.getClassName();
 			if (cn.startsWith("org.txm.") && !cn.startsWith(Log.class.getName())) {
 				int cns = cn.length();
-				if (cns > maxClassNameLength) maxClassNameLength = cns;
+				if (cns > maxClassNameLength)
+					maxClassNameLength = cns;
 				int mns = t.getMethodName().length();
-				if (mns > maxMethodNameLength) maxMethodNameLength = mns;
+				if (mns > maxMethodNameLength)
+					maxMethodNameLength = mns;
 				stL++;
 			}
 		}
 
-		int stLs = (int)Math.log10(stL)+1;
+		int stLs = (int) Math.log10(stL) + 1;
 		String format = String.format("[%%%dd]  %%%ds.%%%ds  %%s, %%s", stLs, maxClassNameLength, maxMethodNameLength);
 
 		System.out.println("Stacktrace: ");
 		int n = 1;
-		for (StackTraceElement t : st) {            
+		for (StackTraceElement t : st) {
 			if (t.getClassName().startsWith("org.txm.") && !t.getClassName().startsWith(Log.class.getName())) {
 				System.out.println(String.format(format, n++, t.getClassName(), t.getMethodName(), t.getFileName(), t.getLineNumber()));
 			}
Index: tmp/org.txm.utils/src/org/txm/utils/DeleteDir.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/DeleteDir.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/DeleteDir.java	(revision 2402)
@@ -44,11 +44,12 @@
  * @author mdecorde
  */
 public class DeleteDir {
-	
+
 	/**
 	 * The main method.
 	 *
-	 * @param args the arguments
+	 * @param args
+	 *            the arguments
 	 */
 	public static void main(String args[]) {
 		deleteDirectory(new File(args[0]));
@@ -57,7 +58,8 @@
 	/**
 	 * Delete directory.
 	 *
-	 * @param path the path
+	 * @param path
+	 *            the path
 	 * @return true, if successful
 	 */
 	static public boolean deleteDirectory(File path) {
@@ -65,73 +67,67 @@
 			return false;
 		if (!path.exists())
 			return false;
-		
+
 		try { // try using system for faster reply
-            // prefer OS-dependent directory removal tool
-            if (SystemUtils.IS_OS_WINDOWS) {
-            	Runtime.getRuntime().exec(new String[]{"%ComSpec%", "/C", "RD /S /Q \"" + path + '"'}).waitFor(); // FIXME: SJ: "%ComSpec%" is not defined, at least on my Win7
-            } else if (SystemUtils.IS_OS_UNIX) {
-            	Runtime.getRuntime().exec(new String[]{"/bin/rm", "-rf", path.toString()}).waitFor();
-            }
-        } catch (Exception e) {
-            // fallback to internal implementation on error
-        	//e.printStackTrace();
-        }
-		
+				// prefer OS-dependent directory removal tool
+			if (SystemUtils.IS_OS_WINDOWS) {
+				Runtime.getRuntime().exec(new String[] { "%ComSpec%", "/C", "RD /S /Q \"" + path + '"' }).waitFor(); // FIXME: SJ: "%ComSpec%" is not defined, at least on my Win7
+			} else if (SystemUtils.IS_OS_UNIX) {
+				Runtime.getRuntime().exec(new String[] { "/bin/rm", "-rf", path.toString() }).waitFor();
+			}
+		} catch (Exception e) {
+			// fallback to internal implementation on error
+			// e.printStackTrace();
+		}
+
 		if (path.exists() && path.isDirectory()) {
 			File[] files = path.listFiles();
 			if (files != null)
-			for (int i = 0; i < files.length; i++) {
-				if (files[i].isDirectory()) {
-					deleteDirectory(files[i]);
-				} else {
-					files[i].delete();
+				for (int i = 0; i < files.length; i++) {
+					if (files[i].isDirectory()) {
+						deleteDirectory(files[i]);
+					} else {
+						files[i].delete();
+					}
 				}
-			}
 		}
 		return (path.delete());
 	}
-	
+
 	/**
 	 * Scan directory.
 	 *
-	 * @param directory the directory
-	 * @param ignorecached the ignorecached
+	 * @param directory
+	 *            the directory
+	 * @param ignorecached
+	 *            the ignorecached
 	 * @return the array list of files
 	 */
-	public static ArrayList<File> scanDirectory(File directory, boolean ignorecached)
-	{
-		//System.out.println("scan directory : "+directory.getAbsolutePath());
+	public static ArrayList<File> scanDirectory(File directory, boolean ignorecached) {
+		// System.out.println("scan directory : "+directory.getAbsolutePath());
 		ArrayList<File> dirfiles = new ArrayList<File>();
 		LinkedList<File> files = new LinkedList<File>();
 		files.add(directory);
-		
-		while(!files.isEmpty())
-		{		
+
+		while (!files.isEmpty()) {
 			File current = files.removeFirst();
-			
-			if (current.isDirectory())
-			{
-				//System.out.println(current);
-				for(File sfile : current.listFiles())
-				{
-					//System.out.println("  "+sfile);
-					if (sfile.isDirectory())
-					{
-						if (ignorecached)
-						{
+
+			if (current.isDirectory()) {
+				// System.out.println(current);
+				for (File sfile : current.listFiles()) {
+					// System.out.println(" "+sfile);
+					if (sfile.isDirectory()) {
+						if (ignorecached) {
 							if (!sfile.getName().startsWith(".")) //$NON-NLS-1$
 								files.add(sfile);
-						}
-						else
+						} else
 							files.add(sfile);
-					}
-					else
+					} else
 						dirfiles.add(sfile);
 				}
 			}
 		}
-		//System.out.println(dirfiles);
+		// System.out.println(dirfiles);
 		return dirfiles;
 	}
 }
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/___StreamConsumer.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/___StreamConsumer.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/___StreamConsumer.java	(revision 2402)
@@ -9,36 +9,35 @@
 
 /**
  * Consumer for dumping stdout and stderr from a native process.
+ * 
  * @author sjacquot
  *
  */
 public class ___StreamConsumer extends Thread {
-    
+
 	InputStream is;
 	int type;
-    
-    public ___StreamConsumer(InputStream is, int type) {
-        this.is = is;
-        this.type = type;
-    }
-    
-    @Override
-    public void run() {
-        try {
-            InputStreamReader isr = new InputStreamReader(this.is);
-            BufferedReader br = new BufferedReader(isr);
-            String line = null;
-            while ((line = br.readLine()) != null) {
-            	if(this.type == 0)	{
-            		Log.finest(line);
-            	}
-            	else	{
-            		Log.severe(line);
-            	}
-            }
-        }
-        catch (IOException e) {
-        	e.printStackTrace();  
-        }
-    }
+
+	public ___StreamConsumer(InputStream is, int type) {
+		this.is = is;
+		this.type = type;
+	}
+
+	@Override
+	public void run() {
+		try {
+			InputStreamReader isr = new InputStreamReader(this.is);
+			BufferedReader br = new BufferedReader(isr);
+			String line = null;
+			while ((line = br.readLine()) != null) {
+				if (this.type == 0) {
+					Log.finest(line);
+				} else {
+					Log.severe(line);
+				}
+			}
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+	}
 }
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/ProcessBuilder.groovy
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/ProcessBuilder.groovy	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/ProcessBuilder.groovy	(revision 2402)
@@ -37,9 +37,12 @@
 /**
  * creates a wrapper of a program.
  *
- * @param definitionFile the definition file
- * @param classFile the class file
- * @param binariesDirectory the binaries directory
+ * @param definitionFile
+ *            the definition file
+ * @param classFile
+ *            the class file
+ * @param binariesDirectory
+ *            the binaries directory
  * @return the object
  * @author H
  */
Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/package.html	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>classes for the next Wrapper - not yet finished</p>
+	<p>classes for the next Wrapper - not yet finished</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Param.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/Param.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/Param.java	(revision 2402)
@@ -38,33 +38,35 @@
  * The Class Param.
  */
 public class Param {
-	
+
 	/** The root. */
 	Element root;
-	
+
 	/** The exec. */
 	Executable exec;
-	
+
 	/** The name. */
 	String name;
-	
+
 	/** The type. */
 	String type;
-	
+
 	/** The state. */
 	String state;
-	
+
 	/** The desc. */
 	String desc;
-	
+
 	/** The prefix. */
 	String prefix;
 
 	/**
 	 * Instantiates a new param.
 	 *
-	 * @param exec the exec
-	 * @param root the root
+	 * @param exec
+	 *            the exec
+	 * @param root
+	 *            the root
 	 */
 	public Param(Executable exec, Element root) {
 
@@ -81,16 +83,17 @@
 	/**
 	 * Builds the.
 	 *
-	 * @param writer the writer
+	 * @param writer
+	 *            the writer
 	 */
 	public void build(Writer writer) {
 		/*
 		 * for(int i=0;i < children.getLength();i++) { Element child =
 		 * (Element)children.item(i); String name = child.getAttribute("name");
-		 * //$NON-NLS-1$ String type = child.getAttribute("type"); //$NON-NLS-1$
-		 * String desc = child.getAttribute("desc"); //$NON-NLS-1$ String state
-		 * = child.getAttribute("state"); //$NON-NLS-1$
-		 * if (!order.contains(name)) order.add(name);
+		 * //$NON-NLS-1$ String type = child.getAttribute("type"); //$NON-NLS-1$ String
+		 * desc = child.getAttribute("desc"); //$NON-NLS-1$ String state =
+		 * child.getAttribute("state"); //$NON-NLS-1$ if (!order.contains(name))
+		 * order.add(name);
 		 * 
 		 * }
 		 */
@@ -133,8 +136,8 @@
 		/*
 		 * StringBuffer buff = new StringBuffer();
 		 * buff.append("App: "+name+", version: "+version+", desc: "+desc+"\n");
-		 * for(Executable exec : executables.values())
-		 * buff.append(exec.describe()); return buff.toString();
+		 * for(Executable exec : executables.values()) buff.append(exec.describe());
+		 * return buff.toString();
 		 */
 		return "  Param: " + prefix + name + ", type: " + type + ", state: " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 				+ state + ",desc: " + desc + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
@@ -143,14 +146,17 @@
 	/**
 	 * Equals.
 	 *
-	 * @param param the param
+	 * @param param
+	 *            the param
 	 * @return true, if successful
 	 */
 	public boolean equals(Param param) {
 		return this.name.equals(param.name) && this.type.equals(param.type);
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Object#toString()
 	 */
 	@Override
@@ -161,34 +167,32 @@
 	/**
 	 * Declare.
 	 *
-	 * @param writer the writer
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param writer
+	 *            the writer
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public void declare(OutputStreamWriter writer) throws IOException {
 		if (state.equals("optional")) //$NON-NLS-1$
 		{
 			writer.write("\t// " + desc + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-			writer
-					.write("\tprivate Boolean is" + name.replace("-", "") + " = false;\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			writer.write("\tprivate Boolean is" + name.replace("-", "") + " = false;\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 
 			if (!type.equals("none")) //$NON-NLS-1$
 			{
-				writer
-						.write("\tprivate " + type + " " + name.replace("-", "") + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-				writer
-						.write("\tpublic void set" + name.replace("-", "") + "(" + type + " arg)\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-								"\tthis.is" //$NON-NLS-1$
-								+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-								"\t\tthis." //$NON-NLS-1$
-								+ name.replace("-", "") + "=arg;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-								"\t}\n" //$NON-NLS-1$
-						);
+				writer.write("\tprivate " + type + " " + name.replace("-", "") + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+				writer.write("\tpublic void set" + name.replace("-", "") + "(" + type + " arg)\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+						"\tthis.is" //$NON-NLS-1$
+						+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						"\t\tthis." //$NON-NLS-1$
+						+ name.replace("-", "") + "=arg;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						"\t}\n" //$NON-NLS-1$
+				);
 			} else {
-				writer
-						.write("\tpublic void set" + name.replace("-", "") + "(){" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-								"\tthis.is" //$NON-NLS-1$
-								+ name.replace("-", "") + "=true;\t}\n" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-						);
+				writer.write("\tpublic void set" + name.replace("-", "") + "(){" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+						"\tthis.is" //$NON-NLS-1$
+						+ name.replace("-", "") + "=true;\t}\n" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				);
 			}
 
 			writer.write("\tpublic void unset" + name.replace("-", "") + "(){" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
@@ -197,26 +201,23 @@
 		} else if (state.equals("multiple")) //$NON-NLS-1$
 		{
 			writer.write("\n\t// " + desc + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-			writer
-					.write("\tprivate Boolean is" + name.replace("-", "") + " = false;\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			writer.write("\tprivate Boolean is" + name.replace("-", "") + " = false;\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 
 			if (!type.equals("none")) //$NON-NLS-1$
 			{
 				writer.write("\tprivate List<" + type + "> " + name + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-				writer
-						.write("\tpublic void set" + name.replace("-", "") + "(List<" + type + "> arg)\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-								"\tthis.is" //$NON-NLS-1$
-								+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-								"\t\tthis." //$NON-NLS-1$
-								+ name.replace("-", "") + "=arg;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-								"\t}\n" //$NON-NLS-1$
-						);
+				writer.write("\tpublic void set" + name.replace("-", "") + "(List<" + type + "> arg)\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+						"\tthis.is" //$NON-NLS-1$
+						+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						"\t\tthis." //$NON-NLS-1$
+						+ name.replace("-", "") + "=arg;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+						"\t}\n" //$NON-NLS-1$
+				);
 			} else {
-				writer
-						.write("\tpublic void set" + name.replace("-", "") + "(){" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-								"\tthis.is" //$NON-NLS-1$
-								+ name.replace("-", "") + "=true;\t}\n" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-						);
+				writer.write("\tpublic void set" + name.replace("-", "") + "(){" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+						"\tthis.is" //$NON-NLS-1$
+						+ name.replace("-", "") + "=true;\t}\n" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				);
 			}
 
 			writer.write("\tpublic void unset" + name.replace("-", "") + "(){" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Executable.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/Executable.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/Executable.java	(revision 2402)
@@ -42,39 +42,41 @@
  * The Class Executable.
  */
 public class Executable {
-	
+
 	/** The root. */
 	Element root;
-	
+
 	/** The app. */
 	Application app;
 
 	/** The name. */
 	String name;
-	
+
 	/** The version. */
 	String version;
-	
+
 	/** The desc. */
 	String desc;
 
 	/** The params. */
 	ArrayList<Param> params = new ArrayList<Param>();
-	
+
 	/** The optionals. */
 	HashSet<Param> optionals = new HashSet<Param>();
-	
+
 	/** The musts. */
 	HashSet<Param> musts = new HashSet<Param>();
-	
+
 	/** The multiples. */
 	HashSet<Param> multiples = new HashSet<Param>();
 
 	/**
 	 * Instantiates a new executable.
 	 *
-	 * @param app the app
-	 * @param root the root
+	 * @param app
+	 *            the app
+	 * @param root
+	 *            the root
 	 */
 	public Executable(Application app, Element root) {
 		this.root = root;
@@ -101,7 +103,8 @@
 	/**
 	 * Adds the param.
 	 *
-	 * @param param the param
+	 * @param param
+	 *            the param
 	 */
 	public void addParam(Param param) {
 		params.add(param);
@@ -120,12 +123,14 @@
 	/**
 	 * Builds the.
 	 *
-	 * @param writer the writer
+	 * @param writer
+	 *            the writer
 	 * @return the string
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public String build(Writer writer) throws IOException {
-		//NodeList nodeLst = doc.getElementsByTagName("prog"); //$NON-NLS-1$
+		// NodeList nodeLst = doc.getElementsByTagName("prog"); //$NON-NLS-1$
 		ArrayList<String> dejavu = new ArrayList<String>();
 
 		HashMap<String, String> atester = new HashMap<String, String>();
@@ -144,8 +149,7 @@
 
 		// musts
 		for (Param p : musts) {
-			writer
-					.write("\t\targs.add(\"\"+" + p.name.replace("-", "") + ");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			writer.write("\t\targs.add(\"\"+" + p.name.replace("-", "") + ");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
 
 		writer.write("\n" + func + " throws IOException\n"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -161,41 +165,32 @@
 				writer.write("\t\tif (is" + p.name.replace("-", "") + ")\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 				if (!p.type.equals("none")) { //$NON-NLS-1$
 					writer.write("\t\t\t{args.add(\"-" + p.name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
-					writer
-							.write("\t\t\targs.add(\"\"+" + p.name.replace("-", "") + ");}\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+					writer.write("\t\t\targs.add(\"\"+" + p.name.replace("-", "") + ");}\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 				} else {
 					writer.write("\t\t\targs.add(\"-" + p.name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
 				}
 			} else if (p.state.equals("multiple")) { //$NON-NLS-1$
 				writer.write("\t\tif (is" + p.name.replace("-", "") + ")\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-				writer
-						.write("\t\t\tfor(int c = 0;c < " + p.name.replace("-", "") + ".size();c++)\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+				writer.write("\t\t\tfor(int c = 0;c < " + p.name.replace("-", "") + ".size();c++)\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 				writer.write("\t\t\t{args.add(\"-" + p.name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
-				writer
-						.write("\t\t\targs.add(\"\"+" + p.name.replace("-", "") + ".get(c));}\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+				writer.write("\t\t\targs.add(\"\"+" + p.name.replace("-", "") + ".get(c));}\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 			}
 		}
 
-		writer
-				.write("\n\t\tProcessBuilder pb = new ProcessBuilder(args);\n" + //$NON-NLS-1$
-						"\t\tpb.redirectErrorStream(true);\n" + //$NON-NLS-1$
-						"\t\tProcess process = null;\n" + //$NON-NLS-1$
-						"\t\ttry {\n\t\t\tprocess = pb.start();\n\t\t} catch (IOException e) {\n\t\t\tSystem.err.println(e);\n\t\t}\n"); //$NON-NLS-1$
+		writer.write("\n\t\tProcessBuilder pb = new ProcessBuilder(args);\n" + //$NON-NLS-1$
+				"\t\tpb.redirectErrorStream(true);\n" + //$NON-NLS-1$
+				"\t\tProcess process = null;\n" + //$NON-NLS-1$
+				"\t\ttry {\n\t\t\tprocess = pb.start();\n\t\t} catch (IOException e) {\n\t\t\tSystem.err.println(e);\n\t\t}\n"); //$NON-NLS-1$
 		writer.write("\t\tInputStream is = process.getInputStream();\n"); //$NON-NLS-1$
-		writer
-				.write("\t\tInputStreamReader isr = new InputStreamReader(is);\n"); //$NON-NLS-1$
+		writer.write("\t\tInputStreamReader isr = new InputStreamReader(is);\n"); //$NON-NLS-1$
 		writer.write("\t\tBufferedReader br = new BufferedReader(isr);\n"); //$NON-NLS-1$
 		writer.write("\t\tString line;\n"); //$NON-NLS-1$
-		writer
-				.write("\t\twhile ((line = br.readLine()) != null)\n\t\t{\n\t\t\tif (debug)\n\t\t\t\tSystem.out.println(line);\n\t\t}\n"); //$NON-NLS-1$
-		writer
-				.write("\t\tint e=0;\n\t\ttry {e = process.waitFor();}catch(Exception err){}\n\t\tif (e != 0) {\n\t\t\t" + //$NON-NLS-1$
-						"System.err.println(\"Process exited abnormally with code \"+e+\" at \"+" //$NON-NLS-1$
-						+ 
-						"DateFormat.getDateInstance(DateFormat.FULL, Locale.UK).format(new Date()));"); //$NON-NLS-1$
+		writer.write("\t\twhile ((line = br.readLine()) != null)\n\t\t{\n\t\t\tif (debug)\n\t\t\t\tSystem.out.println(line);\n\t\t}\n"); //$NON-NLS-1$
+		writer.write("\t\tint e=0;\n\t\ttry {e = process.waitFor();}catch(Exception err){}\n\t\tif (e != 0) {\n\t\t\t" + //$NON-NLS-1$
+				"System.err.println(\"Process exited abnormally with code \"+e+\" at \"+" //$NON-NLS-1$
+				+ "DateFormat.getDateInstance(DateFormat.FULL, Locale.UK).format(new Date()));"); //$NON-NLS-1$
 		writer.write("\n\t\t\t"); //$NON-NLS-1$
-		writer
-				.write("for(int c=0;c <args.size();c++)System.out.print(\"\"+args.get(c)+\" \");\n"); //$NON-NLS-1$
+		writer.write("for(int c=0;c <args.size();c++)System.out.print(\"\"+args.get(c)+\" \");\n"); //$NON-NLS-1$
 		writer.write("\t\t\tSystem.out.println();\n\t\t}\n\t}\n"); //$NON-NLS-1$
 
 		return ""; //$NON-NLS-1$
Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Application.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/Application.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/Application.java	(revision 2402)
@@ -48,35 +48,38 @@
  * The Class Application.
  */
 public class Application {
-	
+
 	/** The definition file. */
 	File definitionFile;
 
 	/** The name. */
 	String name;
-	
+
 	/** The version. */
 	String version;
-	
+
 	/** The desc. */
 	String desc;
-	
+
 	/** The params. */
 	HashSet<Param> params = new HashSet<Param>();
-	
+
 	/** The executables. */
 	HashMap<String, Executable> executables = new HashMap<String, Executable>();
 
 	/**
 	 * Instantiates a new application.
 	 *
-	 * @param definitionFile the definition file
-	 * @throws ParserConfigurationException the parser configuration exception
-	 * @throws SAXException the sAX exception
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param definitionFile
+	 *            the definition file
+	 * @throws ParserConfigurationException
+	 *             the parser configuration exception
+	 * @throws SAXException
+	 *             the sAX exception
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public Application(File definitionFile)
-			throws ParserConfigurationException, SAXException, IOException {
+	public Application(File definitionFile) throws ParserConfigurationException, SAXException, IOException {
 		this.definitionFile = definitionFile;
 
 		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
@@ -102,15 +105,17 @@
 	/**
 	 * Builds the.
 	 *
-	 * @param outFile the out file
-	 * @throws IOException Signals that an I/O exception has occurred.
-	 * @throws SAXException the sAX exception
-	 * @throws ParserConfigurationException the parser configuration exception
+	 * @param outFile
+	 *            the out file
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
+	 * @throws SAXException
+	 *             the sAX exception
+	 * @throws ParserConfigurationException
+	 *             the parser configuration exception
 	 */
-	public void build(File outFile) throws IOException, SAXException,
-			ParserConfigurationException {
-		OutputStreamWriter writer = new OutputStreamWriter(
-				new FileOutputStream(outFile), "UTF-8"); //$NON-NLS-1$
+	public void build(File outFile) throws IOException, SAXException, ParserConfigurationException {
+		OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"); //$NON-NLS-1$
 
 		writer.write("import java.util.Date;\n"); //$NON-NLS-1$
 		writer.write("import java.util.Locale;\n"); //$NON-NLS-1$
@@ -128,8 +133,7 @@
 		writer.write("\tpublic  String version = \"" + version + "\";\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		writer.write("\tpublic String desc = \"" + desc + "\";\n"); //$NON-NLS-1$ //$NON-NLS-2$
 
-		writer
-				.write("\n\tpublic " + name + "(String binpath){this.binpath=binpath;}\n\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("\n\tpublic " + name + "(String binpath){this.binpath=binpath;}\n\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		writer.write("\tpublic void debug(boolean b){debug=b;};\n\n"); //$NON-NLS-1$
 
 		writer.write("//PARAMETERS DECLARATION\n"); //$NON-NLS-1$
@@ -143,8 +147,7 @@
 
 		writer.write("\tpublic static void main(String[] args) \n"); //$NON-NLS-1$
 		writer.write("\t{\n"); //$NON-NLS-1$
-		writer
-				.write("\t\t" + name + " tt = new " + name + "(\"thepathtobinariesfolder\");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		writer.write("\t\t" + name + " tt = new " + name + "(\"thepathtobinariesfolder\");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		writer.write("\t}\n"); //$NON-NLS-1$
 
 		writer.write("}"); //$NON-NLS-1$
@@ -169,13 +172,12 @@
 	/**
 	 * The main method.
 	 *
-	 * @param args the arguments
+	 * @param args
+	 *            the arguments
 	 */
 	public static void main(String args[]) {
 		try {
-			Application app = new Application(
-					new File(
-							"~/workspace/org.txm.core/src/groovy/org/textometrie/scripts/ls-wrapper-definition.xml")); //$NON-NLS-1$
+			Application app = new Application(new File("~/workspace/org.txm.core/src/groovy/org/textometrie/scripts/ls-wrapper-definition.xml")); //$NON-NLS-1$
 			app.build(new File("~/Bureau/testClix.java")); //$NON-NLS-1$
 		} catch (Exception e) {
 			org.txm.utils.logger.Log.printStackTrace(e);
Index: tmp/org.txm.utils/src/org/txm/utils/treetagger/TreeTagger.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/treetagger/TreeTagger.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/treetagger/TreeTagger.java	(revision 2402)
@@ -51,10 +51,12 @@
 	/** The binpath. */
 	String binpath = ""; //$NON-NLS-1$
 	String[] options;
+
 	/**
 	 * Instantiates a new tree tagger.
 	 *
-	 * @param binpath the binpath
+	 * @param binpath
+	 *            the binpath
 	 */
 	public TreeTagger(String binpath, String[] options) {
 		this.binpath = binpath;
@@ -73,7 +75,8 @@
 	/**
 	 * Debug.
 	 *
-	 * @param b the b
+	 * @param b
+	 *            the b
 	 */
 	public void debug(boolean b) {
 		debug = b;
@@ -144,7 +147,8 @@
 	/**
 	 * Sets the threshold.
 	 *
-	 * @param arg the new threshold
+	 * @param arg
+	 *            the new threshold
 	 */
 	public void setthreshold(float arg) {
 		this.isthreshold = true;
@@ -349,7 +353,8 @@
 	/**
 	 * Sets the eps.
 	 *
-	 * @param arg the new eps
+	 * @param arg
+	 *            the new eps
 	 */
 	public void seteps(float arg) {
 		this.iseps = true;
@@ -373,7 +378,8 @@
 	/**
 	 * Sets the lex.
 	 *
-	 * @param arg the new lex
+	 * @param arg
+	 *            the new lex
 	 */
 	public void setlex(String arg) {
 		this.islex = true;
@@ -397,7 +403,8 @@
 	/**
 	 * Sets the wc.
 	 *
-	 * @param arg the new wc
+	 * @param arg
+	 *            the new wc
 	 */
 	public void setwc(String arg) {
 		this.iswc = true;
@@ -422,7 +429,8 @@
 	/**
 	 * Sets the eostag.
 	 *
-	 * @param arg the new eostag
+	 * @param arg
+	 *            the new eostag
 	 */
 	public void seteostag(String arg) {
 		this.iseostag = true;
@@ -440,16 +448,19 @@
 	/**
 	 * Treetagger.
 	 *
-	 * @param modelfile the modelfile
-	 * @param infile the infile
-	 * @param outfile the outfile
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param modelfile
+	 *            the modelfile
+	 * @param infile
+	 *            the infile
+	 * @param outfile
+	 *            the outfile
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public void treetagger(String modelfile, String infile, String outfile)
-			throws IOException
-			// arg : The model file
-			// arg : The In file
-			// arg : The Out file
+	public void treetagger(String modelfile, String infile, String outfile) throws IOException
+	// arg : The model file
+	// arg : The In file
+	// arg : The Out file
 	{
 		ArrayList<String> args = new ArrayList<String>();
 		args.add(binpath + "tree-tagger"); //$NON-NLS-1$
@@ -461,7 +472,8 @@
 			args.add("-sgml"); //$NON-NLS-1$
 		if (isthreshold) {
 			args.add("-threshold"); //$NON-NLS-1$
-			args.add("" + threshold);} //$NON-NLS-1$
+			args.add("" + threshold); //$NON-NLS-1$
+		}
 		if (isprob)
 			args.add("-prob"); //$NON-NLS-1$
 		if (isignoreprefix)
@@ -484,19 +496,23 @@
 			args.add("-base"); //$NON-NLS-1$
 		if (iseps) {
 			args.add("-eps"); //$NON-NLS-1$
-			args.add("" + eps);} //$NON-NLS-1$
+			args.add("" + eps); //$NON-NLS-1$
+		}
 		if (islex) {
 			args.add("-lex"); //$NON-NLS-1$
-			args.add("" + lex);} //$NON-NLS-1$
+			args.add("" + lex); //$NON-NLS-1$
+		}
 		if (iswc) {
 			args.add("-wc"); //$NON-NLS-1$
-			args.add("" + wc);} //$NON-NLS-1$
+			args.add("" + wc); //$NON-NLS-1$
+		}
 		if (iseostag) {
 			args.add("-eos-tag"); //$NON-NLS-1$
-			args.add("" + eostag);} //$NON-NLS-1$
+			args.add("" + eostag); //$NON-NLS-1$
+		}
 
 		for (String option : options) {
-			//System.out.println("add manual option: "+option);
+			// System.out.println("add manual option: "+option);
 			if (option.trim().length() > 0)
 				args.add(option);
 		}
@@ -505,7 +521,8 @@
 		args.add("" + infile); //$NON-NLS-1$
 		args.add("" + outfile); //$NON-NLS-1$
 
-		if (debug) System.out.println(StringUtils.join(args.toArray(), " "));
+		if (debug)
+			System.out.println(StringUtils.join(args.toArray(), " "));
 
 		ProcessBuilder pb = new ProcessBuilder(args);
 		pb.redirectErrorStream(true);
@@ -528,8 +545,7 @@
 		} catch (Exception err) {
 		}
 		if (e != 0) {
-			System.err
-			.println("Process exited abnormally with code " + e + " at " + DateFormat.getDateInstance(DateFormat.FULL, Locale.UK).format(new Date())); //$NON-NLS-1$ //$NON-NLS-2$
+			System.err.println("Process exited abnormally with code " + e + " at " + DateFormat.getDateInstance(DateFormat.FULL, Locale.UK).format(new Date())); //$NON-NLS-1$ //$NON-NLS-2$
 
 			System.out.println("Args: ");
 			for (int c = 0; c < args.size(); c++)
@@ -540,34 +556,24 @@
 		File rootFile = new File(infile).getParentFile().getParentFile();
 		File report = new File(rootFile, "NLPToolsParameters.xml"); //$NON-NLS-1$
 		// System.out.println("create txm report file "+report.getAbsolutePath());
-		Writer writer = new OutputStreamWriter(new FileOutputStream(report),
-				"UTF-8"); //$NON-NLS-1$
+		Writer writer = new OutputStreamWriter(new FileOutputStream(report), "UTF-8"); //$NON-NLS-1$
 		writer.write("<txm:commandLine>" + //$NON-NLS-1$
 				"  <txm:os name=\"" //$NON-NLS-1$
-				+ System.getProperty("os.name") + "\" arch=\"x86\"/>" + //$NON-NLS-1$ //$NON-NLS-2$ 
+				+ System.getProperty("os.name") + "\" arch=\"x86\"/>" + //$NON-NLS-1$ //$NON-NLS-2$
 				"  <txm:osSeparator file=\"&#92;\" path=\"&#59;\" line=\"&#x0D;\"/>" //$NON-NLS-1$
-				+ 
-				"  <txm:program name=\"tree-tagger\" path=\"~/TXM/treetagger/bin\" desc=\"TreeTagger is the name of the project TreeTagger\" version=\"3.2\"/>" //$NON-NLS-1$
-				+ 
-				"  <txm:args>" //$NON-NLS-1$
-				+ 
-				"    <txm:arg name=\"token\" type=\"none\"/>" //$NON-NLS-1$
-				+ 
-				"    <txm:arg name=\"lemma\" type=\"none\"/>" //$NON-NLS-1$
-				+ 
-				"    <txm:arg name=\"sgml\" type=\"none\"/>" //$NON-NLS-1$
-				+ 
-				"    <txm:arg name=\"no-unknown\" type=\"none\"/>" //$NON-NLS-1$
-				+ 
-				"    <txm:arg name=\"eos-tag\" type=\"String\">&lt;s></txm:arg>" //$NON-NLS-1$
-				+ 
-				"    <txm:arg name=\"model\" type=\"String\">" //$NON-NLS-1$
-				+ modelfile
-				+ "</txm:arg>" + //$NON-NLS-1$ 
+				+ "  <txm:program name=\"tree-tagger\" path=\"~/TXM/treetagger/bin\" desc=\"TreeTagger is the name of the project TreeTagger\" version=\"3.2\"/>" //$NON-NLS-1$
+				+ "  <txm:args>" //$NON-NLS-1$
+				+ "    <txm:arg name=\"token\" type=\"none\"/>" //$NON-NLS-1$
+				+ "    <txm:arg name=\"lemma\" type=\"none\"/>" //$NON-NLS-1$
+				+ "    <txm:arg name=\"sgml\" type=\"none\"/>" //$NON-NLS-1$
+				+ "    <txm:arg name=\"no-unknown\" type=\"none\"/>" //$NON-NLS-1$
+				+ "    <txm:arg name=\"eos-tag\" type=\"String\">&lt;s></txm:arg>" //$NON-NLS-1$
+				+ "    <txm:arg name=\"model\" type=\"String\">" //$NON-NLS-1$
+				+ modelfile + "</txm:arg>" + //$NON-NLS-1$
 				"    <txm:arg name=\"input\" type=\"String\">" + infile //$NON-NLS-1$
-				+ "</txm:arg>" + //$NON-NLS-1$ 
+				+ "</txm:arg>" + //$NON-NLS-1$
 				"    <txm:arg name=\"output\" type=\"String\">" //$NON-NLS-1$
-				+ outfile + "</txm:arg>" + //$NON-NLS-1$ 
+				+ outfile + "</txm:arg>" + //$NON-NLS-1$
 				"  </txm:args>" + //$NON-NLS-1$
 				"</txm:commandLine>"); //$NON-NLS-1$
 		writer.flush();
@@ -584,7 +590,8 @@
 	/**
 	 * Sets the cl.
 	 *
-	 * @param arg the new cl
+	 * @param arg
+	 *            the new cl
 	 */
 	public void setcl(int arg) {
 		this.iscl = true;
@@ -608,7 +615,8 @@
 	/**
 	 * Sets the dtg.
 	 *
-	 * @param arg the new dtg
+	 * @param arg
+	 *            the new dtg
 	 */
 	public void setdtg(float arg) {
 		this.isdtg = true;
@@ -632,7 +640,8 @@
 	/**
 	 * Sets the sw.
 	 *
-	 * @param arg the new sw
+	 * @param arg
+	 *            the new sw
 	 */
 	public void setsw(float arg) {
 		this.issw = true;
@@ -656,7 +665,8 @@
 	/**
 	 * Sets the atg.
 	 *
-	 * @param arg the new atg
+	 * @param arg
+	 *            the new atg
 	 */
 	public void setatg(float arg) {
 		this.isatg = true;
@@ -680,7 +690,8 @@
 	/**
 	 * Sets the st.
 	 *
-	 * @param arg the new st
+	 * @param arg
+	 *            the new st
 	 */
 	public void setst(String arg) {
 		this.isst = true;
@@ -704,7 +715,8 @@
 	/**
 	 * Sets the ecw.
 	 *
-	 * @param arg the new ecw
+	 * @param arg
+	 *            the new ecw
 	 */
 	public void setecw(float arg) {
 		this.isecw = true;
@@ -728,7 +740,8 @@
 	/**
 	 * Sets the lt.
 	 *
-	 * @param arg the new lt
+	 * @param arg
+	 *            the new lt
 	 */
 	public void setlt(float arg) {
 		this.islt = true;
@@ -764,18 +777,22 @@
 	/**
 	 * Traintreetagger.
 	 *
-	 * @param lexiconfile the lexiconfile
-	 * @param openclassfile the openclassfile
-	 * @param infile the infile
-	 * @param outfile the outfile
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param lexiconfile
+	 *            the lexiconfile
+	 * @param openclassfile
+	 *            the openclassfile
+	 * @param infile
+	 *            the infile
+	 * @param outfile
+	 *            the outfile
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public void traintreetagger(String lexiconfile, String openclassfile,
-			String infile, String outfile) throws IOException
-			// arg : The lexicon file
-			// arg : The open class file
-			// arg : The In file
-			// arg : The Out file
+	public void traintreetagger(String lexiconfile, String openclassfile, String infile, String outfile) throws IOException
+	// arg : The lexicon file
+	// arg : The open class file
+	// arg : The In file
+	// arg : The Out file
 	{
 		ArrayList<String> args = new ArrayList<String>();
 		args.add(binpath + "train-tree-tagger"); //$NON-NLS-1$
@@ -784,25 +801,32 @@
 
 		if (iscl) {
 			args.add("-cl"); //$NON-NLS-1$
-			args.add("" + cl);} //$NON-NLS-1$
+			args.add("" + cl); //$NON-NLS-1$
+		}
 		if (isdtg) {
 			args.add("-dtg"); //$NON-NLS-1$
-			args.add("" + dtg);} //$NON-NLS-1$
+			args.add("" + dtg); //$NON-NLS-1$
+		}
 		if (issw) {
 			args.add("-sw"); //$NON-NLS-1$
-			args.add("" + sw);} //$NON-NLS-1$
+			args.add("" + sw); //$NON-NLS-1$
+		}
 		if (isatg) {
 			args.add("-atg"); //$NON-NLS-1$
-			args.add("" + atg);} //$NON-NLS-1$
+			args.add("" + atg); //$NON-NLS-1$
+		}
 		if (isst) {
 			args.add("-st"); //$NON-NLS-1$
-			args.add("" + st);} //$NON-NLS-1$
+			args.add("" + st); //$NON-NLS-1$
+		}
 		if (isecw) {
 			args.add("-ecw"); //$NON-NLS-1$
-			args.add("" + ecw);} //$NON-NLS-1$
+			args.add("" + ecw); //$NON-NLS-1$
+		}
 		if (islt) {
 			args.add("-lt"); //$NON-NLS-1$
-			args.add("" + lt);} //$NON-NLS-1$
+			args.add("" + lt); //$NON-NLS-1$
+		}
 		if (isutf8)
 			args.add("-utf8"); //$NON-NLS-1$
 		args.add("" + lexiconfile); //$NON-NLS-1$
@@ -811,7 +835,8 @@
 		args.add("" + outfile); //$NON-NLS-1$
 
 		ProcessBuilder pb = new ProcessBuilder(args);
-		if (debug) System.out.println(StringUtils.join(args.toArray(), " "));
+		if (debug)
+			System.out.println(StringUtils.join(args.toArray(), " "));
 		pb.redirectErrorStream(true);
 		Process process = null;
 		try {
@@ -843,13 +868,14 @@
 	/**
 	 * The main method.
 	 *
-	 * @param args the arguments
+	 * @param args
+	 *            the arguments
 	 */
 	public static void main(String[] args) {
 
 	}
 
 	public void kill() {
-		//TODO uses TreeTagger4j and manage the process
+		// TODO uses TreeTagger4j and manage the process
 	}
 }
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/treetagger/ModelCatalog.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/treetagger/ModelCatalog.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/treetagger/ModelCatalog.java	(revision 2402)
@@ -18,203 +18,215 @@
 // You should have received a copy of the GNU General
 // Public License along with the TXM platform. If not, see
 // http://www.gnu.org/licenses.
-
-//
-// This file is part of the TXM platform.
-//
-// The TXM platform is free software: you can redistribute it and/or modif y
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
-// 
-// 
-// 
-// $LastChangedDate: 2013-08-29 14:23:55 +0200 (jeu., 29 août 2013) $
-// $LastChangedRevision: 2519 $
-// $LastChangedBy: nilskredens $ 
-//
-package org.txm.utils.treetagger;
-
-import java.io.File;
-import java.util.HashMap;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-// TODO: Auto-generated Javadoc
-/**
- * build links between a lang and encoding and model file @ author mdecorde.
- */
-public class ModelCatalog extends HashMap<String, Model> {
-	
-	/** The default lang. */
-	String defaultLang = "fr"; //$NON-NLS-1$
-	
-	/** The default encoding. */
-	String defaultEncoding = "UTF-8"; //$NON-NLS-1$
-	
-	/** The default version. */
-	String defaultVersion = "3.2"; //$NON-NLS-1$
-	
-	/** The modelsdescriptor. */
-	File modelsdescriptor;
-
-	/**
-	 * Instantiates a new model catalog.
-	 *
-	 * @param modelsdescriptor the modelsdescriptor
-	 */
-	public ModelCatalog(File modelsdescriptor) {
-		this.modelsdescriptor = modelsdescriptor;
-		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-		DocumentBuilder db;
-		try {
-			db = dbf.newDocumentBuilder();
-			Document doc = db.parse(modelsdescriptor);
-			Element root = doc.getDocumentElement();
-
-			NodeList models = root.getElementsByTagName("model"); //$NON-NLS-1$
-			for (int i = 0; i < models.getLength(); i++) {
-				Element model = (Element) models.item(i);
-				this.put(model.getAttribute("lang"), new Model(model)); //$NON-NLS-1$
-			}
-		} catch (Exception e) {
-			org.txm.utils.logger.Log.printStackTrace(e);
-		}
-	}
-
-	/**
-	 * Describe.
-	 */
-	public void describe() {
-		System.out.println("Model Catalog : " + modelsdescriptor); //$NON-NLS-1$
-		for (Model m : this.values()) {
-			m.describe();
-		}
-	}
-
-	/**
-	 * Gets the model.
-	 *
-	 * @param lang the lang
-	 * @param encoding the encoding
-	 * @param version the version
-	 * @return the model
-	 */
-	public String getModel(String lang, String encoding, String version) {
-		Model m = this.get(lang);
-		return m.get(encoding + version);
-	}
-
-	/**
-	 * Gets the model by encoding.
-	 *
-	 * @param lang the lang
-	 * @param encoding the encoding
-	 * @return the model by encoding
-	 */
-	public String getModelByEncoding(String lang, String encoding) {
-		Model m = this.get(lang);
-		return m.byencoding.get(encoding);
-	}
-
-	/**
-	 * Gets the model by version.
-	 *
-	 * @param lang the lang
-	 * @param version the version
-	 * @return the model by version
-	 */
-	public String getModelByVersion(String lang, String version) {
-		Model m = this.get(lang);
-		return m.byversion.get(version);
-	}
-
-	/**
-	 * Gets the model.
-	 *
-	 * @param lang the lang
-	 * @return the model
-	 */
-	public String getModel(String lang) {
-		return getModel(lang, defaultEncoding, defaultVersion);
-	}
-
-	/**
-	 * Gets the default lang.
-	 *
-	 * @return the default lang
-	 */
-	public String getDefaultLang() {
-		return defaultLang;
-	}
-
-	/**
-	 * Gets the default encoding.
-	 *
-	 * @return the default encoding
-	 */
-	public String getDefaultEncoding() {
-		return defaultEncoding;
-	}
-
-	/**
-	 * Gets the default version.
-	 *
-	 * @return the default version
-	 */
-	public String getDefaultVersion() {
-		return defaultVersion;
-	}
-
-	/**
-	 * Sets the default lang.
-	 *
-	 * @param defaultLang the new default lang
-	 */
-	public void setDefaultLang(String defaultLang) {
-		this.defaultLang = defaultLang;
-	}
-
-	/**
-	 * Sets the default encoding.
-	 *
-	 * @param defaultEncoding the new default encoding
-	 */
-	public void setDefaultEncoding(String defaultEncoding) {
-		this.defaultEncoding = defaultEncoding;
-	}
-
-	/**
-	 * Sets the default version.
-	 *
-	 * @param defaultVersion the new default version
-	 */
-	public void setDefaultVersion(String defaultVersion) {
-		this.defaultVersion = defaultVersion;
-	}
-
-	/**
-	 * The main method.
-	 *
-	 * @param args the arguments
-	 */
-	public static void main(String args[]) {
-		File modelsdescriptor = new File(
-				"C:\\Documents and Settings\\H\\Bureau\\eclipseRCP\\eclipse\\models.xml"); //$NON-NLS-1$
-		ModelCatalog catalog = new ModelCatalog(modelsdescriptor);
-		catalog.describe();
-	}
-}
+
+//
+// This file is part of the TXM platform.
+//
+// The TXM platform is free software: you can redistribute it and/or modif y
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// 
+// 
+// $LastChangedDate: 2013-08-29 14:23:55 +0200 (jeu., 29 août 2013) $
+// $LastChangedRevision: 2519 $
+// $LastChangedBy: nilskredens $ 
+//
+package org.txm.utils.treetagger;
+
+import java.io.File;
+import java.util.HashMap;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+// TODO: Auto-generated Javadoc
+/**
+ * build links between a lang and encoding and model file @ author mdecorde.
+ */
+public class ModelCatalog extends HashMap<String, Model> {
+
+	/** The default lang. */
+	String defaultLang = "fr"; //$NON-NLS-1$
+
+	/** The default encoding. */
+	String defaultEncoding = "UTF-8"; //$NON-NLS-1$
+
+	/** The default version. */
+	String defaultVersion = "3.2"; //$NON-NLS-1$
+
+	/** The modelsdescriptor. */
+	File modelsdescriptor;
+
+	/**
+	 * Instantiates a new model catalog.
+	 *
+	 * @param modelsdescriptor
+	 *            the modelsdescriptor
+	 */
+	public ModelCatalog(File modelsdescriptor) {
+		this.modelsdescriptor = modelsdescriptor;
+		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+		DocumentBuilder db;
+		try {
+			db = dbf.newDocumentBuilder();
+			Document doc = db.parse(modelsdescriptor);
+			Element root = doc.getDocumentElement();
+
+			NodeList models = root.getElementsByTagName("model"); //$NON-NLS-1$
+			for (int i = 0; i < models.getLength(); i++) {
+				Element model = (Element) models.item(i);
+				this.put(model.getAttribute("lang"), new Model(model)); //$NON-NLS-1$
+			}
+		} catch (Exception e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+		}
+	}
+
+	/**
+	 * Describe.
+	 */
+	public void describe() {
+		System.out.println("Model Catalog : " + modelsdescriptor); //$NON-NLS-1$
+		for (Model m : this.values()) {
+			m.describe();
+		}
+	}
+
+	/**
+	 * Gets the model.
+	 *
+	 * @param lang
+	 *            the lang
+	 * @param encoding
+	 *            the encoding
+	 * @param version
+	 *            the version
+	 * @return the model
+	 */
+	public String getModel(String lang, String encoding, String version) {
+		Model m = this.get(lang);
+		return m.get(encoding + version);
+	}
+
+	/**
+	 * Gets the model by encoding.
+	 *
+	 * @param lang
+	 *            the lang
+	 * @param encoding
+	 *            the encoding
+	 * @return the model by encoding
+	 */
+	public String getModelByEncoding(String lang, String encoding) {
+		Model m = this.get(lang);
+		return m.byencoding.get(encoding);
+	}
+
+	/**
+	 * Gets the model by version.
+	 *
+	 * @param lang
+	 *            the lang
+	 * @param version
+	 *            the version
+	 * @return the model by version
+	 */
+	public String getModelByVersion(String lang, String version) {
+		Model m = this.get(lang);
+		return m.byversion.get(version);
+	}
+
+	/**
+	 * Gets the model.
+	 *
+	 * @param lang
+	 *            the lang
+	 * @return the model
+	 */
+	public String getModel(String lang) {
+		return getModel(lang, defaultEncoding, defaultVersion);
+	}
+
+	/**
+	 * Gets the default lang.
+	 *
+	 * @return the default lang
+	 */
+	public String getDefaultLang() {
+		return defaultLang;
+	}
+
+	/**
+	 * Gets the default encoding.
+	 *
+	 * @return the default encoding
+	 */
+	public String getDefaultEncoding() {
+		return defaultEncoding;
+	}
+
+	/**
+	 * Gets the default version.
+	 *
+	 * @return the default version
+	 */
+	public String getDefaultVersion() {
+		return defaultVersion;
+	}
+
+	/**
+	 * Sets the default lang.
+	 *
+	 * @param defaultLang
+	 *            the new default lang
+	 */
+	public void setDefaultLang(String defaultLang) {
+		this.defaultLang = defaultLang;
+	}
+
+	/**
+	 * Sets the default encoding.
+	 *
+	 * @param defaultEncoding
+	 *            the new default encoding
+	 */
+	public void setDefaultEncoding(String defaultEncoding) {
+		this.defaultEncoding = defaultEncoding;
+	}
+
+	/**
+	 * Sets the default version.
+	 *
+	 * @param defaultVersion
+	 *            the new default version
+	 */
+	public void setDefaultVersion(String defaultVersion) {
+		this.defaultVersion = defaultVersion;
+	}
+
+	/**
+	 * The main method.
+	 *
+	 * @param args
+	 *            the arguments
+	 */
+	public static void main(String args[]) {
+		File modelsdescriptor = new File("C:\\Documents and Settings\\H\\Bureau\\eclipseRCP\\eclipse\\models.xml"); //$NON-NLS-1$
+		ModelCatalog catalog = new ModelCatalog(modelsdescriptor);
+		catalog.describe();
+	}
+}
Index: tmp/org.txm.utils/src/org/txm/utils/treetagger/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/treetagger/package.html	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/treetagger/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>TreeTagger wrapper : learning and tagging</p>
+	<p>TreeTagger wrapper : learning and tagging</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/treetagger/Model.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/treetagger/Model.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/treetagger/Model.java	(revision 2402)
@@ -18,102 +18,103 @@
 // You should have received a copy of the GNU General
 // Public License along with the TXM platform. If not, see
 // http://www.gnu.org/licenses.
-
-//
-// This file is part of the TXM platform.
-//
-// The TXM platform is free software: you can redistribute it and/or modif y
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
-// 
-// 
-// 
-// $LastChangedDate: 2013-05-06 17:38:43 +0200 (lun., 06 mai 2013) $
-// $LastChangedRevision: 2386 $
-// $LastChangedBy: mdecorde $ 
-//
-package org.txm.utils.treetagger;
-
-import java.util.HashMap;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-// TODO: Auto-generated Javadoc
-/**
- * A TreeTagger model varies on language and encoding @ author mdecorde.
- */
-public class Model extends HashMap<String, String> {
-	
-	/** The Constant serialVersionUID. */
-	private static final long serialVersionUID = 4490061845502678357L;
-	
-	/** The lang. */
-	String lang;
-	
-	/** The country. */
-	String country;
-	
-	/** The byversion. */
-	HashMap<String, String> byversion = new HashMap<String, String>();
-	
-	/** The byencoding. */
-	HashMap<String, String> byencoding = new HashMap<String, String>();
-
-	/**
-	 * Instantiates a new model.
-	 *
-	 * @param model the model
-	 */
-	public Model(Element model) {
-		lang = model.getAttribute("lang"); //$NON-NLS-1$
-		country = model.getAttribute("country"); //$NON-NLS-1$
-
-		NodeList files = model.getElementsByTagName("file"); //$NON-NLS-1$
-		for (int i = 0; i < files.getLength(); i++) {
-			Element file = (Element) files.item(i);
-			this.put(file.getAttribute("encoding") //$NON-NLS-1$
-					+ file.getAttribute("version"), file.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
-			this.byversion.put(file.getAttribute("version"), file //$NON-NLS-1$
-					.getAttribute("name")); //$NON-NLS-1$
-			this.byencoding.put(file.getAttribute("encoding"), file //$NON-NLS-1$
-					.getAttribute("name")); //$NON-NLS-1$
-		}
-	}
-
-	/**
-	 * Gets the lang.
-	 *
-	 * @return the lang
-	 */
-	public String getLang() {
-		return lang;
-	}
-
-	/**
-	 * Gets the country.
-	 *
-	 * @return the country
-	 */
-	public String getCountry() {
-		return country;
-	}
-
-	/**
-	 * Describe.
-	 */
-	public void describe() {
-		System.out.println(" Model: lang=" + lang + ", country=" + country); //$NON-NLS-1$ //$NON-NLS-2$
-		for (String encoding : this.byencoding.keySet())
-			System.out.println("  File: encoding=" + encoding + ", name=" //$NON-NLS-1$ //$NON-NLS-2$
-					+ this.byencoding.get(encoding));
-	}
-}
+
+//
+// This file is part of the TXM platform.
+//
+// The TXM platform is free software: you can redistribute it and/or modif y
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// 
+// 
+// $LastChangedDate: 2013-05-06 17:38:43 +0200 (lun., 06 mai 2013) $
+// $LastChangedRevision: 2386 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils.treetagger;
+
+import java.util.HashMap;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A TreeTagger model varies on language and encoding @ author mdecorde.
+ */
+public class Model extends HashMap<String, String> {
+
+	/** The Constant serialVersionUID. */
+	private static final long serialVersionUID = 4490061845502678357L;
+
+	/** The lang. */
+	String lang;
+
+	/** The country. */
+	String country;
+
+	/** The byversion. */
+	HashMap<String, String> byversion = new HashMap<String, String>();
+
+	/** The byencoding. */
+	HashMap<String, String> byencoding = new HashMap<String, String>();
+
+	/**
+	 * Instantiates a new model.
+	 *
+	 * @param model
+	 *            the model
+	 */
+	public Model(Element model) {
+		lang = model.getAttribute("lang"); //$NON-NLS-1$
+		country = model.getAttribute("country"); //$NON-NLS-1$
+
+		NodeList files = model.getElementsByTagName("file"); //$NON-NLS-1$
+		for (int i = 0; i < files.getLength(); i++) {
+			Element file = (Element) files.item(i);
+			this.put(file.getAttribute("encoding") //$NON-NLS-1$
+					+ file.getAttribute("version"), file.getAttribute("name")); //$NON-NLS-1$ //$NON-NLS-2$
+			this.byversion.put(file.getAttribute("version"), file //$NON-NLS-1$
+					.getAttribute("name")); //$NON-NLS-1$
+			this.byencoding.put(file.getAttribute("encoding"), file //$NON-NLS-1$
+					.getAttribute("name")); //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Gets the lang.
+	 *
+	 * @return the lang
+	 */
+	public String getLang() {
+		return lang;
+	}
+
+	/**
+	 * Gets the country.
+	 *
+	 * @return the country
+	 */
+	public String getCountry() {
+		return country;
+	}
+
+	/**
+	 * Describe.
+	 */
+	public void describe() {
+		System.out.println(" Model: lang=" + lang + ", country=" + country); //$NON-NLS-1$ //$NON-NLS-2$
+		for (String encoding : this.byencoding.keySet())
+			System.out.println("  File: encoding=" + encoding + ", name=" //$NON-NLS-1$ //$NON-NLS-2$
+					+ this.byencoding.get(encoding));
+	}
+}
Index: tmp/org.txm.utils/src/org/txm/utils/network/SystemProxyDetector.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/network/SystemProxyDetector.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/network/SystemProxyDetector.java	(revision 2402)
@@ -15,116 +15,123 @@
 import org.txm.utils.logger.Log;
 
 /**
- * This class implements various manner to retrieve the system proxy configuration.
- * It tries to get the configuration from the RCP store and from the Java system properties. 
+ * This class implements various manner to retrieve the system proxy
+ * configuration. It tries to get the configuration from the RCP store and from
+ * the Java system properties.
  * 
  * @author mdecorde
  * @author sjacquot
  *
  */
 public class SystemProxyDetector {
-	
+
 	public String proxy_user = "";
 	public String proxy_password = "";
 	public String proxy_host = "";
 	public int proxy_port = 0;
 
-
 	/**
-	 * Creates a system proxy detector and tries to retrieve the system proxy configuration from  the RCP store and from the Java system properties.
+	 * Creates a system proxy detector and tries to retrieve the system proxy
+	 * configuration from the RCP store and from the Java system properties.
 	 */
 	@SuppressWarnings({ "rawtypes", "unchecked" })
 	public SystemProxyDetector() {
 		ServiceTracker proxyTracker = null;
 		try {
 			Bundle c = FrameworkUtil.getBundle(this.getClass());
-			if (c == null) return; // abord;
+			if (c == null)
+				return; // abord;
 			BundleContext bc = c.getBundleContext();
-			if (bc == null) return; // abord;
+			if (bc == null)
+				return; // abord;
 			proxyTracker = new ServiceTracker(bc, IProxyService.class.getName(), null);
 			proxyTracker.open();
 
-			IProxyService proxyService = (IProxyService)proxyTracker.getService();
-			if (proxyService.hasSystemProxies()) { // Always response false for Mac OS X, because there is no Eclipse plugin that manages the system proxies
+			IProxyService proxyService = (IProxyService) proxyTracker.getService();
+			if (proxyService.hasSystemProxies()) { // Always response false for Mac OS X, because there is no Eclipse plugin that
+													// manages the system proxies
 				try {
 					List<Proxy> proxies = ProxySelector.getDefault().select(new URI("http://textometrie.ens-lyon.fr"));
 					if (proxies != null) {
 						for (Proxy proxy : proxies) {
 							if (proxy.type().equals(Proxy.Type.HTTP)) {
 								InetSocketAddress addr = (InetSocketAddress) proxy.address();
-								if(addr != null) {
+								if (addr != null) {
 									proxy_host = addr.getHostName();
 									proxy_port = addr.getPort();
 									break; // ok done
 								}
 							}
 						}
-					} 
-				} catch(URISyntaxException e) {
+					}
+				} catch (URISyntaxException e) {
 					Log.printStackTrace(e);
 				}
 			}
-			
+
 			// last resort to find out proxy configuration
-			if (proxy_host == null || proxy_host.length() == 0) { 
+			if (proxy_host == null || proxy_host.length() == 0) {
 				proxy_host = System.getProperty("http.proxyHost");
 				String s = System.getProperty("http.proxyPort");
-				if (s != null) proxy_port =  Integer.parseInt(s);
+				if (s != null)
+					proxy_port = Integer.parseInt(s);
 				proxy_password = System.getProperty("http.proxyPassword");
 				proxy_user = System.getProperty("http.proxyUser");
 			}
-			
-			
+
 			// Log
-			if(proxy_host != null && !proxy_host.isEmpty())	{
+			if (proxy_host != null && !proxy_host.isEmpty()) {
 				Log.info("System proxy network configuration detected.");
 			}
-			
+
 			// TODO: useless ?
-//			if (proxyTracker == null) {
-//				IProxyData[] data = proxyService.getProxyData();
-//				for (IProxyData d : data) {
-//					proxy_host = d.getHost();
-//					if (IProxyData.HTTP_PROXY_TYPE.equals(d.getType()) && proxy_host != null && proxy_host.length() > 0) {
-//						proxy_port = d.getPort();
-//						proxy_password = d.getPassword();
-//						proxy_user = d.getUserId();
-//						//System.out.println("proxy_server="+proxy_server+" proxy_port="+proxy_port);
-//						
-//						 break; // ok done
-//					} else {
-//						proxy_host = null;
-//					}
-//				}
-//			}
+			// if (proxyTracker == null) {
+			// IProxyData[] data = proxyService.getProxyData();
+			// for (IProxyData d : data) {
+			// proxy_host = d.getHost();
+			// if (IProxyData.HTTP_PROXY_TYPE.equals(d.getType()) && proxy_host != null &&
+			// proxy_host.length() > 0) {
+			// proxy_port = d.getPort();
+			// proxy_password = d.getPassword();
+			// proxy_user = d.getUserId();
+			// //System.out.println("proxy_server="+proxy_server+" proxy_port="+proxy_port);
+			//
+			// break; // ok done
+			// } else {
+			// proxy_host = null;
+			// }
+			// }
+			// }
 		} catch (Exception e) {
 			Log.printStackTrace(e);
 		} finally {
-			if (proxyTracker != null) proxyTracker.close();
+			if (proxyTracker != null)
+				proxyTracker.close();
 		}
 	}
 
 	/**
 	 * Checks if a system proxy has been detected.
+	 * 
 	 * @return
 	 */
 	public boolean isSystemProxyDetected() {
 		return proxy_host != null && !proxy_host.isEmpty();
 	}
 
-
 	/**
 	 * Returns the HTTP system proxy configuration as URL if exists otherwise false.
+	 * 
 	 * @return
 	 */
 	public String getHttpProxyUrl() {
-		
+
 		String proxyUrl = null;
 		String userData = "";
-		
-		if(this.isSystemProxyDetected())	{
+
+		if (this.isSystemProxyDetected()) {
 			proxyUrl = proxy_host + ":" + proxy_port;
-			
+
 			if (proxy_user != null && !proxy_user.isEmpty()) {
 				userData = proxy_user;
 				proxyUrl = "@" + proxyUrl; //$NON-NLS-1$
@@ -132,15 +139,14 @@
 			if (proxy_password != null && !proxy_password.isEmpty()) {
 				userData += ":" + proxy_password; //$NON-NLS-1$
 			}
-		}
-		else	{
+		} else {
 			Log.warning("HTTP system proxy configuration is not set.");
 		}
-		
-		if(proxyUrl != null)	{
+
+		if (proxyUrl != null) {
 			proxyUrl = "http://" + userData + proxyUrl; //$NON-NLS-1$
 		}
-		
+
 		return proxyUrl;
 	}
 
Index: tmp/org.txm.utils/src/org/txm/utils/Sh.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Sh.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/Sh.java	(revision 2402)
@@ -45,20 +45,21 @@
  * The Class Sh.
  */
 public class Sh {
-	
+
 	/** The binpath. */
 	String binpath = ""; //$NON-NLS-1$
 
 	/** The version. */
 	String version = "0.0.0"; //$NON-NLS-1$
-	
+
 	/** The desc. */
 	String desc = "Shell"; //$NON-NLS-1$
 
 	/**
 	 * Instantiates a new sh.
 	 *
-	 * @param binpath the binpath
+	 * @param binpath
+	 *            the binpath
 	 */
 	public Sh(String binpath) {
 		// System.out.println("set binpath "+binpath);
@@ -68,14 +69,15 @@
 	// execute command line in argument
 	/** The isc. */
 	private Boolean isc = false;
-	
+
 	/** The c. */
 	private String c;
 
 	/**
 	 * Sets the isc.
 	 *
-	 * @param arg the new isc
+	 * @param arg
+	 *            the new isc
 	 */
 	public void setIsc(String arg) {
 		this.isc = true;
@@ -93,7 +95,8 @@
 	/**
 	 * Shexe.
 	 *
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public void shexe() throws IOException {
 		ArrayList<String> args = new ArrayList<String>();
@@ -124,11 +127,8 @@
 			org.txm.utils.logger.Log.printStackTrace(e1);
 		}
 		if (e != 0) {
-			Log.fine(UtilsCoreMessages.Sh_4
-					+ e
-					+ " at " //$NON-NLS-1$
-					+ DateFormat.getDateInstance(DateFormat.FULL, Locale.UK)
-							.format(new Date()));
+			Log.fine(UtilsCoreMessages.Sh_4 + e + " at " //$NON-NLS-1$
+					+ DateFormat.getDateInstance(DateFormat.FULL, Locale.UK).format(new Date()));
 		}
 	}
 
@@ -136,7 +136,8 @@
 	/**
 	 * Sh.
 	 *
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public void sh() throws IOException {
 		ArrayList<String> args = new ArrayList<String>();
@@ -169,18 +170,16 @@
 			org.txm.utils.logger.Log.printStackTrace(e1);
 		}
 		if (e != 0) {
-			Log.fine(UtilsCoreMessages.Sh_4
-					+ e
-					+ " at " //$NON-NLS-1$
-					+ DateFormat.getDateInstance(DateFormat.FULL, Locale.UK)
-							.format(new Date()));
+			Log.fine(UtilsCoreMessages.Sh_4 + e + " at " //$NON-NLS-1$
+					+ DateFormat.getDateInstance(DateFormat.FULL, Locale.UK).format(new Date()));
 		}
 	}
 
 	/**
 	 * The main method.
 	 *
-	 * @param args the arguments
+	 * @param args
+	 *            the arguments
 	 */
 	public static void main(String[] args) {
 		// Sh tt = new Sh("");
Index: tmp/org.txm.utils/src/org/txm/utils/TableReader.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/TableReader.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/TableReader.java	(revision 2402)
@@ -16,18 +16,18 @@
  *
  */
 public class TableReader {
-	
+
 	File tableFile;
 	String mode = "tsv";
-	
+
 	HashMap<String, String> record;
 	CsvReader tsvReader = null;
 	ReadExcel excelReader = null;
 	ReadODS odsReader;
-	
+
 	public TableReader(File tableFile) throws Exception {
 		this.tableFile = tableFile;
-		
+
 		if (tableFile.getName().toLowerCase().endsWith(".xlsx")) {
 			mode = "excel";
 			excelReader = new ReadExcel(tableFile, null);
@@ -39,23 +39,24 @@
 			mode = "tsv";
 		}
 	}
-	
+
 	public String getMode() {
 		return mode;
 	}
-	
+
 	public boolean readHeaders() throws IOException {
 		if (tsvReader != null) {
 			return tsvReader.readHeaders();
 		} else if (excelReader != null) {
 			return excelReader.readHeaders();
 		}
-		
+
 		return false;
 	}
-	
+
 	/**
 	 * read the next record
+	 * 
 	 * @return true if there is another record
 	 * @throws IOException
 	 */
@@ -75,10 +76,10 @@
 				return false;
 			}
 		}
-		
+
 		return false;
 	}
-	
+
 	public HashMap<String, String> getRecord() {
 		return record;
 	}
@@ -89,18 +90,20 @@
 		} else if (excelReader != null) {
 			return excelReader.getHeaders();
 		}
-		
+
 		return null;
 	}
-	
+
 	String EMPTY = "";
+
 	public String get(String h) throws IOException {
 		String s = getRecord().get(h);
-		if (s == null) return EMPTY;
-		
+		if (s == null)
+			return EMPTY;
+
 		return s;
 	}
-	
+
 	public void close() throws IOException {
 		if (tsvReader != null) {
 			tsvReader.close();
@@ -108,21 +111,21 @@
 			excelReader.close();
 		}
 	}
-	
+
 	public static void main(String[] args) {
 		try {
 			System.out.println("Loading...");
 			TableReader reader = new TableReader(new File("/home/mdecorde/TEMP/ANTRACT/AF/ANTRACT_AF_Notices_3oct19.xlsx"));
 			System.out.println("Table loaded");
-			
+
 			System.out.println("Reading headers...");
 			reader.readHeaders();
 			System.out.println(Arrays.toString(reader.getHeaders()));
-			
+
 			System.out.println("Reading record...");
 			reader.readRecord();
 			System.out.println(reader.getRecord());
-			
+
 			System.out.println("Reading record...");
 			reader.readRecord();
 			System.out.println(reader.getRecord());
Index: tmp/org.txm.utils/src/org/txm/utils/OSDetector.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/OSDetector.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/OSDetector.java	(revision 2402)
@@ -3,47 +3,56 @@
 import org.apache.tools.ant.taskdefs.condition.Os;
 
 /**
- * Utility class dedicated to operating system detection of the runtime target. 
+ * Utility class dedicated to operating system detection of the runtime target.
+ * 
  * @author sjacquot
  *
  */
 public class OSDetector {
 
-	
 	/**
-	 * Checks if the operating system of the runtime target is of Windows family type.
-	 * @return true if the operating system of the runtime target is of Windows family type
+	 * Checks if the operating system of the runtime target is of Windows family
+	 * type.
+	 * 
+	 * @return true if the operating system of the runtime target is of Windows
+	 *         family type
 	 */
-	public static boolean isFamilyWindows()	{
+	public static boolean isFamilyWindows() {
 		return Os.isFamily(Os.FAMILY_WINDOWS);
 	}
-	
+
 	/**
 	 * Checks if the operating system of the runtime target is of Unix family type.
-	 * @return true if the operating system of the runtime target is of Unix family type
+	 * 
+	 * @return true if the operating system of the runtime target is of Unix family
+	 *         type
 	 */
-	public static boolean isFamilyUnix()	{
+	public static boolean isFamilyUnix() {
 		return Os.isFamily(Os.FAMILY_UNIX);
 	}
 
 	/**
 	 * Checks if the operating system of the runtime target is of Mac family type.
-	 * @return true if the operating system of the runtime target is of Mac family type
+	 * 
+	 * @return true if the operating system of the runtime target is of Mac family
+	 *         type
 	 */
-	public static boolean isFamilyMac()	{
+	public static boolean isFamilyMac() {
 		return Os.isFamily(Os.FAMILY_MAC);
 	}
-	
+
 	/**
-	 * Checks if the operating system of the runtime target is 64bit architecture. 
+	 * Checks if the operating system of the runtime target is 64bit architecture.
+	 * 
 	 * @return
 	 */
-	public static boolean isArch64()	{
+	public static boolean isArch64() {
 		return System.getProperty("java.vm.name").toLowerCase().indexOf("64") >= 0; //$NON-NLS-1$ //$NON-NLS-2$
 	}
-	
+
 	/**
 	 * Test method.
+	 * 
 	 * @param args
 	 */
 	public static void main(String[] args) {
@@ -55,5 +64,5 @@
 		System.out.println("Unix OS family: " + isFamilyUnix()); //$NON-NLS-1$
 		System.out.println("Mac OS family: " + isFamilyMac()); //$NON-NLS-1$
 	}
-	
+
 }
Index: tmp/org.txm.utils/src/org/txm/utils/LangDetector.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/LangDetector.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/LangDetector.java	(revision 2402)
@@ -39,25 +39,23 @@
 		translations.put("slovenian", "sl");
 		translations.put("polish", "pl");
 	}
-	
+
 	TextCategorizer guesser = new TextCategorizer();
 
 	public LangDetector(File file) throws DOMException, IOException, ParserConfigurationException, SAXException {
 		this(file, "UTF-8");
 	}
 
-	public LangDetector(File file, String encoding) throws DOMException, IOException, ParserConfigurationException, SAXException
-	{
-		if(file.isDirectory())
+	public LangDetector(File file, String encoding) throws DOMException, IOException, ParserConfigurationException, SAXException {
+		if (file.isDirectory())
 			processDirectory(file);
 		else
 			processFile(file);
 	}
 
-	private void processDirectory(File dir) throws IOException, DOMException, ParserConfigurationException, SAXException
-	{
-		//println "process $dir"
-		if(dir.isDirectory()) {
+	private void processDirectory(File dir) throws IOException, DOMException, ParserConfigurationException, SAXException {
+		// println "process $dir"
+		if (dir.isDirectory()) {
 			for (File file : dir.listFiles(IOUtils.HIDDENFILE_FILTER))
 				if (file.isFile())
 					processFile(file);
@@ -67,32 +65,30 @@
 
 	}
 
-	private void processFile(File file) throws IOException, DOMException, ParserConfigurationException, SAXException
-	{
-		//println "process $file"
+	private void processFile(File file) throws IOException, DOMException, ParserConfigurationException, SAXException {
+		// println "process $file"
 		String text = null;
 		if (file.getName().endsWith(".xml") || file.getName().endsWith(".XML")) {
 			text = DomUtils.load(file).getDocumentElement().getTextContent();
 		} else {
 			text = IOUtils.getText(file, encoding);
 		}
-		//println "text: "+text.length()
+		// println "text: "+text.length()
 		String langcode = guesser.categorize(text);
 		String guessedLang = translations.get(langcode);
 		if (guessedLang == null) {
 			guessedLang = langcode;
 		}
 
-		//println "$file guessed $guessedLang"
+		// println "$file guessed $guessedLang"
 		if (!langs.containsKey(guessedLang))
 			langs.put(guessedLang, 0);
-		langs.put(guessedLang, langs.get(guessedLang)+1);
+		langs.put(guessedLang, langs.get(guessedLang) + 1);
 	}
 
-	public String getLang()
-	{
+	public String getLang() {
 		int max = 0;
-		//println "LANGS: "+langs
+		// println "LANGS: "+langs
 		for (String s : langs.keySet()) {
 			if (max < langs.get(s)) {
 				max = langs.get(s);
@@ -102,17 +98,15 @@
 		return lang;
 	}
 
-	public static void configFromModels(File dir)
-	{
+	public static void configFromModels(File dir) {
 		File[] files = dir.listFiles(IOUtils.HIDDENFILE_FILTER);
 		Arrays.sort(files);
-		for(File f : files)
-			if(f.getName().contains(".lm") && !f.getName().contains("-"))
-				System.out.println(f.getAbsolutePath()+"\t"+f.getName().substring(0, f.getName().length()-3));
+		for (File f : files)
+			if (f.getName().contains(".lm") && !f.getName().contains("-"))
+				System.out.println(f.getAbsolutePath() + "\t" + f.getName().substring(0, f.getName().length() - 3));
 	}
 
-	public HashMap<String, Integer> getLangs()
-	{
+	public HashMap<String, Integer> getLangs() {
 		return langs;
 	}
 }
Index: tmp/org.txm.utils/src/org/txm/utils/LS.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/LS.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/LS.java	(revision 2402)
@@ -1,4 +1,5 @@
 package org.txm.utils;
+
 import java.io.File;
 import java.util.ArrayList;
 
@@ -28,7 +29,7 @@
 					result.add(file);
 					if (file.isDirectory() && recur) {
 						result.addAll(list(file, recur, hidden));
-					} 
+					}
 				}
 			}
 		} else {
@@ -36,17 +37,17 @@
 		}
 		return result;
 	}
-	
+
 	public static void main(String args[]) {
 		ArrayList<File> files1 = LS.list(new File("/home/mdecorde"), false, false); //$NON-NLS-1$
 		System.out.println(files1.size());
-		
+
 		ArrayList<File> files2 = LS.list(new File("/home/mdecorde"), true, false); //$NON-NLS-1$
 		System.out.println(files2.size());
-		
+
 		ArrayList<File> files3 = LS.list(new File("/home/mdecorde"), false, true); //$NON-NLS-1$
 		System.out.println(files3.size());
-		
+
 		ArrayList<File> files4 = LS.list(new File("/home/mdecorde"), true, true); //$NON-NLS-1$
 		System.out.println(files4.size());
 	}
Index: tmp/org.txm.utils/src/org/txm/utils/CsvReader.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/CsvReader.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/CsvReader.java	(revision 2402)
@@ -139,8 +139,8 @@
 	private boolean closed = false;
 
 	/**
-	 * Double up the text qualif ier to represent an occurance of the text
-	 * qualif ier.
+	 * Double up the text qualif ier to represent an occurance of the text qualif
+	 * ier.
 	 */
 	public static final int ESCAPE_MODE_DOUBLED = 1;
 
@@ -151,25 +151,26 @@
 	public static final int ESCAPE_MODE_BACKSLASH = 2;
 
 	/**
-	 * Creates a {@link com.csvreader.CsvReader CsvReader} object using a file
-	 * as the data source.
+	 * Creates a {@link com.csvreader.CsvReader CsvReader} object using a file as
+	 * the data source.
 	 *
-	 * @param fileName The path to the file to use as the data source.
-	 * @param delimiter The character to use as the column delimiter.
-	 * @param charset The {@link java.nio.charset.Charset Charset} to use while
-	 * parsing the data.
-	 * @throws FileNotFoundException the file not found exception
+	 * @param fileName
+	 *            The path to the file to use as the data source.
+	 * @param delimiter
+	 *            The character to use as the column delimiter.
+	 * @param charset
+	 *            The {@link java.nio.charset.Charset Charset} to use while parsing
+	 *            the data.
+	 * @throws FileNotFoundException
+	 *             the file not found exception
 	 */
-	public CsvReader(String fileName, char delimiter, Charset charset)
-			throws FileNotFoundException {
+	public CsvReader(String fileName, char delimiter, Charset charset) throws FileNotFoundException {
 		if (fileName == null) {
-			throw new IllegalArgumentException(
-					"Parameter fileName can not be null."); //$NON-NLS-1$
+			throw new IllegalArgumentException("Parameter fileName can not be null."); //$NON-NLS-1$
 		}
 
 		if (charset == null) {
-			throw new IllegalArgumentException(
-					"Parameter charset can not be null."); //$NON-NLS-1$
+			throw new IllegalArgumentException("Parameter charset can not be null."); //$NON-NLS-1$
 		}
 
 		if (!new File(fileName).exists()) {
@@ -185,26 +186,30 @@
 	}
 
 	/**
-	 * Creates a {@link com.csvreader.CsvReader CsvReader} object using a file
-	 * as the data source.&nbsp;Uses ISO-8859-1 as the
+	 * Creates a {@link com.csvreader.CsvReader CsvReader} object using a file as
+	 * the data source.&nbsp;Uses ISO-8859-1 as the
 	 *
-	 * @param fileName The path to the file to use as the data source.
-	 * @param delimiter The character to use as the column delimiter.
-	 * @throws FileNotFoundException the file not found exception
-	 * {@link java.nio.charset.Charset Charset}.
+	 * @param fileName
+	 *            The path to the file to use as the data source.
+	 * @param delimiter
+	 *            The character to use as the column delimiter.
+	 * @throws FileNotFoundException
+	 *             the file not found exception {@link java.nio.charset.Charset
+	 *             Charset}.
 	 */
-	public CsvReader(String fileName, char delimiter)
-			throws FileNotFoundException {
+	public CsvReader(String fileName, char delimiter) throws FileNotFoundException {
 		this(fileName, delimiter, Charset.forName("ISO-8859-1")); //$NON-NLS-1$
 	}
 
 	/**
-	 * Creates a {@link com.csvreader.CsvReader CsvReader} object using a file
-	 * as the data source.&nbsp;Uses a comma as the column delimiter and
-	 * ISO-8859-1 as the {@link java.nio.charset.Charset Charset}.
+	 * Creates a {@link com.csvreader.CsvReader CsvReader} object using a file as
+	 * the data source.&nbsp;Uses a comma as the column delimiter and ISO-8859-1 as
+	 * the {@link java.nio.charset.Charset Charset}.
 	 *
-	 * @param fileName The path to the file to use as the data source.
-	 * @throws FileNotFoundException the file not found exception
+	 * @param fileName
+	 *            The path to the file to use as the data source.
+	 * @throws FileNotFoundException
+	 *             the file not found exception
 	 */
 	public CsvReader(String fileName) throws FileNotFoundException {
 		this(fileName, Letters.COMMA);
@@ -213,14 +218,15 @@
 	/**
 	 * Constructs a {@link com.csvreader.CsvReader CsvReader} object using a
 	 *
-	 * @param inputStream The stream to use as the data source.
-	 * @param delimiter The character to use as the column delimiter.
-	 * {@link java.io.Reader Reader} object as the data source.
+	 * @param inputStream
+	 *            The stream to use as the data source.
+	 * @param delimiter
+	 *            The character to use as the column delimiter.
+	 *            {@link java.io.Reader Reader} object as the data source.
 	 */
 	public CsvReader(Reader inputStream, char delimiter) {
 		if (inputStream == null) {
-			throw new IllegalArgumentException(
-					"Parameter inputStream can not be null."); //$NON-NLS-1$
+			throw new IllegalArgumentException("Parameter inputStream can not be null."); //$NON-NLS-1$
 		}
 
 		this.inputStream = inputStream;
@@ -233,9 +239,10 @@
 	/**
 	 * Constructs a {@link com.csvreader.CsvReader CsvReader} object using a
 	 *
-	 * @param inputStream The stream to use as the data source.
-	 * {@link java.io.Reader Reader} object as the data source.&nbsp;Uses a
-	 * comma as the column delimiter.
+	 * @param inputStream
+	 *            The stream to use as the data source. {@link java.io.Reader
+	 *            Reader} object as the data source.&nbsp;Uses a comma as the column
+	 *            delimiter.
 	 */
 	public CsvReader(Reader inputStream) {
 		this(inputStream, Letters.COMMA);
@@ -244,11 +251,14 @@
 	/**
 	 * Constructs a {@link com.csvreader.CsvReader CsvReader} object using an
 	 *
-	 * @param inputStream The stream to use as the data source.
-	 * @param delimiter The character to use as the column delimiter.
-	 * @param charset The {@link java.nio.charset.Charset Charset} to use while
-	 * parsing the data.
-	 * {@link java.io.InputStream InputStream} object as the data source.
+	 * @param inputStream
+	 *            The stream to use as the data source.
+	 * @param delimiter
+	 *            The character to use as the column delimiter.
+	 * @param charset
+	 *            The {@link java.nio.charset.Charset Charset} to use while parsing
+	 *            the data. {@link java.io.InputStream InputStream} object as the
+	 *            data source.
 	 */
 	public CsvReader(InputStream inputStream, char delimiter, Charset charset) {
 		this(new InputStreamReader(inputStream, charset), delimiter);
@@ -257,11 +267,12 @@
 	/**
 	 * Constructs a {@link com.csvreader.CsvReader CsvReader} object using an
 	 *
-	 * @param inputStream The stream to use as the data source.
-	 * @param charset The {@link java.nio.charset.Charset Charset} to use while
-	 * parsing the data.
-	 * {@link java.io.InputStream InputStream} object as the data
-	 * source.&nbsp;Uses a comma as the column delimiter.
+	 * @param inputStream
+	 *            The stream to use as the data source.
+	 * @param charset
+	 *            The {@link java.nio.charset.Charset Charset} to use while parsing
+	 *            the data. {@link java.io.InputStream InputStream} object as the
+	 *            data source.&nbsp;Uses a comma as the column delimiter.
 	 */
 	public CsvReader(InputStream inputStream, Charset charset) {
 		this(new InputStreamReader(inputStream, charset));
@@ -279,7 +290,8 @@
 	/**
 	 * Sets the capture raw record.
 	 *
-	 * @param captureRawRecord the new capture raw record
+	 * @param captureRawRecord
+	 *            the new capture raw record
 	 */
 	public void setCaptureRawRecord(boolean captureRawRecord) {
 		userSettings.CaptureRawRecord = captureRawRecord;
@@ -298,8 +310,8 @@
 	 * Gets whether leading and trailing whitespace characters are being trimmed
 	 * from non-textqualified column data. Default is true.
 	 * 
-	 * @return Whether leading and trailing whitespace characters are being
-	 *         trimmed from non-textqualified column data.
+	 * @return Whether leading and trailing whitespace characters are being trimmed
+	 *         from non-textqualified column data.
 	 */
 	public boolean getTrimWhitespace() {
 		return userSettings.TrimWhitespace;
@@ -318,8 +330,7 @@
 	}
 
 	/**
-	 * Gets the character being used as the column delimiter. Default is comma,
-	 * ','.
+	 * Gets the character being used as the column delimiter. Default is comma, ','.
 	 * 
 	 * @return The character being used as the column delimiter.
 	 */
@@ -351,8 +362,8 @@
 	 * 
 	 * @param recordDelimiter
 	 *            The character to use as the record delimiter. Default is
-	 *            combination of standard end of line characters for Windows,
-	 *            Unix, or Mac.
+	 *            combination of standard end of line characters for Windows, Unix,
+	 *            or Mac.
 	 */
 	public void setRecordDelimiter(char recordDelimiter) {
 		useCustomRecordDelimiter = true;
@@ -439,8 +450,8 @@
 	 * Gets the current way to escape an occurance of the text qualif ier inside
 	 * qualified data.
 	 * 
-	 * @return The current way to escape an occurance of the text qualif ier
-	 *         inside qualified data.
+	 * @return The current way to escape an occurance of the text qualif ier inside
+	 *         qualified data.
 	 */
 	public int getEscapeMode() {
 		return userSettings.EscapeMode;
@@ -450,15 +461,15 @@
 	 * Sets the current way to escape an occurance of the text qualif ier inside
 	 * qualified data.
 	 *
-	 * @param escapeMode The way to escape an occurance of the text qualif ier inside
-	 * qualified data.
-	 * @throws IllegalArgumentException When an illegal value is specif ied for escapeMode.
+	 * @param escapeMode
+	 *            The way to escape an occurance of the text qualif ier inside
+	 *            qualified data.
+	 * @throws IllegalArgumentException
+	 *             When an illegal value is specif ied for escapeMode.
 	 */
 	public void setEscapeMode(int escapeMode) throws IllegalArgumentException {
-		if (escapeMode != ESCAPE_MODE_DOUBLED
-				&& escapeMode != ESCAPE_MODE_BACKSLASH) {
-			throw new IllegalArgumentException(
-					"Parameter escapeMode must be a valid value."); //$NON-NLS-1$
+		if (escapeMode != ESCAPE_MODE_DOUBLED && escapeMode != ESCAPE_MODE_BACKSLASH) {
+			throw new IllegalArgumentException("Parameter escapeMode must be a valid value."); //$NON-NLS-1$
 		}
 
 		userSettings.EscapeMode = escapeMode;
@@ -476,19 +487,20 @@
 	/**
 	 * Sets the skip empty records.
 	 *
-	 * @param skipEmptyRecords the new skip empty records
+	 * @param skipEmptyRecords
+	 *            the new skip empty records
 	 */
 	public void setSkipEmptyRecords(boolean skipEmptyRecords) {
 		userSettings.SkipEmptyRecords = skipEmptyRecords;
 	}
 
 	/**
-	 * Safety caution to prevent the parser from using large amounts of memory
-	 * in the case where parsing settings like file encodings don't end up
-	 * matching the actual format of a file. This switch can be turned off if 
-	 * the file format is known and tested. With the switch off, the max column
-	 * lengths and max column count per record supported by the parser will
-	 * greatly increase. Default is true.
+	 * Safety caution to prevent the parser from using large amounts of memory in
+	 * the case where parsing settings like file encodings don't end up matching the
+	 * actual format of a file. This switch can be turned off if the file format is
+	 * known and tested. With the switch off, the max column lengths and max column
+	 * count per record supported by the parser will greatly increase. Default is
+	 * true.
 	 * 
 	 * @return The current setting of the safety switch.
 	 */
@@ -497,14 +509,15 @@
 	}
 
 	/**
-	 * Safety caution to prevent the parser from using large amounts of memory
-	 * in the case where parsing settings like file encodings don't end up
-	 * matching the actual format of a file. This switch can be turned off if
-	 * the file format is known and tested. With the switch off, the max column
-	 * lengths and max column count per record supported by the parser will
-	 * greatly increase. Default is true.
+	 * Safety caution to prevent the parser from using large amounts of memory in
+	 * the case where parsing settings like file encodings don't end up matching the
+	 * actual format of a file. This switch can be turned off if the file format is
+	 * known and tested. With the switch off, the max column lengths and max column
+	 * count per record supported by the parser will greatly increase. Default is
+	 * true.
 	 *
-	 * @param safetySwitch the new safety switch
+	 * @param safetySwitch
+	 *            the new safety switch
 	 */
 	public void setSafetySwitch(boolean safetySwitch) {
 		userSettings.SafetySwitch = safetySwitch;
@@ -532,8 +545,8 @@
 	 * Gets the count of headers read in by a previous call to.
 	 *
 	 * @return The count of headers read in by a previous call to
-	 * {@link com.csvreader.CsvReader#readHeaders readHeaders()}.
-	 * {@link com.csvreader.CsvReader#readHeaders readHeaders()}.
+	 *         {@link com.csvreader.CsvReader#readHeaders readHeaders()}.
+	 *         {@link com.csvreader.CsvReader#readHeaders readHeaders()}.
 	 */
 	public int getHeaderCount() {
 		return headersHolder.Length;
@@ -543,7 +556,8 @@
 	 * Returns the header values as a string array.
 	 *
 	 * @return The header values as a String array.
-	 * @throws IOException Thrown if this object has already been closed.
+	 * @throws IOException
+	 *             Thrown if this object has already been closed.
 	 */
 	public String[] getHeaders() throws IOException {
 		checkClosed();
@@ -555,8 +569,7 @@
 			// setting values on the array directly, which would
 			// throw off the index lookup based on header name
 			String[] clone = new String[headersHolder.Length];
-			System.arraycopy(headersHolder.Headers, 0, clone, 0,
-					headersHolder.Length);
+			System.arraycopy(headersHolder.Headers, 0, clone, 0, headersHolder.Length);
 			return clone;
 		}
 	}
@@ -564,7 +577,8 @@
 	/**
 	 * Sets the headers.
 	 *
-	 * @param headers the new headers
+	 * @param headers
+	 *            the new headers
 	 */
 	public void setHeaders(String[] headers) {
 		headersHolder.Headers = headers;
@@ -587,7 +601,8 @@
 	 * Gets the values.
 	 *
 	 * @return the values
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public String[] getValues() throws IOException {
 		checkClosed();
@@ -602,9 +617,11 @@
 	/**
 	 * Returns the current column value for a given column index.
 	 *
-	 * @param columnIndex The index of the column.
+	 * @param columnIndex
+	 *            The index of the column.
 	 * @return The current column value.
-	 * @throws IOException Thrown if this object has already been closed.
+	 * @throws IOException
+	 *             Thrown if this object has already been closed.
 	 */
 	public String get(int columnIndex) throws IOException {
 		checkClosed();
@@ -619,9 +636,11 @@
 	/**
 	 * Returns the current column value for a given column header name.
 	 *
-	 * @param headerName The header name of the column.
+	 * @param headerName
+	 *            The header name of the column.
 	 * @return The current column value.
-	 * @throws IOException Thrown if this object has already been closed.
+	 * @throws IOException
+	 *             Thrown if this object has already been closed.
 	 */
 	public String get(String headerName) throws IOException {
 		checkClosed();
@@ -630,18 +649,17 @@
 	}
 
 	/**
-	 * Creates a {@link com.csvreader.CsvReader CsvReader} object using a string
-	 * of data as the source.&nbsp;Uses ISO-8859-1 as the
+	 * Creates a {@link com.csvreader.CsvReader CsvReader} object using a string of
+	 * data as the source.&nbsp;Uses ISO-8859-1 as the
 	 *
-	 * @param data The String of data to use as the source.
-	 * @return A {@link com.csvreader.CsvReader CsvReader} object using the
-	 * String of data as the source.
-	 * {@link java.nio.charset.Charset Charset}.
+	 * @param data
+	 *            The String of data to use as the source.
+	 * @return A {@link com.csvreader.CsvReader CsvReader} object using the String
+	 *         of data as the source. {@link java.nio.charset.Charset Charset}.
 	 */
 	public static CsvReader parse(String data) {
 		if (data == null) {
-			throw new IllegalArgumentException(
-					"Parameter data can not be null."); //$NON-NLS-1$
+			throw new IllegalArgumentException("Parameter data can not be null."); //$NON-NLS-1$
 		}
 
 		return new CsvReader(new StringReader(data));
@@ -651,8 +669,9 @@
 	 * Reads another record.
 	 *
 	 * @return Whether another record was successfully read or not.
-	 * @throws IOException Thrown if an error occurs while reading data from the
-	 * source stream.
+	 * @throws IOException
+	 *             Thrown if an error occurs while reading data from the source
+	 *             stream.
 	 */
 	public boolean readRecord() throws IOException {
 		checkClosed();
@@ -680,8 +699,7 @@
 
 					char currentLetter = dataBuffer.Buffer[dataBuffer.Position];
 
-					if (userSettings.UseTextQualifier
-							&& currentLetter == userSettings.TextQualifier) {
+					if (userSettings.UseTextQualifier && currentLetter == userSettings.TextQualifier) {
 						// this will be a text qualified column, so
 						// we need to set startedWithQualifier to make it
 						// enter the seperate branch to handle text
@@ -723,8 +741,7 @@
 
 									if (currentLetter == userSettings.Delimiter) {
 										endColumn();
-									} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF))
-											|| (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
+									} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF)) || (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
 										endColumn();
 
 										endRecord();
@@ -789,8 +806,7 @@
 
 										lastLetterWasQualifier = true;
 									}
-								} else if (userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH
-										&& lastLetterWasEscape) {
+								} else if (userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH && lastLetterWasEscape) {
 									switch (currentLetter) {
 									case 'n':
 										appendLetter(Letters.LF);
@@ -877,8 +893,7 @@
 									if (lastLetterWasQualifier) {
 										if (currentLetter == userSettings.Delimiter) {
 											endColumn();
-										} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF))
-												|| (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
+										} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF)) || (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
 											endColumn();
 
 											endRecord();
@@ -903,24 +918,12 @@
 								if (startedColumn) {
 									dataBuffer.Position++;
 
-									if (userSettings.SafetySwitch
-											&& dataBuffer.Position
-											- dataBuffer.ColumnStart
-											+ columnBuffer.Position > 100000) {
+									if (userSettings.SafetySwitch && dataBuffer.Position - dataBuffer.ColumnStart + columnBuffer.Position > 100000) {
 										close();
 
-										throw new IOException(
-												"Maximum column length of 100,000 exceeded in column " //$NON-NLS-1$
-												+ NumberFormat
-												.getIntegerInstance()
-												.format(
-														columnsCount)
-												+ " in record " //$NON-NLS-1$
-												+ NumberFormat
-												.getIntegerInstance()
-												.format(
-														currentRecord)
-												+ ". Set the SafetySwitch property to false" //$NON-NLS-1$
+										throw new IOException("Maximum column length of 100,000 exceeded in column " //$NON-NLS-1$
+												+ NumberFormat.getIntegerInstance().format(columnsCount) + " in record " //$NON-NLS-1$
+												+ NumberFormat.getIntegerInstance().format(currentRecord) + ". Set the SafetySwitch property to false" //$NON-NLS-1$
 												+ " if you're expecting column lengths greater than 100,000 characters to" //$NON-NLS-1$
 												+ " avoid this error."); //$NON-NLS-1$
 									}
@@ -935,11 +938,9 @@
 						lastLetter = currentLetter;
 
 						endColumn();
-					} else if (useCustomRecordDelimiter
-							&& currentLetter == userSettings.RecordDelimiter) {
+					} else if (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter) {
 						// this will skip blank lines
-						if (startedColumn || columnsCount > 0
-								|| !userSettings.SkipEmptyRecords) {
+						if (startedColumn || columnsCount > 0 || !userSettings.SkipEmptyRecords) {
 							endColumn();
 
 							endRecord();
@@ -948,12 +949,9 @@
 						}
 
 						lastLetter = currentLetter;
-					} else if (!useCustomRecordDelimiter
-							&& (currentLetter == Letters.CR || currentLetter == Letters.LF)) {
+					} else if (!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF)) {
 						// this will skip blank lines
-						if (startedColumn
-								|| columnsCount > 0
-								|| (!userSettings.SkipEmptyRecords && (currentLetter == Letters.CR || lastLetter != Letters.CR))) {
+						if (startedColumn || columnsCount > 0 || (!userSettings.SkipEmptyRecords && (currentLetter == Letters.CR || lastLetter != Letters.CR))) {
 							endColumn();
 
 							endRecord();
@@ -962,16 +960,14 @@
 						}
 
 						lastLetter = currentLetter;
-					} else if (userSettings.UseComments && columnsCount == 0
-							&& currentLetter == userSettings.Comment) {
+					} else if (userSettings.UseComments && columnsCount == 0 && currentLetter == userSettings.Comment) {
 						// encountered a comment character at the beginning of
 						// the line so just ignore the rest of the line
 
 						lastLetter = currentLetter;
 
 						skipLine();
-					} else if (userSettings.TrimWhitespace
-							&& (currentLetter == Letters.SPACE || currentLetter == Letters.TAB)) {
+					} else if (userSettings.TrimWhitespace && (currentLetter == Letters.SPACE || currentLetter == Letters.TAB)) {
 						// do nothing, this will trim leading whitespace
 						// for both text qualified columns and non
 
@@ -992,8 +988,7 @@
 						boolean firstLoop = true;
 
 						do {
-							if (!firstLoop
-									&& dataBuffer.Position == dataBuffer.Count) {
+							if (!firstLoop && dataBuffer.Position == dataBuffer.Count) {
 								checkDataLength();
 							} else {
 								if (!firstLoop) {
@@ -1001,9 +996,7 @@
 									currentLetter = dataBuffer.Buffer[dataBuffer.Position];
 								}
 
-								if (!userSettings.UseTextQualifier
-										&& userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH
-										&& currentLetter == Letters.BACKSLASH) {
+								if (!userSettings.UseTextQualifier && userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH && currentLetter == Letters.BACKSLASH) {
 									if (lastLetterWasBackslash) {
 										lastLetterWasBackslash = false;
 									} else {
@@ -1057,8 +1050,7 @@
 									} else {
 										dataBuffer.ColumnStart = dataBuffer.Position + 1;
 									}
-								} else if (userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH
-										&& lastLetterWasBackslash) {
+								} else if (userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH && lastLetterWasBackslash) {
 									switch (currentLetter) {
 									case 'n':
 										appendLetter(Letters.LF);
@@ -1139,8 +1131,7 @@
 								} else {
 									if (currentLetter == userSettings.Delimiter) {
 										endColumn();
-									} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF))
-											|| (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
+									} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF)) || (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
 										endColumn();
 
 										endRecord();
@@ -1156,24 +1147,12 @@
 								if (startedColumn) {
 									dataBuffer.Position++;
 
-									if (userSettings.SafetySwitch
-											&& dataBuffer.Position
-											- dataBuffer.ColumnStart
-											+ columnBuffer.Position > 100000) {
+									if (userSettings.SafetySwitch && dataBuffer.Position - dataBuffer.ColumnStart + columnBuffer.Position > 100000) {
 										close();
 
-										throw new IOException(
-												"Maximum column length of 100,000 exceeded in column " //$NON-NLS-1$
-												+ NumberFormat
-												.getIntegerInstance()
-												.format(
-														columnsCount)
-												+ " in record " //$NON-NLS-1$
-												+ NumberFormat
-												.getIntegerInstance()
-												.format(
-														currentRecord)
-												+ ". Set the SafetySwitch property to false" //$NON-NLS-1$
+										throw new IOException("Maximum column length of 100,000 exceeded in column " //$NON-NLS-1$
+												+ NumberFormat.getIntegerInstance().format(columnsCount) + " in record " //$NON-NLS-1$
+												+ NumberFormat.getIntegerInstance().format(currentRecord) + ". Set the SafetySwitch property to false" //$NON-NLS-1$
 												+ " if you're expecting column lengths greater than 100,000 characters to" //$NON-NLS-1$
 												+ " avoid this error."); //$NON-NLS-1$
 									}
@@ -1201,15 +1180,9 @@
 		if (userSettings.CaptureRawRecord) {
 			if (hasMoreData) {
 				if (rawBuffer.Position == 0) {
-					rawRecord = new String(dataBuffer.Buffer,
-							dataBuffer.LineStart, dataBuffer.Position
-							- dataBuffer.LineStart - 1);
+					rawRecord = new String(dataBuffer.Buffer, dataBuffer.LineStart, dataBuffer.Position - dataBuffer.LineStart - 1);
 				} else {
-					rawRecord = new String(rawBuffer.Buffer, 0,
-							rawBuffer.Position)
-							+ new String(dataBuffer.Buffer,
-									dataBuffer.LineStart, dataBuffer.Position
-									- dataBuffer.LineStart - 1);
+					rawRecord = new String(rawBuffer.Buffer, 0, rawBuffer.Position) + new String(dataBuffer.Buffer, dataBuffer.LineStart, dataBuffer.Position - dataBuffer.LineStart - 1);
 				}
 			} else {
 				// for hasMoreData to ever be false, all data would have had to
@@ -1227,15 +1200,14 @@
 	/**
 	 * Check data length.
 	 *
-	 * @throws IOException Thrown if an error occurs while reading data from the
-	 * source stream.
+	 * @throws IOException
+	 *             Thrown if an error occurs while reading data from the source
+	 *             stream.
 	 */
 	private void checkDataLength() throws IOException {
 		if (!initialized) {
 			if (fileName != null) {
-				inputStream = new BufferedReader(new InputStreamReader(
-						new FileInputStream(fileName), charset),
-						StaticSettings.MAX_FILE_BUFFER_SIZE);
+				inputStream = new BufferedReader(new InputStreamReader(new FileInputStream(fileName), charset), StaticSettings.MAX_FILE_BUFFER_SIZE);
 			}
 
 			charset = null;
@@ -1245,30 +1217,23 @@
 		updateCurrentValue();
 
 		if (userSettings.CaptureRawRecord && dataBuffer.Count > 0) {
-			if (rawBuffer.Buffer.length - rawBuffer.Position < dataBuffer.Count
-					- dataBuffer.LineStart) {
-				int newLength = rawBuffer.Buffer.length
-						+ Math.max(dataBuffer.Count - dataBuffer.LineStart,
-								rawBuffer.Buffer.length);
+			if (rawBuffer.Buffer.length - rawBuffer.Position < dataBuffer.Count - dataBuffer.LineStart) {
+				int newLength = rawBuffer.Buffer.length + Math.max(dataBuffer.Count - dataBuffer.LineStart, rawBuffer.Buffer.length);
 
 				char[] holder = new char[newLength];
 
-				System.arraycopy(rawBuffer.Buffer, 0, holder, 0,
-						rawBuffer.Position);
+				System.arraycopy(rawBuffer.Buffer, 0, holder, 0, rawBuffer.Position);
 
 				rawBuffer.Buffer = holder;
 			}
 
-			System.arraycopy(dataBuffer.Buffer, dataBuffer.LineStart,
-					rawBuffer.Buffer, rawBuffer.Position, dataBuffer.Count
-					- dataBuffer.LineStart);
+			System.arraycopy(dataBuffer.Buffer, dataBuffer.LineStart, rawBuffer.Buffer, rawBuffer.Position, dataBuffer.Count - dataBuffer.LineStart);
 
 			rawBuffer.Position += dataBuffer.Count - dataBuffer.LineStart;
 		}
 
 		try {
-			dataBuffer.Count = inputStream.read(dataBuffer.Buffer, 0,
-					dataBuffer.Buffer.length);
+			dataBuffer.Count = inputStream.read(dataBuffer.Buffer, 0, dataBuffer.Buffer.length);
 		} catch (IOException ex) {
 			close();
 
@@ -1291,8 +1256,9 @@
 	 * Read the first record of data as column headers.
 	 *
 	 * @return Whether the header record was successfully read or not.
-	 * @throws IOException Thrown if an error occurs while reading data from the
-	 * source stream.
+	 * @throws IOException
+	 *             Thrown if an error occurs while reading data from the source
+	 *             stream.
 	 */
 	public boolean readHeaders() throws IOException {
 		boolean result = readRecord();
@@ -1325,9 +1291,11 @@
 	/**
 	 * Returns the column header value for a given column index.
 	 *
-	 * @param columnIndex The index of the header column being requested.
+	 * @param columnIndex
+	 *            The index of the header column being requested.
 	 * @return The value of the column header at the given column index.
-	 * @throws IOException Thrown if this object has already been closed.
+	 * @throws IOException
+	 *             Thrown if this object has already been closed.
 	 */
 	public String getHeader(int columnIndex) throws IOException {
 		checkClosed();
@@ -1349,9 +1317,11 @@
 	/**
 	 * Checks if is qualified.
 	 *
-	 * @param columnIndex the column index
+	 * @param columnIndex
+	 *            the column index
 	 * @return true, if is qualified
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public boolean isQualified(int columnIndex) throws IOException {
 		checkClosed();
@@ -1366,8 +1336,9 @@
 	/**
 	 * End column.
 	 *
-	 * @throws IOException Thrown if a very rare extreme exception occurs during
-	 * parsing, normally resulting from improper data format.
+	 * @throws IOException
+	 *             Thrown if a very rare extreme exception occurs during parsing,
+	 *             normally resulting from improper data format.
 	 */
 	private void endColumn() throws IOException {
 		String currentValue = ""; //$NON-NLS-1$
@@ -1379,15 +1350,12 @@
 					int lastLetter = dataBuffer.Position - 1;
 
 					if (userSettings.TrimWhitespace && !startedWithQualifier) {
-						while (lastLetter >= dataBuffer.ColumnStart
-								&& (dataBuffer.Buffer[lastLetter] == Letters.SPACE || dataBuffer.Buffer[lastLetter] == Letters.TAB)) {
+						while (lastLetter >= dataBuffer.ColumnStart && (dataBuffer.Buffer[lastLetter] == Letters.SPACE || dataBuffer.Buffer[lastLetter] == Letters.TAB)) {
 							lastLetter--;
 						}
 					}
 
-					currentValue = new String(dataBuffer.Buffer,
-							dataBuffer.ColumnStart, lastLetter
-							- dataBuffer.ColumnStart + 1);
+					currentValue = new String(dataBuffer.Buffer, dataBuffer.ColumnStart, lastLetter - dataBuffer.ColumnStart + 1);
 				}
 			} else {
 				updateCurrentValue();
@@ -1395,14 +1363,12 @@
 				int lastLetter = columnBuffer.Position - 1;
 
 				if (userSettings.TrimWhitespace && !startedWithQualifier) {
-					while (lastLetter >= 0
-							&& (columnBuffer.Buffer[lastLetter] == Letters.SPACE || columnBuffer.Buffer[lastLetter] == Letters.SPACE)) {
+					while (lastLetter >= 0 && (columnBuffer.Buffer[lastLetter] == Letters.SPACE || columnBuffer.Buffer[lastLetter] == Letters.SPACE)) {
 						lastLetter--;
 					}
 				}
 
-				currentValue = new String(columnBuffer.Buffer, 0,
-						lastLetter + 1);
+				currentValue = new String(columnBuffer.Buffer, 0, lastLetter + 1);
 			}
 		}
 
@@ -1413,11 +1379,8 @@
 		if (columnsCount >= 100000 && userSettings.SafetySwitch) {
 			close();
 
-			throw new IOException(
-					"Maximum column count of 100,000 exceeded in record " //$NON-NLS-1$
-					+ NumberFormat.getIntegerInstance().format(
-							currentRecord)
-					+ ". Set the SafetySwitch property to false" //$NON-NLS-1$
+			throw new IOException("Maximum column count of 100,000 exceeded in record " //$NON-NLS-1$
+					+ NumberFormat.getIntegerInstance().format(currentRecord) + ". Set the SafetySwitch property to false" //$NON-NLS-1$
 					+ " if you're expecting more than 100,000 columns per record to" //$NON-NLS-1$
 					+ " avoid this error."); //$NON-NLS-1$
 		}
@@ -1438,8 +1401,7 @@
 
 			boolean[] qualifiedHolder = new boolean[newLength];
 
-			System.arraycopy(isQualified, 0, qualifiedHolder, 0,
-					isQualified.length);
+			System.arraycopy(isQualified, 0, qualifiedHolder, 0, isQualified.length);
 
 			isQualified = qualifiedHolder;
 		}
@@ -1456,7 +1418,8 @@
 	/**
 	 * Append letter.
 	 *
-	 * @param letter the letter
+	 * @param letter
+	 *            the letter
 	 */
 	private void appendLetter(char letter) {
 		if (columnBuffer.Position == columnBuffer.Buffer.length) {
@@ -1464,8 +1427,7 @@
 
 			char[] holder = new char[newLength];
 
-			System.arraycopy(columnBuffer.Buffer, 0, holder, 0,
-					columnBuffer.Position);
+			System.arraycopy(columnBuffer.Buffer, 0, holder, 0, columnBuffer.Position);
 
 			columnBuffer.Buffer = holder;
 		}
@@ -1478,27 +1440,19 @@
 	 */
 	private void updateCurrentValue() {
 		if (startedColumn && dataBuffer.ColumnStart < dataBuffer.Position) {
-			if (columnBuffer.Buffer.length - columnBuffer.Position < dataBuffer.Position
-					- dataBuffer.ColumnStart) {
-				int newLength = columnBuffer.Buffer.length
-						+ Math.max(
-								dataBuffer.Position - dataBuffer.ColumnStart,
-								columnBuffer.Buffer.length);
+			if (columnBuffer.Buffer.length - columnBuffer.Position < dataBuffer.Position - dataBuffer.ColumnStart) {
+				int newLength = columnBuffer.Buffer.length + Math.max(dataBuffer.Position - dataBuffer.ColumnStart, columnBuffer.Buffer.length);
 
 				char[] holder = new char[newLength];
 
-				System.arraycopy(columnBuffer.Buffer, 0, holder, 0,
-						columnBuffer.Position);
+				System.arraycopy(columnBuffer.Buffer, 0, holder, 0, columnBuffer.Position);
 
 				columnBuffer.Buffer = holder;
 			}
 
-			System.arraycopy(dataBuffer.Buffer, dataBuffer.ColumnStart,
-					columnBuffer.Buffer, columnBuffer.Position,
-					dataBuffer.Position - dataBuffer.ColumnStart);
+			System.arraycopy(dataBuffer.Buffer, dataBuffer.ColumnStart, columnBuffer.Buffer, columnBuffer.Position, dataBuffer.Position - dataBuffer.ColumnStart);
 
-			columnBuffer.Position += dataBuffer.Position
-					- dataBuffer.ColumnStart;
+			columnBuffer.Position += dataBuffer.Position - dataBuffer.ColumnStart;
 		}
 
 		dataBuffer.ColumnStart = dataBuffer.Position + 1;
@@ -1507,8 +1461,9 @@
 	/**
 	 * End record.
 	 *
-	 * @throws IOException Thrown if an error occurs while reading data from the
-	 * source stream.
+	 * @throws IOException
+	 *             Thrown if an error occurs while reading data from the source
+	 *             stream.
 	 */
 	private void endRecord() throws IOException {
 		// this flag is used as a loop exit condition
@@ -1522,10 +1477,12 @@
 	/**
 	 * Gets the corresponding column index for a given column header name.
 	 *
-	 * @param headerName The header name of the column.
-	 * @return The column index for the given column header name.&nbsp;Returns
-	 * -1 if not found.
-	 * @throws IOException Thrown if this object has already been closed.
+	 * @param headerName
+	 *            The header name of the column.
+	 * @return The column index for the given column header name.&nbsp;Returns -1 if
+	 *         not found.
+	 * @throws IOException
+	 *             Thrown if this object has already been closed.
 	 */
 	public int getIndex(String headerName) throws IOException {
 		checkClosed();
@@ -1540,13 +1497,13 @@
 	}
 
 	/**
-	 * Skips the next record of data by parsing each column.&nbsp;Does not
-	 * increment
+	 * Skips the next record of data by parsing each column.&nbsp;Does not increment
 	 *
 	 * @return Whether another record was successfully skipped or not.
-	 * @throws IOException Thrown if an error occurs while reading data from the
-	 * source stream.
-	 * {@link com.csvreader.CsvReader#getCurrentRecord getCurrentRecord()}.
+	 * @throws IOException
+	 *             Thrown if an error occurs while reading data from the source
+	 *             stream. {@link com.csvreader.CsvReader#getCurrentRecord
+	 *             getCurrentRecord()}.
 	 */
 	public boolean skipRecord() throws IOException {
 		checkClosed();
@@ -1569,8 +1526,9 @@
 	 * does not do any column delimited parsing.
 	 *
 	 * @return Whether a line was successfully skipped or not.
-	 * @throws IOException Thrown if an error occurs while reading data from the
-	 * source stream.
+	 * @throws IOException
+	 *             Thrown if an error occurs while reading data from the source
+	 *             stream.
 	 */
 	public boolean skipLine() throws IOException {
 		checkClosed();
@@ -1594,8 +1552,7 @@
 
 					char currentLetter = dataBuffer.Buffer[dataBuffer.Position];
 
-					if (currentLetter == Letters.CR
-							|| currentLetter == Letters.LF) {
+					if (currentLetter == Letters.CR || currentLetter == Letters.LF) {
 						foundEol = true;
 					}
 
@@ -1636,7 +1593,8 @@
 	/**
 	 * Close.
 	 *
-	 * @param closing the closing
+	 * @param closing
+	 *            the closing
 	 */
 	private void close(boolean closing) {
 		if (!closed) {
@@ -1666,16 +1624,18 @@
 	/**
 	 * Check closed.
 	 *
-	 * @throws IOException Thrown if this object has already been closed.
+	 * @throws IOException
+	 *             Thrown if this object has already been closed.
 	 */
 	private void checkClosed() throws IOException {
 		if (closed) {
-			throw new IOException(
-					"This instance of the CsvReader class has already been closed."); //$NON-NLS-1$
+			throw new IOException("This instance of the CsvReader class has already been closed."); //$NON-NLS-1$
 		}
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Object#finalize()
 	 */
 	@Override
@@ -1704,7 +1664,8 @@
 	/**
 	 * Hex to dec.
 	 *
-	 * @param hex the hex
+	 * @param hex
+	 *            the hex
 	 * @return the char
 	 */
 	private static char hexToDec(char hex) {
@@ -1797,8 +1758,7 @@
 		 * Instantiates a new raw record buffer.
 		 */
 		public RawRecordBuffer() {
-			Buffer = new char[StaticSettings.INITIAL_COLUMN_BUFFER_SIZE
-			                  * StaticSettings.INITIAL_COLUMN_COUNT];
+			Buffer = new char[StaticSettings.INITIAL_COLUMN_BUFFER_SIZE * StaticSettings.INITIAL_COLUMN_COUNT];
 			Position = 0;
 		}
 	}
Index: tmp/org.txm.utils/src/org/txm/utils/messages/Utf8NLS.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/messages/Utf8NLS.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/messages/Utf8NLS.java	(revision 2402)
@@ -5,7 +5,6 @@
 
 import org.eclipse.osgi.util.NLS;
 
-
 /**
  * Class that manages UTF-8 encoding for .properties messages files.
  * 
@@ -18,15 +17,17 @@
 	private static final int MOD_MASK = MOD_EXPECTED | Modifier.FINAL;
 
 	/**
-	 *  initialize UTF-8 messages using the Message class package path as base name
+	 * initialize UTF-8 messages using the Message class package path as base name
+	 * 
 	 * @param clazz
 	 */
 	public static void initializeMessages(Class<?> clazz) {
-		initializeMessages(clazz.getPackage().getName()+".messages", clazz);
+		initializeMessages(clazz.getPackage().getName() + ".messages", clazz);
 	}
-	
+
 	/**
 	 * Initializes messages using UTF-8 encoding.
+	 * 
 	 * @param baseName
 	 * @param clazz
 	 */
@@ -37,24 +38,23 @@
 		// re-encode the fields
 		final Field[] fieldArray = clazz.getDeclaredFields();
 		final int len = fieldArray.length;
-		for(int i = 0; i < len; i++) {
+		for (int i = 0; i < len; i++) {
 			final Field field = (Field) fieldArray[i];
-			
+
 			if ((field.getModifiers() & MOD_MASK) != MOD_EXPECTED) // only init public static fields
 				continue;
-			
-			if(field.getType() != java.lang.String.class) 
+
+			if (field.getType() != java.lang.String.class)
 				continue;
 
-			if(!field.isAccessible())
+			if (!field.isAccessible())
 				field.setAccessible(true);
 			try {
 				final String rawValue = (String) field.get(null);
 				field.set(null, new String(rawValue.getBytes("ISO-8859-1"), "UTF-8")); //$NON-NLS-1$ //$NON-NLS-2$
+			} catch (Exception e) {
+				// e.printStackTrace();
 			}
-			catch(Exception e) {
-				//	e.printStackTrace();
-			}
 		}
 	}
 }
Index: tmp/org.txm.utils/src/org/txm/utils/messages/UtilsCoreMessages.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/messages/UtilsCoreMessages.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/messages/UtilsCoreMessages.java	(revision 2402)
@@ -12,7 +12,7 @@
 public class UtilsCoreMessages extends NLS {
 
 	private static final String BUNDLE_NAME = "org.txm.utils.messages.messages"; //$NON-NLS-1$
-	
+
 	public static String ExecTimer_0;
 	public static String ExecTimer_1;
 	public static String ExecTimer_2;
@@ -33,7 +33,7 @@
 	public static String Pair_0;
 	public static String Pair_1;
 	public static String Sh_4;
-	
+
 	static {
 		// initialize resource bundle
 		Utf8NLS.initializeMessages(BUNDLE_NAME, UtilsCoreMessages.class);
Index: tmp/org.txm.utils/src/org/txm/utils/tostring/ToString.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/tostring/ToString.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/tostring/ToString.java	(revision 2402)
@@ -36,9 +36,9 @@
 /**
  * The Interface ToString.
  */
-@Target( { ElementType.FIELD })
+@Target({ ElementType.FIELD })
 public @interface ToString {
-	
+
 	/**
 	 * Order.
 	 *
Index: tmp/org.txm.utils/src/org/txm/utils/tostring/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/tostring/package.html	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/tostring/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>Apache log annotation</p>
+	<p>Apache log annotation</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/SparseList.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/SparseList.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/SparseList.java	(revision 2402)
@@ -37,7 +37,8 @@
 /**
  * The Class SparseList.
  *
- * @param <E> the element type
+ * @param <E>
+ *            the element type
  */
 public class SparseList<E> extends AbstractList<E> {
 
@@ -51,7 +52,9 @@
 		map = new TreeMap<Integer, E>();
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.util.AbstractList#get(int)
 	 */
 	@Override
@@ -60,16 +63,18 @@
 	}
 
 	/**
-	 * Returns all the elements between from (included) and to(excluded). Values
-	 * not in the list are returned as null
+	 * Returns all the elements between from (included) and to(excluded). Values not
+	 * in the list are returned as null
 	 *
-	 * @param from the from
-	 * @param to the to
+	 * @param from
+	 *            the from
+	 * @param to
+	 *            the to
 	 * @return A list whose size is to-form
 	 */
 	public List<E> getRange(int from, int to) {
 		List<E> res = new ArrayList<E>();
-		//if (from > to) System.out.println("ERROR: "+from+" > "+to);
+		// if (from > to) System.out.println("ERROR: "+from+" > "+to);
 		SortedMap<Integer, E> subMap = map.subMap(from, to);
 		if (subMap.size() == (to - from))
 			res.addAll(subMap.values());
@@ -79,7 +84,9 @@
 		return res;
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.util.AbstractCollection#size()
 	 */
 	@Override
@@ -87,7 +94,9 @@
 		return map.size();
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.util.AbstractList#add(int, java.lang.Object)
 	 */
 	@Override
Index: tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java	(revision 2402)
@@ -13,64 +13,64 @@
  * @param <KeyType>
  * @param <ValueType>
  */
-public class BiHashMap<KeyType, ValueType>{
-	
-    private ConcurrentHashMap<KeyType, ValueType> keyToValueMap = new ConcurrentHashMap<KeyType, ValueType>();
-    private ConcurrentHashMap<ValueType, KeyType> valueToKeyMap = new ConcurrentHashMap<ValueType, KeyType>();
+public class BiHashMap<KeyType, ValueType> {
 
-    public BiHashMap() {
-   
-    }
-    
-    public BiHashMap(Properties props) {
-    	  for (Object k : props.keySet()) {
-    		  put((KeyType)k, (ValueType)props.get(k));
-    	  }
-    }
-    
-    synchronized public void put(KeyType key, ValueType value){
-        keyToValueMap.put(key, value);
-        //FIXME clash because values are not unique
-        valueToKeyMap.put(value, key);
-    }
+	private ConcurrentHashMap<KeyType, ValueType> keyToValueMap = new ConcurrentHashMap<KeyType, ValueType>();
+	private ConcurrentHashMap<ValueType, KeyType> valueToKeyMap = new ConcurrentHashMap<ValueType, KeyType>();
 
-    synchronized public ValueType removeByKey(KeyType key){
-        ValueType removedValue = keyToValueMap.remove(key);
-        valueToKeyMap.remove(removedValue);
-        return removedValue;
-    }
+	public BiHashMap() {
 
-    synchronized public KeyType removeByValue(ValueType value){
-        KeyType removedKey = valueToKeyMap.remove(value);
-        keyToValueMap.remove(removedKey);
-        return removedKey;
-    }
+	}
 
-    public boolean containsKey(KeyType key){
-        return keyToValueMap.containsKey(key);
-    }
+	public BiHashMap(Properties props) {
+		for (Object k : props.keySet()) {
+			put((KeyType) k, (ValueType) props.get(k));
+		}
+	}
 
-    public boolean containsValue(ValueType value){
-        return keyToValueMap.containsValue(value);
-    }
+	synchronized public void put(KeyType key, ValueType value) {
+		keyToValueMap.put(key, value);
+		// FIXME clash because values are not unique
+		valueToKeyMap.put(value, key);
+	}
 
-    public KeyType getKey(ValueType value){
-        return valueToKeyMap.get(value);
-    }
+	synchronized public ValueType removeByKey(KeyType key) {
+		ValueType removedValue = keyToValueMap.remove(key);
+		valueToKeyMap.remove(removedValue);
+		return removedValue;
+	}
 
-    public ValueType get(KeyType key){
-        return keyToValueMap.get(key);
-    }
-    
-    public Set<KeyType> getKeys() {
-    	return keyToValueMap.keySet();
-    }
-    
-    public Set<ValueType> getValues() {
-    	return valueToKeyMap.keySet();
-    }
-   
-    public String toString() {
-    	return keyToValueMap.toString();
-    }
+	synchronized public KeyType removeByValue(ValueType value) {
+		KeyType removedKey = valueToKeyMap.remove(value);
+		keyToValueMap.remove(removedKey);
+		return removedKey;
+	}
+
+	public boolean containsKey(KeyType key) {
+		return keyToValueMap.containsKey(key);
+	}
+
+	public boolean containsValue(ValueType value) {
+		return keyToValueMap.containsValue(value);
+	}
+
+	public KeyType getKey(ValueType value) {
+		return valueToKeyMap.get(value);
+	}
+
+	public ValueType get(KeyType key) {
+		return keyToValueMap.get(key);
+	}
+
+	public Set<KeyType> getKeys() {
+		return keyToValueMap.keySet();
+	}
+
+	public Set<ValueType> getValues() {
+		return valueToKeyMap.keySet();
+	}
+
+	public String toString() {
+		return keyToValueMap.toString();
+	}
 }
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/i18n/DetectBOM.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/i18n/DetectBOM.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/i18n/DetectBOM.java	(revision 2402)
@@ -8,22 +8,25 @@
 
 /**
  * Simple class to detect BOM in a file
+ * 
  * @see http://blog.ymango.com/2010/09/16/29
  * 
  * @author mdecorde
  *
  */
 public class DetectBOM {
-	
+
 	Charset enc = null;
-	int n, unread,size;
+	int n, unread, size;
+
 	/**
 	 * 
-	 * @param srcFile the file to test
+	 * @param srcFile
+	 *            the file to test
 	 */
 	public DetectBOM(File srcFile) {
 		// *** Use Default of Encoding.Default (Ansi CodePage)
-			
+
 		try {
 			// *** Detect byte order mark if any - otherwise assume default
 			byte[] buffer = new byte[4];
@@ -32,36 +35,33 @@
 			file.close();
 
 			String encoding = null;
-			if ((buffer[0] == (byte) 0x00) && (buffer[1] == (byte) 0x00)
-					&& (buffer[2] == (byte) 0xFE) && (buffer[3] == (byte) 0xFF)) {
+			if ((buffer[0] == (byte) 0x00) && (buffer[1] == (byte) 0x00) && (buffer[2] == (byte) 0xFE) && (buffer[3] == (byte) 0xFF)) {
 				encoding = "UTF-32BE"; //$NON-NLS-1$
 				unread = n - 4;
-				size=4;
-			} else if ((buffer[0] == (byte) 0xFF) && (buffer[1] == (byte) 0xFE)
-					&& (buffer[2] == (byte) 0x00) && (buffer[3] == (byte) 0x00)) {
+				size = 4;
+			} else if ((buffer[0] == (byte) 0xFF) && (buffer[1] == (byte) 0xFE) && (buffer[2] == (byte) 0x00) && (buffer[3] == (byte) 0x00)) {
 				encoding = "UTF-32LE"; //$NON-NLS-1$
 				unread = n - 4;
-				size=4;
-			} else if ((buffer[0] == (byte) 0xEF) && (buffer[1] == (byte) 0xBB)
-					&& (buffer[2] == (byte) 0xBF)) {
+				size = 4;
+			} else if ((buffer[0] == (byte) 0xEF) && (buffer[1] == (byte) 0xBB) && (buffer[2] == (byte) 0xBF)) {
 				encoding = "UTF-8"; //$NON-NLS-1$
 				unread = n - 3;
-				size=3;
+				size = 3;
 			} else if ((buffer[0] == (byte) 0xFE) && (buffer[1] == (byte) 0xFF)) {
 				encoding = "UTF-16BE"; //$NON-NLS-1$
 				unread = n - 2;
-				size=2;
+				size = 2;
 			} else if ((buffer[0] == (byte) 0xFF) && (buffer[1] == (byte) 0xFE)) {
 				encoding = "UTF-16LE"; //$NON-NLS-1$
 				unread = n - 2;
-				size=4;
+				size = 4;
 			} else {
 				// Unicode BOM mark not found, unread all bytes
 				// encoding = "UTF-8";
 				unread = n;
-				size=0;
+				size = 0;
 			}
-			if(encoding != null)
+			if (encoding != null)
 				enc = Charset.forName(encoding);
 
 		} catch (FileNotFoundException e) {
@@ -69,40 +69,38 @@
 		} catch (IOException e) {
 			org.txm.utils.logger.Log.printStackTrace(e);
 		}
-		//System.out.println("BOM size: "+size);
-		//return enc;
+		// System.out.println("BOM size: "+size);
+		// return enc;
 	}
-	
+
 	/**
 	 * 
-	 * @return if the file has a BOM, return the encoding, else return file system encoding
+	 * @return if the file has a BOM, return the encoding, else return file system
+	 *         encoding
 	 */
-	public Charset getCharSet()
-	{
-		if(enc != null)
+	public Charset getCharSet() {
+		if (enc != null)
 			return enc;
 		else
 			return Charset.forName(System.getProperty("file.encoding")); //$NON-NLS-1$
 	}
-	
+
 	/**
 	 * 
 	 * @return the number of byte to skip to read the file
 	 */
-	public int getBOMSize()
-	{
+	public int getBOMSize() {
 		return size;
 	}
-	
+
 	/**
 	 * 
 	 * @return true if the file has a BOM
 	 */
-	public boolean hasBOM()
-	{
+	public boolean hasBOM() {
 		return size > 0;
 	}
-	
+
 	public static void main(String args[]) {
 		DetectBOM db = new DetectBOM(new File(System.getProperty("user.home"), "xml/SUPPORT/CS/3-revues_eng_complet2.txt"));
 		System.out.println(db.getBOMSize());
Index: tmp/org.txm.utils/src/org/txm/utils/i18n/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/i18n/package.html	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/i18n/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>Using different languages in output messages.</p>
+	<p>Using different languages in output messages.</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/i18n/LangFormater.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/i18n/LangFormater.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/i18n/LangFormater.java	(revision 2402)
@@ -18,130 +18,136 @@
 // You should have received a copy of the GNU General
 // Public License along with the TXM platform. If not, see
 // http://www.gnu.org/licenses.
-
-//
-// This file is part of the TXM platform.
-//
-// The TXM platform is free software: you can redistribute it and/or modif y
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
-// 
-// 
-// 
-// $LastChangedDate: 2016-12-15 10:26:28 +0100 (Thu, 15 Dec 2016) $
-// $LastChangedRevision: 3368 $
-// $LastChangedBy: mdecorde $ 
-//
-package org.txm.utils.i18n;
-
-import java.util.ArrayList;
+
+//
+// This file is part of the TXM platform.
+//
+// The TXM platform is free software: you can redistribute it and/or modif y
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// 
+// 
+// $LastChangedDate: 2016-12-15 10:26:28 +0100 (Thu, 15 Dec 2016) $
+// $LastChangedRevision: 3368 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils.i18n;
+
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Locale;
-
-// TODO: Auto-generated Javadoc
-/**
- * depending on the locale, remove or add spaces between words.
- *
- * @author mdecorde
- */
-public class LangFormater {
-
-	/** The FR no space before. */
-	static List<String> FRNoSpaceBefore = Arrays.asList(",", ".", ")", "]", "}", "°" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
-	
-	/** The FR no space after. */
-	static List<String> FRNoSpaceAfter = Arrays.asList( "’", "'", "(", "[", "{" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ 
-
-	/** The FRO no space before. */
-	static List<String> FRONoSpaceBefore = Arrays.asList( ",", ".", ")", "]", "}", "°" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
-	
-	/** The FRO no space after. */
-	static List<String> FRONoSpaceAfter = Arrays.asList( "’", "'", "(", "[", "{" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ 
-
-	/** The EN no space before. */
-	static List<String> ENNoSpaceBefore = Arrays.asList( ":", "!", "?", ";", ",", ".", ")", "]", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
+import java.util.Locale;
+
+// TODO: Auto-generated Javadoc
+/**
+ * depending on the locale, remove or add spaces between words.
+ *
+ * @author mdecorde
+ */
+public class LangFormater {
+
+	/** The FR no space before. */
+	static List<String> FRNoSpaceBefore = Arrays.asList(",", ".", ")", "]", "}", "°"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+
+	/** The FR no space after. */
+	static List<String> FRNoSpaceAfter = Arrays.asList("’", "'", "(", "[", "{"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+
+	/** The FRO no space before. */
+	static List<String> FRONoSpaceBefore = Arrays.asList(",", ".", ")", "]", "}", "°"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+
+	/** The FRO no space after. */
+	static List<String> FRONoSpaceAfter = Arrays.asList("’", "'", "(", "[", "{"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+
+	/** The EN no space before. */
+	static List<String> ENNoSpaceBefore = Arrays.asList(":", "!", "?", ";", ",", ".", ")", "]", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
 			"}", "»", "°", //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			"'s","'re","'ve","'d","'m","'em","'ll","n't"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
-	
-	/** The EN no space after. */
-	static List<String> ENNoSpaceAfter = Arrays.asList( "'", "(", "[", "{", "«" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+			"'s", "'re", "'ve", "'d", "'m", "'em", "'ll", "n't"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$ //$NON-NLS-7$ //$NON-NLS-8$
 
-	/**
-	 * Gets the no space before.
-	 *
-	 * @param lang the lang
-	 * @return the no space before
-	 */
+	/** The EN no space after. */
+	static List<String> ENNoSpaceAfter = Arrays.asList("'", "(", "[", "{", "«"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+
+	/**
+	 * Gets the no space before.
+	 *
+	 * @param lang
+	 *            the lang
+	 * @return the no space before
+	 */
 	public static List<String> getNoSpaceBefore(String lang) {
-		
-		if (lang.startsWith("fr") || lang.startsWith("FR")) //$NON-NLS-1$ //$NON-NLS-2$
-			return (FRNoSpaceBefore);
-		else if (lang.startsWith("en") || lang.startsWith("EN") //$NON-NLS-1$ //$NON-NLS-2$
-				|| lang.startsWith("us") || lang.startsWith("US")) //$NON-NLS-1$ //$NON-NLS-2$
-			return (ENNoSpaceBefore);
-		else
+
+		if (lang.startsWith("fr") || lang.startsWith("FR")) //$NON-NLS-1$ //$NON-NLS-2$
+			return (FRNoSpaceBefore);
+		else if (lang.startsWith("en") || lang.startsWith("EN") //$NON-NLS-1$ //$NON-NLS-2$
+				|| lang.startsWith("us") || lang.startsWith("US")) //$NON-NLS-1$ //$NON-NLS-2$
 			return (ENNoSpaceBefore);
-	}
-
-	/**
-	 * Gets the no space after.
-	 *
-	 * @param lang the lang
-	 * @return the no space after
-	 */
+		else
+			return (ENNoSpaceBefore);
+	}
+
+	/**
+	 * Gets the no space after.
+	 *
+	 * @param lang
+	 *            the lang
+	 * @return the no space after
+	 */
 	public static List<String> getNoSpaceAfter(String lang) {
-		
-		if (lang.startsWith("fr") || lang.startsWith("FR")) //$NON-NLS-1$ //$NON-NLS-2$
-			return (FRNoSpaceAfter);
-		else if (lang.startsWith("en") || lang.startsWith("EN") //$NON-NLS-1$ //$NON-NLS-2$
-				|| lang.startsWith("us") || lang.startsWith("US")) //$NON-NLS-1$ //$NON-NLS-2$
-			return (ENNoSpaceAfter);
-		else
-			return (ENNoSpaceAfter);
-	}
-
-	/**
-	 * Format.
-	 *
-	 * @param str the str
-	 * @param lang the lang
-	 * @return the string
-	 */
-	public static String format(String str, String lang) {
-		if (lang == null)
-			lang = Locale.getDefault().getLanguage();
-		for (String punc : getNoSpaceAfter(lang)) {
-			str = str.replace(punc + " ", punc); //$NON-NLS-1$
-		}
-
-		for (String punc : getNoSpaceBefore(lang)) {
-			str = str.replace(" " + punc, punc); //$NON-NLS-1$
-		}
-
-		return str;
-	}
-
-	/**
-	 * Format.
-	 *
-	 * @param str the str
-	 * @param lang the lang
-	 * @return the string
-	 */
-	public static String format(String str, Object lang) {
-		if (lang == null)
-			lang = Locale.getDefault().getLanguage();
-		return format(str, lang.toString());
-	}
-}
+
+		if (lang.startsWith("fr") || lang.startsWith("FR")) //$NON-NLS-1$ //$NON-NLS-2$
+			return (FRNoSpaceAfter);
+		else if (lang.startsWith("en") || lang.startsWith("EN") //$NON-NLS-1$ //$NON-NLS-2$
+				|| lang.startsWith("us") || lang.startsWith("US")) //$NON-NLS-1$ //$NON-NLS-2$
+			return (ENNoSpaceAfter);
+		else
+			return (ENNoSpaceAfter);
+	}
+
+	/**
+	 * Format.
+	 *
+	 * @param str
+	 *            the str
+	 * @param lang
+	 *            the lang
+	 * @return the string
+	 */
+	public static String format(String str, String lang) {
+		if (lang == null)
+			lang = Locale.getDefault().getLanguage();
+		for (String punc : getNoSpaceAfter(lang)) {
+			str = str.replace(punc + " ", punc); //$NON-NLS-1$
+		}
+
+		for (String punc : getNoSpaceBefore(lang)) {
+			str = str.replace(" " + punc, punc); //$NON-NLS-1$
+		}
+
+		return str;
+	}
+
+	/**
+	 * Format.
+	 *
+	 * @param str
+	 *            the str
+	 * @param lang
+	 *            the lang
+	 * @return the string
+	 */
+	public static String format(String str, Object lang) {
+		if (lang == null)
+			lang = Locale.getDefault().getLanguage();
+		return format(str, lang.toString());
+	}
+}
Index: tmp/org.txm.utils/src/org/txm/utils/i18n/Localizer.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/i18n/Localizer.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/i18n/Localizer.java	(revision 2402)
@@ -44,7 +44,7 @@
 
 	/** The cls. */
 	private final Class<?> cls;
-	
+
 	/** The loc. */
 	private final Locale loc;
 
@@ -67,8 +67,10 @@
 	/**
 	 * Instantiates a new localizer.
 	 *
-	 * @param cls the cls
-	 * @param loc the loc
+	 * @param cls
+	 *            the cls
+	 * @param loc
+	 *            the loc
 	 */
 	public Localizer(Class<?> cls, Locale loc) {
 		this.cls = cls;
@@ -114,8 +116,7 @@
 	 * @return the string
 	 */
 	public String message(String key, Object arg1, Object arg2) {
-		return MessageFormat
-				.format(getString(key), new Object[] { arg1, arg2 });
+		return MessageFormat.format(getString(key), new Object[] { arg1, arg2 });
 	}
 
 	/**
@@ -135,11 +136,12 @@
 	/**
 	 * Query the bundle for the string corresponding to a key.
 	 * 
-	 * If a given key does not exist in the loaded bundle, this class look for
-	 * the key in a bundle with locale "en", "US". It the key is still not
-	 * found, it return the key itself.
+	 * If a given key does not exist in the loaded bundle, this class look for the
+	 * key in a bundle with locale "en", "US". It the key is still not found, it
+	 * return the key itself.
 	 *
-	 * @param key the key
+	 * @param key
+	 *            the key
 	 * @return the string
 	 */
 	private String getString(String key) {
@@ -162,9 +164,7 @@
 	private ResourceBundle getBundle() {
 		if (bundle == null) {
 			String s = getRessourcePrefix();
-			bundle = loc == null ? ResourceBundle.getBundle(s
-					+ UtilsCoreMessages.Localizer_1) : ResourceBundle.getBundle(s
-					+ UtilsCoreMessages.Localizer_1, loc);
+			bundle = loc == null ? ResourceBundle.getBundle(s + UtilsCoreMessages.Localizer_1) : ResourceBundle.getBundle(s + UtilsCoreMessages.Localizer_1, loc);
 		}
 		return bundle;
 	}
@@ -177,8 +177,7 @@
 	private ResourceBundle getDefaultBundle() {
 		if (default_bundle == null) {
 			String s = getRessourcePrefix();
-			default_bundle = ResourceBundle.getBundle(s + UtilsCoreMessages.Localizer_1,
-					new Locale("en", "US")); //$NON-NLS-1$//$NON-NLS-2$ 
+			default_bundle = ResourceBundle.getBundle(s + UtilsCoreMessages.Localizer_1, new Locale("en", "US")); //$NON-NLS-1$//$NON-NLS-2$
 		}
 		return default_bundle;
 	}
Index: tmp/org.txm.utils/src/org/txm/utils/saxon/SaxonNodeSet.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/saxon/SaxonNodeSet.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/saxon/SaxonNodeSet.java	(revision 2402)
@@ -1,5 +1,6 @@
 package org.txm.utils.saxon;
 //The implementation of exslt node-set() function for Saxon-HE processor
+
 //Usage:
 //final TransformerFactory factory = new net.sf.saxon.TransformerFactoryImpl();
 //((TransformerFactoryImpl) factory).getConfiguration().registerExtensionFunction(new SaxonNodeSet());
@@ -14,16 +15,15 @@
 import net.sf.saxon.value.SequenceType;
 
 @SuppressWarnings("serial") //$NON-NLS-1$
-public class SaxonNodeSet extends ExtensionFunctionDefinition
-{
+public class SaxonNodeSet extends ExtensionFunctionDefinition {
 	@Override
-	public SequenceType[] getArgumentTypes() { 
-		return new SequenceType[] { SequenceType.NODE_SEQUENCE }; 
+	public SequenceType[] getArgumentTypes() {
+		return new SequenceType[] { SequenceType.NODE_SEQUENCE };
 	}
 
 	@Override
-	public StructuredQName getFunctionQName() { 
-		return new StructuredQName("", "http://exslt.org/common", "node-set");  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	public StructuredQName getFunctionQName() {
+		return new StructuredQName("", "http://exslt.org/common", "node-set"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
 
 	@Override
@@ -32,20 +32,17 @@
 	}
 
 	@Override
-	public boolean trustResultType() { 
+	public boolean trustResultType() {
 		return true;
 	}
 
 	@Override
-	public ExtensionFunctionCall makeCallExpression()
-	{
+	public ExtensionFunctionCall makeCallExpression() {
 		return new ExtensionFunctionCall() {
 			@Override
-			public SequenceIterator call(final SequenceIterator[] arguments, final XPathContext context)
-					throws XPathException
-					{
+			public SequenceIterator call(final SequenceIterator[] arguments, final XPathContext context) throws XPathException {
 				return arguments[0];
-					}
+			}
 		};
 	}
 
Index: tmp/org.txm.utils/src/org/txm/utils/saxon/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/saxon/package.html	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/saxon/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>Tools for Saxon</p>
+	<p>Tools for Saxon</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/Diff.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Diff.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/Diff.java	(revision 2402)
@@ -30,937 +30,964 @@
 import java.util.ArrayList;
 import java.util.Hashtable;
 
-/** A class to compare vectors of objects.  The result of comparison
-    is a list of <code>change</code> objects which form an
-    edit script.  The objects compared are traditionally lines
-    of text from two files.  Comparison options such as "ignore
-    whitespace" are implemented by modifying the <code>equals</code>
-    and <code>hashcode</code> methods for the objects compared.
-<p>
-   The basic algorithm is described in: </br>
-   "An O(ND) Difference Algorithm and its Variations", Eugene Myers,
-   Algorithmica Vol. 1 No. 2, 1986, p 251.  
-<p>
-   This class outputs different results from GNU diff 1.15 on some
-   inputs.  Our results are actually better (smaller change list, smaller
-   total size of changes), but it would be nice to know why.  Perhaps
-   there is a memory overwrite bug in GNU diff 1.15.
-
-  @author Stuart D. Gathman, translated from GNU diff 1.15
-    Copyright (C) 2000  Business Management Systems, Inc.
-<p>
-    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 1, or (at your option)
-    any later version.
-<p>
-    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.
-<p>
-    You should have received a copy of the <a href=COPYING.txt>
-    GNU General Public License</a>
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
+/**
+ * A class to compare vectors of objects. The result of comparison is a list of
+ * <code>change</code> objects which form an edit script. The objects compared
+ * are traditionally lines of text from two files. Comparison options such as
+ * "ignore whitespace" are implemented by modifying the <code>equals</code> and
+ * <code>hashcode</code> methods for the objects compared.
+ * <p>
+ * The basic algorithm is described in: </br>
+ * "An O(ND) Difference Algorithm and its Variations", Eugene Myers,
+ * Algorithmica Vol. 1 No. 2, 1986, p 251.
+ * <p>
+ * This class outputs different results from GNU diff 1.15 on some inputs. Our
+ * results are actually better (smaller change list, smaller total size of
+ * changes), but it would be nice to know why. Perhaps there is a memory
+ * overwrite bug in GNU diff 1.15.
+ * 
+ * @author Stuart D. Gathman, translated from GNU diff 1.15 Copyright (C) 2000
+ *         Business Management Systems, Inc.
+ *         <p>
+ *         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 1, or (at your option)
+ *         any later version.
+ *         <p>
+ *         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.
+ *         <p>
+ *         You should have received a copy of the <a href=COPYING.txt> GNU
+ *         General Public License</a> along with this program; if not, write to
+ *         the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA
+ *         02139, USA.
+ * 
  */
 
 public class Diff {
 
-  /** Prepare to find differences between two arrays.  Each element of
-      the arrays is translated to an "equivalence number" based on
-      the result of <code>equals</code>.  The original Object arrays
-      are no longer needed for computing the differences.  They will
-      be needed again later to print the results of the comparison as
-      an edit script, if desired.
-   */
-  public Diff(Object[] a,Object[] b) {
-    Hashtable h = new Hashtable(a.length + b.length);
-    filevec[0] = new file_data(a,h);
-    filevec[1] = new file_data(b,h);
-  }
+	/**
+	 * Prepare to find differences between two arrays. Each element of the arrays is
+	 * translated to an "equivalence number" based on the result of
+	 * <code>equals</code>. The original Object arrays are no longer needed for
+	 * computing the differences. They will be needed again later to print the
+	 * results of the comparison as an edit script, if desired.
+	 */
+	public Diff(Object[] a, Object[] b) {
+		Hashtable h = new Hashtable(a.length + b.length);
+		filevec[0] = new file_data(a, h);
+		filevec[1] = new file_data(b, h);
+	}
 
-  /** 1 more than the maximum equivalence value used for this or its
-     sibling file. */
-  private int equiv_max = 1;
+	/**
+	 * 1 more than the maximum equivalence value used for this or its sibling file.
+	 */
+	private int equiv_max = 1;
 
-  /** When set to true, the comparison uses a heuristic to speed it up.
-    With this heuristic, for files with a constant small density
-    of changes, the algorithm is linear in the file size.  */
-  public boolean heuristic = false;
+	/**
+	 * When set to true, the comparison uses a heuristic to speed it up. With this
+	 * heuristic, for files with a constant small density of changes, the algorithm
+	 * is linear in the file size.
+	 */
+	public boolean heuristic = false;
 
-  /** When set to true, the algorithm returns a guarranteed minimal
-      set of changes.  This makes things slower, sometimes much slower. */
-  public boolean no_discards = false;
+	/**
+	 * When set to true, the algorithm returns a guarranteed minimal set of changes.
+	 * This makes things slower, sometimes much slower.
+	 */
+	public boolean no_discards = false;
 
-  private int[] xvec, yvec;	/* Vectors being compared. */
-  private int[] fdiag;		/* Vector, indexed by diagonal, containing
-				   the X coordinate of the point furthest
-				   along the given diagonal in the forward
-				   search of the edit matrix. */
-  private int[] bdiag;		/* Vector, indexed by diagonal, containing
-				   the X coordinate of the point furthest
-				   along the given diagonal in the backward
-				   search of the edit matrix. */
-  private int fdiagoff, bdiagoff;
-  private final file_data[] filevec = new file_data[2];
-  private int cost;
-  /** Snakes bigger than this are considered "big". */
-  private static final int SNAKE_LIMIT = 20;
+	private int[] xvec, yvec; /* Vectors being compared. */
+	private int[] fdiag; /*
+							 * Vector, indexed by diagonal, containing the X coordinate of the point
+							 * furthest along the given diagonal in the forward search of the edit matrix.
+							 */
+	private int[] bdiag; /*
+							 * Vector, indexed by diagonal, containing the X coordinate of the point
+							 * furthest along the given diagonal in the backward search of the edit matrix.
+							 */
+	private int fdiagoff, bdiagoff;
+	private final file_data[] filevec = new file_data[2];
+	private int cost;
+	/** Snakes bigger than this are considered "big". */
+	private static final int SNAKE_LIMIT = 20;
 
-  /** Find the midpoint of the shortest edit script for a specified
-     portion of the two files.
+	/**
+	 * Find the midpoint of the shortest edit script for a specified portion of the
+	 * two files.
+	 * 
+	 * We scan from the beginnings of the files, and simultaneously from the ends,
+	 * doing a breadth-first search through the space of edit-sequence. When the two
+	 * searches meet, we have found the midpoint of the shortest edit sequence.
+	 * 
+	 * The value returned is the number of the diagonal on which the midpoint lies.
+	 * The diagonal number equals the number of inserted lines minus the number of
+	 * deleted lines (counting only lines before the midpoint). The edit cost is
+	 * stored into COST; this is the total number of lines inserted or deleted
+	 * (counting only lines before the midpoint).
+	 * 
+	 * This function assumes that the first lines of the specified portions of the
+	 * two files do not match, and likewise that the last lines do not match. The
+	 * caller must trim matching lines from the beginning and end of the portions it
+	 * is going to specify.
+	 * 
+	 * Note that if we return the "wrong" diagonal value, or if the value of bdiag
+	 * at that diagonal is "wrong", the worst this can do is cause suboptimal diff
+	 * output. It cannot cause incorrect diff output.
+	 */
 
-     We scan from the beginnings of the files, and simultaneously from the ends,
-     doing a breadth-first search through the space of edit-sequence.
-     When the two searches meet, we have found the midpoint of the shortest
-     edit sequence.
+	private int diag(int xoff, int xlim, int yoff, int ylim) {
+		final int[] fd = fdiag; // Give the compiler a chance.
+		final int[] bd = bdiag; // Additional help for the compiler.
+		final int[] xv = xvec; // Still more help for the compiler.
+		final int[] yv = yvec; // And more and more . . .
+		final int dmin = xoff - ylim; // Minimum valid diagonal.
+		final int dmax = xlim - yoff; // Maximum valid diagonal.
+		final int fmid = xoff - yoff; // Center diagonal of top-down search.
+		final int bmid = xlim - ylim; // Center diagonal of bottom-up search.
+		int fmin = fmid, fmax = fmid; // Limits of top-down search.
+		int bmin = bmid, bmax = bmid; // Limits of bottom-up search.
+		/*
+		 * True if southeast corner is on an odd diagonal with respect to the northwest.
+		 */
+		final boolean odd = (fmid - bmid & 1) != 0;
 
-     The value returned is the number of the diagonal on which the midpoint lies.
-     The diagonal number equals the number of inserted lines minus the number
-     of deleted lines (counting only lines before the midpoint).
-     The edit cost is stored into COST; this is the total number of
-     lines inserted or deleted (counting only lines before the midpoint).
+		fd[fdiagoff + fmid] = xoff;
+		bd[bdiagoff + bmid] = xlim;
 
-     This function assumes that the first lines of the specified portions
-     of the two files do not match, and likewise that the last lines do not
-     match.  The caller must trim matching lines from the beginning and end
-     of the portions it is going to specify.
+		for (int c = 1;; ++c) {
+			int d; /* Active diagonal. */
+			boolean big_snake = false;
 
-     Note that if we return the "wrong" diagonal value, or if
-     the value of bdiag at that diagonal is "wrong",
-     the worst this can do is cause suboptimal diff output.
-     It cannot cause incorrect diff output.  */
+			/* Extend the top-down search by an edit step in each diagonal. */
+			if (fmin > dmin)
+				fd[fdiagoff + --fmin - 1] = -1;
+			else
+				++fmin;
+			if (fmax < dmax)
+				fd[fdiagoff + ++fmax + 1] = -1;
+			else
+				--fmax;
+			for (d = fmax; d >= fmin; d -= 2) {
+				int x, y, oldx, tlo = fd[fdiagoff + d - 1], thi = fd[fdiagoff + d + 1];
 
-  private int diag (int xoff, int xlim, int yoff, int ylim) {
-    final int[] fd = fdiag;	// Give the compiler a chance.
-    final int[] bd = bdiag;	// Additional help for the compiler.
-    final int[] xv = xvec;		// Still more help for the compiler.
-    final int[] yv = yvec;		// And more and more . . .
-    final int dmin = xoff - ylim;	// Minimum valid diagonal.
-    final int dmax = xlim - yoff;	// Maximum valid diagonal.
-    final int fmid = xoff - yoff;	// Center diagonal of top-down search.
-    final int bmid = xlim - ylim;	// Center diagonal of bottom-up search.
-    int fmin = fmid, fmax = fmid;	// Limits of top-down search.
-    int bmin = bmid, bmax = bmid;	// Limits of bottom-up search.
-    /* True if southeast corner is on an odd
-				     diagonal with respect to the northwest. */
-    final boolean odd = (fmid - bmid & 1) != 0;	
+				if (tlo >= thi)
+					x = tlo + 1;
+				else
+					x = thi;
+				oldx = x;
+				y = x - d;
+				while (x < xlim && y < ylim && xv[x] == yv[y]) {
+					++x;
+					++y;
+				}
+				if (x - oldx > SNAKE_LIMIT)
+					big_snake = true;
+				fd[fdiagoff + d] = x;
+				if (odd && bmin <= d && d <= bmax && bd[bdiagoff + d] <= fd[fdiagoff + d]) {
+					cost = 2 * c - 1;
+					return d;
+				}
+			}
 
-    fd[fdiagoff + fmid] = xoff;
-    bd[bdiagoff + bmid] = xlim;
+			/* Similar extend the bottom-up search. */
+			if (bmin > dmin)
+				bd[bdiagoff + --bmin - 1] = Integer.MAX_VALUE;
+			else
+				++bmin;
+			if (bmax < dmax)
+				bd[bdiagoff + ++bmax + 1] = Integer.MAX_VALUE;
+			else
+				--bmax;
+			for (d = bmax; d >= bmin; d -= 2) {
+				int x, y, oldx, tlo = bd[bdiagoff + d - 1], thi = bd[bdiagoff + d + 1];
 
-    for (int c = 1;; ++c)
-      {
-	int d;			/* Active diagonal. */
-	boolean big_snake = false;
+				if (tlo < thi)
+					x = tlo;
+				else
+					x = thi - 1;
+				oldx = x;
+				y = x - d;
+				while (x > xoff && y > yoff && xv[x - 1] == yv[y - 1]) {
+					--x;
+					--y;
+				}
+				if (oldx - x > SNAKE_LIMIT)
+					big_snake = true;
+				bd[bdiagoff + d] = x;
+				if (!odd && fmin <= d && d <= fmax && bd[bdiagoff + d] <= fd[fdiagoff + d]) {
+					cost = 2 * c;
+					return d;
+				}
+			}
 
-	/* Extend the top-down search by an edit step in each diagonal. */
-	if (fmin > dmin)
-	  fd[fdiagoff + --fmin - 1] = -1;
-	else
-	  ++fmin;
-	if (fmax < dmax)
-	  fd[fdiagoff + ++fmax + 1] = -1;
-	else
-	  --fmax;
-	for (d = fmax; d >= fmin; d -= 2)
-	  {
-	    int x, y, oldx, tlo = fd[fdiagoff + d - 1], thi = fd[fdiagoff + d + 1];
+			/*
+			 * Heuristic: check occasionally for a diagonal that has made lots of progress
+			 * compared with the edit distance. If we have any such, find the one that has
+			 * made the most progress and return it as if it had succeeded.
+			 * 
+			 * With this heuristic, for files with a constant small density of changes, the
+			 * algorithm is linear in the file size.
+			 */
 
-	    if (tlo >= thi)
-	      x = tlo + 1;
-	    else
-	      x = thi;
-	    oldx = x;
-	    y = x - d;
-	    while (x < xlim && y < ylim && xv[x] == yv[y]) {
-	      ++x; ++y;
-	    }
-	    if (x - oldx > SNAKE_LIMIT)
-	      big_snake = true;
-	    fd[fdiagoff + d] = x;
-	    if (odd && bmin <= d && d <= bmax && bd[bdiagoff + d] <= fd[fdiagoff + d])
-	      {
-		cost = 2 * c - 1;
-		return d;
-	      }
-	  }
+			if (c > 200 && big_snake && heuristic) {
+				int best = 0;
+				int bestpos = -1;
 
-	/* Similar extend the bottom-up search. */
-	if (bmin > dmin)
-	  bd[bdiagoff + --bmin - 1] = Integer.MAX_VALUE;
-	else
-	  ++bmin;
-	if (bmax < dmax)
-	  bd[bdiagoff + ++bmax + 1] = Integer.MAX_VALUE;
-	else
-	  --bmax;
-	for (d = bmax; d >= bmin; d -= 2)
-	  {
-	    int x, y, oldx, tlo = bd[bdiagoff + d - 1], thi = bd[bdiagoff + d + 1];
+				for (d = fmax; d >= fmin; d -= 2) {
+					int dd = d - fmid;
+					int x = fd[fdiagoff + d];
+					int y = x - d;
+					int v = (x - xoff) * 2 - dd;
+					if (v > 12 * (c + (dd < 0 ? -dd : dd))) {
+						if (v > best && xoff + SNAKE_LIMIT <= x && x < xlim && yoff + SNAKE_LIMIT <= y && y < ylim) {
+							/*
+							 * We have a good enough best diagonal; now insist that it end with a
+							 * significant snake.
+							 */
+							int k;
 
-	    if (tlo < thi)
-	      x = tlo;
-	    else
-	      x = thi - 1;
-	    oldx = x;
-	    y = x - d;
-	    while (x > xoff && y > yoff && xv[x - 1] == yv[y - 1]) {
-	      --x; --y;
-	    }
-	    if (oldx - x > SNAKE_LIMIT)
-	      big_snake = true;
-	    bd[bdiagoff + d] = x;
-	    if (!odd && fmin <= d && d <= fmax && bd[bdiagoff + d] <= fd[fdiagoff + d])
-	      {
-		cost = 2 * c;
-		return d;
-	      }
-	  }
+							for (k = 1; xvec[x - k] == yvec[y - k]; k++)
+								if (k == SNAKE_LIMIT) {
+									best = v;
+									bestpos = d;
+									break;
+								}
+						}
+					}
+				}
+				if (best > 0) {
+					cost = 2 * c - 1;
+					return bestpos;
+				}
 
-	/* Heuristic: check occasionally for a diagonal that has made
-	   lots of progress compared with the edit distance.
-	   If we have any such, find the one that has made the most
-	   progress and return it as if it had succeeded.
+				best = 0;
+				for (d = bmax; d >= bmin; d -= 2) {
+					int dd = d - bmid;
+					int x = bd[bdiagoff + d];
+					int y = x - d;
+					int v = (xlim - x) * 2 + dd;
+					if (v > 12 * (c + (dd < 0 ? -dd : dd))) {
+						if (v > best && xoff < x && x <= xlim - SNAKE_LIMIT && yoff < y && y <= ylim - SNAKE_LIMIT) {
+							/*
+							 * We have a good enough best diagonal; now insist that it end with a
+							 * significant snake.
+							 */
+							int k;
 
-	   With this heuristic, for files with a constant small density
-	   of changes, the algorithm is linear in the file size.  */
+							for (k = 0; xvec[x + k] == yvec[y + k]; k++)
+								if (k == SNAKE_LIMIT) {
+									best = v;
+									bestpos = d;
+									break;
+								}
+						}
+					}
+				}
+				if (best > 0) {
+					cost = 2 * c - 1;
+					return bestpos;
+				}
+			}
+		}
+	}
 
-	if (c > 200 && big_snake && heuristic)
-	  {
-	    int best = 0;
-	    int bestpos = -1;
+	/**
+	 * Compare in detail contiguous subsequences of the two files which are known,
+	 * as a whole, to match each other.
+	 * 
+	 * The results are recorded in the vectors filevec[N].changed_flag, by storing a
+	 * 1 in the element for each line that is an insertion or deletion.
+	 * 
+	 * The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1.
+	 * 
+	 * Note that XLIM, YLIM are exclusive bounds. All line numbers are origin-0 and
+	 * discarded lines are not counted.
+	 */
 
-	    for (d = fmax; d >= fmin; d -= 2)
-	      {
-		int dd = d - fmid;
-		int x = fd[fdiagoff + d];
-		int y = x - d;
-		int v = (x - xoff) * 2 - dd;
-		if (v > 12 * (c + (dd < 0 ? -dd : dd)))
-		  {
-		    if (v > best
-		        && xoff + SNAKE_LIMIT <= x && x < xlim
-			&& yoff + SNAKE_LIMIT <= y && y < ylim)
-		      {
-			/* We have a good enough best diagonal;
-			   now insist that it end with a significant snake.  */
-			int k;
+	private void compareseq(int xoff, int xlim, int yoff, int ylim) {
+		/* Slide down the bottom initial diagonal. */
+		while (xoff < xlim && yoff < ylim && xvec[xoff] == yvec[yoff]) {
+			++xoff;
+			++yoff;
+		}
+		/* Slide up the top initial diagonal. */
+		while (xlim > xoff && ylim > yoff && xvec[xlim - 1] == yvec[ylim - 1]) {
+			--xlim;
+			--ylim;
+		}
 
-			for (k = 1; xvec[x - k] == yvec[y - k]; k++)
-			  if (k == SNAKE_LIMIT)
-			    {
-			      best = v;
-			      bestpos = d;
-			      break;
-			    }
-		      }
-		  }
-	      }
-	    if (best > 0)
-	      {
-		cost = 2 * c - 1;
-		return bestpos;
-	      }
+		/* Handle simple cases. */
+		if (xoff == xlim)
+			while (yoff < ylim)
+				filevec[1].changed_flag[1 + filevec[1].realindexes[yoff++]] = true;
+		else if (yoff == ylim)
+			while (xoff < xlim)
+				filevec[0].changed_flag[1 + filevec[0].realindexes[xoff++]] = true;
+		else {
+			/* Find a point of correspondence in the middle of the files. */
 
-	    best = 0;
-	    for (d = bmax; d >= bmin; d -= 2)
-	      {
-		int dd = d - bmid;
-		int x = bd[bdiagoff + d];
-		int y = x - d;
-		int v = (xlim - x) * 2 + dd;
-		if (v > 12 * (c + (dd < 0 ? -dd : dd)))
-		  {
-		    if (v > best
-		        && xoff < x && x <= xlim - SNAKE_LIMIT
-			&& yoff < y && y <= ylim - SNAKE_LIMIT)
-		      {
-			/* We have a good enough best diagonal;
-			   now insist that it end with a significant snake.  */
-			int k;
+			int d = diag(xoff, xlim, yoff, ylim);
+			int c = cost;
+			int f = fdiag[fdiagoff + d];
+			int b = bdiag[bdiagoff + d];
 
-			for (k = 0; xvec[x + k] == yvec[y + k]; k++)
-			  if (k == SNAKE_LIMIT)
-			    {
-			      best = v;
-			      bestpos = d;
-			      break;
-			    }
-		      }
-		  }
-	      }
-	    if (best > 0)
-	      {
-		cost = 2 * c - 1;
-		return bestpos;
-	      }
-	  }
-      }
-  }
+			if (c == 1) {
+				/*
+				 * This should be impossible, because it implies that one of the two
+				 * subsequences is empty, and that case was handled above without calling
+				 * `diag'. Let's verify that this is true.
+				 */
+				throw new IllegalArgumentException("Empty subsequence"); //$NON-NLS-1$
+			} else {
+				/* Use that point to split this problem into two subproblems. */
+				compareseq(xoff, b, yoff, b - d);
+				/*
+				 * This used to use f instead of b, but that is incorrect! It is not necessarily
+				 * the case that diagonal d has a snake from b to f.
+				 */
+				compareseq(b, xlim, b - d, ylim);
+			}
+		}
+	}
 
-  /** Compare in detail contiguous subsequences of the two files
-     which are known, as a whole, to match each other.
+	/**
+	 * Discard lines from one file that have no matches in the other file.
+	 */
 
-     The results are recorded in the vectors filevec[N].changed_flag, by
-     storing a 1 in the element for each line that is an insertion or deletion.
+	private void discard_confusing_lines() {
+		filevec[0].discard_confusing_lines(filevec[1]);
+		filevec[1].discard_confusing_lines(filevec[0]);
+	}
 
-     The subsequence of file 0 is [XOFF, XLIM) and likewise for file 1.
+	private boolean inhibit = false;
 
-     Note that XLIM, YLIM are exclusive bounds.
-     All line numbers are origin-0 and discarded lines are not counted.  */
+	/**
+	 * Adjust inserts/deletes of blank lines to join changes as much as possible.
+	 */
 
-  private void compareseq (int xoff, int xlim, int yoff, int ylim) {
-    /* Slide down the bottom initial diagonal. */
-    while (xoff < xlim && yoff < ylim && xvec[xoff] == yvec[yoff]) {
-      ++xoff; ++yoff;
-    }
-    /* Slide up the top initial diagonal. */
-    while (xlim > xoff && ylim > yoff && xvec[xlim - 1] == yvec[ylim - 1]) {
-      --xlim; --ylim;
-    }
-    
-    /* Handle simple cases. */
-    if (xoff == xlim)
-      while (yoff < ylim)
-	filevec[1].changed_flag[1+filevec[1].realindexes[yoff++]] = true;
-    else if (yoff == ylim)
-      while (xoff < xlim)
-	filevec[0].changed_flag[1+filevec[0].realindexes[xoff++]] = true;
-    else
-      {
-	/* Find a point of correspondence in the middle of the files.  */
+	private void shift_boundaries() {
+		if (inhibit)
+			return;
+		filevec[0].shift_boundaries(filevec[1]);
+		filevec[1].shift_boundaries(filevec[0]);
+	}
 
-	int d = diag (xoff, xlim, yoff, ylim);
-	int c = cost;
-	int f = fdiag[fdiagoff + d];
-	int b = bdiag[bdiagoff + d];
+	public interface ScriptBuilder {
+		/**
+		 * Scan the tables of which lines are inserted and deleted, producing an edit
+		 * script.
+		 * 
+		 * @param changed0
+		 *            true for lines in first file which do not match 2nd
+		 * @param len0
+		 *            number of lines in first file
+		 * @param changed1
+		 *            true for lines in 2nd file which do not match 1st
+		 * @param len1
+		 *            number of lines in 2nd file
+		 * @return a linked list of changes - or null
+		 */
+		public change build_script(boolean[] changed0, int len0, boolean[] changed1, int len1);
+	}
 
-	if (c == 1)
-	  {
-	    /* This should be impossible, because it implies that
-	       one of the two subsequences is empty,
-	       and that case was handled above without calling `diag'.
-	       Let's verify that this is true.  */
-	    throw new IllegalArgumentException("Empty subsequence"); //$NON-NLS-1$
-	  }
-	else
-	  {
-	    /* Use that point to split this problem into two subproblems.  */
-	    compareseq (xoff, b, yoff, b - d);
-	    /* This used to use f instead of b,
-	       but that is incorrect!
-	       It is not necessarily the case that diagonal d
-	       has a snake from b to f.  */
-	    compareseq (b, xlim, b - d, ylim);
-	  }
-      }
-  }
+	/**
+	 * Scan the tables of which lines are inserted and deleted, producing an edit
+	 * script in reverse order.
+	 */
 
-  /** Discard lines from one file that have no matches in the other file.
-   */
+	static class ReverseScript implements ScriptBuilder {
+		public change build_script(final boolean[] changed0, int len0, final boolean[] changed1, int len1) {
+			change script = null;
+			int i0 = 0, i1 = 0;
+			while (i0 < len0 || i1 < len1) {
+				if (changed0[1 + i0] || changed1[1 + i1]) {
+					int line0 = i0, line1 = i1;
 
-  private void discard_confusing_lines() {
-    filevec[0].discard_confusing_lines(filevec[1]);
-    filevec[1].discard_confusing_lines(filevec[0]);
-  }
+					/* Find # lines changed here in each file. */
+					while (changed0[1 + i0])
+						++i0;
+					while (changed1[1 + i1])
+						++i1;
 
-  private boolean inhibit = false;
+					/* Record this change. */
+					script = new change(line0, line1, i0 - line0, i1 - line1, script);
+				}
 
-  /** Adjust inserts/deletes of blank lines to join changes
-     as much as possible.
-   */
+				/* We have reached lines in the two files that match each other. */
+				i0++;
+				i1++;
+			}
 
-  private void shift_boundaries() {
-    if (inhibit)
-      return;
-    filevec[0].shift_boundaries(filevec[1]);
-    filevec[1].shift_boundaries(filevec[0]);
-  }
+			return script;
+		}
+	}
 
-  public interface ScriptBuilder {
-  /** Scan the tables of which lines are inserted and deleted,
-     producing an edit script. 
-   @param changed0 true for lines in first file which do not match 2nd
-   @param len0 number of lines in first file
-   @param changed1 true for lines in 2nd file which do not match 1st
-   @param len1 number of lines in 2nd file
-   @return a linked list of changes - or null
-   */
-    public change build_script(
-      boolean[] changed0,int len0,
-      boolean[] changed1,int len1
-    );
-  }
+	static class ForwardScript implements ScriptBuilder {
+		/**
+		 * Scan the tables of which lines are inserted and deleted, producing an edit
+		 * script in forward order.
+		 */
+		public change build_script(final boolean[] changed0, int len0, final boolean[] changed1, int len1) {
+			change script = null;
+			int i0 = len0, i1 = len1;
 
-  /** Scan the tables of which lines are inserted and deleted,
-     producing an edit script in reverse order.  */
+			while (i0 >= 0 || i1 >= 0) {
+				if (changed0[i0] || changed1[i1]) {
+					int line0 = i0, line1 = i1;
 
-  static class ReverseScript implements ScriptBuilder {
-    public  change build_script(
-	final boolean[] changed0,int len0,
-	final boolean[] changed1,int len1)
-    {
-      change script = null;
-      int i0 = 0, i1 = 0;
-      while (i0 < len0 || i1 < len1) {
-	if (changed0[1+i0] || changed1[1+i1]) {
-	    int line0 = i0, line1 = i1;
+					/* Find # lines changed here in each file. */
+					while (changed0[i0])
+						--i0;
+					while (changed1[i1])
+						--i1;
 
-	    /* Find # lines changed here in each file.  */
-	    while (changed0[1+i0]) ++i0;
-	    while (changed1[1+i1]) ++i1;
+					/* Record this change. */
+					script = new change(i0, i1, line0 - i0, line1 - i1, script);
+				}
 
-	    /* Record this change.  */
-	    script = new change(line0, line1, i0 - line0, i1 - line1, script);
+				/* We have reached lines in the two files that match each other. */
+				i0--;
+				i1--;
+			}
+
+			return script;
+		}
 	}
 
-	/* We have reached lines in the two files that match each other.  */
-	i0++; i1++;
-      }
+	/** Standard ScriptBuilders. */
+	public final static ScriptBuilder forwardScript = new ForwardScript(), reverseScript = new ReverseScript();
 
-      return script;
-    }
-  }
+	/*
+	 * Report the differences of two files. DEPTH is the current directory depth.
+	 */
+	public final change diff_2(final boolean reverse) {
+		return diff(reverse ? reverseScript : forwardScript);
+	}
 
-  static class ForwardScript implements ScriptBuilder {
-    /** Scan the tables of which lines are inserted and deleted,
-       producing an edit script in forward order.  */
-    public change build_script(
-	  final boolean[] changed0,int len0,
-	  final boolean[] changed1,int len1)
-    {
-      change script = null;
-      int i0 = len0, i1 = len1;
+	/**
+	 * Get the results of comparison as an edit script. The script is described by a
+	 * list of changes. The standard ScriptBuilder implementations provide for
+	 * forward and reverse edit scripts. Alternate implementations could, for
+	 * instance, list common elements instead of differences.
+	 * 
+	 * @param bld
+	 *            an object to build the script from change flags
+	 * @return the head of a list of changes
+	 */
+	public change diff(final ScriptBuilder bld) {
 
-      while (i0 >= 0 || i1 >= 0)
-	{
-	  if (changed0[i0] || changed1[i1])
-	    {
-	      int line0 = i0, line1 = i1;
+		/*
+		 * Some lines are obviously insertions or deletions because they don't match
+		 * anything. Detect them now, and avoid even thinking about them in the main
+		 * comparison algorithm.
+		 */
 
-	      /* Find # lines changed here in each file.  */
-	      while (changed0[i0]) --i0;
-	      while (changed1[i1]) --i1;
+		discard_confusing_lines();
 
-	      /* Record this change.  */
-	      script = new change(i0, i1, line0 - i0, line1 - i1, script);
-	    }
+		/*
+		 * Now do the main comparison algorithm, considering just the undiscarded lines.
+		 */
 
-	  /* We have reached lines in the two files that match each other.  */
-	  i0--; i1--;
-	}
+		xvec = filevec[0].undiscarded;
+		yvec = filevec[1].undiscarded;
 
-      return script;
-    }
-  }
+		int diags = filevec[0].nondiscarded_lines + filevec[1].nondiscarded_lines + 3;
+		fdiag = new int[diags];
+		fdiagoff = filevec[1].nondiscarded_lines + 1;
+		bdiag = new int[diags];
+		bdiagoff = filevec[1].nondiscarded_lines + 1;
 
-  /** Standard ScriptBuilders. */
-  public final static ScriptBuilder
-    forwardScript = new ForwardScript(),
-    reverseScript = new ReverseScript();
+		compareseq(0, filevec[0].nondiscarded_lines, 0, filevec[1].nondiscarded_lines);
+		fdiag = null;
+		bdiag = null;
 
-  /* Report the differences of two files.  DEPTH is the current directory
-     depth. */
-  public final change diff_2(final boolean reverse) {
-    return diff(reverse ? reverseScript : forwardScript);
-  }
+		/*
+		 * Modify the results slightly to make them prettier in cases where that can
+		 * validly be done.
+		 */
 
-  /** Get the results of comparison as an edit script.  The script 
-     is described by a list of changes.  The standard ScriptBuilder
-     implementations provide for forward and reverse edit scripts.
-     Alternate implementations could, for instance, list common elements 
-     instead of differences.
-     @param bld	an object to build the script from change flags
-     @return the head of a list of changes
-   */
-  public change diff(final ScriptBuilder bld) {
+		shift_boundaries();
 
-    /* Some lines are obviously insertions or deletions
-       because they don't match anything.  Detect them now,
-       and avoid even thinking about them in the main comparison algorithm.  */
+		/*
+		 * Get the results of comparison in the form of a chain of `struct change's --
+		 * an edit script.
+		 */
+		return bld.build_script(filevec[0].changed_flag, filevec[0].buffered_lines, filevec[1].changed_flag, filevec[1].buffered_lines);
 
-    discard_confusing_lines ();
+	}
 
-    /* Now do the main comparison algorithm, considering just the
-       undiscarded lines.  */
+	/**
+	 * The result of comparison is an "edit script": a chain of change objects. Each
+	 * change represents one place where some lines are deleted and some are
+	 * inserted.
+	 * 
+	 * LINE0 and LINE1 are the first affected lines in the two files (origin 0).
+	 * DELETED is the number of lines deleted here from file 0. INSERTED is the
+	 * number of lines inserted here in file 1.
+	 * 
+	 * If DELETED is 0 then LINE0 is the number of the line before which the
+	 * insertion was done; vice versa for INSERTED and LINE1.
+	 */
 
-    xvec = filevec[0].undiscarded;
-    yvec = filevec[1].undiscarded;
+	public static class change {
+		/** Previous or next edit command. */
+		public change link;
+		/** # lines of file 1 changed here. */
+		public final int inserted;
+		/** # lines of file 0 changed here. */
+		public final int deleted;
+		/** Line number of 1st deleted line. */
+		public final int line0;
+		/** Line number of 1st inserted line. */
+		public final int line1;
 
-    int diags =
-      filevec[0].nondiscarded_lines + filevec[1].nondiscarded_lines + 3;
-    fdiag = new int[diags];
-    fdiagoff = filevec[1].nondiscarded_lines + 1;
-    bdiag = new int[diags];
-    bdiagoff = filevec[1].nondiscarded_lines + 1;
+		/**
+		 * Cons an additional entry onto the front of an edit script OLD. LINE0 and
+		 * LINE1 are the first affected lines in the two files (origin 0). DELETED is
+		 * the number of lines deleted here from file 0. INSERTED is the number of lines
+		 * inserted here in file 1.
+		 * 
+		 * If DELETED is 0 then LINE0 is the number of the line before which the
+		 * insertion was done; vice versa for INSERTED and LINE1.
+		 */
+		public change(int line0, int line1, int deleted, int inserted, change old) {
+			this.line0 = line0;
+			this.line1 = line1;
+			this.inserted = inserted;
+			this.deleted = deleted;
+			this.link = old;
+			// System.err.println(line0+","+line1+","+inserted+","+deleted);
+		}
+	}
 
-    compareseq (0, filevec[0].nondiscarded_lines,
-		0, filevec[1].nondiscarded_lines);
-    fdiag = null;
-    bdiag = null;
+	/**
+	 * Data on one input file being compared.
+	 */
 
-    /* Modify the results slightly to make them prettier
-       in cases where that can validly be done.  */
+	class file_data {
 
-    shift_boundaries ();
+		/** Allocate changed array for the results of comparison. */
+		void clear() {
+			/*
+			 * Allocate a flag for each line of each file, saying whether that line is an
+			 * insertion or deletion. Allocate an extra element, always zero, at each end of
+			 * each vector.
+			 */
+			changed_flag = new boolean[buffered_lines + 2];
+		}
 
-    /* Get the results of comparison in the form of a chain
-       of `struct change's -- an edit script.  */
-    return bld.build_script(
-      filevec[0].changed_flag,
-      filevec[0].buffered_lines,
-      filevec[1].changed_flag,
-      filevec[1].buffered_lines
-    );
+		/**
+		 * Return equiv_count[I] as the number of lines in this file that fall in
+		 * equivalence class I.
+		 * 
+		 * @return the array of equivalence class counts.
+		 */
+		int[] equivCount() {
+			int[] equiv_count = new int[equiv_max];
+			for (int i = 0; i < buffered_lines; ++i)
+				++equiv_count[equivs[i]];
+			return equiv_count;
+		}
 
-  }
+		/**
+		 * Discard lines that have no matches in another file.
+		 * 
+		 * A line which is discarded will not be considered by the actual comparison
+		 * algorithm; it will be as if that line were not in the file. The file's
+		 * `realindexes' table maps virtual line numbers (which don't count the
+		 * discarded lines) into real line numbers; this is how the actual comparison
+		 * algorithm produces results that are comprehensible when the discarded lines
+		 * are counted.
+		 * <p>
+		 * When we discard a line, we also mark it as a deletion or insertion so that it
+		 * will be printed in the output.
+		 * 
+		 * @param f
+		 *            the other file
+		 */
+		void discard_confusing_lines(file_data f) {
+			clear();
+			/* Set up table of which lines are going to be discarded. */
+			final byte[] discarded = discardable(f.equivCount());
 
-  /** The result of comparison is an "edit script": a chain of change objects.
-     Each change represents one place where some lines are deleted
-     and some are inserted.
-     
-     LINE0 and LINE1 are the first affected lines in the two files (origin 0).
-     DELETED is the number of lines deleted here from file 0.
-     INSERTED is the number of lines inserted here in file 1.
+			/*
+			 * Don't really discard the provisional lines except when they occur in a run of
+			 * discardables, with nonprovisionals at the beginning and end.
+			 */
+			filterDiscards(discarded);
 
-     If DELETED is 0 then LINE0 is the number of the line before
-     which the insertion was done; vice versa for INSERTED and LINE1.  */
+			/* Actually discard the lines. */
+			discard(discarded);
+		}
 
-  public static class change {
-    /** Previous or next edit command. */
-    public change link;		
-    /** # lines of file 1 changed here.  */
-    public final int inserted;	
-    /** # lines of file 0 changed here.  */
-    public final int deleted;		
-    /** Line number of 1st deleted line.  */
-    public final int line0;		
-    /** Line number of 1st inserted line.  */
-    public final int line1;		
+		/**
+		 * Mark to be discarded each line that matches no line of another file. If a
+		 * line matches many lines, mark it as provisionally discardable.
+		 * 
+		 * @see equivCount()
+		 * @param counts
+		 *            The count of each equivalence number for the other file.
+		 * @return 0=nondiscardable, 1=discardable or 2=provisionally discardable for
+		 *         each line
+		 */
 
-    /** Cons an additional entry onto the front of an edit script OLD.
-       LINE0 and LINE1 are the first affected lines in the two files (origin 0).
-       DELETED is the number of lines deleted here from file 0.
-       INSERTED is the number of lines inserted here in file 1.
+		private byte[] discardable(final int[] counts) {
+			final int end = buffered_lines;
+			final byte[] discards = new byte[end];
+			final int[] equivs = this.equivs;
+			int many = 5;
+			int tem = end / 64;
 
-       If DELETED is 0 then LINE0 is the number of the line before
-       which the insertion was done; vice versa for INSERTED and LINE1.  */
-    public change(int line0, int line1, int deleted, int inserted, change old) {
-      this.line0 = line0;
-      this.line1 = line1;
-      this.inserted = inserted;
-      this.deleted = deleted;
-      this.link = old;
-      //System.err.println(line0+","+line1+","+inserted+","+deleted);
-    }
-  }
+			/*
+			 * Multiply MANY by approximate square root of number of lines. That is the
+			 * threshold for provisionally discardable lines.
+			 */
+			while ((tem = tem >> 2) > 0)
+				many *= 2;
 
-  /** Data on one input file being compared.  
-   */
+			for (int i = 0; i < end; i++) {
+				int nmatch;
+				if (equivs[i] == 0)
+					continue;
+				nmatch = counts[equivs[i]];
+				if (nmatch == 0)
+					discards[i] = 1;
+				else if (nmatch > many)
+					discards[i] = 2;
+			}
+			return discards;
+		}
 
-  class file_data {
+		/**
+		 * Don't really discard the provisional lines except when they occur in a run of
+		 * discardables, with nonprovisionals at the beginning and end.
+		 */
 
-    /** Allocate changed array for the results of comparison.  */
-    void clear() {
-      /* Allocate a flag for each line of each file, saying whether that line
-	 is an insertion or deletion.
-	 Allocate an extra element, always zero, at each end of each vector.
-       */
-      changed_flag = new boolean[buffered_lines + 2];
-    }
+		private void filterDiscards(final byte[] discards) {
+			final int end = buffered_lines;
 
-    /** Return equiv_count[I] as the number of lines in this file
-       that fall in equivalence class I.
-         @return the array of equivalence class counts.
-     */
-    int[] equivCount() {
-      int[] equiv_count = new int[equiv_max];
-      for (int i = 0; i < buffered_lines; ++i)
-	++equiv_count[equivs[i]];
-      return equiv_count;
-    }
+			for (int i = 0; i < end; i++) {
+				/* Cancel provisional discards not in middle of run of discards. */
+				if (discards[i] == 2)
+					discards[i] = 0;
+				else if (discards[i] != 0) {
+					/* We have found a nonprovisional discard. */
+					int j;
+					int length;
+					int provisional = 0;
 
-    /** Discard lines that have no matches in another file.
+					/*
+					 * Find end of this run of discardable lines. Count how many are provisionally
+					 * discardable.
+					 */
+					for (j = i; j < end; j++) {
+						if (discards[j] == 0)
+							break;
+						if (discards[j] == 2)
+							++provisional;
+					}
 
-       A line which is discarded will not be considered by the actual
-       comparison algorithm; it will be as if that line were not in the file.
-       The file's `realindexes' table maps virtual line numbers
-       (which don't count the discarded lines) into real line numbers;
-       this is how the actual comparison algorithm produces results
-       that are comprehensible when the discarded lines are counted.
-<p>
-       When we discard a line, we also mark it as a deletion or insertion
-       so that it will be printed in the output.  
-      @param f the other file   
-     */
-    void discard_confusing_lines(file_data f) {
-      clear();
-    /* Set up table of which lines are going to be discarded. */
-      final byte[] discarded = discardable(f.equivCount());
+					/* Cancel provisional discards at end, and shrink the run. */
+					while (j > i && discards[j - 1] == 2) {
+						discards[--j] = 0;
+						--provisional;
+					}
 
-    /* Don't really discard the provisional lines except when they occur
-       in a run of discardables, with nonprovisionals at the beginning
-       and end.  */
-      filterDiscards(discarded);
+					/*
+					 * Now we have the length of a run of discardable lines whose first and last are
+					 * not provisional.
+					 */
+					length = j - i;
 
-    /* Actually discard the lines. */
-      discard(discarded);
-    }
+					/*
+					 * If 1/4 of the lines in the run are provisional, cancel discarding of all
+					 * provisional lines in the run.
+					 */
+					if (provisional * 4 > length) {
+						while (j > i)
+							if (discards[--j] == 2)
+								discards[j] = 0;
+					} else {
+						int consec;
+						int minimum = 1;
+						int tem = length / 4;
 
-    /** Mark to be discarded each line that matches no line of another file.
-       If a line matches many lines, mark it as provisionally discardable.  
-       @see equivCount()
-       @param counts The count of each equivalence number for the other file.
-       @return 0=nondiscardable, 1=discardable or 2=provisionally discardable
-       	for each line
-     */
+						/*
+						 * MINIMUM is approximate square root of LENGTH/4. A subrun of two or more
+						 * provisionals can stand when LENGTH is at least 16. A subrun of 4 or more can
+						 * stand when LENGTH >= 64.
+						 */
+						while ((tem = tem >> 2) > 0)
+							minimum *= 2;
+						minimum++;
 
-    private byte[] discardable(final int[] counts) {
-      final int end = buffered_lines;
-      final byte[] discards = new byte[end];
-      final int[] equivs = this.equivs;
-      int many = 5;
-      int tem = end / 64;
+						/*
+						 * Cancel any subrun of MINIMUM or more provisionals within the larger run.
+						 */
+						for (j = 0, consec = 0; j < length; j++)
+							if (discards[i + j] != 2)
+								consec = 0;
+							else if (minimum == ++consec)
+								/* Back up to start of subrun, to cancel it all. */
+								j -= consec;
+							else if (minimum < consec)
+								discards[i + j] = 0;
 
-      /* Multiply MANY by approximate square root of number of lines.
-	 That is the threshold for provisionally discardable lines.  */
-      while ((tem = tem >> 2) > 0)
-	many *= 2;
+						/*
+						 * Scan from beginning of run until we find 3 or more nonprovisionals in a row
+						 * or until the first nonprovisional at least 8 lines in. Until that point,
+						 * cancel any provisionals.
+						 */
+						for (j = 0, consec = 0; j < length; j++) {
+							if (j >= 8 && discards[i + j] == 1)
+								break;
+							if (discards[i + j] == 2) {
+								consec = 0;
+								discards[i + j] = 0;
+							} else if (discards[i + j] == 0)
+								consec = 0;
+							else
+								consec++;
+							if (consec == 3)
+								break;
+						}
 
-      for (int i = 0; i < end; i++)
-	{
-	  int nmatch;
-	  if (equivs[i] == 0)
-	    continue;
-	  nmatch = counts[equivs[i]];
-	  if (nmatch == 0)
-	    discards[i] = 1;
-	  else if (nmatch > many)
-	    discards[i] = 2;
-	}
-      return discards;
-    }
+						/* I advances to the last line of the run. */
+						i += length - 1;
 
-    /** Don't really discard the provisional lines except when they occur
-       in a run of discardables, with nonprovisionals at the beginning
-       and end.  */
+						/* Same thing, from end. */
+						for (j = 0, consec = 0; j < length; j++) {
+							if (j >= 8 && discards[i - j] == 1)
+								break;
+							if (discards[i - j] == 2) {
+								consec = 0;
+								discards[i - j] = 0;
+							} else if (discards[i - j] == 0)
+								consec = 0;
+							else
+								consec++;
+							if (consec == 3)
+								break;
+						}
+					}
+				}
+			}
+		}
 
-    private void filterDiscards(final byte[] discards) {
-	final int end = buffered_lines;
+		/**
+		 * Actually discard the lines.
+		 * 
+		 * @param discards
+		 *            flags lines to be discarded
+		 */
+		private void discard(final byte[] discards) {
+			final int end = buffered_lines;
+			int j = 0;
+			for (int i = 0; i < end; ++i)
+				if (no_discards || discards[i] == 0) {
+					undiscarded[j] = equivs[i];
+					realindexes[j++] = i;
+				} else
+					changed_flag[1 + i] = true;
+			nondiscarded_lines = j;
+		}
 
-	for (int i = 0; i < end; i++)
-	  {
-	    /* Cancel provisional discards not in middle of run of discards.  */
-	    if (discards[i] == 2)
-	      discards[i] = 0;
-	    else if (discards[i] != 0)
-	      {
-		/* We have found a nonprovisional discard.  */
-		int j;
-		int length;
-		int provisional = 0;
+		file_data(Object[] data, Hashtable h) {
+			buffered_lines = data.length;
 
-		/* Find end of this run of discardable lines.
-		   Count how many are provisionally discardable.  */
-		for (j = i; j < end; j++)
-		  {
-		    if (discards[j] == 0)
-		      break;
-		    if (discards[j] == 2)
-		      ++provisional;
-		  }
+			equivs = new int[buffered_lines];
+			undiscarded = new int[buffered_lines];
+			realindexes = new int[buffered_lines];
 
-		/* Cancel provisional discards at end, and shrink the run.  */
-		while (j > i && discards[j - 1] == 2) {
-		  discards[--j] = 0; --provisional;
+			for (int i = 0; i < data.length; ++i) {
+				Integer ir = (Integer) h.get(data[i]);
+				if (ir == null)
+					h.put(data[i], new Integer(equivs[i] = equiv_max++));
+				else
+					equivs[i] = ir.intValue();
+			}
 		}
 
-		/* Now we have the length of a run of discardable lines
-		   whose first and last are not provisional.  */
-		length = j - i;
+		/**
+		 * Adjust inserts/deletes of blank lines to join changes as much as possible.
+		 * 
+		 * We do something when a run of changed lines include a blank line at one end
+		 * and have an excluded blank line at the other. We are free to choose which
+		 * blank line is included. `compareseq' always chooses the one at the beginning,
+		 * but usually it is cleaner to consider the following blank line to be the
+		 * "change". The only exception is if the preceding blank line would join this
+		 * change to other changes.
+		 * 
+		 * @param f
+		 *            the file being compared against
+		 */
 
-		/* If 1/4 of the lines in the run are provisional,
-		   cancel discarding of all provisional lines in the run.  */
-		if (provisional * 4 > length)
-		  {
-		    while (j > i)
-		      if (discards[--j] == 2)
-			discards[j] = 0;
-		  }
-		else
-		  {
-		    int consec;
-		    int minimum = 1;
-		    int tem = length / 4;
+		void shift_boundaries(file_data f) {
+			final boolean[] changed = changed_flag;
+			final boolean[] other_changed = f.changed_flag;
+			int i = 0;
+			int j = 0;
+			int i_end = buffered_lines;
+			int preceding = -1;
+			int other_preceding = -1;
 
-		    /* MINIMUM is approximate square root of LENGTH/4.
-		       A subrun of two or more provisionals can stand
-		       when LENGTH is at least 16.
-		       A subrun of 4 or more can stand when LENGTH >= 64.  */
-		    while ((tem = tem >> 2) > 0)
-		      minimum *= 2;
-		    minimum++;
+			for (;;) {
+				int start, end, other_start;
 
-		    /* Cancel any subrun of MINIMUM or more provisionals
-		       within the larger run.  */
-		    for (j = 0, consec = 0; j < length; j++)
-		      if (discards[i + j] != 2)
-			consec = 0;
-		      else if (minimum == ++consec)
-			/* Back up to start of subrun, to cancel it all.  */
-			j -= consec;
-		      else if (minimum < consec)
-			discards[i + j] = 0;
+				/*
+				 * Scan forwards to find beginning of another run of changes. Also keep track of
+				 * the corresponding point in the other file.
+				 */
 
-		    /* Scan from beginning of run
-		       until we find 3 or more nonprovisionals in a row
-		       or until the first nonprovisional at least 8 lines in.
-		       Until that point, cancel any provisionals.  */
-		    for (j = 0, consec = 0; j < length; j++)
-		      {
-			if (j >= 8 && discards[i + j] == 1)
-			  break;
-			if (discards[i + j] == 2) {
-			  consec = 0; discards[i + j] = 0;
-			}
-			else if (discards[i + j] == 0)
-			  consec = 0;
-			else
-			  consec++;
-			if (consec == 3)
-			  break;
-		      }
+				while (i < i_end && !changed[1 + i]) {
+					while (other_changed[1 + j++])
+						/*
+						 * Non-corresponding lines in the other file will count as the preceding batch
+						 * of changes.
+						 */
+						other_preceding = j;
+					i++;
+				}
 
-		    /* I advances to the last line of the run.  */
-		    i += length - 1;
+				if (i == i_end)
+					break;
 
-		    /* Same thing, from end.  */
-		    for (j = 0, consec = 0; j < length; j++)
-		      {
-			if (j >= 8 && discards[i - j] == 1)
-			  break;
-			if (discards[i - j] == 2) {
-			  consec = 0; discards[i - j] = 0;
-			}
-			else if (discards[i - j] == 0)
-			  consec = 0;
-			else
-			  consec++;
-			if (consec == 3)
-			  break;
-		      }
-		  }
-	      }
-	  }
-      }
+				start = i;
+				other_start = j;
 
-    /** Actually discard the lines.
-      @param discards flags lines to be discarded
-     */
-    private void discard(final byte[] discards) {
-      final int end = buffered_lines;
-      int j = 0;
-      for (int i = 0; i < end; ++i)
-	if (no_discards || discards[i] == 0)
-	  {
-	    undiscarded[j] = equivs[i];
-	    realindexes[j++] = i;
-	  }
-	else
-	  changed_flag[1+i] = true;
-      nondiscarded_lines = j;
-    }
+				for (;;) {
+					/* Now find the end of this run of changes. */
 
-    file_data(Object[] data,Hashtable h) {
-      buffered_lines = data.length;
+					while (i < i_end && changed[1 + i])
+						i++;
+					end = i;
 
-      equivs = new int[buffered_lines]; 
-      undiscarded = new int[buffered_lines];
-      realindexes = new int[buffered_lines];
+					/*
+					 * If the first changed line matches the following unchanged one, and this run
+					 * does not follow right after a previous run, and there are no lines deleted
+					 * from the other file here, then classify the first changed line as unchanged
+					 * and the following line as changed in its place.
+					 */
 
-      for (int i = 0; i < data.length; ++i) {
-        Integer ir = (Integer)h.get(data[i]);
-	if (ir == null)
-	  h.put(data[i],new Integer(equivs[i] = equiv_max++));
-	else
-	  equivs[i] = ir.intValue();
-      }
-    }
+					/*
+					 * You might ask, how could this run follow right after another? Only because
+					 * the previous run was shifted here.
+					 */
 
-    /** Adjust inserts/deletes of blank lines to join changes
-       as much as possible.
+					if (end != i_end && equivs[start] == equivs[end] && !other_changed[1 + j] && end != i_end && !((preceding >= 0 && start == preceding) || (other_preceding >= 0 && other_start == other_preceding))) {
+						changed[1 + end++] = true;
+						changed[1 + start++] = false;
+						++i;
+						/*
+						 * Since one line-that-matches is now before this run instead of after, we must
+						 * advance in the other file to keep in synch.
+						 */
+						++j;
+					} else
+						break;
+				}
 
-       We do something when a run of changed lines include a blank
-       line at one end and have an excluded blank line at the other.
-       We are free to choose which blank line is included.
-       `compareseq' always chooses the one at the beginning,
-       but usually it is cleaner to consider the following blank line
-       to be the "change".  The only exception is if the preceding blank line
-       would join this change to other changes.  
-      @param f the file being compared against
-    */
+				preceding = i;
+				other_preceding = j;
+			}
+		}
 
-    void shift_boundaries(file_data f) {
-      final boolean[] changed = changed_flag;
-      final boolean[] other_changed = f.changed_flag;
-      int i = 0;
-      int j = 0;
-      int i_end = buffered_lines;
-      int preceding = -1;
-      int other_preceding = -1;
+		/** Number of elements (lines) in this file. */
+		final int buffered_lines;
 
-      for (;;)
-	{
-	  int start, end, other_start;
+		/**
+		 * Vector, indexed by line number, containing an equivalence code for each line.
+		 * It is this vector that is actually compared with that of another file to
+		 * generate differences.
+		 */
+		private final int[] equivs;
 
-	  /* Scan forwards to find beginning of another run of changes.
-	     Also keep track of the corresponding point in the other file.  */
+		/**
+		 * Vector, like the previous one except that the elements for discarded lines
+		 * have been squeezed out.
+		 */
+		final int[] undiscarded;
 
-	  while (i < i_end && !changed[1+i])
-	    {
-	      while (other_changed[1+j++])
-		/* Non-corresponding lines in the other file
-		   will count as the preceding batch of changes.  */
-		other_preceding = j;
-	      i++;
-	    }
+		/**
+		 * Vector mapping virtual line numbers (not counting discarded lines) to real
+		 * ones (counting those lines). Both are origin-0.
+		 */
+		final int[] realindexes;
 
-	  if (i == i_end)
-	    break;
+		/** Total number of nondiscarded lines. */
+		int nondiscarded_lines;
 
-	  start = i;
-	  other_start = j;
+		/**
+		 * Array, indexed by real origin-1 line number, containing true for a line that
+		 * is an insertion or a deletion. The results of comparison are stored here.
+		 */
+		boolean[] changed_flag;
 
-	  for (;;)
-	    {
-	      /* Now find the end of this run of changes.  */
+	}
 
-	      while (i < i_end && changed[1+i]) i++;
-	      end = i;
+	public static Object[] getLines(File file) throws IOException {
+		ArrayList<String> lines = new ArrayList<String>();
+		BufferedReader in = new BufferedReader(new FileReader(file));
+		String line = in.readLine();
+		while (line != null) {
+			lines.add(line);
+			line = in.readLine();
+		}
+		in.close();
+		return lines.toArray();
+	}
 
-	      /* If the first changed line matches the following unchanged one,
-		 and this run does not follow right after a previous run,
-		 and there are no lines deleted from the other file here,
-		 then classify the first changed line as unchanged
-		 and the following line as changed in its place.  */
+	public static String diffFile(File file1, File file2) throws IOException {
+		if (file1.exists() && file2.exists()) {
 
-	      /* You might ask, how could this run follow right after another?
-		 Only because the previous run was shifted here.  */
+			Object[] test1 = getLines(file1);
+			Object[] test2 = getLines(file2);
 
-	      if (end != i_end
-		  && equivs[start] == equivs[end]
-		  && !other_changed[1+j]
-		  && end != i_end
-		  && !((preceding >= 0 && start == preceding)
-		       || (other_preceding >= 0
-			   && other_start == other_preceding)))
-		{
-		  changed[1+end++] = true;
-		  changed[1+start++] = false;
-		  ++i;
-		  /* Since one line-that-matches is now before this run
-		     instead of after, we must advance in the other file
-		     to keep in synch.  */
-		  ++j;
+			Diff diff = new Diff(test1, test2);
+			Diff.change script = diff.diff_2(false);
+			DiffPrint.Base p = new DiffPrint.UnifiedPrint(test1, test2);
+			StringWriter wtr = new StringWriter();
+			p.setOutput(wtr);
+			p.print_script(script);
+			// System.out.println(wtr.toString());
+			return wtr.toString().trim();
 		}
-	      else
-		break;
-	    }
-
-	  preceding = i;
-	  other_preceding = j;
+		return ""; //$NON-NLS-1$
 	}
-    }
 
-    /** Number of elements (lines) in this file. */
-    final int buffered_lines;
+	public static String diffFolder(File dir1, File dir2) throws IOException {
+		if (dir1.exists() && dir2.exists()) {
 
-    /** Vector, indexed by line number, containing an equivalence code for
-       each line.  It is this vector that is actually compared with that
-       of another file to generate differences. */
-    private final int[]	    equivs;
+		}
+		return ""; //$NON-NLS-1$
+	}
 
-    /** Vector, like the previous one except that
-       the elements for discarded lines have been squeezed out.  */
-    final int[]	   undiscarded;
+	public static void main(String args[]) {
+		// String[] test1 = {
+		// "aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii"
+		// };
+		// String[] test2 = {
+		// "aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii"
+		// };
+		//
+		// Diff diff = new Diff(test1,test2);
+		// Diff.change script = diff.diff_2(false);
+		// DiffPrint.Base p = new DiffPrint.UnifiedPrint(test1,test2);
+		// StringWriter wtr = new StringWriter();
+		// p.setOutput(wtr);
+		// p.print_script(script);
+		// System.out.println(wtr.toString());
 
-    /** Vector mapping virtual line numbers (not counting discarded lines)
-       to real ones (counting those lines).  Both are origin-0.  */
-    final int[]	   realindexes;
-
-    /** Total number of nondiscarded lines. */
-    int		    nondiscarded_lines;
-
-    /** Array, indexed by real origin-1 line number,
-       containing true for a line that is an insertion or a deletion.
-       The results of comparison are stored here.  */
-    boolean[]	    changed_flag;
-
-  }
-  
-  public static Object[] getLines(File file) throws IOException {
-	  ArrayList<String> lines = new ArrayList<String>();
-	  BufferedReader in = new BufferedReader(new FileReader(file));
-	  String line = in.readLine();
-	  while (line != null) {
-		  lines.add(line);
-		  line = in.readLine();
-	  }
-	  in.close();
-	  return lines.toArray();
-  }
-  
-  public static String diffFile(File file1, File file2) throws IOException {
-	  if (file1.exists() && file2.exists()) {
-		  
-		  Object[] test1 = getLines(file1);
-		  Object[] test2 = getLines(file2);
-		  
-		  Diff diff = new Diff(test1,test2);
-		    Diff.change script = diff.diff_2(false);
-		    DiffPrint.Base p = new DiffPrint.UnifiedPrint(test1,test2);
-		    StringWriter wtr = new StringWriter();
-		    p.setOutput(wtr);
-		    p.print_script(script);
-		    //System.out.println(wtr.toString());
-		    return wtr.toString().trim();
-	  }
-	  return ""; //$NON-NLS-1$
-  }
-  
-  public static String diffFolder(File dir1, File dir2) throws IOException {
-	  if (dir1.exists() && dir2.exists()) {
-		  
-	  }
-	  return ""; //$NON-NLS-1$
-  }
-  
-  public static void main(String args[]) {
-//	 String[] test1 = {
-//		    "aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii"
-//		  };
-//	 String[] test2 = {
-//			 "aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii"
-//		  };
-//	  
-//	 Diff diff = new Diff(test1,test2);
-//	    Diff.change script = diff.diff_2(false);
-//	    DiffPrint.Base p = new DiffPrint.UnifiedPrint(test1,test2);
-//	    StringWriter wtr = new StringWriter();
-//	    p.setOutput(wtr);
-//	    p.print_script(script);
-//	    System.out.println(wtr.toString());
-	  
-	  File file1 = new File("/home/mdecorde/paquets/shared/debian/usr/lib/TXM/install.prefs"); //$NON-NLS-1$
-	  File file2 = new File("/home/mdecorde/paquets/shared/win/install.prefs"); //$NON-NLS-1$
-	  try {
-		System.out.println(diffFile(file1, file2));
-	} catch (IOException e) {
-		// TODO Auto-generated catch block
-		org.txm.utils.logger.Log.printStackTrace(e);
+		File file1 = new File("/home/mdecorde/paquets/shared/debian/usr/lib/TXM/install.prefs"); //$NON-NLS-1$
+		File file2 = new File("/home/mdecorde/paquets/shared/win/install.prefs"); //$NON-NLS-1$
+		try {
+			System.out.println(diffFile(file1, file2));
+		} catch (IOException e) {
+			// TODO Auto-generated catch block
+			org.txm.utils.logger.Log.printStackTrace(e);
+		}
 	}
-  }
 }
Index: tmp/org.txm.utils/src/org/txm/utils/AsciiUtils.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/AsciiUtils.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/AsciiUtils.java	(revision 2402)
@@ -33,66 +33,67 @@
  * 
  * FR:
  * 
- * AsciiUtils.convertNonAscii(str) supprime les accents (note : cette méthode fonctionne avec une liste fermée de caractères accentués)
-
-AsciiUtils.removePunct(str) supprime les ponctuations
-
-AsciiUtils.buildAttributeId(str) créé un identifiant CQP compatible
-
-AsciiUtils.buildId(str) créé un identifiant compatible corpus CQP
+ * AsciiUtils.convertNonAscii(str) supprime les accents (note : cette méthode
+ * fonctionne avec une liste fermée de caractères accentués)
+ * 
+ * AsciiUtils.removePunct(str) supprime les ponctuations
+ * 
+ * AsciiUtils.buildAttributeId(str) créé un identifiant CQP compatible
+ * 
+ * AsciiUtils.buildId(str) créé un identifiant compatible corpus CQP
  *
  * @see : http://www.rgagnon.com/javadetails/java-0456.html
  */
 public class AsciiUtils {
 
 	/** The Constant PLAIN_ASCII. */
-	private static final String PLAIN_ASCII =
-			"AaEeIiOoUu"    // grave //$NON-NLS-1$
-			+ "AaEeIiOoUuYy"  // acute //$NON-NLS-1$
-			+ "AaEeIiOoUuYy"  // circumflex //$NON-NLS-1$
-			+ "AaOoNn"        // tilde //$NON-NLS-1$
-			+ "AaEeIiOoUuYy"  // umlaut //$NON-NLS-1$
-			+ "Aa"            // ring //$NON-NLS-1$
-			+ "Cc"            // cedilla //$NON-NLS-1$
-			+ "OoUu"          // double acute //$NON-NLS-1$
-			;
+	private static final String PLAIN_ASCII = "AaEeIiOoUu" // grave //$NON-NLS-1$
+			+ "AaEeIiOoUuYy" // acute //$NON-NLS-1$
+			+ "AaEeIiOoUuYy" // circumflex //$NON-NLS-1$
+			+ "AaOoNn" // tilde //$NON-NLS-1$
+			+ "AaEeIiOoUuYy" // umlaut //$NON-NLS-1$
+			+ "Aa" // ring //$NON-NLS-1$
+			+ "Cc" // cedilla //$NON-NLS-1$
+			+ "OoUu" // double acute //$NON-NLS-1$
+	;
 
 	/** The Constant UNICODE. */
-	private static final String UNICODE =
-			"\u00C0\u00E0\u00C8\u00E8\u00CC\u00EC\u00D2\u00F2\u00D9\u00F9"              //$NON-NLS-1$
-			+ "\u00C1\u00E1\u00C9\u00E9\u00CD\u00ED\u00D3\u00F3\u00DA\u00FA\u00DD\u00FD"  //$NON-NLS-1$
-			+ "\u00C2\u00E2\u00CA\u00EA\u00CE\u00EE\u00D4\u00F4\u00DB\u00FB\u0176\u0177"  //$NON-NLS-1$
+	private static final String UNICODE = "\u00C0\u00E0\u00C8\u00E8\u00CC\u00EC\u00D2\u00F2\u00D9\u00F9" //$NON-NLS-1$
+			+ "\u00C1\u00E1\u00C9\u00E9\u00CD\u00ED\u00D3\u00F3\u00DA\u00FA\u00DD\u00FD" //$NON-NLS-1$
+			+ "\u00C2\u00E2\u00CA\u00EA\u00CE\u00EE\u00D4\u00F4\u00DB\u00FB\u0176\u0177" //$NON-NLS-1$
 			+ "\u00C3\u00E3\u00D5\u00F5\u00D1\u00F1" //$NON-NLS-1$
-			+ "\u00C4\u00E4\u00CB\u00EB\u00CF\u00EF\u00D6\u00F6\u00DC\u00FC\u0178\u00FF"  //$NON-NLS-1$
-			+ "\u00C5\u00E5"                                                              //$NON-NLS-1$
-			+ "\u00C7\u00E7"  //$NON-NLS-1$
-			+ "\u0150\u0151\u0170\u0171"  //$NON-NLS-1$
-			;
+			+ "\u00C4\u00E4\u00CB\u00EB\u00CF\u00EF\u00D6\u00F6\u00DC\u00FC\u0178\u00FF" //$NON-NLS-1$
+			+ "\u00C5\u00E5" //$NON-NLS-1$
+			+ "\u00C7\u00E7" //$NON-NLS-1$
+			+ "\u0150\u0151\u0170\u0171" //$NON-NLS-1$
+	;
 
 	// private constructor, can't be instanciated!
 	/**
 	 * Instantiates a new ascii utils.
 	 */
-	private AsciiUtils() { }
+	private AsciiUtils() {
+	}
 
 	// remove accentued from a string and replace with ascii equivalent
 	/**
 	 * Convert non ascii.
 	 *
-	 * @param s the s
+	 * @param s
+	 *            the s
 	 * @return the string
 	 */
 	public static String convertNonAscii(String s) {
-		if (s == null) return null;
+		if (s == null)
+			return null;
 		StringBuilder sb = new StringBuilder();
 		int n = s.length();
 		for (int i = 0; i < n; i++) {
 			char c = s.charAt(i);
 			int pos = UNICODE.indexOf(c);
-			if (pos > -1){
+			if (pos > -1) {
 				sb.append(PLAIN_ASCII.charAt(pos));
-			}
-			else {
+			} else {
 				sb.append(c);
 			}
 		}
@@ -102,69 +103,75 @@
 	/**
 	 * Removes the punct.
 	 *
-	 * @param s the s
+	 * @param s
+	 *            the s
 	 * @return the string
 	 */
 	public static String removePunct(String s) {
-		return s.replaceAll("\\p{Space}","").replaceAll("\\p{Punct}", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		return s.replaceAll("\\p{Space}", "").replaceAll("\\p{Punct}", ""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 	}
 
 	/**
 	 * Builds the id.
 	 *
-	 * @param s the s
+	 * @param s
+	 *            the s
 	 * @return the string
 	 */
 	public static String buildWordId(String s) {
 
-		if (s.length() == 0) return s;
-		
+		if (s.length() == 0)
+			return s;
+
 		// ensure the "w_" prefix presence
 		if (s.startsWith("w")) {
 			if (!s.startsWith("w_")) {
-				s = "w_"+s.substring(1);
+				s = "w_" + s.substring(1);
 			}
 		} else {
-			s = "w_"+s;
+			s = "w_" + s;
 		}
 
 		String rez = convertNonAscii(s).toLowerCase();
-		rez = rez.replaceAll("\\p{Space}++","_");
-		rez = rez.replaceAll("[¤€§µ£°().,;:/?§%\"'*+\\-}\\]\\[{#~&]",""); //$NON-NLS-1$ //$NON-NLS-2$
+		rez = rez.replaceAll("\\p{Space}++", "_");
+		rez = rez.replaceAll("[¤€§µ£°().,;:/?§%\"'*+\\-}\\]\\[{#~&]", ""); //$NON-NLS-1$ //$NON-NLS-2$
 
 		return rez;
 	}
-	
+
 	/**
 	 * Builds attribute id.
 	 *
-	 * @param s the s
+	 * @param s
+	 *            the s
 	 * @return the string
 	 */
 	public static String buildAttributeId(String s) {
 		return buildId(s);
 	}
-	
+
 	/**
 	 * Builds the id.
 	 *
-	 * @param s the s
+	 * @param s
+	 *            the s
 	 * @return the string
 	 */
-	public static String buildId(String s)
-	{
-		//TODO: replace this with a lib managing the ID attribute format 
-		if (s.length() == 0) return s;
+	public static String buildId(String s) {
+		// TODO: replace this with a lib managing the ID attribute format
+		if (s.length() == 0)
+			return s;
 
 		String rez = convertNonAscii(s).toLowerCase();
-		rez = rez.replaceAll("\\p{Space}++","_");
-		rez = rez.replaceAll("_","-");
-		rez = rez.replaceAll("[¤€§µ£°().,;:/?§%\"'*+\\}\\]\\[{#~&]",""); //$NON-NLS-1$ //$NON-NLS-2$
+		rez = rez.replaceAll("\\p{Space}++", "_");
+		rez = rez.replaceAll("_", "-");
+		rez = rez.replaceAll("[¤€§µ£°().,;:/?§%\"'*+\\}\\]\\[{#~&]", ""); //$NON-NLS-1$ //$NON-NLS-2$
 		// remove first chars if number
 		char c = rez.charAt(0);
 		while (c == '0' || c == '1' || c == '2' || c == '3' || c == '4' || c == '5' || c == '6' || c == '7' || c == '8' || c == '9') {
 			rez = rez.substring(1);
-			if (rez.length() == 0) return "";
+			if (rez.length() == 0)
+				return "";
 			c = rez.charAt(0);
 		}
 
@@ -174,14 +181,14 @@
 	/**
 	 * The main method.
 	 *
-	 * @param args the arguments
+	 * @param args
+	 *            the arguments
 	 */
 	public static void main(String args[]) {
-		String s = 
-				"The result : È,É,Ê,Ë,Û,Ù,Ï,Î,À,Â,Ô,è,é,ê,ë,û,ù,ï,î,à,â,ô,ç  "; //$NON-NLS-1$
+		String s = "The result : È,É,Ê,Ë,Û,Ù,Ï,Î,À,Â,Ô,è,é,ê,ë,û,ù,ï,î,à,â,ô,ç  "; //$NON-NLS-1$
 		System.out.println(AsciiUtils.convertNonAscii(s));
 		System.out.println(AsciiUtils.buildId(s));
-		// output : 
+		// output :
 		// The result : E,E,E,E,U,U,I,I,A,A,O,e,e,e,e,u,u,i,i,a,a,o,c
 
 	}
Index: tmp/org.txm.utils/src/org/txm/utils/FixString.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/FixString.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/FixString.java	(revision 2402)
@@ -18,55 +18,56 @@
 // You should have received a copy of the GNU General
 // Public License along with the TXM platform. If not, see
 // http://www.gnu.org/licenses.
-
-//
-// This file is part of the TXM platform.
-//
-// The TXM platform is free software: you can redistribute it and/or modif y
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation, either version 3 of the License, or
-// (at your option) any later version.
-//
-// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
-// 
-// 
-// 
-// $LastChangedDate: 2013-05-06 17:38:43 +0200 (lun., 06 mai 2013) $
-// $LastChangedRevision: 2386 $
-// $LastChangedBy: mdecorde $ 
-//
-package org.txm.utils;
-
-// TODO: Auto-generated Javadoc
-/**
- * syntaxic sugar for CQP queries.
- *
- * @author mdecorde
- */
-public class FixString {
-	
-	/**
-	 * Normalize.
-	 *
-	 * @param line the line
-	 * @return the string
-	 */
-	public static String normalize(String line) {
-		char[] array = line.toCharArray();
-		for (int i = 0; i < array.length; i++) {
-			char c = array[i];
-			if (c <= 0x1f) {
-				// System.out.println(
-				// "fix : "+c+" code "+Character.getNumericValue(c));
-				array[i] = ' ';
-			}
-		}
-		return String.valueOf(array);
-	}
-}
+
+//
+// This file is part of the TXM platform.
+//
+// The TXM platform is free software: you can redistribute it and/or modif y
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The TXM platform 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 the TXM platform.  If not, see <http://www.gnu.org/licenses/>.
+// 
+// 
+// 
+// $LastChangedDate: 2013-05-06 17:38:43 +0200 (lun., 06 mai 2013) $
+// $LastChangedRevision: 2386 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils;
+
+// TODO: Auto-generated Javadoc
+/**
+ * syntaxic sugar for CQP queries.
+ *
+ * @author mdecorde
+ */
+public class FixString {
+
+	/**
+	 * Normalize.
+	 *
+	 * @param line
+	 *            the line
+	 * @return the string
+	 */
+	public static String normalize(String line) {
+		char[] array = line.toCharArray();
+		for (int i = 0; i < array.length; i++) {
+			char c = array[i];
+			if (c <= 0x1f) {
+				// System.out.println(
+				// "fix : "+c+" code "+Character.getNumericValue(c));
+				array[i] = ' ';
+			}
+		}
+		return String.valueOf(array);
+	}
+}
Index: tmp/org.txm.utils/src/org/txm/utils/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/package.html	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>Contains usefull tools</p>
+	<p>Contains usefull tools</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/Timer.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Timer.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/Timer.java	(revision 2402)
@@ -2,15 +2,15 @@
 
 public class Timer {
 	long start = System.currentTimeMillis();
-	
+
 	public long ellaspeTime() {
 		return System.currentTimeMillis() - start;
 	}
-	
+
 	public void reset() {
 		start = System.currentTimeMillis();
 	}
-	
+
 	public long getStart() {
 		return start;
 	}
Index: tmp/org.txm.utils/src/org/txm/utils/xml/DomUtils.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/xml/DomUtils.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/xml/DomUtils.java	(revision 2402)
@@ -52,81 +52,81 @@
  * The Class DomUtils.
  */
 public class DomUtils {
-	
+
 	/**
 	 * Empty document.
 	 *
 	 * @return the document
-	 * @throws ParserConfigurationException 
+	 * @throws ParserConfigurationException
 	 */
-	public static Document emptyDocument() throws ParserConfigurationException
-	{
+	public static Document emptyDocument() throws ParserConfigurationException {
 		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 		factory.setXIncludeAware(true);
 		DocumentBuilder builder = factory.newDocumentBuilder();
 		return builder.newDocument();
 	}
-	
+
 	/**
 	 * Load.
 	 *
-	 * @param xmlfile the xmlfile
+	 * @param xmlfile
+	 *            the xmlfile
 	 * @return the document
-	 * @throws ParserConfigurationException 
-	 * @throws IOException 
-	 * @throws SAXException 
+	 * @throws ParserConfigurationException
+	 * @throws IOException
+	 * @throws SAXException
 	 */
-	public static Document load(File xmlfile) throws ParserConfigurationException, SAXException, IOException
-	{
+	public static Document load(File xmlfile) throws ParserConfigurationException, SAXException, IOException {
 		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 		factory.setXIncludeAware(true);
 		factory.setNamespaceAware(true); // never forget this!
 		DocumentBuilder builder = factory.newDocumentBuilder();
-		//builder.parse(xmlfile).getDocumentElement().getElementsByTagName(name)
+		// builder.parse(xmlfile).getDocumentElement().getElementsByTagName(name)
 		return builder.parse(xmlfile);
 	}
-	
+
 	/**
 	 * Save.
 	 *
-	 * @param element the doc
-	 * @param writer the writer
+	 * @param element
+	 *            the doc
+	 * @param writer
+	 *            the writer
 	 * @return true if successful
 	 */
-	public static boolean save(Document doc, Writer writer)
-	{
+	public static boolean save(Document doc, Writer writer) {
 		return save(doc.getDocumentElement(), writer);
 	}
-	
 
 	public static boolean save(Element element, File outfile) throws UnsupportedEncodingException, FileNotFoundException {
 		Writer writer = new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(outfile)), "UTF-8")); //$NON-NLS-1$
 		return save(element, writer);
 	}
-	
+
 	/**
 	 * Save.
 	 *
-	 * @param element the doc
-	 * @param writer the writer
+	 * @param element
+	 *            the doc
+	 * @param writer
+	 *            the writer
 	 * @return true, if successful
 	 */
-	public static boolean save(Element element, Writer writer)
-	{
+	public static boolean save(Element element, Writer writer) {
 		try {
 			// Création de la source DOM
 			Source source = new DOMSource(element);
-			
+
 			// Création du fichier de sortie
 			Result resultat = new StreamResult(writer);
-			
+
 			// Configuration du transformer
 			TransformerFactory fabrique = new net.sf.saxon.TransformerFactoryImpl();
 			Transformer transformer = fabrique.newTransformer();
 			transformer.setOutputProperty(OutputKeys.METHOD, "xml"); //$NON-NLS-1$
-			transformer.setOutputProperty(OutputKeys.INDENT, "yes");  //$NON-NLS-1$
-			transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");  //$NON-NLS-1$
-			
+			transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+			transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); //$NON-NLS-1$
+
 			// Transformation
 			transformer.transform(source, resultat);
 			writer.close();
@@ -136,34 +136,36 @@
 			return false;
 		}
 	}
-	
+
 	/**
 	 * Save.
 	 *
-	 * @param doc the doc
-	 * @param outfile the output file
+	 * @param doc
+	 *            the doc
+	 * @param outfile
+	 *            the output file
 	 * @return true, if successful
-	 * @throws FileNotFoundException 
-	 * @throws UnsupportedEncodingException 
+	 * @throws FileNotFoundException
+	 * @throws UnsupportedEncodingException
 	 * @return true if successful
 	 */
-	public static boolean save(Document doc, File outfile) throws UnsupportedEncodingException, FileNotFoundException
-	{
+	public static boolean save(Document doc, File outfile) throws UnsupportedEncodingException, FileNotFoundException {
 		Writer writer = new BufferedWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(outfile)), "UTF-8")); //$NON-NLS-1$
 		return save(doc, writer);
 	}
-	
+
 	/**
 	 * Save.
 	 *
-	 * @param doc the doc
-	 * @param outfile the outfile
+	 * @param doc
+	 *            the doc
+	 * @param outfile
+	 *            the outfile
 	 * @return true, if successful
-	 * @throws FileNotFoundException 
-	 * @throws UnsupportedEncodingException 
+	 * @throws FileNotFoundException
+	 * @throws UnsupportedEncodingException
 	 */
-	public static boolean print(Document doc) throws UnsupportedEncodingException, FileNotFoundException
-	{
+	public static boolean print(Document doc) throws UnsupportedEncodingException, FileNotFoundException {
 		Writer writer = new PrintWriter(System.out);
 		return save(doc, writer);
 	}
Index: tmp/org.txm.utils/src/org/txm/utils/xml/UpdateXSLParameters.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/xml/UpdateXSLParameters.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/xml/UpdateXSLParameters.java	(revision 2402)
@@ -19,15 +19,16 @@
  *
  */
 public class UpdateXSLParameters {
-	
+
 	File xslFile;
-	
+
 	public UpdateXSLParameters(File xslFile) {
 		this.xslFile = xslFile;
 	}
-	
+
 	/**
-	 * update the content of "param" elements which name attribute exists in the parameters map with the parameter map value.
+	 * update the content of "param" elements which name attribute exists in the
+	 * parameters map with the parameter map value.
 	 * 
 	 * @param parameters
 	 * @return true if document if successfully saved
@@ -41,21 +42,21 @@
 			System.out.println("Error: $xslFile doest not exists. Aborting.");
 			return false;
 		}
-		
+
 		Document doc = DomUtils.load(xslFile);
 		NodeList list = doc.getElementsByTagName("xsl:param");
-		for (int i = 0 ; i < list.getLength() ; i++) {
+		for (int i = 0; i < list.getLength(); i++) {
 			Element e = (Element) list.item(i);
 			String name = e.getAttribute("name");
-			
+
 			if (parameters.keySet().contains(name)) {
 				e.setTextContent(parameters.get(name));
 			}
 		}
 
-		return DomUtils.save(doc,  xslFile);
+		return DomUtils.save(doc, xslFile);
 	}
-	
+
 	public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
 		File xslFile = new File("/home/mdecorde/TEMP/testori/mss-dates/txm/mss-dates-w/xsl/4-edition/1-facsimile-pager.xsl");
 		HashMap<String, String> parameters = new HashMap<String, String>();
Index: tmp/org.txm.utils/src/org/txm/utils/LocalXhtmlDtdEntityResolver.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/LocalXhtmlDtdEntityResolver.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/LocalXhtmlDtdEntityResolver.java	(revision 2402)
@@ -1,4 +1,5 @@
 package org.txm.utils;
+
 import java.io.IOException;
 
 import org.xml.sax.EntityResolver;
@@ -7,17 +8,18 @@
 
 public class LocalXhtmlDtdEntityResolver implements EntityResolver {
 
-    /* (non-Javadoc)
-     * @see org.xml.sax.EntityResolver#resolveEntity(java.lang.String, java.lang.String)
-     */
-    @Override
-    public InputSource resolveEntity( String publicId, String systemId )
-            throws SAXException, IOException {
-        String fileName = systemId.substring( systemId.lastIndexOf( "/" ) + 1 ); 
-        System.out.println("FILENAME: "+fileName);
-        
-        return new InputSource( 
-                getClass().getClassLoader().getResourceAsStream( fileName ) );
-    }
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.xml.sax.EntityResolver#resolveEntity(java.lang.String,
+	 * java.lang.String)
+	 */
+	@Override
+	public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException {
+		String fileName = systemId.substring(systemId.lastIndexOf("/") + 1);
+		System.out.println("FILENAME: " + fileName);
 
+		return new InputSource(getClass().getClassLoader().getResourceAsStream(fileName));
+	}
+
 }
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/zip/Zip.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/zip/Zip.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/zip/Zip.java	(revision 2402)
@@ -59,14 +59,15 @@
 	public static String ZIP_EXTENSION = ".odt"; // no more used, stay for old groovy script compatibility
 
 	/** The DEFAUL level of compression. */
-	private static int DEFAULT_LEVEL_COMPRESSION =
-			Deflater.BEST_COMPRESSION;
+	private static int DEFAULT_LEVEL_COMPRESSION = Deflater.BEST_COMPRESSION;
 
 	/**
 	 * Compress.
 	 *
-	 * @param file the file
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param file
+	 *            the file
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public static void compress(final File file) throws IOException {
 		compress(file, file, DEFAULT_LEVEL_COMPRESSION, null);
@@ -75,42 +76,47 @@
 	/**
 	 * Compress.
 	 *
-	 * @param file the file
-	 * @param target the target
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param file
+	 *            the file
+	 * @param target
+	 *            the target
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void compress(final File file, final File target)
-			throws IOException {
+	public static void compress(final File file, final File target) throws IOException {
 		compress(file, target, DEFAULT_LEVEL_COMPRESSION, null);
 	}
 
 	/**
 	 * Compress.
 	 *
-	 * @param file the file
-	 * @param targetZipFile the Zip file to create
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param file
+	 *            the file
+	 * @param targetZipFile
+	 *            the Zip file to create
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void compress(final File file, final File targetZipFile, IProgressMonitor monitor)
-			throws IOException {
+	public static void compress(final File file, final File targetZipFile, IProgressMonitor monitor) throws IOException {
 		compress(file, targetZipFile, DEFAULT_LEVEL_COMPRESSION, monitor);
 	}
 
-
 	// Compresse un fichier à l'adresse pointée par le fichier cible.
 	// Remplace le fichier cible s'il existe déjà.
 	/**
-	 * Compresse un fichier à l'adresse pointée par le fichier cible.
-	 * Remplace le fichier cible s'il existe déjà..
+	 * Compresse un fichier à l'adresse pointée par le fichier cible. Remplace le
+	 * fichier cible s'il existe déjà..
 	 *
-	 * @param file the file
-	 * @param targetZipFile the target
-	 * @param compressionLevel the compression level
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param file
+	 *            the file
+	 * @param targetZipFile
+	 *            the target
+	 * @param compressionLevel
+	 *            the compression level
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void compress(final File file, final File targetZipFile,
-			final int compressionLevel, IProgressMonitor monitor)
-					throws IOException {
+	public static void compress(final File file, final File targetZipFile, final int compressionLevel, IProgressMonitor monitor) throws IOException {
 		final File source = file.getCanonicalFile();
 
 		// Création du fichier zip
@@ -126,80 +132,87 @@
 	/**
 	 * Compress.
 	 *
-	 * @param file the file
-	 * @param compressionLevel the compression level
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param file
+	 *            the file
+	 * @param compressionLevel
+	 *            the compression level
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void compress(final File file, final int compressionLevel)
-			throws IOException {
+	public static void compress(final File file, final int compressionLevel) throws IOException {
 		compress(file, file, compressionLevel, null);
 	}
 
 	/**
 	 * Compress.
 	 *
-	 * @param fileName the file name
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param fileName
+	 *            the file name
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public static void compress(final String fileName) throws IOException {
-		compress(new File(fileName), new File(fileName),
-				DEFAULT_LEVEL_COMPRESSION, null);
+		compress(new File(fileName), new File(fileName), DEFAULT_LEVEL_COMPRESSION, null);
 	}
 
-
 	/**
 	 * Compress.
 	 *
-	 * @param fileName the file name
-	 * @param compressionLevel the compression level
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param fileName
+	 *            the file name
+	 * @param compressionLevel
+	 *            the compression level
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void compress(final String fileName,
-			final int compressionLevel) throws IOException {
+	public static void compress(final String fileName, final int compressionLevel) throws IOException {
 		compress(new File(fileName), new File(fileName), compressionLevel, null);
 	}
 
 	/**
 	 * Compress.
 	 *
-	 * @param fileName the file name
-	 * @param targetName the target name
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param fileName
+	 *            the file name
+	 * @param targetName
+	 *            the target name
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void compress(final String fileName, final String targetName)
-			throws IOException {
-		compress(new File(fileName), new File(targetName),
-				DEFAULT_LEVEL_COMPRESSION, null);
+	public static void compress(final String fileName, final String targetName) throws IOException {
+		compress(new File(fileName), new File(targetName), DEFAULT_LEVEL_COMPRESSION, null);
 	}
 
 	/**
 	 * Compress.
 	 *
-	 * @param fileName the file name
-	 * @param targetName the target name
-	 * @param compressionLevel the compression level
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param fileName
+	 *            the file name
+	 * @param targetName
+	 *            the target name
+	 * @param compressionLevel
+	 *            the compression level
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void compress(final String fileName, final String targetName,
-			final int compressionLevel) throws IOException {
+	public static void compress(final String fileName, final String targetName, final int compressionLevel) throws IOException {
 		compress(new File(fileName), new File(targetName), compressionLevel, null);
 	}
 
 	/**
 	 * Compress file or directory into an archive.
 	 *
-	 * @param out the out
-	 * @param parentFolder the parent folder
-	 * @param file the file
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param out
+	 *            the out
+	 * @param parentFolder
+	 *            the parent folder
+	 * @param file
+	 *            the file
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	private final static void compressFile(final ZipOutputStream out,
-			final String parentFolder, final File file, IProgressMonitor monitor)
-					throws IOException {
-		final String zipName = new StringBuilder(parentFolder)
-		.append(file.getName())
-		.append(file.isDirectory() ? '/' : "")
-		.toString();
+	private final static void compressFile(final ZipOutputStream out, final String parentFolder, final File file, IProgressMonitor monitor) throws IOException {
+		final String zipName = new StringBuilder(parentFolder).append(file.getName()).append(file.isDirectory() ? '/' : "").toString();
 
 		// Définition des attributs du fichier
 		final ZipEntry entry = new ZipEntry(zipName);
@@ -208,30 +221,36 @@
 		out.putNextEntry(entry);
 
 		// Traitement récursif s'il s'agit d'un répertoire
-		//System.out.println("COMPRESS "+file+" monitor="+monitor);
+		// System.out.println("COMPRESS "+file+" monitor="+monitor);
 		if (file.isDirectory()) {
 			File[] files = file.listFiles();
 			if (files != null) {
-				if (monitor != null) monitor.beginTask("Compressing "+file+" directory ("+files.length+" files).", files.length);
+				if (monitor != null)
+					monitor.beginTask("Compressing " + file + " directory (" + files.length + " files).", files.length);
 				for (final File f : files) {
 					compressFile(out, zipName.toString(), f, null);
-					if (monitor != null) monitor.worked(1);
+					if (monitor != null)
+						monitor.worked(1);
 				}
-				if (monitor != null) monitor.done();
+				if (monitor != null)
+					monitor.done();
 			}
 		} else {
 			// Ecriture du fichier dans le zip
 			final InputStream in = new BufferedInputStream(new FileInputStream(file));
 
 			try {
-				if (monitor != null) monitor.beginTask("Compressing "+file+" file ("+file.length()+" bytes).", (int)file.length());
+				if (monitor != null)
+					monitor.beginTask("Compressing " + file + " file (" + file.length() + " bytes).", (int) file.length());
 				final byte[] buf = new byte[8192];
 				int bytesRead;
 				while (-1 != (bytesRead = in.read(buf))) {
 					out.write(buf, 0, bytesRead);
-					if (monitor != null) monitor.worked(bytesRead);
+					if (monitor != null)
+						monitor.worked(bytesRead);
 				}
-				if (monitor != null) monitor.done();
+				if (monitor != null)
+					monitor.done();
 			} finally {
 				in.close();
 			}
@@ -241,23 +260,26 @@
 	/**
 	 * Decompress a ZIP file in the ZIP file parent directory
 	 *
-	 * @param zipfile the ZIP file
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param zipfile
+	 *            the ZIP file
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final File zipfile)
-			throws IOException {
+	public static void decompress(final File zipfile) throws IOException {
 		decompress(zipfile, zipfile.getCanonicalFile().getParentFile(), false, null);
 	}
 
 	/**
 	 * Decompress.
 	 *
-	 * @param zipFile the file
-	 * @param deleteZipAfter the delete zip after
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param zipFile
+	 *            the file
+	 * @param deleteZipAfter
+	 *            the delete zip after
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final File zipFile, final boolean deleteZipAfter)
-			throws IOException {
+	public static void decompress(final File zipFile, final boolean deleteZipAfter) throws IOException {
 		decompress(zipFile, zipFile.getCanonicalFile().getParentFile(), deleteZipAfter, null);
 	}
 
@@ -265,13 +287,16 @@
 	/**
 	 * Decompress.
 	 *
-	 * @param zipFile the file
-	 * @param folder the folder
-	 * @param deleteZipAfter the delete zip after
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param zipFile
+	 *            the file
+	 * @param folder
+	 *            the folder
+	 * @param deleteZipAfter
+	 *            the delete zip after
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final File zipFile, final File folder,
-			final boolean deleteZipAfter) throws IOException {
+	public static void decompress(final File zipFile, final File folder, final boolean deleteZipAfter) throws IOException {
 		decompress(zipFile, folder, deleteZipAfter, null);
 	}
 
@@ -279,43 +304,52 @@
 	/**
 	 * Decompress.
 	 *
-	 * @param zipFile the file
-	 * @param folder the folder
-	 * @param deleteZipAfter the delete zip after
-	 * @param monitor change progress state
+	 * @param zipFile
+	 *            the file
+	 * @param folder
+	 *            the folder
+	 * @param deleteZipAfter
+	 *            the delete zip after
+	 * @param monitor
+	 *            change progress state
 	 * 
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final File zipFile, final File folder, final boolean deleteZipAfter, IProgressMonitor monitor)
-			throws IOException {
-		ZipInputStream zis = new ZipInputStream(new BufferedInputStream(
-				new FileInputStream(zipFile.getCanonicalFile())));
+	public static void decompress(final File zipFile, final File folder, final boolean deleteZipAfter, IProgressMonitor monitor) throws IOException {
+		ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile.getCanonicalFile())));
 		ZipEntry ze;
 		int nEntries = 0;
-		//System.out.println("count entries...");
+		// System.out.println("count entries...");
 		try {
 			while (null != (ze = zis.getNextEntry())) {
 				nEntries++;
 			}
-		} catch(Exception e) { e.printStackTrace(); } finally {
-			if (zis != null) zis.close();
+		} catch (Exception e) {
+			e.printStackTrace();
+		} finally {
+			if (zis != null)
+				zis.close();
 		}
-		//System.out.println("count entries result: "+nEntries);
+		// System.out.println("count entries result: "+nEntries);
 
-		zis = new ZipInputStream(new BufferedInputStream(
-				new FileInputStream(zipFile.getCanonicalFile())));
-		//System.out.println("zis: "+zis);
-		if (monitor != null) { monitor.beginTask("Unzipping "+zipFile, nEntries);}
+		zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile.getCanonicalFile())));
+		// System.out.println("zis: "+zis);
+		if (monitor != null) {
+			monitor.beginTask("Unzipping " + zipFile, nEntries);
+		}
 
 		try {
 			// Parcours tous les fichiers
-			//System.out.println("start parsing zip file: "+file);
+			// System.out.println("start parsing zip file: "+file);
 			while (null != (ze = zis.getNextEntry())) {
-				if (monitor != null) monitor.worked(1);
+				if (monitor != null)
+					monitor.worked(1);
 
 				final File f = new File(folder.getCanonicalPath(), ze.getName());
-//				System.out.println(f);
-				if (f.exists()) f.delete();
+				// System.out.println(f);
+				if (f.exists())
+					f.delete();
 
 				// Création des dossiers
 				if (ze.isDirectory()) {
@@ -343,7 +377,7 @@
 			}
 		} finally {
 			zis.close();
-			//if (monitor != null) monitor.done();
+			// if (monitor != null) monitor.done();
 		}
 
 		if (deleteZipAfter)
@@ -353,103 +387,119 @@
 	/**
 	 * Decompress.
 	 *
-	 * @param fileName the file name
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param fileName
+	 *            the file name
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final String fileName)
-			throws IOException {
+	public static void decompress(final String fileName) throws IOException {
 		decompress(new File(fileName));
 	}
 
 	/**
 	 * Decompress.
 	 *
-	 * @param zipFileName the file name
-	 * @param deleteZipAfter the delete zip after
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param zipFileName
+	 *            the file name
+	 * @param deleteZipAfter
+	 *            the delete zip after
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final String zipFileName,
-			final boolean deleteZipAfter)
-					throws IOException {
+	public static void decompress(final String zipFileName, final boolean deleteZipAfter) throws IOException {
 		decompress(new File(zipFileName), deleteZipAfter);
 	}
 
-
 	/**
 	 * Decompress.
 	 *
-	 * @param zipFileName the file name
-	 * @param folderName the folder name
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param zipFileName
+	 *            the file name
+	 * @param folderName
+	 *            the folder name
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final String zipFileName, final String folderName)
-			throws IOException {
+	public static void decompress(final String zipFileName, final String folderName) throws IOException {
 		decompress(new File(zipFileName), new File(folderName), false);
 	}
 
 	/**
 	 * Decompress.
 	 *
-	 * @param zipFileName the file name
-	 * @param folderName the folder name
-	 * @param deleteZipAfter the delete zip after
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param zipFileName
+	 *            the file name
+	 * @param folderName
+	 *            the folder name
+	 * @param deleteZipAfter
+	 *            the delete zip after
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final String zipFileName, final String folderName,
-			final boolean deleteZipAfter)
-					throws IOException {
+	public static void decompress(final String zipFileName, final String folderName, final boolean deleteZipAfter) throws IOException {
 		decompress(new File(zipFileName), new File(folderName), deleteZipAfter, null);
 	}
 
 	/**
 	 * Decompress.
 	 *
-	 * @param zipFileName the file name
-	 * @param folderName the folder name
-	 * @param deleteZipAfter the delete zip after
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param zipFileName
+	 *            the file name
+	 * @param folderName
+	 *            the folder name
+	 * @param deleteZipAfter
+	 *            the delete zip after
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void decompress(final String zipFileName, final String folderName,
-			final boolean deleteZipAfter, IProgressMonitor monitor)
-					throws IOException {
+	public static void decompress(final String zipFileName, final String folderName, final boolean deleteZipAfter, IProgressMonitor monitor) throws IOException {
 		decompress(new File(zipFileName), new File(folderName), deleteZipAfter, monitor);
 	}
 
 	/**
 	 * Extract one file from an archive given a relative path in the archive
 	 * 
-	 * @param zipFile the archive
-	 * @param path the relative path in the archive
-	 * @param outputFile the output file
+	 * @param zipFile
+	 *            the archive
+	 * @param path
+	 *            the relative path in the archive
+	 * @param outputFile
+	 *            the output file
 	 * @return true if success
 	 */
 	public static boolean extractOneFile(File zipFile, String path, File outputFile) {
 		return extractOneFile(zipFile, path, outputFile, false);
 	}
-	
+
 	/**
 	 * Extract one file from an archive given a relative path in the archive
 	 * 
-	 * @param zipFile the archive
-	 * @param path the relative path in the archive of the file to extract (file or directory)
-	 * @param outputFile the output file
-	 * @param replaceOnlyIfNewer if true the file is replaced only if the archive file is more recent
+	 * @param zipFile
+	 *            the archive
+	 * @param path
+	 *            the relative path in the archive of the file to extract (file or
+	 *            directory)
+	 * @param outputFile
+	 *            the output file
+	 * @param replaceOnlyIfNewer
+	 *            if true the file is replaced only if the archive file is more
+	 *            recent
 	 * @return true if success
 	 */
 	public static boolean extractOneFile(File zipFile, String path, File outputFile, boolean replaceOnlyIfNewer) {
-		
+
 		boolean copySubEntries = false; // internal variable to copy entries of a directory
 		boolean pathFound = false; // internal variable to know if path was found
-		
+
 		try {
-			long oldFileTime = outputFile.lastModified();			
+			long oldFileTime = outputFile.lastModified();
 
 			ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile.getCanonicalFile())));
 			ZipEntry ze;
-			
+
 			// Parcourt tous les fichiers
 			while (null != (ze = zis.getNextEntry())) {
-				//System.out.println("P="+ze.getName());
+				// System.out.println("P="+ze.getName());
 				String currentpath = ze.getName();
 				if (currentpath.equals(path)) { // this is the file to extract !
 					if (replaceOnlyIfNewer && ze.getTime() < oldFileTime) { // don't replace the file
@@ -466,7 +516,7 @@
 					}
 				} else if (currentpath.startsWith(path) && copySubEntries) {
 					String subpath = currentpath.substring(path.length());
-					
+
 					if (ze.isDirectory()) { // a sub directory of the pointed path
 						new File(outputFile, subpath).mkdirs();
 					} else { // a sub file of the pointed path (directory)
@@ -477,7 +527,7 @@
 				}
 			}
 			if (!pathFound) {
-				System.out.println("Error: "+path+" not found.");
+				System.out.println("Error: " + path + " not found.");
 			}
 
 			if (zis != null) {
@@ -488,15 +538,16 @@
 				}
 			}
 		} catch (Exception e) {
-			System.out.println("Fail to extract "+path+" from "+zipFile+": "+e);
+			System.out.println("Fail to extract " + path + " from " + zipFile + ": " + e);
 			Log.printStackTrace(e);
-		} 
+		}
 
 		return pathFound; // no suitable entry found
 	}
 
 	/**
 	 * Write the current Zis entry to a file
+	 * 
 	 * @param zis
 	 * @param outputFile
 	 * @throws IOException
@@ -520,20 +571,21 @@
 	}
 
 	/**
-	 * Try to get the root folder of the archive. If there is no root folder, the Zip filename is used
+	 * Try to get the root folder of the archive. If there is no root folder, the
+	 * Zip filename is used
 	 * 
 	 * @param zipFile
 	 * @return the root directory of the archive
 	 */
-	public static String getRoot(File zipFile)
-	{
+	public static String getRoot(File zipFile) {
 		String root = null;
 		for (String f : listFiles(zipFile)) {
 			root = f;
-			if (f.startsWith(".") && f.indexOf(".") > 0) continue;
+			if (f.startsWith(".") && f.indexOf(".") > 0)
+				continue;
 			break;
 		}
-		//System.out.println("BIN ROOT: "+root);
+		// System.out.println("BIN ROOT: "+root);
 		if (root == null) { // no sub-directory found, we use the zip filename
 			root = zipFile.getName();
 			if (root.indexOf(".") > 0) // remove the extension
@@ -541,7 +593,8 @@
 		}
 
 		int idx = root.indexOf("/");
-		if (idx > 0) root = root.substring(0, idx);
+		if (idx > 0)
+			root = root.substring(0, idx);
 		return root;
 	}
 
@@ -549,10 +602,9 @@
 	 * List the ZIP file content
 	 * 
 	 * @param zipFile
-	 * @return the list of files in the archive 
+	 * @return the list of files in the archive
 	 */
-	public static ArrayList<String> listFiles(File zipFile)
-	{
+	public static ArrayList<String> listFiles(File zipFile) {
 		ArrayList<String> list = new ArrayList<String>();
 		Enumeration<?> zipEntries;
 		ZipFile zip = null;
@@ -560,11 +612,11 @@
 			zip = new ZipFile(zipFile);
 			zipEntries = zip.entries();
 			while (zipEntries.hasMoreElements()) {
-				list.add(((ZipEntry)zipEntries.nextElement()).getName());
+				list.add(((ZipEntry) zipEntries.nextElement()).getName());
 			}
 			Collections.sort(list);
 		} catch (Exception e) {
-			System.out.println("Fail to list files of "+zipFile+": "+e);
+			System.out.println("Fail to list files of " + zipFile + ": " + e);
 			Log.printStackTrace(e);
 			return new ArrayList<String>();
 		} finally {
@@ -580,46 +632,46 @@
 		return list;
 	}
 
-
 	/**
 	 * The main method.
 	 *
-	 * @param args the arguments
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param args
+	 *            the arguments
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
-	public static void main(String[] args)
-			throws IOException {
-		//		File zipFile = new File("/home/mdecorde/Téléchargements/bvhepistemon-bin.zip");
-		//		ArrayList<String> list = Zip.listFiles(zipFile);
-		//		System.out.println(list);
-		//		System.out.println("outdir: "+list.get(0));
-		//		System.out.println("outdir fixed: "+Zip.getRoot(zipFile));
+	public static void main(String[] args) throws IOException {
+		// File zipFile = new
+		// File("/home/mdecorde/Téléchargements/bvhepistemon-bin.zip");
+		// ArrayList<String> list = Zip.listFiles(zipFile);
+		// System.out.println(list);
+		// System.out.println("outdir: "+list.get(0));
+		// System.out.println("outdir fixed: "+Zip.getRoot(zipFile));
 		File dir = new File("/home/mdecorde/workspace079/org.txm.setups/exportRCP/linux.gtk.x86_64/TXM/plugins");
 		File jarFile = new File(dir, "org.txm.statsengine.r.core_1.0.0.201805091353.jar");
 		File outDir = new File("/home/mdecorde/TEMP");
-		//System.out.println(StringUtils.join(Zip.listFiles(jarFile), "\n"));
-		System.out.println("Zip result: "+Zip.extractOneFile(jarFile, "R/", outDir));
-		
+		// System.out.println(StringUtils.join(Zip.listFiles(jarFile), "\n"));
+		System.out.println("Zip result: " + Zip.extractOneFile(jarFile, "R/", outDir));
+
 	}
 
 	public static boolean hasEntries(File zipFile, String... paths) {
 		HashSet<String> toFind = new HashSet(Arrays.asList(paths));
 		try {
 
-			ZipInputStream zis = new ZipInputStream(new BufferedInputStream(
-					new FileInputStream(zipFile.getCanonicalFile())));
+			ZipInputStream zis = new ZipInputStream(new BufferedInputStream(new FileInputStream(zipFile.getCanonicalFile())));
 			ZipEntry ze;
-			
+
 			// Parcours tous les fichiers
 			while (null != (ze = zis.getNextEntry())) {
 				String currentpath = ze.getName();
-//				String filename = currentpath;
-//				if (filename.endsWith("/")) {
-//					filename = filename.substring(0, filename.length()-1);
-//				}
-//				if (filename.lastIndexOf("/") > 0) {
-//					filename = filename.substring(filename.lastIndexOf("/")+1);
-//				}
+				// String filename = currentpath;
+				// if (filename.endsWith("/")) {
+				// filename = filename.substring(0, filename.length()-1);
+				// }
+				// if (filename.lastIndexOf("/") > 0) {
+				// filename = filename.substring(filename.lastIndexOf("/")+1);
+				// }
 				if (toFind.contains(currentpath)) {
 					toFind.remove(currentpath);
 					if (toFind.size() == 0) {
@@ -632,7 +684,7 @@
 					}
 				}
 			}
-			
+
 			if (zis != null) {
 				try {
 					zis.close();
@@ -641,11 +693,10 @@
 				}
 			}
 		} catch (Exception e) {
-			System.out.println("Fail to search for "+paths+" from "+zipFile+": "+e);
+			System.out.println("Fail to search for " + paths + " from " + zipFile + ": " + e);
 			Log.printStackTrace(e);
 		}
 
 		return toFind.size() == 0;
 	}
 }
-
Index: tmp/org.txm.utils/src/org/txm/utils/zip/GZip.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/zip/GZip.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/zip/GZip.java	(revision 2402)
@@ -12,11 +12,11 @@
 
 public class GZip {
 	public static void compress(File infile, File gzFile) throws FileNotFoundException, IOException {
-		
+
 		FileInputStream finStream = new FileInputStream(infile);
 		BufferedInputStream bufinStream = new BufferedInputStream(finStream);
 		FileOutputStream outStream = new FileOutputStream(gzFile);
-		GZIPOutputStream goutStream = new GZIPOutputStream(outStream);  
+		GZIPOutputStream goutStream = new GZIPOutputStream(outStream);
 		byte[] buf = new byte[1024];
 		int i;
 		while ((i = bufinStream.read(buf)) >= 0) {
@@ -32,18 +32,18 @@
 	 * @param gzFile
 	 * @param outDir
 	 * @return the extracted file
-	 * @throws IOException 
+	 * @throws IOException
 	 */
 	public static File uncompress(File gzFile, File outDir) throws IOException {
-		//To Uncompress GZip File Contents we need to open the gzip file.....
+		// To Uncompress GZip File Contents we need to open the gzip file.....
 		GZIPInputStream gzipInputStream = new GZIPInputStream(new FileInputStream(gzFile));
 
 		String outFileName = gzFile.getName();
-		outFileName = outFileName.substring(0, outFileName.length()-3); // remove ".gz"
+		outFileName = outFileName.substring(0, outFileName.length() - 3); // remove ".gz"
 		File outFile = new File(outDir, outFileName);
 		OutputStream out = new FileOutputStream(outFile);
 
-		byte[] buf = new byte[1024];  //size can be 
+		byte[] buf = new byte[1024]; // size can be
 
 		int len;
 		while ((len = gzipInputStream.read(buf)) > 0) {
Index: tmp/org.txm.utils/src/org/txm/utils/CharsetDetector.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/CharsetDetector.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/CharsetDetector.java	(revision 2402)
@@ -9,13 +9,12 @@
 import org.txm.utils.io.IOUtils;
 
 public class CharsetDetector {
-	public static int MINIMALSIZE=2000;
+	public static int MINIMALSIZE = 2000;
 	String encoding = System.getProperty("file.encoding"); //$NON-NLS-1$
 	LinkedHashMap<String, Integer> encodings = new LinkedHashMap<String, Integer>();
-	
-	public CharsetDetector(File file)
-	{
-		if(file.isDirectory())
+
+	public CharsetDetector(File file) {
+		if (file.isDirectory())
 			processDirectory(file);
 		else
 			try {
@@ -25,9 +24,8 @@
 				org.txm.utils.logger.Log.printStackTrace(e);
 			}
 	}
-	
-	private void processDirectory(File dir)
-	{
+
+	private void processDirectory(File dir) {
 		for (File file : dir.listFiles(IOUtils.HIDDENFILE_FILTER)) {
 			if (file.isFile()) {
 				try {
@@ -39,55 +37,48 @@
 			}
 		}
 	}
-	
+
 	String guessedCharset = System.getProperty("file.encoding"); //$NON-NLS-1$
-	private void processFile(File file) throws IOException
-	{
+
+	private void processFile(File file) throws IOException {
 		guessedCharset = System.getProperty("file.encoding"); //$NON-NLS-1$
-		UniversalDetector detector = new UniversalDetector(
-                new CharsetListener() {
-                    @Override
-					public void report(String name)
-                    {
-                        guessedCharset = name;
-                    }
-                }
-                );
-        
-        byte[] buf = new byte[4096];
-        java.io.FileInputStream fis = new java.io.FileInputStream(file);
-        
-        int nread;
-        while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
-            detector.handleData(buf, 0, nread);
-        }
-        detector.dataEnd();
+		UniversalDetector detector = new UniversalDetector(new CharsetListener() {
+			@Override
+			public void report(String name) {
+				guessedCharset = name;
+			}
+		});
 
-		if(!encodings.containsKey(guessedCharset))
+		byte[] buf = new byte[4096];
+		java.io.FileInputStream fis = new java.io.FileInputStream(file);
+
+		int nread;
+		while ((nread = fis.read(buf)) > 0 && !detector.isDone()) {
+			detector.handleData(buf, 0, nread);
+		}
+		detector.dataEnd();
+
+		if (!encodings.containsKey(guessedCharset))
 			encodings.put(guessedCharset, 0);
-		encodings.put(guessedCharset, encodings.get(guessedCharset)+1);
+		encodings.put(guessedCharset, encodings.get(guessedCharset) + 1);
 		fis.close();
 	}
-	
-	public String getEncoding()
-	{
+
+	public String getEncoding() {
 		int max = 0;
-		for(String s : encodings.keySet())
-		{
-			if(max < encodings.get(s))
-			{
+		for (String s : encodings.keySet()) {
+			if (max < encodings.get(s)) {
 				max = encodings.get(s);
 				encoding = s;
 			}
 		}
 		return encoding;
 	}
-	
-	public LinkedHashMap<String, Integer> getEncodings()
-	{
+
+	public LinkedHashMap<String, Integer> getEncodings() {
 		return encodings;
 	}
-	
+
 	public static void main(String[] args) {
 		CharsetDetector detector = new CharsetDetector(new File("/home/mdecorde/Bureau/testencoding")); //$NON-NLS-1$
 		System.out.println(detector.getEncodings());
Index: tmp/org.txm.utils/src/org/txm/utils/DiffPrint.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/DiffPrint.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/DiffPrint.java	(revision 2402)
@@ -36,574 +36,603 @@
 import java.util.Date;
 
 interface UnaryPredicate {
-  boolean execute(Object obj);
+	boolean execute(Object obj);
 }
 
-/** A simple framework for printing change lists produced by <code>Diff</code>.
-    @see bmsi.util.Diff
-    @author Stuart D. Gathman
-    Copyright (C) 2000 Business Management Systems, Inc.
-<p>
-    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 1, or (at your option)
-    any later version.
-<p>
-    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.
-<p>
-    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., 675 Mass Ave, Cambridge, MA 02139, USA.
+/**
+ * A simple framework for printing change lists produced by <code>Diff</code>.
+ * 
+ * @see bmsi.util.Diff
+ * @author Stuart D. Gathman Copyright (C) 2000 Business Management Systems,
+ *         Inc.
+ *         <p>
+ *         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 1, or (at your option)
+ *         any later version.
+ *         <p>
+ *         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.
+ *         <p>
+ *         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., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 public class DiffPrint {
-  /** A Base class for printing edit scripts produced by Diff.
-      This class divides the change list into "hunks", and calls
-      <code>print_hunk</code> for each hunk.  Various utility methods
-      are provided as well.
-   */
-  public static abstract class Base {
-    protected PrintWriter outfile;
-    public void setOutput(Writer wtr) {
-      outfile = new PrintWriter(wtr);
-    }
-    protected void setupOutput() {
-      if (outfile == null)
-	outfile = new PrintWriter(new OutputStreamWriter(System.out));
-    }
-    protected Base(Object[] a,Object[] b) {
-      file0 = a;
-      file1 = b;
-    }
-    /** Set to ignore certain kinds of lines when printing
-	an edit script.  For example, ignoring blank lines or comments.
-     */
-    protected UnaryPredicate ignore = null;
+	/**
+	 * A Base class for printing edit scripts produced by Diff. This class divides
+	 * the change list into "hunks", and calls <code>print_hunk</code> for each
+	 * hunk. Various utility methods are provided as well.
+	 */
+	public static abstract class Base {
+		protected PrintWriter outfile;
 
-    /** Set to the lines of the files being compared.
-     */
-    protected Object[] file0, file1;
+		public void setOutput(Writer wtr) {
+			outfile = new PrintWriter(wtr);
+		}
 
-    /** Divide SCRIPT into pieces by calling HUNKFUN and
-       print each piece with PRINTFUN.
-       Both functions take one arg, an edit script.
+		protected void setupOutput() {
+			if (outfile == null)
+				outfile = new PrintWriter(new OutputStreamWriter(System.out));
+		}
 
-       PRINTFUN takes a subscript which belongs together (with a null
-       link at the end) and prints it.  */
-    public void print_script(Diff.change script) {
-      setupOutput();
-      Diff.change next = script;
+		protected Base(Object[] a, Object[] b) {
+			file0 = a;
+			file1 = b;
+		}
 
-      while (next != null)
-	{
-	  Diff.change t, end;
+		/**
+		 * Set to ignore certain kinds of lines when printing an edit script. For
+		 * example, ignoring blank lines or comments.
+		 */
+		protected UnaryPredicate ignore = null;
 
-	  /* Find a set of changes that belong together.  */
-	  t = next;
-	  end = hunkfun(next);
+		/**
+		 * Set to the lines of the files being compared.
+		 */
+		protected Object[] file0, file1;
 
-	  /* Disconnect them from the rest of the changes,
-	     making them a hunk, and remember the rest for next iteration.  */
-	  next = end.link;
-	  end.link = null;
-	  //if (DEBUG)
-	  //  debug_script(t);
+		/**
+		 * Divide SCRIPT into pieces by calling HUNKFUN and print each piece with
+		 * PRINTFUN. Both functions take one arg, an edit script.
+		 * 
+		 * PRINTFUN takes a subscript which belongs together (with a null link at the
+		 * end) and prints it.
+		 */
+		public void print_script(Diff.change script) {
+			setupOutput();
+			Diff.change next = script;
 
-	  /* Print this hunk.  */
-	  print_hunk(t);
+			while (next != null) {
+				Diff.change t, end;
 
-	  /* Reconnect the script so it will all be freed properly.  */
-	  end.link = next;
-	}
-	outfile.flush();
-    }
+				/* Find a set of changes that belong together. */
+				t = next;
+				end = hunkfun(next);
 
-    /** Called with the tail of the script
-       and returns the last link that belongs together with the start
-       of the tail. */
+				/*
+				 * Disconnect them from the rest of the changes, making them a hunk, and
+				 * remember the rest for next iteration.
+				 */
+				next = end.link;
+				end.link = null;
+				// if (DEBUG)
+				// debug_script(t);
 
-    protected Diff.change hunkfun(Diff.change hunk) {
-      return hunk;
-    }
+				/* Print this hunk. */
+				print_hunk(t);
 
-    protected int first0, last0, first1, last1, deletes, inserts;
+				/* Reconnect the script so it will all be freed properly. */
+				end.link = next;
+			}
+			outfile.flush();
+		}
 
-    /** Look at a hunk of edit script and report the range of lines in each file
-      that it applies to.  HUNK is the start of the hunk, which is a chain
-      of `struct change'.  The first and last line numbers of file 0 are stored
-      in *FIRST0 and *LAST0, and likewise for file 1 in *FIRST1 and *LAST1. 
-      Note that these are internal line numbers that count from 0.
+		/**
+		 * Called with the tail of the script and returns the last link that belongs
+		 * together with the start of the tail.
+		 */
 
-      If no lines from file 0 are deleted, then FIRST0 is LAST0+1.
+		protected Diff.change hunkfun(Diff.change hunk) {
+			return hunk;
+		}
 
-      Also set *DELETES nonzero if any lines of file 0 are deleted
-      and set *INSERTS nonzero if any lines of file 1 are inserted.
-      If only ignorable lines are inserted or deleted, both are
-      set to 0.  */
+		protected int first0, last0, first1, last1, deletes, inserts;
 
-    protected void analyze_hunk(Diff.change hunk) {
-      int f0, l0 = 0, f1, l1 = 0, show_from = 0, show_to = 0;
-      int i;
-      Diff.change next;
-      boolean nontrivial = (ignore == null);
+		/**
+		 * Look at a hunk of edit script and report the range of lines in each file that
+		 * it applies to. HUNK is the start of the hunk, which is a chain of `struct
+		 * change'. The first and last line numbers of file 0 are stored in *FIRST0 and
+		 * *LAST0, and likewise for file 1 in *FIRST1 and *LAST1. Note that these are
+		 * internal line numbers that count from 0.
+		 * 
+		 * If no lines from file 0 are deleted, then FIRST0 is LAST0+1.
+		 * 
+		 * Also set *DELETES nonzero if any lines of file 0 are deleted and set *INSERTS
+		 * nonzero if any lines of file 1 are inserted. If only ignorable lines are
+		 * inserted or deleted, both are set to 0.
+		 */
 
-      show_from = show_to = 0;
+		protected void analyze_hunk(Diff.change hunk) {
+			int f0, l0 = 0, f1, l1 = 0, show_from = 0, show_to = 0;
+			int i;
+			Diff.change next;
+			boolean nontrivial = (ignore == null);
 
-      f0 = hunk.line0;
-      f1 = hunk.line1;
+			show_from = show_to = 0;
 
-      for (next = hunk; next != null; next = next.link)
-	{
-	  l0 = next.line0 + next.deleted - 1;
-	  l1 = next.line1 + next.inserted - 1;
-	  show_from += next.deleted;
-	  show_to += next.inserted;
-	  for (i = next.line0; i <= l0 && ! nontrivial; i++)
-	    if (!ignore.execute(file0[i]))
-	      nontrivial = true;
-	  for (i = next.line1; i <= l1 && ! nontrivial; i++)
-	    if (!ignore.execute(file1[i]))
-	      nontrivial = true;
-	}
+			f0 = hunk.line0;
+			f1 = hunk.line1;
 
-      first0 = f0;
-      last0 = l0;
-      first1 = f1;
-      last1 = l1;
+			for (next = hunk; next != null; next = next.link) {
+				l0 = next.line0 + next.deleted - 1;
+				l1 = next.line1 + next.inserted - 1;
+				show_from += next.deleted;
+				show_to += next.inserted;
+				for (i = next.line0; i <= l0 && !nontrivial; i++)
+					if (!ignore.execute(file0[i]))
+						nontrivial = true;
+				for (i = next.line1; i <= l1 && !nontrivial; i++)
+					if (!ignore.execute(file1[i]))
+						nontrivial = true;
+			}
 
-      /* If all inserted or deleted lines are ignorable,
-	 tell the caller to ignore this hunk.  */
+			first0 = f0;
+			last0 = l0;
+			first1 = f1;
+			last1 = l1;
 
-      if (!nontrivial)
-	show_from = show_to = 0;
+			/*
+			 * If all inserted or deleted lines are ignorable, tell the caller to ignore
+			 * this hunk.
+			 */
 
-      deletes = show_from;
-      inserts = show_to;
-    }
+			if (!nontrivial)
+				show_from = show_to = 0;
 
-    /** Called to print the script header which identifies the files compared.
-      The default does nothing (except set output to system.out if
-      not otherwise set).  Derived style classes can override to print 
-      the files compared in the format for that style.
-     */
-    public void print_header(String filea, String fileb) {
-      setupOutput();
-    }
+			deletes = show_from;
+			inserts = show_to;
+		}
 
-    protected abstract void print_hunk(Diff.change hunk);
-    
-    protected void print_1_line(String pre,Object linbuf) {
-      outfile.println(pre + linbuf.toString());
-    }
+		/**
+		 * Called to print the script header which identifies the files compared. The
+		 * default does nothing (except set output to system.out if not otherwise set).
+		 * Derived style classes can override to print the files compared in the format
+		 * for that style.
+		 */
+		public void print_header(String filea, String fileb) {
+			setupOutput();
+		}
 
-    /** Print a pair of line numbers with SEPCHAR, translated for file FILE.
-       If the two numbers are identical, print just one number.
+		protected abstract void print_hunk(Diff.change hunk);
 
-       Args A and B are internal line numbers.
-       We print the translated (real) line numbers.  */
+		protected void print_1_line(String pre, Object linbuf) {
+			outfile.println(pre + linbuf.toString());
+		}
 
-    protected void print_number_range (char sepchar, int a, int b) {
-      /* Note: we can have B < A in the case of a range of no lines.
-	 In this case, we should print the line number before the range,
-	 which is B.  */
-      if (++b > ++a)
-	outfile.print("" + a + sepchar + b);
-      else
-	outfile.print(b);
-    }
+		/**
+		 * Print a pair of line numbers with SEPCHAR, translated for file FILE. If the
+		 * two numbers are identical, print just one number.
+		 * 
+		 * Args A and B are internal line numbers. We print the translated (real) line
+		 * numbers.
+		 */
 
-    public static char change_letter(int inserts, int deletes) {
-      if (inserts == 0)
-	return 'd';
-      else if (deletes == 0)
-	return 'a';
-      else
-	return 'c';
-    }
-  }
+		protected void print_number_range(char sepchar, int a, int b) {
+			/*
+			 * Note: we can have B < A in the case of a range of no lines. In this case, we
+			 * should print the line number before the range, which is B.
+			 */
+			if (++b > ++a)
+				outfile.print("" + a + sepchar + b);
+			else
+				outfile.print(b);
+		}
 
-  /** Print a change list in the standard diff format.
-   */
-  public static class NormalPrint extends Base {
+		public static char change_letter(int inserts, int deletes) {
+			if (inserts == 0)
+				return 'd';
+			else if (deletes == 0)
+				return 'a';
+			else
+				return 'c';
+		}
+	}
 
-    public NormalPrint(Object[] a,Object[] b) {
-      super(a,b);
-    }
+	/**
+	 * Print a change list in the standard diff format.
+	 */
+	public static class NormalPrint extends Base {
 
-    /** Print a hunk of a normal diff.
-       This is a contiguous portion of a complete edit script,
-       describing changes in consecutive lines.  */
+		public NormalPrint(Object[] a, Object[] b) {
+			super(a, b);
+		}
 
-    protected void print_hunk (Diff.change hunk) {
+		/**
+		 * Print a hunk of a normal diff. This is a contiguous portion of a complete
+		 * edit script, describing changes in consecutive lines.
+		 */
 
-      /* Determine range of line numbers involved in each file.  */
-      analyze_hunk(hunk);
-      if (deletes == 0 && inserts == 0)
-	return;
+		protected void print_hunk(Diff.change hunk) {
 
-      /* Print out the line number header for this hunk */
-      print_number_range (',', first0, last0);
-      outfile.print(change_letter(inserts, deletes));
-      print_number_range (',', first1, last1);
-      outfile.println();
+			/* Determine range of line numbers involved in each file. */
+			analyze_hunk(hunk);
+			if (deletes == 0 && inserts == 0)
+				return;
 
-      /* Print the lines that the first file has.  */
-      if (deletes != 0)
-	for (int i = first0; i <= last0; i++)
-	  print_1_line ("< ", file0[i]);
+			/* Print out the line number header for this hunk */
+			print_number_range(',', first0, last0);
+			outfile.print(change_letter(inserts, deletes));
+			print_number_range(',', first1, last1);
+			outfile.println();
 
-      if (inserts != 0 && deletes != 0)
-	outfile.println("---");
+			/* Print the lines that the first file has. */
+			if (deletes != 0)
+				for (int i = first0; i <= last0; i++)
+					print_1_line("< ", file0[i]);
 
-      /* Print the lines that the second file has.  */
-      if (inserts != 0)
-	for (int i = first1; i <= last1; i++)
-	  print_1_line ("> ", file1[i]);
-    }
-  }
+			if (inserts != 0 && deletes != 0)
+				outfile.println("---");
 
-  /** Prints an edit script in a format suitable for input to <code>ed</code>.
-      The edit script must be generated with the reverse option to
-      be useful as actual <code>ed</code> input.
-   */
-  public static class EdPrint extends Base {
+			/* Print the lines that the second file has. */
+			if (inserts != 0)
+				for (int i = first1; i <= last1; i++)
+					print_1_line("> ", file1[i]);
+		}
+	}
 
-    public EdPrint(Object[] a,Object[] b) {
-      super(a,b);
-    }
+	/**
+	 * Prints an edit script in a format suitable for input to <code>ed</code>. The
+	 * edit script must be generated with the reverse option to be useful as actual
+	 * <code>ed</code> input.
+	 */
+	public static class EdPrint extends Base {
 
-    /** Print a hunk of an ed diff */
-    protected void print_hunk(Diff.change hunk) {
+		public EdPrint(Object[] a, Object[] b) {
+			super(a, b);
+		}
 
-      /* Determine range of line numbers involved in each file.  */
-      analyze_hunk (hunk);
-      if (deletes == 0 && inserts == 0)
-	return;
+		/** Print a hunk of an ed diff */
+		protected void print_hunk(Diff.change hunk) {
 
-      /* Print out the line number header for this hunk */
-      print_number_range (',', first0, last0);
-      outfile.println(change_letter(inserts, deletes));
+			/* Determine range of line numbers involved in each file. */
+			analyze_hunk(hunk);
+			if (deletes == 0 && inserts == 0)
+				return;
 
-      /* Print new/changed lines from second file, if needed */
-      if (inserts != 0)
-	{
-	  boolean inserting = true;
-	  for (int i = first1; i <= last1; i++)
-	    {
-	      /* Resume the insert, if we stopped.  */
-	      if (! inserting)
-		outfile.println(i - first1 + first0 + "a");
-	      inserting = true;
+			/* Print out the line number header for this hunk */
+			print_number_range(',', first0, last0);
+			outfile.println(change_letter(inserts, deletes));
 
-	      /* If the file's line is just a dot, it would confuse `ed'.
-		 So output it with a double dot, and set the flag LEADING_DOT
-		 so that we will output another ed-command later
-		 to change the double dot into a single dot.  */
+			/* Print new/changed lines from second file, if needed */
+			if (inserts != 0) {
+				boolean inserting = true;
+				for (int i = first1; i <= last1; i++) {
+					/* Resume the insert, if we stopped. */
+					if (!inserting)
+						outfile.println(i - first1 + first0 + "a");
+					inserting = true;
 
-	      if (".".equals(file1[i]))
-		{
-		  outfile.println("..");
-		  outfile.println(".");
-		  /* Now change that double dot to the desired single dot.  */
-		  outfile.println(i - first1 + first0 + 1 + "s/^\\.\\././");
-		  inserting = false;
+					/*
+					 * If the file's line is just a dot, it would confuse `ed'. So output it with a
+					 * double dot, and set the flag LEADING_DOT so that we will output another
+					 * ed-command later to change the double dot into a single dot.
+					 */
+
+					if (".".equals(file1[i])) {
+						outfile.println("..");
+						outfile.println(".");
+						/* Now change that double dot to the desired single dot. */
+						outfile.println(i - first1 + first0 + 1 + "s/^\\.\\././");
+						inserting = false;
+					} else
+						/* Line is not `.', so output it unmodified. */
+						print_1_line("", file1[i]);
+				}
+
+				/* End insert mode, if we are still in it. */
+				if (inserting)
+					outfile.println(".");
+			}
 		}
-	      else
-		/* Line is not `.', so output it unmodified.  */
-		print_1_line ("", file1[i]);
-	    }
-
-	  /* End insert mode, if we are still in it.  */
-	  if (inserting)
-	    outfile.println(".");
 	}
-    }
-  }
 
-  /** Prints an edit script in context diff format.  This and its
-    'unified' variation is used for source code patches.
-   */
-  public static class ContextPrint extends Base {
+	/**
+	 * Prints an edit script in context diff format. This and its 'unified'
+	 * variation is used for source code patches.
+	 */
+	public static class ContextPrint extends Base {
 
-    protected int context = 3;
+		protected int context = 3;
 
-    public ContextPrint(Object[] a,Object[] b) {
-      super(a,b);
-    }
+		public ContextPrint(Object[] a, Object[] b) {
+			super(a, b);
+		}
 
-    protected void print_context_label (String mark, File inf, String label) {
-      setupOutput();
-      if (label != null)
-	outfile.println(mark + ' ' + label);
-      else if (inf.lastModified() > 0)
-        // FIXME: use DateFormat to get precise format needed.
-	outfile.println(
-	  mark + ' ' + inf.getPath() + '\t' + new Date(inf.lastModified())
-	);
-      else
-	/* Don't pretend that standard input is ancient.  */
-	outfile.println(mark + ' ' + inf.getPath());
-    }
+		protected void print_context_label(String mark, File inf, String label) {
+			setupOutput();
+			if (label != null)
+				outfile.println(mark + ' ' + label);
+			else if (inf.lastModified() > 0)
+				// FIXME: use DateFormat to get precise format needed.
+				outfile.println(mark + ' ' + inf.getPath() + '\t' + new Date(inf.lastModified()));
+			else
+				/* Don't pretend that standard input is ancient. */
+				outfile.println(mark + ' ' + inf.getPath());
+		}
 
-    public void print_header(String filea,String fileb) {
-      print_context_label ("***", new File(filea), filea);
-      print_context_label ("---", new File(fileb), fileb);
-    }
+		public void print_header(String filea, String fileb) {
+			print_context_label("***", new File(filea), filea);
+			print_context_label("---", new File(fileb), fileb);
+		}
 
-    /** If function_regexp defined, search for start of function. */
-    private String find_function(Object[] lines, int start) {
-      return null;
-    }
+		/** If function_regexp defined, search for start of function. */
+		private String find_function(Object[] lines, int start) {
+			return null;
+		}
 
-    protected void print_function(Object[] file,int start) {
-      String function = find_function (file0, first0);
-      if (function != null) {
-	outfile.print(" ");
-	outfile.print(
-	  (function.length() < 40) ? function : function.substring(0,40)
-	);
-      }
-    }
+		protected void print_function(Object[] file, int start) {
+			String function = find_function(file0, first0);
+			if (function != null) {
+				outfile.print(" ");
+				outfile.print((function.length() < 40) ? function : function.substring(0, 40));
+			}
+		}
 
-    protected void print_hunk(Diff.change hunk) {
+		protected void print_hunk(Diff.change hunk) {
 
-      /* Determine range of line numbers involved in each file.  */
+			/* Determine range of line numbers involved in each file. */
 
-      analyze_hunk (hunk);
+			analyze_hunk(hunk);
 
-      if (deletes == 0 && inserts == 0)
-	return;
+			if (deletes == 0 && inserts == 0)
+				return;
 
-      /* Include a context's width before and after.  */
+			/* Include a context's width before and after. */
 
-      first0 = Math.max(first0 - context, 0);
-      first1 = Math.max(first1 - context, 0);
-      last0 = Math.min(last0 + context, file0.length - 1);
-      last1 = Math.min(last1 + context, file1.length - 1);
+			first0 = Math.max(first0 - context, 0);
+			first1 = Math.max(first1 - context, 0);
+			last0 = Math.min(last0 + context, file0.length - 1);
+			last1 = Math.min(last1 + context, file1.length - 1);
 
+			outfile.print("***************");
 
-      outfile.print("***************");
+			/*
+			 * If we looked for and found a function this is part of, include its name in
+			 * the header of the diff section.
+			 */
+			print_function(file0, first0);
 
-      /* If we looked for and found a function this is part of,
-	 include its name in the header of the diff section.  */
-      print_function (file0, first0);
+			outfile.println();
+			outfile.print("*** ");
+			print_number_range(',', first0, last0);
+			outfile.println(" ****");
 
-      outfile.println();
-      outfile.print("*** ");
-      print_number_range (',', first0, last0);
-      outfile.println(" ****");
+			if (deletes != 0) {
+				Diff.change next = hunk;
 
-      if (deletes != 0) {
-	Diff.change next = hunk;
+				for (int i = first0; i <= last0; i++) {
+					/*
+					 * Skip past changes that apply (in file 0) only to lines before line I.
+					 */
 
-	for (int i = first0; i <= last0; i++) {
-	  /* Skip past changes that apply (in file 0)
-	     only to lines before line I.  */
+					while (next != null && next.line0 + next.deleted <= i)
+						next = next.link;
 
-	  while (next != null && next.line0 + next.deleted <= i)
-	    next = next.link;
+					/* Compute the marking for line I. */
 
-	  /* Compute the marking for line I.  */
+					String prefix = " ";
+					if (next != null && next.line0 <= i)
+						/*
+						 * The change NEXT covers this line. If lines were inserted here in file 1, this
+						 * is "changed". Otherwise it is "deleted".
+						 */
+						prefix = (next.inserted > 0) ? "!" : "-";
 
-	  String prefix = " ";
-	  if (next != null && next.line0 <= i)
-	    /* The change NEXT covers this line.
-	       If lines were inserted here in file 1, this is "changed".
-	       Otherwise it is "deleted".  */
-	    prefix = (next.inserted > 0) ? "!" : "-";
+					print_1_line(prefix, file0[i]);
+				}
+			}
 
-	  print_1_line (prefix, file0[i]);
-	}
-      }
+			outfile.print("--- ");
+			print_number_range(',', first1, last1);
+			outfile.println(" ----");
 
-      outfile.print("--- ");
-      print_number_range (',', first1, last1);
-      outfile.println(" ----");
+			if (inserts != 0) {
+				Diff.change next = hunk;
 
-      if (inserts != 0) {
-	Diff.change next = hunk;
+				for (int i = first1; i <= last1; i++) {
+					/*
+					 * Skip past changes that apply (in file 1) only to lines before line I.
+					 */
 
-	for (int i = first1; i <= last1; i++) {
-	  /* Skip past changes that apply (in file 1)
-	     only to lines before line I.  */
+					while (next != null && next.line1 + next.inserted <= i)
+						next = next.link;
 
-	  while (next != null && next.line1 + next.inserted <= i)
-	    next = next.link;
+					/* Compute the marking for line I. */
 
-	  /* Compute the marking for line I.  */
+					String prefix = " ";
+					if (next != null && next.line1 <= i)
+						/*
+						 * The change NEXT covers this line. If lines were deleted here in file 0, this
+						 * is "changed". Otherwise it is "inserted".
+						 */
+						prefix = (next.deleted > 0) ? "!" : "+";
 
-	  String prefix = " ";
-	  if (next != null && next.line1 <= i)
-	    /* The change NEXT covers this line.
-	       If lines were deleted here in file 0, this is "changed".
-	       Otherwise it is "inserted".  */
-	    prefix = (next.deleted > 0) ? "!" : "+";
-
-	  print_1_line (prefix, file1[i]);
+					print_1_line(prefix, file1[i]);
+				}
+			}
+		}
 	}
-      }
-    }
-  }
 
-  /** Prints an edit script in context diff format.  This and its
-    'unified' variation is used for source code patches.
-   */
-  public static class UnifiedPrint extends ContextPrint {
+	/**
+	 * Prints an edit script in context diff format. This and its 'unified'
+	 * variation is used for source code patches.
+	 */
+	public static class UnifiedPrint extends ContextPrint {
 
-    public UnifiedPrint(Object[] a,Object[] b) {
-      super(a,b);
-    }
+		public UnifiedPrint(Object[] a, Object[] b) {
+			super(a, b);
+		}
 
-    public void print_header(String filea,String fileb) {
-      print_context_label ("---", new File(filea), filea);
-      print_context_label ("+++", new File(fileb), fileb);
-    }
+		public void print_header(String filea, String fileb) {
+			print_context_label("---", new File(filea), filea);
+			print_context_label("+++", new File(fileb), fileb);
+		}
 
-    private void print_number_range (int a, int b) {
-      //translate_range (file, a, b, &trans_a, &trans_b);
+		private void print_number_range(int a, int b) {
+			// translate_range (file, a, b, &trans_a, &trans_b);
 
-      /* Note: we can have B < A in the case of a range of no lines.
-	 In this case, we should print the line number before the range,
-	 which is B.  */
-      if (b < a)
-	outfile.print(b + ",0");
-      else
-        super.print_number_range(',',a,b);
-    }
+			/*
+			 * Note: we can have B < A in the case of a range of no lines. In this case, we
+			 * should print the line number before the range, which is B.
+			 */
+			if (b < a)
+				outfile.print(b + ",0");
+			else
+				super.print_number_range(',', a, b);
+		}
 
-    protected void print_hunk(Diff.change hunk) {
-      /* Determine range of line numbers involved in each file.  */
-      analyze_hunk (hunk);
+		protected void print_hunk(Diff.change hunk) {
+			/* Determine range of line numbers involved in each file. */
+			analyze_hunk(hunk);
 
-      if (deletes == 0 && inserts == 0)
-	return;
+			if (deletes == 0 && inserts == 0)
+				return;
 
-      /* Include a context's width before and after.  */
+			/* Include a context's width before and after. */
 
-      first0 = Math.max(first0 - context, 0);
-      first1 = Math.max(first1 - context, 0);
-      last0 = Math.min(last0 + context, file0.length - 1);
-      last1 = Math.min(last1 + context, file1.length - 1);
+			first0 = Math.max(first0 - context, 0);
+			first1 = Math.max(first1 - context, 0);
+			last0 = Math.min(last0 + context, file0.length - 1);
+			last1 = Math.min(last1 + context, file1.length - 1);
 
-      outfile.print("@@ -");
-      print_number_range (first0, last0);
-      outfile.print(" +");
-      print_number_range (first1, last1);
-      outfile.print(" @@");
+			outfile.print("@@ -");
+			print_number_range(first0, last0);
+			outfile.print(" +");
+			print_number_range(first1, last1);
+			outfile.print(" @@");
 
-      /* If we looked for and found a function this is part of,
-	 include its name in the header of the diff section.  */
-      print_function(file0,first0);
+			/*
+			 * If we looked for and found a function this is part of, include its name in
+			 * the header of the diff section.
+			 */
+			print_function(file0, first0);
 
-      outfile.println();
+			outfile.println();
 
-      Diff.change next = hunk;
-      int i = first0;
-      int j = first1;
+			Diff.change next = hunk;
+			int i = first0;
+			int j = first1;
 
-      while (i <= last0 || j <= last1) {
+			while (i <= last0 || j <= last1) {
 
-	/* If the line isn't a difference, output the context from file 0. */
+				/* If the line isn't a difference, output the context from file 0. */
 
-	if (next == null || i < next.line0) {
-	  if (i < file0.length) {
-	    outfile.print(' ');
-	    print_1_line ("", file0[i++]);
-	  }
-	  j++;
-	}
-	else {
-	  /* For each difference, first output the deleted part. */
+				if (next == null || i < next.line0) {
+					if (i < file0.length) {
+						outfile.print(' ');
+						print_1_line("", file0[i++]);
+					}
+					j++;
+				} else {
+					/* For each difference, first output the deleted part. */
 
-	  int k = next.deleted;
-	  while (k-- > 0) {
-	    outfile.print('-');
-	    print_1_line ("", file0[i++]);
-	  }
+					int k = next.deleted;
+					while (k-- > 0) {
+						outfile.print('-');
+						print_1_line("", file0[i++]);
+					}
 
-	  /* Then output the inserted part. */
+					/* Then output the inserted part. */
 
-	  k = next.inserted;
-	  while (k-- > 0) {
-	    outfile.print('+');
-	    print_1_line ("", file1[j++]);
-	  }
+					k = next.inserted;
+					while (k-- > 0) {
+						outfile.print('+');
+						print_1_line("", file1[j++]);
+					}
 
-	  /* We're done with this hunk, so on to the next! */
+					/* We're done with this hunk, so on to the next! */
 
-	  next = next.link;
+					next = next.link;
+				}
+			}
+		}
 	}
-      }
-    }
-  }
 
+	/**
+	 * Read a text file into an array of String. This provides basic diff
+	 * functionality. A more advanced diff utility will use specialized objects to
+	 * represent the text lines, with options to, for example, convert sequences of
+	 * whitespace to a single space for comparison purposes.
+	 */
+	static String[] slurp(String file) throws IOException {
+		BufferedReader rdr = new BufferedReader(new FileReader(file));
+		Vector s = new Vector();
+		for (;;) {
+			String line = rdr.readLine();
+			if (line == null)
+				break;
+			s.addElement(line);
+		}
+		String[] a = new String[s.size()];
+		s.copyInto(a);
+		rdr.close();
+		return a;
+	}
 
-  /** Read a text file into an array of String.  This provides basic diff
-     functionality.  A more advanced diff utility will use specialized
-     objects to represent the text lines, with options to, for example,
-     convert sequences of whitespace to a single space for comparison
-     purposes.
-   */
-  static String[] slurp(String file) throws IOException {
-    BufferedReader rdr = new BufferedReader(new FileReader(file));
-    Vector s = new Vector();
-    for (;;) {
-      String line = rdr.readLine();
-      if (line == null) break;
-      s.addElement(line);
-    }
-    String[] a = new String[s.size()];
-    s.copyInto(a);
-    rdr.close();
-    return a;
-  }
-
-  public static void main(String[] argv) throws IOException {
-    String filea = argv[argv.length - 2];
-    String fileb = argv[argv.length - 1];
-    String[] a = slurp(filea);
-    String[] b = slurp(fileb);
-    Diff d = new Diff(a,b);
-    char style = 'n';
-    d.heuristic = false;
-    for (int i = 0; i < argv.length - 2; ++i) {
-      String f = argv[i];
-      if (f.startsWith("-")) {
-        for (int j = 1; j < f.length(); ++j) {
-	  switch (f.charAt(j)) {
-	  case 'H':	// heuristic on
-	    d.heuristic = true; break;
-	  case 'e':	// Ed style
-	    style = 'e'; break;
-	  case 'c':	// Context diff
-	    style = 'c'; break;
-	  case 'u':
-	    style = 'u'; break;
-	  }
+	public static void main(String[] argv) throws IOException {
+		String filea = argv[argv.length - 2];
+		String fileb = argv[argv.length - 1];
+		String[] a = slurp(filea);
+		String[] b = slurp(fileb);
+		Diff d = new Diff(a, b);
+		char style = 'n';
+		d.heuristic = false;
+		for (int i = 0; i < argv.length - 2; ++i) {
+			String f = argv[i];
+			if (f.startsWith("-")) {
+				for (int j = 1; j < f.length(); ++j) {
+					switch (f.charAt(j)) {
+					case 'H': // heuristic on
+						d.heuristic = true;
+						break;
+					case 'e': // Ed style
+						style = 'e';
+						break;
+					case 'c': // Context diff
+						style = 'c';
+						break;
+					case 'u':
+						style = 'u';
+						break;
+					}
+				}
+			}
+		}
+		boolean reverse = style == 'e';
+		Diff.change script = d.diff_2(reverse);
+		if (script == null)
+			System.err.println("No differences");
+		else {
+			Base p;
+			switch (style) {
+			case 'e':
+				p = new EdPrint(a, b);
+				break;
+			case 'c':
+				p = new ContextPrint(a, b);
+				break;
+			case 'u':
+				p = new UnifiedPrint(a, b);
+				break;
+			default:
+				p = new NormalPrint(a, b);
+			}
+			p.print_header(filea, fileb);
+			p.print_script(script);
+		}
 	}
-      }
-    }
-    boolean reverse = style == 'e';
-    Diff.change script = d.diff_2(reverse);
-    if (script == null)
-      System.err.println("No differences");
-    else {
-      Base p;
-      switch (style) {
-      case 'e':
-        p = new EdPrint(a,b); break;
-      case 'c':
-        p = new ContextPrint(a,b); break;
-      case 'u':
-        p = new UnifiedPrint(a,b); break;
-      default:
-        p = new NormalPrint(a,b);
-      }
-      p.print_header(filea,fileb);
-      p.print_script(script);
-    }
-  }
 
 }
Index: tmp/org.txm.utils/src/org/txm/utils/ExecTimer.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/ExecTimer.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/ExecTimer.java	(revision 2402)
@@ -7,6 +7,7 @@
 public class ExecTimer {
 	static long startTime = 0, endTime = 0;
 	static String message = ""; //$NON-NLS-1$
+
 	public static void start() {
 		startTime = new Date().getTime();
 	}
@@ -17,24 +18,24 @@
 	}
 
 	static float t;
+
 	private static String setMessage(float time) {
 		t = time;
 		if (t < 1000) {
-			message = ""+((int)t)+UtilsCoreMessages.ExecTimer_0; //$NON-NLS-1$
-		}
-		else {
-			t = t/1000;
+			message = "" + ((int) t) + UtilsCoreMessages.ExecTimer_0; //$NON-NLS-1$
+		} else {
+			t = t / 1000;
 			if (t < 3) {
-				message = ""+t; //$NON-NLS-1$
-				message = ""+(message.substring(0, 3))+UtilsCoreMessages.ExecTimer_1; //$NON-NLS-1$
-			} else if (t < 60) 
-				message = ""+((int)t)+UtilsCoreMessages.ExecTimer_1; //$NON-NLS-1$
-			else if (t < 3600) 
-				message = ""+((int)t/60)+UtilsCoreMessages.ExecTimer_2+((int)t%60)+UtilsCoreMessages.ExecTimer_1; //$NON-NLS-1$
-			else 
-				message = ""+((int)t/3600)+UtilsCoreMessages.ExecTimer_3+((int)(t%3600)/60)+UtilsCoreMessages.ExecTimer_2+((int)(t%3600)%60)+ UtilsCoreMessages.ExecTimer_1; //$NON-NLS-1$
+				message = "" + t; //$NON-NLS-1$
+				message = "" + (message.substring(0, 3)) + UtilsCoreMessages.ExecTimer_1; //$NON-NLS-1$
+			} else if (t < 60)
+				message = "" + ((int) t) + UtilsCoreMessages.ExecTimer_1; //$NON-NLS-1$
+			else if (t < 3600)
+				message = "" + ((int) t / 60) + UtilsCoreMessages.ExecTimer_2 + ((int) t % 60) + UtilsCoreMessages.ExecTimer_1; //$NON-NLS-1$
+			else
+				message = "" + ((int) t / 3600) + UtilsCoreMessages.ExecTimer_3 + ((int) (t % 3600) / 60) + UtilsCoreMessages.ExecTimer_2 + ((int) (t % 3600) % 60) + UtilsCoreMessages.ExecTimer_1; //$NON-NLS-1$
 		}
-		return message + " ("+(int)time+" ms)"; //$NON-NLS-1$ //$NON-NLS-2$
+		return message + " (" + (int) time + " ms)"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
 	public static String getMessage() {
Index: tmp/org.txm.utils/src/org/txm/utils/io/FileCopy.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/io/FileCopy.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/io/FileCopy.java	(revision 2402)
@@ -45,7 +45,7 @@
 public class FileCopy {
 
 	private static final boolean isWindows = System.getProperty("os.name").contains("Windows");
-	
+
 	/**
 	 * replace the file if it exists
 	 * 
@@ -57,47 +57,54 @@
 	public static boolean copy(File source, File dest) throws IOException {
 		return copy(source, dest, true);
 	}
-	
-	
+
 	/**
-	 * copy one file with nio package to accelerate the copy 
+	 * copy one file with nio package to accelerate the copy
 	 * 
 	 * !!! on windows : max size = 64mo !!!.
 	 * 
 	 * resolve symbolic links
 	 *
-	 * @param source the source
-	 * @param dest the dest
+	 * @param source
+	 *            the source
+	 * @param dest
+	 *            the dest
 	 * @return true, if successful
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public static boolean copy(File source, File dest, boolean replace) throws IOException {
-		if (dest.exists() && !replace) return true; // don't replace file
-		
+		if (dest.exists() && !replace)
+			return true; // don't replace file
+
 		if (isWindows || source.length() >= Integer.MAX_VALUE) {
-			//System.out.println("COPY BIG FILE");
+			// System.out.println("COPY BIG FILE");
 			FileInputStream instream = null;
 			BufferedOutputStream outstream = null;
 			try {
-				//Open a stream of bytes to read the file bytes into the program
+				// Open a stream of bytes to read the file bytes into the program
 				instream = new FileInputStream(source);
-				//A stream of bytes from the program to the destination
+				// A stream of bytes from the program to the destination
 				outstream = new BufferedOutputStream(new FileOutputStream(dest));
 				byte[] buffer = new byte[4096];
 				int bytesRead;
-				//Write the bytes from the inputstream to the outputstream
-				while((bytesRead = instream.read(buffer))!=-1) {
+				// Write the bytes from the inputstream to the outputstream
+				while ((bytesRead = instream.read(buffer)) != -1) {
 					outstream.write(buffer, 0, bytesRead);
 				}
-			} catch (Exception e) {org.txm.utils.logger.Log.printStackTrace(e); return false; 
+			} catch (Exception e) {
+				org.txm.utils.logger.Log.printStackTrace(e);
+				return false;
 			} finally {
-				if (instream != null) instream.close();
-				if (outstream != null) outstream.close();
+				if (instream != null)
+					instream.close();
+				if (outstream != null)
+					outstream.close();
 				instream = null;
 				outstream = null;
 			}
 		} else {
-			//System.out.println("COPY NORMAL FILE");
+			// System.out.println("COPY NORMAL FILE");
 			FileChannel in = null, out = null;
 			FileInputStream fis = null;
 			FileOutputStream fos = null;
@@ -109,74 +116,87 @@
 
 				long size = in.size();
 				MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
-				
+
 				out.write(buf);
-			} catch(Exception e) {
+			} catch (Exception e) {
 				org.txm.utils.logger.Log.printStackTrace(e);
-				
-				if (fis != null) fis.close();
-				if (fos != null) fos.close();
-				if (in != null)	in.close();
-				if (out != null) out.close();
-				
+
+				if (fis != null)
+					fis.close();
+				if (fos != null)
+					fos.close();
+				if (in != null)
+					in.close();
+				if (out != null)
+					out.close();
+
 				return false;
 			} finally {
-				if (fis != null) fis.close();
-				if (fos != null) fos.close();
-				if (in != null)	in.close();
-				if (out != null) out.close();
+				if (fis != null)
+					fis.close();
+				if (fos != null)
+					fos.close();
+				if (in != null)
+					in.close();
+				if (out != null)
+					out.close();
 			}
 		}
 		return true;
 	}
 
 	/**
-	 * Copy files. Don't erase the destination directory and replace files if they already exists
+	 * Copy files. Don't erase the destination directory and replace files if they
+	 * already exists
 	 * 
 	 * warning: Symbolic links are not resolved and the link file is recreated
 	 *
-	 * @param src the src directory
-	 * @param dest the dest directory
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param src
+	 *            the src directory
+	 * @param dest
+	 *            the dest directory
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public static void copyFiles(File src, File dest) throws IOException {
 		copyFiles(src, dest, true);
 	}
-	
+
 	/**
-	 * Copy files. Don't erase the destination directory and replace files if they already exists
+	 * Copy files. Don't erase the destination directory and replace files if they
+	 * already exists
 	 *
 	 * warning: Symbolic links are not resolved and the link file is recreated
 	 *
-	 * @param src the src directory
-	 * @param dest the dest directory
-	 * @param replace replace files if true
-	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @param src
+	 *            the src directory
+	 * @param dest
+	 *            the dest directory
+	 * @param replace
+	 *            replace files if true
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
 	 */
 	public static void copyFiles(File src, File dest, boolean replace) throws IOException {
 
 		// Check to ensure that the source is valid...
 		if (!src.exists()) {
-			throw new IOException(UtilsCoreMessages.FileCopy_0 + src.getAbsolutePath()
-					+ "."); //$NON-NLS-1$ 
+			throw new IOException(UtilsCoreMessages.FileCopy_0 + src.getAbsolutePath() + "."); //$NON-NLS-1$
 		} else if (!src.canRead()) { // check to ensure we have rights to the
 			// source...
-			throw new IOException(UtilsCoreMessages.FileCopy_2 + src.getAbsolutePath()
-					+ "."); //$NON-NLS-1$ 
+			throw new IOException(UtilsCoreMessages.FileCopy_2 + src.getAbsolutePath() + "."); //$NON-NLS-1$
 		}
-		
-		
+
 		if (Files.isSymbolicLink(src.toPath())) { // copy symbolic links
 			Path target = Files.readSymbolicLink(src.toPath());
 			Files.createSymbolicLink(dest.toPath(), target);
 		} else if (src.isDirectory()) { // is it a directory ?
-			
+
 			if (!dest.exists()) { // does the destination already exist?
 				// if not create the file hierarchy
 				dest.mkdirs();
 				if (!dest.exists()) {
-					throw new IOException(UtilsCoreMessages.FileCopy_4
-							+ dest.getAbsolutePath() + "."); //$NON-NLS-1$ 
+					throw new IOException(UtilsCoreMessages.FileCopy_4 + dest.getAbsolutePath() + "."); //$NON-NLS-1$
 				}
 			}
 
@@ -196,36 +216,43 @@
 	}
 
 	public static void main(String[] args) throws IOException {
-//		File test1 = File.createTempFile("source", ".large"); //$NON-NLS-1$ //$NON-NLS-2$
-//		File test2 = File.createTempFile("source", ".verylarge"); //$NON-NLS-1$ //$NON-NLS-2$
-//		
-//		System.out.println("write "+test1); //$NON-NLS-1$
-//		writeBigFile(test1, Integer.MAX_VALUE / 2, 1);
-//		System.out.println("write "+test2); //$NON-NLS-1$
-//		writeBigFile(test2, Integer.MAX_VALUE / 2, 3);
-//		
-//		System.out.println("test1: "+test1+" : "+test1.length()); //$NON-NLS-1$ //$NON-NLS-2$
-//		System.out.println("test2: "+test2+" : "+test2.length()); //$NON-NLS-1$ //$NON-NLS-2$
-//		
-//		File copy1 = File.createTempFile("copy", ".large"); //$NON-NLS-1$ //$NON-NLS-2$
-//		File copy2 = File.createTempFile("copy", ".verylarge"); //$NON-NLS-1$ //$NON-NLS-2$
-//		
-//		System.out.println("Copy1 "+copy1); //$NON-NLS-1$
-//		FileCopy.copy(test1, copy1);
-//		System.out.println("Copy2 "+copy2); //$NON-NLS-1$
-//		FileCopy.copy(test2, copy2);
-//		
-//		System.out.println("copy1: "+copy1+" : "+copy1.length()); //$NON-NLS-1$ //$NON-NLS-2$
-//		System.out.println("copy2: "+copy2+" : "+copy2.length()); //$NON-NLS-1$ //$NON-NLS-2$
-//		
-//		System.out.println("delete 1 "+test1.delete()); //$NON-NLS-1$
-//		System.out.println("delete 2 "+test2.delete()); //$NON-NLS-1$
-//		System.out.println("delete c1 "+copy1.delete()); //$NON-NLS-1$
-//		System.out.println("delete c2 "+copy2.delete()); //$NON-NLS-1$
-		
+		// File test1 = File.createTempFile("source", ".large"); //$NON-NLS-1$
+		// //$NON-NLS-2$
+		// File test2 = File.createTempFile("source", ".verylarge"); //$NON-NLS-1$
+		// //$NON-NLS-2$
+		//
+		// System.out.println("write "+test1); //$NON-NLS-1$
+		// writeBigFile(test1, Integer.MAX_VALUE / 2, 1);
+		// System.out.println("write "+test2); //$NON-NLS-1$
+		// writeBigFile(test2, Integer.MAX_VALUE / 2, 3);
+		//
+		// System.out.println("test1: "+test1+" : "+test1.length()); //$NON-NLS-1$
+		// //$NON-NLS-2$
+		// System.out.println("test2: "+test2+" : "+test2.length()); //$NON-NLS-1$
+		// //$NON-NLS-2$
+		//
+		// File copy1 = File.createTempFile("copy", ".large"); //$NON-NLS-1$
+		// //$NON-NLS-2$
+		// File copy2 = File.createTempFile("copy", ".verylarge"); //$NON-NLS-1$
+		// //$NON-NLS-2$
+		//
+		// System.out.println("Copy1 "+copy1); //$NON-NLS-1$
+		// FileCopy.copy(test1, copy1);
+		// System.out.println("Copy2 "+copy2); //$NON-NLS-1$
+		// FileCopy.copy(test2, copy2);
+		//
+		// System.out.println("copy1: "+copy1+" : "+copy1.length()); //$NON-NLS-1$
+		// //$NON-NLS-2$
+		// System.out.println("copy2: "+copy2+" : "+copy2.length()); //$NON-NLS-1$
+		// //$NON-NLS-2$
+		//
+		// System.out.println("delete 1 "+test1.delete()); //$NON-NLS-1$
+		// System.out.println("delete 2 "+test2.delete()); //$NON-NLS-1$
+		// System.out.println("delete c1 "+copy1.delete()); //$NON-NLS-1$
+		// System.out.println("delete c2 "+copy2.delete()); //$NON-NLS-1$
+
 		File dir1 = new File("/home/mdecorde/TEMP/copydir");
 		File dir2 = new File("/home/mdecorde/TEMP/copydir3");
 		FileCopy.copyFiles(dir1, dir2);
 	}
 }
-
Index: tmp/org.txm.utils/src/org/txm/utils/io/IOUtils.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/io/IOUtils.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/io/IOUtils.java	(revision 2402)
@@ -57,7 +57,8 @@
 	 */
 	public List<File> listFiles(File dir) {
 		File[] files = dir.listFiles(HIDDENFILE_FILTER);
-		if (files == null) return new ArrayList<File>();
+		if (files == null)
+			return new ArrayList<File>();
 
 		return Arrays.asList(files);
 	}
@@ -95,7 +96,7 @@
 	public static ArrayList<String> find(File file, String encoding, String pattern, boolean normalizeSeparators) throws IOException {
 		ArrayList<String> matches = new ArrayList<String>();
 		String text = IOUtils.getText(file, encoding);
-		//System.out.println(text);
+		// System.out.println(text);
 		if (normalizeSeparators) {
 			text = text.replaceAll("\\s", " "); //$NON-NLS-1$ //$NON-NLS-2$
 			text = text.replaceAll("\\t", " "); //$NON-NLS-1$ //$NON-NLS-2$
@@ -118,23 +119,25 @@
 	/**
 	 * 
 	 * @param file
-	 * @param encoding if null the "UTF-8" encoding is used
+	 * @param encoding
+	 *            if null the "UTF-8" encoding is used
 	 * @return
 	 * @throws UnsupportedEncodingException
 	 * @throws FileNotFoundException
 	 */
 	public static BufferedReader getReader(File file, String encoding) throws UnsupportedEncodingException, FileNotFoundException {
-		if (encoding == null) encoding = "UTF-8"; // prevent null exception
-		
+		if (encoding == null)
+			encoding = "UTF-8"; // prevent null exception
+
 		FileInputStream input = new FileInputStream(file);
 		DetectBOM db = new DetectBOM(file);
-		for (int ibom = 0 ; ibom < db.getBOMSize() ; ibom++)
+		for (int ibom = 0; ibom < db.getBOMSize(); ibom++)
 			try {
 				input.read();
 			} catch (IOException e) {
 				e.printStackTrace();
 			}
-		return new BufferedReader(new InputStreamReader(input , encoding));
+		return new BufferedReader(new InputStreamReader(input, encoding));
 	}
 
 	public static BufferedReader getReader(String file) throws UnsupportedEncodingException, FileNotFoundException {
@@ -147,7 +150,7 @@
 
 	public static BufferedReader getReader(URL url, String encoding) throws IOException {
 		InputStream inputStream = url.openConnection().getInputStream();
-		return new BufferedReader(new InputStreamReader(inputStream , encoding));
+		return new BufferedReader(new InputStreamReader(inputStream, encoding));
 	}
 
 	public static void setText(File file, String text, String encoding) throws IOException {
@@ -159,12 +162,13 @@
 	public static String getText(URL url, String encoding) throws IOException {
 		BufferedReader reader = getReader(url, encoding);
 		StringBuilder builder = new StringBuilder();
-		try{
+		try {
 			String line = reader.readLine();
 			while (line != null) {
 				builder.append(line);
 				line = reader.readLine();
-				if (line != null) builder.append("\n"); //$NON-NLS-1$
+				if (line != null)
+					builder.append("\n"); //$NON-NLS-1$
 			}
 		} finally {
 			reader.close();
@@ -175,16 +179,17 @@
 	public static String getText(File file) throws IOException {
 		return getText(file, UTF8);
 	}
-	
+
 	public static String getText(File file, String encoding) throws IOException {
 		BufferedReader reader = getReader(file, encoding);
 		StringBuilder builder = new StringBuilder();
-		try{
+		try {
 			String line = reader.readLine();
 			while (line != null) {
 				builder.append(line);
 				line = reader.readLine();
-				if (line != null) builder.append("\n"); //$NON-NLS-1$
+				if (line != null)
+					builder.append("\n"); //$NON-NLS-1$
 			}
 		} finally {
 			reader.close();
@@ -205,7 +210,7 @@
 	}
 
 	public static PrintWriter getWriter(File file, String encoding, boolean append) throws UnsupportedEncodingException, FileNotFoundException {
-		return new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(file, append)) , encoding));
+		return new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(file, append)), encoding));
 	}
 
 	public static PrintWriter getWriter(String file) throws UnsupportedEncodingException, FileNotFoundException {
@@ -229,7 +234,7 @@
 				line = reader.readLine();
 			}
 			reader.close();
-		} catch(Exception e) {
+		} catch (Exception e) {
 			System.err.println(NLS.bind("Error while getting lines: {0}.", e.getLocalizedMessage()));
 		}
 		return lines;
@@ -266,13 +271,13 @@
 		IOUtils.write(file, text);
 	}
 
-	public static String firstLine(File file)  {
+	public static String firstLine(File file) {
 		try {
 			BufferedReader reader = getReader(file);
 			String line = reader.readLine();
 			reader.close();
 			return line;
-		} catch(Exception e) {
+		} catch (Exception e) {
 			return null;
 		}
 	}
Index: tmp/org.txm.utils/src/org/txm/utils/MessagePrinter.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/MessagePrinter.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/MessagePrinter.java	(revision 2402)
@@ -2,5 +2,6 @@
 
 public interface MessagePrinter {
 	public void println(String message);
+
 	public void print(String message);
 }
Index: tmp/org.txm.utils/src/org/txm/utils/Tuple.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Tuple.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/Tuple.java	(revision 2402)
@@ -3,31 +3,49 @@
 import java.util.HashSet;
 
 public class Tuple<T> {
-	
+
 	public T a, b;
-	
-	public Tuple(T a, T b) { this.a = a ; this.b = b;}
-	
+
+	public Tuple(T a, T b) {
+		this.a = a;
+		this.b = b;
+	}
+
 	static String format = "%s %s";
-	public String toString() { return String.format(format, a, b);}
+
+	public String toString() {
+		return String.format(format, a, b);
+	}
+
 	@Override
-	public int hashCode() {return a.hashCode()*b.hashCode();}
+	public int hashCode() {
+		return a.hashCode() * b.hashCode();
+	}
+
 	@Override
-	public boolean equals(Object t) {if (t instanceof Tuple) return equals((Tuple<?>)t); else return super.equals(t);};
-	public boolean equals(Tuple<Object> t) {return a.equals(t.a) & b.equals(t.b);};
-	
+	public boolean equals(Object t) {
+		if (t instanceof Tuple)
+			return equals((Tuple<?>) t);
+		else
+			return super.equals(t);
+	};
+
+	public boolean equals(Tuple<Object> t) {
+		return a.equals(t.a) & b.equals(t.b);
+	};
+
 	public static void main(String[] args) {
-		Tuple<Integer> t1 = new Tuple<Integer>(1,1);
-		Tuple<Integer> t2 = new Tuple<Integer>(1,2);
-		Tuple<Integer> t3 = new Tuple<Integer>(1,3);
-		Tuple<Integer> t33 = new Tuple<Integer>(1,3);
-		
+		Tuple<Integer> t1 = new Tuple<Integer>(1, 1);
+		Tuple<Integer> t2 = new Tuple<Integer>(1, 2);
+		Tuple<Integer> t3 = new Tuple<Integer>(1, 3);
+		Tuple<Integer> t33 = new Tuple<Integer>(1, 3);
+
 		HashSet<Tuple<Integer>> set = new HashSet<Tuple<Integer>>();
 		set.add(t1);
 		set.add(t2);
 		set.add(t3);
 		set.add(t33);
-		
+
 		System.out.println(set);
 	}
 }
\ No newline at end of file
Index: tmp/org.txm.utils/src/org/txm/utils/StreamHog.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/StreamHog.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/StreamHog.java	(revision 2402)
@@ -35,9 +35,11 @@
 import org.txm.utils.logger.Log;
 
 /**
- * The StreamHog read the given InputStream in a Thread until the InputStream is closed.
+ * The StreamHog read the given InputStream in a Thread until the InputStream is
+ * closed.
  * 
- * If a MessagePrinter is set, then the messages are displayed with the MessagePrinter and not in sys.out
+ * If a MessagePrinter is set, then the messages are displayed with the
+ * MessagePrinter and not in sys.out
  */
 public class StreamHog extends Thread {
 
@@ -47,12 +49,14 @@
 
 	public String lastline;
 	boolean log;
-	
+
 	/**
 	 * Instantiates a new stream hog.
 	 *
-	 * @param is the is
-	 * @param log the capture
+	 * @param is
+	 *            the is
+	 * @param log
+	 *            the capture
 	 */
 	public StreamHog(InputStream is, boolean log) {
 		this.setName("");
@@ -60,11 +64,11 @@
 		this.log = log;
 		start();
 	}
-	
+
 	public String getLastMessage() {
 		return lastline;
 	}
-	
+
 	public InputStream getInputStream() {
 		return is;
 	}
@@ -73,7 +77,9 @@
 		return br;
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Thread#run()
 	 */
 	@Override
@@ -83,20 +89,21 @@
 			String line = null;
 			while ((line = br.readLine()) != null) {
 				if (log) { // we are supposed to capture the output from
-					Log.info(this.getName()+">" + line); //$NON-NLS-1$
+					Log.info(this.getName() + ">" + line); //$NON-NLS-1$
 				}
-				
+
 				printMessage(line);
 				lastline = line;
 			}
 		} catch (Throwable e) {
-			Log.fine("ERROR: broken process logging : "+e); //$NON-NLS-1$
+			Log.fine("ERROR: broken process logging : " + e); //$NON-NLS-1$
 			org.txm.utils.logger.Log.printStackTrace(e);
 		}
 	}
-	
+
 	/**
 	 * print the message to any registered MessagePrinter
+	 * 
 	 * @param msg
 	 */
 	public void printMessage(String msg) {
@@ -109,6 +116,7 @@
 
 	/**
 	 * Use this method to retrieve messages
+	 * 
 	 * @param mp
 	 */
 	public void registerMessagePrinter(MessagePrinter mp) {
@@ -122,7 +130,8 @@
 	/**
 	 * Sets the prints the.
 	 *
-	 * @param log activate message logs if true
+	 * @param log
+	 *            activate message logs if true
 	 */
 	public void setPrint(boolean log) {
 		this.log = log;
Index: tmp/org.txm.utils/src/org/txm/utils/Pair.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Pair.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/Pair.java	(revision 2402)
@@ -35,22 +35,26 @@
 /**
  * similar to a C++ pair @ author mdecorde.
  *
- * @param <T> the generic type
- * @param <V> the value type
+ * @param <T>
+ *            the generic type
+ * @param <V>
+ *            the value type
  */
 public class Pair<T, V> {
-	
+
 	/** The o1. */
 	public T o1;
-	
+
 	/** The o2. */
 	public V o2;
 
 	/**
 	 * Instantiates a new pair.
 	 *
-	 * @param o1 the o1
-	 * @param o2 the o2
+	 * @param o1
+	 *            the o1
+	 * @param o2
+	 *            the o2
 	 */
 	public Pair(T o1, V o2) {
 		this.o1 = o1;
@@ -60,8 +64,10 @@
 	/**
 	 * Same.
 	 *
-	 * @param o1 the o1
-	 * @param o2 the o2
+	 * @param o1
+	 *            the o1
+	 * @param o2
+	 *            the o2
 	 * @return true, if successful
 	 */
 	public static boolean same(Object o1, Object o2) {
@@ -89,7 +95,8 @@
 	/**
 	 * Sets the first.
 	 *
-	 * @param o the new first
+	 * @param o
+	 *            the new first
 	 */
 	public void setFirst(T o) {
 		o1 = o;
@@ -98,13 +105,16 @@
 	/**
 	 * Sets the second.
 	 *
-	 * @param o the new second
+	 * @param o
+	 *            the new second
 	 */
 	public void setSecond(V o) {
 		o2 = o;
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
 	@Override
@@ -115,7 +125,9 @@
 		return same(p.o1, this.o1) && same(p.o2, this.o2);
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Object#toString()
 	 */
 	@Override
@@ -123,7 +135,9 @@
 		return "Pair{" + o1 + ", " + o2 + "}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 	}
 
-	/* (non-Javadoc)
+	/*
+	 * (non-Javadoc)
+	 * 
 	 * @see java.lang.Object#hashCode()
 	 */
 	@Override
@@ -131,41 +145,40 @@
 		if (o1 == null && o2 == null)
 			return 0;
 		if (o1 != null && o2 != null)
-			return this.o1.hashCode()*this.o2.hashCode();
+			return this.o1.hashCode() * this.o2.hashCode();
 		if (o1 != null)
 			return this.o1.hashCode();
 		else
 			return this.o2.hashCode();
 	}
-	
+
 	/**
 	 * Simple example test program.
 	 *
-	 * @param args the arguments
+	 * @param args
+	 *            the arguments
 	 */
 	public static void main(String[] args) {
 
 		HashMap<Pair, String> hashpair = new HashMap<Pair, String>();
-		
+
 		Pair<String, String> p1 = new Pair<String, String>("a", "b"); //$NON-NLS-1$ //$NON-NLS-2$
 		Pair<String, String> p2 = new Pair<String, String>("a", null); //$NON-NLS-1$
 		Pair<String, String> p3 = new Pair<String, String>("a", "b"); //$NON-NLS-1$ //$NON-NLS-2$
 		Pair<String, String> p4 = new Pair<String, String>(null, null);
-		System.out.println(p1.equals(new Pair<Integer, Integer>(new Integer(1),
-				new Integer(2)))
-				+ UtilsCoreMessages.Pair_0);
+		System.out.println(p1.equals(new Pair<Integer, Integer>(new Integer(1), new Integer(2))) + UtilsCoreMessages.Pair_0);
 		System.out.println(p4.equals(p2) + UtilsCoreMessages.Pair_0);
 		System.out.println(p2.equals(p4) + UtilsCoreMessages.Pair_0);
 		System.out.println(p1.equals(p3) + UtilsCoreMessages.Pair_1);
 		System.out.println(p4.equals(p4) + UtilsCoreMessages.Pair_1);
 		hashpair.containsKey(p1);
-		hashpair.put(p1,"p1"); //$NON-NLS-1$
-		hashpair.put(p2,"p2"); //$NON-NLS-1$
-		hashpair.put(p3,"p3"); //$NON-NLS-1$
-		hashpair.put(p4,"p4"); //$NON-NLS-1$
-		
+		hashpair.put(p1, "p1"); //$NON-NLS-1$
+		hashpair.put(p2, "p2"); //$NON-NLS-1$
+		hashpair.put(p3, "p3"); //$NON-NLS-1$
+		hashpair.put(p4, "p4"); //$NON-NLS-1$
+
 		System.out.println(hashpair);
-		System.out.println((p1==null ? p3==null : p1.equals(p3)));
+		System.out.println((p1 == null ? p3 == null : p1.equals(p3)));
 	}
 
 }
Index: tmp/org.txm.utils/src/org/txm/utils/ProcessBuilderBuilder.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/ProcessBuilderBuilder.java	(revision 2401)
+++ tmp/org.txm.utils/src/org/txm/utils/ProcessBuilderBuilder.java	(revision 2402)
@@ -49,17 +49,18 @@
  *
  * @deprecated
  * 
- * Reads a shell command line interface definition in an xml file
- * (CLIX) then creates the corresponding java wrapper API code.
+ * 			Reads a shell command line interface definition in an xml file
+ *             (CLIX) then creates the corresponding java wrapper API code.
  * 
- * example xml definition file :
+ *             example xml definition file :
  * 
- * <application name="progname" version="0.0.0" desc="..."> <progs>
- * <prog exec="prog.exe" desc="..."> <args> <arg state="optional"
- * type="none" name="thing" desc="the thing arg"/> <arg state="must"
- * type="none" name="compulsorything" desc=""/> <arg
- * state="multiple" type="none" name="onethingatleast" desc=""/>
- * </args> </prog> </progs> </application>
+ *             <application name="progname" version="0.0.0" desc="..."> <progs>
+ *             <prog exec="prog.exe" desc="..."> <args>
+ *             <arg state="optional" type="none" name="thing" desc="the thing
+ *             arg"/>
+ *             <arg state="must" type="none" name="compulsorything" desc=""/>
+ *             <arg state="multiple" type="none" name="onethingatleast" desc=
+ *             ""/> </args> </prog> </progs> </application>
  * @author mdecorde, sheiden
  */
 @Deprecated
@@ -68,16 +69,19 @@
 	/**
 	 * build the java file from the definition file.
 	 *
-	 * @param xmlFile the xml file
-	 * @param outFile the out file
-	 * @throws IOException Signals that an I/O exception has occurred.
-	 * @throws SAXException the sAX exception
-	 * @throws ParserConfigurationException the parser configuration exception
+	 * @param xmlFile
+	 *            the xml file
+	 * @param outFile
+	 *            the out file
+	 * @throws IOException
+	 *             Signals that an I/O exception has occurred.
+	 * @throws SAXException
+	 *             the sAX exception
+	 * @throws ParserConfigurationException
+	 *             the parser configuration exception
 	 */
-	public static void build(File xmlFile, File outFile) throws IOException,
-			SAXException, ParserConfigurationException {
-		OutputStreamWriter writer = new OutputStreamWriter(
-				new FileOutputStream(outFile), "UTF-8"); //$NON-NLS-1$
+	public static void build(File xmlFile, File outFile) throws IOException, SAXException, ParserConfigurationException {
+		OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(outFile), "UTF-8"); //$NON-NLS-1$
 		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
 		DocumentBuilder db = dbf.newDocumentBuilder();
 		Document doc = db.parse(xmlFile);
@@ -120,7 +124,7 @@
 			String execfiledesc = elem.getAttribute("desc"); //$NON-NLS-1$
 			String func = "\n\t// " + execfiledesc + //$NON-NLS-1$
 					"\n\tpublic void " //$NON-NLS-1$
-					+ execfile.replace("-", "").replace(".", "") + "("; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ 
+					+ execfile.replace("-", "").replace(".", "") + "("; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
 			String argsdesc = ""; //$NON-NLS-1$
 			for (int i = 0; i < children.getLength(); i++) {
 				Element child = (Element) children.item(i);
@@ -135,35 +139,30 @@
 					if (!dejavu.contains(name)) {
 						dejavu.add(name);
 						writer.write("\n\t// " + desc + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-						writer
-								.write("\tprivate Boolean is" + name.replace("-", "") + " = false;\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+						writer.write("\tprivate Boolean is" + name.replace("-", "") + " = false;\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 
 						if (!type.equals("none")) //$NON-NLS-1$
 						{
-							writer
-									.write("\tprivate " + type + " " + name.replace("-", "") + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-							writer
-									.write("\tpublic void set" + name.replace("-", "") + "(" + type + " arg)\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-											"\tthis.is" //$NON-NLS-1$
-											+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-											"\t\tthis." //$NON-NLS-1$
-											+ name.replace("-", "") + "=arg;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-											"\t}\n" //$NON-NLS-1$
-									);
+							writer.write("\tprivate " + type + " " + name.replace("-", "") + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+							writer.write("\tpublic void set" + name.replace("-", "") + "(" + type + " arg)\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+									"\tthis.is" //$NON-NLS-1$
+									+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+									"\t\tthis." //$NON-NLS-1$
+									+ name.replace("-", "") + "=arg;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+									"\t}\n" //$NON-NLS-1$
+							);
 						} else {
-							writer
-									.write("\tpublic void set" + name.replace("-", "") + "()\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-											"\tthis.is" //$NON-NLS-1$
-											+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-											"\t}\n" //$NON-NLS-1$
-									);
+							writer.write("\tpublic void set" + name.replace("-", "") + "()\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+									"\tthis.is" //$NON-NLS-1$
+									+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+									"\t}\n" //$NON-NLS-1$
+							);
 						}
-						writer
-								.write("\tpublic void unset" + name.replace("-", "") + "()\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-										"\tthis.is" //$NON-NLS-1$
-										+ name.replace("-", "") + "=false;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-										"\t}\n" //$NON-NLS-1$
-								);
+						writer.write("\tpublic void unset" + name.replace("-", "") + "()\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+								"\tthis.is" //$NON-NLS-1$
+								+ name.replace("-", "") + "=false;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+								"\t}\n" //$NON-NLS-1$
+						);
 					}
 
 					atester.put(name, type);
@@ -172,35 +171,30 @@
 					if (!dejavu.contains(name)) {
 						dejavu.add(name);
 						writer.write("\n\t// " + desc + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-						writer
-								.write("\tprivate Boolean is" + name.replace("-", "") + " = false;\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+						writer.write("\tprivate Boolean is" + name.replace("-", "") + " = false;\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 
 						if (!type.equals("none")) //$NON-NLS-1$
 						{
-							writer
-									.write("\tprivate List<" + type + "> " + name + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-							writer
-									.write("\tpublic void set" + name.replace("-", "") + "(List<" + type + "> arg)\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
-											"\tthis.is" //$NON-NLS-1$
-											+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-											"\t\tthis." //$NON-NLS-1$
-											+ name.replace("-", "") + "=arg;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-											"\t}\n" //$NON-NLS-1$
-									);
+							writer.write("\tprivate List<" + type + "> " + name + ";\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+							writer.write("\tpublic void set" + name.replace("-", "") + "(List<" + type + "> arg)\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+									"\tthis.is" //$NON-NLS-1$
+									+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+									"\t\tthis." //$NON-NLS-1$
+									+ name.replace("-", "") + "=arg;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+									"\t}\n" //$NON-NLS-1$
+							);
 						} else {
-							writer
-									.write("\tpublic void set" + name.replace("-", "") + "()\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-											"\tthis.is" //$NON-NLS-1$
-											+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-											"\t}\n" //$NON-NLS-1$
-									);
+							writer.write("\tpublic void set" + name.replace("-", "") + "()\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+									"\tthis.is" //$NON-NLS-1$
+									+ name.replace("-", "") + "=true;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+									"\t}\n" //$NON-NLS-1$
+							);
 						}
-						writer
-								.write("\tpublic void unset" + name.replace("-", "") + "()\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-										"\tthis.is" //$NON-NLS-1$
-										+ name.replace("-", "") + "=false;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ 
-										"\t}\n" //$NON-NLS-1$
-								);
+						writer.write("\tpublic void unset" + name.replace("-", "") + "()\n\t{" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+								"\tthis.is" //$NON-NLS-1$
+								+ name.replace("-", "") + "=false;\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+								"\t}\n" //$NON-NLS-1$
+						);
 					}
 					multiples.add(name);
 					atester.put(name, type);
@@ -221,8 +215,7 @@
 			writer.write("\n" + func + " throws IOException\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			writer.write(argsdesc);
 			writer.write("\t{\n"); //$NON-NLS-1$
-			writer
-					.write("\t\tArrayList<String> args = new ArrayList<String>();\n"); //$NON-NLS-1$
+			writer.write("\t\tArrayList<String> args = new ArrayList<String>();\n"); //$NON-NLS-1$
 			writer.write("\t\targs.add(binpath+\"/" + execfile + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
 			for (String name : order) {
 				if (atester.containsKey(name)) {
@@ -230,55 +223,42 @@
 					if (!atester.get(name).equals("none")) //$NON-NLS-1$
 					{
 						if (multiples.contains(name)) {
-							writer
-									.write("\t\t\tfor(int c = 0;c < " + name.replace("-", "") + ".size();c++)\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-							writer
-									.write("\t\t\t{args.add(\"-" + name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
-							writer
-									.write("\t\t\targs.add(\"\"+" + name.replace("-", "") + ".get(c));}\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+							writer.write("\t\t\tfor(int c = 0;c < " + name.replace("-", "") + ".size();c++)\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+							writer.write("\t\t\t{args.add(\"-" + name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
+							writer.write("\t\t\targs.add(\"\"+" + name.replace("-", "") + ".get(c));}\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 						} else {
-							writer
-									.write("\t\t\t{args.add(\"-" + name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
-							writer
-									.write("\t\t\targs.add(\"\"+" + name.replace("-", "") + ");}\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+							writer.write("\t\t\t{args.add(\"-" + name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
+							writer.write("\t\t\targs.add(\"\"+" + name.replace("-", "") + ");}\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 						}
 					} else {
 						writer.write("\t\t\targs.add(\"-" + name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
 					}
 				} else {
 					if (musts.contains(name))
-						writer
-								.write("\t\targs.add(\"\"+" + name.replace("-", "") + ");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+						writer.write("\t\targs.add(\"\"+" + name.replace("-", "") + ");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 				}
 			}
 
-			writer
-					.write("\n\t\tProcessBuilder pb = new ProcessBuilder(args);\n" + //$NON-NLS-1$
-							"\t\tpb.redirectErrorStream(true);\n" + //$NON-NLS-1$
-							"\t\tProcess process = null;\n" + //$NON-NLS-1$
-							"\t\ttry {\n\t\t\tprocess = pb.start();\n\t\t} catch (IOException e) {\n\t\t\tSystem.err.println(e);\n\t\t}\n"); //$NON-NLS-1$
+			writer.write("\n\t\tProcessBuilder pb = new ProcessBuilder(args);\n" + //$NON-NLS-1$
+					"\t\tpb.redirectErrorStream(true);\n" + //$NON-NLS-1$
+					"\t\tProcess process = null;\n" + //$NON-NLS-1$
+					"\t\ttry {\n\t\t\tprocess = pb.start();\n\t\t} catch (IOException e) {\n\t\t\tSystem.err.println(e);\n\t\t}\n"); //$NON-NLS-1$
 			writer.write("\t\tInputStream is = process.getInputStream();\n"); //$NON-NLS-1$
-			writer
-					.write("\t\tInputStreamReader isr = new InputStreamReader(is);\n"); //$NON-NLS-1$
+			writer.write("\t\tInputStreamReader isr = new InputStreamReader(is);\n"); //$NON-NLS-1$
 			writer.write("\t\tBufferedReader br = new BufferedReader(isr);\n"); //$NON-NLS-1$
 			writer.write("\t\tString line;\n"); //$NON-NLS-1$
-			writer
-					.write("\t\twhile ((line = br.readLine()) != null)\n\t\t{\n\t\t\tSystem.out.println(line);\n\t\t}\n"); //$NON-NLS-1$
-			writer
-					.write("\t\tint e=0;\n\ttry {e = process.waitFor();}catch(Exception err){}\n\t\tif (e != 0) {\n\t\t\t" + //$NON-NLS-1$
-							"System.err.println(\"Process exited abnormally with code \"+e+\" at \"+" //$NON-NLS-1$
-							+ 
-							"DateFormat.getDateInstance(DateFormat.FULL, Locale.UK).format(new Date()));\n\t\t\n"); //$NON-NLS-1$
+			writer.write("\t\twhile ((line = br.readLine()) != null)\n\t\t{\n\t\t\tSystem.out.println(line);\n\t\t}\n"); //$NON-NLS-1$
+			writer.write("\t\tint e=0;\n\ttry {e = process.waitFor();}catch(Exception err){}\n\t\tif (e != 0) {\n\t\t\t" + //$NON-NLS-1$
+					"System.err.println(\"Process exited abnormally with code \"+e+\" at \"+" //$NON-NLS-1$
+					+ "DateFormat.getDateInstance(DateFormat.FULL, Locale.UK).format(new Date()));\n\t\t\n"); //$NON-NLS-1$
 			writer.write("\t\n\n"); //$NON-NLS-1$
-			writer
-					.write("for(int c=0;c <args.size();c++)System.out.print(\"\"+args.get(c)+\" \");\n"); //$NON-NLS-1$
+			writer.write("for(int c=0;c <args.size();c++)System.out.print(\"\"+args.get(c)+\" \");\n"); //$NON-NLS-1$
 			writer.write("System.out.println();\n}\n\t}\n"); //$NON-NLS-1$
 		}
 
 		writer.write("\tpublic static void main(String[] args) \n"); //$NON-NLS-1$
 		writer.write("\t{\n"); //$NON-NLS-1$
-		writer
-				.write("\t\t" + appliname + " tt = new " + appliname + "(\"\");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		writer.write("\t\t" + appliname + " tt = new " + appliname + "(\"\");\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		writer.write("\t}\n"); //$NON-NLS-1$
 
 		writer.write("}"); //$NON-NLS-1$
@@ -288,7 +268,8 @@
 	/**
 	 * The main method.
 	 *
-	 * @param args the arguments
+	 * @param args
+	 *            the arguments
 	 */
 	public static void main(String[] args) {
 		if (args.length < 2) {
Index: tmp/org.txm.utils/.classpath
===================================================================
--- tmp/org.txm.utils/.classpath	(revision 2401)
+++ tmp/org.txm.utils/.classpath	(revision 2402)
@@ -1,13 +1,21 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry exported="true" kind="lib" path="commons-cli-1.2.jar"/>
-	  <classpathentry exported="true" kind="lib" path="commons-io-1.4.jar"/>
-	  <classpathentry exported="true" kind="lib" path="commons-lang-2.4.jar"/>
-	  <classpathentry exported="true" kind="lib" path="juniversalchardet-1.0.3.jar"/>
-	  <classpathentry exported="true" kind="lib" path="ant-1.7.1.jar"/>
-	  <classpathentry exported="true" kind="lib" path="textcat-1.0.1.jar"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins" />
+	<classpathentry kind="src" path="src" />
+	<classpathentry exported="true" kind="lib"
+		path="commons-cli-1.2.jar" />
+	<classpathentry exported="true" kind="lib"
+		path="commons-io-1.4.jar" />
+	<classpathentry exported="true" kind="lib"
+		path="commons-lang-2.4.jar" />
+	<classpathentry exported="true" kind="lib"
+		path="juniversalchardet-1.0.3.jar" />
+	<classpathentry exported="true" kind="lib"
+		path="ant-1.7.1.jar" />
+	<classpathentry exported="true" kind="lib"
+		path="textcat-1.0.1.jar" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/messages/TreeTaggerUIMessages.java
===================================================================
--- tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/messages/TreeTaggerUIMessages.java	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/messages/TreeTaggerUIMessages.java	(revision 2402)
@@ -12,18 +12,18 @@
  *
  */
 public class TreeTaggerUIMessages extends NLS {
-
+	
 	private static final String BUNDLE_NAME = "org.txm.treetagger.rcp.messages.messages"; //$NON-NLS-1$
 	
-	public static String pathToInstallDirectory; 
-	public static String pathToModelsDirectory; 
+	public static String pathToInstallDirectory;
 	
+	public static String pathToModelsDirectory;
+	
 	static {
 		// initialize resource bundle
 		Utf8NLS.initializeMessages(BUNDLE_NAME, TreeTaggerUIMessages.class);
 	}
-
-	private TreeTaggerUIMessages() {
-	}
 	
+	private TreeTaggerUIMessages() {}
+	
 }
Index: tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/Apply.java
===================================================================
--- tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/Apply.java	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/Apply.java	(revision 2402)
@@ -25,20 +25,24 @@
 
 /**
  * Our sample handler extends AbstractHandler, an IHandler base class.
+ * 
  * @see org.eclipse.core.commands.IHandler
  * @see org.eclipse.core.commands.AbstractHandler
  */
 public class Apply extends AbstractHandler {
 	
-	@Option(name="model", usage="Model file", widget="File", required=true, def="model.par")
+	@Option(name = "model", usage = "Model file", widget = "File", required = true, def = "model.par")
 	public File model = null;
-	@Option(name="posProperty", usage="The pos property", widget="String", required=true, def="frpos")
+	
+	@Option(name = "posProperty", usage = "The pos property", widget = "String", required = true, def = "frpos")
 	public String posProperty = null;
-	@Option(name="lemmaProperty", usage="The lemma property", widget="String", required=true, def="frlemma")
+	
+	@Option(name = "lemmaProperty", usage = "The lemma property", widget = "String", required = true, def = "frlemma")
 	public String lemmaProperty = null;
-	@Option(name="options", usage="TreeTagger supplementary options", widget="String", required=true, def="")
+	
+	@Option(name = "options", usage = "TreeTagger supplementary options", widget = "String", required = true, def = "")
 	public String options = null;
-
+	
 	/**
 	 * 
 	 */
@@ -48,12 +52,12 @@
 		
 		ISelection isel = window.getActivePage().getSelection();
 		if (isel instanceof IStructuredSelection) {
-			IStructuredSelection sel = (IStructuredSelection)isel;
+			IStructuredSelection sel = (IStructuredSelection) isel;
 			Object first = sel.getFirstElement();
 			if (first instanceof CQPCorpus) {
-				corpus = (CQPCorpus)first;
+				corpus = (CQPCorpus) first;
 				if (ParametersDialog.open(this)) {
-					apply(corpus, model, new String[]{posProperty, lemmaProperty}, options.split("  "));
+					apply(corpus, model, new String[] { posProperty, lemmaProperty }, options.split("  "));
 					return corpus;
 				}
 			}
@@ -66,13 +70,14 @@
 	public static void apply(CQPCorpus corpus, final File model, final String[] properties, final String[] options) {
 		final MainCorpus mainCorpus = corpus.getMainCorpus();
 		final File corpusBinaryDirectory = mainCorpus.getProjectDirectory();
-		final File txmDirectory = new File(corpusBinaryDirectory, "txm/"+mainCorpus.getID());
+		final File txmDirectory = new File(corpusBinaryDirectory, "txm/" + mainCorpus.getID());
 		
 		if (!txmDirectory.exists()) {
 			System.out.println("Can't apply TreeTagger to a corpus with no XML-TXM files.");
 		}
 		
 		final File[] files = txmDirectory.listFiles(new FileFilter() {
+			
 			@Override
 			public boolean accept(File file) {
 				return file.isFile() && file.canWrite() && file.getName().endsWith(".xml");
@@ -80,7 +85,7 @@
 		});
 		
 		if (files == null || files.length == 0) {
-			System.out.println("Can't apply TreeTagger to a corpus with no XML-TXM files in "+txmDirectory);
+			System.out.println("Can't apply TreeTagger to a corpus with no XML-TXM files in " + txmDirectory);
 		}
 		
 		String lang = model.getName();
@@ -94,11 +99,13 @@
 		for (File txmFile : files) {
 			hash.put(txmFile.getName(), lang);
 		}
+		
+		for (int i = 0; i < properties.length; i++)
+			properties[i] = properties[i].trim();
+		
+		System.out.println("APPLY : " + model + " to " + corpus + " updating " + Arrays.toString(properties) + " with options " + Arrays.toString(options));
+		JobHandler job = new JobHandler("Applying TreeTagger to " + corpus + " corpus.") {
 			
-		for (int i = 0 ; i < properties.length ; i++) properties[i] = properties[i].trim(); 
-		
-		System.out.println("APPLY : "+model+" to "+corpus+" updating "+Arrays.toString(properties)+ " with options "+Arrays.toString(options));
-		JobHandler job = new JobHandler("Applying TreeTagger to "+corpus+" corpus.") {
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				this.runInit(monitor);
@@ -106,7 +113,7 @@
 				annotator.setModelsDirectory(model.getParentFile());
 				annotator.setDebug();
 				if (!annotator.run(corpusBinaryDirectory, txmDirectory, hash, true, properties, options)) {
-					System.out.println("Fail to apply TreeTagger with "+txmDirectory+" files.");
+					System.out.println("Fail to apply TreeTagger with " + txmDirectory + " files.");
 					return Status.CANCEL_STATUS;
 				}
 				System.out.println("Done. Updating corpus...");
@@ -115,7 +122,7 @@
 					System.out.println("Fail to update corpus indexes and editions.");
 				}
 				System.out.println("Done.");
-				return Status.OK_STATUS;//frppos
+				return Status.OK_STATUS;// frppos
 			}
 		};
 		job.schedule();
Index: tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/LemmaProjection.java
===================================================================
--- tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/LemmaProjection.java	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/LemmaProjection.java	(revision 2402)
@@ -39,94 +39,104 @@
 
 /**
  * Our sample handler extends AbstractHandler, an IHandler base class.
+ * 
  * @see org.eclipse.core.commands.IHandler
  * @see org.eclipse.core.commands.AbstractHandler
  */
 public class LemmaProjection extends AbstractHandler {
-
+	
 	protected static final String EXTRA = "extra";
-	@Option(name="dictionary", usage="TSV Dictionary file with form, msd, lemma, source columns", widget="File", required=true, def="frolex.tsv")
+	
+	@Option(name = "dictionary", usage = "TSV Dictionary file with form, msd, lemma, source columns", widget = "File", required = true, def = "frolex.tsv")
 	public File dictionary = null;
-	@Option(name="extrarules", usage="form+pos rules files", widget="File", required=false, def="extrarules.tsv")
+	
+	@Option(name = "extrarules", usage = "form+pos rules files", widget = "File", required = false, def = "extrarules.tsv")
 	public File extrarules = null;
-	@Option(name="posproperty", usage="The lexicon property to read", widget="String", required=true, def="frpos")
+	
+	@Option(name = "posproperty", usage = "The lexicon property to read", widget = "String", required = true, def = "frpos")
 	public String posproperty = null;
-	@Option(name="lemmaproperty", usage="The property to create/update in the corpus", widget="String", required=true, def="plemma")
+	
+	@Option(name = "lemmaproperty", usage = "The property to create/update in the corpus", widget = "String", required = true, def = "plemma")
 	public String lemmaproperty = null;
-	@Option(name="formAsLemmaPosList", usage="Pos values lemma exceptions", widget="String", required=false, def="NOMPro")
+	
+	@Option(name = "formAsLemmaPosList", usage = "Pos values lemma exceptions", widget = "String", required = false, def = "NOMPro")
 	public String formAsLemmaPosList = null;
-	@Option(name="sourcePriorityList", usage="The property to create/update in the corpus", widget="String", required=true, def="TL")
+	
+	@Option(name = "sourcePriorityList", usage = "The property to create/update in the corpus", widget = "String", required = true, def = "TL")
 	public String sourcePriorityList = null;
-
+	
 	/**
 	 * 
 	 */
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		CQPCorpus corpus = null;
 		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
-
+		
 		ISelection isel = window.getActivePage().getSelection();
 		if (isel instanceof IStructuredSelection) {
-			IStructuredSelection sel = (IStructuredSelection)isel;
+			IStructuredSelection sel = (IStructuredSelection) isel;
 			Object first = sel.getFirstElement();
 			if (first instanceof CQPCorpus) {
-				corpus = (CQPCorpus)first;
+				corpus = (CQPCorpus) first;
 				if (ParametersDialog.open(this)) {
 					LinkedHashSet<String> formAsLemmaPosSet = new LinkedHashSet<String>();
 					formAsLemmaPosSet.addAll(Arrays.asList(formAsLemmaPosList.split(",")));
 					LinkedHashSet<String> sourcePrioritySet = new LinkedHashSet<String>();
 					if (extrarules != null && extrarules.exists()) sourcePrioritySet.add(EXTRA); // extra must be the first source
 					sourcePrioritySet.addAll(Arrays.asList(sourcePriorityList.split(",")));
-
-					System.out.println("formAsLemmaPosSet="+formAsLemmaPosSet);
-					System.out.println("sourcePrioritySet="+sourcePrioritySet);
+					
+					System.out.println("formAsLemmaPosSet=" + formAsLemmaPosSet);
+					System.out.println("sourcePrioritySet=" + sourcePrioritySet);
 					apply(corpus, dictionary, extrarules, posproperty, lemmaproperty, formAsLemmaPosSet, sourcePrioritySet);
 					return corpus;
 				}
 			}
 		}
-
+		
 		System.out.println("Wrong selection.");
 		return null;
 	}
-
-	public static void apply(final CQPCorpus corpus, final File dictionary, final File extrarules, final String posproperty, 
+	
+	public static void apply(final CQPCorpus corpus, final File dictionary, final File extrarules, final String posproperty,
 			final String targetproperty, final LinkedHashSet<String> formAsLemmaPosList, final LinkedHashSet<String> sourceprioritylist) {
 		final MainCorpus mainCorpus = corpus.getMainCorpus();
 		final File corpusBinaryDirectory = mainCorpus.getProjectDirectory();
-		final File txmDirectory = new File(corpusBinaryDirectory, "txm/"+mainCorpus.getID());
-
+		final File txmDirectory = new File(corpusBinaryDirectory, "txm/" + mainCorpus.getID());
+		
 		if (!txmDirectory.exists()) {
-			System.out.println("Can't process a corpus with no XML-TXM files directory: "+txmDirectory);
+			System.out.println("Can't process a corpus with no XML-TXM files directory: " + txmDirectory);
 			return;
 		}
-
+		
 		final File[] files = txmDirectory.listFiles(new FileFilter() {
+			
 			@Override
 			public boolean accept(File file) {
 				return file.isFile() && file.canWrite() && file.getName().endsWith(".xml");
 			}
 		});
-
+		
 		Property pos = null;
 		try {
 			pos = mainCorpus.getProperty(posproperty);
-		} catch (CqiClientException e1) {
+		}
+		catch (CqiClientException e1) {
 			// TODO Auto-generated catch block
 			e1.printStackTrace();
 		}
 		if (pos == null) {
-			System.out.println("No pos property found with name="+posproperty);
+			System.out.println("No pos property found with name=" + posproperty);
 			return;
 		}
-
+		
 		if (files == null || files.length == 0) {
-			System.out.println("Can't process a corpus with no XML-TXM files in "+txmDirectory);
+			System.out.println("Can't process a corpus with no XML-TXM files in " + txmDirectory);
 			return;
 		}
-
-		System.out.println("APPLYING : "+dictionary+" to "+mainCorpus+": creating/updating "+targetproperty+ " property with lexicon "+dictionary);
-		JobHandler job = new JobHandler("Creating/Updating "+targetproperty+" property.") {
+		
+		System.out.println("APPLYING : " + dictionary + " to " + mainCorpus + ": creating/updating " + targetproperty + " property with lexicon " + dictionary);
+		JobHandler job = new JobHandler("Creating/Updating " + targetproperty + " property.") {
+			
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				this.runInit(monitor);
@@ -140,68 +150,69 @@
 					while (line != null) {
 						String[] splitTab = line.split("\t");
 						if (splitTab.length != 5) {
-							System.out.println("Error in dictionary files with line='"+line+"': length is not 5. Found: "+Arrays.toString(splitTab));
+							System.out.println("Error in dictionary files with line='" + line + "': length is not 5. Found: " + Arrays.toString(splitTab));
 							line = reader.readLine();
 							reader.close();
 							return Status.CANCEL_STATUS;
 						}
 						String form = splitTab[0];
-						String pos = splitTab[1];//.replace("<no_pos>|", "").replace("|<no_pos>|", "").replace("|<no_pos>", "");
-						String lemma = splitTab[2];//.replace("<no_lemma>|", "").replace("|<no_lemma>|", "").replace("|<no_lemma>", "");
+						String pos = splitTab[1];// .replace("<no_pos>|", "").replace("|<no_pos>|", "").replace("|<no_pos>", "");
+						String lemma = splitTab[2];// .replace("<no_lemma>|", "").replace("|<no_lemma>|", "").replace("|<no_lemma>", "");
 						String source = splitTab[3];
 						
-						if (! rules.containsKey(form)) rules.put(form, new LinkedHashMap<String, LinkedHashMap<String, String>>());
+						if (!rules.containsKey(form)) rules.put(form, new LinkedHashMap<String, LinkedHashMap<String, String>>());
 						LinkedHashMap<String, LinkedHashMap<String, String>> posHash = rules.get(form);
 						
 						if (!lemma.equals("<no_lemma>")) {
 							if (!posHash.containsKey(pos)) posHash.put(pos, new LinkedHashMap<String, String>());
 							LinkedHashMap<String, String> sourceHash = posHash.get(pos);
 							
-							sourceHash.put(source,  lemma);
+							sourceHash.put(source, lemma);
 						}
 						line = reader.readLine();
 					}
 					reader.close();
-					System.out.println("Dictionary rules loaded: "+rules.size());
-
+					System.out.println("Dictionary rules loaded: " + rules.size());
+					
 					if (extrarules.exists()) {
 						reader = IOUtils.getReader(extrarules);
 						line = reader.readLine();
 						while (line != null) {
 							String[] splitTab = line.split("\t");
 							if (splitTab.length != 3) {
-								System.out.println("Error in extra rule files with line='"+line+"': length is not 3.");
+								System.out.println("Error in extra rule files with line='" + line + "': length is not 3.");
 								line = reader.readLine();
 								continue;
 							}
 							String form = splitTab[0];
 							String pos = splitTab[1];
 							String lemma = splitTab[2];
-							if (! rules.containsKey(form)) rules.put(form, new LinkedHashMap<String, LinkedHashMap<String, String>>());
+							if (!rules.containsKey(form)) rules.put(form, new LinkedHashMap<String, LinkedHashMap<String, String>>());
 							LinkedHashMap<String, LinkedHashMap<String, String>> posHash = rules.get(form);
-
+							
 							if (!posHash.containsKey(pos)) posHash.put(pos, new LinkedHashMap<String, String>());
 							LinkedHashMap<String, String> sourceHash = posHash.get(pos);
-							sourceHash.put(EXTRA,  lemma);
-
+							sourceHash.put(EXTRA, lemma);
+							
 						}
 						reader.close();
-						System.out.println("Dictionary extra rules loaded: "+rules.size());
-					} else {
+						System.out.println("Dictionary extra rules loaded: " + rules.size());
+					}
+					else {
 						System.out.println("No extra rule loaded.");
 					}
 					
 					PrintWriter writer = IOUtils.getWriter("/tmp/rules.txt");
 					for (String k : rules.keySet()) {
-						writer.println("FORM="+k);
+						writer.println("FORM=" + k);
 						LinkedHashMap<String, LinkedHashMap<String, String>> rules2 = rules.get(k);
 						for (String k2 : rules2.keySet()) {
-							writer.println(" POS="+k2);
+							writer.println(" POS=" + k2);
 							LinkedHashMap<String, String> rules3 = rules2.get(k2);
 							for (String k3 : rules3.keySet()) {
-								writer.println("  SOURCE="+k3);
+								writer.println("  SOURCE=" + k3);
 								String ls2 = rules3.get(k3);
-								writer.println("   LEMMA="+ls2);
+								writer.println("   LEMMA=" + ls2);
 							}
 						}
 					}
@@ -212,13 +223,13 @@
 					for (String s : formAsLemmaPosList) {
 						formAsLemmaPosSet.add(s);
 					}
-					System.out.println("POS exception rules loaded: "+formAsLemmaPosSet.size());
-
+					System.out.println("POS exception rules loaded: " + formAsLemmaPosSet.size());
+					
 					// save previous version of XML-TXM files
-					File previousXMLTXMDirectory = new File(txmDirectory.getAbsolutePath()+"_previous");
+					File previousXMLTXMDirectory = new File(txmDirectory.getAbsolutePath() + "_previous");
 					DeleteDir.deleteDirectory(previousXMLTXMDirectory);
 					FileCopy.copyFiles(txmDirectory, previousXMLTXMDirectory);
-
+					
 					// work
 					File noMatchsFile = new File(Toolbox.getTxmHomePath(), "results/nomatch.txt");
 					HashSet<String> noMatchsSet = new HashSet<String>();
@@ -226,33 +237,36 @@
 					for (File xmlFile : files) {
 						cpb.tick();
 						XMLLemmaProjection p = new XMLLemmaProjection(xmlFile, rules, formAsLemmaPosSet, sourceprioritylist, posproperty, targetproperty);
-						File tmpFile = new File(xmlFile.getParentFile(), "tmp_"+xmlFile.getName());
+						File tmpFile = new File(xmlFile.getParentFile(), "tmp_" + xmlFile.getName());
 						if (p.process(tmpFile)) {
 							if (xmlFile.delete() && tmpFile.renameTo(xmlFile)) {
 								// ok
-							} else {
-								System.out.println("Error during lemma projection: can't replace XML-TXM file: "+xmlFile);
+							}
+							else {
+								System.out.println("Error during lemma projection: can't replace XML-TXM file: " + xmlFile);
 								return Status.CANCEL_STATUS;
 							}
-						} else {
+						}
+						else {
 							System.out.println("Error during lemma projection. Aborting.");
 							return Status.CANCEL_STATUS;
 						}
 						if (p.getNoMatchValues().size() > 0) {
-							System.out.println("No matchs found with file "+xmlFile.getName()+": "+p.getNoMatchValues());
+							System.out.println("No matchs found with file " + xmlFile.getName() + ": " + p.getNoMatchValues());
 							noMatchsSet.addAll(p.getNoMatchValues());
 						}
 					}
-
+					
 					if (noMatchsSet.size() > 0) {
-						System.out.println("Missing lemma values report saved in: "+noMatchsFile);
+						System.out.println("Missing lemma values report saved in: " + noMatchsFile);
 						IOUtils.write(noMatchsFile, StringUtils.join(noMatchsSet, "\n"));
 					}
-
+					
 					cpb.done();
 					monitor.worked(50);
-
-				} catch (Exception e) {
+					
+				}
+				catch (Exception e) {
 					e.printStackTrace();
 					return Status.CANCEL_STATUS;
 				}
Index: tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/XMLLemmaProjection.java
===================================================================
--- tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/XMLLemmaProjection.java	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/XMLLemmaProjection.java	(revision 2402)
@@ -12,20 +12,23 @@
 import org.txm.importer.StaxIdentityParser;
 
 public class XMLLemmaProjection extends StaxIdentityParser {
-
+	
 	// form -> pos -> source -> lemma
 	protected LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>> rules = null;
+	
 	protected HashSet<String> formAsLemmaPosList = null;
+	
 	protected String lemmaProperty;
-
+	
 	protected HashSet<String> noMatchValues = new HashSet<String>();
+	
 	protected String posProperty;
+	
 	protected LinkedHashSet<String> lemmaSourcePriorityList;
-
-	public XMLLemmaProjection(File infile, LinkedHashMap<String, LinkedHashMap<String, 
-			LinkedHashMap<String, String>>> rules, 
+	
+	public XMLLemmaProjection(File infile, LinkedHashMap<String, LinkedHashMap<String, LinkedHashMap<String, String>>> rules,
 			HashSet<String> formAsLemmaPosList,
-			LinkedHashSet<String> lemmaSourcePriorityList, 
+			LinkedHashSet<String> lemmaSourcePriorityList,
 			String posProperty, String lemmaProperty) throws IOException, XMLStreamException {
 		super(infile);
 		this.rules = rules;
@@ -35,65 +38,72 @@
 		this.posProperty = posProperty;
 		
 		// the XML-TXM files word properties name starts wit # (they are references)
-		if (!this.lemmaProperty.startsWith("#")) this.lemmaProperty = "#"+this.lemmaProperty;
-		if (!this.posProperty.startsWith("#")) this.posProperty = "#"+this.posProperty;
+		if (!this.lemmaProperty.startsWith("#")) this.lemmaProperty = "#" + this.lemmaProperty;
+		if (!this.posProperty.startsWith("#")) this.posProperty = "#" + this.posProperty;
 	}
-
+	
 	boolean inW = false, inAna = false, inForm;
+	
 	LinkedHashMap<String, String> anaValues = new LinkedHashMap<String, String>();
+	
 	LinkedHashMap<String, String> anaResps = new LinkedHashMap<String, String>();
+	
 	String typeName = null;
+	
 	String respName = null;
+	
 	String formValue, typeValue = null;
-
+	
 	@Override
 	public void processStartElement() throws XMLStreamException, IOException {
 		if (!inW) super.processStartElement(); // don't write W content
-
+		
 		if (localname.equals("w")) {
 			inW = true;
 			anaValues.clear();
 			anaResps.clear();
-
-			//initialize the new type to a empty value in case there is transformation rule
+			
+			// initialize the new type to a empty value in case there is transformation rule
 			anaValues.put(lemmaProperty, "");
 			anaResps.put(lemmaProperty, "#txm_recode");
-		} else if (localname.equals("ana")) {
+		}
+		else if (localname.equals("ana")) {
 			inAna = true;
 			typeName = parser.getAttributeValue(null, "type");
 			respName = parser.getAttributeValue(null, "resp");
 			anaResps.put(typeName, respName);
-			//if (typeName != null) typeName = typeName.substring(1); // remove #
+			// if (typeName != null) typeName = typeName.substring(1); // remove #
 			typeValue = "";
-		} else if (localname.equals("form")) {
+		}
+		else if (localname.equals("form")) {
 			inForm = true;
 			formValue = "";
-		} 
+		}
 	}
-
+	
 	@Override
 	public void processCharacters() throws XMLStreamException {
-		if (inW && inAna) typeValue+=parser.getText();
-		else if (inW && inForm) formValue+=parser.getText();
+		if (inW && inAna) typeValue += parser.getText();
+		else if (inW && inForm) formValue += parser.getText();
 		else super.processCharacters();
 	}
-
+	
 	@Override
 	public void processEndElement() throws XMLStreamException {
 		if (localname.equals("w")) {
 			inW = false;
-
+			
 			// write W content
 			try {
 				// get the value to test
 				String posValue = anaValues.get(posProperty);
 				if (posValue == null) {
 					posValue = "<no_pos>";
-//					anaValues.put(posProperty, "<no_pos>");
-//					anaResps.put(posProperty, "txm_recode");
+					// anaValues.put(posProperty, "<no_pos>");
+					// anaResps.put(posProperty, "txm_recode");
 				}
 				String value = updateAnaValuesIfMatch(formValue.trim(), posValue.trim());
-				//System.out.println("form="+formValue+" + pos="+posValue+" -> "+value);
+				// System.out.println("form="+formValue+" + pos="+posValue+" -> "+value);
 				anaValues.put(lemmaProperty, value);
 				anaResps.put(lemmaProperty, "#txm_recode");
 				
@@ -101,7 +111,7 @@
 				writer.writeStartElement("txm:form");
 				writer.writeCharacters(formValue);
 				writer.writeEndElement();
-
+				
 				for (String k : anaValues.keySet()) {
 					writer.writeStartElement("txm:ana");
 					writer.writeAttribute("resp", anaResps.get(k));
@@ -109,38 +119,41 @@
 					writer.writeCharacters(anaValues.get(k));
 					writer.writeEndElement();
 				}
-			} catch (XMLStreamException e) {
+			}
+			catch (XMLStreamException e) {
 				e.printStackTrace();
 			}
-		} else if (localname.equals("ana")) {
+		}
+		else if (localname.equals("ana")) {
 			anaValues.put(typeName, typeValue);
 			inAna = false;
-		} else if (localname.equals("form")) {
+		}
+		else if (localname.equals("form")) {
 			inForm = false;
-		} 
-
+		}
+		
 		if (!inW) super.processEndElement(); // don't write W content now
 	}
-
+	
 	protected String updateAnaValuesIfMatch(String formValue, String posValue) {
 		if (posValue == null) return "";
 		
 		if (formAsLemmaPosList.contains(posValue)) return formValue;
 		
 		
-		if (formValue.equals("virge")) System.out.println("testing: "+formValue+" "+posValue);
-		if (formValue.equals("virge")) System.out.println("form connue? "+rules.containsKey(formValue));
+		if (formValue.equals("virge")) System.out.println("testing: " + formValue + " " + posValue);
+		if (formValue.equals("virge")) System.out.println("form connue? " + rules.containsKey(formValue));
 		if (rules.containsKey(formValue)) {
 			LinkedHashMap<String, LinkedHashMap<String, String>> posHash = rules.get(formValue);
-//			if (posHash.containsKey(posValue)) {
-//				LinkedHashMap<String, String> sourceHash = posHash.get(posValue);
-//				for (String source : lemmaSourcePriorityList) {
-//					if (sourceHash.containsKey(source)) {
-//						return sourceHash.get(source);
-//					}
-//				}
-//			}
-			if (formValue.equals("virge")) System.out.println(" tests"+posHash.keySet());
+			// if (posHash.containsKey(posValue)) {
+			// LinkedHashMap<String, String> sourceHash = posHash.get(posValue);
+			// for (String source : lemmaSourcePriorityList) {
+			// if (sourceHash.containsKey(source)) {
+			// return sourceHash.get(source);
+			// }
+			// }
+			// }
+			if (formValue.equals("virge")) System.out.println(" tests" + posHash.keySet());
 			for (String posRegexp : posHash.keySet()) {
 				
 				if (posValue.matches(posRegexp)) {
@@ -153,14 +166,14 @@
 		String formValueMin = formValue.toLowerCase();
 		if (rules.containsKey(formValueMin)) {
 			LinkedHashMap<String, LinkedHashMap<String, String>> posHash = rules.get(formValueMin);
-//			if (posHash.containsKey(posValue)) {
-//				LinkedHashMap<String, String> sourceHash = posHash.get(posValue);
-//				for (String source : lemmaSourcePriorityList) {
-//					if (sourceHash.containsKey(source)) {
-//						return sourceHash.get(source);
-//					}
-//				}
-//			}
+			// if (posHash.containsKey(posValue)) {
+			// LinkedHashMap<String, String> sourceHash = posHash.get(posValue);
+			// for (String source : lemmaSourcePriorityList) {
+			// if (sourceHash.containsKey(source)) {
+			// return sourceHash.get(source);
+			// }
+			// }
+			// }
 			
 			for (String posRegexp : posHash.keySet()) {
 				if (posValue.matches(posRegexp)) {
@@ -169,25 +182,25 @@
 			}
 		}
 		
-		noMatchValues.add(formValue+"|"+posValue);
-		return "!"+formValue;
+		noMatchValues.add(formValue + "|" + posValue);
+		return "!" + formValue;
 	}
-
+	
 	public HashSet<String> getNoMatchValues() {
 		return noMatchValues;
 	}
-
+	
 	public static void main(String args[]) {
 		File xmlFile = new File("/home/mdecorde/TXM/corpora/XTZTEXTUALPLANS/txm/XTZTEXTUALPLANS/test.xml");
 		File tmpFile = new File("/home/mdecorde/TXM/corpora/XTZTEXTUALPLANS/txm/XTZTEXTUALPLANS/test-o.xml");
 		String posProperty = "type";
 		String newType = "lemma";
 		LinkedHashMap<Pattern[], String> rules = new LinkedHashMap<Pattern[], String>();
-		rules.put(new Pattern[]{Pattern.compile("w"), Pattern.compile("w")}, "WORD");
-		rules.put(new Pattern[]{Pattern.compile("x.+"), Pattern.compile("w")}, "XWORD");
-		rules.put(new Pattern[]{Pattern.compile("y"), Pattern.compile("w")}, "YWORD");
-		rules.put(new Pattern[]{Pattern.compile("y.*"), Pattern.compile("w")}, "YMULTIWORD");
-		//XMLPropertyProjection converter = new XMLPropertyProjection(xmlFile, rules, posProperty, newType);
-		//System.out.println(converter.process(tmpFile));
+		rules.put(new Pattern[] { Pattern.compile("w"), Pattern.compile("w") }, "WORD");
+		rules.put(new Pattern[] { Pattern.compile("x.+"), Pattern.compile("w") }, "XWORD");
+		rules.put(new Pattern[] { Pattern.compile("y"), Pattern.compile("w") }, "YWORD");
+		rules.put(new Pattern[] { Pattern.compile("y.*"), Pattern.compile("w") }, "YMULTIWORD");
+		// XMLPropertyProjection converter = new XMLPropertyProjection(xmlFile, rules, posProperty, newType);
+		// System.out.println(converter.process(tmpFile));
 	}
 }
Index: tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/RemoveProperties.java
===================================================================
--- tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/RemoveProperties.java	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/RemoveProperties.java	(revision 2402)
@@ -37,27 +37,28 @@
 
 /**
  * Our sample handler extends AbstractHandler, an IHandler base class.
+ * 
  * @see org.eclipse.core.commands.IHandler
  * @see org.eclipse.core.commands.AbstractHandler
  */
 public class RemoveProperties extends AbstractHandler {
-
-	@Option(name="propertiesList", usage="The properties to remove", widget="String", required=true, def="plemma")
+	
+	@Option(name = "propertiesList", usage = "The properties to remove", widget = "String", required = true, def = "plemma")
 	public String propertiesList = null;
-
+	
 	/**
 	 * 
 	 */
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		CQPCorpus corpus = null;
 		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
-
+		
 		ISelection isel = window.getActivePage().getSelection();
 		if (isel instanceof IStructuredSelection) {
-			IStructuredSelection sel = (IStructuredSelection)isel;
+			IStructuredSelection sel = (IStructuredSelection) isel;
 			Object first = sel.getFirstElement();
 			if (first instanceof CQPCorpus) {
-				corpus = (CQPCorpus)first;
+				corpus = (CQPCorpus) first;
 				if (ParametersDialog.open(this)) {
 					LinkedHashSet<String> propertiesSet = new LinkedHashSet<String>();
 					propertiesSet.addAll(Arrays.asList(propertiesList.split(",")));
@@ -67,35 +68,37 @@
 				}
 			}
 		}
-
+		
 		System.out.println("Wrong selection.");
 		return null;
 	}
-
+	
 	public static void apply(final CQPCorpus corpus, final HashSet<String> propertiesSet) {
 		final MainCorpus mainCorpus = corpus.getMainCorpus();
 		final File corpusBinaryDirectory = mainCorpus.getProjectDirectory();
-		final File txmDirectory = new File(corpusBinaryDirectory, "txm/"+mainCorpus.getID());
-
+		final File txmDirectory = new File(corpusBinaryDirectory, "txm/" + mainCorpus.getID());
+		
 		if (!txmDirectory.exists()) {
-			System.out.println("Can't process a corpus with no XML-TXM files directory: "+txmDirectory);
+			System.out.println("Can't process a corpus with no XML-TXM files directory: " + txmDirectory);
 			return;
 		}
-
+		
 		final File[] files = txmDirectory.listFiles(new FileFilter() {
+			
 			@Override
 			public boolean accept(File file) {
 				return file.isFile() && file.canWrite() && file.getName().endsWith(".xml");
 			}
 		});
-
+		
 		if (files == null || files.length == 0) {
-			System.out.println("Can't process a corpus with no XML-TXM files in "+txmDirectory);
+			System.out.println("Can't process a corpus with no XML-TXM files in " + txmDirectory);
 			return;
 		}
-
-		System.out.println("Removing "+propertiesSet+" to "+mainCorpus+" XML-TXM files...");
-		JobHandler job = new JobHandler("Removing "+propertiesSet+" to "+mainCorpus+" XML-TXM files.") {
+		
+		System.out.println("Removing " + propertiesSet + " to " + mainCorpus + " XML-TXM files...");
+		JobHandler job = new JobHandler("Removing " + propertiesSet + " to " + mainCorpus + " XML-TXM files.") {
+			
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				this.runInit(monitor);
@@ -103,10 +106,10 @@
 				HashSet<String> no_change_rules = new HashSet<String>();
 				try {
 					// save previous version of XML-TXM files
-					File previousXMLTXMDirectory = new File(txmDirectory.getAbsolutePath()+"_previous");
+					File previousXMLTXMDirectory = new File(txmDirectory.getAbsolutePath() + "_previous");
 					DeleteDir.deleteDirectory(previousXMLTXMDirectory);
 					FileCopy.copyFiles(txmDirectory, previousXMLTXMDirectory);
-
+					
 					// work
 					File noMatchsFile = new File(Toolbox.getTxmHomePath(), "results/nomatch.txt");
 					HashSet<String> noMatchsSet = new HashSet<String>();
@@ -114,24 +117,27 @@
 					for (File xmlFile : files) {
 						cpb.tick();
 						XMLRemoveProperties p = new XMLRemoveProperties(xmlFile, propertiesSet);
-						File tmpFile = new File(xmlFile.getParentFile(), "tmp_"+xmlFile.getName());
+						File tmpFile = new File(xmlFile.getParentFile(), "tmp_" + xmlFile.getName());
 						if (p.process(tmpFile)) {
 							if (xmlFile.delete() && tmpFile.renameTo(xmlFile)) {
 								// ok
-							} else {
-								System.out.println("Error during properties removal: can't replace XML-TXM file: "+xmlFile);
+							}
+							else {
+								System.out.println("Error during properties removal: can't replace XML-TXM file: " + xmlFile);
 								return Status.CANCEL_STATUS;
 							}
-						} else {
+						}
+						else {
 							System.out.println("Error during properties removal. Aborting.");
 							return Status.CANCEL_STATUS;
 						}
 					}
-
+					
 					cpb.done();
 					monitor.worked(50);
-
-				} catch (Exception e) {
+					
+				}
+				catch (Exception e) {
 					e.printStackTrace();
 					return Status.CANCEL_STATUS;
 				}
Index: tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/XMLRemoveProperties.java
===================================================================
--- tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/XMLRemoveProperties.java	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/XMLRemoveProperties.java	(revision 2402)
@@ -17,35 +17,38 @@
  *
  */
 public class XMLRemoveProperties extends StaxIdentityParser {
-
+	
 	// form -> pos -> source -> lemma
 	protected HashSet<String> propertiesSet = null;
-
+	
 	/**
 	 * 
 	 * @param infile the XML-TXM file to process
 	 * @param propertiesSet the set of ana@type attributes to remove
-	 * @throws XMLStreamException 
-	 * @throws IOException 
+	 * @throws XMLStreamException
+	 * @throws IOException
 	 */
 	public XMLRemoveProperties(File infile, HashSet<String> propertiesSet) throws IOException, XMLStreamException {
 		super(infile);
 		this.propertiesSet = new HashSet<String>();
 		for (String property : propertiesSet) {
 			// the XML-TXM files word properties name starts with # (they are references)
-			if (!property.startsWith("#")) property = "#"+property;
+			if (!property.startsWith("#")) property = "#" + property;
 			this.propertiesSet.add(property);
 		}
 	}
-
+	
 	boolean inW = false, inAna = false;
+	
 	String typeName = null;
+	
 	@Override
 	public void processStartElement() throws XMLStreamException, IOException {
 		
 		if (localname.equals("w")) {
 			inW = true;
-		} else if (inW && localname.equals("ana")) {
+		}
+		else if (inW && localname.equals("ana")) {
 			inAna = true;
 			typeName = parser.getAttributeValue(null, "type");
 			if (propertiesSet.contains(typeName)) return; // don't write this element start tag
@@ -53,38 +56,44 @@
 		
 		super.processStartElement();
 	}
-
+	
 	@Override
 	public void processCharacters() throws XMLStreamException {
 		
-		if (inW && typeName != null && propertiesSet.contains(typeName)) {return;} // don't write the element content
+		if (inW && typeName != null && propertiesSet.contains(typeName)) {
+			return;
+		} // don't write the element content
 		super.processCharacters();
 	}
-
+	
 	@Override
 	public void processEndElement() throws XMLStreamException {
 		if (localname.equals("w")) {
 			inW = false;
-		} else if (inW && localname.equals("ana")) {
+		}
+		else if (inW && localname.equals("ana")) {
 			inAna = false;
-			if (propertiesSet.contains(typeName)) {typeName = null; return;} // don't write the element end tag
+			if (propertiesSet.contains(typeName)) {
+				typeName = null;
+				return;
+			} // don't write the element end tag
 			typeName = null;
 		}
-
+		
 		super.processEndElement(); // don't write W content now
 	}
-
+	
 	public static void main(String args[]) {
 		File xmlFile = new File("/home/mdecorde/TXM/corpora/XTZTEXTUALPLANS/txm/XTZTEXTUALPLANS/test.xml");
 		File tmpFile = new File("/home/mdecorde/TXM/corpora/XTZTEXTUALPLANS/txm/XTZTEXTUALPLANS/test-o.xml");
 		String posProperty = "type";
 		String newType = "lemma";
 		LinkedHashMap<Pattern[], String> rules = new LinkedHashMap<Pattern[], String>();
-		rules.put(new Pattern[]{Pattern.compile("w"), Pattern.compile("w")}, "WORD");
-		rules.put(new Pattern[]{Pattern.compile("x.+"), Pattern.compile("w")}, "XWORD");
-		rules.put(new Pattern[]{Pattern.compile("y"), Pattern.compile("w")}, "YWORD");
-		rules.put(new Pattern[]{Pattern.compile("y.*"), Pattern.compile("w")}, "YMULTIWORD");
-		//XMLPropertyProjection converter = new XMLPropertyProjection(xmlFile, rules, posProperty, newType);
-		//System.out.println(converter.process(tmpFile));
+		rules.put(new Pattern[] { Pattern.compile("w"), Pattern.compile("w") }, "WORD");
+		rules.put(new Pattern[] { Pattern.compile("x.+"), Pattern.compile("w") }, "XWORD");
+		rules.put(new Pattern[] { Pattern.compile("y"), Pattern.compile("w") }, "YWORD");
+		rules.put(new Pattern[] { Pattern.compile("y.*"), Pattern.compile("w") }, "YMULTIWORD");
+		// XMLPropertyProjection converter = new XMLPropertyProjection(xmlFile, rules, posProperty, newType);
+		// System.out.println(converter.process(tmpFile));
 	}
 }
Index: tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/Train.java
===================================================================
--- tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/Train.java	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/handlers/Train.java	(revision 2402)
@@ -49,58 +49,66 @@
 
 /**
  * Our sample handler extends AbstractHandler, an IHandler base class.
+ * 
  * @see org.eclipse.core.commands.IHandler
  * @see org.eclipse.core.commands.AbstractHandler
  */
 public class Train extends AbstractHandler {
-
+	
 	public CQPCorpus corpus = null;
-
-	@Option(name="model", usage="The model file to create", widget="CreateFile", required=true, def="fr.par")
+	
+	@Option(name = "model", usage = "The model file to create", widget = "CreateFile", required = true, def = "fr.par")
 	public File model = null;
-	@Option(name="posProperty", usage="The pos property", widget="String", required=true, def="frpos")
+	
+	@Option(name = "posProperty", usage = "The pos property", widget = "String", required = true, def = "frpos")
 	public String posProperty = null;
-	@Option(name="sentenceTag", usage="The pos property", widget="String", required=true, def="SENT")
+	
+	@Option(name = "sentenceTag", usage = "The pos property", widget = "String", required = true, def = "SENT")
 	public String sentenceTag = null;
-	@Option(name="lemmaProperty", usage="The lemma property", widget="String", required=true, def="frlemma")
+	
+	@Option(name = "lemmaProperty", usage = "The lemma property", widget = "String", required = true, def = "frlemma")
 	public String lemmaProperty = null;
-	@Option(name="lexique", usage="Lexicon file", widget="File", required=true, def="lexicon.txt")
+	
+	@Option(name = "lexique", usage = "Lexicon file", widget = "File", required = true, def = "lexicon.txt")
 	public File lexique = null;
-	@Option(name="openclassfile", usage="openclassfile file", widget="File", required=true, def="")
+	
+	@Option(name = "openclassfile", usage = "openclassfile file", widget = "File", required = true, def = "")
 	public File openclassfile = null;
-	@Option(name="options", usage="TreeTagger supplementary options", widget="String", required=true, def="")
+	
+	@Option(name = "options", usage = "TreeTagger supplementary options", widget = "String", required = true, def = "")
 	public String options = null;
-
+	
 	/**
 	 * 
 	 */
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-
-
+		
+		
 		IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
-
+		
 		ISelection isel = window.getActivePage().getSelection();
 		if (isel instanceof IStructuredSelection) {
-			IStructuredSelection sel = (IStructuredSelection)isel;
+			IStructuredSelection sel = (IStructuredSelection) isel;
 			Object first = sel.getFirstElement();
 			if (first instanceof CQPCorpus) {
-				corpus = (CQPCorpus)first;
+				corpus = (CQPCorpus) first;
 				if (ParametersDialog.open(this)) {
-
-					train(corpus, model, lexique, openclassfile, new String[]{posProperty, lemmaProperty}, sentenceTag, options.split("  "));
-
+					
+					train(corpus, model, lexique, openclassfile, new String[] { posProperty, lemmaProperty }, sentenceTag, options.split("  "));
+					
 					return corpus;
 				}
 			}
 		}
-
+		
 		System.out.println("Wrong selection.");
 		return null;
 	}
-
+	
 	public static void train(final CQPCorpus corpus, final File model, final File lexique, final File openclassfile, final String[] properties, final String sentenceTag, final String[] options) {
-
-		JobHandler job = new JobHandler("Applying TreeTagger to "+corpus+" corpus.") {
+		
+		JobHandler job = new JobHandler("Applying TreeTagger to " + corpus + " corpus.") {
+			
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				this.runInit(monitor);
@@ -108,44 +116,44 @@
 					File lexique2 = lexique;
 					MainCorpus mainCorpus = corpus.getMainCorpus();
 					File corpusBinaryDirectory = mainCorpus.getProjectDirectory();
-
-					System.out.println("TRAIN : "+corpus+" with "+lexique2+" to create "+model+ " with properties "+Arrays.toString(properties));
-
+					
+					System.out.println("TRAIN : " + corpus + " with " + lexique2 + " to create " + model + " with properties " + Arrays.toString(properties));
+					
 					if (properties == null || properties.length != 2) {
-						System.out.println("Error can't continue with selected word properties: "+Arrays.toString(properties));
+						System.out.println("Error can't continue with selected word properties: " + Arrays.toString(properties));
 						return Status.CANCEL_STATUS;
 					}
-
+					
 					for (String p : properties) {
 						Property prop = corpus.getProperty(p);
 						if (prop == null) {
-							System.out.println("Missing property in corpus: "+p);
+							System.out.println("Missing property in corpus: " + p);
 							return Status.CANCEL_STATUS;
 						}
 					}
-
+					
 					Property pos = corpus.getProperty(properties[0]);
 					Property lemma = corpus.getProperty(properties[1]);
-
+					
 					// Prepare temporary directory
 					File treetaggerSrcDirectory = new File(mainCorpus.getProjectDirectory(), "treetagger");
 					DeleteDir.deleteDirectory(treetaggerSrcDirectory);
 					treetaggerSrcDirectory.mkdirs();
-
+					
 					HashMap<String, HashSet<String>> simplified_lexicon = null;
 					HashMap<String, HashSet<String>> simplified_lexicon_errors = null;
 					int error_counter = 0;
 					// Create Lexicon file from an Index
 					if (lexique2 == null || !lexique2.exists()) {
-						System.out.println("Warning: no lexicon file or given lexicon file does not exist ("+lexique2+"). Using corpus Index...");
-
+						System.out.println("Warning: no lexicon file or given lexicon file does not exist (" + lexique2 + "). Using corpus Index...");
+						
 						File lexiconfile = new File(treetaggerSrcDirectory, "lexicon.txt");
 						List<WordProperty> corpusProperties = new ArrayList<WordProperty>();
 						corpusProperties.add(mainCorpus.getProperty("word"));
 						for (String p : properties) {
 							WordProperty prop = mainCorpus.getProperty(p);
 							if (prop == null) {
-								System.out.println("Error, a property is missing: "+p);
+								System.out.println("Error, a property is missing: " + p);
 								return Status.CANCEL_STATUS;
 							}
 							corpusProperties.add(prop);
@@ -162,7 +170,7 @@
 							if (!lex.containsKey(form)) {
 								ArrayList<String> pairs = new ArrayList<String>();
 								HashSet<String> posValues = new HashSet<String>();
-
+								
 								allPosValues.put(form, posValues);
 								lex.put(form, pairs);
 							}
@@ -171,30 +179,32 @@
 							String posValue = values.get(1).get(0);
 							String lemmaValue = values.get(2).get(0);
 							if (posValues.contains(posValue)) {
-
-							} else {
+								
+							}
+							else {
 								posValues.add(posValue);
 								pairs.add(posValue);
 								pairs.add(lemmaValue);
 							}
 						}
-
+						
 						BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(lexiconfile), "UTF-8"));
 						for (String form : lex.keySet()) {
-
+							
 							writer.write(form);
 							boolean tab = true;
 							for (String v : lex.get(form)) {
-								if (tab) writer.write("\t"+v);
-								else writer.write(" "+v);
-
+								if (tab) writer.write("\t" + v);
+								else writer.write(" " + v);
+								
 								tab = !tab;
 							}
 							writer.write("\n");
 						}
 						writer.close();
 						lexique2 = lexiconfile;
-					} else { // diagnose lexicon content
+					}
+					else { // diagnose lexicon content
 						simplified_lexicon = new HashMap<String, HashSet<String>>();
 						simplified_lexicon_errors = new HashMap<String, HashSet<String>>();
 						BufferedReader reader = IOUtils.getReader(lexique2);
@@ -211,48 +221,50 @@
 						}
 						reader.close();
 					}
-
-
+					
+					
 					// create TT SRC file from CWB indexes
-
-					File ttSrcFile = new File(treetaggerSrcDirectory, mainCorpus.getID()+".tt");
-					System.out.println("TT SRC file: "+ttSrcFile.getAbsolutePath());
+					
+					File ttSrcFile = new File(treetaggerSrcDirectory, mainCorpus.getID() + ".tt");
+					System.out.println("TT SRC file: " + ttSrcFile.getAbsolutePath());
 					BufferedOutputStream fos = new BufferedOutputStream(new FileOutputStream(ttSrcFile));
 					PrintStream ps = new PrintStream(fos);
 					LinkedHashSet<Integer> positions = new LinkedHashSet<Integer>();
 					Property word = corpus.getProperty("word");
 					AbstractCqiClient CQI = CQPSearchEngine.getCqiClient();
 					for (Match m : corpus.getMatches()) {
-						for (int i = m.getStart() ; i <= m.getEnd() ; i++) { // end match must be included
+						for (int i = m.getStart(); i <= m.getEnd(); i++) { // end match must be included
 							positions.add(i);
-
+							
 							if (positions.size() >= 1000) { // avoid too big array
 								int[] positions_array = new int[positions.size()];
 								int ip = 0;
-								for (int p : positions) positions_array[ip++] = p;
+								for (int p : positions)
+									positions_array[ip++] = p;
 								String[] words = CQI.cpos2Str(word.getQualifiedName(), positions_array);
 								String[] values = CQI.cpos2Str(pos.getQualifiedName(), positions_array);
-
-								for (int iW = 0 ; iW < words.length ; iW++) {
+								
+								for (int iW = 0; iW < words.length; iW++) {
 									String w = words[iW];
 									if (w != null) {
-										String s = w+"\t"+values[iW];
+										String s = w + "\t" + values[iW];
 										ps.println(s);
-
+										
 										if (simplified_lexicon != null) { // check given lexicon
 											if (simplified_lexicon.containsKey(w)) {
 												if (!simplified_lexicon.get(w).contains(values[iW])) {
-													//System.out.println("Lexicon error: cannot find pos="+values[iW]+" for form="+w);
+													// System.out.println("Lexicon error: cannot find pos="+values[iW]+" for form="+w);
 													if (!simplified_lexicon_errors.containsKey(w)) simplified_lexicon_errors.put(w, new HashSet<String>());
 													HashSet<String> error_values = simplified_lexicon_errors.get(w);
 													error_values.add(values[iW]);
 													error_counter++;
 												}
-											} else {
-												//System.out.println("Lexicon error: cannot find form="+w);
+											}
+											else {
+												// System.out.println("Lexicon error: cannot find form="+w);
 												if (!simplified_lexicon_errors.containsKey(w)) simplified_lexicon_errors.put(w, new HashSet<String>());
 												HashSet<String> error_values = simplified_lexicon_errors.get(w);
-												error_values.add("#"+values[iW]);
+												error_values.add("#" + values[iW]);
 												error_counter++;
 											}
 										}
@@ -265,146 +277,150 @@
 					if (positions.size() > 0) { // write last words
 						int[] positions_array = new int[positions.size()];
 						int ip = 0;
-						for (int p : positions) positions_array[ip++] = p;
+						for (int p : positions)
+							positions_array[ip++] = p;
 						String[] words = CQI.cpos2Str(word.getQualifiedName(), positions_array);
 						String[] values = CQI.cpos2Str(pos.getQualifiedName(), positions_array);
-
-						for (int iW = 0 ; iW < words.length ; iW++) {
+						
+						for (int iW = 0; iW < words.length; iW++) {
 							String w = words[iW];
 							if (w != null) {
-								String s = w+"\t"+values[iW];
+								String s = w + "\t" + values[iW];
 								ps.println(s);
 							}
 						}
 						positions.clear();
 					}
 					ps.close();
-
+					
 					if (simplified_lexicon_errors != null && simplified_lexicon_errors.size() > 0) {
 						File error_file = new File(treetaggerSrcDirectory, "errors.txt");
 						PrintWriter errorwriter = IOUtils.getWriter(error_file);
 						int c = 0;
-						System.out.println("Warning, lexicon errors ("+error_counter+") found with words:");
+						System.out.println("Warning, lexicon errors (" + error_counter + ") found with words:");
 						for (String w : simplified_lexicon_errors.keySet()) {
-							errorwriter.println(w+"="+simplified_lexicon_errors.get(w));
+							errorwriter.println(w + "=" + simplified_lexicon_errors.get(w));
 							if (c < 10) {
-								System.out.println(w+"="+simplified_lexicon_errors.get(w));
+								System.out.println(w + "=" + simplified_lexicon_errors.get(w));
 								c++;
-								if (c == 10) System.out.println("... errors display is trucated, see "+error_file.getAbsolutePath());
+								if (c == 10) System.out.println("... errors display is trucated, see " + error_file.getAbsolutePath());
 							}
 						}
 						errorwriter.close();
-						//System.out.println("Cannot apply train-treetagger if lexicon is missing words and pos.");
-						//return Status.CANCEL_STATUS;
-						File lexique3 = new File(lexique2.getParentFile(), lexique2.getName()+".fix");
+						// System.out.println("Cannot apply train-treetagger if lexicon is missing words and pos.");
+						// return Status.CANCEL_STATUS;
+						File lexique3 = new File(lexique2.getParentFile(), lexique2.getName() + ".fix");
 						BufferedReader reader = IOUtils.getReader(lexique2);
 						PrintWriter writer = IOUtils.getWriter(lexique3);
 						String line = reader.readLine();
 						while (line != null) {
 							String w = line.split("\t", 2)[0];
-
+							
 							if (simplified_lexicon_errors.containsKey(w)) {
 								for (String p : simplified_lexicon_errors.get(w)) {
 									if (!p.startsWith("#"))
-										line += ("\t"+p+" <no_lemma>"); // append missing value
+										line += ("\t" + p + " <no_lemma>"); // append missing value
 								}
 								simplified_lexicon_errors.remove(w);
 							}
-
+							
 							writer.println(line);
 							line = reader.readLine();
 						}
-
+						
 						// write missing words
 						for (String w2 : simplified_lexicon_errors.keySet()) {
 							writer.print(w2);
 							for (String p : simplified_lexicon_errors.get(w2)) {
-								writer.print("\t"+p+" <no_lemma>");
+								writer.print("\t" + p + " <no_lemma>");
 							}
 							writer.println("");
 						}
-
+						
 						reader.close();
 						writer.close();
-						System.out.println("Adding words to a temporary lexicon: "+lexique3);
+						System.out.println("Adding words to a temporary lexicon: " + lexique3);
 						lexique2 = lexique3;
 					}
-
+					
 					// Create open class file : contains all pos values
 					File tmpopenclassfile = openclassfile;
-					if (tmpopenclassfile == null || tmpopenclassfile.getName().length() ==0) {
+					if (tmpopenclassfile == null || tmpopenclassfile.getName().length() == 0) {
 						tmpopenclassfile = new File(treetaggerSrcDirectory, "openclasses.txt");
 						PrintWriter openClassFileWriter = IOUtils.getWriter(openclassfile);
-
-						//					Lexicon poslexicon = corpus.getLexicon(pos);
-						//					String[] posValues = poslexicon.getForms();
-						//					for (int iV = 0 ; iV < posValues.length ; iV++) {
-						//						if (iV == 0) openClassFileWriter.print(posValues[iV]);
-						//						else openClassFileWriter.print(" "+posValues[iV]);
-						//					}
+						
+						// Lexicon poslexicon = corpus.getLexicon(pos);
+						// String[] posValues = poslexicon.getForms();
+						// for (int iV = 0 ; iV < posValues.length ; iV++) {
+						// if (iV == 0) openClassFileWriter.print(posValues[iV]);
+						// else openClassFileWriter.print(" "+posValues[iV]);
+						// }
 						openClassFileWriter.close();
 					}
-
+					
 					// Call treetagger-train
 					if (ttSrcFile.exists() && lexique2.exists() && tmpopenclassfile.exists()) {
 						System.out.println("Running treetagger-train...");
 						String treetaggerBinDirectory = new File(TreeTaggerPreferences.getInstance().getString(TreeTaggerPreferences.INSTALL_PATH), "bin").getAbsolutePath();
 						if (!treetaggerBinDirectory.endsWith("/")) treetaggerBinDirectory += "/";
-
+						
 						TreeTagger tt = new TreeTagger(treetaggerBinDirectory, options);
 						tt.settoken();
-
-						//tt.setlemma();
+						
+						// tt.setlemma();
 						tt.setsgml();
 						tt.setst(sentenceTag);
-						//tt.setproto();
+						// tt.setproto();
 						tt.setutf8();
 						int cl = TreeTaggerPreferences.getInstance().getInt(TreeTaggerPreferences.OPTIONS_CL);
 						if (cl > 0) {
 							tt.setcl(cl);
 						}
-
+						
 						float dtg = TreeTaggerPreferences.getInstance().getFloat(TreeTaggerPreferences.OPTIONS_DTG);
 						if (dtg > 0) {
 							tt.setdtg(dtg);
 						}
-
+						
 						float sw = TreeTaggerPreferences.getInstance().getFloat(TreeTaggerPreferences.OPTIONS_SW);
 						if (sw > 0) {
 							tt.setsw(sw);
 						}
-
+						
 						float atg = TreeTaggerPreferences.getInstance().getFloat(TreeTaggerPreferences.OPTIONS_ATG);
 						if (atg > 0) {
 							tt.setatg(atg);
 						}
-
+						
 						float ecw = TreeTaggerPreferences.getInstance().getFloat(TreeTaggerPreferences.OPTIONS_ECW);
 						if (ecw > 0) {
 							tt.setecw(ecw);
 						}
-
+						
 						float lt = TreeTaggerPreferences.getInstance().getFloat(TreeTaggerPreferences.OPTIONS_LT);
 						if (lt > 0) {
 							tt.setlt(lt);
 						}
-
+						
 						if (TreeTaggerPreferences.getInstance().getBoolean(TreeTaggerPreferences.OPTIONS_DEBUG)) {
 							tt.debug(true);
-						} else {
+						}
+						else {
 							tt.setquiet();
 						}
-
+						
 						tt.traintreetagger(lexique2.getAbsolutePath(), tmpopenclassfile.getAbsolutePath(), ttSrcFile.getAbsolutePath(), model.getAbsolutePath());
-
-						System.out.println("Done: "+model.getAbsolutePath());
-					} else {
+						
+						System.out.println("Done: " + model.getAbsolutePath());
+					}
+					else {
 						System.out.println("Aborting.");
 					}
-
+					
 					return Status.OK_STATUS;
-				} catch (Exception e) {
-					System.out.println("Error while training TT: "+e);
+				}
+				catch (Exception e) {
+					System.out.println("Error while training TT: " + e);
 					Log.printStackTrace(e);
 				}
 				return Status.CANCEL_STATUS;
Index: tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/preferences/TreeTaggerPreferencePage.java
===================================================================
--- tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/preferences/TreeTaggerPreferencePage.java	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/src/org/txm/treetagger/rcp/preferences/TreeTaggerPreferencePage.java	(revision 2402)
@@ -51,54 +51,54 @@
  *
  */
 public class TreeTaggerPreferencePage extends RCPPreferencesPage {
-
+	
 	@Override
 	public void createFieldEditors() {
-
+		
 		this.addField(new DirectoryFieldEditor(TreeTaggerPreferences.INSTALL_PATH, TreeTaggerUIMessages.pathToInstallDirectory, this.getFieldEditorParent()));
 		this.addField(new DirectoryFieldEditor(TreeTaggerPreferences.MODELS_PATH, TreeTaggerUIMessages.pathToModelsDirectory, this.getFieldEditorParent()));
-
-		Label l = new Label(this.getFieldEditorParent(), SWT.SEPARATOR|SWT.HORIZONTAL);
-		l.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 3,1));
 		
+		Label l = new Label(this.getFieldEditorParent(), SWT.SEPARATOR | SWT.HORIZONTAL);
+		l.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 3, 1));
+		
 		this.addField(new BooleanFieldEditor(TreeTaggerPreferences.OPTIONS_DEBUG, "Activate processes debug messages", this.getFieldEditorParent()));
-
+		
 		// TREETAGGER TAGGER OPTIONS
 		Group runOptions = new Group(this.getFieldEditorParent(), SWT.BORDER);
 		runOptions.setText("TreeTagger process options");
 		GridData gdata = new GridData(GridData.FILL, GridData.FILL, true, false, 3, 1);
 		runOptions.setLayoutData(gdata);
 		runOptions.setLayout(new GridLayout(3, false));
-
+		
 		this.addField(new BooleanFieldEditor(TreeTaggerPreferences.OPTIONS_UNKNOWN, "Print the token rather than <unknown> for unknown lemma", runOptions));
 		this.addField(new BooleanFieldEditor(TreeTaggerPreferences.OPTIONS_CAPHEURISTIC, "Look up unknown capitalized words in the list of lower-case words", runOptions));
 		this.addField(new BooleanFieldEditor(TreeTaggerPreferences.OPTIONS_HYPHENHEURISTIC, "Turn on the heuristics fur guessing the parts of speech of unknown hyphenated words", runOptions));
 		this.addField(new BooleanFieldEditor(TreeTaggerPreferences.OPTIONS_PROB, "Print tag probabilities", runOptions));
 		this.addField(new FileFieldEditor(TreeTaggerPreferences.OPTIONS_LEX, "Read auxiliary lexicon entries from a file", runOptions));
 		this.addField(new FileFieldEditor(TreeTaggerPreferences.OPTIONS_WC, "Read a word-class automaton from a file", runOptions));
-
-
+		
+		
 		runOptions.setLayout(new GridLayout(3, false));
-
+		
 		// TREETAGGER TRAINING OPTIONS
 		Group runTrainOptions = new Group(this.getFieldEditorParent(), SWT.BORDER);
 		runTrainOptions.setText("TreeTagger Training process options");
 		GridData gdata2 = new GridData(GridData.FILL, GridData.FILL, true, false, 3, 1);
 		runTrainOptions.setLayoutData(gdata2);
 		runTrainOptions.setLayout(new GridLayout(3, false));
-
+		
 		this.addField(new IntegerFieldEditor(TreeTaggerPreferences.OPTIONS_CL, "consider <n> preceding tags for tagging", runTrainOptions));
 		this.addField(new DoubleFieldEditor(TreeTaggerPreferences.OPTIONS_DTG, "use <f> as threshold for decision tree gain", runTrainOptions));
 		this.addField(new DoubleFieldEditor(TreeTaggerPreferences.OPTIONS_SW, "use <f> as smoothing weight", runTrainOptions));
 		this.addField(new DoubleFieldEditor(TreeTaggerPreferences.OPTIONS_ATG, "use <f> as threshold for affix tree gain", runTrainOptions));
 		this.addField(new DoubleFieldEditor(TreeTaggerPreferences.OPTIONS_ECW, "use <f> as equivalence class weight", runTrainOptions));
 		this.addField(new DoubleFieldEditor(TreeTaggerPreferences.OPTIONS_LT, "use <f> as threshold probability for lexical entries (default 0.001)", runTrainOptions));
-
+		
 		runTrainOptions.setLayout(new GridLayout(3, false));
 	}
-
+	
 	@Override
 	public void init(IWorkbench workbench) {
 		this.setPreferenceStore(new TXMPreferenceStore(TreeTaggerPreferences.getInstance().getPreferencesNodeQualifier()));
 	}
-}
\ No newline at end of file
+}
Index: tmp/org.txm.treetagger.rcp/.classpath
===================================================================
--- tmp/org.txm.treetagger.rcp/.classpath	(revision 2401)
+++ tmp/org.txm.treetagger.rcp/.classpath	(revision 2402)
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.lexicaltable.core/.classpath
===================================================================
--- tmp/org.txm.lexicaltable.core/.classpath	(revision 2401)
+++ tmp/org.txm.lexicaltable.core/.classpath	(revision 2402)
@@ -1,11 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	  <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
-	  <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins">
-		    <accessrules>
-			      <accessrule kind="accessible" pattern="**"/>
-		    </accessrules>
-	  </classpathentry>
-	  <classpathentry kind="src" path="src"/>
-	  <classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con"
+		path="org.eclipse.jdt.launching.JRE_CONTAINER" />
+	<classpathentry kind="con"
+		path="org.eclipse.pde.core.requiredPlugins">
+		<accessrules>
+			<accessrule kind="accessible" pattern="**" />
+		</accessrules>
+	</classpathentry>
+	<classpathentry kind="src" path="src" />
+	<classpathentry kind="output" path="bin" />
 </classpath>
\ No newline at end of file
Index: tmp/org.txm.lexicaltable.core/src/org/txm/functions/intertextualdistance/package.html
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/functions/intertextualdistance/package.html	(revision 2401)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/functions/intertextualdistance/package.html	(revision 2402)
@@ -1,5 +1,5 @@
 <html>
 <body>
-<p>Prototype of Intertextual distance</p>
+	<p>Prototype of Intertextual distance</p>
 </body>
 </html>
\ No newline at end of file
Index: tmp/org.txm.lexicaltable.core/src/org/txm/functions/intertextualdistance/InterTextDistance.java
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/functions/intertextualdistance/InterTextDistance.java	(revision 2401)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/functions/intertextualdistance/InterTextDistance.java	(revision 2402)
@@ -13,51 +13,52 @@
 import org.txm.statsengine.r.core.RWorkspace;
 
 public class InterTextDistance {
-
+	
 	ILexicalTable table;
+	
 	String pMethod = "euclidian"; //$NON-NLS-1$
-
+	
 	public InterTextDistance(ILexicalTable table) {
 		this.table = table;
 	}
-
-
+	
+	
 	public boolean _compute() {
 		try {
-			//		Corpus corpus = CorpusManager.getCorpusManager().getCorpus("VOEUX");
-			//		String method = "euclidean"; // "euclidean"’, ‘"maximum"’, ‘"manhattan"’, ‘"canberra"’, ‘"binary"’ or ‘"minkowski"’
+			// Corpus corpus = CorpusManager.getCorpusManager().getCorpus("VOEUX");
+			// String method = "euclidean"; // "euclidean"’, ‘"maximum"’, ‘"manhattan"’, ‘"canberra"’, ‘"binary"’ or ‘"minkowski"’
 			//
-			//		StructuralUnit text_su = corpus.getStructuralUnit("text");
-			//		StructuralUnitProperty text_prop = text_su.getProperty("loc");
-			//		Partition textes = corpus.createPartition(text_su, text_prop);
+			// StructuralUnit text_su = corpus.getStructuralUnit("text");
+			// StructuralUnitProperty text_prop = text_su.getProperty("loc");
+			// Partition textes = corpus.createPartition(text_su, text_prop);
 			//
-			//		Property prop = corpus.getProperty("word") ;
-			//LexicalTable table = textes.getLexicalTable(prop, 2);
-
+			// Property prop = corpus.getProperty("word") ;
+			// LexicalTable table = textes.getLexicalTable(prop, 2);
+			
 			System.out.println(table.getSymbol()); // LexicalTable41
-
-			RWorkspace r = RWorkspace.getRWorkspaceInstance() ;	// get the R connection
-			REXP rresult = r.eval("as.matrix(dist(t("+table.getSymbol()+"), method=\"euclidian\"))"); //$NON-NLS-1$ //$NON-NLS-2$
+			
+			RWorkspace r = RWorkspace.getRWorkspaceInstance();	// get the R connection
+			REXP rresult = r.eval("as.matrix(dist(t(" + table.getSymbol() + "), method=\"euclidian\"))"); //$NON-NLS-1$ //$NON-NLS-2$
 			double[][] result = rresult.asDoubleMatrix();
-
-			for (int i = 0 ; i < result.length ; i++) {
-				for (int j = 0; j < result[i].length ; j++) {
-					System.out.print(" "+result[i][j]); //$NON-NLS-1$
+			
+			for (int i = 0; i < result.length; i++) {
+				for (int j = 0; j < result[i].length; j++) {
+					System.out.print(" " + result[i][j]); //$NON-NLS-1$
 				}
 				System.out.println();
 			}
 		}
-		catch(Exception e) {
+		catch (Exception e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 		return true;
 	}
-
+	
 	public ILexicalTable getTable() {
 		return table;
 	}
-
+	
 	public String getLabel() {
 		return pMethod;
 	}
Index: tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/preferences/LexicalTablePreferences.java
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/preferences/LexicalTablePreferences.java	(revision 2401)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/preferences/LexicalTablePreferences.java	(revision 2402)
@@ -12,8 +12,8 @@
  *
  */
 public class LexicalTablePreferences extends TXMPreferences {
-
-
+	
+	
 	/**
 	 * If true, the table computed from an Index will use all the occurrences from the corpus to add the #RESTE# line composed of the others words
 	 */
@@ -26,16 +26,17 @@
 	
 	/**
 	 * Gets the instance.
+	 * 
 	 * @return the instance
 	 */
-	public static TXMPreferences getInstance()	{
+	public static TXMPreferences getInstance() {
 		if (!TXMPreferences.instances.containsKey(LexicalTablePreferences.class)) {
 			new LexicalTablePreferences();
 		}
 		return TXMPreferences.instances.get(LexicalTablePreferences.class);
 	}
-
 	
+	
 	@Override
 	public void initializeDefaultPreferences() {
 		super.initializeDefaultPreferences();
Index: tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/r/data/LexicalTableImpl.java
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/r/data/LexicalTableImpl.java	(revision 2401)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/r/data/LexicalTableImpl.java	(revision 2402)
@@ -70,10 +70,10 @@
  * 
  */
 public class LexicalTableImpl extends ContingencyTableImpl implements ILexicalTable {
-
+	
 	/** The sortedindex. */
 	private int[] sortedindex;
-
+	
 	/**
 	 * Instantiates a new lexical table impl.
 	 *
@@ -87,7 +87,7 @@
 		super(matrix, formNames, partNames);
 		initSortedIndex();
 	}
-
+	
 	/**
 	 * Instantiates a new lexical table impl.
 	 *
@@ -101,7 +101,7 @@
 		super(matrix, rowNames, colNames);
 		initSortedIndex();
 	}
-
+	
 	/**
 	 * Instantiates a new lexical table impl.
 	 *
@@ -113,8 +113,8 @@
 		super(symbol);
 		initSortedIndex();
 	}
-
-
+	
+	
 	/**
 	 * Instantiates a new lexical table impl.
 	 *
@@ -125,15 +125,17 @@
 	public LexicalTableImpl(String symbol) throws RWorkspaceException {
 		super(symbol);
 	}
-
+	
 	/** The nolex. */
 	protected static int nolex = 1;
-
+	
 	/** The prefix r. */
 	protected static String prefixR = "Lexicon_"; //$NON-NLS-1$
+	
 	/**
 	 * Convert the Lexicon into a Vector object.
 	 * TODO move this code somewhere
+	 * 
 	 * @return the vector
 	 * @throws StatException the stat exception
 	 */
@@ -144,8 +146,8 @@
 		lex.setSymbol(v.getSymbol());
 		return v;
 	}
-
 	
+	
 	/**
 	 * 
 	 * @param symbol
@@ -158,32 +160,32 @@
 		RWorkspace rw = RWorkspace.getRWorkspaceInstance();
 		Vector corpusLexiconV = asVector(corpusLexicon);
 		Vector subcorpusLexiconV = asVector(subcorpusLexicon);
-
-		//TODO: implement the R function : rw.callFunction("lexicons2LexicalTable", new QuantitativeDataStructure[] { corpusLexiconV, subcorpusLexiconV }, symbol); //$NON-NLS-1$
 		
-		rw.eval(symbol+" <- matrix(0, ncol = 2, nrow=length("+corpusLexiconV.getSymbol()+"))");
-		rw.eval("colnames("+symbol+") <- c(\""+subcorpusLexicon.getParent().getName()+"\", \""+corpusLexicon.getParent().getName()+"-"+subcorpusLexicon.getParent().getName()+"\")");
-		//System.out.println("forms: "+Arrays.toString(corpusLexicon.getForms()));
+		// TODO: implement the R function : rw.callFunction("lexicons2LexicalTable", new QuantitativeDataStructure[] { corpusLexiconV, subcorpusLexiconV }, symbol); //$NON-NLS-1$
+		
+		rw.eval(symbol + " <- matrix(0, ncol = 2, nrow=length(" + corpusLexiconV.getSymbol() + "))");
+		rw.eval("colnames(" + symbol + ") <- c(\"" + subcorpusLexicon.getParent().getName() + "\", \"" + corpusLexicon.getParent().getName() + "-" + subcorpusLexicon.getParent().getName() + "\")");
+		// System.out.println("forms: "+Arrays.toString(corpusLexicon.getForms()));
 		rw.addVectorToWorkspace("ltnames", corpusLexicon.getForms());
-		rw.eval("rownames("+symbol+") <- ltnames");
-		rw.eval(symbol+"[names("+corpusLexiconV.getSymbol()+"),2] <- "+corpusLexiconV.getSymbol());
-		rw.eval(symbol+"[names("+subcorpusLexiconV.getSymbol()+"),2] <- "+symbol+"[names("+subcorpusLexiconV.getSymbol()+"),2] - "+subcorpusLexiconV.getSymbol());
-		rw.eval(symbol+"[names("+subcorpusLexiconV.getSymbol()+"),1] <- "+subcorpusLexiconV.getSymbol());
+		rw.eval("rownames(" + symbol + ") <- ltnames");
+		rw.eval(symbol + "[names(" + corpusLexiconV.getSymbol() + "),2] <- " + corpusLexiconV.getSymbol());
+		rw.eval(symbol + "[names(" + subcorpusLexiconV.getSymbol() + "),2] <- " + symbol + "[names(" + subcorpusLexiconV.getSymbol() + "),2] - " + subcorpusLexiconV.getSymbol());
+		rw.eval(symbol + "[names(" + subcorpusLexiconV.getSymbol() + "),1] <- " + subcorpusLexiconV.getSymbol());
 		
-//		try {
-//			System.out.println("colnames: "+Arrays.toString(rw.eval("colnames("+symbol+")").asStrings()));
-//			System.out.println("ltnames: "+Arrays.toString(rw.eval("ltnames").asStrings()));
-//			System.out.println("length ltnames: "+rw.eval("length(ltnames)").asInteger());
-//			System.out.println("ncol: "+rw.eval("ncol("+symbol+")").asInteger());
-//			System.out.println("nrow: "+rw.eval("nrow("+symbol+")").asInteger());
-//		} catch (Exception e) {
-//			// TODO Auto-generated catch block
-//			e.printStackTrace();
-//		}
+		// try {
+		// System.out.println("colnames: "+Arrays.toString(rw.eval("colnames("+symbol+")").asStrings()));
+		// System.out.println("ltnames: "+Arrays.toString(rw.eval("ltnames").asStrings()));
+		// System.out.println("length ltnames: "+rw.eval("length(ltnames)").asInteger());
+		// System.out.println("ncol: "+rw.eval("ncol("+symbol+")").asInteger());
+		// System.out.println("nrow: "+rw.eval("nrow("+symbol+")").asInteger());
+		// } catch (Exception e) {
+		// // TODO Auto-generated catch block
+		// e.printStackTrace();
+		// }
 		
 		
 	}
-
+	
 	/**
 	 * Inits the sorted index.
 	 */
@@ -194,127 +196,128 @@
 			sortedindex[i] = i;
 		}
 	}
-
+	
 	// FIXME: should be moved to an importer RCP extension
 	@Deprecated
 	private static int getNline(File f) {
 		try {
 			BufferedReader reader = new BufferedReader(new FileReader(f));
 			int i = 0;
-
-			while(reader.readLine() != null) {
+			
+			while (reader.readLine() != null) {
 				i++;
 			}
 			return i;
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			return 0;
 		}
 	}
-
-	//	/**
-	//	 * Creates the lexical table impl.
-	//	 *
-	//	 * @param partindex the partindex
-	//	 * @param symbol the symbol
-	//	 * @return the lexical table
-	//	 * @throws RWorkspaceException the r workspace exception
-	//	 */
-	//	static public LexicalTable createLexicalTableImpl(QueryIndex partindex,
-	//			String symbol) throws RWorkspaceException {
-	//		List<QueryIndex> qindexes = new ArrayList<QueryIndex>();
-	//		qindexes.add(partindex);
+	
+	// /**
+	// * Creates the lexical table impl.
+	// *
+	// * @param partindex the partindex
+	// * @param symbol the symbol
+	// * @return the lexical table
+	// * @throws RWorkspaceException the r workspace exception
+	// */
+	// static public LexicalTable createLexicalTableImpl(QueryIndex partindex,
+	// String symbol) throws RWorkspaceException {
+	// List<QueryIndex> qindexes = new ArrayList<QueryIndex>();
+	// qindexes.add(partindex);
 	//
-	//		return createLexicalTableImpl(qindexes, symbol);
-	//	}
-
-	//	/**
-	//	 * Creates the lexical table impl.
-	//	 *
-	//	 * @param query indexes 
-	//	 * @param symbol the symbol
-	//	 * @param useAllOccurrences 
-	//	 * @return the lexical table
-	//	 * @throws RWorkspaceException the r workspace exception
-	//	 */
-	//	static public LexicalTable createLexicalTableImpl(
-	//		List<QueryIndex> qindexes, String symbol)
-	//					throws RWorkspaceException {
+	// return createLexicalTableImpl(qindexes, symbol);
+	// }
+	
+	// /**
+	// * Creates the lexical table impl.
+	// *
+	// * @param query indexes
+	// * @param symbol the symbol
+	// * @param useAllOccurrences
+	// * @return the lexical table
+	// * @throws RWorkspaceException the r workspace exception
+	// */
+	// static public LexicalTable createLexicalTableImpl(
+	// List<QueryIndex> qindexes, String symbol)
+	// throws RWorkspaceException {
 	//
-	//		System.out.println(Messages.LexicalTableImpl_1 + qindexes);
-	//		QueryIndex partindex = qindexes.get(0);// FRIGO
-	//		if (!partindex.isComputedWithPartition())
-	//			return null;
+	// System.out.println(Messages.LexicalTableImpl_1 + qindexes);
+	// QueryIndex partindex = qindexes.get(0);// FRIGO
+	// if (!partindex.isComputedWithPartition())
+	// return null;
 	//
-	//		Partition partition = partindex.getPartition();
-	//		Property property = null;
-	//		try {
-	//			property = partindex.getCorpus().getProperties().get(0);
-	//		} catch (CqiClientException e) {
-	//			// TODO Auto-generated catch block
-	//			org.txm.utils.logger.Log.printStackTrace(e);
-	//		}
+	// Partition partition = partindex.getPartition();
+	// Property property = null;
+	// try {
+	// property = partindex.getCorpus().getProperties().get(0);
+	// } catch (CqiClientException e) {
+	// // TODO Auto-generated catch block
+	// org.txm.utils.logger.Log.printStackTrace(e);
+	// }
 	//
-	//		HashMap<String, QueryIndexLine> alllines = new HashMap<String, QueryIndexLine>();
-	//		// merge lines of all indexes
-	//		for (QueryIndex voc : qindexes) {
-	//			for (QueryIndexLine l : voc.getLines()) {
-	//				alllines.put(l.getName(), l);
-	//			}
-	//		}
+	// HashMap<String, QueryIndexLine> alllines = new HashMap<String, QueryIndexLine>();
+	// // merge lines of all indexes
+	// for (QueryIndex voc : qindexes) {
+	// for (QueryIndexLine l : voc.getLines()) {
+	// alllines.put(l.getName(), l);
+	// }
+	// }
 	//
-	//		List<String> colnames = partindex.getPartnames();
+	// List<String> colnames = partindex.getPartnames();
 	//
-	//		Collection<QueryIndexLine> lines = alllines.values();
-	//		List<String> rownames = new ArrayList<String>(lines.size());
-	//		for (QueryIndexLine l : lines) {
-	//			rownames.add(l.getName());
-	//		}
+	// Collection<QueryIndexLine> lines = alllines.values();
+	// List<String> rownames = new ArrayList<String>(lines.size());
+	// for (QueryIndexLine l : lines) {
+	// rownames.add(l.getName());
+	// }
 	//
-	//		String[] entries = new String[alllines.size()];
+	// String[] entries = new String[alllines.size()];
 	//
-	//		int[][] mat = new int[rownames.size()][colnames.size()];
-	//		int[] margins = new int[colnames.size()]; // compute margins
-	//		int i = 0;
-	//		for (QueryIndexLine l : lines) {
-	//			for (int j = 0; j < colnames.size(); j++) {
-	//				mat[i][j] = l.getFrequency(j);
-	//				margins[j] += l.getFrequency(j);
-	//			}
-	//			entries[i++] = l.toString();
-	//		}
+	// int[][] mat = new int[rownames.size()][colnames.size()];
+	// int[] margins = new int[colnames.size()]; // compute margins
+	// int i = 0;
+	// for (QueryIndexLine l : lines) {
+	// for (int j = 0; j < colnames.size(); j++) {
+	// mat[i][j] = l.getFrequency(j);
+	// margins[j] += l.getFrequency(j);
+	// }
+	// entries[i++] = l.toString();
+	// }
 	//
-	//		//System.out.println("mat size : ["+(rownames.size() + extra)+"]["+colnames.size()+"]");
-	//		//System.out.println("rownames size : "+rownames.size());
-	//		//System.out.println("colnames size : "+colnames.size());
-	//		LexicalTableImpl table = new LexicalTableImpl(mat, partition, property,
-	//				rownames.toArray(new String[] {}), colnames
-	//				.toArray(new String[] {}));
-	//		table.constructor_fmin = qindexes.get(0).getFmin();
-	//		return table;
-	//	}
-
-
+	// //System.out.println("mat size : ["+(rownames.size() + extra)+"]["+colnames.size()+"]");
+	// //System.out.println("rownames size : "+rownames.size());
+	// //System.out.println("colnames size : "+colnames.size());
+	// LexicalTableImpl table = new LexicalTableImpl(mat, partition, property,
+	// rownames.toArray(new String[] {}), colnames
+	// .toArray(new String[] {}));
+	// table.constructor_fmin = qindexes.get(0).getFmin();
+	// return table;
+	// }
+	
+	
 	static public ILexicalTable createLexicalTableImpl(File tsvFile) throws IOException, RWorkspaceException {
-
-		BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(tsvFile) , "UTF-8")); //$NON-NLS-1$
+		
+		BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(tsvFile), "UTF-8")); //$NON-NLS-1$
 		String line = reader.readLine();
 		String[] split = line.split("\t"); //$NON-NLS-1$
 		int ncol = split.length;
 		if (ncol <= 1) {
 			throw new IOException(LexicalTableCoreMessages.bind(LexicalTableCoreMessages.error_notEnoughColumns, ncol));
 		}
-
+		
 		int nlines = getNline(tsvFile);
 		String[] forms = new String[nlines];
-		int[][] freqs = new int[nlines][ncol-1];
-
+		int[][] freqs = new int[nlines][ncol - 1];
+		
 		int i = 0;
-		while(line != null) {
+		while (line != null) {
 			split = line.split("\t"); //$NON-NLS-1$
 			if (split.length == ncol) {
 				forms[i] = split[0];
-				for( int j = 1 ; j < ncol ; j++)
-					freqs[i][j-1] = Integer.parseInt(split[j]);
+				for (int j = 1; j < ncol; j++)
+					freqs[i][j - 1] = Integer.parseInt(split[j]);
 			}
 			else {
 				throw new IOException(LexicalTableCoreMessages.bind(LexicalTableCoreMessages.error_lineXDoesNotHaveXXolumns, i, ncol));
@@ -322,15 +325,16 @@
 			i++;
 			line = reader.readLine();
 		}
-
-		String[] colnames = new String[ncol-1];
-		for( int j = 0 ; j < ncol - 1 ; j++) colnames[j] = "forms"+(j+1); //$NON-NLS-1$
-
+		
+		String[] colnames = new String[ncol - 1];
+		for (int j = 0; j < ncol - 1; j++)
+			colnames[j] = "forms" + (j + 1); //$NON-NLS-1$
+			
 		ILexicalTable lt = LexicalTableImpl.createLexicalTable(freqs, null, forms, colnames, 1);
-
+		
 		return lt;
 	}
-
+	
 	/**
 	 * Creates the lexical table.
 	 *
@@ -344,7 +348,7 @@
 	 */
 	public static ILexicalTable createLexicalTable(int[][] freqs, Property prop,
 			String[] rownames, String[] colnames, int Fmin) throws RWorkspaceException {
-
+		
 		ArrayList<Integer> idx = new ArrayList<Integer>();
 		for (int j = 0; j < rownames.length; j++) {
 			int sum = 0;
@@ -355,9 +359,9 @@
 				idx.add(j);
 			}
 		}
-
+		
 		DoubleMatrix2D mat = DoubleFactory2D.sparse.make(idx.size(), colnames.length, 0);
-
+		
 		int countline = 0;
 		for (int j : idx) {
 			for (int i = 0; i < colnames.length; i++) {
@@ -365,17 +369,18 @@
 			}
 			countline++;
 		}
-
+		
 		String[] filteredrownames = new String[idx.size()];
-		for (int i = 0 ; i < idx.size() ; i++) {
+		for (int i = 0; i < idx.size(); i++) {
 			filteredrownames[i] = rownames[idx.get(i)];
 		}
-
+		
 		LexicalTableImpl table = new LexicalTableImpl(mat, filteredrownames, colnames);
 		return table;
 	}
-
-	/* (non-Javadoc)
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.txm.stat.data.LexicalTable#getFmax()
 	 */
 	@Override
@@ -389,8 +394,9 @@
 		}
 		return max;
 	}
-
-	/* (non-Javadoc)
+	
+	/*
+	 * (non-Javadoc)
 	 * @see org.txm.stat.data.LexicalTable#getFmin()
 	 */
 	@Override
@@ -404,9 +410,9 @@
 		}
 		return min;
 	}
-
-	/* (non-Javadoc)
-	 * 
+	
+	/*
+	 * (non-Javadoc)
 	 * TODO: = rowmargins ?
 	 * @see org.txm.stat.data.LexicalTable#getFreqs()
 	 */
@@ -419,19 +425,22 @@
 		for (int i = 0; i < Ncols; i++) {
 			try {
 				cols.add(this.getCol(i).asDoubleArray());
-			} catch (RException e) {
+			}
+			catch (RException e) {
 				// TODO Auto-generated catch block
 				org.txm.utils.logger.Log.printStackTrace(e);
-			} catch (RWorkspaceException e) {
+			}
+			catch (RWorkspaceException e) {
 				// TODO Auto-generated catch block
 				org.txm.utils.logger.Log.printStackTrace(e);
-			} catch (StatException e) {
+			}
+			catch (StatException e) {
 				// TODO Auto-generated catch block
 				org.txm.utils.logger.Log.printStackTrace(e);
 			}
 		}
 		int sum = 0;
-
+		
 		for (int i = 0; i < Nrows; i++) {
 			sum = 0;
 			for (int j = 0; j < Ncols; j++) {
@@ -441,7 +450,7 @@
 		}
 		return freqs;
 	}
-
+	
 	public void setReference(String refSymbol) {
 		try {
 			RWorkspace rw = RWorkspace.getRWorkspaceInstance();
@@ -449,42 +458,44 @@
 			rw.voidEval("missingrows <- matrix(ncol=1, nrow=length(missingrownames))"); //$NON-NLS-1$
 			rw.voidEval("missingrows[,] <- 0"); //$NON-NLS-1$
 			rw.voidEval("rownames(missingrows) <- missingrownames"); //$NON-NLS-1$
-			rw.voidEval(refSymbol+" <- t(t(rbind("+refSymbol+", t(t(missingrows)))))"); //$NON-NLS-1$ //$NON-NLS-2$
-			rw.voidEval("refLines <- t(t("+refSymbol+"[rownames("+symbol+"),]))"); // only keep the same lines  //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-			rw.voidEval("rmargins <-  t(t(margin.table("+symbol+", 1)))"); //  //$NON-NLS-1$ //$NON-NLS-2$
+			rw.voidEval(refSymbol + " <- t(t(rbind(" + refSymbol + ", t(t(missingrows)))))"); //$NON-NLS-1$ //$NON-NLS-2$
+			rw.voidEval("refLines <- t(t(" + refSymbol + "[rownames(" + symbol + "),]))"); // only keep the same lines //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			rw.voidEval("rmargins <-  t(t(margin.table(" + symbol + ", 1)))"); // //$NON-NLS-1$ //$NON-NLS-2$
 			rw.voidEval("refmargin <- margin.table(refLines)"); //$NON-NLS-1$
-			rw.voidEval(symbol+" <- cbind("+symbol+", abs(refLines - rmargins))"); // use abs if refLine does not contains a line from 'symbol' //$NON-NLS-1$ //$NON-NLS-2$
-			rw.voidEval("colnames("+symbol+")[length(colnames("+symbol+"))] <- \"##RESTE##\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
-		} catch (Exception e) {
+			rw.voidEval(symbol + " <- cbind(" + symbol + ", abs(refLines - rmargins))"); // use abs if refLine does not contains a line from 'symbol' //$NON-NLS-1$ //$NON-NLS-2$
+			rw.voidEval("colnames(" + symbol + ")[length(colnames(" + symbol + "))] <- \"##RESTE##\""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		}
+		catch (Exception e) {
 			// TODO Auto-generated catch block
 			org.txm.utils.logger.Log.printStackTrace(e);
 		}
 	}
-
+	
 	@Override
 	public int getRowsCount() {
 		return this.getNRows();
 	}
-
+	
 	@Override
 	public int getColumnsCount() {
 		return this.getNColumns();
 	}
-
+	
 	@Override
 	public ILexicalTable getCopy() {
-
+		
 		try {
 			RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-
-			String newsymbol = this.getSymbol()+"_copy";
+			
+			String newsymbol = this.getSymbol() + "_copy";
 			while (rw.containsVariable(newsymbol)) {
 				newsymbol += "_copy";
 			}
 			ILexicalTable copy = new LexicalTableImpl(newsymbol);
-			rw.eval(newsymbol+ " <- "+this.getSymbol());
+			rw.eval(newsymbol + " <- " + this.getSymbol());
 			return copy;
-		} catch (RWorkspaceException e) {
+		}
+		catch (RWorkspaceException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
Index: tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/data/ILexicalTable.java
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/data/ILexicalTable.java	(revision 2401)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/statsengine/data/ILexicalTable.java	(revision 2402)
@@ -53,9 +53,10 @@
  * @author sloiseau
  */
 public interface ILexicalTable extends ContingencyTable {
-
+	
 	/**
 	 * Insert a column representing the reference corpus
+	 * 
 	 * @param symbol
 	 */
 	public abstract void setReference(String symbol);
@@ -66,7 +67,7 @@
 	 * @return the copy
 	 */
 	public abstract ILexicalTable getCopy();
-
+	
 	/**
 	 * Sort.
 	 *
@@ -74,14 +75,14 @@
 	 * @param reverse the reverse
 	 */
 	public abstract void sort(int colindex, Boolean reverse);
-
+	
 	/**
 	 * Sort row names.
 	 *
 	 * @param reverse the reverse
 	 */
 	public void sortRowNames(Boolean reverse);
-
+	
 	/**
 	 * Removes the col.
 	 *
@@ -89,42 +90,42 @@
 	 * @param checkEmptyLines the check empty lines
 	 */
 	public abstract void removeCol(int col, boolean checkEmptyLines);
-
+	
 	/**
 	 * Removes the cols.
 	 *
 	 * @param cols the cols
 	 */
 	public abstract void removeCols(List<Integer> cols);
-
+	
 	/**
 	 * Removes the cols.
 	 *
 	 * @param coltodelete the coltodelete
 	 */
 	public abstract void removeCols(int[] coltodelete);
-
+	
 	/**
 	 * Removes the row.
 	 *
 	 * @param row the row
 	 */
 	public abstract void removeRow(int row);
-
+	
 	/**
 	 * Removes the rows.
 	 *
 	 * @param row the row
 	 */
 	public abstract void removeRows(List<Integer> row);
-
+	
 	/**
 	 * Removes the rows.
 	 *
 	 * @param selectionIndices the selection indices
 	 */
 	public abstract void removeRows(int[] selectionIndices);
-
+	
 	/**
 	 * Sets the.
 	 *
@@ -133,7 +134,7 @@
 	 * @param value the value
 	 */
 	public abstract void set(int row, int col, double value);
-
+	
 	/**
 	 * Gets the fmin.
 	 *
@@ -147,7 +148,7 @@
 	 * @return the fmax
 	 */
 	public abstract int getFMax();
-
+	
 	/**
 	 * Removes the rows.
 	 *
@@ -155,7 +156,7 @@
 	 * @param j the j
 	 */
 	public abstract void removeRows(int i, int j);
-
+	
 	/**
 	 * Cut.
 	 * TODO: must be done after calling copy(), check why.
@@ -163,7 +164,7 @@
 	 * @param nlines the number of lines to keep
 	 */
 	public abstract void cut(int nlines);
-
+	
 	/**
 	 * Filter.
 	 *
@@ -172,7 +173,7 @@
 	 * @param fmin the fmin
 	 */
 	public abstract void filter(int nlines, int fmin) throws Exception;
-
+	
 	/**
 	 * Sets the order.
 	 *
@@ -180,14 +181,14 @@
 	 * @param reverse the reverse
 	 */
 	abstract public void setOrder(List<Integer> neworder, Boolean reverse);
-
+	
 	/**
 	 * Gets the freqs.
 	 *
 	 * @return the freqs
 	 */
 	public abstract List<Integer> getFreqs();
-
+	
 	/**
 	 * Export data.
 	 *
@@ -196,6 +197,7 @@
 	 * @param txtseparator the txtseparator
 	 */
 	public abstract void exportData(File file, String colseparator, String txtseparator);
+	
 	public abstract boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator);
 	
 	/**
@@ -204,9 +206,9 @@
 	 * @param file the file
 	 */
 	public abstract boolean importData(File file, String encoding, String colseparator, String txtseparator) throws RWorkspaceException, REXPMismatchException;
-
+	
 	public abstract void sortByFreqs(boolean reverse) throws Exception;
-
+	
 	@Override
 	public abstract Vector getRowMarginsVector() throws StatException;
 	
@@ -222,16 +224,18 @@
 	
 	/**
 	 * Gets the number of rows.
+	 * 
 	 * @return the number of rows
 	 */
 	public abstract int getRowsCount();
-
 	
+	
 	/**
 	 * Gets the number of columns.
+	 * 
 	 * @return the number of columns
 	 */
 	public abstract int getColumnsCount();
-
-
+	
+	
 }
Index: tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/messages/LexicalTableCoreMessages.java
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/messages/LexicalTableCoreMessages.java	(revision 2401)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/messages/LexicalTableCoreMessages.java	(revision 2402)
@@ -16,10 +16,13 @@
 	public static String RESULT_TYPE;
 	
 	public static String info_buildingLexicalTableWith;
+	
 	public static String error_marginIsHigherThanThePartitionSize;
+	
 	public static String error_notEnoughColumns;
+	
 	public static String error_lineXDoesNotHaveXXolumns;
-
+	
 	static {
 		// initialize resource bundle
 		Utf8NLS.initializeMessages(BUNDLE_NAME, LexicalTableCoreMessages.class);
Index: tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/functions/LexicalTable.java
===================================================================
--- tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/functions/LexicalTable.java	(revision 2401)
+++ tmp/org.txm.lexicaltable.core/src/org/txm/lexicaltable/core/functions/LexicalTable.java	(revision 2402)
@@ -41,41 +41,43 @@
  */
 // TODO: SJ: add a fMax filter
 public class LexicalTable extends TXMResult {
-
+	
 	public static Integer LEXICALTABLE_COUNTER = new Integer(1);
+	
 	public static String SYMBOL_BASE = "LexicalTable_"; //$NON-NLS-1$
-
+	
 	/** stores the data computed */
 	protected ILexicalTable statsData;
-
+	
 	/**
 	 * The property.
 	 */
-	@Parameter(key=TXMPreferences.UNIT_PROPERTY)
+	@Parameter(key = TXMPreferences.UNIT_PROPERTY)
 	private WordProperty property;
-
+	
 	/**
 	 * Minimum frequency.
 	 */
-	@Parameter(key=TXMPreferences.F_MIN)
+	@Parameter(key = TXMPreferences.F_MIN)
 	private int fMinFilter;
-
+	
 	/**
 	 * Maximum number of lines.
 	 */
-	@Parameter(key=TXMPreferences.V_MAX)
+	@Parameter(key = TXMPreferences.V_MAX)
 	private int vMaxFilter;
-
+	
 	/**
-	 * if true and if built from a partition index, the #RESTE# line is added containing the cumulated frequencies of the occurrences not counted in the lexical table (corpus frequencies minus the index frequencies)
+	 * if true and if built from a partition index, the #RESTE# line is added containing the cumulated frequencies of the occurrences not counted in the lexical table (corpus frequencies minus the
+	 * index frequencies)
 	 */
-	@Parameter(key=LexicalTablePreferences.USE_ALL_OCCURRENCES)
+	@Parameter(key = LexicalTablePreferences.USE_ALL_OCCURRENCES)
 	protected boolean useAllOccurrences;
-
+	
 	/**
 	 * true if the data has been set with lt.setData(...)
 	 */
-	@Parameter(key=LexicalTablePreferences.EXTERN_DATA)
+	@Parameter(key = LexicalTablePreferences.EXTERN_DATA)
 	protected boolean pExternData;
 	
 	/**
@@ -88,19 +90,20 @@
 		super(corpus);
 		try { // create empty LT to store infos
 			String[] rowNames = {};
-			String[] colNames = {corpus.getName(), NLS.bind("{0}-{1}", corpus.getCorpusParent().getName(), corpus.getName())};
+			String[] colNames = { corpus.getName(), NLS.bind("{0}-{1}", corpus.getCorpusParent().getName(), corpus.getName()) };
 			int[][] matrix = new int[0][2];
 			this.statsData = new LexicalTableImpl(matrix, rowNames, colNames);
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
-
+	
 	/**
 	 * 
 	 * @param index
 	 */
-	public LexicalTable(PartitionIndex index)	{
+	public LexicalTable(PartitionIndex index) {
 		super(index);
 		
 		this.property = index.getProperties().get(0);
@@ -112,33 +115,35 @@
 			String[] colNames = names.toArray(new String[names.size()]);
 			int[][] matrix = new int[0][names.size()];
 			this.statsData = new LexicalTableImpl(matrix, rowNames, colNames);
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
-
+	
 	/**
 	 * 
 	 * @param partition
 	 */
-	public LexicalTable(Partition partition)	{
+	public LexicalTable(Partition partition) {
 		super(partition);
-
+		
 		try { // create empty LT to store infos
 			String[] rowNames = {};
 			List<String> names = partition.getPartNames();
 			String[] colNames = names.toArray(new String[names.size()]);
 			int[][] matrix = new int[0][names.size()];
 			this.statsData = new LexicalTableImpl(matrix, rowNames, colNames);
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
-
-	public LexicalTable(String parametersNodePath)	{
+	
+	public LexicalTable(String parametersNodePath) {
 		super(parametersNodePath);
 	}
-
+	
 	public LexicalTable(CQPCorpus corpus) {
 		super(corpus);
 		
@@ -147,11 +152,12 @@
 			String[] colNames = {};
 			int[][] matrix = new int[0][0];
 			this.statsData = new LexicalTableImpl(matrix, rowNames, colNames);
-		} catch (Exception e) {
+		}
+		catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
-
+	
 	@Override
 	public boolean loadParameters() {
 		try {
@@ -164,32 +170,32 @@
 		}
 		return true;
 	}
-
+	
 	@Override
 	public boolean saveParameters() {
 		this.saveParameter(TBXPreferences.UNIT_PROPERTY, this.property);
 		return true;
 	}
-
+	
 	/**
 	 * 
 	 * @param partition
 	 * @throws Exception
 	 */
 	protected LexicalTableImpl _computeFromPartition(Partition partition) throws Exception {
-
+		
 		// parts lexicons
 		List<CQPLexicon> partsLexicons = new ArrayList<CQPLexicon>();
 		for (int i = 0; i < partition.getPartsCount(); i++) {
 			partsLexicons.add(CQPLexicon.getLexicon(partition.getParts().get(i), this.property, this.monitor, false));
 		}
-
+		
 		// Corpus global lexicon
 		CQPLexicon corpusLexicon = CQPLexicon.getLexicon(partition.getParent(), this.property, this.monitor, false);
-
+		
 		ArrayList<String> filteredForms = new ArrayList<String>();
-		//create a copy and filter line with Fmin;
-		for (int i = 0 ; i < corpusLexicon.getFreq().length ; i++) {
+		// create a copy and filter line with Fmin;
+		for (int i = 0; i < corpusLexicon.getFreq().length; i++) {
 			if (corpusLexicon.getFreq()[i] >= this.fMinFilter) {
 				filteredForms.add(corpusLexicon.getForms()[i]);
 			}
@@ -198,10 +204,10 @@
 		for (int i = 0; i < filteredForms.size(); i++) {
 			entries2index.put(filteredForms.get(i), i);
 		}
-
+		
 		int[][] mat = new int[filteredForms.size()][partsLexicons.size()];
-
-
+		
+		
 		Integer id = null;
 		for (int i = 0; i < partsLexicons.size(); i++) {
 			CQPLexicon l = partsLexicons.get(i);
@@ -215,39 +221,40 @@
 			}
 		}
 		try {
-			if (statsData != null)	{
+			if (statsData != null) {
 				RWorkspace.getRWorkspaceInstance().removeVariableFromWorkspace(statsData.getSymbol());
 			}
-		} catch (RWorkspaceException e) {
+		}
+		catch (RWorkspaceException e) {
 			e.printStackTrace();
 			return null;
 		}
 		
-		return new LexicalTableImpl(mat, filteredForms.toArray(new String[]{}), partition.getPartNames().toArray(new String[] {}));
+		return new LexicalTableImpl(mat, filteredForms.toArray(new String[] {}), partition.getPartNames().toArray(new String[] {}));
 	}
-
+	
 	/**
 	 * Creates the lexical table.
 	 *
 	 * @param indexes the vocabularies
 	 * @param symbol the symbol
-	 * @param useAllOccurrences 
+	 * @param useAllOccurrences
 	 * @return the lexical table
 	 * @throws RWorkspaceException the r workspace exception
 	 */
 	protected LexicalTableImpl _computeFromIndexes(List<PartitionIndex> indexes) throws RWorkspaceException {
-
+		
 		Log.fine(LexicalTableCoreMessages.bind(LexicalTableCoreMessages.info_buildingLexicalTableWith, indexes));
-
+		
 		PartitionIndex partIndex = indexes.get(0);// FRIGO
 		Partition partition = partIndex.getPartition(); // the Index is computed on a partition
-
+		
 		if (!partIndex.isComputedWithPartition()) {
 			throw new IllegalArgumentException("Index is not computed with a partition. Aborting.");
 		}
-
+		
 		this.property = partIndex.getProperties().get(0);
-
+		
 		HashMap<String, Line> alllines = new HashMap<String, Line>();
 		// merge lines of all indexes
 		for (PartitionIndex voc : indexes) {
@@ -266,9 +273,9 @@
 				}
 			}
 		}
-
+		
 		List<String> colnames = partIndex.getPartnames();
-
+		
 		Collection<Line> lines = alllines.values();
 		List<String> rownames = new ArrayList<String>(lines.size());
 		for (Line l : lines) {
@@ -278,9 +285,9 @@
 		if (this.useAllOccurrences) {
 			extra = 1;
 		}
-
-		//String[] entries = new String[alllines.size() + extra];
-
+		
+		// String[] entries = new String[alllines.size() + extra];
+		
 		int[][] mat = new int[rownames.size() + extra][colnames.size()];
 		int[] margins = new int[colnames.size()]; // compute margins
 		int i = 0;
@@ -289,19 +296,19 @@
 				mat[i][j] = l.getFrequency(j);
 				margins[j] += l.getFrequency(j);
 			}
-//			entries[i++] = l.toString();
+			// entries[i++] = l.toString();
 			i++;
 		}
-
+		
 		if (this.useAllOccurrences) {
 			try {
 				int[] partitionSizes = partition.getPartSizes();
 				int[] reste = new int[partitionSizes.length];
-
-				//System.out.println("margins : "+Arrays.toString(margins));
-				//System.out.println("partsizes : "+Arrays.toString(partitionSizes));
-
-				for (i = 0 ; i < reste.length ; i++) {
+				
+				// System.out.println("margins : "+Arrays.toString(margins));
+				// System.out.println("partsizes : "+Arrays.toString(partitionSizes));
+				
+				for (i = 0; i < reste.length; i++) {
 					reste[i] = partitionSizes[i] - margins[i];
 					if (reste[i] < 0) {
 						Log.severe(LexicalTableCoreMessages.error_marginIsHigherThanThePartitionSize);
@@ -309,93 +316,94 @@
 					}
 					mat[lines.size()][i] = reste[i];
 				}
-				//entries[lines.size()] = "#RESTE#"; //$NON-NLS-1$
+				// entries[lines.size()] = "#RESTE#"; //$NON-NLS-1$
 				rownames.add("#RESTE#"); //$NON-NLS-1$
-				//System.out.println("rownames: "+rownames);
-				//System.out.println("reste : "+Arrays.toString(reste));
-			} catch (CqiClientException e) {
+				// System.out.println("rownames: "+rownames);
+				// System.out.println("reste : "+Arrays.toString(reste));
+			}
+			catch (CqiClientException e) {
 				// TODO Auto-generated catch block
 				org.txm.utils.logger.Log.printStackTrace(e);
 				return null;
 			}
 		}
-		//System.out.println("mat size : ["+(rownames.size() + extra)+"]["+colnames.size()+"]");
-		//System.out.println("rownames size : "+rownames.size());
-		//System.out.println("colnames size : "+colnames.size());
+		// System.out.println("mat size : ["+(rownames.size() + extra)+"]["+colnames.size()+"]");
+		// System.out.println("rownames size : "+rownames.size());
+		// System.out.println("colnames size : "+colnames.size());
 		return new LexicalTableImpl(mat, rownames.toArray(new String[] {}), colnames.toArray(new String[] {}));
 	}
-
-
+	
+	
 	@Override
 	protected boolean _compute() throws Exception {
-
+		
 		if (pExternData) {
 			return statsData != null;
 		}
 		// FIXME: SJ: became useless?
-		//this.statsData = null; // reset frequencies
-
+		// this.statsData = null; // reset frequencies
 		
+		
 		int vMaxFilter = this.vMaxFilter;
 		
 		if (this.parent instanceof Subcorpus) {
-
+			
 			this.subTask("Computing from Subcorpus: " + this.parent);
 			
 			Subcorpus subcorpus = (Subcorpus) this.parent;
 			CQPCorpus parentCorpus = subcorpus.getCorpusParent();
 			CQPLexicon l1 = CQPLexicon.getLexicon(parentCorpus, property, monitor, false);
 			CQPLexicon l2 = CQPLexicon.getLexicon(subcorpus, property, monitor, false);
-				
+			
 			this.statsData = new LexicalTableImpl(getNextName(), l1, l2);
 		}
 		else if (this.parent instanceof Partition) {
-
+			
 			this.subTask("Computing from Partition: " + this.parent);
-
-			this.statsData = this._computeFromPartition((Partition)this.parent);
+			
+			this.statsData = this._computeFromPartition((Partition) this.parent);
 		}
 		else if (parent instanceof PartitionIndex) {
-
+			
 			// FIXME: SJ: add 1 to vmax filter to manage the #RESTE# line when computed with corpora margins
 			// need to validate
-			if(this.useAllOccurrences)	{
+			if (this.useAllOccurrences) {
 				vMaxFilter++;
 			}
 			
 			this.subTask("Computing from Partition Index: " + this.parent);
-
-			this.statsData = this._computeFromIndexes(Arrays.asList((PartitionIndex)this.parent));
+			
+			this.statsData = this._computeFromIndexes(Arrays.asList((PartitionIndex) this.parent));
 		}
-
+		
 		if (this.statsData == null) { // no statsData computed or given
 			return false;
 		}
-
+		
 		// apply filtering
 		this.statsData.filter(vMaxFilter, this.fMinFilter);
 		// FIXME SJ: old version, < TXM 0.7.8
-		//this.statsData.cut(this.vMaxFilter);
+		// this.statsData.cut(this.vMaxFilter);
 		
 		return true;
 	}
-
+	
 	@Override
 	public boolean canCompute() {
 		// can be computed on partition or corpus
-		if(this.parent == null)	{
+		if (this.parent == null) {
 			return false;
 		}
-		if(this.property == null)	{
+		if (this.property == null) {
 			Log.finest("LexicalTable.canCompute(): can not compute with no unit property."); //$NON-NLS-1$
 			return false;
 		}
-		return true; 
+		return true;
 	}
-
+	
 	@Override
 	public boolean setParameters(TXMParameters parameters) throws CqiClientException {
-
+		
 		if (parameters.containsKey(LexicalTablePreferences.F_MIN)) {
 			this.fMinFilter = parameters.getInteger(LexicalTablePreferences.F_MIN);
 		}
@@ -403,18 +411,18 @@
 			String s = parameters.get(LexicalTablePreferences.UNIT_PROPERTY).toString();
 			this.property = getCorpus().getProperty(s);
 		}
-
+		
 		if (parameters.containsKey(LexicalTablePreferences.USE_ALL_OCCURRENCES)) {
 			this.useAllOccurrences = parameters.getBoolean(LexicalTablePreferences.USE_ALL_OCCURRENCES);
 		}
-
+		
 		if (parameters.containsKey(LexicalTablePreferences.V_MAX)) {
 			this.vMaxFilter = parameters.getInteger(LexicalTablePreferences.V_MAX);
 		}
-
+		
 		return true;
 	}
-
+	
 	/**
 	 * 
 	 * @return
@@ -422,19 +430,20 @@
 	protected static String getNextName() {
 		return SYMBOL_BASE + (LEXICALTABLE_COUNTER++);
 	}
-
+	
 	@Override
 	public void clean() {
 		try {
-			if(statsData != null)	{
+			if (statsData != null) {
 				RWorkspace.getRWorkspaceInstance().removeVariableFromWorkspace(statsData.getSymbol());
 			}
-		} catch (RWorkspaceException e) {
+		}
+		catch (RWorkspaceException e) {
 			// TODO Auto-generated catch block
 			e.printStackTrace();
 		}
 	}
-
+	
 	public Vector getColMarginsVector() {
 		try {
 			return statsData.getColMarginsVector();
@@ -443,9 +452,10 @@
 			return null;
 		}
 	}
-
+	
 	/**
 	 * Gets the column names.
+	 * 
 	 * @return
 	 */
 	public Vector getColNames() {
@@ -456,97 +466,105 @@
 			return null;
 		}
 	}
-
-
+	
+	
 	public ILexicalTable getData() {
 		return statsData;
 	}
-
+	
 	@Override
 	public String getDetails() {
 		// FIXME: to do
 		return "";
 	}
-
+	
 	/**
 	 * Gets the minimum frequency filter.
+	 * 
 	 * @return
 	 */
 	public int getFMin() {
 		return statsData.getFMin();
 	}
-
+	
 	/**
 	 * Gets the maximum frequency filter.
+	 * 
 	 * @return
 	 */
 	public int getFMinFilter() {
 		return this.fMinFilter;
 	}
-
+	
 	@Override
 	public String getSimpleName() {
-//		if (statsData != null) {
-			StringBuilder strb = new StringBuilder();
-			if (property != null) {
-				strb.append(property.getName() + " ");
-				try {
-					//strb.append(this.getFMin() + " / " + this.getNRows());
-					strb.append(this.fMinFilter + " / " + this.vMaxFilter);
-				} catch (Exception e) {
-					// TODO Auto-generated catch block
-					e.printStackTrace();
-					return this.getEmptyName();
-				}
-				return strb.toString();
+		// if (statsData != null) {
+		StringBuilder strb = new StringBuilder();
+		if (property != null) {
+			strb.append(property.getName() + " ");
+			try {
+				// strb.append(this.getFMin() + " / " + this.getNRows());
+				strb.append(this.fMinFilter + " / " + this.vMaxFilter);
 			}
-			
-//		}
-		else	{
-			return this.getEmptyName();	
+			catch (Exception e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+				return this.getEmptyName();
+			}
+			return strb.toString();
 		}
+		
+		// }
+		else {
+			return this.getEmptyName();
+		}
 	}
-
 	
+	
 	@Override
 	public String getName() {
 		try {
 			return this.getParent().getSimpleName() + ":" + this.getSimpleName(); //$NON-NLS-1$
 		}
-		catch(Exception e) {
+		catch (Exception e) {
 		}
 		return "";
 	}
-
+	
 	/**
 	 * Gets the columns count.
+	 * 
 	 * @return
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	public int getNColumns() throws Exception {
 		if (statsData != null) {
 			return statsData.getNColumns();
-		} else if (parent instanceof Partition) {
-			return ((Partition)parent).getPartsCount();
-		}  else if (parent instanceof PartitionIndex) {
-			return ((PartitionIndex)parent).getPartition().getPartsCount();
 		}
+		else if (parent instanceof Partition) {
+			return ((Partition) parent).getPartsCount();
+		}
+		else if (parent instanceof PartitionIndex) {
+			return ((PartitionIndex) parent).getPartition().getPartsCount();
+		}
 		return 1;
 	}
-
+	
 	/**
 	 * Gets the rows count.
+	 * 
 	 * @return
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	public int getNRows() throws Exception {
 		if (statsData != null) {
 			return statsData.getNRows();
-		} else {
+		}
+		else {
 			return 0;
 		}
 	}
-
+	
 	/**
 	 * Gets the corpus used by this lexical table.
 	 * 
@@ -555,8 +573,8 @@
 	public CQPCorpus getCorpus() {
 		return CQPCorpus.getFirstParentCorpus(this);
 	}
-
 	
+	
 	/**
 	 * Gets the parent partition of this lexical table.
 	 * 
@@ -565,7 +583,7 @@
 	public Partition getPartition() {
 		return Partition.getFirstParentPartition(this);
 	}
-
+	
 	/**
 	 * Get the property this lexical table is bound to.
 	 * 
@@ -574,99 +592,104 @@
 	public WordProperty getProperty() {
 		return property;
 	}
-
+	
 	public Vector getRow(int i) throws Exception {
 		return statsData.getRow(i);
 	}
-
+	
 	public Vector getRowMarginsVector() throws Exception {
 		return statsData.getRowMarginsVector();
 	}
-
+	
 	public Vector getRowNames() throws Exception {
 		if (statsData != null) {
 			return statsData.getRowNames();
-		} else {
+		}
+		else {
 			return null;
 		}
 	}
-
-
+	
+	
 	/**
 	 * Gets the maximum number of lines filter.
+	 * 
 	 * @return the maximum number of lines filter
 	 */
 	public int getVMaxFilter() {
 		return vMaxFilter;
 	}
-
-
+	
+	
 	/**
 	 * Sets the maximum number of lines filter
+	 * 
 	 * @param vMax the maximum number of lines filter
 	 */
-	public void setVMaxFilter(int vMax)	{
+	public void setVMaxFilter(int vMax) {
 		this.vMaxFilter = vMax;
 	}
-
+	
 	/**
 	 * Sets the minimum frequency filter.
+	 * 
 	 * @param fMin
 	 */
-	public void setFMinFilter(int fMin)	{
+	public void setFMinFilter(int fMin) {
 		this.fMinFilter = fMin;
 	}
-
+	
 	/**
 	 * see LexicalTablePreferences.PROPERTY, LexicalTablePreferences.F_MIN, LexicalTablePreferences.V_MAX and LexicalTablePreferences.USEALLOCCURENCES
 	 */
-	//	public boolean setParameters(TXMParameters parameters) {
-	//		try {
-	//			if (parameters.get(LexicalTablePreferences.PROPERTY) != null) {
-	//				Object o = parameters.get(LexicalTablePreferences.PROPERTY);
-	//				if (o instanceof Property) this.pProperty = (Property) o;
-	//				else if (o instanceof String) this.pProperty = this.getCorpus().getProperty(o.toString());
-	//			}
-	//			if (parameters.get(LexicalTablePreferences.F_MIN) != null) {
-	//				Object o = parameters.get(LexicalTablePreferences.F_MIN);
-	//				if (o instanceof Integer) this.pFminFilter = (Integer)o;
-	//				else if (o instanceof String) this.pFminFilter = Integer.parseInt(o.toString());
-	//			}
-	//			if (parameters.get(LexicalTablePreferences.V_MAX) != null) {
-	//				Object o = parameters.get(LexicalTablePreferences.V_MAX);
-	//				if (o instanceof Integer) this.pVMaxFilter = (Integer)o;
-	//				else if (o instanceof String) this.pVMaxFilter = Integer.parseInt(o.toString());
-	//			}
-	//			if (parameters.get(LexicalTablePreferences.USEALLOCCURENCES) != null) {
-	//				Object o = parameters.get(LexicalTablePreferences.USEALLOCCURENCES);
-	//				if (o instanceof Boolean) this.pUseAllOccurrences = (Boolean)o;
-	//				else if (o instanceof Integer) this.pUseAllOccurrences = (Integer)o > 0;
-	//				else if (o instanceof String) this.pUseAllOccurrences = Boolean.parseBoolean(o.toString());
-	//			}
+	// public boolean setParameters(TXMParameters parameters) {
+	// try {
+	// if (parameters.get(LexicalTablePreferences.PROPERTY) != null) {
+	// Object o = parameters.get(LexicalTablePreferences.PROPERTY);
+	// if (o instanceof Property) this.pProperty = (Property) o;
+	// else if (o instanceof String) this.pProperty = this.getCorpus().getProperty(o.toString());
+	// }
+	// if (parameters.get(LexicalTablePreferences.F_MIN) != null) {
+	// Object o = parameters.get(LexicalTablePreferences.F_MIN);
+	// if (o instanceof Integer) this.pFminFilter = (Integer)o;
+	// else if (o instanceof String) this.pFminFilter = Integer.parseInt(o.toString());
+	// }
+	// if (parameters.get(LexicalTablePreferences.V_MAX) != null) {
+	// Object o = parameters.get(LexicalTablePreferences.V_MAX);
+	// if (o instanceof Integer) this.pVMaxFilter = (Integer)o;
+	// else if (o instanceof String) this.pVMaxFilter = Integer.parseInt(o.toString());
+	// }
+	// if (parameters.get(LexicalTablePreferences.USEALLOCCURENCES) != null) {
+	// Object o = parameters.get(LexicalTablePreferences.USEALLOCCURENCES);
+	// if (o instanceof Boolean) this.pUseAllOccurrences = (Boolean)o;
+	// else if (o instanceof Integer) this.pUseAllOccurrences = (Integer)o > 0;
+	// else if (o instanceof String) this.pUseAllOccurrences = Boolean.parseBoolean(o.toString());
+	// }
 	//
-	//			dirty = true;
-	//		} catch (Exception e) {
-	//			System.out.println("Error while setting LexicalTable parameters: "+e.getLocalizedMessage());
-	//			Log.printStackTrace(e);
-	//			return false;
-	//		}
-	//		return true;
-	//	}
-
+	// dirty = true;
+	// } catch (Exception e) {
+	// System.out.println("Error while setting LexicalTable parameters: "+e.getLocalizedMessage());
+	// Log.printStackTrace(e);
+	// return false;
+	// }
+	// return true;
+	// }
+	
 	public boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator) {
 		return statsData.toTxt(outfile, encoding, colseparator, txtseparator);
 	}
-
-
+	
+	
 	/**
 	 * Sets the unit property.
+	 * 
 	 * @param property
 	 */
-	public void setUnitProperty(WordProperty property)	{
+	public void setUnitProperty(WordProperty property) {
 		this.property = property;
 	}
-
-
+	
+	
 	public void setParameters(WordProperty prop, Integer fmin, Integer vmax, Boolean useAllOccurrences) {
 		if (prop != null) {
 			this.property = prop;
@@ -682,22 +705,23 @@
 		}
 		this.dirty = true;
 	}
-
-
+	
+	
 	/**
 	 * @param useAllOccurrences the useAllOccurrences to set
 	 */
 	public void setUseAllOccurrences(boolean useAllOccurrences) {
 		this.useAllOccurrences = useAllOccurrences;
 	}
-
+	
 	@Override
 	public String getResultType() {
 		return LexicalTableCoreMessages.RESULT_TYPE;
 	}
-
+	
 	/**
 	 * Use this method to set manually data to the lexical table
+	 * 
 	 * @param lexicalTableImpl external data to use. If null the table will be computed using its parent
 	 */
 	public void setData(LexicalTableImpl lexicalTableImpl) {
