Index: tmp/org.txm.utils/.project
===================================================================
--- tmp/org.txm.utils/.project	(revision 0)
+++ tmp/org.txm.utils/.project	(revision 147)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.txm.utils</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>

Property changes on: tmp/org.txm.utils/.project
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/juniversalchardet-1.0.3.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.utils/juniversalchardet-1.0.3.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.utils/commons-lang-2.4.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.utils/commons-lang-2.4.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.utils/src/messages.properties
===================================================================
--- tmp/org.txm.utils/src/messages.properties	(revision 0)
+++ tmp/org.txm.utils/src/messages.properties	(revision 147)
@@ -0,0 +1,542 @@
+FAILED=Failed.
+DONE=Done.
+AbsoluteFrequency_1=Absolute Frequency
+AbstractCqiClient_2=No error.
+ArrayIndex_0=** The index array can not be null or empty.
+ArrayIndex_1=** A zero-based index cannot be < 0 or > to the number of indexed elements.
+Base_0=Binary directory 
+Base_22='corpora' element missing from 'base' element
+Base_3=\ does not exist?
+Base_4=Parent directory 
+Base_5=\ does not exist?
+Base_6=Error: linkGrp/link/@target malformed: 
+BuildCwbEncodeArgs_0=The file ''{0}'' cannot be found.
+CAH_0=Error while exporting CAH result : 
+CA_0=** The lexical table was not found in the R workspace.
+CA_16=** Cannot load the 'ca' library
+CA_2=** Error while computing correspondance analysis: 
+CA_4=Unable to extract singular values 
+CHAR_VECTOR_ADDED_TO_WORKSPACE=Vector "{1}" ({0,number,integer} "character") has been transmited to the Statistics Engine.
+CONNECTED_TO_STATS_MODULE= connected.
+CONNECTING_CQI_CLIENT=Connecting to the Search Engine with the following parameters: {0}:{1}@{2}{3}
+CONNECTION_OK=Connected to the Statistics Engine.
+CQI_CLIENT_CONNECTED=Connected to the Search Engine.
+CREATING_PART=Part {0} created with query {1}
+CREATING_SUBCORPUS=Subcorpus {1} created from corpus {0} with the query {2}
+CatalogManager_0=** Manager Error during initialization: 
+CatalogManager_1=\ does not exist.
+Catalog_0=** Catalog File Not found 
+CompositeComparator_0=Composite: 
+Concordance_0=\ 
+Concordance_1=** Failed to retrieve text_id property from lines
+Concordance_12=** Failed to export Concordance: 
+Concordance_13=Reference
+Concordance_14=LeftContext
+Concordance_15=Keyword
+Concordance_16=RightContext
+Concordance_17=Reference
+Concordance_18=
+Concordance_19=Context
+Concordance_2=undefined
+Concordance_3=\ results retrieved in 
+Concordance_4=Failed to remove QueryResult from CQP: 
+Concordance_5=
+Concordance_6=Retrieving 
+Concordance_7=\ results
+Concordance_8=Failed to get texts limits: 
+Contrasts_0=Computing: 
+Convert5To6_1= is missing
+Convert5To6_10='registry' file is missing: 
+Convert5To6_11='html' directory is missing: 
+Convert5To6_12=processing...
+Convert5To6_15=reorganizing files of 
+Convert5To6_19=Read corpus infos from old import.xml file: 
+Convert5To6_30=Fill import.xml with: 
+Convert5To6_46=processing text: 
+Convert5To6_6=checking binary format...
+Convert5To6_7='txm' directory is missing: 
+Convert5To6_8='html' directory is missing: 
+Convert5To6_9='data' directory is missing: 
+Cooccurrence_0=Coocurrence: 
+Cooccurrence_1=** Error: can't find 'n' or 'o': 
+Cooccurrence_10=\ properties: 
+Cooccurrence_102=** Error: negative argument in 'factln' function
+Cooccurrence_103=** Error: negative argument in 'rbicoln' function
+Cooccurrence_105=Occ\tFreq\tCoFreq\tScore\tMeanDist\tMode
+Cooccurrence_106=\n
+Cooccurrence_107=** Error: 
+Cooccurrence_11=Occ
+Cooccurrence_12=Freq
+Cooccurrence_13=CoFreq
+Cooccurrence_14=Score
+Cooccurrence_15=MeanDist
+Cooccurrence_16=Mode
+Cooccurrence_2=Cooc: 
+Cooccurrence_22=Error: ref_forms.length ! ref_freqs.length
+Cooccurrence_23=Error: no cooccurrents
+Cooccurrence_3=\ (
+Cooccurrence_4=\ F: 
+Cooccurrence_5=** Impossible to compute cooccurrences with this concordance 
+Cooccurrence_6=Occ\tFreq\tCoFreq\tScore\tMeanDist\tMode
+Cooccurrence_7=\ Occ:
+Cooccurrence_8=\ Score:
+Cooccurrence_9=\ MeanDist:
+CorpusManager_0=** CQi Client not initialized
+CorpusManager_1=** Error: This exception should not be thrown
+Corpus_12=** Failed to restore subcorpus 
+Corpus_13=Corpus:getLocale: CQP is not ready to answer: 
+Corpus_14=Warning: can't load corpus 
+Corpus_15= informations from workspace (selfElement  null)
+Corpus_19=** Failed to restore partition 
+Corpus_2=Corpus: 
+Corpus_3=, Encoding : 
+Corpus_4=, Language : 
+Corpus_5=No values given
+Corpus_6=** Corpus: the reference to text 
+Corpus_7=\ is broken
+Corpus_8=\ in 								
+CorrespondanceAnalysisEditorInput_21=Rows
+CorrespondanceAnalysisEditorInput_22=Cols
+CorrespondanceAnalysisEditorInput_23=Q12
+CorrespondanceAnalysisEditorInput_24=Q13
+CorrespondanceAnalysisEditorInput_25=Q23
+CorrespondanceAnalysisEditorInput_26=Mass
+CorrespondanceAnalysisEditorInput_27=Dist
+CorrespondanceAnalysisEditorInput_29=Cont
+CorrespondanceAnalysisEditorInput_30=Cos\u00B2
+CorrespondanceAnalysisEditorInput_32=c1
+CorrespondanceAnalysisEditorInput_33=c2
+CorrespondanceAnalysisEditorInput_34=c3
+CorrespondanceAnalysisEditorInput_4=Factor
+CorrespondanceAnalysisEditorInput_44=Cols
+CorrespondanceAnalysisEditorInput_46=Q12
+CorrespondanceAnalysisEditorInput_47=Q13
+CorrespondanceAnalysisEditorInput_48=Q23
+CorrespondanceAnalysisEditorInput_49=Mass
+CorrespondanceAnalysisEditorInput_5=Singular values
+CorrespondanceAnalysisEditorInput_50=Dist
+CorrespondanceAnalysisEditorInput_52=Cont
+CorrespondanceAnalysisEditorInput_53=Cos\u00B2
+CorrespondanceAnalysisEditorInput_55=c1
+CorrespondanceAnalysisEditorInput_56=c2
+CorrespondanceAnalysisEditorInput_57=c3
+CqiClient_0=Get Last CQP error
+CqiClient_1=Read CQI CTRL LAST GENERAL ERROR
+CqiClient_3=** Failed to get last CQP error
+CqiClient_32=Search Engine launched...
+CqiClient_33=** failed to connect to Search Engine.
+CqiClient_34=Running SearchEngine in memory mode.
+CwbEncode_0=The directory does not exists: 
+CwbEncode_21=The "binary" directory does not exists: 
+CwbEncode_23=The "registry" directory does not exists:  
+CwbEncode_25=The "corpora" directory does not exists: 
+CwbEncode_27=Processing corpus...
+CwbEncode_29=The "data" directory does not exists: 
+CwbEncode_32=Fixing registry file {0} with {1}
+CwbProcess_1=Starting process with command: 
+CwbProcess_3=Stopping process: 
+CwbProcess_4=Process stoped: 
+CwbProcess_5=** Can't find CQP location : 
+DOUBLE_VECTOR_ADDED_TO_WORKSPACE=Vector "{1}" ({0,number,integer} "doubles") transmitted to the Statistics Engine.
+DROP_PARTITION=Deleting partition {0}
+DROP_QUERYRESULT=Deleting query results {0}
+DROP_SUBCORPUS=Deleting subcorpus {0}
+Diagnostic_0=* Structural Units properties\n
+Diagnostic_1=** Failed to access corpus 
+Diagnostic_10=Partition name: 
+Diagnostic_11=\ structures
+Diagnostic_12=Number of parts: 
+Diagnostic_13=Partition size: 
+Diagnostic_14=Lexical Units properties (max {0} values)
+Diagnostic_15=Part number: 
+Diagnostic_16=Number of structural units 
+Diagnostic_17=Part names: 
+Diagnostic_18=Part sizes: 
+Diagnostic_19=Part properties: 
+Diagnostic_2=** Error
+Diagnostic_20=Parts queries: 
+Diagnostic_22=Structural Units properties (max {0} values)
+Diagnostic_23=\ values)
+Diagnostic_26=No property
+Diagnostic_3=Description of 
+Diagnostic_4=\ properties
+Diagnostic_40=* General Statistics\n
+Diagnostic_41=- T 
+Diagnostic_43=- Word properties 
+Diagnostic_49=- S 
+Diagnostic_5=General Statistics
+Diagnostic_6=** Failed to access corpus 
+Diagnostic_7=Number of words 
+Diagnostic_8=\ lexicon
+Diagnostic_9=Number of word properties 
+END_SUBCORPUS_LEXICON=Lexicon of subcorpus {0} computed in {1} ms
+END_SUBCORPUS_SIZE=size of subcorpus {0} ({1}) computed in {2} ms
+ERROR_EXTRACT_ITEM=** Error extracting list item: 
+EVALUATED_EXPRESSION=Expression "{0}" evaluated.
+ExecTimer_0= msec
+ExecTimer_1= sec
+ExecTimer_2= min and 
+ExecTimer_3=h, 
+FAILED_INIT_CONNECTION_R=** Failed to connect to Statistics Engine.
+FactoMineRCA_2=** Fail to get contrib column: 
+FactoMineRCA_3=** Fail to get cos\u00B2 column: 
+FactoMineRCA_4=** Fail to get contrib row: 
+FactoMineRCA_5=** Fail to get cos\u00B2 row: 
+Factor_0=** Not implemented
+FileCopy_0=** File copy: failed to find source: 
+FileCopy_2=** File copy: access right restriction to source: 
+FileCopy_4=** File copy: failed to create directory: 
+FilterManager_0=** Filter manager error : initialization 
+FilterManager_1=\ does not exist.
+Filter_7=** Read error
+Focus_1=** The focus is empty or null.
+GroovyImportScriptRunner_0=Initialization of GroovyImportScriptRunner
+GroovyImportScriptRunner_1=> beginning execution of 
+GroovyImportScriptRunner_3=> end of execution 
+INT_VECTOR_ADDED_TO_WORKSPACE=Vector "{1}" ({0,number,integer} "int") transmitted to Statistics Engine.
+InternalView_3=\ \ Structure informations: 
+InternalView_6=InternalView: failed to retrieve struct properties values: 
+InternalView_7=\ \ No structure informations
+LEXICON=Lexicon 
+LEXICON_ADDED=Lexicon "{1}" ({0,number,integer} entries) transmitted to Statistics Engine.
+LIBBRARY_NOT_LOADED=Failed to load the {0} library: {1}
+LS_0=Error: 
+LS_1= is not a Directory!
+LexicalTableImpl_0=
+LexicalTableImpl_1=Building lexical table with: 
+LexicalTableImpl_10= columns
+LexicalTableImpl_12=Error: margin 
+LexicalTableImpl_13= is higher than the partition size
+LexicalTableImpl_3=\ <no partition> /
+LexicalTableImpl_5=not enough columns: minimum 2 (here: 
+LexicalTableImpl_8=line
+LexicalTableImpl_9= does not have 
+LexicographicKeywordComparator_0=Keyword
+LexicographicLeftContextComparator_0=Left context
+LexicographicRightContextComparator_0=Right context
+Lexicon_0=Forms and frequencies tables must be of the same length.
+Lexicon_3=Lexicon : 
+Localizer_0=[Missing translation] 
+Localizer_1=messages
+Log_3=Copying logs in 
+Log_5=Start loging in 
+Log_8=\nstack:\n
+MATRIX_ADDED_TO_WORKSPACE=Matrix "{2}" ({0,number,integer} rows and {1,number,integer} columns) transmitted to Statistics Engine.
+MainCorpus_0=\ is not a valid CQP ID for a corpus. It must be in uppercase characters.
+MainCorpus_1=\ in 
+MainCorpus_2=Delete binary directory: 
+MatrixImpl_0=A variable ("
+MatrixImpl_1=") does not exist in the R workspace.
+MatrixImpl_10=Row index (
+MatrixImpl_11=) too big (max 
+MatrixImpl_13=Col index (
+MatrixImpl_14=) too big (max 
+MatrixImpl_19=R object evaluated to null.
+MatrixImpl_2=dim(
+MatrixImpl_20=Unknown type: 
+MatrixImpl_21=mode
+MatrixImpl_22=Row index (
+MatrixImpl_23=) too big (max 
+MatrixImpl_28=Column index (
+MatrixImpl_29=) too big (max 
+MatrixImpl_4=Row names of a contingency table cannot be null.
+MatrixImpl_5=Row names vector length must be equal to the number of rows of the matrix.
+MatrixImpl_6=Column names of a contingency table cannot be null
+MatrixImpl_67=Matrix: failed to get nrow: 
+MatrixImpl_7=Col names vector length must be equals to the number of columns of the matrix (
+MatrixImpl_73=MatrixImpl: Error: column size differs: original
+MatrixImpl_79=Failed to get row names
+MatrixImpl_88=Cannot delete all lines
+MemCqiClient_0=Internal CQi error: 
+MemCqiClient_1=CL error: 
+MemCqiClient_10=Unknown CQP codes : b1 
+MemCqiClient_11=Query ERROR
+MemCqiClient_2=CQP error: 
+MemCqiClient_3=Unknown CQP error : b1 
+MemCqiClient_5=Unknown CQP cqi error : b1 
+MemCqiClient_7=Unknown CQP code : b1 
+MemCqiClient_9= b2 
+MessageBox_0=Error
+MessageBox_1=Warning
+MessageBox_2=Information
+NEW_PARTION=Creating new partion of corpus {0}: {1}
+NOT_FOUND_IN_R=) was not found in the R workspace.
+NetCqiClient_1=getLastCQiError: 
+NetCqiClient_3=getLastCQPError: 
+NetCqiClient_5=Could not reconnect to server: 
+NetCqiClient_97=client.dumpSubCorpus(subcorpus, NetCqiClient.CQI_CONST_FIELD_MATCH, 1, 2) : 
+NetCqiServer_0=** cqpserver stdout: 
+NetCqiServer_1=** cqpserver stderr: 
+NullComparator_0=None
+PACKAGE_LOADED=Library {0} loaded.
+PARTITION_CREATED=Partition {0} created in {1} ms
+PART_CREATED=Part {0} created in {1} ms
+Page_3=** Malformed URL, file 
+Pair_0=\ should be false
+Pair_1=\ should be true
+PartitionFocus_1=The focus cannot be null or empty.
+PartitionFocus_2=Focus is empty or null
+PartitionFocus_3=The {0} part focus doesn''t belong to partition {1}.
+PartitionFocus_4=** Unknown partition name.
+Partition_1=\ in 
+Partition_18=Failed to get last CQP error: 
+Partition_2=\ in 
+Partition_21=Warning: the partition could not be saved in workspace: 
+Partition_4=\ query: 
+Partition_9=** Failed to create part: 
+PatchCwbRegistry_0="{0}" corpus registry update
+PatchCwbRegistry_1=' corpus
+PatchCwbRegistry_13=Source registry does not exists: 
+PatchCwbRegistry_16=Can't find registry file
+PatchCwbRegistry_2=Updating 
+PatchCwbRegistry_23= encoding to 
+PatchCwbRegistry_27=data directory 
+PatchCwbRegistry_28=Could not patch registry
+PatchCwbRegistry_29= could not be found in registry file 
+PatchCwbRegistry_3=** The target corpus doesn't exist
+PatchCwbRegistry_34=Updating 
+PatchCwbRegistry_35= language to 
+PatchCwbRegistry_4=Add Alignment attribute to corpus 
+PatchCwbRegistry_5= registry: 
+Project_0=Use directory name to build corpus declaration
+Project_1=The corpus declaration file is not found too: 
+Project_10=Project.load: workspace XML file error: 
+Project_11=Failed to load base parameters from file: 
+Project_12=Loading {0} corpus...  
+Project_13=Adding texts: 
+Project_14=Error: no version in import.xml file
+Project_15=Error: the corpus version is too old to be loaded.
+Project_16=Corpus name has been changed from {0} to {1} 
+Project_17=Error: skipping the loading of corpus: 
+Project_18=PARAMS: 
+Project_2=Warning in corpus definition: no name attribute defined in its XML file : {0}
+Project_25=Error: registry directory does not exist ! 
+Project_26=** Error: ''{0}'' corpus directory is not conformant to TXM corpus binary format: corpus skipped." 
+Project_27=Error while patching registry file: 
+Project_28=TXM needs folders: 
+Project_3=Project: load: malformed base node: duplicated 
+Project_31= and file 
+Project_4=Remove duplicate corpus from corpus list: 
+Project_5=Analysing directory...
+Project_6=Failed to load corpus with params: 
+Project_7=Failed to load base with parameters file: 
+Project_8=Can't read corpus parameters file: 
+Project_9= base
+PropertiesReferenceComparator_0=References
+QUERY=Query on {0} : {1} <- {2}
+QUERYING_PARTITION=Querying partition {0}
+QuantitativeDataStructureImpl_0=No object with name "
+QuantitativeDataStructureImpl_1=" in the workspace
+QuantitativeDataStructureImpl_2=** Cannot delete a non-existing object.
+QueryIndex_2=Warning : duplicate query entry : 
+QueryIndex_3=Warning: query failed: 
+QueryResult_0=\ is not a valid CQP Id for a subcorpus. It must be an uppercase characters followed by lowercase characters.
+READING_2D_INT_ARRAY_FROM_CQI_SERVER=Reading an integer table from the CQi server
+READING_BOOLEAN_FROM_CQI_SERVER=Reading boolean from the CQi server
+READING_HEADER_FROM_CQI_SERVER=Reading header from the CQi server
+READING_INTEGER_FROM_CQI_SERVER=Reading integer from the CQi server
+READING_INT_ARRAY_FROM_CQI_SERVER=Reading integer array from the CQi server
+READING_STRING_ARRAY_FROM_CQI_SERVER=Reading string array from the CQi server
+READING_STRING_FROM_CQI_SERVER=Reading string from the CQi server
+READ_2D_INT_ARRAY_FROM_CQI_SERVER=Read string 2D integer from the CQi server : {0}
+READ_BOOLEAN_FROM_CQI_SERVER=Read boolean from the CQi server : {0}
+READ_BYTE_FROM_CQI_SERVER=Read byte from the CQi server : {0}
+READ_HEADER_FROM_CQI_SERVER=Read header from the CQi server : {0}
+READ_INTEGER_FROM_CQI_SERVER=Read integer from the CQi server : {0}
+READ_INT_ARRAY_FROM_CQI_SERVER=Read integer array from the CQi server : {0}
+READ_STRING_ARRAY_FROM_CQI_SERVER=Read string array from the CQi server : {0}
+READ_STRING_FROM_CQI_SERVER=Read string from the CQi server : {0}
+REQUESTED_OBJECT=The object requested (
+RETURNING_CACHED_LEXICON=Recycling the lexicon {0}
+RETURN_FROM_QUERY={0} matches found in {1} ms
+RException_0=** R error: "
+RException_1="
+RException_2=\nwhile evaluating: 
+RSERVE_ACTIVATED=Statistics Engine running 
+RSERVE_PATH_NOT_SET_ERROR=** The Statistics Engine program path is not set and we could not find it
+RSERVE_PATH_SET_ERROR=** The Statistics Engine program path is set but we couldn't find it
+RWorkspace_0=** Failed to connect to the R Workspace 
+RWorkspace_1=** Evaluation Error: 
+RWorkspace_10=Starting R using path: 
+RWorkspace_11=Last safeeval: 
+RWorkspace_2=try : connect to R at 
+RWorkspace_21=Full command: 
+RWorkspace_3=Saving graphic in file 
+RWorkspace_4=
+RWorkspace_5=
+RWorkspace_6=** Failed to initialize file transfert: 
+RWorkspace_7=Matrix is empty
+RWorkspace_8=Failed to start RServe : 
+R_EXPR=Expression sent to the Statistics Engine for evaluation: {0}.
+R_READ_CONSOLE=The Statistics Engine waits for something to read from the console ({0}, {1}).
+R_SAVE_HISTORY=The Statistics Engine has saved an history ({0}).
+R_SHOW_MESSAGE=The Statistics Engine displayed this message: {0}.
+R_WRITE_CONSOLE=The Statistics Engine displayed this message in the console: {0}.
+ReferencePattern_3=Reference
+Referencer_1=Referencer
+Referencer_2=Referencer export failed: 
+RelativeFrequency_3=Relative Frenquency %
+Progression_1=Error: subcorpus with size 0
+Progression_10=in
+Progression_11=(density)
+Progression_12=structure: 
+Progression_13=, property: 
+Progression_14=, value: 
+Progression_2=Warning: discontinued subcorpus
+Progression_3=Error: subcorpus with size 0
+Progression_9=Progression of
+SERVER_STARTED=Search Engine started 
+SERVER_STOPED=Search Engine stopped
+STARTING_SERVER=Starting Search Engine : {0}
+STOPING_SERVER=Stopping the Search Engine
+SUBCORPUS_CREATED=Subcorpus {0} created in {1} ms
+SUBCORPUS_LEXICON=Computing the lexicon of subcorpus {0}
+SUBCORPUS_SIZE=Computing the size of subcorpus {0}
+Selection_0=\ number of words : 
+Selection_1=\ number of texts : 
+Selection_2=\ value : 
+Selection_26=Failed to get sup values of 
+Selection_3=Property : 
+Selection_4=number of words : 
+Selection_5=Text metadata: 
+Selection_6=Selection error: the corpus 
+Selection_7= has no base
+Selection_8=Can't find structural unit for metadata with id: 
+Selection_9=Error while getting metadatas from Base.importMetadatas: 
+Sh_4=Process exited abnormally with code 
+SpecificitesResult_0=** No specificity index array.
+SpecificitesResult_1=** The specificity index array does not properly represent a matrix.
+SpecificitesResult_10=** Reference to a non existing column.
+SpecificitesResult_2=** The lexical table cannot be null.
+SpecificitesResult_3=** Number of rows wanted (
+SpecificitesResult_4=) and found (
+SpecificitesResult_5=) mismatch.
+SpecificitesResult_6=** Reference to non existing row.
+SpecificitesResult_7=** number of columns given and found mismatch (
+SpecificitesResult_8=Unit
+Specificites_0=** Cannot compute specificites with less than 2 parts in the corpus.
+Specificites_1=** Failed to get the specificites: 
+Specificites_2=\ specificity index computed
+StartRserve_0=Starting R with command line: 
+StartRserve_2=No R path given, trying to find it...
+StartRserve_21=** Failed to start Rserve with command: 
+StartRserve_22=Statistical Engine launched
+StartRserve_28=** Failed to run REG to find the location of R program: 
+StartRserve_29=\ You need the 'R' software and you need to configure in the 'Tools/Preferences' window the correct path to it.
+StartRserve_3=Rserve already running on port 
+StartRserve_4=try R path : 'R'
+StartRserve_6=try R path : 
+StreamGobbler_0=Initializing log recorder
+StreamGobbler_1=Starting log recorder
+StreamGobbler_2=Stopping log recorder
+StreamGobbler_3=Interrupting log recorder
+StructuralUnitProperty_0=** Failed to access structural property values 
+Subcorpus_1=\ in 
+Subcorpus_2=Warning: the subcorpus could not be saved in workspace: 
+Subcorpus_3=\ is not a valid CQP ID for a subcorpus. It must be an uppercase character followed by lowercase characters.
+Summary_13=Error : text 
+Summary_14= is null
+Summary_15=Error : edition default is null
+Summary_16=Error: textids
+Summary_17= and wordids
+TSCmd_30=Query was: 
+TSCmd_31= matches found.
+TSCorpusManager_0=Error reg dir: 
+TSCorpusManager_1=Error configdir dir: 
+TSCorpus_0=Couldn't read corpus: 
+TSResult_0=Number of match 
+TSResult_13=Cannot found tigerXml file: 
+TSResult_14=Ts: conc: Failed to create xml file
+TSResult_18=Starting injection
+TSResult_2=Number of sub match 
+TSResult_7=Can't find 
+TSResult_8= in TS export methods 
+TigerXmlIndexing_2=ERROR: !exists
+TigerXmlIndexing_3=ERROR: !read
+TigerXmlIndexing_6=IO: 
+TigerXmlIndexing_7=SAX: 
+Toolbox_0=** File
+Toolbox_1=** Platform : the parameters SERVER_PATH_TO_EXECUTABLE, SERVER_PATH_TO_REGISTRY et SERVER_PATH_TO_INIT_FILE must be specified in a given '.properties' file.
+Toolbox_10=** No worlspace found. Creating a new one.
+Toolbox_11=Updating with : 
+Toolbox_12=Loading workspace from file : 
+Toolbox_14=** Error loadgin workspace from file : 
+Toolbox_15=** Error : 
+Toolbox_16=\ does not exists
+Toolbox_17=End of CQP wait test
+Toolbox_18=** Error while waiting for CQP
+Toolbox_2=** Error: null value for key 
+Toolbox_21=\ R: 
+Toolbox_22=\ Workspace: 
+Toolbox_23=Start StatEngine: user: 
+Toolbox_24=\ remote:
+Toolbox_25=\ port: 
+Toolbox_26=** Error : while connection to search engine, with the following parameters : 
+Toolbox_27=\ and 
+Toolbox_28=Failed to start MemCqiClient: 
+Toolbox_29=** Error while connecting to search engine.
+Toolbox_3=true
+Toolbox_30=- wrong login or password or port : 
+Toolbox_31=Failed to exec 'taskkill /IM cqpserver.exe /F': 
+Toolbox_33=- or the engine was not started with the command line : 
+Toolbox_34=Failed to exec 'tskill cqpserver.exe': 
+Toolbox_35=** Error while connecting to the stat engine.
+Toolbox_37=kill `ps aux | grep cqpserver | awk '/-P 
+Toolbox_38=/ {print $2}'`
+Toolbox_39=Failed to exec '
+Toolbox_4=With parameters: 
+Toolbox_40=': 
+Toolbox_43=Failed to exec 'taskkill /IM Rserve.exe /F': 
+Toolbox_45=Failed to exec 'tskill Rserve.exe': 
+Toolbox_47=Failed to exec 'killall -9 Rserve-bin.so': 
+Toolbox_5= debug: 
+Toolbox_7=The path to R program is null
+Toolbox_8=Undefined keys : 
+Toolbox_9=Platform parameters: 
+Toolbox_connected_to_corpus_sever=connected
+Toolbox_wait_failed=** Failed to wait for the interrupted process
+Toolbox_workspace_init=Reloading subcorpora and partitions...
+Toolbox_workspace_init_failed=** Error during workspace initialisation :
+Toolbox_wrong_port=** Error : the connexion to the server failed : wrong port format
+TxmObject_0=** Failed to get parent object
+TxmObject_1=TxmObject: delete: parent object is null
+TxmObject_2=Failed to save attribute 
+TxmRenderer_1=TxmRenderer: error: no corpus found for result 
+TxmRenderer_5=line: 
+TxmRenderer_6= prop 
+TxmRenderer_7=  mdc: 
+VARIABLE_REMOVED=R Variable "{0}" deleted.
+ValidateXml_0=XmlValidation: 
+ValidateXml_1= is a directory
+ValidateXml_2= does not exists
+ValidateXml_3= is not read-able
+VectorizeArray_0=** Nothing to do with an empty matrix
+VectorizeArray_1=** Inner arrays must be of dimension > 0.
+VectorizeArray_10=** An inner array cannot be null.
+VectorizeArray_11=** All the inner array do not have the same length.
+VectorizeArray_3=** All the inner array do not have the same length.
+VectorizeArray_4=** Nothing to do with an empty matrix
+VectorizeArray_5=** Inner arrays must be of dimension > 0.
+VectorizeArray_7=** All the inner array do not have the same length.
+VectorizeArray_8=** Nothing to do with an empty matrix
+VectorizeArray_9=** Inner arrays must be of dimension > 0.
+Index_0=** Error while computing lexicon:\n 
+Index_1=Console : 
+Index_7=** Failed to export Lexicon : 
+WORKSPACE_PURGED=Statistics Engine cleaned up.
+Workspace_0=, index 
+Workspace_1=\t\t\tEdition: 
+Workspace_10=corpus: 
+Workspace_2=** Failed to load workspace: 
+Workspace_26=\t\t\t\tPage: 
+Workspace_27=\ wordid 
+Workspace_28=\t\tScript: 
+Workspace_29=, type:  
+Workspace_3=Project: 
+Workspace_30=\tCorpora: 
+Workspace_31=\t\tText: 
+Workspace_4=\tBase: 
+Workspace_5=\t\tText: 
+Workspace_6=** Failed to create empty workspace file: 
+Workspace_7=\ pages
+Workspace_8=Workspace XML file is mal formed. We need to recreate one...

Property changes on: tmp/org.txm.utils/src/messages.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/messages_fr.properties
===================================================================
--- tmp/org.txm.utils/src/org/txm/messages_fr.properties	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/messages_fr.properties	(revision 147)
@@ -0,0 +1,542 @@
+﻿FAILED=Échec.
+DONE=Terminé.
+AbsoluteFrequency_1=Fréquence absolue
+AbstractCqiClient_2=Pas d'erreur à notifier.
+ArrayIndex_0=** Le tableau d'index ne peut pas être nul ou vide.
+ArrayIndex_1=** Un index commençant à 0 ne peut pas être inférieur à 0 ou supérieur au nombre d'éléments indexés.
+Base_0=Dossier binaire 
+Base_22=L'élément 'corpora' est absent de l'élément 'base'
+Base_3=\ n'existe pas ?
+Base_4=Le dossier parent 
+Base_5=\ n'existe pas ?
+Base_6=Erreur: linkGrp/link/@target mal formé : 
+BuildCwbEncodeArgs_0=Le fichier ''{0}'' est introuvable.
+CAH_0=Erreur durant l'export du résultat CAH : 
+CA_0=** La table lexicale n'a pas été trouvée dans l'espace de travail R.
+CA_16=** Impossible de charger la librairie 'ca'
+CA_2=** Erreur lors du calcul de l'analyse factorielle des correspondances : 
+CA_4=** Impossible d'extraire les valeurs propres 
+CHAR_VECTOR_ADDED_TO_WORKSPACE=Le vecteur "{1}" ({0,number,integer} valeurs "character") a été transmis au Moteur Statistique.
+CONNECTED_TO_STATS_MODULE= connecté.
+CONNECTING_CQI_CLIENT=Connexion au moteur de recherche avec les paramètres suivants : {0}:{1}@{2}{3}...
+CONNECTION_OK=Connexion au Moteur Statistique établie.
+CQI_CLIENT_CONNECTED=Connexion au moteur de recherche établie.
+CREATING_PART=Partie {0} créée à partir de la requête {1}
+CREATING_SUBCORPUS=Création du sous-corpus {1} à partir du corpus {0} et de la requête {2}
+CatalogManager_0=** Erreur du gestionnaire de catalogue : initialisation 
+CatalogManager_1=\ n'existe pas.
+Catalog_0=** Fichier de catalogue introuvable
+CompositeComparator_0=Composé : 
+Concordance_0=\ 
+Concordance_1=** Echec de récupération de la propriété 'text_id' des lignes 
+Concordance_12=** Echec de l'exportation de la concordance : 
+Concordance_13=Référence
+Concordance_14=ContexteGauche
+Concordance_15=Pivot
+Concordance_16=ContexteDroit
+Concordance_17=Référence
+Concordance_18=
+Concordance_19=Contexte
+Concordance_2=indéfini
+Concordance_3=\ résultats obtenus en\ 
+Concordance_4=Echec de la suppression du QueryResult de CQP: 
+Concordance_5=
+Concordance_6=Récupération 
+Concordance_7=\ résultats
+Concordance_8=Echec de la récupération des limites de texte : 
+Contrasts_0=Calcul: 
+Convert5To6_1=''{0}'' est introuvable.
+Convert5To6_10=le dossier 'registry' est manquant
+Convert5To6_11=le dossier 'html' est manquant
+Convert5To6_12=traitement en cours...
+Convert5To6_15=Reorganisation des fichiers de 
+Convert5To6_19=Lecture des informatins sur le corpus depuis le fichier import.xml : 
+Convert5To6_30=Remplissage du fichier 'import.xml' avec : 
+Convert5To6_46=traitement du fichier : 
+Convert5To6_6=Vérification du format...
+Convert5To6_7=le dossier 'txm' est manquant
+Convert5To6_8=le dossier 'html' est manquant
+Convert5To6_9=le dossier 'data' est manquant
+Cooccurrence_0=Coocurrence : 
+Cooccurrence_1=** Echec de la recherche de 'n' ou 'o' : 
+Cooccurrence_10=\ propriétés : 
+Cooccurrence_102=** Erreur : argument négatif dans la fonction 'factln'
+Cooccurrence_103=** Erreur : argument négatif dans la fonction 'rbicoln'
+Cooccurrence_105=Occ\tFréq\tCoFréq\tIndice\tDistMoy\tMode
+Cooccurrence_106=\n
+Cooccurrence_107=** Erreur : 
+Cooccurrence_11=Occ
+Cooccurrence_12=Fréq
+Cooccurrence_13=CoFréq
+Cooccurrence_14=Indice
+Cooccurrence_15=DistMoy
+Cooccurrence_16=Mode
+Cooccurrence_2=Cooc : 
+Cooccurrence_22=Erreur: ref_forms.length ! ref_freqs.length
+Cooccurrence_23=Erreur: pas de cooccurrents
+Cooccurrence_3=\ (
+Cooccurrence_4=\ F : 
+Cooccurrence_5=** Impossible de calculer des cooccurrences avec cette concordance
+Cooccurrence_6=Occ\tFréq\tCoFréq\tIndice\tDistMoy\tMode
+Cooccurrence_7=\ Occ :
+Cooccurrence_8=\ Indice:
+Cooccurrence_9=\ DistMoy:
+CorpusManager_0=** Le client CQi n'est pas initilialisé
+CorpusManager_1=** Erreur : Cette exception ne devrait pas se lever
+Corpus_12=** Echec de la restauration du sous-corpus
+Corpus_13=Corpus: getLocale: CQP est pas prêt à répondre : 
+Corpus_14=Attention: le corpus ne peut pas être chargé 
+Corpus_15= informations from workspace (selfElement  null)
+Corpus_19=** Echec de la restauration de la partition
+Corpus_2=Corpus : 
+Corpus_3=, Encodage : 
+Corpus_4=, Langue : 
+Corpus_5= Pas de valeur donnée
+Corpus_6=** Corpus : la référence au texte 
+Corpus_7=\ est manquante
+Corpus_8=\ dans
+CorrespondanceAnalysisEditorInput_21=Lignes
+CorrespondanceAnalysisEditorInput_22=Colonnes
+CorrespondanceAnalysisEditorInput_23=Q12
+CorrespondanceAnalysisEditorInput_24=Q13
+CorrespondanceAnalysisEditorInput_25=Q23
+CorrespondanceAnalysisEditorInput_26=Mass
+CorrespondanceAnalysisEditorInput_27=Dist
+CorrespondanceAnalysisEditorInput_29=Cont
+CorrespondanceAnalysisEditorInput_30=Cos\u00B2
+CorrespondanceAnalysisEditorInput_32=c1
+CorrespondanceAnalysisEditorInput_33=c2
+CorrespondanceAnalysisEditorInput_34=c3
+CorrespondanceAnalysisEditorInput_4=Facteur
+CorrespondanceAnalysisEditorInput_44=Colonnes
+CorrespondanceAnalysisEditorInput_46=Q12
+CorrespondanceAnalysisEditorInput_47=Q13
+CorrespondanceAnalysisEditorInput_48=Q23
+CorrespondanceAnalysisEditorInput_49=Mass
+CorrespondanceAnalysisEditorInput_5=Valeurs propres
+CorrespondanceAnalysisEditorInput_50=Dist
+CorrespondanceAnalysisEditorInput_52=Cont
+CorrespondanceAnalysisEditorInput_53=Cos\u00B2
+CorrespondanceAnalysisEditorInput_55=c1
+CorrespondanceAnalysisEditorInput_56=c2
+CorrespondanceAnalysisEditorInput_57=c3
+CqiClient_0=Récupération de la dernière erreur CQP
+CqiClient_1=Lecture de CQI CTRL LAST GENERAL ERROR
+CqiClient_3=** Echec de la lecture de la dernière erreur CQP
+CqiClient_32=Moteur de recherche lancé...
+CqiClient_33=** La connexion au moteur de recherche a échoué.
+CqiClient_34=Moteur de recherche lancé.
+CwbEncode_0=le dossier n'existe pas :
+CwbEncode_21=Le dossier "bin" n'existe pas : 
+CwbEncode_23=Le dossier "registry" n'existe pas : 
+CwbEncode_25=Le dossier "corpora" n'existe pas :
+CwbEncode_27=Traitement du corpus 
+CwbEncode_29=Le dossier "data" n'existe pas :
+CwbEncode_32=Patch le fichier registry {0} avec {1}
+CwbProcess_1=Démarrage avec la ligne de commande : 
+CwbProcess_3=Arrêt en cours du processus : 
+CwbProcess_4=Processus arrêté : 
+CwbProcess_5=** Echec de localisation de CQP : 
+DOUBLE_VECTOR_ADDED_TO_WORKSPACE=Le vecteur "{1}" ({0,number,integer} valeurs numériques "doubles") a été transmis au Moteur Statistique.
+DROP_PARTITION=Suppression de la partition {0}
+DROP_QUERYRESULT=Suppression du résultat de requête {0}
+DROP_SUBCORPUS=Suppression du sous-corpus {0}
+Diagnostic_0=<h3>Propriétés des structures\n
+Diagnostic_1=** Echec d'accès au corpus
+Diagnostic_10=Nom de la partition : 
+Diagnostic_11=\ structures
+Diagnostic_12=Nombre de parties :
+Diagnostic_13=Taille de la partition : 
+Diagnostic_14=Propriétés des unités lexicales (max {0} valeurs)
+Diagnostic_15=Numéro de la partie : 
+Diagnostic_16=Nombre d'unités de structure 
+Diagnostic_17=Nom des parties : 
+Diagnostic_18=Taille des parties : 
+Diagnostic_19=Propriétés des parties : 
+Diagnostic_2=** Erreur
+Diagnostic_20=Requêtes de parties : 
+Diagnostic_22=Propriétés des structures (max {0} valeurs)
+Diagnostic_23=\ valeurs)
+Diagnostic_26=Pas de propriété
+Diagnostic_3=Description du corpus 
+Diagnostic_4=\ propriétés
+Diagnostic_40=* Statistiques Générales\n
+Diagnostic_41=- T
+Diagnostic_43=- Propriétés de mot 
+Diagnostic_49=- S
+Diagnostic_5=Statistiques Générales
+Diagnostic_6=** Echec d'accès au corpus
+Diagnostic_7=Nombre de mots 
+Diagnostic_8=\ lexique
+Diagnostic_9=Nombre de propriétés de mot 
+END_SUBCORPUS_LEXICON=Lexique du sous-corpus {0} calculé en {1} ms
+END_SUBCORPUS_SIZE=Taille du sous-corpus {0} ({1}) calculée en {2} ms
+ERROR_EXTRACT_ITEM=** Erreur lors de l'extraction de la liste d'items : 	
+EVALUATED_EXPRESSION=L''expression ''{0}'' a été évaluée.
+ExecTimer_0=\ msec
+ExecTimer_1=\ sec
+ExecTimer_2=\ min et 
+ExecTimer_3=h, 
+FAILED_INIT_CONNECTION_R=** Echec de connexion au serveur statistique.
+FactoMineRCA_2=** Echec d'accès à la colonne des contributions : 
+FactoMineRCA_3=** Echec d'accès à la colonne des cos\u00B2 : 
+FactoMineRCA_4=** Echec d'accès à la ligne des contributions : 
+FactoMineRCA_5=** Echec d'accès à la ligne des cos\u00B2 : 
+Factor_0=** Non implémenté
+FileCopy_0=** Copie de fichiers : échec d'accès à la source : 
+FileCopy_2=** Copie de fichiers : droits d'accès insuffisants à la source : 
+FileCopy_4=** Copie de fichiers : échec de création du dossier : 
+FilterManager_0=** Erreur du gestionnaire de filtre : initialisation 
+FilterManager_1=\ n'existe pas.
+Filter_7=** Erreur de lecture
+Focus_1=** Le focus est vide ou nul.
+GroovyImportScriptRunner_0=Initialisation de GroovyImportScriptRunner
+GroovyImportScriptRunner_1=> début de l'exécution de 
+GroovyImportScriptRunner_3=> fin de l'exécution
+INT_VECTOR_ADDED_TO_WORKSPACE=Le vecteur "{1}" ({0,number,integer} valeurs numériques "entières") a été transmis au Moteur Statistique.
+InternalView_3=\ \ Information des structures :
+InternalView_6=InternalView: erreur lors de la récupération des valeurs des propriétés de structure
+InternalView_7=\ \ No d'informations sur les structures
+LEXICON=Lexique
+LEXICON_ADDED=Le lexique "{1}" ({0,number,integer} entrées) a été transmis au Moteur Statistique.
+LIBBRARY_NOT_LOADED=LA librairie {0} n''a pu être chargée : {1}
+LS_0=Erreur : 
+LS_1=\ n'est pas un dossier
+LexicalTableImpl_0=
+LexicalTableImpl_1=Construction de la table lexicale avec : 
+LexicalTableImpl_10=colonnes
+LexicalTableImpl_12=Erreur: les marges
+LexicalTableImpl_13=\ sont plus grandes que la taille des parties
+LexicalTableImpl_3=\ <sans partition> /
+LexicalTableImpl_5=pas assez de colonnes : minimum 2 (ici : 
+LexicalTableImpl_8=ligne
+LexicalTableImpl_9= n'a pas 
+LexicographicKeywordComparator_0=Pivot
+LexicographicLeftContextComparator_0=Contexte gauche
+LexicographicRightContextComparator_0=Contexte droit
+Lexicon_0=Le tableau des formes et des fréquences doivent avoir la même longueur.
+Lexicon_3=Lexique :
+Localizer_0=[Traduction manquante] 
+Localizer_1=messages
+Log_3=Copie des messages dans 
+Log_5=Ecriture des messages dans
+Log_8=\nstack:\n
+MATRIX_ADDED_TO_WORKSPACE=La matrice "{2}" ({0,number,integer} lignes et {1,number,integer} colonnes) a été transmise au Moteur Statistique.
+MainCorpus_0=\ n'est pas un identifiant de corpus CQP valide. Il doit être en majuscule.
+MainCorpus_1=\ dans
+MainCorpus_2=Suppression du dossier de corpus binaire : 
+MatrixImpl_0=Une variable ("
+MatrixImpl_1=") n'existe pas dans l'espace de travail R.
+MatrixImpl_10=Index de ligne (
+MatrixImpl_11=) trop grand (max 
+MatrixImpl_13=Index de colonne (
+MatrixImpl_14=) trop grand (max 
+MatrixImpl_19=L'objet R a une valeur nulle.
+MatrixImpl_2=dim(
+MatrixImpl_20=Type inconnu : 
+MatrixImpl_21=mode
+MatrixImpl_22=Index de ligne (
+MatrixImpl_23=) trop grand (max 
+MatrixImpl_28=Index de colonne (
+MatrixImpl_29=) trop grand (max 
+MatrixImpl_4=Les noms de lignes d'une matrice de contingence ne peuvent pas être nuls.
+MatrixImpl_5=La dimension du vecteur des noms de lignes doit être égale au nombre de lignes de la matrice.
+MatrixImpl_6=Les noms de colonnes d'une matrice de contingence ne peuvent pas être nuls.
+MatrixImpl_67=Matrice: impossible d'obtenir le nombre de lignes: 
+MatrixImpl_7=La dimension du vecteur des noms de colonnes doit être égale au nombre de colonnes de la matrice (
+MatrixImpl_73=MatrixImpl: Erreur: la taille des colonnes diffère de l'originale
+MatrixImpl_79=Impossible d'obtenir les noms de lignes
+MatrixImpl_88=Impossible de supprimer toutes les lignes
+MemCqiClient_0=Erreur interne CQi : 
+MemCqiClient_1=Erreur 
+MemCqiClient_10=Codes CQP inconnus : b1 
+MemCqiClient_11=Erreur de requête
+MemCqiClient_2=Attention 
+MemCqiClient_3=Erreur CQP inconnue : b1 
+MemCqiClient_5=Erreur CQP cqi inconnue : b1 
+MemCqiClient_7=Code CQP inconnu : b1 
+MemCqiClient_9= b2 
+MessageBox_0=Erreur
+MessageBox_1=Attention
+MessageBox_2=Information
+NEW_PARTION=Création d''une nouvelle partition du corpus {0} : {1}
+NOT_FOUND_IN_R=) n'a pas été trouvé dans l'espace de travail R.
+NetCqiClient_1=Dernière erreur Cqi : 
+NetCqiClient_3=Dernière erreur CQP
+NetCqiClient_5=Echec de la reconnexion auserveur : 
+NetCqiClient_97=client.dumpSubCorpus(subcorpus, NetCqiClient.CQI_CONST_FIELD_MATCH, 1, 2) : 
+NetCqiServer_0=** cqpserver stdout: 
+NetCqiServer_1=** cqpserver stderr: 
+NullComparator_0=Aucun
+PACKAGE_LOADED=Bibliothèque {0} chargée.
+PARTITION_CREATED=Partition {0} créée en {1} ms
+PART_CREATED=Partie {0} créée en {1} ms
+Page_3=** URL mal formée, fichier 
+Pair_0=\ devrait valoir faux
+Pair_1=\ devrait valoir vrai
+PartitionFocus_1=Le focus ne doit pas être vide ou nul.
+PartitionFocus_2=Le focus est vide ou nul
+PartitionFocus_3=Le focus de la partie {0} n''appartient pas à la partition {1}.
+PartitionFocus_4=** Nom de partition inconnu.
+Partition_1=\ dans
+Partition_18=Erreur lors de la récupération de la dernière erreur CQP : 
+Partition_2=\ dans
+Partition_21=Attention : la partition n'a pu être sauvegardée
+Partition_4=\ requête : 
+Partition_9=** Echec de la création de la partie :
+PatchCwbRegistry_0=Mise à jour du registre du corpus "{0}"
+PatchCwbRegistry_1='
+PatchCwbRegistry_13=Le fichier registry source n'existe pas
+PatchCwbRegistry_16=Le fichier 'registry' est introuvable
+PatchCwbRegistry_2=Mise à jour du corpus 
+PatchCwbRegistry_23= pour l'encodage 
+PatchCwbRegistry_27=dossier 'data'
+PatchCwbRegistry_28=Erreur lors de la reécriture du fichier 'registry'
+PatchCwbRegistry_29= n'a pu être trouvé dans 
+PatchCwbRegistry_3=** Le corpus cible n'existe pas
+PatchCwbRegistry_34=Mise à jour de la langue du corpus 
+PatchCwbRegistry_35= à 
+PatchCwbRegistry_4=Ajout au corpus 
+PatchCwbRegistry_5= de l'attribut d'alignement 
+Project_0=Utiliser le nom de dossier pour générer la déclaration de corpus
+Project_1=Le fichier de déclaration de corpus n'a pas été trouvé
+Project_10=Project.load: erreur dans le fichier XML du workspace: 
+Project_11=Erreur lors  de la récupération des 
+Project_12=Chargement du corpus {0}...
+Project_13=Ajout des textes : 
+Project_14=Erreur : le fichier 'import.xml' ne contient pas de version
+Project_15=Erreur : la version du fichier 'import.xml' est trop ancienne pour que le corpus soit chargé
+Project_16=Le nom de corpus a été changé de {0} à {1} 
+Project_17=Erreur : le corpus ne sera pas chargé
+Project_18=Paramètres : 
+Project_2=Attention, l''attribut ''name'' du corpus n''est pas défini dans la définition XML du fichier {0}.
+Project_25=Erreur : le dossier 'registry' n'existe pas
+Project_26=** Erreur : le dossier d'entrée n'est pas conforme au format de corpus binaire de TXM :  
+Project_27=Erreur lors de la reécriture du fichier 'registry' : 
+Project_28=TXM a besoin des dossiers suivants : 
+Project_3=Attention : deux corpus partagent le même identifiant (@name) dans leur fichier de configuration : {0}
+Project_31= et le fichier
+Project_4=Suppression des doublons de la liste des corpus:
+Project_5=Analyse du dossier...
+Project_6=Erreur lors du chargement du corpus avec : 
+Project_7=Erreur lors du chargement du corpus avec : 
+Project_8=Le fichier de paramétrage de corpus est introuvable (ou illisible). : {0}. Le corpus correspondant ne sera pas disponible. 
+Project_9= base
+PropertiesReferenceComparator_0=Références
+QUERY=Requête sur {0} : {1} <- {2}
+QUERYING_PARTITION=Requête sur la partition {0}
+QuantitativeDataStructureImpl_0=Aucun objet de nom "
+QuantitativeDataStructureImpl_1=" dans l'espace de travail
+QuantitativeDataStructureImpl_2=** Impossible de supprimer un objet qui n'existe pas.
+QueryIndex_2=Attention : requête dupliquée : 
+QueryIndex_3=Attention: échec de la requête:
+QueryResult_0=\ n'est pas un identifiant de sous-corpus CQP valide. Il doit être en majuscules suivies de caractères minuscules.
+READING_2D_INT_ARRAY_FROM_CQI_SERVER=Lecture d'un tableau d'entiers du serveur CQi
+READING_BOOLEAN_FROM_CQI_SERVER=Lecture d'un booléen du serveur CQi
+READING_HEADER_FROM_CQI_SERVER=Lecture d'une entête du serveur CQi
+READING_INTEGER_FROM_CQI_SERVER=Lecture d'un entier du serveur CQi
+READING_INT_ARRAY_FROM_CQI_SERVER=Lecture d'un tableau d'entiers du serveur CQi
+READING_STRING_ARRAY_FROM_CQI_SERVER=Lecture d'un tableau de chaines du serveur CQi
+READING_STRING_FROM_CQI_SERVER=Lecture d'une chaine du serveur CQi
+READ_2D_INT_ARRAY_FROM_CQI_SERVER=Tableau d''entiers reçu du serveur CQi : {0}
+READ_BOOLEAN_FROM_CQI_SERVER=Booléen reçu du serveur CQi : {0}
+READ_BYTE_FROM_CQI_SERVER=Octet reçu du serveur CQi : {0}
+READ_HEADER_FROM_CQI_SERVER=Entête reçue du serveur CQi : {0}
+READ_INTEGER_FROM_CQI_SERVER=Entier reçu du serveur CQi : {0}
+READ_INT_ARRAY_FROM_CQI_SERVER=Tableau d''entiers reçu du serveur CQi : {0}
+READ_STRING_ARRAY_FROM_CQI_SERVER=Tableau de chaines reçu du serveur CQi : {0}
+READ_STRING_FROM_CQI_SERVER=Chaine reçue du serveur CQi : {0}
+REQUESTED_OBJECT=L'objet demandé (
+RETURNING_CACHED_LEXICON=Recyclage du lexique {0}
+RETURN_FROM_QUERY={0} occurrences trouvées en {1} ms
+RException_0=** Erreur R : "
+RException_1="
+RException_2=\n lors de l'évaluation de :
+RSERVE_ACTIVATED=Moteur Statistique lancé 
+RSERVE_PATH_NOT_SET_ERROR=** Le chemin du programme du serveur statistique n'a pas été renseigné et sa recherche a échoué
+RSERVE_PATH_SET_ERROR=** Le chemin du programme du serveur statistique a été renseigné mais sa recherche a échoué
+RWorkspace_0=** Echec de connexion à l'espace de travail R 
+RWorkspace_1=** Erreur d'évaluation : 
+RWorkspace_10=Démarrage de R avec le chemin d'accès: 
+RWorkspace_11=Dernier 'safeeval'
+RWorkspace_2=tentative de connexion à R : 
+RWorkspace_21=Commande complète : 
+RWorkspace_3=Sauvegarde du graphique dans le fichier 
+RWorkspace_4=
+RWorkspace_5=
+RWorkspace_6=** Echec de l'initialisation du transfert : 
+RWorkspace_7=La matrice est vide
+RWorkspace_8=Impossible de démarrer RServe : 
+R_EXPR=Expression transmise au Moteur Statistique pour évaluation : {0}.
+R_READ_CONSOLE=Le Moteur Statistique attend une réponse de la console ({0}, {1}).
+R_SAVE_HISTORY=Le Moteur Statistique a sauvegardé un historique ({0}).
+R_SHOW_MESSAGE=Le Moteur Statistique a affiché ce message : {0}.
+R_WRITE_CONSOLE=Le Moteur Statistique a afiché ce message dans la console: {0}.
+ReferencePattern_3=Référence
+Referencer_1=Références
+Referencer_2=Références : l'export a échoué :  
+RelativeFrequency_3=Fréquence Relative %
+Progression_1=Erreur la taille du sous-corpus est 0
+Progression_10= dans
+Progression_11= (densité)
+Progression_12=structure : 
+Progression_13=, propriété : 
+Progression_14=, valeur 
+Progression_2=Attention, le corpus est discontinu
+Progression_3=Erreur la taille du sous-corpus est 0
+Progression_9=Progression de
+SERVER_STARTED=Moteur de recherche lancé 
+SERVER_STOPED=Moteur de recherche arrêté
+STARTING_SERVER=Lancement du moteur de recherche : {0}
+STOPING_SERVER=Arrêt du moteur de recherche
+SUBCORPUS_CREATED=Sous-corpus {0} créé en {1} ms
+SUBCORPUS_LEXICON=Calcul du lexique du sous-corpus {0}
+SUBCORPUS_SIZE=Calcul de la taille du sous-corpus {0}
+Selection_0=\ nombre de mots : 
+Selection_1=\ nombre de textes : 
+Selection_2=\ valeur : 
+Selection_26=Echec de la récupération des valeurs de structures de
+Selection_3=Propriété : 
+Selection_4=nombre de mots : 
+Selection_5=Métadonnées de textes : 
+Selection_6=Erreur : le corpus
+Selection_7=n'a pas de 'Base'
+Selection_8=Erreur : pas de structures trouvées pour la métadonnée d'identifiant : 
+Selection_9=Erreur lors de la récupération des metadonnées du corpus
+Sh_4=Le processus a terminé avec le code d'erreur : 
+SpecificitesResult_0=** Pas de tableau d'index de spécificité
+SpecificitesResult_1=** Le tableau d'index des spécificités ne correspond pas à une matrice
+SpecificitesResult_10=** Référence à une colonne inexistante.
+SpecificitesResult_2=** La table lexicale ne peut être nulle.
+SpecificitesResult_3=** Le nombre lignes prévu (
+SpecificitesResult_4=) et trouvé (
+SpecificitesResult_5=) ne correspondent pas
+SpecificitesResult_6=** Référence à une ligne inexistante
+SpecificitesResult_7=** Le nombre de colonnes données et le nombre de colonnes trouvées sont différents (
+SpecificitesResult_8=Unité
+Specificites_0=** Il faut au moins 2 parties pour calculer des spécificités
+Specificites_1=** Echec d'accès aux spécificités : 
+Specificites_2=\ spécificités calculées
+StartRserve_0=Démarrage de R avec la ligne de commande: 
+StartRserve_2=Chemin d'accès à R non fourni, tentative de résolution...
+StartRserve_21=** Echec du lancement de Rserve avec la commande : 
+StartRserve_22=Moteur statistique lancé
+StartRserve_28=** Echec du lancement de REG pour localiser le programme R
+StartRserve_29=\ Vous avez besoin du logiciel 'R' et de configurer ses chemins via la fenêtre de préférences 'Outils/Préférences'
+StartRserve_3=Rserve déja démarré sur le port 
+StartRserve_4=Essai du chemin de R : 'R'
+StartRserve_6=Essai du chemin de R : 
+StreamGobbler_0=Initialisation de l'enregistreur de journal
+StreamGobbler_1=démarrage de l'enregistreur de journal
+StreamGobbler_2=Arrêt de l'enregistreur de journal
+StreamGobbler_3=Interruption de l'enregistreur de journal
+StructuralUnitProperty_0=** Echec de lecture des valeurs de la propriété de structure 
+Subcorpus_1=\ dans
+Subcorpus_2=Attention : le sous-corpus n'a pu être sauvegardé.
+Subcorpus_3=\ n'est pas un identifiant de sous-corpus CQP valide. Il doit être en majuscules suivies de caractères minuscules.
+Summary_13=Erreur : text
+Summary_14= a pour valeur  'null'
+Summary_15=Erreur : edition a pour valeur 'null'
+Summary_16=Erreur : textids
+Summary_17= et wordids
+TSCmd_30=La requête était : 
+TSCmd_31= résultats trouvés
+TSCorpusManager_0=Erreur dans le dossier registre :
+TSCorpusManager_1=Erreur dans le dossier de configuration : 
+TSCorpus_0=Erreur : le corpus n'a pas les droits de lecture
+TSResult_0=Nombre de match
+TSResult_13=Erreur : le fichier tigerXML est introuvable : 
+TSResult_14=Erreur : la concordance n'a pu être enregistré dans le fichier XML
+TSResult_18=Début de l'injection
+TSResult_2=Nombre de sous graph
+TSResult_7=Erreur : la méthode d'export 
+TSResult_8=est introuvable
+TigerXmlIndexing_2=Erreur : n'existe pas
+TigerXmlIndexing_3=Erreur : n'a pas les droits de lecture
+TigerXmlIndexing_6=IO :
+TigerXmlIndexing_7=SAX : 
+Toolbox_0=** Le fichier 
+Toolbox_1=** Plateforme : les paramètres SERVER_PATH_TO_EXECUTABLE, SERVER_PATH_TO_REGISTRY et SERVER_PATH_TO_INIT_FILE doivent être renseignés dans le fichier '.properties' donné à la plateforme 
+Toolbox_10=** Pas d'espace de travail trouvé, création d'un nouvel espace de travail dans le dossier 
+Toolbox_11=Mis à jour avec : 
+Toolbox_12=Chargement de l'espace de travail à partir du fichier 
+Toolbox_14=** Echec de lecture de l'espace de travail à partir du fichier 
+Toolbox_15=** Erreur :
+Toolbox_16=\ n'existe pas.
+Toolbox_17=Fin du test d'attente de CQP
+Toolbox_18=** Echec du test d'attente de CQP : 
+Toolbox_2=** Erreur : valeur nulle pour la clé 
+Toolbox_21=\ R :
+Toolbox_22=\ Espace de travail : 
+Toolbox_23=Démarrage du moteur de statistiques par l'utilisateur : 
+Toolbox_24=\ distant : 
+Toolbox_25=\ port : 
+Toolbox_26=** Echec de connexion au moteur de recherche avec les paramètres suivants : 
+Toolbox_27=\ et  
+Toolbox_28=Erreur lors du démarage du mode mémoire de CQP
+Toolbox_29=** Échec de la connexion au moteur de recherche : 
+Toolbox_3=vrai
+Toolbox_30=- mauvais login/mot de passe/nom de machine/port :
+Toolbox_31=Echec de la commande 'taskkill /IM cqpserver.exe /F': 
+Toolbox_33=- ou le moteur de recherche n'a pas été lancé avec la ligne de commande : 
+Toolbox_34=Echec de la commande 'tskill cqpserver.exe': 
+Toolbox_35=** La connexion au moteur statistique a échoué
+Toolbox_37=kill `ps aux | grep cqpserver | awk '/-P 
+Toolbox_38=/ {print $2}'`
+Toolbox_39=Echec de l'exécution de '
+Toolbox_4=Avec les paramètres suivants :
+Toolbox_40=' :
+Toolbox_43=Echec de la commande 'taskkill /IM Rserve.exe /F': 
+Toolbox_45=Echec de la commande 'tskill Rserve.exe': 
+Toolbox_47=Echec de la commande 'killall -9 Rserve-bin.so': 
+Toolbox_5= debug: 
+Toolbox_7=Le chemin vers le programme R est null
+Toolbox_8=Clés non définies :
+Toolbox_9=Paramètres de la plateforme :
+Toolbox_connected_to_corpus_sever=connecté.
+Toolbox_wait_failed=** Echec de l'attente du processus interrompu
+Toolbox_workspace_init=Chargement des sous-corpus et des partitions...
+Toolbox_workspace_init_failed=** Echec de l'initialisation de l'espace de travail : 
+Toolbox_wrong_port=** La connexion au moteur de recherche a échoué : le port fourni en paramètre n'est pas un nombre entier
+TxmObject_0=** Echec de l'accès à l'objet parent
+TxmObject_1=TxmObject : delete : l'objet parent est nul
+TxmObject_2=Erreur de la sauvegarde de l'attribut
+TxmRenderer_1=TxmRenderer: erreur: pas de corpus trouvé
+TxmRenderer_5=ligne : 
+TxmRenderer_6=prop
+TxmRenderer_7=mdc :
+VARIABLE_REMOVED=La variable R "{0}" a été supprimée.
+ValidateXml_0=Validation XML : 
+ValidateXml_1=est un dossier
+ValidateXml_2=n'existe pas
+ValidateXml_3=n'a pas les bon droits de lecture
+VectorizeArray_0=** Rien à faire avec une matrice vide
+VectorizeArray_1=** Les tableaux internes doivent avoir une dimension supérieure à 0
+VectorizeArray_10=** Un tableau interne ne peut pas être nul
+VectorizeArray_11=** Les tableaux internes n'ont pas tous la même dimension.
+VectorizeArray_3=** Les tableaux internes n'ont pas tous la même dimension.
+VectorizeArray_4=** Rien à faire avec une matrice vide
+VectorizeArray_5=** Les tableaux internes doivent avoir une dimension supérieure à 0
+VectorizeArray_7=* Les tableaux internes n'ont pas tous la même dimension.
+VectorizeArray_8=** Rien à faire avec une matrice vide
+VectorizeArray_9=** Les tableaux internes doivent avoir une dimension supérieure à 0
+Index_0=** Erreur lors du calcul du lexique : \n
+Index_1=console : 
+Index_7=** Echec de l'exportation du Lexique : 
+WORKSPACE_PURGED=Moteur Statistique nettoyé.
+Workspace_0=, index 
+Workspace_1=\t\t\tÉdition : 
+Workspace_10=corpus :
+Workspace_2=** Echec du chargement de l'espace de travail :
+Workspace_26=\t\t\t\tPage : 
+Workspace_27=\ identifiant de mot 
+Workspace_28=\t\tScript : 
+Workspace_29=, type :  
+Workspace_3=Projet : 
+Workspace_30=\tCorpus : 
+Workspace_31=\t\tTexte : 
+Workspace_4=\tBase : 
+Workspace_5=\t\tTexte : 
+Workspace_6=** Echec de la création du fichier d'espace de travail : 
+Workspace_7=\ pages
+Workspace_8=Le fichier XML d'espace de travail est mal formé. Un nouveau doit être regénéré...

Property changes on: tmp/org.txm.utils/src/org/txm/messages_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/CharsetDetector.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/CharsetDetector.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/CharsetDetector.java	(revision 147)
@@ -0,0 +1,93 @@
+package org.txm.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.LinkedHashMap;
+
+import org.mozilla.universalchardet.CharsetListener;
+import org.mozilla.universalchardet.UniversalDetector;
+
+public class CharsetDetector {
+	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())
+			processDirectory(file);
+		else
+			try {
+				processFile(file);
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				org.txm.utils.logger.Log.printStackTrace(e);
+			}
+	}
+	
+	private void processDirectory(File dir)
+	{
+		for (File file : dir.listFiles()) {
+			if (file.isFile()) {
+				try {
+					processFile(file);
+				} catch (IOException e) {
+					// TODO Auto-generated catch block
+					org.txm.utils.logger.Log.printStackTrace(e);
+				}
+			}
+		}
+	}
+	
+	String guessedCharset = System.getProperty("file.encoding"); //$NON-NLS-1$
+	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();
+
+		if(!encodings.containsKey(guessedCharset))
+			encodings.put(guessedCharset, 0);
+		encodings.put(guessedCharset, encodings.get(guessedCharset)+1);
+	}
+	
+	public String getEncoding()
+	{
+		int max = 0;
+		for(String s : encodings.keySet())
+		{
+			if(max < encodings.get(s))
+			{
+				max = encodings.get(s);
+				encoding = s;
+			}
+		}
+		return encoding;
+	}
+	
+	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());
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/CharsetDetector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/ExecTimer.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/ExecTimer.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/ExecTimer.java	(revision 147)
@@ -0,0 +1,43 @@
+package org.txm.utils;
+
+import java.util.Date;
+
+import org.txm.Messages;
+
+public class ExecTimer {
+	static long startTime = 0, endTime = 0;
+	static String message = ""; //$NON-NLS-1$
+	public static void start() {
+		startTime = new Date().getTime();
+	}
+
+	public static String stop() {
+		endTime = new Date().getTime();
+		return setMessage(endTime - startTime);
+	}
+
+	static float t;
+	private static String setMessage(float time) {
+		t = time;
+		if (t < 1000) {
+			message = ""+((int)t)+Messages.ExecTimer_0; //$NON-NLS-1$
+		}
+		else {
+			t = t/1000;
+			if (t < 3) {
+				message = ""+t; //$NON-NLS-1$
+				message = ""+(message.substring(0, 3))+Messages.ExecTimer_1; //$NON-NLS-1$
+			} else if (t < 60) 
+				message = ""+((int)t)+Messages.ExecTimer_1; //$NON-NLS-1$
+			else if (t < 3600) 
+				message = ""+((int)t/60)+Messages.ExecTimer_2+((int)t%60)+Messages.ExecTimer_1; //$NON-NLS-1$
+			else 
+				message = ""+((int)t/3600)+Messages.ExecTimer_3+((int)(t%3600)/60)+Messages.ExecTimer_2+((int)(t%3600)%60)+ Messages.ExecTimer_1; //$NON-NLS-1$
+		}
+		return message + " ("+(int)time+" ms)"; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	public static String getMessage() {
+		return message;
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/ExecTimer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/DiffPrint.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/DiffPrint.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/DiffPrint.java	(revision 147)
@@ -0,0 +1,608 @@
+package org.txm.utils;
+/*
+ * $Log: DiffPrint.java,v $
+ * Revision 1.10  2009/04/20 18:53:29  stuart
+ * Make print_header public.
+ *
+ * Revision 1.9  2009/01/19 03:05:26  stuart
+ * Fix StackOverflow bug with heuristic on reported by Jimmy Han.
+ *
+ * Revision 1.8  2007/12/20 05:04:21  stuart
+ * Can no longer import from default package.
+ *
+ * Revision 1.7  2007/12/20 04:29:53  stuart
+ * Fix setupOutput permission.  Thanks to Sargon Benjamin
+ *
+ * Revision 1.6  2005/04/27 02:13:40  stuart
+ * Add Str.dup()
+ *
+ * Revision 1.5  2004/01/29 02:35:35  stuart
+ * Test for out of bounds exception in UnifiedPrint.print_hunk.
+ * Add setOutput() to DiffPrint.Base.
+ *
+ * Revision 1.4  2003/04/22  01:50:47  stuart
+ * add Unified format diff
+ *
+ * Revision 1.3  2003/04/22  01:00:32  stuart
+ * added context diff format
+ *
+ * Revision 1.2  2000/03/02  16:59:54  stuart
+ * add GPL
+ *
+ */
+
+import java.io.*;
+import java.util.Vector;
+import java.util.Date;
+
+interface UnaryPredicate {
+  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.
+ */
+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;
+
+    /** Set to the lines of the files being compared.
+     */
+    protected Object[] file0, file1;
+
+    /** 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;
+
+      while (next != null)
+	{
+	  Diff.change t, end;
+
+	  /* Find a set of changes that belong together.  */
+	  t = next;
+	  end = hunkfun(next);
+
+	  /* 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);
+
+	  /* Print this hunk.  */
+	  print_hunk(t);
+
+	  /* Reconnect the script so it will all be freed properly.  */
+	  end.link = next;
+	}
+	outfile.flush();
+    }
+
+    /** Called with the tail of the script
+       and returns the last link that belongs together with the start
+       of the tail. */
+
+    protected Diff.change hunkfun(Diff.change hunk) {
+      return hunk;
+    }
+
+    protected int first0, last0, first1, last1, deletes, inserts;
+
+    /** 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.  */
+
+    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);
+
+      show_from = show_to = 0;
+
+      f0 = hunk.line0;
+      f1 = hunk.line1;
+
+      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;
+	}
+
+      first0 = f0;
+      last0 = l0;
+      first1 = f1;
+      last1 = l1;
+
+      /* If all inserted or deleted lines are ignorable,
+	 tell the caller to ignore this hunk.  */
+
+      if (!nontrivial)
+	show_from = show_to = 0;
+
+      deletes = show_from;
+      inserts = show_to;
+    }
+
+    /** 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();
+    }
+
+    protected abstract void print_hunk(Diff.change hunk);
+    
+    protected void print_1_line(String pre,Object linbuf) {
+      outfile.println(pre + linbuf.toString());
+    }
+
+    /** 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.  */
+
+    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);
+    }
+
+    public static char change_letter(int inserts, int deletes) {
+      if (inserts == 0)
+	return 'd';
+      else if (deletes == 0)
+	return 'a';
+      else
+	return 'c';
+    }
+  }
+
+  /** Print a change list in the standard diff format.
+   */
+  public static class NormalPrint extends Base {
+
+    public NormalPrint(Object[] a,Object[] b) {
+      super(a,b);
+    }
+
+    /** Print a hunk of a normal diff.
+       This is a contiguous portion of a complete edit script,
+       describing changes in consecutive lines.  */
+
+    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;
+
+      /* 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();
+
+      /* Print the lines that the first file has.  */
+      if (deletes != 0)
+	for (int i = first0; i <= last0; i++)
+	  print_1_line ("< ", file0[i]);
+
+      if (inserts != 0 && deletes != 0)
+	outfile.println("---");
+
+      /* Print the lines that the second file has.  */
+      if (inserts != 0)
+	for (int i = first1; i <= last1; i++)
+	  print_1_line ("> ", file1[i]);
+    }
+  }
+
+  /** 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 {
+
+    public EdPrint(Object[] a,Object[] b) {
+      super(a,b);
+    }
+
+    /** Print a hunk of an ed diff */
+    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;
+
+      /* Print out the line number header for this hunk */
+      print_number_range (',', first0, last0);
+      outfile.println(change_letter(inserts, deletes));
+
+      /* 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 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(".");
+	}
+    }
+  }
+
+  /** 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;
+
+    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());
+    }
+
+    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;
+    }
+
+    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) {
+
+      /* Determine range of line numbers involved in each file.  */
+
+      analyze_hunk (hunk);
+
+      if (deletes == 0 && inserts == 0)
+	return;
+
+      /* 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);
+
+
+      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);
+
+      outfile.println();
+      outfile.print("*** ");
+      print_number_range (',', first0, last0);
+      outfile.println(" ****");
+
+      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.  */
+
+	  while (next != null && next.line0 + next.deleted <= i)
+	    next = next.link;
+
+	  /* 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) ? "!" : "-";
+
+	  print_1_line (prefix, file0[i]);
+	}
+      }
+
+      outfile.print("--- ");
+      print_number_range (',', first1, last1);
+      outfile.println(" ----");
+
+      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.  */
+
+	  while (next != null && next.line1 + next.inserted <= i)
+	    next = next.link;
+
+	  /* 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) ? "!" : "+";
+
+	  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 {
+
+    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);
+    }
+
+    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);
+    }
+
+    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;
+
+      /* 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);
+
+      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);
+
+      outfile.println();
+
+      Diff.change next = hunk;
+      int i = first0;
+      int j = first1;
+
+      while (i <= last0 || j <= last1) {
+
+	/* 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. */
+
+	  int k = next.deleted;
+	  while (k-- > 0) {
+	    outfile.print('-');
+	    print_1_line ("", file0[i++]);
+	  }
+
+	  /* Then output the inserted part. */
+
+	  k = next.inserted;
+	  while (k-- > 0) {
+	    outfile.print('+');
+	    print_1_line ("", file1[j++]);
+	  }
+
+	  /* We're done with this hunk, so on to the next! */
+
+	  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);
+    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;
+	  }
+	}
+      }
+    }
+    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);
+    }
+  }
+
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/DiffPrint.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/IOUtils.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/IOUtils.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/IOUtils.java	(revision 147)
@@ -0,0 +1,82 @@
+package org.txm.utils;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+
+import org.txm.utils.i18n.DetectBOM;
+
+public class IOUtils {
+	public static final String UTF8 = "UTF-8";
+
+	public static BufferedReader getReader(File file) throws UnsupportedEncodingException, FileNotFoundException {
+		return getReader(file, UTF8);
+	}
+
+	public static BufferedReader getReader(File file, String encoding) throws UnsupportedEncodingException, FileNotFoundException {
+		FileInputStream input = new FileInputStream(file);
+		DetectBOM db = new DetectBOM(file);
+		for (int ibom = 0 ; ibom < db.getBOMSize() ; ibom++)
+			try {
+				input.read();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		return new BufferedReader(new InputStreamReader(input , "UTF-8")); //$NON-NLS-1$
+	}
+
+	public static BufferedReader getReader(String file) throws UnsupportedEncodingException, FileNotFoundException {
+		return getReader(new File(file), UTF8);
+	}
+
+	public static String getText(File xmlWFile, String string) throws IOException {
+		BufferedReader reader = getReader(xmlWFile);
+		StringBuilder builder = new StringBuilder();
+		try{
+			String line = reader.readLine();
+			while (line != null) {
+				builder.append(line);
+				line = reader.readLine();
+				if (line != null) builder.append("\n");
+			}
+		} finally {
+			reader.close();
+		}
+		return builder.toString();
+	}
+
+	public static PrintWriter getWriter(File file) throws UnsupportedEncodingException, FileNotFoundException {
+		return getWriter(file, UTF8);
+	}
+
+	public static PrintWriter getWriter(File file, String encoding) throws UnsupportedEncodingException, FileNotFoundException {
+		return getWriter(file, encoding, false);
+	}
+	
+	public static PrintWriter getWriter(File file, boolean append) throws UnsupportedEncodingException, FileNotFoundException {
+		return getWriter(file, "UTF-8", append);
+	}
+	
+	public static PrintWriter getWriter(File file, String encoding, boolean append) throws UnsupportedEncodingException, FileNotFoundException {
+		return new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(file, append)) , "UTF-8")); //$NON-NLS-1$
+	}
+
+	public static PrintWriter getWriter(String file) throws UnsupportedEncodingException, FileNotFoundException {
+		return getWriter(new File(file), UTF8);
+	}
+
+	public static void write(File file, String str) throws UnsupportedEncodingException, FileNotFoundException {
+		PrintWriter writer = getWriter(file);
+		writer.write(str);
+		writer.close();
+		
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/IOUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/MessagePrinter.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/MessagePrinter.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/MessagePrinter.java	(revision 147)
@@ -0,0 +1,6 @@
+package org.txm.utils;
+
+public interface MessagePrinter {
+	public void println(String message);
+	public void print(String message);
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/MessagePrinter.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/StreamHog.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/StreamHog.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/StreamHog.java	(revision 147)
@@ -0,0 +1,145 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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: 2014-09-15 10:51:15 +0200 (Mon, 15 Sep 2014) $
+// $LastChangedRevision: 2836 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+
+import org.txm.utils.logger.Log;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class StreamHog.
+ * 
+ * If a MessagePrinter is set, then the messages are displayed with the MessagePrinter and not in sys.out
+ */
+public class StreamHog extends Thread {
+
+	InputStream is;
+	boolean capture;
+	String installPath;
+	boolean go = true;
+
+	BufferedReader br;
+	ArrayList<MessagePrinter> messagePrinters = new ArrayList<MessagePrinter>();
+
+	/** The lastline. */
+	public String lastline;
+
+	/**
+	 * Instantiates a new stream hog.
+	 *
+	 * @param is the is
+	 * @param capture the capture
+	 */
+	public StreamHog(InputStream is, boolean capture) {
+		this.is = is;
+		this.capture = capture;
+		start();
+	}
+
+	public String getInstallPath() {
+		return installPath;
+	}
+
+	public InputStream getInputStream() {
+		return is;
+	}
+
+	public BufferedReader getBufferedReader() {
+		return br;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Thread#run()
+	 */
+	@Override
+	public void run() {
+		try {
+			br = new BufferedReader(new InputStreamReader(is));
+			String line = null;
+			while ((line = br.readLine()) != null) {
+				if (capture) { // we are supposed to capture the output from
+					int i = line.indexOf("InstallPath"); //$NON-NLS-1$
+					if (i >= 0) {
+						String s = line.substring(i + 11).trim();
+						int j = s.indexOf("REG_SZ"); //$NON-NLS-1$
+						if (j >= 0)
+							s = s.substring(j + 6).trim();
+						installPath = s;
+						System.out.println("R InstallPath = " + s);
+					}
+				}
+				
+				printMessage(line);
+				Log.info("Rserve>" + line); //$NON-NLS-1$
+				lastline = line;
+
+			}
+		} catch (IOException e) {
+			System.out.println("ERROR: R logging is broken: "+e);
+			org.txm.utils.logger.Log.printStackTrace(e);
+		}
+	}
+	
+	/**
+	 * print the message if any MessagePrinter is set
+	 * @param msg
+	 */
+	public void printMessage(String msg) {
+		if (messagePrinters.size() > 0) {
+			for (MessagePrinter mp : messagePrinters)
+				mp.println(msg); //$NON-NLS-1$
+		}
+	}
+
+	public void addMessagePrinter(MessagePrinter mp) {
+		this.messagePrinters.add(mp);
+	}
+
+	public ArrayList<MessagePrinter> getMessagePrinter() {
+		return this.messagePrinters;
+	}
+
+	/**
+	 * Sets the prints the.
+	 *
+	 * @param capture the new prints the
+	 */
+	public void setPrint(boolean capture)
+	{
+		this.capture = capture;
+	}
+
+	public void stopLogging() {
+		go = false;
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/StreamHog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/Tuple.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Tuple.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/Tuple.java	(revision 147)
@@ -0,0 +1,33 @@
+package org.txm.utils;
+
+import java.util.HashSet;
+
+public class Tuple<T> {
+	
+	public T a, 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);}
+	@Override
+	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 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);
+		
+		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

Property changes on: tmp/org.txm.utils/src/org/txm/utils/Tuple.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/Pair.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Pair.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/Pair.java	(revision 147)
@@ -0,0 +1,170 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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;
+
+import java.util.HashMap;
+import org.txm.Messages;
+
+// TODO: Auto-generated Javadoc
+/**
+ * similar to a C++ pair @ author mdecorde.
+ *
+ * @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
+	 */
+	public Pair(T o1, V o2) {
+		this.o1 = o1;
+		this.o2 = o2;
+	}
+
+	/**
+	 * Same.
+	 *
+	 * @param o1 the o1
+	 * @param o2 the o2
+	 * @return true, if successful
+	 */
+	public static boolean same(Object o1, Object o2) {
+		return o1 == null ? o2 == null : o1.equals(o2);
+	}
+
+	/**
+	 * Gets the first.
+	 *
+	 * @return the first
+	 */
+	public T getFirst() {
+		return o1;
+	}
+
+	/**
+	 * Gets the second.
+	 *
+	 * @return the second
+	 */
+	public V getSecond() {
+		return o2;
+	}
+
+	/**
+	 * Sets the first.
+	 *
+	 * @param o the new first
+	 */
+	public void setFirst(T o) {
+		o1 = o;
+	}
+
+	/**
+	 * Sets the second.
+	 *
+	 * @param o the new second
+	 */
+	public void setSecond(V o) {
+		o2 = o;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#equals(java.lang.Object)
+	 */
+	@Override
+	public boolean equals(Object obj) {
+		if (!(obj instanceof Pair))
+			return false;
+		Pair p = (Pair) obj;
+		return same(p.o1, this.o1) && same(p.o2, this.o2);
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		return "Pair{" + o1 + ", " + o2 + "}"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#hashCode()
+	 */
+	@Override
+	public int hashCode() {
+		if (o1 == null && o2 == null)
+			return 0;
+		if (o1 != null && o2 != null)
+			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
+	 */
+	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)))
+				+ Messages.Pair_0);
+		System.out.println(p4.equals(p2) + Messages.Pair_0);
+		System.out.println(p2.equals(p4) + Messages.Pair_0);
+		System.out.println(p1.equals(p3) + Messages.Pair_1);
+		System.out.println(p4.equals(p4) + Messages.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$
+		
+		System.out.println(hashpair);
+		System.out.println((p1==null ? p3==null : p1.equals(p3)));
+	}
+
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/Pair.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/ProcessBuilderBuilder.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/ProcessBuilderBuilder.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/ProcessBuilderBuilder.java	(revision 147)
@@ -0,0 +1,316 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.ArrayList;
+import java.util.HashMap;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class ProcessBuilderBuilder.
+ *
+ * @deprecated
+ * 
+ * Reads a shell command line interface definition in an xml file
+ * (CLIX) then creates the corresponding java wrapper API code.
+ * 
+ * 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>
+ * @author mdecorde, sheiden
+ */
+@Deprecated
+public class ProcessBuilderBuilder {
+
+	/**
+	 * 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
+	 */
+	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);
+		Element root = doc.getDocumentElement();
+		String appliname = root.getAttribute("name"); //$NON-NLS-1$
+		String version = root.getAttribute("version"); //$NON-NLS-1$
+		String applidesc = root.getAttribute("desc"); //$NON-NLS-1$
+		writer.write("import java.util.Date;\n"); //$NON-NLS-1$
+		writer.write("import java.util.Locale;\n"); //$NON-NLS-1$
+		writer.write("import java.text.DateFormat;\n"); //$NON-NLS-1$
+		writer.write("import java.io.BufferedReader;\n"); //$NON-NLS-1$
+		writer.write("import java.io.IOException;\n"); //$NON-NLS-1$
+		writer.write("import java.io.InputStream;\n"); //$NON-NLS-1$
+		writer.write("import java.io.InputStreamReader;\n"); //$NON-NLS-1$
+		writer.write("import java.util.ArrayList;\n"); //$NON-NLS-1$
+
+		writer.write("\n// " + applidesc + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("class " + appliname + "\n{\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("\tString binpath = \"\";\n"); //$NON-NLS-1$
+		writer.write("\tpublic " + appliname + "(String bindir){this.binpath=bindir;}\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("\tpublic " + appliname + "(File bindir){this.binpath=bindir.getAbsolutePath();}\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("\tString version = \"" + version + "\";\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("\tString desc = \"" + applidesc + "\";\n"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		writer.write("\tboolean debug = false;\n"); //$NON-NLS-1$
+		writer.write("\tpublic void debug(boolean b){debug=b;};\n"); //$NON-NLS-1$
+
+		NodeList nodeLst = doc.getElementsByTagName("prog"); //$NON-NLS-1$
+		ArrayList<String> dejavu = new ArrayList<String>();
+
+		for (int s = 0; s < nodeLst.getLength(); s++) {
+			HashMap<String, String> atester = new HashMap<String, String>();
+			ArrayList<String> order = new ArrayList<String>();
+			ArrayList<String> musts = new ArrayList<String>();
+			ArrayList<String> multiples = new ArrayList<String>();
+			Element elem = (Element) nodeLst.item(s);
+			NodeList children = elem.getElementsByTagName("arg"); //$NON-NLS-1$
+
+			String execfile = elem.getAttribute("exec"); //$NON-NLS-1$
+			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$ 
+			String argsdesc = ""; //$NON-NLS-1$
+			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);
+				if (state.equals("optional")) //$NON-NLS-1$
+				{
+					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$
+
+						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$
+									);
+						} 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 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);
+				} else if (state.equals("multiple")) //$NON-NLS-1$
+				{
+					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$
+
+						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$
+									);
+						} 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 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);
+				} else {
+					func = func + type + " " + name.replace("-", "") + ", "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+					argsdesc += "\t// arg : " + desc + "\n"; //$NON-NLS-1$ //$NON-NLS-2$
+					musts.add(name);
+
+					if (!dejavu.contains(name))
+						dejavu.add(name);
+				}
+			}
+			if (musts.size() > 0)
+				func = func.substring(0, func.length() - 2) + ")"; //$NON-NLS-1$
+			else
+				func = func + ")"; //$NON-NLS-1$
+
+			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\targs.add(binpath+\"/" + execfile + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
+			for (String name : order) {
+				if (atester.containsKey(name)) {
+					writer.write("\t\tif (is" + name.replace("-", "") + ")\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+					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$
+						} 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$
+						}
+					} 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("\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\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\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("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}\n"); //$NON-NLS-1$
+
+		writer.write("}"); //$NON-NLS-1$
+		writer.close();
+	}
+
+	/**
+	 * The main method.
+	 *
+	 * @param args the arguments
+	 */
+	public static void main(String[] args) {
+		if (args.length < 2) {
+			System.err.println("Need 2 args : xmlfile & outfile paths"); //$NON-NLS-1$
+			return;
+		}
+		File xmlfile = new File(args[0]);
+		File outfile = new File(args[1]);
+
+		if (xmlfile.exists())
+			System.out.println("xmlfile ok"); //$NON-NLS-1$
+		try {
+			ProcessBuilderBuilder.build(xmlfile, outfile);
+		} catch (IOException e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+		} catch (SAXException e) {
+			// TODO Auto-generated catch block
+			org.txm.utils.logger.Log.printStackTrace(e);
+		} catch (ParserConfigurationException e) {
+			// TODO Auto-generated catch block
+			org.txm.utils.logger.Log.printStackTrace(e);
+		}
+		System.out.println("done"); //$NON-NLS-1$
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/ProcessBuilderBuilder.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/logger/LocalizedLogger.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/LocalizedLogger.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/LocalizedLogger.java	(revision 147)
@@ -0,0 +1,107 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.logger;
+
+/*
+ import org.apache.log4j.BasicConfigurator;
+ import org.apache.log4j.Level;
+ import org.apache.log4j.Logger;
+ */
+import org.txm.utils.i18n.Localizer;
+
+/**
+ * A logger whose messages are translated unsing a {@link Localizer}.
+ * 
+ * @deprecated
+ * @author sloiseau
+ */
+@Deprecated
+public class LocalizedLogger {
+	/*
+	 * private Logger logger; private Localizer localizer;
+	 * 
+	 * // TODO : manage elsewhere the log configuration! static {
+	 * BasicConfigurator.configure();
+	 * Logger.getRootLogger().setLevel(Level.INFO); }
+	 * 
+	 * 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) { logger.info(localizer.message(key)); }
+	 * 
+	 * public void debug(String key) { logger.debug(localizer.message(key)); }
+	 * 
+	 * public void debug(String key, Object[] arg) {
+	 * logger.debug(localizer.message(key, arg)); }
+	 * 
+	 * public void debug(String key, Object arg) {
+	 * logger.debug(localizer.message(key, arg)); }
+	 * 
+	 * public Localizer getLocalizer() { return this.localizer; }
+	 * 
+	 * public void error(String key) { logger.error(localizer.message(key)); }
+	 * 
+	 * public void error(String key, Throwable t) {
+	 * logger.error(localizer.message(key),t); }
+	 * 
+	 * public void error(String key, Object[] arg) {
+	 * logger.error(localizer.message(key, arg)); }
+	 * 
+	 * public void error(String key, Object[] arg, Throwable t) {
+	 * logger.error(localizer.message(key, arg),t); }
+	 * 
+	 * public void error(String key, Object arg) {
+	 * logger.error(localizer.message(key, arg)); }
+	 * 
+	 * public void error(String key, Object arg, Throwable t) {
+	 * logger.error(localizer.message(key, arg), t); }
+	 * 
+	 * public void fatal(String key) { logger.fatal(localizer.message(key)); }
+	 * 
+	 * public void fatal(String key, Throwable t) {
+	 * logger.fatal(localizer.message(key),t); }
+	 * 
+	 * public void fatal(String key, Object[] arg, Throwable t) {
+	 * logger.fatal(localizer.message(key, arg),t); }
+	 * 
+	 * public void fatal(String key, Object[] arg) {
+	 * logger.fatal(localizer.message(key, arg)); }
+	 * 
+	 * public void fatal(String key, Object arg, Throwable t) {
+	 * logger.fatal(localizer.message(key, arg),t); }
+	 * 
+	 * public void fatal(String key, Object arg) {
+	 * logger.fatal(localizer.message(key, arg)); }
+	 */
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/logger/LocalizedLogger.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/logger/TXMLogger.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/TXMLogger.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/TXMLogger.java	(revision 147)
@@ -0,0 +1,238 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.
+
+//
+// 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;
+
+// TODO: Auto-generated Javadoc
+/**
+ * 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$
+	}
+	
+	/**
+	 * 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();
+		if (level.intValue() < levelValue || levelValue == Level.OFF.intValue()) {
+            return;
+        }
+        LogRecord lr = new LogRecord(level, msg);
+        inferCaller();
+        lr.setSourceClassName(sourceClassName);
+        lr.setSourceMethodName(sourceMethodName);
+        log(lr);
+    }
+
+	/**
+	 * Method from Logger to perform a log
+	 * 
+	 * @param record
+	 */
+	public void log(LogRecord record) {
+        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.
+
+        Logger logger = this;
+        while (logger != null) {
+            for (Handler handler : logger.getHandlers()) {
+                handler.publish(record);
+            }
+
+            if (!logger.getUseParentHandlers()) {
+                break;
+            }
+
+            logger = logger.getParent();
+        }
+    }
+	
+	/**
+	 * Method from LogRecord to infer the caller's class and method names 
+	 */
+	protected static final void inferCaller() {
+		//JavaLangAccess access = SharedSecrets.getJavaLangAccess();
+		
+		Throwable throwable = new Throwable();
+		StackTraceElement[] stack = throwable.getStackTrace();
+		
+		//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 = stack[ix];
+			String cname = frame.getClassName();
+			boolean isLoggerImpl = Log.isLoggerImplFrame(cname);
+			if (lookingForLogger) {
+				// Skip all frames until we have found the first logger frame.
+				if (isLoggerImpl) {
+					lookingForLogger = false;
+				}
+			} else {
+				if (!isLoggerImpl) {
+					// skip reflection call
+					if (!cname.startsWith("java.lang.reflect.")
+							&& !cname.startsWith("sun.reflect.")) {
+						// We've found the relevant frame.
+						sourceClassName = cname;
+						sourceMethodName = frame.getMethodName();
+						return;
+					}
+				}
+			}
+		}
+		// 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

Property changes on: tmp/org.txm.utils/src/org/txm/utils/logger/TXMLogger.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/logger/MessageBox.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/MessageBox.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/MessageBox.java	(revision 147)
@@ -0,0 +1,204 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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-07-04 16:11:30 +0200 (Mon, 04 Jul 2016) $
+// $LastChangedRevision: 3257 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils.logger;
+
+import java.util.logging.Level;
+import org.txm.Messages;
+
+// TODO: Auto-generated Javadoc
+/**
+ * display alerts in a Swing popup.
+ *
+ * @author mdecorde
+ */
+public class MessageBox {
+
+	/**
+	 * Severe.
+	 *
+	 * @param title the title
+	 * @param message the message
+	 */
+	public static void severe(String title, String message) {
+		if (Log.txm.getLevel().intValue() <= Level.SEVERE.intValue())
+			show(title, message, 1000);
+	}
+
+	/**
+	 * Warning.
+	 *
+	 * @param title the title
+	 * @param message the message
+	 */
+	public static void warning(String title, String message) {
+		if (Log.txm.getLevel().intValue() < Level.WARNING.intValue())
+			show(title, message, 900);
+	}
+
+	/**
+	 * Info.
+	 *
+	 * @param title the title
+	 * @param message the message
+	 */
+	public static void info(String title, String message) {
+		if (Log.txm.getLevel().intValue() <= Level.INFO.intValue())
+			show(title, message, 800);
+	}
+
+	/**
+	 * Fine.
+	 *
+	 * @param title the title
+	 * @param message the message
+	 */
+	public static void fine(String title, String message) {
+		if (Log.txm.getLevel().intValue() <= Level.FINE.intValue())
+			show(title, message, 700);
+	}
+
+	/**
+	 * Finer.
+	 *
+	 * @param title the title
+	 * @param message the message
+	 */
+	public static void finer(String title, String message) {
+		if (Log.txm.getLevel().intValue() <= Level.FINER.intValue())
+			show(title, message, 600);
+	}
+
+	/**
+	 * Finest.
+	 *
+	 * @param title the title
+	 * @param message the message
+	 */
+	public static void finest(String title, String message) {
+		if (Log.txm.getLevel().intValue() <= Level.FINEST.intValue())
+			show(title, message, 500);
+	}
+
+	/**
+	 * Severe.
+	 *
+	 * @param message the message
+	 */
+	public static void severe(String message) {
+		severe(Messages.MessageBox_0, message);
+	}
+
+	/**
+	 * Error.
+	 *
+	 * @param message the message
+	 */
+	public static void error(String message) {
+		severe(message);
+	}
+
+	/**
+	 * Error.
+	 *
+	 * @param title the title
+	 * @param message the message
+	 */
+	public static void error(String title, String message) {
+		severe(title, message);
+	}
+
+	/**
+	 * Warning.
+	 *
+	 * @param message the message
+	 */
+	public static void warning(String message) {
+		warning(Messages.MessageBox_1, message);
+	}
+
+	/**
+	 * Info.
+	 *
+	 * @param message the message
+	 */
+	public static void info(String message) {
+		info(Messages.MessageBox_2, message);
+	}
+
+	/**
+	 * Fine.
+	 *
+	 * @param message the message
+	 */
+	public static void fine(String message) {
+		fine("", message); //$NON-NLS-1$
+	}
+
+	/**
+	 * Finer.
+	 *
+	 * @param message the message
+	 */
+	public static void finer(String message) {
+		finer("", message); //$NON-NLS-1$
+	}
+
+	/**
+	 * Finest.
+	 *
+	 * @param message the message
+	 */
+	public static void finest(String message) {
+		finest("", message); //$NON-NLS-1$
+	}
+
+	/**
+	 * Show.
+	 *
+	 * @param title the title
+	 * @param message the message
+	 * @param level the level
+	 */
+	public static void show(String title, String message, int level) {
+		if (level > 900) {
+			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);
+		} else if (level > 700) {
+			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);
+		}
+	}
+
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/logger/MessageBox.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/logger/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/package.html	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/package.html	(revision 147)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Extending logging package.</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/logger/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/logger/Log.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/logger/Log.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/logger/Log.java	(revision 147)
@@ -0,0 +1,414 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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: 2017-01-24 18:11:42 +0100 (Tue, 24 Jan 2017) $
+// $LastChangedRevision: 3400 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils.logger;
+
+import java.io.File;
+import java.io.IOException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.logging.FileHandler;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.SimpleFormatter;
+
+import org.txm.Messages;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class Log.
+ */
+public class Log {
+	/** The class id. */
+	public static final String id = "org.txm.utils.logger.Log";
+	
+	/** The txm Logger. */
+	protected static TXMLogger txm; // should be protected, stays public for compatibility reasons
+
+	/** The fh. */
+	protected static FileHandler fh;
+
+	/** The default flag. */
+	protected static int STANDARD = 1;
+
+	/** The flags. */
+	public static final int CONSOLE = 1;
+	/** The caller information. */
+	protected static String sourceMethodName;
+	protected static String sourceClassName;	
+	/** The logger frame list. */
+	protected static List<String> frameList;
+	
+	static {
+		//System.out.println("INIT TXMLOGGER");
+		txm = new TXMLogger("TXMFileLogger", null);
+		txm.setLevel(Level.SEVERE); // default is to show errors
+		frameList = new ArrayList<String>();
+		frameList.add(id);
+	}
+
+	/**
+	 * Sets the level.
+	 * 
+	 * @param l the new level
+	 */
+	public static void setLevel(Level l) {
+		txm.setLevel(l);
+	}
+
+	/**
+	 * Sets the prints the in file.
+	 * 
+	 * @param b the new prints the in file
+	 */
+	public static void setPrintInFile(boolean b) {
+		// System.out.println("set print in file: "+b);
+		if (b) {
+			if (txm.getHandlers().length == 0) {
+				try {
+					SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd"); //$NON-NLS-1$
+					String filename = "/tmp/TXM-" + f.format(new Date()) + ".log"; //$NON-NLS-1$ //$NON-NLS-2$
+					
+					fh = new FileHandler(filename, false);
+					System.out.println(Messages.Log_3
+							+ new File(filename).getAbsolutePath());
+					fh.setFormatter(new SimpleFormatter());
+					fh.setEncoding("UTF-8"); //$NON-NLS-1$
+					txm.addHandler(fh);
+				} catch (SecurityException e) {
+					printStackTrace(e);
+				} catch (IOException e) {
+					printStackTrace(e);
+				}
+			}
+		} else {
+			txm.removeHandler(fh);
+		}
+	}
+
+	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
+	 */
+	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(Messages.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);
+				} catch (Exception e) {
+					org.txm.utils.logger.Log.printStackTrace(e);
+				}
+			}
+		} else {
+			txm.removeHandler(fh);
+		}
+	}
+	
+	public static void addHandler(Handler handler) {
+		txm.addHandler(handler);
+	}
+	
+	public static void removeHandler(Handler handler) {
+		txm.addHandler(handler);
+	}
+
+	/**
+	 * To string.
+	 * 
+	 * @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)) {
+				StringBuffer message = new StringBuffer();
+
+				message.append(t.getFileName()
+						+ ": " + t.getMethodName() + ", l." //$NON-NLS-1$ //$NON-NLS-2$
+						+ t.getLineNumber() + " -> " + e.toString()); //$NON-NLS-1$
+		
+				if ("true".equals(log_stacktrace_boolean)) {
+					message.append(Messages.Log_8);
+					for (StackTraceElement se : e.getStackTrace())
+						message.append("\t" + se.getFileName() + "\t" + se.getMethodName() + "\tl." + se.getLineNumber() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+				}
+				return message.toString();
+			} else
+				return t.getFileName() + ": " + t.getMethodName() + ", l." //$NON-NLS-1$ //$NON-NLS-2$
+						+ t.getLineNumber() + " -> " + e.toString(); //$NON-NLS-1$
+		} catch (Exception ex) {
+			return e.getLocalizedMessage();
+		}
+	}
+
+	/**
+	 * Sets the prints the in console.
+	 * 
+	 * @param b the new prints the in console
+	 */
+	public static void setPrintInConsole(boolean b) {
+		txm.setUseParentHandlers(b);
+	}
+
+	/**
+	 * Get the standard flag currently used
+	 * 
+	 * @return the standard flag
+	 */
+	public static int getStdFlag() {
+		return STANDARD;
+	}
+
+	/**
+	 * Set the standard flag to use
+	 * 
+	 * @param flag
+	 */
+	public static void setStdFlag(int flag) {
+		STANDARD = flag;
+	}
+	
+	/**
+	 * Reset the standard flag to the console
+	 * 
+	 */
+	public static void resetStdFlag() {
+		STANDARD = CONSOLE;
+	}
+
+	/**
+	 * Add a flag to the standard flag
+	 * 
+	 * @param flag
+	 */
+	public static void addFlag(int flag) {
+		STANDARD |= flag;
+	}
+
+	/**
+	 * Remove a flag from the standard flag
+	 * 
+	 * @param flag
+	 */
+	public static void removeFlag(int flag) {
+		STANDARD ^= flag;
+	}
+
+	/**
+	 * Log a severe message using the default flag
+	 * 
+	 * @param message
+	 */
+	public static void severe(String message) {
+		severe(message, STANDARD);
+	}
+
+	/**
+	 * Log a severe message
+	 * 
+	 * @param message
+	 * @param flag where to print the message
+	 */
+	public static void severe(String message, int flag) {
+		if ((flag & CONSOLE) == CONSOLE) printConsoleError(message);
+		txm.severe(message);
+	}
+
+	/**
+	 * Log a warning message using the default flag
+	 * 
+	 * @param message
+	 */
+	public static void warning(String message) {
+		warning(message, STANDARD);
+	}
+
+	/**
+	 * Log a warning message
+	 * 
+	 * @param message
+	 * @param flag where to print the message
+	 */
+	public static void warning(String message, int flag) {
+		if ((flag & CONSOLE) == CONSOLE) 
+			printConsoleWarning(message);
+		txm.warning(message);
+	}
+
+	/**
+	 * Log an info message using the default flag
+	 * 
+	 * @param message
+	 */
+	public static void info(String message) {
+		info(message, STANDARD);
+	}
+	
+	/**
+	 * Log an info message
+	 * 
+	 * @param message
+	 * @param flag where to print the message
+	 */
+	public static void info(String message, int flag) {
+		if ((flag & CONSOLE) == CONSOLE)
+			printConsoleInfo(message);
+		txm.info(message);
+	}
+	
+	/**
+	 * Log an info message using the default flag
+	 * 
+	 * @param message
+	 */
+	public static void fine(String message) {
+		fine(message, STANDARD);
+	}
+
+	/**
+	 * Log an info message using the default flag
+	 * 
+	 * @param message
+	 */
+	public static void finest(String message) {
+		finest(message, STANDARD);
+	}
+	
+	/**
+	 * Log an info message
+	 * 
+	 * @param message
+	 * @param flag where to print the message
+	 */
+	public static void finest(String message, int flag) {
+		if ((flag & CONSOLE) == CONSOLE)
+			printConsoleInfo(message);
+		txm.finest(message);
+	}
+	
+	/**
+	 * Log an info message
+	 * 
+	 * @param message
+	 * @param flag where to print the message
+	 */
+	public static void fine(String message, int flag) {
+		if ((flag & CONSOLE) == CONSOLE)
+			printConsoleInfo(message);
+		txm.fine(message);
+	}
+
+	/**
+	 * Log a stacktrace
+	 * 
+	 * @param e the Throwable
+	 */
+	private static String log_stacktrace_boolean = null;
+	public static void printStackTrace(Throwable e) {
+		//TODO: read utils preferences
+		log_stacktrace_boolean = "true";//Toolbox.getParam(Toolbox.LOG_STACKTRACE);
+		if (log_stacktrace_boolean == null ||Boolean.parseBoolean(log_stacktrace_boolean) == true)
+			e.printStackTrace();
+	}
+
+	public static Level getLevel() {
+		return txm.getLevel();
+	}
+	
+	public static boolean isPrintingErrors() {
+		if (txm == null) return false;
+		return txm.getLevel().intValue() <= Level.INFO.intValue();
+	}
+	
+	/**
+	 * Print an error message in the err output
+	 * 
+	 * @param message
+	 */
+	protected static void printConsoleError(String message) {
+		if (Level.SEVERE.intValue() < txm.getLevel().intValue()) {
+            return;
+        }
+		System.out.println(message);
+//		txm.log(Level.SEVERE, message);
+	}
+
+	/**
+	 * Print a warning message in the std output
+	 * 
+	 * @param message
+	 */
+	protected static void printConsoleWarning(String message) {
+		if (Level.WARNING.intValue() < txm.getLevel().intValue()) {
+            return;
+        }
+		System.out.println(message);
+//		txm.log(Level.WARNING, message);
+	}
+
+	/**
+	 * Print an info message in the std output
+	 * 
+	 * @param message
+	 */
+	protected static void printConsoleInfo(String message) {
+		if (Level.INFO.intValue() < txm.getLevel().intValue()) {
+            return;
+        }
+		System.out.println(message);
+//      txm.log(Level.INFO, message);	
+	}
+
+	/**
+	 * Method from LogRecord to determine if a frame is a logger frame
+	 * 
+	 * @param cname the frame
+	 * @return
+	 */
+	protected static boolean isLoggerImplFrame(String cname) {
+		for (String s : frameList) {
+			if (cname.equals(s))
+				return true;
+		}
+		return false;
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/logger/Log.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/DeleteDir.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/DeleteDir.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/DeleteDir.java	(revision 147)
@@ -0,0 +1,132 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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: 2015-12-09 09:48:50 +0100 (Wed, 09 Dec 2015) $
+// $LastChangedRevision: 3084 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.LinkedList;
+
+import org.apache.commons.lang.SystemUtils;
+
+// TODO: Auto-generated Javadoc
+/**
+ * tools to delete files from a directory.
+ *
+ * @author mdecorde
+ */
+public class DeleteDir {
+	
+	/**
+	 * The main method.
+	 *
+	 * @param args the arguments
+	 */
+	public static void main(String args[]) {
+		deleteDirectory(new File(args[0]));
+	}
+
+	/**
+	 * Delete directory.
+	 *
+	 * @param path the path
+	 * @return true, if successful
+	 */
+	static public boolean deleteDirectory(File path) {
+		if (path == null)
+			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();
+            } 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
+        }
+		
+		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();
+				}
+			}
+		}
+		return (path.delete());
+	}
+	
+	/**
+	 * Scan directory.
+	 *
+	 * @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());
+		ArrayList<File> dirfiles = new ArrayList<File>();
+		LinkedList<File> files = new LinkedList<File>();
+		files.add(directory);
+		
+		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 (!sfile.getName().startsWith(".")) //$NON-NLS-1$
+								files.add(sfile);
+						}
+						else
+							files.add(sfile);
+					}
+					else
+						dirfiles.add(sfile);
+				}
+			}
+		}
+		//System.out.println(dirfiles);
+		return dirfiles;
+	}
+}
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/DeleteDir.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/ProcessBuilder.groovy
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/ProcessBuilder.groovy	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/ProcessBuilder.groovy	(revision 147)
@@ -0,0 +1,70 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.processbuilder;
+
+import groovy.lang.GroovyClassLoader;
+
+import java.io.File;
+
+import org.txm.utils.ProcessBuilderBuilder;
+
+// TODO: Auto-generated Javadoc
+/**
+ * creates a wrapper of a program.
+ *
+ * @param definitionFile the definition file
+ * @param classFile the class file
+ * @param binariesDirectory the binaries directory
+ * @return the object
+ * @author H
+ */
+public class ProcessBuilder {
+	public static Object wrapProgram(File definitionFile, File classFile, File binariesDirectory) {
+		try {
+			ProcessBuilderBuilder.build(definitionFile, classFile);
+			// Application app = new Application(definitionFile);
+			// app.build(classFile);
+		} catch (Exception e) {
+			System.err.println(e);
+			return null;
+		}
+
+		GroovyClassLoader gcl = new GroovyClassLoader();
+		Object aProgram;
+
+		try {
+			gcl.addClasspath("."); //$NON-NLS-1$
+			Class clazz = gcl.parseClass(classFile);
+			aProgram = clazz.newInstance(binariesDirectory.getAbsolutePath()); // path to the directory containing binaries //$NON-NLS-1$
+		} catch (Exception e) {
+			System.err.println(e);
+			return null;
+		}
+		return aProgram;
+	}
+}
Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/package.html	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/package.html	(revision 147)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>classes for the next Wrapper - not yet finished</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/processbuilder/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Param.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/Param.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/Param.java	(revision 147)
@@ -0,0 +1,228 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.processbuilder;
+
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+import org.w3c.dom.Element;
+
+// TODO: Auto-generated Javadoc
+/**
+ * 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
+	 */
+	public Param(Executable exec, Element root) {
+
+		this.root = root;
+		this.exec = exec;
+
+		name = root.getAttribute("name"); //$NON-NLS-1$
+		type = root.getAttribute("type"); //$NON-NLS-1$
+		state = root.getAttribute("state");//$NON-NLS-1$
+		desc = root.getAttribute("desc"); //$NON-NLS-1$
+		prefix = root.getAttribute("prefix");//$NON-NLS-1$
+	}
+
+	/**
+	 * Builds the.
+	 *
+	 * @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);
+		 * 
+		 * }
+		 */
+	}
+
+	/**
+	 * Write test.
+	 *
+	 * @return the string
+	 */
+	public String writeTest() {
+		return ""; //$NON-NLS-1$
+	}
+
+	/**
+	 * Write definition.
+	 *
+	 * @return the string
+	 */
+	public String writeDefinition() {
+		return ""; //$NON-NLS-1$
+
+	}
+
+	/**
+	 * Write xml report.
+	 *
+	 * @return the string
+	 */
+	public String writeXmlReport() {
+		return ""; //$NON-NLS-1$
+	}
+
+	/**
+	 * Describe.
+	 *
+	 * @return the string
+	 */
+	public String describe() {
+		/*
+		 * 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();
+		 */
+		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$
+	}
+
+	/**
+	 * Equals.
+	 *
+	 * @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)
+	 * @see java.lang.Object#toString()
+	 */
+	@Override
+	public String toString() {
+		return this.prefix + this.name + ":" + this.type; //$NON-NLS-1$
+	}
+
+	/**
+	 * Declare.
+	 *
+	 * @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$
+
+			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$
+						);
+			} 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 unset" + name.replace("-", "") + "(){" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+					"\tthis.is" + name.replace("-", "") + "=false;\t}\n" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			);
+		} 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$
+
+			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$
+						);
+			} 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 unset" + name.replace("-", "") + "(){" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+					"\tthis.is" + name.replace("-", "") + "=false;\t}\n" //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+			);
+		}
+		writer.write("\n"); //$NON-NLS-1$
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Param.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Executable.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/Executable.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/Executable.java	(revision 147)
@@ -0,0 +1,220 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.processbuilder;
+
+import java.io.IOException;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+// TODO: Auto-generated Javadoc
+/**
+ * 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
+	 */
+	public Executable(Application app, Element root) {
+		this.root = root;
+		this.app = app;
+
+		name = root.getAttribute("exec"); //$NON-NLS-1$
+		version = root.getAttribute("version"); //$NON-NLS-1$
+		desc = root.getAttribute("desc"); //$NON-NLS-1$
+
+		NodeList argss = root.getElementsByTagName("args"); //$NON-NLS-1$
+		Node args = argss.item(0);
+		NodeList childs = args.getChildNodes();
+
+		for (int s = 0; s < childs.getLength(); s++) {
+			Node child = childs.item(s);
+			if (child.getNodeType() == 1) {
+				Element param = (Element) child;
+				Param p = new Param(this, param);
+				addParam(p);
+			}
+		}
+	}
+
+	/**
+	 * Adds the param.
+	 *
+	 * @param param the param
+	 */
+	public void addParam(Param param) {
+		params.add(param);
+		if (param.state.equals("must")) //$NON-NLS-1$
+		{
+			musts.add(param);
+		} else if (param.state.equals("optional")) //$NON-NLS-1$
+		{
+			optionals.add(param);
+		} else if (param.state.equals("multiple")) //$NON-NLS-1$
+		{
+			multiples.add(param);
+		}
+	}
+
+	/**
+	 * Builds the.
+	 *
+	 * @param writer the writer
+	 * @return the string
+	 * @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$
+		ArrayList<String> dejavu = new ArrayList<String>();
+
+		HashMap<String, String> atester = new HashMap<String, String>();
+
+		// Function header
+		String func = "\t// " + desc; //$NON-NLS-1$
+		for (Param p : musts)
+			func += "\n\t// arg " + p.name + ": " + p.desc + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+		func += "\n\tpublic void " + name.replace("-", "").replace(".", "") + "("; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+		for (Param p : musts)
+			func = func + p.type + " " + p.name.replace("-", "") + ", "; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+		if (musts.size() > 0)
+			func = func.substring(0, func.length() - 2) + ")"; //$NON-NLS-1$
+		else
+			func = func + ")"; //$NON-NLS-1$
+
+		// 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("\n" + func + " throws IOException\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("\t{\n"); //$NON-NLS-1$
+		writer.write("\t\tArrayList<String> args = new ArrayList<String>();\n"); //$NON-NLS-1$
+		writer.write("\t\targs.add(binpath+\"" + name + "\");\n"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		// test set parameters
+		// optionals&multiple
+		for (Param p : params) {
+			System.out.println("test param " + p.state); //$NON-NLS-1$
+			if (p.state.equals("optional")) { //$NON-NLS-1$
+				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$
+				} 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\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("\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\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("\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("\t\t\tSystem.out.println();\n\t\t}\n\t}\n"); //$NON-NLS-1$
+
+		return ""; //$NON-NLS-1$
+	}
+
+	/**
+	 * Describe.
+	 *
+	 * @return the string
+	 */
+	public String describe() {
+		StringBuffer buff = new StringBuffer();
+		buff.append(" Exec: " + name + ", version: " + version + ", desc: " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				+ desc + "\n"); //$NON-NLS-1$
+		buff.append("  Optionals: " + optionals + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		buff.append("  Musts: " + musts + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		buff.append("  Multiples: " + multiples + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		for (Param param : params)
+			buff.append(param.describe());
+		return buff.toString();
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Executable.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Application.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/processbuilder/Application.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/processbuilder/Application.java	(revision 147)
@@ -0,0 +1,184 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.processbuilder;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.util.HashMap;
+import java.util.HashSet;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+// TODO: Auto-generated Javadoc
+/**
+ * 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.
+	 */
+	public Application(File definitionFile)
+			throws ParserConfigurationException, SAXException, IOException {
+		this.definitionFile = definitionFile;
+
+		DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+		DocumentBuilder db = dbf.newDocumentBuilder();
+		Document doc = db.parse(definitionFile);
+		Element root = doc.getDocumentElement();
+
+		name = root.getAttribute("name"); //$NON-NLS-1$
+		version = root.getAttribute("version"); //$NON-NLS-1$
+		desc = root.getAttribute("desc"); //$NON-NLS-1$
+
+		// pr chq exec
+		// lit param
+		NodeList nodeLst = doc.getElementsByTagName("prog"); //$NON-NLS-1$
+		for (int s = 0; s < nodeLst.getLength(); s++) {
+			Element prog = (Element) nodeLst.item(s);
+			Executable exec = new Executable(this, prog);
+			executables.put(exec.name, exec);
+			params.addAll(exec.params);
+		}
+	}
+
+	/**
+	 * 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
+	 */
+	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$
+		writer.write("import java.text.DateFormat;\n"); //$NON-NLS-1$
+		writer.write("import java.io.BufferedReader;\n"); //$NON-NLS-1$
+		writer.write("import java.io.IOException;\n"); //$NON-NLS-1$
+		writer.write("import java.io.InputStream;\n"); //$NON-NLS-1$
+		writer.write("import java.io.InputStreamReader;\n"); //$NON-NLS-1$
+		writer.write("import java.util.ArrayList;\n"); //$NON-NLS-1$
+
+		writer.write("\n// " + desc + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("class " + name + "\n{\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		writer.write("\tpublic String binpath = \"\";\n"); //$NON-NLS-1$
+		writer.write("\tboolean debug = false;\n"); //$NON-NLS-1$
+		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("\tpublic void debug(boolean b){debug=b;};\n\n"); //$NON-NLS-1$
+
+		writer.write("//PARAMETERS DECLARATION\n"); //$NON-NLS-1$
+		for (Param p : params) {
+			p.declare(writer);
+		}
+		writer.write("//EXECUTABLES DECLARATION\n"); //$NON-NLS-1$
+		for (Executable exec : executables.values()) {
+			exec.build(writer);
+		}
+
+		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}\n"); //$NON-NLS-1$
+
+		writer.write("}"); //$NON-NLS-1$
+		writer.close();
+	}
+
+	/**
+	 * Describe.
+	 *
+	 * @return the string
+	 */
+	public String describe() {
+		StringBuffer buff = new StringBuffer();
+		buff.append("App: " + name + ", version: " + version + ", desc: " //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				+ desc + "\n"); //$NON-NLS-1$
+		buff.append(" All Params: " + params + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		for (Executable exec : executables.values())
+			buff.append(exec.describe());
+		return buff.toString();
+	}
+
+	/**
+	 * The main method.
+	 *
+	 * @param args the arguments
+	 */
+	public static void main(String args[]) {
+		try {
+			Application app = new Application(
+					new File(
+							"~/workspace/org.txm.toolbox/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);
+		}
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/processbuilder/Application.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/treetagger/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/treetagger/package.html	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/treetagger/package.html	(revision 147)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>TreeTagger wrapper : learning and tagging</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/treetagger/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/treetagger/Model.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/treetagger/Model.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/treetagger/Model.java	(revision 147)
@@ -0,0 +1,119 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.
+
+//
+// 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));
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/treetagger/Model.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/treetagger/TreeTagger.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/treetagger/TreeTagger.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/treetagger/TreeTagger.java	(revision 147)
@@ -0,0 +1,852 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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-09-19 10:31:00 +0200 (Mon, 19 Sep 2016) $
+// $LastChangedRevision: 3298 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils.treetagger;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.text.DateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Locale;
+
+import org.apache.commons.lang.StringUtils;
+
+// TODO: Auto-generated Javadoc
+// Tag files
+/**
+ * The Class TreeTagger.
+ */
+public class TreeTagger {
+
+	/** The binpath. */
+	String binpath = ""; //$NON-NLS-1$
+	String[] options;
+	/**
+	 * Instantiates a new tree tagger.
+	 *
+	 * @param binpath the binpath
+	 */
+	public TreeTagger(String binpath, String[] options) {
+		this.binpath = binpath;
+		this.options = options;
+	}
+
+	/** The version. */
+	String version = "0.0.0"; //$NON-NLS-1$
+
+	/** The desc. */
+	String desc = "Tag files"; //$NON-NLS-1$
+
+	/** The debug. */
+	boolean debug = false;
+
+	/**
+	 * Debug.
+	 *
+	 * @param b the b
+	 */
+	public void debug(boolean b) {
+		debug = b;
+	};
+
+	// Print the token
+	/** The istoken. */
+	private Boolean istoken = false;
+
+	/**
+	 * Settoken.
+	 */
+	public void settoken() {
+		this.istoken = true;
+	}
+
+	/**
+	 * Unsettoken.
+	 */
+	public void unsettoken() {
+		this.istoken = false;
+	}
+
+	// Print the lemma
+	/** The islemma. */
+	private Boolean islemma = false;
+
+	/**
+	 * Setlemma.
+	 */
+	public void setlemma() {
+		this.islemma = true;
+	}
+
+	/**
+	 * Unsetlemma.
+	 */
+	public void unsetlemma() {
+		this.islemma = false;
+	}
+
+	// Don't tag SGML annotations
+	/** The issgml. */
+	private Boolean issgml = false;
+
+	/**
+	 * Setsgml.
+	 */
+	public void setsgml() {
+		this.issgml = true;
+	}
+
+	/**
+	 * Unsetsgml.
+	 */
+	public void unsetsgml() {
+		this.issgml = false;
+	}
+
+	// Print all tags of a word with a probability higher than p times the
+	// largest probability
+	/** The isthreshold. */
+	private Boolean isthreshold = false;
+
+	/** The threshold. */
+	private float threshold;
+
+	/**
+	 * Sets the threshold.
+	 *
+	 * @param arg the new threshold
+	 */
+	public void setthreshold(float arg) {
+		this.isthreshold = true;
+		this.threshold = arg;
+	}
+
+	/**
+	 * Unsetthreshold.
+	 */
+	public void unsetthreshold() {
+		this.isthreshold = false;
+	}
+
+	// Print tag probabilities
+	/** The isprob. */
+	private Boolean isprob = false;
+
+	/**
+	 * Setprob.
+	 */
+	public void setprob() {
+		this.isprob = true;
+	}
+
+	/**
+	 * Unsetprob.
+	 */
+	public void unsetprob() {
+		this.isprob = false;
+	}
+
+	// Ignore prefix when guessing pos for unknown words
+	/** The isignoreprefix. */
+	private Boolean isignoreprefix = false;
+
+	/**
+	 * Setignoreprefix.
+	 */
+	public void setignoreprefix() {
+		this.isignoreprefix = true;
+	}
+
+	/**
+	 * Unsetignoreprefix.
+	 */
+	public void unsetignoreprefix() {
+		this.isignoreprefix = false;
+	}
+
+	// Print the token rather than [unknown] for unknown lemmas
+	/** The isnounknown. */
+	private Boolean isnounknown = false;
+
+	/**
+	 * Setnounknown.
+	 */
+	public void setnounknown() {
+		this.isnounknown = true;
+	}
+
+	/**
+	 * Unsetnounknown.
+	 */
+	public void unsetnounknown() {
+		this.isnounknown = false;
+	}
+
+	// Look up unknown capitalized words in the list of lower-case words
+	/** The iscapheuristics. */
+	private Boolean iscapheuristics = false;
+
+	/**
+	 * Setcapheuristics.
+	 */
+	public void setcapheuristics() {
+		this.iscapheuristics = true;
+	}
+
+	/**
+	 * Unsetcapheuristics.
+	 */
+	public void unsetcapheuristics() {
+		this.iscapheuristics = false;
+	}
+
+	// Turn on the heuristics fur guessing the parts of speech of unknown
+	// hyphenated words
+	/** The ishyphenheuristics. */
+	private Boolean ishyphenheuristics = false;
+
+	/**
+	 * Sethyphenheuristics.
+	 */
+	public void sethyphenheuristics() {
+		this.ishyphenheuristics = true;
+	}
+
+	/**
+	 * Unsethyphenheuristics.
+	 */
+	public void unsethyphenheuristics() {
+		this.ishyphenheuristics = false;
+	}
+
+	// quiet mode
+	/** The isquiet. */
+	private Boolean isquiet = false;
+
+	/**
+	 * Setquiet.
+	 */
+	public void setquiet() {
+		this.isquiet = true;
+	}
+
+	/**
+	 * Unsetquiet.
+	 */
+	public void unsetquiet() {
+		this.isquiet = false;
+	}
+
+	// pretagging with probabilities
+	/** The isptwithprob. */
+	private Boolean isptwithprob = false;
+
+	/**
+	 * Setptwithprob.
+	 */
+	public void setptwithprob() {
+		this.isptwithprob = true;
+	}
+
+	/**
+	 * Unsetptwithprob.
+	 */
+	public void unsetptwithprob() {
+		this.isptwithprob = false;
+	}
+
+	// pretagging with lemmata
+	/** The isptwithlemma. */
+	private Boolean isptwithlemma = false;
+
+	/**
+	 * Setptwithlemma.
+	 */
+	public void setptwithlemma() {
+		this.isptwithlemma = true;
+	}
+
+	/**
+	 * Unsetptwithlemma.
+	 */
+	public void unsetptwithlemma() {
+		this.isptwithlemma = false;
+	}
+
+	// Print lexical information for each word
+	/** The isproto. */
+	private Boolean isproto = false;
+
+	/**
+	 * Setproto.
+	 */
+	public void setproto() {
+		this.isproto = true;
+	}
+
+	/**
+	 * Unsetproto.
+	 */
+	public void unsetproto() {
+		this.isproto = false;
+	}
+
+	// Use only lexical probabilities for tagging
+	/** The isbase. */
+	private Boolean isbase = false;
+
+	/**
+	 * Setbase.
+	 */
+	public void setbase() {
+		this.isbase = true;
+	}
+
+	/**
+	 * Unsetbase.
+	 */
+	public void unsetbase() {
+		this.isbase = false;
+	}
+
+	// Set minimal tag frequency to [epsilon]
+	/** The iseps. */
+	private Boolean iseps = false;
+
+	/** The eps. */
+	private float eps;
+
+	/**
+	 * Sets the eps.
+	 *
+	 * @param arg the new eps
+	 */
+	public void seteps(float arg) {
+		this.iseps = true;
+		this.eps = arg;
+	}
+
+	/**
+	 * Unseteps.
+	 */
+	public void unseteps() {
+		this.iseps = false;
+	}
+
+	// Read auxiliary lexicon entries from file
+	/** The islex. */
+	private Boolean islex = false;
+
+	/** The lex. */
+	private String lex;
+
+	/**
+	 * Sets the lex.
+	 *
+	 * @param arg the new lex
+	 */
+	public void setlex(String arg) {
+		this.islex = true;
+		this.lex = arg;
+	}
+
+	/**
+	 * Unsetlex.
+	 */
+	public void unsetlex() {
+		this.islex = false;
+	}
+
+	// Read a word-class automaton from file
+	/** The iswc. */
+	private Boolean iswc = false;
+
+	/** The wc. */
+	private String wc;
+
+	/**
+	 * Sets the wc.
+	 *
+	 * @param arg the new wc
+	 */
+	public void setwc(String arg) {
+		this.iswc = true;
+		this.wc = arg;
+	}
+
+	/**
+	 * Unsetwc.
+	 */
+	public void unsetwc() {
+		this.iswc = false;
+	}
+
+	// The SGML tag [tag] signals the end of a sentence. this function implies
+	// the -sgml option
+	/** The iseostag. */
+	private Boolean iseostag = false;
+
+	/** The eostag. */
+	private String eostag;
+
+	/**
+	 * Sets the eostag.
+	 *
+	 * @param arg the new eostag
+	 */
+	public void seteostag(String arg) {
+		this.iseostag = true;
+		this.eostag = arg;
+	}
+
+	/**
+	 * Unseteostag.
+	 */
+	public void unseteostag() {
+		this.iseostag = false;
+	}
+
+	// Tag
+	/**
+	 * Treetagger.
+	 *
+	 * @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
+	{
+		ArrayList<String> args = new ArrayList<String>();
+		args.add(binpath + "tree-tagger"); //$NON-NLS-1$
+		if (istoken)
+			args.add("-token"); //$NON-NLS-1$
+		if (islemma)
+			args.add("-lemma"); //$NON-NLS-1$
+		if (issgml)
+			args.add("-sgml"); //$NON-NLS-1$
+		if (isthreshold) {
+			args.add("-threshold"); //$NON-NLS-1$
+			args.add("" + threshold);} //$NON-NLS-1$
+		if (isprob)
+			args.add("-prob"); //$NON-NLS-1$
+		if (isignoreprefix)
+			args.add("-ignore-prefix"); //$NON-NLS-1$
+		if (isnounknown)
+			args.add("-no-unknown"); //$NON-NLS-1$
+		if (iscapheuristics)
+			args.add("-cap-heuristics"); //$NON-NLS-1$
+		if (ishyphenheuristics)
+			args.add("-hyphen-heuristics"); //$NON-NLS-1$
+		if (isquiet)
+			args.add("-quiet"); //$NON-NLS-1$
+		if (isptwithprob)
+			args.add("-pt-with-prob"); //$NON-NLS-1$
+		if (isptwithlemma)
+			args.add("-pt-with-lemma"); //$NON-NLS-1$
+		if (isproto)
+			args.add("-proto"); //$NON-NLS-1$
+		if (isbase)
+			args.add("-base"); //$NON-NLS-1$
+		if (iseps) {
+			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$
+		if (iswc) {
+			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$
+
+		for (String option : options) {
+			//System.out.println("add manual option: "+option);
+			if (option.trim().length() > 0)
+				args.add(option);
+		}
+
+		args.add("" + modelfile); //$NON-NLS-1$
+		args.add("" + infile); //$NON-NLS-1$
+		args.add("" + outfile); //$NON-NLS-1$
+
+		if (debug) System.out.println(StringUtils.join(args.toArray(), " "));
+
+		ProcessBuilder pb = new ProcessBuilder(args);
+		pb.redirectErrorStream(true);
+		Process process = null;
+		try {
+			process = pb.start();
+		} catch (IOException e) {
+			System.err.println(e);
+		}
+		InputStream is = process.getInputStream();
+		InputStreamReader isr = new InputStreamReader(is);
+		BufferedReader br = new BufferedReader(isr);
+		String line;
+		while ((line = br.readLine()) != null) {
+			System.out.println(line);
+		}
+		int e = 0;
+		try {
+			e = process.waitFor();
+		} 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.out.println("Args: ");
+			for (int c = 0; c < args.size(); c++)
+				System.out.print("" + args.get(c) + " "); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println();
+		}
+
+		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.write("<txm:commandLine>" + //$NON-NLS-1$
+				"  <txm:os name=\"" //$NON-NLS-1$
+				+ 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:arg name=\"input\" type=\"String\">" + infile //$NON-NLS-1$
+				+ "</txm:arg>" + //$NON-NLS-1$ 
+				"    <txm:arg name=\"output\" type=\"String\">" //$NON-NLS-1$
+				+ outfile + "</txm:arg>" + //$NON-NLS-1$ 
+				"  </txm:args>" + //$NON-NLS-1$
+				"</txm:commandLine>"); //$NON-NLS-1$
+		writer.flush();
+		writer.close();
+	}
+
+	// number of preceding words
+	/** The iscl. */
+	private Boolean iscl = false;
+
+	/** The cl. */
+	private int cl;
+
+	/**
+	 * Sets the cl.
+	 *
+	 * @param arg the new cl
+	 */
+	public void setcl(int arg) {
+		this.iscl = true;
+		this.cl = arg;
+	}
+
+	/**
+	 * Unsetcl.
+	 */
+	public void unsetcl() {
+		this.iscl = false;
+	}
+
+	// min. decision tree gain
+	/** The isdtg. */
+	private Boolean isdtg = false;
+
+	/** The dtg. */
+	private float dtg;
+
+	/**
+	 * Sets the dtg.
+	 *
+	 * @param arg the new dtg
+	 */
+	public void setdtg(float arg) {
+		this.isdtg = true;
+		this.dtg = arg;
+	}
+
+	/**
+	 * Unsetdtg.
+	 */
+	public void unsetdtg() {
+		this.isdtg = false;
+	}
+
+	// A smoothing weight parameter
+	/** The issw. */
+	private Boolean issw = false;
+
+	/** The sw. */
+	private float sw;
+
+	/**
+	 * Sets the sw.
+	 *
+	 * @param arg the new sw
+	 */
+	public void setsw(float arg) {
+		this.issw = true;
+		this.sw = arg;
+	}
+
+	/**
+	 * Unsetsw.
+	 */
+	public void unsetsw() {
+		this.issw = false;
+	}
+
+	// affix tree gain
+	/** The isatg. */
+	private Boolean isatg = false;
+
+	/** The atg. */
+	private float atg;
+
+	/**
+	 * Sets the atg.
+	 *
+	 * @param arg the new atg
+	 */
+	public void setatg(float arg) {
+		this.isatg = true;
+		this.atg = arg;
+	}
+
+	/**
+	 * Unsetatg.
+	 */
+	public void unsetatg() {
+		this.isatg = false;
+	}
+
+	// the end-of-sentence part-of-speech tag
+	/** The isst. */
+	private Boolean isst = false;
+
+	/** The st. */
+	private String st;
+
+	/**
+	 * Sets the st.
+	 *
+	 * @param arg the new st
+	 */
+	public void setst(String arg) {
+		this.isst = true;
+		this.st = arg;
+	}
+
+	/**
+	 * Unsetst.
+	 */
+	public void unsetst() {
+		this.isst = false;
+	}
+
+	// weight of the equivalence class based probability estimates
+	/** The isecw. */
+	private Boolean isecw = false;
+
+	/** The ecw. */
+	private float ecw;
+
+	/**
+	 * Sets the ecw.
+	 *
+	 * @param arg the new ecw
+	 */
+	public void setecw(float arg) {
+		this.isecw = true;
+		this.ecw = arg;
+	}
+
+	/**
+	 * Unsetecw.
+	 */
+	public void unsetecw() {
+		this.isecw = false;
+	}
+
+	// probability for lexical entries. default 0.001
+	/** The islt. */
+	private Boolean islt = false;
+
+	/** The lt. */
+	private float lt;
+
+	/**
+	 * Sets the lt.
+	 *
+	 * @param arg the new lt
+	 */
+	public void setlt(float arg) {
+		this.islt = true;
+		this.lt = arg;
+	}
+
+	/**
+	 * Unsetlt.
+	 */
+	public void unsetlt() {
+		this.islt = false;
+	}
+
+	// assume that the data is encoded with UTF8
+	/** The isutf8. */
+	private Boolean isutf8 = false;
+
+	/**
+	 * Setutf8.
+	 */
+	public void setutf8() {
+		this.isutf8 = true;
+	}
+
+	/**
+	 * Unsetutf8.
+	 */
+	public void unsetutf8() {
+		this.isutf8 = false;
+	}
+
+	// Train
+	/**
+	 * 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.
+	 */
+	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$
+		if (isquiet)
+			args.add("-quiet"); //$NON-NLS-1$
+
+		if (iscl) {
+			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$
+		if (issw) {
+			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$
+		if (isst) {
+			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$
+		if (islt) {
+			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$
+		args.add("" + openclassfile); //$NON-NLS-1$
+		args.add("" + infile); //$NON-NLS-1$
+		args.add("" + outfile); //$NON-NLS-1$
+
+		ProcessBuilder pb = new ProcessBuilder(args);
+		if (debug) System.out.println(StringUtils.join(args.toArray(), " "));
+		pb.redirectErrorStream(true);
+		Process process = null;
+		try {
+			process = pb.start();
+		} catch (IOException e) {
+			System.err.println(e);
+		}
+		InputStream is = process.getInputStream();
+		InputStreamReader isr = new InputStreamReader(is);
+		BufferedReader br = new BufferedReader(isr);
+		String line;
+		while ((line = br.readLine()) != null) {
+			System.out.println(line);
+		}
+		int e = 0;
+		try {
+			e = process.waitFor();
+		} 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.out.println("Args: ");
+			for (int c = 0; c < args.size(); c++)
+				System.out.print("" + args.get(c) + " "); //$NON-NLS-1$ //$NON-NLS-2$
+			System.out.println();
+		}
+	}
+
+	/**
+	 * The main method.
+	 *
+	 * @param args the arguments
+	 */
+	public static void main(String[] args) {
+
+	}
+}
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/treetagger/TreeTagger.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/treetagger/ModelCatalog.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/treetagger/ModelCatalog.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/treetagger/ModelCatalog.java	(revision 147)
@@ -0,0 +1,220 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.
+
+//
+// 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();
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/treetagger/ModelCatalog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/Sh.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Sh.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/Sh.java	(revision 147)
@@ -0,0 +1,195 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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: 2011-05-09 14:58:28 +0200 (lun., 09 mai 2011) $
+// $LastChangedRevision: 1839 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils;
+
+import java.util.Date;
+import java.util.Locale;
+import java.text.DateFormat;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.ArrayList;
+
+import org.txm.Messages;
+import org.txm.utils.logger.Log;
+
+// TODO: Auto-generated Javadoc
+// Shell
+/**
+ * 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
+	 */
+	public Sh(String binpath) {
+		// System.out.println("set binpath "+binpath);
+		this.binpath = binpath;
+	}
+
+	// execute command line in argument
+	/** The isc. */
+	private Boolean isc = false;
+	
+	/** The c. */
+	private String c;
+
+	/**
+	 * Sets the isc.
+	 *
+	 * @param arg the new isc
+	 */
+	public void setIsc(String arg) {
+		this.isc = true;
+		this.c = arg;
+	}
+
+	/**
+	 * Unset isc.
+	 */
+	public void unsetIsc() {
+		this.isc = false;
+	}
+
+	// Sh
+	/**
+	 * Shexe.
+	 *
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public void shexe() throws IOException {
+		ArrayList<String> args = new ArrayList<String>();
+		args.add(binpath + "sh.exe"); //$NON-NLS-1$
+		if (isc)
+			args.add("-c " + c); //$NON-NLS-1$
+		System.out.println(args);
+		ProcessBuilder pb = new ProcessBuilder(args);
+		pb.redirectErrorStream(true);
+		Process process = null;
+		try {
+			process = pb.start();
+		} catch (IOException e) {
+			System.err.println(e);
+		}
+		InputStream is = process.getInputStream();
+		InputStreamReader isr = new InputStreamReader(is);
+		BufferedReader br = new BufferedReader(isr);
+		String line;
+		while ((line = br.readLine()) != null) {
+			System.out.println(line);
+		}
+		int e = 0;
+		try {
+			e = process.waitFor();
+		} catch (InterruptedException e1) {
+			// TODO Auto-generated catch block
+			org.txm.utils.logger.Log.printStackTrace(e1);
+		}
+		if (e != 0) {
+			System.err.println(Messages.Sh_4
+					+ e
+					+ " at " //$NON-NLS-1$
+					+ DateFormat.getDateInstance(DateFormat.FULL, Locale.UK)
+							.format(new Date()));
+		}
+	}
+
+	// Sh
+	/**
+	 * Sh.
+	 *
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public void sh() throws IOException {
+		ArrayList<String> args = new ArrayList<String>();
+		args.add(binpath + "sh"); //$NON-NLS-1$
+		if (isc) {
+			args.add("-c"); //$NON-NLS-1$
+			args.add(c);
+		}
+		// System.out.println(args);
+		ProcessBuilder pb = new ProcessBuilder(args);
+		pb.redirectErrorStream(true);
+		Process process = null;
+		try {
+			process = pb.start();
+		} catch (IOException e) {
+			Log.info(Log.toString(e));
+		}
+		InputStream is = process.getInputStream();
+		InputStreamReader isr = new InputStreamReader(is);
+		BufferedReader br = new BufferedReader(isr);
+		String line;
+		while ((line = br.readLine()) != null) {
+			Log.info(line);
+		}
+		int e = 0;
+		try {
+			e = process.waitFor();
+		} catch (InterruptedException e1) {
+			// TODO Auto-generated catch block
+			org.txm.utils.logger.Log.printStackTrace(e1);
+		}
+		if (e != 0) {
+			Log.info(Messages.Sh_4
+					+ e
+					+ " at " //$NON-NLS-1$
+					+ DateFormat.getDateInstance(DateFormat.FULL, Locale.UK)
+							.format(new Date()));
+		}
+	}
+
+	/**
+	 * The main method.
+	 *
+	 * @param args the arguments
+	 */
+	public static void main(String[] args) {
+		// Sh tt = new Sh("");
+		// tt.setIsc("kill `ps aux | grep cqpserver | awk '/-P 4877/ {print \\$2}'`");//
+		// try {
+		// tt.sh();
+		// } catch (IOException e) {
+		// // TODO Auto-generated catch block
+		// org.txm.utils.logger.Log.printStackTrace(e);
+		// }
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/Sh.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/LangDetector.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/LangDetector.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/LangDetector.java	(revision 147)
@@ -0,0 +1,117 @@
+package org.txm.utils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.knallgrau.utils.textcat.TextCategorizer;
+import org.txm.utils.xml.DomUtils;
+import org.w3c.dom.DOMException;
+import org.xml.sax.SAXException;
+
+public class LangDetector {
+	public static int MINIMALSIZE = 10000;
+
+	String lang = System.getProperty("user.language");
+	String encoding = System.getProperty("file.encoding");
+
+	LinkedHashMap<String, Integer> langs = new LinkedHashMap<String, Integer>();
+	static HashMap<String, String> translations = new HashMap<String, String>();
+	static {
+		translations.put("french", "fr");
+		translations.put("english", "en");
+		translations.put("spanish", "sp");
+		translations.put("italian", "it");
+		translations.put("danish", "da");
+		translations.put("swedish", "sv");
+		translations.put("hungarian", "hu");
+		translations.put("slovakian", "sk");
+		translations.put("german", "de");
+		translations.put("dutch", "nl");
+		translations.put("albanian", "al");
+		translations.put("norwegian", "no");
+		translations.put("finnish", "fi");
+		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())
+			processDirectory(file);
+		else
+			processFile(file);
+	}
+
+	private void processDirectory(File dir) throws IOException, DOMException, ParserConfigurationException, SAXException
+	{
+		//println "process $dir"
+		if(dir.isDirectory()) {
+			for (File file : dir.listFiles())
+				if (file.isFile())
+					processFile(file);
+		} else {
+			processFile(dir);
+		}
+
+	}
+
+	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()
+		String langcode = guesser.categorize(text);
+		String guessedLang = translations.get(langcode);
+		if (guessedLang == null) {
+			guessedLang = langcode;
+		}
+
+		//println "$file guessed $guessedLang"
+		if (!langs.containsKey(guessedLang))
+			langs.put(guessedLang, 0);
+		langs.put(guessedLang, langs.get(guessedLang)+1);
+	}
+
+	public String getLang()
+	{
+		int max = 0;
+		//println "LANGS: "+langs
+		for (String s : langs.keySet()) {
+			if (max < langs.get(s)) {
+				max = langs.get(s);
+				lang = s;
+			}
+		}
+		return lang;
+	}
+
+	public static void configFromModels(File dir)
+	{
+		File[] files = dir.listFiles();
+		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));
+	}
+
+	public HashMap<String, Integer> getLangs()
+	{
+		return langs;
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/LangDetector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/OSDetector.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/OSDetector.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/OSDetector.java	(revision 147)
@@ -0,0 +1,59 @@
+package org.txm.utils;
+
+import org.apache.tools.ant.taskdefs.condition.Os;
+
+/**
+ * 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
+	 */
+	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
+	 */
+	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
+	 */
+	public static boolean isFamilyMac()	{
+		return Os.isFamily(Os.FAMILY_MAC);
+	}
+	
+	/**
+	 * Checks if the operating system of the runtime target is 64bit architecture. 
+	 * @return
+	 */
+	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) {
+		System.out.println("Runtime OS name: " + System.getProperty("os.name")); //$NON-NLS-1$
+		System.out.println("Runtime OS arch: " + System.getProperty("os.arch")); //$NON-NLS-1$
+		System.out.println("Runtime OS version: " + System.getProperty("os.version")); //$NON-NLS-1$
+		System.out.println("Is arch 64bit ?: " + isArch64()); //$NON-NLS-1$
+		System.out.println("Windows OS family: " + isFamilyWindows()); //$NON-NLS-1$
+		System.out.println("Unix OS family: " + isFamilyUnix()); //$NON-NLS-1$
+		System.out.println("Mac OS family: " + isFamilyMac()); //$NON-NLS-1$
+	}
+	
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/OSDetector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/LS.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/LS.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/LS.java	(revision 147)
@@ -0,0 +1,53 @@
+package org.txm.utils;
+import java.io.*;
+import java.util.ArrayList;
+
+import org.txm.Messages;
+
+class LS {
+
+	/**
+	 * Prints the Content of the Directory
+	 *
+	 * @param dir
+	 *            Directory
+	 * @param recur
+	 *            Recursion
+	 * @param size
+	 *            SizeRecursion
+	 * @param hidden
+	 *            Show hidden Files
+	 */
+	public static ArrayList<File> list(File dir, boolean recur, boolean hidden) {
+		ArrayList<File> result = new ArrayList<File>();
+		if ((dir != null) && dir.exists() && dir.isDirectory()) {
+			File[] filelist = dir.listFiles();
+
+			for (File file : filelist) {
+				if (hidden || !file.isHidden()) {
+					result.add(file);
+					if (file.isDirectory() && recur) {
+						result.addAll(list(file, recur, hidden));
+					} 
+				}
+			}
+		} else {
+			System.err.println(Messages.LS_0 + dir + Messages.LS_1);
+		}
+		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());
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/LS.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/CsvReader.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/CsvReader.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/CsvReader.java	(revision 147)
@@ -0,0 +1,1958 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.utils;
+/*
+ * Java CSV is a stream based library for reading and writing
+ * CSV and other delimited data.
+ *   
+ * Copyright (C) Bruce Dunwiddie bruce@csvreader.com
+ *
+ * This library is free software; you can redistribute it and/or
+ * modif y it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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 the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fif th Floor, Boston, MA  02110-1301, USA
+ */
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.StringReader;
+import java.nio.charset.Charset;
+import java.text.NumberFormat;
+import java.util.HashMap;
+
+// TODO: Auto-generated Javadoc
+/**
+ * A stream based parser for parsing delimited text data from a file or a
+ * stream.
+ */
+public class CsvReader {
+	
+	/** The input stream. */
+	private Reader inputStream = null;
+
+	/** The file name. */
+	private String fileName = null;
+
+	// this holds all the values for switches that the user is allowed to set
+	/** The user settings. */
+	private UserSettings userSettings = new UserSettings();
+
+	/** The charset. */
+	private Charset charset = null;
+
+	/** The use custom record delimiter. */
+	private boolean useCustomRecordDelimiter = false;
+
+	// this will be our working buffer to hold data chunks
+	// read in from the data file
+
+	/** The data buffer. */
+	private DataBuffer dataBuffer = new DataBuffer();
+
+	/** The column buffer. */
+	private ColumnBuffer columnBuffer = new ColumnBuffer();
+
+	/** The raw buffer. */
+	private RawRecordBuffer rawBuffer = new RawRecordBuffer();
+
+	/** The is qualified. */
+	private boolean[] isQualified = null;
+
+	/** The raw record. */
+	private String rawRecord = ""; //$NON-NLS-1$
+
+	/** The headers holder. */
+	private HeadersHolder headersHolder = new HeadersHolder();
+
+	// these are all more or less global loop variables
+	// to keep from needing to pass them all into various
+	// methods during parsing
+
+	/** The started column. */
+	private boolean startedColumn = false;
+
+	/** The started with qualifier. */
+	private boolean startedWithQualifier = false;
+
+	/** The has more data. */
+	private boolean hasMoreData = true;
+
+	/** The last letter. */
+	private char lastLetter = '\0';
+
+	/** The has read next line. */
+	private boolean hasReadNextLine = false;
+
+	/** The columns count. */
+	private int columnsCount = 0;
+
+	/** The current record. */
+	private long currentRecord = 0;
+
+	/** The values. */
+	private String[] values = new String[StaticSettings.INITIAL_COLUMN_COUNT];
+
+	/** The initialized. */
+	private boolean initialized = false;
+
+	/** The closed. */
+	private boolean closed = false;
+
+	/**
+	 * Double up the text qualif ier to represent an occurance of the text
+	 * qualif ier.
+	 */
+	public static final int ESCAPE_MODE_DOUBLED = 1;
+
+	/**
+	 * Use a backslash character before the text qualif ier to represent an
+	 * occurance of the text qualif ier.
+	 */
+	public static final int ESCAPE_MODE_BACKSLASH = 2;
+
+	/**
+	 * 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
+	 */
+	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$
+		}
+
+		if (charset == null) {
+			throw new IllegalArgumentException(
+					"Parameter charset can not be null."); //$NON-NLS-1$
+		}
+
+		if (!new File(fileName).exists()) {
+			throw new FileNotFoundException("File " + fileName //$NON-NLS-1$
+					+ " does not exist."); //$NON-NLS-1$
+		}
+
+		this.fileName = fileName;
+		this.userSettings.Delimiter = delimiter;
+		this.charset = charset;
+
+		isQualified = new boolean[values.length];
+	}
+
+	/**
+	 * 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}.
+	 */
+	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}.
+	 *
+	 * @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);
+	}
+
+	/**
+	 * 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.
+	 */
+	public CsvReader(Reader inputStream, char delimiter) {
+		if (inputStream == null) {
+			throw new IllegalArgumentException(
+					"Parameter inputStream can not be null."); //$NON-NLS-1$
+		}
+
+		this.inputStream = inputStream;
+		this.userSettings.Delimiter = delimiter;
+		initialized = true;
+
+		isQualified = new boolean[values.length];
+	}
+
+	/**
+	 * 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.
+	 */
+	public CsvReader(Reader inputStream) {
+		this(inputStream, Letters.COMMA);
+	}
+
+	/**
+	 * 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.
+	 */
+	public CsvReader(InputStream inputStream, char delimiter, Charset charset) {
+		this(new InputStreamReader(inputStream, charset), delimiter);
+	}
+
+	/**
+	 * 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.
+	 */
+	public CsvReader(InputStream inputStream, Charset charset) {
+		this(new InputStreamReader(inputStream, charset));
+	}
+
+	/**
+	 * Gets the capture raw record.
+	 *
+	 * @return the capture raw record
+	 */
+	public boolean getCaptureRawRecord() {
+		return userSettings.CaptureRawRecord;
+	}
+
+	/**
+	 * Sets the capture raw record.
+	 *
+	 * @param captureRawRecord the new capture raw record
+	 */
+	public void setCaptureRawRecord(boolean captureRawRecord) {
+		userSettings.CaptureRawRecord = captureRawRecord;
+	}
+
+	/**
+	 * Gets the raw record.
+	 *
+	 * @return the raw record
+	 */
+	public String getRawRecord() {
+		return rawRecord;
+	}
+
+	/**
+	 * 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.
+	 */
+	public boolean getTrimWhitespace() {
+		return userSettings.TrimWhitespace;
+	}
+
+	/**
+	 * Sets whether leading and trailing whitespace characters should be trimmed
+	 * from non-textqualified column data or not. Default is true.
+	 * 
+	 * @param trimWhitespace
+	 *            Whether leading and trailing whitespace characters should be
+	 *            trimmed from non-textqualified column data or not.
+	 */
+	public void setTrimWhitespace(boolean trimWhitespace) {
+		userSettings.TrimWhitespace = trimWhitespace;
+	}
+
+	/**
+	 * Gets the character being used as the column delimiter. Default is comma,
+	 * ','.
+	 * 
+	 * @return The character being used as the column delimiter.
+	 */
+	public char getDelimiter() {
+		return userSettings.Delimiter;
+	}
+
+	/**
+	 * Sets the character to use as the column delimiter. Default is comma, ','.
+	 * 
+	 * @param delimiter
+	 *            The character to use as the column delimiter.
+	 */
+	public void setDelimiter(char delimiter) {
+		userSettings.Delimiter = delimiter;
+	}
+
+	/**
+	 * Gets the record delimiter.
+	 *
+	 * @return the record delimiter
+	 */
+	public char getRecordDelimiter() {
+		return userSettings.RecordDelimiter;
+	}
+
+	/**
+	 * Sets the character to use as the record delimiter.
+	 * 
+	 * @param recordDelimiter
+	 *            The character to use as the record delimiter. Default is
+	 *            combination of standard end of line characters for Windows,
+	 *            Unix, or Mac.
+	 */
+	public void setRecordDelimiter(char recordDelimiter) {
+		useCustomRecordDelimiter = true;
+		userSettings.RecordDelimiter = recordDelimiter;
+	}
+
+	/**
+	 * Gets the character to use as a text qualif ier in the data.
+	 * 
+	 * @return The character to use as a text qualif ier in the data.
+	 */
+	public char getTextQualifier() {
+		return userSettings.TextQualifier;
+	}
+
+	/**
+	 * Sets the character to use as a text qualif ier in the data.
+	 * 
+	 * @param textQualifier
+	 *            The character to use as a text qualif ier in the data.
+	 */
+	public void setTextQualifier(char textQualifier) {
+		userSettings.TextQualifier = textQualifier;
+	}
+
+	/**
+	 * Whether text qualif iers will be used while parsing or not.
+	 * 
+	 * @return Whether text qualif iers will be used while parsing or not.
+	 */
+	public boolean getUseTextQualifier() {
+		return userSettings.UseTextQualifier;
+	}
+
+	/**
+	 * Sets whether text qualif iers will be used while parsing or not.
+	 * 
+	 * @param useTextQualifier
+	 *            Whether to use a text qualif ier while parsing or not.
+	 */
+	public void setUseTextQualifier(boolean useTextQualifier) {
+		userSettings.UseTextQualifier = useTextQualifier;
+	}
+
+	/**
+	 * Gets the character being used as a comment signal.
+	 * 
+	 * @return The character being used as a comment signal.
+	 */
+	public char getComment() {
+		return userSettings.Comment;
+	}
+
+	/**
+	 * Sets the character to use as a comment signal.
+	 * 
+	 * @param comment
+	 *            The character to use as a comment signal.
+	 */
+	public void setComment(char comment) {
+		userSettings.Comment = comment;
+	}
+
+	/**
+	 * Gets whether comments are being looked for while parsing or not.
+	 * 
+	 * @return Whether comments are being looked for while parsing or not.
+	 */
+	public boolean getUseComments() {
+		return userSettings.UseComments;
+	}
+
+	/**
+	 * Sets whether comments are being looked for while parsing or not.
+	 * 
+	 * @param useComments
+	 *            Whether comments are being looked for while parsing or not.
+	 */
+	public void setUseComments(boolean useComments) {
+		userSettings.UseComments = useComments;
+	}
+
+	/**
+	 * 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.
+	 */
+	public int getEscapeMode() {
+		return userSettings.EscapeMode;
+	}
+
+	/**
+	 * 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.
+	 */
+	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$
+		}
+
+		userSettings.EscapeMode = escapeMode;
+	}
+
+	/**
+	 * Gets the skip empty records.
+	 *
+	 * @return the skip empty records
+	 */
+	public boolean getSkipEmptyRecords() {
+		return userSettings.SkipEmptyRecords;
+	}
+
+	/**
+	 * Sets the 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.
+	 * 
+	 * @return The current setting of the safety switch.
+	 */
+	public boolean getSafetySwitch() {
+		return userSettings.SafetySwitch;
+	}
+
+	/**
+	 * 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
+	 */
+	public void setSafetySwitch(boolean safetySwitch) {
+		userSettings.SafetySwitch = safetySwitch;
+	}
+
+	/**
+	 * Gets the count of columns found in this record.
+	 * 
+	 * @return The count of columns found in this record.
+	 */
+	public int getColumnCount() {
+		return columnsCount;
+	}
+
+	/**
+	 * Gets the index of the current record.
+	 * 
+	 * @return The index of the current record.
+	 */
+	public long getCurrentRecord() {
+		return currentRecord - 1;
+	}
+
+	/**
+	 * 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()}.
+	 */
+	public int getHeaderCount() {
+		return headersHolder.Length;
+	}
+
+	/**
+	 * 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.
+	 */
+	public String[] getHeaders() throws IOException {
+		checkClosed();
+
+		if (headersHolder.Headers == null) {
+			return null;
+		} else {
+			// use clone here to prevent the outside code from
+			// 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);
+			return clone;
+		}
+	}
+
+	/**
+	 * Sets the headers.
+	 *
+	 * @param headers the new headers
+	 */
+	public void setHeaders(String[] headers) {
+		headersHolder.Headers = headers;
+
+		headersHolder.IndexByName.clear();
+
+		if (headers != null) {
+			headersHolder.Length = headers.length;
+		} else {
+			headersHolder.Length = 0;
+		}
+
+		// use headersHolder.Length here in case headers is null
+		for (int i = 0; i < headersHolder.Length; i++) {
+			headersHolder.IndexByName.put(headers[i], new Integer(i));
+		}
+	}
+
+	/**
+	 * Gets the values.
+	 *
+	 * @return the values
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public String[] getValues() throws IOException {
+		checkClosed();
+
+		// need to return a clone, and can't use clone because values.Length
+		// might be greater than columnsCount
+		String[] clone = new String[columnsCount];
+		System.arraycopy(values, 0, clone, 0, columnsCount);
+		return clone;
+	}
+
+	/**
+	 * Returns the current column value for a given column index.
+	 *
+	 * @param columnIndex The index of the column.
+	 * @return The current column value.
+	 * @throws IOException Thrown if this object has already been closed.
+	 */
+	public String get(int columnIndex) throws IOException {
+		checkClosed();
+
+		if (columnIndex > -1 && columnIndex < columnsCount) {
+			return values[columnIndex];
+		} else {
+			return ""; //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Returns the current column value for a given column header name.
+	 *
+	 * @param headerName The header name of the column.
+	 * @return The current column value.
+	 * @throws IOException Thrown if this object has already been closed.
+	 */
+	public String get(String headerName) throws IOException {
+		checkClosed();
+
+		return get(getIndex(headerName));
+	}
+
+	/**
+	 * 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}.
+	 */
+	public static CsvReader parse(String data) {
+		if (data == null) {
+			throw new IllegalArgumentException(
+					"Parameter data can not be null."); //$NON-NLS-1$
+		}
+
+		return new CsvReader(new StringReader(data));
+	}
+
+	/**
+	 * 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.
+	 */
+	public boolean readRecord() throws IOException {
+		checkClosed();
+
+		columnsCount = 0;
+		rawBuffer.Position = 0;
+
+		dataBuffer.LineStart = dataBuffer.Position;
+
+		hasReadNextLine = false;
+
+		// check to see if we've already found the end of data
+
+		if (hasMoreData) {
+			// loop over the data stream until the end of data is found
+			// or the end of the record is found
+
+			do {
+				if (dataBuffer.Position == dataBuffer.Count) {
+					checkDataLength();
+				} else {
+					startedWithQualifier = false;
+
+					// grab the current letter as a char
+
+					char currentLetter = dataBuffer.Buffer[dataBuffer.Position];
+
+					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
+						// qualified columns
+
+						lastLetter = currentLetter;
+
+						// read qualified
+						startedColumn = true;
+						dataBuffer.ColumnStart = dataBuffer.Position + 1;
+						startedWithQualifier = true;
+						boolean lastLetterWasQualifier = false;
+
+						char escapeChar = userSettings.TextQualifier;
+
+						if (userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH) {
+							escapeChar = Letters.BACKSLASH;
+						}
+
+						boolean eatingTrailingJunk = false;
+						boolean lastLetterWasEscape = false;
+						boolean readingComplexEscape = false;
+						int escape = ComplexEscape.UNICODE;
+						int escapeLength = 0;
+						char escapeValue = (char) 0;
+
+						dataBuffer.Position++;
+
+						do {
+							if (dataBuffer.Position == dataBuffer.Count) {
+								checkDataLength();
+							} else {
+								// grab the current letter as a char
+
+								currentLetter = dataBuffer.Buffer[dataBuffer.Position];
+
+								if (eatingTrailingJunk) {
+									dataBuffer.ColumnStart = dataBuffer.Position + 1;
+
+									if (currentLetter == userSettings.Delimiter) {
+										endColumn();
+									} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF))
+											|| (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
+										endColumn();
+
+										endRecord();
+									}
+								} else if (readingComplexEscape) {
+									escapeLength++;
+
+									switch (escape) {
+									case ComplexEscape.UNICODE:
+										escapeValue *= (char) 16;
+										escapeValue += hexToDec(currentLetter);
+
+										if (escapeLength == 4) {
+											readingComplexEscape = false;
+										}
+
+										break;
+									case ComplexEscape.OCTAL:
+										escapeValue *= (char) 8;
+										escapeValue += (char) (currentLetter - '0');
+
+										if (escapeLength == 3) {
+											readingComplexEscape = false;
+										}
+
+										break;
+									case ComplexEscape.DECIMAL:
+										escapeValue *= (char) 10;
+										escapeValue += (char) (currentLetter - '0');
+
+										if (escapeLength == 3) {
+											readingComplexEscape = false;
+										}
+
+										break;
+									case ComplexEscape.HEX:
+										escapeValue *= (char) 16;
+										escapeValue += hexToDec(currentLetter);
+
+										if (escapeLength == 2) {
+											readingComplexEscape = false;
+										}
+
+										break;
+									}
+
+									if (!readingComplexEscape) {
+										appendLetter(escapeValue);
+									} else {
+										dataBuffer.ColumnStart = dataBuffer.Position + 1;
+									}
+								} else if (currentLetter == userSettings.TextQualifier) {
+									if (lastLetterWasEscape) {
+										lastLetterWasEscape = false;
+										lastLetterWasQualifier = false;
+									} else {
+										updateCurrentValue();
+
+										if (userSettings.EscapeMode == ESCAPE_MODE_DOUBLED) {
+											lastLetterWasEscape = true;
+										}
+
+										lastLetterWasQualifier = true;
+									}
+								} else if (userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH
+										&& lastLetterWasEscape) {
+									switch (currentLetter) {
+									case 'n':
+										appendLetter(Letters.LF);
+										break;
+									case 'r':
+										appendLetter(Letters.CR);
+										break;
+									case 't':
+										appendLetter(Letters.TAB);
+										break;
+									case 'b':
+										appendLetter(Letters.BACKSPACE);
+										break;
+									case 'f':
+										appendLetter(Letters.FORM_FEED);
+										break;
+									case 'e':
+										appendLetter(Letters.ESCAPE);
+										break;
+									case 'v':
+										appendLetter(Letters.VERTICAL_TAB);
+										break;
+									case 'a':
+										appendLetter(Letters.ALERT);
+										break;
+									case '0':
+									case '1':
+									case '2':
+									case '3':
+									case '4':
+									case '5':
+									case '6':
+									case '7':
+										escape = ComplexEscape.OCTAL;
+										readingComplexEscape = true;
+										escapeLength = 1;
+										escapeValue = (char) (currentLetter - '0');
+										dataBuffer.ColumnStart = dataBuffer.Position + 1;
+										break;
+									case 'u':
+									case 'x':
+									case 'o':
+									case 'd':
+									case 'U':
+									case 'X':
+									case 'O':
+									case 'D':
+										switch (currentLetter) {
+										case 'u':
+										case 'U':
+											escape = ComplexEscape.UNICODE;
+											break;
+										case 'x':
+										case 'X':
+											escape = ComplexEscape.HEX;
+											break;
+										case 'o':
+										case 'O':
+											escape = ComplexEscape.OCTAL;
+											break;
+										case 'd':
+										case 'D':
+											escape = ComplexEscape.DECIMAL;
+											break;
+										}
+
+										readingComplexEscape = true;
+										escapeLength = 0;
+										escapeValue = (char) 0;
+										dataBuffer.ColumnStart = dataBuffer.Position + 1;
+
+										break;
+									default:
+										break;
+									}
+
+									lastLetterWasEscape = false;
+
+									// can only happen for ESCAPE_MODE_BACKSLASH
+								} else if (currentLetter == escapeChar) {
+									updateCurrentValue();
+									lastLetterWasEscape = true;
+								} else {
+									if (lastLetterWasQualifier) {
+										if (currentLetter == userSettings.Delimiter) {
+											endColumn();
+										} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF))
+												|| (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
+											endColumn();
+
+											endRecord();
+										} else {
+											dataBuffer.ColumnStart = dataBuffer.Position + 1;
+
+											eatingTrailingJunk = true;
+										}
+
+										// make sure to clear the flag for next
+										// run of the loop
+
+										lastLetterWasQualifier = false;
+									}
+								}
+
+								// keep track of the last letter because we need
+								// it for several key decisions
+
+								lastLetter = currentLetter;
+
+								if (startedColumn) {
+									dataBuffer.Position++;
+
+									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$
+														+ " if you're expecting column lengths greater than 100,000 characters to" //$NON-NLS-1$
+														+ " avoid this error."); //$NON-NLS-1$
+									}
+								}
+							} // end else
+
+						} while (hasMoreData && startedColumn);
+					} else if (currentLetter == userSettings.Delimiter) {
+						// we encountered a column with no data, so
+						// just send the end column
+
+						lastLetter = currentLetter;
+
+						endColumn();
+					} else if (useCustomRecordDelimiter
+							&& currentLetter == userSettings.RecordDelimiter) {
+						// this will skip blank lines
+						if (startedColumn || columnsCount > 0
+								|| !userSettings.SkipEmptyRecords) {
+							endColumn();
+
+							endRecord();
+						} else {
+							dataBuffer.LineStart = dataBuffer.Position + 1;
+						}
+
+						lastLetter = currentLetter;
+					} 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))) {
+							endColumn();
+
+							endRecord();
+						} else {
+							dataBuffer.LineStart = dataBuffer.Position + 1;
+						}
+
+						lastLetter = currentLetter;
+					} 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)) {
+						// do nothing, this will trim leading whitespace
+						// for both text qualified columns and non
+
+						startedColumn = true;
+						dataBuffer.ColumnStart = dataBuffer.Position + 1;
+					} else {
+						// since the letter wasn't a special letter, this
+						// will be the first letter of our current column
+
+						startedColumn = true;
+						dataBuffer.ColumnStart = dataBuffer.Position;
+						boolean lastLetterWasBackslash = false;
+						boolean readingComplexEscape = false;
+						int escape = ComplexEscape.UNICODE;
+						int escapeLength = 0;
+						char escapeValue = (char) 0;
+
+						boolean firstLoop = true;
+
+						do {
+							if (!firstLoop
+									&& dataBuffer.Position == dataBuffer.Count) {
+								checkDataLength();
+							} else {
+								if (!firstLoop) {
+									// grab the current letter as a char
+									currentLetter = dataBuffer.Buffer[dataBuffer.Position];
+								}
+
+								if (!userSettings.UseTextQualifier
+										&& userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH
+										&& currentLetter == Letters.BACKSLASH) {
+									if (lastLetterWasBackslash) {
+										lastLetterWasBackslash = false;
+									} else {
+										updateCurrentValue();
+										lastLetterWasBackslash = true;
+									}
+								} else if (readingComplexEscape) {
+									escapeLength++;
+
+									switch (escape) {
+									case ComplexEscape.UNICODE:
+										escapeValue *= (char) 16;
+										escapeValue += hexToDec(currentLetter);
+
+										if (escapeLength == 4) {
+											readingComplexEscape = false;
+										}
+
+										break;
+									case ComplexEscape.OCTAL:
+										escapeValue *= (char) 8;
+										escapeValue += (char) (currentLetter - '0');
+
+										if (escapeLength == 3) {
+											readingComplexEscape = false;
+										}
+
+										break;
+									case ComplexEscape.DECIMAL:
+										escapeValue *= (char) 10;
+										escapeValue += (char) (currentLetter - '0');
+
+										if (escapeLength == 3) {
+											readingComplexEscape = false;
+										}
+
+										break;
+									case ComplexEscape.HEX:
+										escapeValue *= (char) 16;
+										escapeValue += hexToDec(currentLetter);
+
+										if (escapeLength == 2) {
+											readingComplexEscape = false;
+										}
+
+										break;
+									}
+
+									if (!readingComplexEscape) {
+										appendLetter(escapeValue);
+									} else {
+										dataBuffer.ColumnStart = dataBuffer.Position + 1;
+									}
+								} else if (userSettings.EscapeMode == ESCAPE_MODE_BACKSLASH
+										&& lastLetterWasBackslash) {
+									switch (currentLetter) {
+									case 'n':
+										appendLetter(Letters.LF);
+										break;
+									case 'r':
+										appendLetter(Letters.CR);
+										break;
+									case 't':
+										appendLetter(Letters.TAB);
+										break;
+									case 'b':
+										appendLetter(Letters.BACKSPACE);
+										break;
+									case 'f':
+										appendLetter(Letters.FORM_FEED);
+										break;
+									case 'e':
+										appendLetter(Letters.ESCAPE);
+										break;
+									case 'v':
+										appendLetter(Letters.VERTICAL_TAB);
+										break;
+									case 'a':
+										appendLetter(Letters.ALERT);
+										break;
+									case '0':
+									case '1':
+									case '2':
+									case '3':
+									case '4':
+									case '5':
+									case '6':
+									case '7':
+										escape = ComplexEscape.OCTAL;
+										readingComplexEscape = true;
+										escapeLength = 1;
+										escapeValue = (char) (currentLetter - '0');
+										dataBuffer.ColumnStart = dataBuffer.Position + 1;
+										break;
+									case 'u':
+									case 'x':
+									case 'o':
+									case 'd':
+									case 'U':
+									case 'X':
+									case 'O':
+									case 'D':
+										switch (currentLetter) {
+										case 'u':
+										case 'U':
+											escape = ComplexEscape.UNICODE;
+											break;
+										case 'x':
+										case 'X':
+											escape = ComplexEscape.HEX;
+											break;
+										case 'o':
+										case 'O':
+											escape = ComplexEscape.OCTAL;
+											break;
+										case 'd':
+										case 'D':
+											escape = ComplexEscape.DECIMAL;
+											break;
+										}
+
+										readingComplexEscape = true;
+										escapeLength = 0;
+										escapeValue = (char) 0;
+										dataBuffer.ColumnStart = dataBuffer.Position + 1;
+
+										break;
+									default:
+										break;
+									}
+
+									lastLetterWasBackslash = false;
+								} else {
+									if (currentLetter == userSettings.Delimiter) {
+										endColumn();
+									} else if ((!useCustomRecordDelimiter && (currentLetter == Letters.CR || currentLetter == Letters.LF))
+											|| (useCustomRecordDelimiter && currentLetter == userSettings.RecordDelimiter)) {
+										endColumn();
+
+										endRecord();
+									}
+								}
+
+								// keep track of the last letter because we need
+								// it for several key decisions
+
+								lastLetter = currentLetter;
+								firstLoop = false;
+
+								if (startedColumn) {
+									dataBuffer.Position++;
+
+									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$
+														+ " if you're expecting column lengths greater than 100,000 characters to" //$NON-NLS-1$
+														+ " avoid this error."); //$NON-NLS-1$
+									}
+								}
+							} // end else
+						} while (hasMoreData && startedColumn);
+					}
+
+					if (hasMoreData) {
+						dataBuffer.Position++;
+					}
+				} // end else
+			} while (hasMoreData && !hasReadNextLine);
+
+			// check to see if we hit the end of the file
+			// without processing the current record
+
+			if (startedColumn || lastLetter == userSettings.Delimiter) {
+				endColumn();
+
+				endRecord();
+			}
+		}
+
+		if (userSettings.CaptureRawRecord) {
+			if (hasMoreData) {
+				if (rawBuffer.Position == 0) {
+					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);
+				}
+			} else {
+				// for hasMoreData to ever be false, all data would have had to
+				// have been
+				// copied to the raw buffer
+				rawRecord = new String(rawBuffer.Buffer, 0, rawBuffer.Position);
+			}
+		} else {
+			rawRecord = ""; //$NON-NLS-1$
+		}
+
+		return hasReadNextLine;
+	}
+
+	/**
+	 * Check data length.
+	 *
+	 * @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);
+			}
+
+			charset = null;
+			initialized = true;
+		}
+
+		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);
+
+				char[] holder = new char[newLength];
+
+				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);
+
+			rawBuffer.Position += dataBuffer.Count - dataBuffer.LineStart;
+		}
+
+		try {
+			dataBuffer.Count = inputStream.read(dataBuffer.Buffer, 0,
+					dataBuffer.Buffer.length);
+		} catch (IOException ex) {
+			close();
+
+			throw ex;
+		}
+
+		// if no more data could be found, set flag stating that
+		// the end of the data was found
+
+		if (dataBuffer.Count == -1) {
+			hasMoreData = false;
+		}
+
+		dataBuffer.Position = 0;
+		dataBuffer.LineStart = 0;
+		dataBuffer.ColumnStart = 0;
+	}
+
+	/**
+	 * 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.
+	 */
+	public boolean readHeaders() throws IOException {
+		boolean result = readRecord();
+
+		// copy the header data from the column array
+		// to the header string array
+
+		headersHolder.Length = columnsCount;
+
+		headersHolder.Headers = new String[columnsCount];
+
+		for (int i = 0; i < headersHolder.Length; i++) {
+			String columnValue = get(i);
+
+			headersHolder.Headers[i] = columnValue;
+
+			// if there are duplicate header names, we will save the last one
+			headersHolder.IndexByName.put(columnValue, new Integer(i));
+		}
+
+		if (result) {
+			currentRecord--;
+		}
+
+		columnsCount = 0;
+
+		return result;
+	}
+
+	/**
+	 * Returns the column header value for a given column index.
+	 *
+	 * @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.
+	 */
+	public String getHeader(int columnIndex) throws IOException {
+		checkClosed();
+
+		// check to see if we have read the header record yet
+
+		// check to see if the column index is within the bounds
+		// of our header array
+
+		if (columnIndex > -1 && columnIndex < headersHolder.Length) {
+			// return the processed header data for this column
+
+			return headersHolder.Headers[columnIndex];
+		} else {
+			return ""; //$NON-NLS-1$
+		}
+	}
+
+	/**
+	 * Checks if is qualified.
+	 *
+	 * @param columnIndex the column index
+	 * @return true, if is qualified
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public boolean isQualified(int columnIndex) throws IOException {
+		checkClosed();
+
+		if (columnIndex < columnsCount && columnIndex > -1) {
+			return isQualified[columnIndex];
+		} else {
+			return false;
+		}
+	}
+
+	/**
+	 * End column.
+	 *
+	 * @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$
+
+		// must be called before setting startedColumn = false
+		if (startedColumn) {
+			if (columnBuffer.Position == 0) {
+				if (dataBuffer.ColumnStart < dataBuffer.Position) {
+					int lastLetter = dataBuffer.Position - 1;
+
+					if (userSettings.TrimWhitespace && !startedWithQualifier) {
+						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);
+				}
+			} else {
+				updateCurrentValue();
+
+				int lastLetter = columnBuffer.Position - 1;
+
+				if (userSettings.TrimWhitespace && !startedWithQualifier) {
+					while (lastLetter >= 0
+							&& (columnBuffer.Buffer[lastLetter] == Letters.SPACE || columnBuffer.Buffer[lastLetter] == Letters.SPACE)) {
+						lastLetter--;
+					}
+				}
+
+				currentValue = new String(columnBuffer.Buffer, 0,
+						lastLetter + 1);
+			}
+		}
+
+		columnBuffer.Position = 0;
+
+		startedColumn = false;
+
+		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$
+							+ " if you're expecting more than 100,000 columns per record to" //$NON-NLS-1$
+							+ " avoid this error."); //$NON-NLS-1$
+		}
+
+		// check to see if our current holder array for
+		// column chunks is still big enough to handle another
+		// column chunk
+
+		if (columnsCount == values.length) {
+			// holder array needs to grow to be able to hold another column
+			int newLength = values.length * 2;
+
+			String[] holder = new String[newLength];
+
+			System.arraycopy(values, 0, holder, 0, values.length);
+
+			values = holder;
+
+			boolean[] qualifiedHolder = new boolean[newLength];
+
+			System.arraycopy(isQualified, 0, qualifiedHolder, 0,
+					isQualified.length);
+
+			isQualified = qualifiedHolder;
+		}
+
+		values[columnsCount] = currentValue;
+
+		isQualified[columnsCount] = startedWithQualifier;
+
+		currentValue = ""; //$NON-NLS-1$
+
+		columnsCount++;
+	}
+
+	/**
+	 * Append letter.
+	 *
+	 * @param letter the letter
+	 */
+	private void appendLetter(char letter) {
+		if (columnBuffer.Position == columnBuffer.Buffer.length) {
+			int newLength = columnBuffer.Buffer.length * 2;
+
+			char[] holder = new char[newLength];
+
+			System.arraycopy(columnBuffer.Buffer, 0, holder, 0,
+					columnBuffer.Position);
+
+			columnBuffer.Buffer = holder;
+		}
+		columnBuffer.Buffer[columnBuffer.Position++] = letter;
+		dataBuffer.ColumnStart = dataBuffer.Position + 1;
+	}
+
+	/**
+	 * Update current value.
+	 */
+	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);
+
+				char[] holder = new char[newLength];
+
+				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);
+
+			columnBuffer.Position += dataBuffer.Position
+					- dataBuffer.ColumnStart;
+		}
+
+		dataBuffer.ColumnStart = dataBuffer.Position + 1;
+	}
+
+	/**
+	 * End record.
+	 *
+	 * @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
+		// during parsing
+
+		hasReadNextLine = true;
+
+		currentRecord++;
+	}
+
+	/**
+	 * 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.
+	 */
+	public int getIndex(String headerName) throws IOException {
+		checkClosed();
+
+		Object indexValue = headersHolder.IndexByName.get(headerName);
+
+		if (indexValue != null) {
+			return ((Integer) indexValue).intValue();
+		} else {
+			return -1;
+		}
+	}
+
+	/**
+	 * 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()}.
+	 */
+	public boolean skipRecord() throws IOException {
+		checkClosed();
+
+		boolean recordRead = false;
+
+		if (hasMoreData) {
+			recordRead = readRecord();
+
+			if (recordRead) {
+				currentRecord--;
+			}
+		}
+
+		return recordRead;
+	}
+
+	/**
+	 * Skips the next line of data using the standard end of line characters and
+	 * 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.
+	 */
+	public boolean skipLine() throws IOException {
+		checkClosed();
+
+		// clear public column values for current line
+
+		columnsCount = 0;
+
+		boolean skippedLine = false;
+
+		if (hasMoreData) {
+			boolean foundEol = false;
+
+			do {
+				if (dataBuffer.Position == dataBuffer.Count) {
+					checkDataLength();
+				} else {
+					skippedLine = true;
+
+					// grab the current letter as a char
+
+					char currentLetter = dataBuffer.Buffer[dataBuffer.Position];
+
+					if (currentLetter == Letters.CR
+							|| currentLetter == Letters.LF) {
+						foundEol = true;
+					}
+
+					// keep track of the last letter because we need
+					// it for several key decisions
+
+					lastLetter = currentLetter;
+
+					if (!foundEol) {
+						dataBuffer.Position++;
+					}
+
+				} // end else
+			} while (hasMoreData && !foundEol);
+
+			columnBuffer.Position = 0;
+
+			dataBuffer.LineStart = dataBuffer.Position + 1;
+		}
+
+		rawBuffer.Position = 0;
+		rawRecord = ""; //$NON-NLS-1$
+
+		return skippedLine;
+	}
+
+	/**
+	 * Closes and releases all related resources.
+	 */
+	public void close() {
+		if (!closed) {
+			close(true);
+
+			closed = true;
+		}
+	}
+
+	/**
+	 * Close.
+	 *
+	 * @param closing the closing
+	 */
+	private void close(boolean closing) {
+		if (!closed) {
+			if (closing) {
+				charset = null;
+				headersHolder.Headers = null;
+				headersHolder.IndexByName = null;
+				dataBuffer.Buffer = null;
+				columnBuffer.Buffer = null;
+				rawBuffer.Buffer = null;
+			}
+
+			try {
+				if (initialized) {
+					inputStream.close();
+				}
+			} catch (Exception e) {
+				// just eat the exception
+			}
+
+			inputStream = null;
+
+			closed = true;
+		}
+	}
+
+	/**
+	 * Check 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$
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see java.lang.Object#finalize()
+	 */
+	@Override
+	protected void finalize() {
+		close(false);
+	}
+
+	/**
+	 * The Class ComplexEscape.
+	 */
+	private class ComplexEscape {
+		
+		/** The Constant UNICODE. */
+		private static final int UNICODE = 1;
+
+		/** The Constant OCTAL. */
+		private static final int OCTAL = 2;
+
+		/** The Constant DECIMAL. */
+		private static final int DECIMAL = 3;
+
+		/** The Constant HEX. */
+		private static final int HEX = 4;
+	}
+
+	/**
+	 * Hex to dec.
+	 *
+	 * @param hex the hex
+	 * @return the char
+	 */
+	private static char hexToDec(char hex) {
+		char result;
+
+		if (hex >= 'a') {
+			result = (char) (hex - 'a' + 10);
+		} else if (hex >= 'A') {
+			result = (char) (hex - 'A' + 10);
+		} else {
+			result = (char) (hex - '0');
+		}
+
+		return result;
+	}
+
+	/**
+	 * The Class DataBuffer.
+	 */
+	private class DataBuffer {
+		
+		/** The Buffer. */
+		public char[] Buffer;
+
+		/** The Position. */
+		public int Position;
+
+		// / <summary>
+		// / How much usable data has been read into the stream,
+		// / which will not always be as long as Buffer.Length.
+		// / </summary>
+		/** The Count. */
+		public int Count;
+
+		// / <summary>
+		// / The position of the cursor in the buffer when the
+		// / current column was started or the last time data
+		// / was moved out to the column buffer.
+		// / </summary>
+		/** The Column start. */
+		public int ColumnStart;
+
+		/** The Line start. */
+		public int LineStart;
+
+		/**
+		 * Instantiates a new data buffer.
+		 */
+		public DataBuffer() {
+			Buffer = new char[StaticSettings.MAX_BUFFER_SIZE];
+			Position = 0;
+			Count = 0;
+			ColumnStart = 0;
+			LineStart = 0;
+		}
+	}
+
+	/**
+	 * The Class ColumnBuffer.
+	 */
+	private class ColumnBuffer {
+		
+		/** The Buffer. */
+		public char[] Buffer;
+
+		/** The Position. */
+		public int Position;
+
+		/**
+		 * Instantiates a new column buffer.
+		 */
+		public ColumnBuffer() {
+			Buffer = new char[StaticSettings.INITIAL_COLUMN_BUFFER_SIZE];
+			Position = 0;
+		}
+	}
+
+	/**
+	 * The Class RawRecordBuffer.
+	 */
+	private class RawRecordBuffer {
+		
+		/** The Buffer. */
+		public char[] Buffer;
+
+		/** The Position. */
+		public int Position;
+
+		/**
+		 * Instantiates a new raw record buffer.
+		 */
+		public RawRecordBuffer() {
+			Buffer = new char[StaticSettings.INITIAL_COLUMN_BUFFER_SIZE
+					* StaticSettings.INITIAL_COLUMN_COUNT];
+			Position = 0;
+		}
+	}
+
+	/**
+	 * The Class Letters.
+	 */
+	private class Letters {
+		
+		/** The Constant LF. */
+		public static final char LF = '\n';
+
+		/** The Constant CR. */
+		public static final char CR = '\r';
+
+		/** The Constant QUOTE. */
+		public static final char QUOTE = '"';
+
+		/** The Constant COMMA. */
+		public static final char COMMA = ',';
+
+		/** The Constant SPACE. */
+		public static final char SPACE = ' ';
+
+		/** The Constant TAB. */
+		public static final char TAB = '\t';
+
+		/** The Constant POUND. */
+		public static final char POUND = '#';
+
+		/** The Constant BACKSLASH. */
+		public static final char BACKSLASH = '\\';
+
+		/** The Constant NULL. */
+		public static final char NULL = '\0';
+
+		/** The Constant BACKSPACE. */
+		public static final char BACKSPACE = '\b';
+
+		/** The Constant FORM_FEED. */
+		public static final char FORM_FEED = '\f';
+
+		/** The Constant ESCAPE. */
+		public static final char ESCAPE = '\u001B'; // ASCII/ANSI escape
+
+		/** The Constant VERTICAL_TAB. */
+		public static final char VERTICAL_TAB = '\u000B';
+
+		/** The Constant ALERT. */
+		public static final char ALERT = '\u0007';
+	}
+
+	/**
+	 * The Class UserSettings.
+	 */
+	private class UserSettings {
+		// having these as publicly accessible members will prevent
+		// the overhead of the method call that exists on properties
+		/** The Case sensitive. */
+		public boolean CaseSensitive;
+
+		/** The Text qualifier. */
+		public char TextQualifier;
+
+		/** The Trim whitespace. */
+		public boolean TrimWhitespace;
+
+		/** The Use text qualifier. */
+		public boolean UseTextQualifier;
+
+		/** The Delimiter. */
+		public char Delimiter;
+
+		/** The Record delimiter. */
+		public char RecordDelimiter;
+
+		/** The Comment. */
+		public char Comment;
+
+		/** The Use comments. */
+		public boolean UseComments;
+
+		/** The Escape mode. */
+		public int EscapeMode;
+
+		/** The Safety switch. */
+		public boolean SafetySwitch;
+
+		/** The Skip empty records. */
+		public boolean SkipEmptyRecords;
+
+		/** The Capture raw record. */
+		public boolean CaptureRawRecord;
+
+		/**
+		 * Instantiates a new user settings.
+		 */
+		public UserSettings() {
+			CaseSensitive = true;
+			TextQualifier = Letters.QUOTE;
+			TrimWhitespace = true;
+			UseTextQualifier = true;
+			Delimiter = Letters.COMMA;
+			RecordDelimiter = Letters.NULL;
+			Comment = Letters.POUND;
+			UseComments = false;
+			EscapeMode = CsvReader.ESCAPE_MODE_DOUBLED;
+			SafetySwitch = true;
+			SkipEmptyRecords = true;
+			CaptureRawRecord = true;
+		}
+	}
+
+	/**
+	 * The Class HeadersHolder.
+	 */
+	private class HeadersHolder {
+		
+		/** The Headers. */
+		public String[] Headers;
+
+		/** The Length. */
+		public int Length;
+
+		/** The Index by name. */
+		public HashMap<String, Integer> IndexByName;
+
+		/**
+		 * Instantiates a new headers holder.
+		 */
+		public HeadersHolder() {
+			Headers = null;
+			Length = 0;
+			IndexByName = new HashMap<String, Integer>();
+		}
+	}
+
+	/**
+	 * The Class StaticSettings.
+	 */
+	private class StaticSettings {
+		// these are static instead of final so they can be changed in unit test
+		// isn't visible outside this class and is only accessed once during
+		// CsvReader construction
+		/** The Constant MAX_BUFFER_SIZE. */
+		public static final int MAX_BUFFER_SIZE = 1024;
+
+		/** The Constant MAX_FILE_BUFFER_SIZE. */
+		public static final int MAX_FILE_BUFFER_SIZE = 4 * 1024;
+
+		/** The Constant INITIAL_COLUMN_COUNT. */
+		public static final int INITIAL_COLUMN_COUNT = 10;
+
+		/** The Constant INITIAL_COLUMN_BUFFER_SIZE. */
+		public static final int INITIAL_COLUMN_BUFFER_SIZE = 50;
+	}
+}
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/CsvReader.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/SystemProxyDetector.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/SystemProxyDetector.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/SystemProxyDetector.java	(revision 147)
@@ -0,0 +1,149 @@
+package org.txm.utils;
+
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.List;
+
+import org.eclipse.core.net.proxy.IProxyService;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.util.tracker.ServiceTracker;
+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. 
+ * 
+ * @author mdecorde, 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.
+	 */
+	@SuppressWarnings({ "rawtypes", "unchecked" })
+	public SystemProxyDetector() {
+		ServiceTracker proxyTracker = null;
+		try {
+			Bundle c = FrameworkUtil.getBundle(this.getClass());
+			if (c == null) return; // abord;
+			BundleContext bc = c.getBundleContext();
+			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
+				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) {
+									proxy_host = addr.getHostName();
+									proxy_port = addr.getPort();
+									break; // ok done
+								}
+							}
+						}
+					} 
+				} catch(URISyntaxException e) {
+					Log.printStackTrace(e);
+				}
+			}
+			
+			// last resort to find out proxy configuration
+			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);
+				proxy_password = System.getProperty("http.proxyPassword");
+				proxy_user = System.getProperty("http.proxyUser");
+			}
+			
+			
+			// Log
+			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;
+//					}
+//				}
+//			}
+		} catch (Exception e) {
+			Log.printStackTrace(e);
+		} finally {
+			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())	{
+			proxyUrl = proxy_host + ":" + proxy_port;
+			
+			if (proxy_user != null && !proxy_user.isEmpty()) {
+				userData = proxy_user;
+				proxyUrl = "@" + proxyUrl; //$NON-NLS-1$
+			}
+			if (proxy_password != null && !proxy_password.isEmpty()) {
+				userData += ":" + proxy_password; //$NON-NLS-1$
+			}
+		}
+		else	{
+			Log.warning("HTTP system proxy configuration is not set.");
+		}
+		
+		if(proxyUrl != null)	{
+			proxyUrl = "http://" + userData + proxyUrl; //$NON-NLS-1$
+		}
+		
+		return proxyUrl;
+	}
+
+	public String toString() {
+		return getHttpProxyUrl();
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/SystemProxyDetector.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/SparseList.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/SparseList.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/SparseList.java	(revision 147)
@@ -0,0 +1,106 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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;
+
+import java.util.AbstractList;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.SortedMap;
+import java.util.TreeMap;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class SparseList.
+ *
+ * @param <E> the element type
+ */
+public class SparseList<E> extends AbstractList<E> {
+
+	/** The map. */
+	private SortedMap<Integer, E> map;
+
+	/**
+	 * Instantiates a new sparse list.
+	 */
+	public SparseList() {
+		map = new TreeMap<Integer, E>();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.AbstractList#get(int)
+	 */
+	@Override
+	public E get(int n) {
+		return map.get(n);
+	}
+
+	/**
+	 * 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
+	 * @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);
+		SortedMap<Integer, E> subMap = map.subMap(from, to);
+		if (subMap.size() == (to - from))
+			res.addAll(subMap.values());
+		else
+			for (int i = from; i < to; i++)
+				res.add(map.get(i));
+		return res;
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.AbstractCollection#size()
+	 */
+	@Override
+	public int size() {
+		return map.size();
+	}
+
+	/* (non-Javadoc)
+	 * @see java.util.AbstractList#add(int, java.lang.Object)
+	 */
+	@Override
+	public void add(int n, E obj) {
+		map.put(n, obj);
+	}
+
+	/**
+	 * Gets the not null.
+	 *
+	 * @return the not null
+	 */
+	public List<Integer> getNotNull() {
+		return new ArrayList<Integer>(map.keySet());
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/SparseList.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/tostring/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/tostring/package.html	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/tostring/package.html	(revision 147)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Apache log annotation</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/tostring/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/tostring/ToString.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/tostring/ToString.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/tostring/ToString.java	(revision 147)
@@ -0,0 +1,55 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.tostring;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
+
+// TODO: Auto-generated Javadoc
+//http://www-128.ibm.com/developerworks/java/library/j-cwt06075/
+
+/**
+ * The Interface ToString.
+ */
+@Target( { ElementType.FIELD })
+public @interface ToString {
+	
+	/**
+	 * Order.
+	 *
+	 * @return the int
+	 */
+	int order() default 0;
+
+	/**
+	 * Text.
+	 *
+	 * @return the string
+	 */
+	String text() default ""; //$NON-NLS-1$
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/tostring/ToString.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/Activator.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Activator.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/Activator.java	(revision 147)
@@ -0,0 +1,50 @@
+package org.txm.utils;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.txm.utils"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/Activator.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java	(revision 147)
@@ -0,0 +1,54 @@
+package org.txm.utils;
+
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class BiHashMap<KeyType, ValueType>{
+    private ConcurrentHashMap<KeyType, ValueType> keyToValueMap = new ConcurrentHashMap<KeyType, ValueType>();
+    private ConcurrentHashMap<ValueType, KeyType> valueToKeyMap = new ConcurrentHashMap<ValueType, KeyType>();
+
+    synchronized public void put(KeyType key, ValueType value){
+        keyToValueMap.put(key, value);
+        valueToKeyMap.put(value, key);
+    }
+
+    synchronized public ValueType removeByKey(KeyType key){
+        ValueType removedValue = keyToValueMap.remove(key);
+        valueToKeyMap.remove(removedValue);
+        return removedValue;
+    }
+
+    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

Property changes on: tmp/org.txm.utils/src/org/txm/utils/BiHashMap.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/i18n/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/i18n/package.html	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/i18n/package.html	(revision 147)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Using different languages in output messages.</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/i18n/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/i18n/LangFormater.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/i18n/LangFormater.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/i18n/LangFormater.java	(revision 147)
@@ -0,0 +1,147 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.
+
+//
+// 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$
+			"}", "»", "°", //$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$
+
+	/**
+	 * 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
+			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());
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/i18n/LangFormater.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/i18n/Localizer.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/i18n/Localizer.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/i18n/Localizer.java	(revision 147)
@@ -0,0 +1,200 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.i18n;
+
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.text.MessageFormat;
+import org.txm.Messages;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Format string using a Resource bundle mechanism for managing languages.
+ * 
+ * @author sloiseau
+ */
+public class Localizer {
+
+	/** The cls. */
+	private final Class<?> cls;
+	
+	/** The loc. */
+	private final Locale loc;
+
+	/** The bundle. */
+	private ResourceBundle bundle;
+
+	/** The bundle in default locale. */
+	private ResourceBundle default_bundle;
+
+	/**
+	 * Instantiates a new localizer.
+	 * 
+	 * @param cls
+	 *            the cls
+	 */
+	public Localizer(Class<?> cls) {
+		this(cls, null);
+	}
+
+	/**
+	 * Instantiates a new localizer.
+	 *
+	 * @param cls the cls
+	 * @param loc the loc
+	 */
+	public Localizer(Class<?> cls, Locale loc) {
+		this.cls = cls;
+		this.loc = loc;
+	}
+
+	/**
+	 * Message.
+	 * 
+	 * @param key
+	 *            the key
+	 * 
+	 * @return the string
+	 */
+	public String message(String key) {
+		return MessageFormat.format(getString(key), new Object[] {});
+	}
+
+	/**
+	 * Message.
+	 * 
+	 * @param key
+	 *            the key
+	 * @param arg
+	 *            the arg
+	 * 
+	 * @return the string
+	 */
+	public String message(String key, Object arg) {
+		return MessageFormat.format(getString(key), new Object[] { arg });
+	}
+
+	/**
+	 * Message.
+	 * 
+	 * @param key
+	 *            the key
+	 * @param arg1
+	 *            the arg1
+	 * @param arg2
+	 *            the arg2
+	 * 
+	 * @return the string
+	 */
+	public String message(String key, Object arg1, Object arg2) {
+		return MessageFormat
+				.format(getString(key), new Object[] { arg1, arg2 });
+	}
+
+	/**
+	 * Message.
+	 * 
+	 * @param key
+	 *            the key
+	 * @param args
+	 *            the args
+	 * 
+	 * @return the string
+	 */
+	public String message(String key, Object[] args) {
+		return MessageFormat.format(getString(key), args);
+	}
+
+	/**
+	 * 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.
+	 *
+	 * @param key the key
+	 * @return the string
+	 */
+	private String getString(String key) {
+		try {
+			return getBundle().getString(key);
+		} catch (MissingResourceException e1) {
+			try {
+				return Messages.Localizer_0 + getDefaultBundle().getString(key);
+			} catch (MissingResourceException e2) {
+				return key;
+			}
+		}
+	}
+
+	/**
+	 * Gets the bundle.
+	 * 
+	 * @return the bundle
+	 */
+	private ResourceBundle getBundle() {
+		if (bundle == null) {
+			String s = getRessourcePrefix();
+			bundle = loc == null ? ResourceBundle.getBundle(s
+					+ Messages.Localizer_1) : ResourceBundle.getBundle(s
+					+ Messages.Localizer_1, loc);
+		}
+		return bundle;
+	}
+
+	/**
+	 * Gets the default bundle.
+	 * 
+	 * @return the default bundle
+	 */
+	private ResourceBundle getDefaultBundle() {
+		if (default_bundle == null) {
+			String s = getRessourcePrefix();
+			default_bundle = ResourceBundle.getBundle(s + Messages.Localizer_1,
+					new Locale("en", "US")); //$NON-NLS-1$//$NON-NLS-2$ 
+		}
+		return default_bundle;
+	}
+
+	/**
+	 * Gets the ressource prefix.
+	 *
+	 * @return the ressource prefix
+	 */
+	private String getRessourcePrefix() {
+		String s = cls.getName();
+		int i = s.lastIndexOf('.');
+		if (i > 0)
+			s = s.substring(0, i + 1);
+		else
+			s = ""; //$NON-NLS-1$
+		return s;
+	}
+
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/i18n/Localizer.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/i18n/DetectBOM.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/i18n/DetectBOM.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/i18n/DetectBOM.java	(revision 147)
@@ -0,0 +1,111 @@
+package org.txm.utils.i18n;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+/**
+ * Simple class to detect BOM in a file
+ * {@link} http://blog.ymango.com/2010/09/16/29
+ * 
+ * @author mdecorde
+ *
+ */
+public class DetectBOM {
+	
+	Charset enc = null;
+	int n, unread,size;
+	/**
+	 * 
+	 * @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];
+			FileInputStream file = new FileInputStream(srcFile);
+			n = file.read(buffer, 0, buffer.length);
+			file.close();
+
+			String encoding = null;
+			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)) {
+				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)) {
+				encoding = "UTF-8"; //$NON-NLS-1$
+				unread = n - 3;
+				size=3;
+			} else if ((buffer[0] == (byte) 0xFE) && (buffer[1] == (byte) 0xFF)) {
+				encoding = "UTF-16BE"; //$NON-NLS-1$
+				unread = n - 2;
+				size=2;
+			} else if ((buffer[0] == (byte) 0xFF) && (buffer[1] == (byte) 0xFE)) {
+				encoding = "UTF-16LE"; //$NON-NLS-1$
+				unread = n - 2;
+				size=4;
+			} else {
+				// Unicode BOM mark not found, unread all bytes
+				// encoding = "UTF-8";
+				unread = n;
+				size=0;
+			}
+			if(encoding != null)
+				enc = Charset.forName(encoding);
+
+		} catch (FileNotFoundException e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+		} catch (IOException e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+		}
+		//System.out.println("BOM size: "+size);
+		//return enc;
+	}
+	
+	/**
+	 * 
+	 * @return if the file has a BOM, return the encoding, else return file system encoding
+	 */
+	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()
+	{
+		return size;
+	}
+	
+	/**
+	 * 
+	 * @return true if the file has a BOM
+	 */
+	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());
+		System.out.println(db.getCharSet());
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/i18n/DetectBOM.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/saxon/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/saxon/package.html	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/saxon/package.html	(revision 147)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Tools for Saxon</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/saxon/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/saxon/SaxonNodeSet.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/saxon/SaxonNodeSet.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/saxon/SaxonNodeSet.java	(revision 147)
@@ -0,0 +1,52 @@
+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());
+//
+
+import net.sf.saxon.expr.XPathContext;
+import net.sf.saxon.lib.ExtensionFunctionCall;
+import net.sf.saxon.lib.ExtensionFunctionDefinition;
+import net.sf.saxon.om.SequenceIterator;
+import net.sf.saxon.om.StructuredQName;
+import net.sf.saxon.trans.XPathException;
+import net.sf.saxon.value.SequenceType;
+
+@SuppressWarnings("serial") //$NON-NLS-1$
+public class SaxonNodeSet extends ExtensionFunctionDefinition
+{
+	@Override
+	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$
+	}
+
+	@Override
+	public SequenceType getResultType(final SequenceType[] suppliedArgumentTypes) {
+		return SequenceType.NODE_SEQUENCE;
+	}
+
+	@Override
+	public boolean trustResultType() { 
+		return true;
+	}
+
+	@Override
+	public ExtensionFunctionCall makeCallExpression()
+	{
+		return new ExtensionFunctionCall() {
+			@Override
+			public SequenceIterator call(final SequenceIterator[] arguments, final XPathContext context)
+					throws XPathException
+					{
+				return arguments[0];
+					}
+		};
+	}
+
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/saxon/SaxonNodeSet.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/Diff.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/Diff.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/Diff.java	(revision 147)
@@ -0,0 +1,966 @@
+/*
+ * $Log: Diff.java,v $
+ * Revision 1.7  2009/01/19 03:05:26  stuart
+ * Fix StackOverflow bug with heuristic on reported by Jimmy Han.
+ *
+ * Revision 1.6  2003/03/06 22:51:32  stuart
+ * Convert to CVS
+ *
+ * Revision 1.5  2002/07/19  19:14:40  stuart
+ * fix reverseScript, make change ctor public, update docs
+ *
+ * Revision 1.4  2002/04/09  17:53:39  stuart
+ * More flexible interface for diff() function.
+ *
+ * Revision 1.3  2000/03/03 21:58:03  stuart
+ * move discard_confusing_lines and shift_boundaries to class file_data
+ *
+ * Revision 1.2  2000/03/02  16:37:38  stuart
+ * Add GPL and copyright
+ *
+ */
+package org.txm.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.StringWriter;
+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.
+
+ */
+
+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);
+  }
+
+  /** 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 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;
+
+  /** 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.  */
+
+  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;	
+
+    fd[fdiagoff + fmid] = xoff;
+    bd[bdiagoff + bmid] = xlim;
+
+    for (int c = 1;; ++c)
+      {
+	int d;			/* Active diagonal. */
+	boolean big_snake = false;
+
+	/* 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];
+
+	    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;
+	      }
+	  }
+
+	/* 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];
+
+	    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;
+	      }
+	  }
+
+	/* 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 (c > 200 && big_snake && heuristic)
+	  {
+	    int best = 0;
+	    int bestpos = -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;
+
+			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;
+	      }
+
+	    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;
+
+			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;
+	      }
+	  }
+      }
+  }
+
+  /** 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.  */
+
+  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.  */
+
+	int d = diag (xoff, xlim, yoff, ylim);
+	int c = cost;
+	int f = fdiag[fdiagoff + d];
+	int b = bdiag[bdiagoff + d];
+
+	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);
+	  }
+      }
+  }
+
+  /** Discard lines from one file that have no matches in the other file.
+   */
+
+  private void discard_confusing_lines() {
+    filevec[0].discard_confusing_lines(filevec[1]);
+    filevec[1].discard_confusing_lines(filevec[0]);
+  }
+
+  private boolean inhibit = false;
+
+  /** Adjust inserts/deletes of blank lines to join changes
+     as much as possible.
+   */
+
+  private void shift_boundaries() {
+    if (inhibit)
+      return;
+    filevec[0].shift_boundaries(filevec[1]);
+    filevec[1].shift_boundaries(filevec[0]);
+  }
+
+  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
+    );
+  }
+
+  /** Scan the tables of which lines are inserted and deleted,
+     producing an edit script in reverse order.  */
+
+  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[1+i0]) ++i0;
+	    while (changed1[1+i1]) ++i1;
+
+	    /* 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;
+    }
+  }
+
+  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;
+
+      while (i0 >= 0 || i1 >= 0)
+	{
+	  if (changed0[i0] || changed1[i1])
+	    {
+	      int line0 = i0, line1 = i1;
+
+	      /* Find # lines changed here in each file.  */
+	      while (changed0[i0]) --i0;
+	      while (changed1[i1]) --i1;
+
+	      /* Record this change.  */
+	      script = new change(i0, i1, line0 - i0, line1 - i1, script);
+	    }
+
+	  /* We have reached lines in the two files that match each other.  */
+	  i0--; i1--;
+	}
+
+      return script;
+    }
+  }
+
+  /** Standard ScriptBuilders. */
+  public final static ScriptBuilder
+    forwardScript = new ForwardScript(),
+    reverseScript = new ReverseScript();
+
+  /* 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);
+  }
+
+  /** 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) {
+
+    /* 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.  */
+
+    discard_confusing_lines ();
+
+    /* Now do the main comparison algorithm, considering just the
+       undiscarded lines.  */
+
+    xvec = filevec[0].undiscarded;
+    yvec = filevec[1].undiscarded;
+
+    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;
+
+    compareseq (0, filevec[0].nondiscarded_lines,
+		0, filevec[1].nondiscarded_lines);
+    fdiag = null;
+    bdiag = null;
+
+    /* Modify the results slightly to make them prettier
+       in cases where that can validly be done.  */
+
+    shift_boundaries ();
+
+    /* 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
+    );
+
+  }
+
+  /** 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.  */
+
+  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;		
+
+    /** 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);
+    }
+  }
+
+  /** Data on one input file being compared.  
+   */
+
+  class file_data {
+
+    /** 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];
+    }
+
+    /** 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());
+
+    /* 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);
+
+    /* Actually discard the lines. */
+      discard(discarded);
+    }
+
+    /** 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
+     */
+
+    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;
+
+      /* 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;
+
+      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;
+    }
+
+    /** Don't really discard the provisional lines except when they occur
+       in a run of discardables, with nonprovisionals at the beginning
+       and end.  */
+
+    private void filterDiscards(final byte[] discards) {
+	final int end = buffered_lines;
+
+	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;
+
+		/* 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;
+		  }
+
+		/* Cancel provisional discards at end, and shrink the run.  */
+		while (j > i && discards[j - 1] == 2) {
+		  discards[--j] = 0; --provisional;
+		}
+
+		/* Now we have the length of a run of discardable lines
+		   whose first and last are not provisional.  */
+		length = j - i;
+
+		/* 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;
+
+		    /* 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++;
+
+		    /* 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 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;
+		      }
+
+		    /* I advances to the last line of the run.  */
+		    i += length - 1;
+
+		    /* 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;
+		      }
+		  }
+	      }
+	  }
+      }
+
+    /** 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;
+    }
+
+    file_data(Object[] data,Hashtable h) {
+      buffered_lines = data.length;
+
+      equivs = new int[buffered_lines]; 
+      undiscarded = new int[buffered_lines];
+      realindexes = new int[buffered_lines];
+
+      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();
+      }
+    }
+
+    /** 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
+    */
+
+    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;
+
+      for (;;)
+	{
+	  int start, end, other_start;
+
+	  /* Scan forwards to find beginning of another run of changes.
+	     Also keep track of the corresponding point in the other file.  */
+
+	  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++;
+	    }
+
+	  if (i == i_end)
+	    break;
+
+	  start = i;
+	  other_start = j;
+
+	  for (;;)
+	    {
+	      /* Now find the end of this run of changes.  */
+
+	      while (i < i_end && changed[1+i]) i++;
+	      end = i;
+
+	      /* 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.  */
+
+	      /* You might ask, how could this run follow right after another?
+		 Only because the previous run was shifted here.  */
+
+	      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;
+	    }
+
+	  preceding = i;
+	  other_preceding = j;
+	}
+    }
+
+    /** Number of elements (lines) in this file. */
+    final int buffered_lines;
+
+    /** 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;
+
+    /** Vector, like the previous one except that
+       the elements for discarded lines have been squeezed out.  */
+    final int[]	   undiscarded;
+
+    /** 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);
+	}
+  }
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/Diff.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/AsciiUtils.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/AsciiUtils.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/AsciiUtils.java	(revision 147)
@@ -0,0 +1,141 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.utils;
+// TODO: Auto-generated Javadoc
+
+/**
+ * The Class AsciiUtils.
+ *
+ * @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$
+    ;
+
+    /** 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$
+    + "\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$
+    ;
+
+    // private constructor, can't be instanciated!
+    /**
+     * Instantiates a new ascii utils.
+     */
+    private AsciiUtils() { }
+
+    // remove accentued from a string and replace with ascii equivalent
+    /**
+     * Convert non ascii.
+     *
+     * @param s the s
+     * @return the string
+     */
+    public static String convertNonAscii(String s) {
+       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){
+              sb.append(PLAIN_ASCII.charAt(pos));
+          }
+          else {
+              sb.append(c);
+          }
+       }
+       return sb.toString();
+    }
+    
+    /**
+     * Removes the punct.
+     *
+     * @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$
+     }
+    
+    /**
+     * Builds the id.
+     *
+     * @param s the s
+     * @return the string
+     */
+    public static String buildId(String s)
+    {
+    	if (s.length() == 0) return s;
+    	
+    	String rez = removePunct(convertNonAscii(s)).toLowerCase();
+    	//¤€§µ£°
+    	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 "";
+    		c = rez.charAt(0);
+    	}
+
+    	return rez;
+    }
+
+    /**
+     * The main method.
+     *
+     * @param args the arguments
+     */
+    public static void main(String args[]) {
+       String s = 
+         "The result : È,É,Ê,Ë,Û,Ù,Ï,Î,À,Â,Ô,è,é,ê,ë,û,ù,ï,î,à,â,ô,ç  "; //$NON-NLS-1$
+       System.out.println(AsciiUtils.convertNonAscii(s));
+       System.out.println(AsciiUtils.buildId(s));
+       // 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
+       
+    }
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/AsciiUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/FileCopy.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/FileCopy.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/FileCopy.java	(revision 147)
@@ -0,0 +1,206 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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-11-17 17:01:31 +0100 (Thu, 17 Nov 2016) $
+// $LastChangedRevision: 3341 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils;
+
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+
+import org.txm.Messages;
+
+/**
+ * File copy methods
+ */
+public class FileCopy {
+
+	private static final boolean isWindows = System.getProperty("os.name").contains("Windows");
+	
+	/**
+	 * replace the file if it exists
+	 * 
+	 * @param source
+	 * @param dest
+	 * @return
+	 * @throws IOException
+	 */
+	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 
+	 * 
+	 * !!! on windows : max size = 64mo !!!.
+	 *
+	 * @param source the source
+	 * @param dest the dest
+	 * @return true, if successful
+	 * @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 (isWindows || source.length() >= Integer.MAX_VALUE) {
+			//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
+				instream = new FileInputStream(source);
+				//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) {
+					outstream.write(buffer, 0, bytesRead);
+				}
+			} catch (Exception e) {org.txm.utils.logger.Log.printStackTrace(e); return false; 
+			} finally {
+				instream.close();
+				outstream.close();
+				instream = null;
+				outstream = null;
+			}
+		} else {
+			//System.out.println("COPY NORMAL FILE");
+			FileChannel in = null, out = null;
+			FileInputStream fis = null;
+			FileOutputStream fos = null;
+			try {
+				fis = new FileInputStream(source);
+				fos = new FileOutputStream(dest);
+				in = fis.getChannel();
+				out = fos.getChannel();
+
+				long size = in.size();
+				MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
+				
+				out.write(buf);
+			} 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();
+				
+				return false;
+			} finally {
+				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
+	 *
+	 * @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 {
+
+		// Check to ensure that the source is valid...
+		if (!src.exists()) {
+			throw new IOException(Messages.FileCopy_0 + src.getAbsolutePath()
+					+ "."); //$NON-NLS-1$ 
+		} else if (!src.canRead()) { // check to ensure we have rights to the
+			// source...
+			throw new IOException(Messages.FileCopy_2 + src.getAbsolutePath()
+					+ "."); //$NON-NLS-1$ 
+		}
+		
+		// is it a directory ?
+		if (src.isDirectory()) {
+			if (!dest.exists()) { // does the destination already exist?
+				// if not create the file hierarchy
+				if (!dest.mkdirs()) {
+					throw new IOException(Messages.FileCopy_4
+							+ dest.getAbsolutePath() + "."); //$NON-NLS-1$ 
+				}
+			}
+
+			// get a listing of files...
+			String list[] = src.list();
+			// copy all the files in the list.
+			for (int i = 0; i < list.length; i++) {
+				File dest1 = new File(dest, list[i]);
+				File src1 = new File(src, list[i]);
+				copyFiles(src1, dest1);
+
+			}
+		} else {
+			// This was not a directory, so lets just copy the file
+			copy(src, dest);
+		}
+	}
+
+	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 dir1 = new File("/home/mdecorde/TEMP/copy1");
+		File dir2 = new File("/home/mdecorde/TEMP/copy2");
+		FileCopy.copyFiles(dir1, dir2);
+	}
+}
+

Property changes on: tmp/org.txm.utils/src/org/txm/utils/FileCopy.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/FixString.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/FixString.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/FixString.java	(revision 147)
@@ -0,0 +1,72 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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.
+
+//
+// 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);
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/FixString.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/package.html
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/package.html	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/package.html	(revision 147)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Contains usefull tools</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/xml/DomUtils.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/xml/DomUtils.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/xml/DomUtils.java	(revision 147)
@@ -0,0 +1,168 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.utils.xml;
+
+import java.io.BufferedOutputStream;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.*;
+import javax.xml.transform.*;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+// TODO: Auto-generated Javadoc
+/**
+ * The Class DomUtils.
+ */
+public class DomUtils {
+	
+	/**
+	 * Empty document.
+	 *
+	 * @return the document
+	 * @throws ParserConfigurationException 
+	 */
+	public static Document emptyDocument() throws ParserConfigurationException
+	{
+		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+		DocumentBuilder builder = factory.newDocumentBuilder();
+		return builder.newDocument();
+	}
+	
+	/**
+	 * Load.
+	 *
+	 * @param xmlfile the xmlfile
+	 * @return the document
+	 * @throws ParserConfigurationException 
+	 * @throws IOException 
+	 * @throws SAXException 
+	 */
+	public static Document load(File xmlfile) throws ParserConfigurationException, SAXException, IOException
+	{
+		DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
+		domFactory.setNamespaceAware(true); // never forget this!
+		DocumentBuilder builder = domFactory.newDocumentBuilder();
+		//builder.parse(xmlfile).getDocumentElement().getElementsByTagName(name)
+		return builder.parse(xmlfile);
+	}
+	
+	/**
+	 * Save.
+	 *
+	 * @param element the doc
+	 * @param writer the writer
+	 * @return true, if successful
+	 */
+	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
+	 * @return true, if successful
+	 */
+	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$
+			
+			// Transformation
+			transformer.transform(source, resultat);
+			writer.close();
+			return true;
+		} catch (Exception e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+			return false;
+		}
+	}
+	
+	/**
+	 * Save.
+	 *
+	 * @param doc the doc
+	 * @param outfile the outfile
+	 * @return true, if successful
+	 * @throws FileNotFoundException 
+	 * @throws UnsupportedEncodingException 
+	 */
+	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
+	 * @return true, if successful
+	 * @throws FileNotFoundException 
+	 * @throws UnsupportedEncodingException 
+	 */
+	public static boolean print(Document doc) throws UnsupportedEncodingException, FileNotFoundException
+	{
+		Writer writer = new PrintWriter(System.out);
+		return save(doc, writer);
+	}
+
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/xml/DomUtils.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/xml/UpdateXSLParameters.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/xml/UpdateXSLParameters.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/xml/UpdateXSLParameters.java	(revision 147)
@@ -0,0 +1,69 @@
+package org.txm.utils.xml;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.txm.utils.xml.*;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
+
+/**
+ * change parameters value of an XSL file
+ * 
+ * @author mdecorde
+ *
+ */
+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.
+	 * 
+	 * @param parameters
+	 * @return
+	 * @throws ParserConfigurationException
+	 * @throws SAXException
+	 * @throws IOException
+	 */
+	public boolean process(HashMap<String, String> parameters) throws ParserConfigurationException, SAXException, IOException {
+		if (!xslFile.exists()) {
+			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++) {
+			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);
+	}
+	
+	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>();
+		parameters.put("image-directory", "/home/mdecorde/TEMP/testori/mss-dates/img222222222222");
+		UpdateXSLParameters p = new UpdateXSLParameters(xslFile);
+		if (!p.process(parameters)) {
+			System.out.println("Fail");
+		} else {
+			System.out.println("Success");
+		}
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/xml/UpdateXSLParameters.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/LocalXhtmlDtdEntityResolver.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/LocalXhtmlDtdEntityResolver.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/LocalXhtmlDtdEntityResolver.java	(revision 147)
@@ -0,0 +1,23 @@
+package org.txm.utils;
+import java.io.IOException;
+
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+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 ) );
+    }
+
+}
\ No newline at end of file

Property changes on: tmp/org.txm.utils/src/org/txm/utils/LocalXhtmlDtdEntityResolver.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/zip/Zip.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/zip/Zip.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/zip/Zip.java	(revision 147)
@@ -0,0 +1,562 @@
+// 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.
+// 
+// The TXM platform is free software: you can redistribute it
+// and/or modify it under the terms of the GNU General Public
+// License as published by the Free Software Foundation,
+// either version 2 of the License, or (at your option) any
+// later version.
+// 
+// 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-10-27 16:30:30 +0200 (Thu, 27 Oct 2016) $
+// $LastChangedRevision: 3331 $
+// $LastChangedBy: mdecorde $ 
+//
+package org.txm.utils.zip;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.zip.Deflater;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipInputStream;
+import java.util.zip.ZipOutputStream;
+
+import org.txm.functions.ProgressWatcher;
+import org.txm.utils.logger.Log;
+
+/**
+ * Utility methods to extract, compress, list files of ZIP files
+ */
+public class Zip {
+
+	/** The ZIP extension. */
+	@Deprecated
+	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;
+
+	/**
+	 * Compress.
+	 *
+	 * @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);
+	}
+
+	/**
+	 * Compress.
+	 *
+	 * @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 {
+		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.
+	 */
+	public static void compress(final File file, final File targetZipFile, ProgressWatcher 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à..
+	 *
+	 * @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, ProgressWatcher monitor)
+					throws IOException {
+		final File source = file.getCanonicalFile();
+
+		// Création du fichier zip
+		final ZipOutputStream out = new ZipOutputStream(new FileOutputStream(targetZipFile));
+		out.setMethod(ZipOutputStream.DEFLATED);
+		out.setLevel(compressionLevel);
+
+		// Ajout du(es) fichier(s) au zip
+		compressFile(out, "", source, monitor);
+		out.close();
+	}
+
+	/**
+	 * Compress.
+	 *
+	 * @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 {
+		compress(file, file, compressionLevel, null);
+	}
+
+	/**
+	 * Compress.
+	 *
+	 * @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.
+	 *
+	 * @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 {
+		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.
+	 */
+	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.
+	 */
+	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.
+	 */
+	private final static void compressFile(final ZipOutputStream out,
+			final String parentFolder, final File file, ProgressWatcher 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);
+		entry.setSize(file.length());
+		entry.setTime(file.lastModified());
+		out.putNextEntry(entry);
+
+		// Traitement récursif s'il s'agit d'un répertoire
+		//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);
+				for (final File f : files) {
+					compressFile(out, zipName.toString(), f, null);
+					if (monitor != null) monitor.worked(1);
+				}
+				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).", 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.done();
+			} finally {
+				in.close();
+			}
+		}
+	}
+
+	/**
+	 * Decompress.
+	 *
+	 * @param file the file
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public static void decompress(final File file)
+			throws IOException {
+		decompress(file, file.getCanonicalFile().getParentFile(), false, null);
+	}
+
+	/**
+	 * Decompress.
+	 *
+	 * @param file the file
+	 * @param deleteZipAfter the delete zip after
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public static void decompress(final File file, final boolean deleteZipAfter)
+			throws IOException {
+		decompress(file, file.getCanonicalFile().getParentFile(), deleteZipAfter, null);
+	}
+
+	// Décompresse un fichier zip à l'adresse indiquée par le dossier
+	/**
+	 * Decompress.
+	 *
+	 * @param file 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 file, final File folder,
+			final boolean deleteZipAfter) throws IOException {
+		decompress(file, folder, deleteZipAfter, null);
+	}
+
+	// Décompresse un fichier zip à l'adresse indiquée par le dossier
+	/**
+	 * Decompress.
+	 *
+	 * @param file 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.
+	 */
+	public static void decompress(final File file, final File folder, final boolean deleteZipAfter, ProgressWatcher monitor)
+			throws IOException {
+		ZipInputStream zis = new ZipInputStream(new BufferedInputStream(
+				new FileInputStream(file.getCanonicalFile())));
+		ZipEntry ze;
+		int nEntries = 0;
+		//System.out.println("count entries...");
+		try {
+			while (null != (ze = zis.getNextEntry())) {
+				nEntries++;
+			}
+		} catch(Exception e) { } finally {
+			if (zis != null) zis.close();
+		}
+		//System.out.println("count entries result: "+nEntries);
+
+		zis = new ZipInputStream(new BufferedInputStream(
+				new FileInputStream(file.getCanonicalFile())));
+		//System.out.println("zis: "+zis);
+		if (monitor != null) { monitor.beginTask("Unzipping "+file, nEntries);}
+
+		try {
+			// Parcours tous les fichiers
+			//System.out.println("start parsing zip file: "+file);
+			while (null != (ze = zis.getNextEntry())) {
+				if (monitor != null) monitor.worked(1);
+
+				final File f = new File(folder.getCanonicalPath(), ze.getName());
+//				System.out.println(f);
+				if (f.exists()) f.delete();
+
+				// Création des dossiers
+				if (ze.isDirectory()) {
+					f.mkdirs();
+					continue;
+				}
+				f.getParentFile().mkdirs();
+				final OutputStream fos = new BufferedOutputStream(new FileOutputStream(f));
+
+				// Ecriture des fichiers
+				try {
+					try {
+						final byte[] buf = new byte[8192];
+						int bytesRead;
+						while (-1 != (bytesRead = zis.read(buf))) {
+							fos.write(buf, 0, bytesRead);
+						}
+					} finally {
+						fos.close();
+					}
+				} catch (final IOException ioe) {
+					f.delete();
+					throw ioe;
+				}
+			}
+		} finally {
+			zis.close();
+			if (monitor != null) monitor.done();
+		}
+
+		if (deleteZipAfter)
+			file.delete();
+	}
+
+	/**
+	 * Decompress.
+	 *
+	 * @param fileName the file name
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public static void decompress(final String fileName)
+			throws IOException {
+		decompress(new File(fileName));
+	}
+
+	/**
+	 * Decompress.
+	 *
+	 * @param fileName 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 fileName,
+			final boolean deleteZipAfter)
+					throws IOException {
+		decompress(new File(fileName), deleteZipAfter);
+	}
+
+
+	/**
+	 * Decompress.
+	 *
+	 * @param fileName the file name
+	 * @param folderName the folder name
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 */
+	public static void decompress(final String fileName, final String folderName)
+			throws IOException {
+		decompress(new File(fileName), new File(folderName), false);
+	}
+
+	/**
+	 * Decompress.
+	 *
+	 * @param fileName 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 fileName, final String folderName,
+			final boolean deleteZipAfter)
+					throws IOException {
+		decompress(new File(fileName), new File(folderName), deleteZipAfter, null);
+	}
+
+	/**
+	 * Decompress.
+	 *
+	 * @param fileName 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 fileName, final String folderName,
+			final boolean deleteZipAfter, ProgressWatcher monitor)
+					throws IOException {
+		decompress(new File(fileName), 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
+	 * @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
+	 * @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) {
+		try {
+			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());
+				if (ze.getName().equals(path)) { // this is the file to extract !
+					if (replaceOnlyIfNewer && ze.getTime() < oldFileTime) { // don't replace the file
+						zis.close();
+						return true;
+					}
+
+					OutputStream fos = new BufferedOutputStream(new FileOutputStream(outputFile));
+
+					// Ecriture des fichiers
+					try {
+						try {
+							final byte[] buf = new byte[8192];
+							int bytesRead;
+							while (-1 != (bytesRead = zis.read(buf)))
+								fos.write(buf, 0, bytesRead);
+						} finally {
+							fos.close();
+							zis.close();
+						}
+					} catch (final IOException ioe) {
+						throw ioe;
+					}					
+
+					return true;
+				}
+			}
+			System.out.println("Error: "+path+" not found.");
+
+			if (zis != null) {
+				try {
+					zis.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		} catch (Exception e) {
+			System.out.println("Fail to extract "+path+" from "+zipFile+": "+e);
+			Log.printStackTrace(e);
+		} 
+
+		return false; // no suitable entry found
+	}
+
+	/**
+	 * Try to get the root folder of the archive. If there is no root folder, the Zip filename is used
+	 * 
+	 * @param zipFile
+	 * @return
+	 */
+	public static String getRoot(File zipFile)
+	{
+		String root = null;
+		for (String f : listFiles(zipFile)) {
+			root = f;
+			if (f.startsWith(".") && f.indexOf(".") > 0) continue;
+			break;
+		}
+		//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
+				root = root.substring(0, root.indexOf("."));
+		}
+
+		int idx = root.indexOf("/");
+		if (idx > 0) root = root.substring(0, idx);
+		return root;
+	}
+
+	/**
+	 * List the ZIP file content
+	 * 
+	 * @param zipFile
+	 * @return
+	 */
+	public static ArrayList<String> listFiles(File zipFile)
+	{
+		ArrayList<String> list = new ArrayList<String>();
+		Enumeration<?> zipEntries;
+		try {
+			zipEntries = new ZipFile(zipFile).entries();
+			while (zipEntries.hasMoreElements()) {
+				list.add(((ZipEntry)zipEntries.nextElement()).getName());
+			}
+			Collections.sort(list);
+			return list;
+		} catch (Exception e) {
+			System.out.println("Fail to list files of "+zipFile+": "+e);
+			Log.printStackTrace(e);
+			return new ArrayList<String>();
+		} 		
+	}
+
+
+	/**
+	 * The main method.
+	 *
+	 * @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));
+		File toolboxJar = new File("/usr/lib/TXM/TXM/plugins/org.txm.toolbox_0.7.0.201509251550.jar");
+		File script = new File("/home/mdecorde/TEMP/xmlLoader.groovy");
+		script.delete();
+		System.out.println("Zip result: "+Zip.extractOneFile(toolboxJar, "org/txm/importer/xml/xmlLoader.groovy", script));
+		System.out.println("Done: exists="+script.exists()+" size="+script.length());
+	}
+}
+

Property changes on: tmp/org.txm.utils/src/org/txm/utils/zip/Zip.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/utils/zip/GZip.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/zip/GZip.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/utils/zip/GZip.java	(revision 147)
@@ -0,0 +1,58 @@
+package org.txm.utils.zip;
+
+import java.io.BufferedInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
+
+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);  
+		byte[] buf = new byte[1024];
+		int i;
+		while ((i = bufinStream.read(buf)) >= 0) {
+			goutStream.write(buf, 0, i);
+		}
+		bufinStream.close();
+		goutStream.close();
+	}
+
+	/**
+	 * unzip using gz filename to name the output file
+	 * 
+	 * @param gzFile
+	 * @param outDir
+	 * @return
+	 * @throws IOException 
+	 */
+	public static File uncompress(File gzFile, File outDir) throws IOException {
+		//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"
+		File outFile = new File(outDir, outFileName);
+		OutputStream out = new FileOutputStream(outFile);
+
+		byte[] buf = new byte[1024];  //size can be 
+
+		int len;
+		while ((len = gzipInputStream.read(buf)) > 0) {
+			out.write(buf, 0, len);
+		}
+
+		gzipInputStream.close();
+		out.close();
+
+		return outFile;
+	}
+}

Property changes on: tmp/org.txm.utils/src/org/txm/utils/zip/GZip.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/messages.properties
===================================================================
--- tmp/org.txm.utils/src/org/txm/messages.properties	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/messages.properties	(revision 147)
@@ -0,0 +1,542 @@
+FAILED=Failed.
+DONE=Done.
+AbsoluteFrequency_1=Absolute Frequency
+AbstractCqiClient_2=No error.
+ArrayIndex_0=** The index array can not be null or empty.
+ArrayIndex_1=** A zero-based index cannot be < 0 or > to the number of indexed elements.
+Base_0=Binary directory 
+Base_22='corpora' element missing from 'base' element
+Base_3=\ does not exist?
+Base_4=Parent directory 
+Base_5=\ does not exist?
+Base_6=Error: linkGrp/link/@target malformed: 
+BuildCwbEncodeArgs_0=The file ''{0}'' cannot be found.
+CAH_0=Error while exporting CAH result : 
+CA_0=** The lexical table was not found in the R workspace.
+CA_16=** Cannot load the 'ca' library
+CA_2=** Error while computing correspondance analysis: 
+CA_4=Unable to extract singular values 
+CHAR_VECTOR_ADDED_TO_WORKSPACE=Vector "{1}" ({0,number,integer} "character") has been transmited to the Statistics Engine.
+CONNECTED_TO_STATS_MODULE= connected.
+CONNECTING_CQI_CLIENT=Connecting to the Search Engine with the following parameters: {0}:{1}@{2}{3}
+CONNECTION_OK=Connected to the Statistics Engine.
+CQI_CLIENT_CONNECTED=Connected to the Search Engine.
+CREATING_PART=Part {0} created with query {1}
+CREATING_SUBCORPUS=Subcorpus {1} created from corpus {0} with the query {2}
+CatalogManager_0=** Manager Error during initialization: 
+CatalogManager_1=\ does not exist.
+Catalog_0=** Catalog File Not found 
+CompositeComparator_0=Composite: 
+Concordance_0=\ 
+Concordance_1=** Failed to retrieve text_id property from lines
+Concordance_12=** Failed to export Concordance: 
+Concordance_13=Reference
+Concordance_14=LeftContext
+Concordance_15=Keyword
+Concordance_16=RightContext
+Concordance_17=Reference
+Concordance_18=
+Concordance_19=Context
+Concordance_2=undefined
+Concordance_3=\ results retrieved in 
+Concordance_4=Failed to remove QueryResult from CQP: 
+Concordance_5=
+Concordance_6=Retrieving 
+Concordance_7=\ results
+Concordance_8=Failed to get texts limits: 
+Contrasts_0=Computing: 
+Convert5To6_1= is missing
+Convert5To6_10='registry' file is missing: 
+Convert5To6_11='html' directory is missing: 
+Convert5To6_12=processing...
+Convert5To6_15=reorganizing files of 
+Convert5To6_19=Read corpus infos from old import.xml file: 
+Convert5To6_30=Fill import.xml with: 
+Convert5To6_46=processing text: 
+Convert5To6_6=checking binary format...
+Convert5To6_7='txm' directory is missing: 
+Convert5To6_8='html' directory is missing: 
+Convert5To6_9='data' directory is missing: 
+Cooccurrence_0=Coocurrence: 
+Cooccurrence_1=** Error: can't find 'n' or 'o': 
+Cooccurrence_10=\ properties: 
+Cooccurrence_102=** Error: negative argument in 'factln' function
+Cooccurrence_103=** Error: negative argument in 'rbicoln' function
+Cooccurrence_105=Occ\tFreq\tCoFreq\tScore\tMeanDist\tMode
+Cooccurrence_106=\n
+Cooccurrence_107=** Error: 
+Cooccurrence_11=Occ
+Cooccurrence_12=Freq
+Cooccurrence_13=CoFreq
+Cooccurrence_14=Score
+Cooccurrence_15=MeanDist
+Cooccurrence_16=Mode
+Cooccurrence_2=Cooc: 
+Cooccurrence_22=Error: ref_forms.length ! ref_freqs.length
+Cooccurrence_23=Error: no cooccurrents
+Cooccurrence_3=\ (
+Cooccurrence_4=\ F: 
+Cooccurrence_5=** Impossible to compute cooccurrences with this concordance 
+Cooccurrence_6=Occ\tFreq\tCoFreq\tScore\tMeanDist\tMode
+Cooccurrence_7=\ Occ:
+Cooccurrence_8=\ Score:
+Cooccurrence_9=\ MeanDist:
+CorpusManager_0=** CQi Client not initialized
+CorpusManager_1=** Error: This exception should not be thrown
+Corpus_12=** Failed to restore subcorpus 
+Corpus_13=Corpus:getLocale: CQP is not ready to answer: 
+Corpus_14=Warning: can't load corpus 
+Corpus_15= informations from workspace (selfElement  null)
+Corpus_19=** Failed to restore partition 
+Corpus_2=Corpus: 
+Corpus_3=, Encoding : 
+Corpus_4=, Language : 
+Corpus_5=No values given
+Corpus_6=** Corpus: the reference to text 
+Corpus_7=\ is broken
+Corpus_8=\ in 								
+CorrespondanceAnalysisEditorInput_21=Rows
+CorrespondanceAnalysisEditorInput_22=Cols
+CorrespondanceAnalysisEditorInput_23=Q12
+CorrespondanceAnalysisEditorInput_24=Q13
+CorrespondanceAnalysisEditorInput_25=Q23
+CorrespondanceAnalysisEditorInput_26=Mass
+CorrespondanceAnalysisEditorInput_27=Dist
+CorrespondanceAnalysisEditorInput_29=Cont
+CorrespondanceAnalysisEditorInput_30=Cos\u00B2
+CorrespondanceAnalysisEditorInput_32=c1
+CorrespondanceAnalysisEditorInput_33=c2
+CorrespondanceAnalysisEditorInput_34=c3
+CorrespondanceAnalysisEditorInput_4=Factor
+CorrespondanceAnalysisEditorInput_44=Cols
+CorrespondanceAnalysisEditorInput_46=Q12
+CorrespondanceAnalysisEditorInput_47=Q13
+CorrespondanceAnalysisEditorInput_48=Q23
+CorrespondanceAnalysisEditorInput_49=Mass
+CorrespondanceAnalysisEditorInput_5=Singular values
+CorrespondanceAnalysisEditorInput_50=Dist
+CorrespondanceAnalysisEditorInput_52=Cont
+CorrespondanceAnalysisEditorInput_53=Cos\u00B2
+CorrespondanceAnalysisEditorInput_55=c1
+CorrespondanceAnalysisEditorInput_56=c2
+CorrespondanceAnalysisEditorInput_57=c3
+CqiClient_0=Get Last CQP error
+CqiClient_1=Read CQI CTRL LAST GENERAL ERROR
+CqiClient_3=** Failed to get last CQP error
+CqiClient_32=Search Engine launched...
+CqiClient_33=** failed to connect to Search Engine.
+CqiClient_34=Running SearchEngine in memory mode.
+CwbEncode_0=The directory does not exists: 
+CwbEncode_21=The "binary" directory does not exists: 
+CwbEncode_23=The "registry" directory does not exists:  
+CwbEncode_25=The "corpora" directory does not exists: 
+CwbEncode_27=Processing corpus...
+CwbEncode_29=The "data" directory does not exists: 
+CwbEncode_32=Fixing registry file {0} with {1}
+CwbProcess_1=Starting process with command: 
+CwbProcess_3=Stopping process: 
+CwbProcess_4=Process stoped: 
+CwbProcess_5=** Can't find CQP location : 
+DOUBLE_VECTOR_ADDED_TO_WORKSPACE=Vector "{1}" ({0,number,integer} "doubles") transmitted to the Statistics Engine.
+DROP_PARTITION=Deleting partition {0}
+DROP_QUERYRESULT=Deleting query results {0}
+DROP_SUBCORPUS=Deleting subcorpus {0}
+Diagnostic_0=* Structural Units properties\n
+Diagnostic_1=** Failed to access corpus 
+Diagnostic_10=Partition name: 
+Diagnostic_11=\ structures
+Diagnostic_12=Number of parts: 
+Diagnostic_13=Partition size: 
+Diagnostic_14=Lexical Units properties (max {0} values)
+Diagnostic_15=Part number: 
+Diagnostic_16=Number of structural units 
+Diagnostic_17=Part names: 
+Diagnostic_18=Part sizes: 
+Diagnostic_19=Part properties: 
+Diagnostic_2=** Error
+Diagnostic_20=Parts queries: 
+Diagnostic_22=Structural Units properties (max {0} values)
+Diagnostic_23=\ values)
+Diagnostic_26=No property
+Diagnostic_3=Description of 
+Diagnostic_4=\ properties
+Diagnostic_40=* General Statistics\n
+Diagnostic_41=- T 
+Diagnostic_43=- Word properties 
+Diagnostic_49=- S 
+Diagnostic_5=General Statistics
+Diagnostic_6=** Failed to access corpus 
+Diagnostic_7=Number of words 
+Diagnostic_8=\ lexicon
+Diagnostic_9=Number of word properties 
+END_SUBCORPUS_LEXICON=Lexicon of subcorpus {0} computed in {1} ms
+END_SUBCORPUS_SIZE=size of subcorpus {0} ({1}) computed in {2} ms
+ERROR_EXTRACT_ITEM=** Error extracting list item: 
+EVALUATED_EXPRESSION=Expression "{0}" evaluated.
+ExecTimer_0= msec
+ExecTimer_1= sec
+ExecTimer_2= min and 
+ExecTimer_3=h, 
+FAILED_INIT_CONNECTION_R=** Failed to connect to Statistics Engine.
+FactoMineRCA_2=** Fail to get contrib column: 
+FactoMineRCA_3=** Fail to get cos\u00B2 column: 
+FactoMineRCA_4=** Fail to get contrib row: 
+FactoMineRCA_5=** Fail to get cos\u00B2 row: 
+Factor_0=** Not implemented
+FileCopy_0=** File copy: failed to find source: 
+FileCopy_2=** File copy: access right restriction to source: 
+FileCopy_4=** File copy: failed to create directory: 
+FilterManager_0=** Filter manager error : initialization 
+FilterManager_1=\ does not exist.
+Filter_7=** Read error
+Focus_1=** The focus is empty or null.
+GroovyImportScriptRunner_0=Initialization of GroovyImportScriptRunner
+GroovyImportScriptRunner_1=> beginning execution of 
+GroovyImportScriptRunner_3=> end of execution 
+INT_VECTOR_ADDED_TO_WORKSPACE=Vector "{1}" ({0,number,integer} "int") transmitted to Statistics Engine.
+InternalView_3=\ \ Structure informations: 
+InternalView_6=InternalView: failed to retrieve struct properties values: 
+InternalView_7=\ \ No structure informations
+LEXICON=Lexicon 
+LEXICON_ADDED=Lexicon "{1}" ({0,number,integer} entries) transmitted to Statistics Engine.
+LIBBRARY_NOT_LOADED=Failed to load the {0} library: {1}
+LS_0=Error: 
+LS_1= is not a Directory!
+LexicalTableImpl_0=
+LexicalTableImpl_1=Building lexical table with: 
+LexicalTableImpl_10= columns
+LexicalTableImpl_12=Error: margin 
+LexicalTableImpl_13= is higher than the partition size
+LexicalTableImpl_3=\ <no partition> /
+LexicalTableImpl_5=not enough columns: minimum 2 (here: 
+LexicalTableImpl_8=line
+LexicalTableImpl_9= does not have 
+LexicographicKeywordComparator_0=Keyword
+LexicographicLeftContextComparator_0=Left context
+LexicographicRightContextComparator_0=Right context
+Lexicon_0=Forms and frequencies tables must be of the same length.
+Lexicon_3=Lexicon : 
+Localizer_0=[Missing translation] 
+Localizer_1=messages
+Log_3=Copying logs in 
+Log_5=Start loging in 
+Log_8=\nstack:\n
+MATRIX_ADDED_TO_WORKSPACE=Matrix "{2}" ({0,number,integer} rows and {1,number,integer} columns) transmitted to Statistics Engine.
+MainCorpus_0=\ is not a valid CQP ID for a corpus. It must be in uppercase characters.
+MainCorpus_1=\ in 
+MainCorpus_2=Delete binary directory: 
+MatrixImpl_0=A variable ("
+MatrixImpl_1=") does not exist in the R workspace.
+MatrixImpl_10=Row index (
+MatrixImpl_11=) too big (max 
+MatrixImpl_13=Col index (
+MatrixImpl_14=) too big (max 
+MatrixImpl_19=R object evaluated to null.
+MatrixImpl_2=dim(
+MatrixImpl_20=Unknown type: 
+MatrixImpl_21=mode
+MatrixImpl_22=Row index (
+MatrixImpl_23=) too big (max 
+MatrixImpl_28=Column index (
+MatrixImpl_29=) too big (max 
+MatrixImpl_4=Row names of a contingency table cannot be null.
+MatrixImpl_5=Row names vector length must be equal to the number of rows of the matrix.
+MatrixImpl_6=Column names of a contingency table cannot be null
+MatrixImpl_67=Matrix: failed to get nrow: 
+MatrixImpl_7=Col names vector length must be equals to the number of columns of the matrix (
+MatrixImpl_73=MatrixImpl: Error: column size differs: original
+MatrixImpl_79=Failed to get row names
+MatrixImpl_88=Cannot delete all lines
+MemCqiClient_0=Internal CQi error: 
+MemCqiClient_1=CL error: 
+MemCqiClient_10=Unknown CQP codes : b1 
+MemCqiClient_11=Query ERROR
+MemCqiClient_2=CQP error: 
+MemCqiClient_3=Unknown CQP error : b1 
+MemCqiClient_5=Unknown CQP cqi error : b1 
+MemCqiClient_7=Unknown CQP code : b1 
+MemCqiClient_9= b2 
+MessageBox_0=Error
+MessageBox_1=Warning
+MessageBox_2=Information
+NEW_PARTION=Creating new partion of corpus {0}: {1}
+NOT_FOUND_IN_R=) was not found in the R workspace.
+NetCqiClient_1=getLastCQiError: 
+NetCqiClient_3=getLastCQPError: 
+NetCqiClient_5=Could not reconnect to server: 
+NetCqiClient_97=client.dumpSubCorpus(subcorpus, NetCqiClient.CQI_CONST_FIELD_MATCH, 1, 2) : 
+NetCqiServer_0=** cqpserver stdout: 
+NetCqiServer_1=** cqpserver stderr: 
+NullComparator_0=None
+PACKAGE_LOADED=Library {0} loaded.
+PARTITION_CREATED=Partition {0} created in {1} ms
+PART_CREATED=Part {0} created in {1} ms
+Page_3=** Malformed URL, file 
+Pair_0=\ should be false
+Pair_1=\ should be true
+PartitionFocus_1=The focus cannot be null or empty.
+PartitionFocus_2=Focus is empty or null
+PartitionFocus_3=The {0} part focus doesn''t belong to partition {1}.
+PartitionFocus_4=** Unknown partition name.
+Partition_1=\ in 
+Partition_18=Failed to get last CQP error: 
+Partition_2=\ in 
+Partition_21=Warning: the partition could not be saved in workspace: 
+Partition_4=\ query: 
+Partition_9=** Failed to create part: 
+PatchCwbRegistry_0="{0}" corpus registry update
+PatchCwbRegistry_1=' corpus
+PatchCwbRegistry_13=Source registry does not exists: 
+PatchCwbRegistry_16=Can't find registry file
+PatchCwbRegistry_2=Updating 
+PatchCwbRegistry_23= encoding to 
+PatchCwbRegistry_27=data directory 
+PatchCwbRegistry_28=Could not patch registry
+PatchCwbRegistry_29= could not be found in registry file 
+PatchCwbRegistry_3=** The target corpus doesn't exist
+PatchCwbRegistry_34=Updating 
+PatchCwbRegistry_35= language to 
+PatchCwbRegistry_4=Add Alignment attribute to corpus 
+PatchCwbRegistry_5= registry: 
+Project_0=Use directory name to build corpus declaration
+Project_1=The corpus declaration file is not found too: 
+Project_10=Project.load: workspace XML file error: 
+Project_11=Failed to load base parameters from file: 
+Project_12=Loading {0} corpus...  
+Project_13=Adding texts: 
+Project_14=Error: no version in import.xml file
+Project_15=Error: the corpus version is too old to be loaded.
+Project_16=Corpus name has been changed from {0} to {1} 
+Project_17=Error: skipping the loading of corpus: 
+Project_18=PARAMS: 
+Project_2=Warning in corpus definition: no name attribute defined in its XML file : {0}
+Project_25=Error: registry directory does not exist ! 
+Project_26=** Error: ''{0}'' corpus directory is not conformant to TXM corpus binary format: corpus skipped." 
+Project_27=Error while patching registry file: 
+Project_28=TXM needs folders: 
+Project_3=Project: load: malformed base node: duplicated 
+Project_31= and file 
+Project_4=Remove duplicate corpus from corpus list: 
+Project_5=Analysing directory...
+Project_6=Failed to load corpus with params: 
+Project_7=Failed to load base with parameters file: 
+Project_8=Can't read corpus parameters file: 
+Project_9= base
+PropertiesReferenceComparator_0=References
+QUERY=Query on {0} : {1} <- {2}
+QUERYING_PARTITION=Querying partition {0}
+QuantitativeDataStructureImpl_0=No object with name "
+QuantitativeDataStructureImpl_1=" in the workspace
+QuantitativeDataStructureImpl_2=** Cannot delete a non-existing object.
+QueryIndex_2=Warning : duplicate query entry : 
+QueryIndex_3=Warning: query failed: 
+QueryResult_0=\ is not a valid CQP Id for a subcorpus. It must be an uppercase characters followed by lowercase characters.
+READING_2D_INT_ARRAY_FROM_CQI_SERVER=Reading an integer table from the CQi server
+READING_BOOLEAN_FROM_CQI_SERVER=Reading boolean from the CQi server
+READING_HEADER_FROM_CQI_SERVER=Reading header from the CQi server
+READING_INTEGER_FROM_CQI_SERVER=Reading integer from the CQi server
+READING_INT_ARRAY_FROM_CQI_SERVER=Reading integer array from the CQi server
+READING_STRING_ARRAY_FROM_CQI_SERVER=Reading string array from the CQi server
+READING_STRING_FROM_CQI_SERVER=Reading string from the CQi server
+READ_2D_INT_ARRAY_FROM_CQI_SERVER=Read string 2D integer from the CQi server : {0}
+READ_BOOLEAN_FROM_CQI_SERVER=Read boolean from the CQi server : {0}
+READ_BYTE_FROM_CQI_SERVER=Read byte from the CQi server : {0}
+READ_HEADER_FROM_CQI_SERVER=Read header from the CQi server : {0}
+READ_INTEGER_FROM_CQI_SERVER=Read integer from the CQi server : {0}
+READ_INT_ARRAY_FROM_CQI_SERVER=Read integer array from the CQi server : {0}
+READ_STRING_ARRAY_FROM_CQI_SERVER=Read string array from the CQi server : {0}
+READ_STRING_FROM_CQI_SERVER=Read string from the CQi server : {0}
+REQUESTED_OBJECT=The object requested (
+RETURNING_CACHED_LEXICON=Recycling the lexicon {0}
+RETURN_FROM_QUERY={0} matches found in {1} ms
+RException_0=** R error: "
+RException_1="
+RException_2=\nwhile evaluating: 
+RSERVE_ACTIVATED=Statistics Engine running 
+RSERVE_PATH_NOT_SET_ERROR=** The Statistics Engine program path is not set and we could not find it
+RSERVE_PATH_SET_ERROR=** The Statistics Engine program path is set but we couldn't find it
+RWorkspace_0=** Failed to connect to the R Workspace 
+RWorkspace_1=** Evaluation Error: 
+RWorkspace_10=Starting R using path: 
+RWorkspace_11=Last safeeval: 
+RWorkspace_2=try : connect to R at 
+RWorkspace_21=Full command: 
+RWorkspace_3=Saving graphic in file 
+RWorkspace_4=
+RWorkspace_5=
+RWorkspace_6=** Failed to initialize file transfert: 
+RWorkspace_7=Matrix is empty
+RWorkspace_8=Failed to start RServe : 
+R_EXPR=Expression sent to the Statistics Engine for evaluation: {0}.
+R_READ_CONSOLE=The Statistics Engine waits for something to read from the console ({0}, {1}).
+R_SAVE_HISTORY=The Statistics Engine has saved an history ({0}).
+R_SHOW_MESSAGE=The Statistics Engine displayed this message: {0}.
+R_WRITE_CONSOLE=The Statistics Engine displayed this message in the console: {0}.
+ReferencePattern_3=Reference
+Referencer_1=Referencer
+Referencer_2=Referencer export failed: 
+RelativeFrequency_3=Relative Frenquency %
+Progression_1=Error: subcorpus with size 0
+Progression_10=in
+Progression_11=(density)
+Progression_12=structure: 
+Progression_13=, property: 
+Progression_14=, value: 
+Progression_2=Warning: discontinued subcorpus
+Progression_3=Error: subcorpus with size 0
+Progression_9=Progression of
+SERVER_STARTED=Search Engine started 
+SERVER_STOPED=Search Engine stopped
+STARTING_SERVER=Starting Search Engine : {0}
+STOPING_SERVER=Stopping the Search Engine
+SUBCORPUS_CREATED=Subcorpus {0} created in {1} ms
+SUBCORPUS_LEXICON=Computing the lexicon of subcorpus {0}
+SUBCORPUS_SIZE=Computing the size of subcorpus {0}
+Selection_0=\ number of words : 
+Selection_1=\ number of texts : 
+Selection_2=\ value : 
+Selection_26=Failed to get sup values of 
+Selection_3=Property : 
+Selection_4=number of words : 
+Selection_5=Text metadata: 
+Selection_6=Selection error: the corpus 
+Selection_7= has no base
+Selection_8=Can't find structural unit for metadata with id: 
+Selection_9=Error while getting metadatas from Base.importMetadatas: 
+Sh_4=Process exited abnormally with code 
+SpecificitesResult_0=** No specificity index array.
+SpecificitesResult_1=** The specificity index array does not properly represent a matrix.
+SpecificitesResult_10=** Reference to a non existing column.
+SpecificitesResult_2=** The lexical table cannot be null.
+SpecificitesResult_3=** Number of rows wanted (
+SpecificitesResult_4=) and found (
+SpecificitesResult_5=) mismatch.
+SpecificitesResult_6=** Reference to non existing row.
+SpecificitesResult_7=** number of columns given and found mismatch (
+SpecificitesResult_8=Unit
+Specificites_0=** Cannot compute specificites with less than 2 parts in the corpus.
+Specificites_1=** Failed to get the specificites: 
+Specificites_2=\ specificity index computed
+StartRserve_0=Starting R with command line: 
+StartRserve_2=No R path given, trying to find it...
+StartRserve_21=** Failed to start Rserve with command: 
+StartRserve_22=Statistical Engine launched
+StartRserve_28=** Failed to run REG to find the location of R program: 
+StartRserve_29=\ You need the 'R' software and you need to configure in the 'Tools/Preferences' window the correct path to it.
+StartRserve_3=Rserve already running on port 
+StartRserve_4=try R path : 'R'
+StartRserve_6=try R path : 
+StreamGobbler_0=Initializing log recorder
+StreamGobbler_1=Starting log recorder
+StreamGobbler_2=Stopping log recorder
+StreamGobbler_3=Interrupting log recorder
+StructuralUnitProperty_0=** Failed to access structural property values 
+Subcorpus_1=\ in 
+Subcorpus_2=Warning: the subcorpus could not be saved in workspace: 
+Subcorpus_3=\ is not a valid CQP ID for a subcorpus. It must be an uppercase character followed by lowercase characters.
+Summary_13=Error : text 
+Summary_14= is null
+Summary_15=Error : edition default is null
+Summary_16=Error: textids
+Summary_17= and wordids
+TSCmd_30=Query was: 
+TSCmd_31= matches found.
+TSCorpusManager_0=Error reg dir: 
+TSCorpusManager_1=Error configdir dir: 
+TSCorpus_0=Couldn't read corpus: 
+TSResult_0=Number of match 
+TSResult_13=Cannot found tigerXml file: 
+TSResult_14=Ts: conc: Failed to create xml file
+TSResult_18=Starting injection
+TSResult_2=Number of sub match 
+TSResult_7=Can't find 
+TSResult_8= in TS export methods 
+TigerXmlIndexing_2=ERROR: !exists
+TigerXmlIndexing_3=ERROR: !read
+TigerXmlIndexing_6=IO: 
+TigerXmlIndexing_7=SAX: 
+Toolbox_0=** File
+Toolbox_1=** Platform : the parameters SERVER_PATH_TO_EXECUTABLE, SERVER_PATH_TO_REGISTRY et SERVER_PATH_TO_INIT_FILE must be specified in a given '.properties' file.
+Toolbox_10=** No worlspace found. Creating a new one.
+Toolbox_11=Updating with : 
+Toolbox_12=Loading workspace from file : 
+Toolbox_14=** Error loadgin workspace from file : 
+Toolbox_15=** Error : 
+Toolbox_16=\ does not exists
+Toolbox_17=End of CQP wait test
+Toolbox_18=** Error while waiting for CQP
+Toolbox_2=** Error: null value for key 
+Toolbox_21=\ R: 
+Toolbox_22=\ Workspace: 
+Toolbox_23=Start StatEngine: user: 
+Toolbox_24=\ remote:
+Toolbox_25=\ port: 
+Toolbox_26=** Error : while connection to search engine, with the following parameters : 
+Toolbox_27=\ and 
+Toolbox_28=Failed to start MemCqiClient: 
+Toolbox_29=** Error while connecting to search engine.
+Toolbox_3=true
+Toolbox_30=- wrong login or password or port : 
+Toolbox_31=Failed to exec 'taskkill /IM cqpserver.exe /F': 
+Toolbox_33=- or the engine was not started with the command line : 
+Toolbox_34=Failed to exec 'tskill cqpserver.exe': 
+Toolbox_35=** Error while connecting to the stat engine.
+Toolbox_37=kill `ps aux | grep cqpserver | awk '/-P 
+Toolbox_38=/ {print $2}'`
+Toolbox_39=Failed to exec '
+Toolbox_4=With parameters: 
+Toolbox_40=': 
+Toolbox_43=Failed to exec 'taskkill /IM Rserve.exe /F': 
+Toolbox_45=Failed to exec 'tskill Rserve.exe': 
+Toolbox_47=Failed to exec 'killall -9 Rserve-bin.so': 
+Toolbox_5= debug: 
+Toolbox_7=The path to R program is null
+Toolbox_8=Undefined keys : 
+Toolbox_9=Platform parameters: 
+Toolbox_connected_to_corpus_sever=connected
+Toolbox_wait_failed=** Failed to wait for the interrupted process
+Toolbox_workspace_init=Reloading subcorpora and partitions...
+Toolbox_workspace_init_failed=** Error during workspace initialisation :
+Toolbox_wrong_port=** Error : the connexion to the server failed : wrong port format
+TxmObject_0=** Failed to get parent object
+TxmObject_1=TxmObject: delete: parent object is null
+TxmObject_2=Failed to save attribute 
+TxmRenderer_1=TxmRenderer: error: no corpus found for result 
+TxmRenderer_5=line: 
+TxmRenderer_6= prop 
+TxmRenderer_7=  mdc: 
+VARIABLE_REMOVED=R Variable "{0}" deleted.
+ValidateXml_0=XmlValidation: 
+ValidateXml_1= is a directory
+ValidateXml_2= does not exists
+ValidateXml_3= is not read-able
+VectorizeArray_0=** Nothing to do with an empty matrix
+VectorizeArray_1=** Inner arrays must be of dimension > 0.
+VectorizeArray_10=** An inner array cannot be null.
+VectorizeArray_11=** All the inner array do not have the same length.
+VectorizeArray_3=** All the inner array do not have the same length.
+VectorizeArray_4=** Nothing to do with an empty matrix
+VectorizeArray_5=** Inner arrays must be of dimension > 0.
+VectorizeArray_7=** All the inner array do not have the same length.
+VectorizeArray_8=** Nothing to do with an empty matrix
+VectorizeArray_9=** Inner arrays must be of dimension > 0.
+Index_0=** Error while computing lexicon:\n 
+Index_1=Console : 
+Index_7=** Failed to export Lexicon : 
+WORKSPACE_PURGED=Statistics Engine cleaned up.
+Workspace_0=, index 
+Workspace_1=\t\t\tEdition: 
+Workspace_10=corpus: 
+Workspace_2=** Failed to load workspace: 
+Workspace_26=\t\t\t\tPage: 
+Workspace_27=\ wordid 
+Workspace_28=\t\tScript: 
+Workspace_29=, type:  
+Workspace_3=Project: 
+Workspace_30=\tCorpora: 
+Workspace_31=\t\tText: 
+Workspace_4=\tBase: 
+Workspace_5=\t\tText: 
+Workspace_6=** Failed to create empty workspace file: 
+Workspace_7=\ pages
+Workspace_8=Workspace XML file is mal formed. We need to recreate one...

Property changes on: tmp/org.txm.utils/src/org/txm/messages.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/Messages.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/Messages.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/Messages.java	(revision 147)
@@ -0,0 +1,598 @@
+package org.txm;
+
+import java.lang.reflect.Field;
+
+import org.eclipse.osgi.util.NLS;
+
+/**
+ * The keys of all messages in the Toolbox
+ * 
+ * @author mdecorde
+ *
+ */
+public class Messages extends NLS {
+	
+	// The Constant BUNDLE_NAME. 
+	private static final String BUNDLE_NAME = "org.txm.messages"; //$NON-NLS-1$
+	public static String FAILED;
+	public static String DONE;			
+	public static String AbsoluteFrequency_1;
+	public static String AbstractCqiClient_2;
+	public static String ArrayIndex_0;
+	public static String ArrayIndex_1;
+	public static String Base_0;
+	public static String Base_22;
+	public static String Base_3;
+	public static String Base_4;
+	public static String Base_5;
+	public static String Base_6;
+	public static String BuildCwbEncodeArgs_0;
+	public static String CAH_0;
+	public static String CA_0;
+	public static String CA_16;
+	public static String CA_2;
+	public static String CA_4;
+	public static String CHAR_VECTOR_ADDED_TO_WORKSPACE;
+	public static String CONNECTED_TO_STATS_MODULE;
+	public static String CONNECTING_CQI_CLIENT;
+	public static String CONNECTION_OK;
+	public static String CQI_CLIENT_CONNECTED;
+	public static String CREATING_PART;
+	public static String CREATING_SUBCORPUS;
+	public static String CatalogManager_0;
+	public static String CatalogManager_1;
+	public static String Catalog_0;
+	public static String CompositeComparator_0;
+	public static String Concordance_0;
+	public static String Concordance_1;
+	public static String Concordance_12;
+	public static String Concordance_13;
+	public static String Concordance_14;
+	public static String Concordance_15;
+	public static String Concordance_16;
+	public static String Concordance_17;
+	public static String Concordance_18;
+	public static String Concordance_19;
+	public static String Concordance_2;
+	public static String Concordance_3;
+	public static String Concordance_4;
+	public static String Concordance_5;
+	public static String Concordance_6;
+	public static String Concordance_7;
+	public static String Concordance_8;
+	public static String Contrasts_0;
+	public static String Convert5To6_1;
+	public static String Convert5To6_10;
+	public static String Convert5To6_11;
+	public static String Convert5To6_12;
+	public static String Convert5To6_15;
+	public static String Convert5To6_19;
+	public static String Convert5To6_30;
+	public static String Convert5To6_46;
+	public static String Convert5To6_6;
+	public static String Convert5To6_7;
+	public static String Convert5To6_8;
+	public static String Convert5To6_9;
+	public static String Cooccurrence_0;
+	public static String Cooccurrence_1;
+	public static String Cooccurrence_10;
+	public static String Cooccurrence_102;
+	public static String Cooccurrence_103;
+	public static String Cooccurrence_105;
+	public static String Cooccurrence_106;
+	public static String Cooccurrence_107;
+	public static String Cooccurrence_11;
+	public static String Cooccurrence_12;
+	public static String Cooccurrence_13;
+	public static String Cooccurrence_14;
+	public static String Cooccurrence_15;
+	public static String Cooccurrence_16;
+	public static String Cooccurrence_2;
+	public static String Cooccurrence_22;
+	public static String Cooccurrence_23;
+	public static String Cooccurrence_3;
+	public static String Cooccurrence_4;
+	public static String Cooccurrence_5;
+	public static String Cooccurrence_6;
+	public static String Cooccurrence_7;
+	public static String Cooccurrence_8;
+	public static String Cooccurrence_9;
+	public static String CorpusManager_0;
+	public static String CorpusManager_1;
+	public static String Corpus_12;
+	public static String Corpus_13;
+	public static String Corpus_14;
+	public static String Corpus_15;
+	public static String Corpus_19;
+	public static String Corpus_2;
+	public static String Corpus_3;
+	public static String Corpus_4;
+	public static String Corpus_5;
+	public static String Corpus_6;
+	public static String Corpus_7;
+	public static String Corpus_8;
+	public static String CorrespondanceAnalysisEditorInput_21;
+	public static String CorrespondanceAnalysisEditorInput_22;
+	public static String CorrespondanceAnalysisEditorInput_23;
+	public static String CorrespondanceAnalysisEditorInput_24;
+	public static String CorrespondanceAnalysisEditorInput_25;
+	public static String CorrespondanceAnalysisEditorInput_26;
+	public static String CorrespondanceAnalysisEditorInput_27;
+	public static String CorrespondanceAnalysisEditorInput_29;
+	public static String CorrespondanceAnalysisEditorInput_30;
+	public static String CorrespondanceAnalysisEditorInput_32;
+	public static String CorrespondanceAnalysisEditorInput_33;
+	public static String CorrespondanceAnalysisEditorInput_34;
+	public static String CorrespondanceAnalysisEditorInput_4;
+	public static String CorrespondanceAnalysisEditorInput_44;
+	public static String CorrespondanceAnalysisEditorInput_46;
+	public static String CorrespondanceAnalysisEditorInput_47;
+	public static String CorrespondanceAnalysisEditorInput_48;
+	public static String CorrespondanceAnalysisEditorInput_49;
+	public static String CorrespondanceAnalysisEditorInput_5;
+	public static String CorrespondanceAnalysisEditorInput_50;
+	public static String CorrespondanceAnalysisEditorInput_52;
+	public static String CorrespondanceAnalysisEditorInput_53;
+	public static String CorrespondanceAnalysisEditorInput_55;
+	public static String CorrespondanceAnalysisEditorInput_56;
+	public static String CorrespondanceAnalysisEditorInput_57;
+	public static String CqiClient_0;
+	public static String CqiClient_1;
+	public static String CqiClient_3;
+	public static String CqiClient_32;
+	public static String CqiClient_33;
+	public static String CqiClient_34;
+	public static String CwbEncode_0;
+	public static String CwbEncode_21;
+	public static String CwbEncode_23;
+	public static String CwbEncode_25;
+	public static String CwbEncode_27;
+	public static String CwbEncode_29;
+	public static String CwbEncode_32;
+	public static String CwbProcess_1;
+	public static String CwbProcess_3;
+	public static String CwbProcess_4;
+	public static String CwbProcess_5;
+	public static String DOUBLE_VECTOR_ADDED_TO_WORKSPACE;
+	public static String DROP_PARTITION;
+	public static String DROP_QUERYRESULT;
+	public static String DROP_SUBCORPUS;
+	public static String Diagnostic_0;
+	public static String Diagnostic_1;
+	public static String Diagnostic_10;
+	public static String Diagnostic_11;
+	public static String Diagnostic_12;
+	public static String Diagnostic_13;
+	public static String Diagnostic_14;
+	public static String Diagnostic_15;
+	public static String Diagnostic_16;
+	public static String Diagnostic_17;
+	public static String Diagnostic_18;
+	public static String Diagnostic_19;
+	public static String Diagnostic_2;
+	public static String Diagnostic_20;
+	public static String Diagnostic_22;
+	public static String Diagnostic_23;
+	public static String Diagnostic_26;
+	public static String Diagnostic_3;
+	public static String Diagnostic_4;
+	public static String Diagnostic_40;
+	public static String Diagnostic_41;
+	public static String Diagnostic_43;
+	public static String Diagnostic_49;
+	public static String Diagnostic_5;
+	public static String Diagnostic_6;
+	public static String Diagnostic_7;
+	public static String Diagnostic_8;
+	public static String Diagnostic_9;
+	public static String END_SUBCORPUS_LEXICON;
+	public static String END_SUBCORPUS_SIZE;
+	public static String ERROR_EXTRACT_ITEM;
+	public static String EVALUATED_EXPRESSION;
+	public static String ExecTimer_0;
+	public static String ExecTimer_1;
+	public static String ExecTimer_2;
+	public static String ExecTimer_3;
+	public static String FAILED_INIT_CONNECTION_R;
+	public static String FactoMineRCA_2;
+	public static String FactoMineRCA_3;
+	public static String FactoMineRCA_4;
+	public static String FactoMineRCA_5;
+	public static String Factor_0;
+	public static String FileCopy_0;
+	public static String FileCopy_2;
+	public static String FileCopy_4;
+	public static String FilterManager_0;
+	public static String FilterManager_1;
+	public static String Filter_7;
+	public static String Focus_1;
+	public static String GroovyImportScriptRunner_0;
+	public static String GroovyImportScriptRunner_1;
+	public static String GroovyImportScriptRunner_3;
+	public static String INT_VECTOR_ADDED_TO_WORKSPACE;
+	public static String InternalView_3;
+	public static String InternalView_6;
+	public static String InternalView_7;
+	public static String LEXICON;
+	public static String LEXICON_ADDED;
+	public static String LIBBRARY_NOT_LOADED;
+	public static String LS_0;
+	public static String LS_1;
+	public static String LexicalTableImpl_0;
+	public static String LexicalTableImpl_1;
+	public static String LexicalTableImpl_10;
+	public static String LexicalTableImpl_12;
+	public static String LexicalTableImpl_13;
+	public static String LexicalTableImpl_3;
+	public static String LexicalTableImpl_5;
+	public static String LexicalTableImpl_8;
+	public static String LexicalTableImpl_9;
+	public static String LexicographicKeywordComparator_0;
+	public static String LexicographicLeftContextComparator_0;
+	public static String LexicographicRightContextComparator_0;
+	public static String Lexicon_0;
+	public static String Lexicon_3;
+	public static String Localizer_0;
+	public static String Localizer_1;
+	public static String Log_3;
+	public static String Log_5;
+	public static String Log_8;
+	public static String MATRIX_ADDED_TO_WORKSPACE;
+	public static String MainCorpus_0;
+	public static String MainCorpus_1;
+	public static String MainCorpus_2;
+	public static String MatrixImpl_0;
+	public static String MatrixImpl_1;
+	public static String MatrixImpl_10;
+	public static String MatrixImpl_11;
+	public static String MatrixImpl_13;
+	public static String MatrixImpl_14;
+	public static String MatrixImpl_19;
+	public static String MatrixImpl_2;
+	public static String MatrixImpl_20;
+	public static String MatrixImpl_21;
+	public static String MatrixImpl_22;
+	public static String MatrixImpl_23;
+	public static String MatrixImpl_28;
+	public static String MatrixImpl_29;
+	public static String MatrixImpl_4;
+	public static String MatrixImpl_5;
+	public static String MatrixImpl_6;
+	public static String MatrixImpl_67;
+	public static String MatrixImpl_7;
+	public static String MatrixImpl_73;
+	public static String MatrixImpl_79;
+	public static String MatrixImpl_88;
+	public static String MemCqiClient_0;
+	public static String MemCqiClient_1;
+	public static String MemCqiClient_10;
+	public static String MemCqiClient_11;
+	public static String MemCqiClient_2;
+	public static String MemCqiClient_3;
+	public static String MemCqiClient_5;
+	public static String MemCqiClient_7;
+	public static String MemCqiClient_9;
+	public static String MessageBox_0;
+	public static String MessageBox_1;
+	public static String MessageBox_2;
+	public static String NEW_PARTION;
+	public static String NOT_FOUND_IN_R;
+	public static String NetCqiClient_1;
+	public static String NetCqiClient_3;
+	public static String NetCqiClient_5;
+	public static String NetCqiClient_97;
+	public static String NetCqiServer_0;
+	public static String NetCqiServer_1;
+	public static String NullComparator_0;
+	public static String PACKAGE_LOADED;
+	public static String PARTITION_CREATED;
+	public static String PART_CREATED;
+	public static String Page_3;
+	public static String Pair_0;
+	public static String Pair_1;
+	public static String PartitionFocus_1;
+	public static String PartitionFocus_2;
+	public static String PartitionFocus_3;
+	public static String PartitionFocus_4;
+	public static String Partition_1;
+	public static String Partition_18;
+	public static String Partition_2;
+	public static String Partition_21;
+	public static String Partition_4;
+	public static String Partition_9;
+	public static String PatchCwbRegistry_0;
+	public static String PatchCwbRegistry_1;
+	public static String PatchCwbRegistry_13;
+	public static String PatchCwbRegistry_16;
+	public static String PatchCwbRegistry_2;
+	public static String PatchCwbRegistry_23;
+	public static String PatchCwbRegistry_27;
+	public static String PatchCwbRegistry_28;
+	public static String PatchCwbRegistry_29;
+	public static String PatchCwbRegistry_3;
+	public static String PatchCwbRegistry_34;
+	public static String PatchCwbRegistry_35;
+	public static String PatchCwbRegistry_4;
+	public static String PatchCwbRegistry_5;
+	public static String Project_0;
+	public static String Project_1;
+	public static String Project_10;
+	public static String Project_11;
+	public static String Project_12;
+	public static String Project_13;
+	public static String Project_14;
+	public static String Project_15;
+	public static String Project_16;
+	public static String Project_17;
+	public static String Project_18;
+	public static String Project_2;
+	public static String Project_25;
+	public static String Project_26;
+	public static String Project_27;
+	public static String Project_28;
+	public static String Project_3;
+	public static String Project_31;
+	public static String Project_4;
+	public static String Project_5;
+	public static String Project_6;
+	public static String Project_7;
+	public static String Project_8;
+	public static String Project_9;
+	public static String PropertiesReferenceComparator_0;
+	public static String QUERY;
+	public static String QUERYING_PARTITION;
+	public static String QuantitativeDataStructureImpl_0;
+	public static String QuantitativeDataStructureImpl_1;
+	public static String QuantitativeDataStructureImpl_2;
+	public static String QueryIndex_2;
+	public static String QueryIndex_3;
+	public static String QueryResult_0;
+	public static String READING_2D_INT_ARRAY_FROM_CQI_SERVER;
+	public static String READING_BOOLEAN_FROM_CQI_SERVER;
+	public static String READING_HEADER_FROM_CQI_SERVER;
+	public static String READING_INTEGER_FROM_CQI_SERVER;
+	public static String READING_INT_ARRAY_FROM_CQI_SERVER;
+	public static String READING_STRING_ARRAY_FROM_CQI_SERVER;
+	public static String READING_STRING_FROM_CQI_SERVER;
+	public static String READ_2D_INT_ARRAY_FROM_CQI_SERVER;
+	public static String READ_BOOLEAN_FROM_CQI_SERVER;
+	public static String READ_BYTE_FROM_CQI_SERVER;
+	public static String READ_HEADER_FROM_CQI_SERVER;
+	public static String READ_INTEGER_FROM_CQI_SERVER;
+	public static String READ_INT_ARRAY_FROM_CQI_SERVER;
+	public static String READ_STRING_ARRAY_FROM_CQI_SERVER;
+	public static String READ_STRING_FROM_CQI_SERVER;
+	public static String REQUESTED_OBJECT;
+	public static String RETURNING_CACHED_LEXICON;
+	public static String RETURN_FROM_QUERY;
+	public static String RException_0;
+	public static String RException_1;
+	public static String RException_2;
+	public static String RSERVE_ACTIVATED;
+	public static String RSERVE_PATH_NOT_SET_ERROR;
+	public static String RSERVE_PATH_SET_ERROR;
+	public static String RWorkspace_0;
+	public static String RWorkspace_1;
+	public static String RWorkspace_10;
+	public static String RWorkspace_11;
+	public static String RWorkspace_2;
+	public static String RWorkspace_21;
+	public static String RWorkspace_3;
+	public static String RWorkspace_4;
+	public static String RWorkspace_5;
+	public static String RWorkspace_6;
+	public static String RWorkspace_7;
+	public static String RWorkspace_8;
+	public static String R_EXPR;
+	public static String R_READ_CONSOLE;
+	public static String R_SAVE_HISTORY;
+	public static String R_SHOW_MESSAGE;
+	public static String R_WRITE_CONSOLE;
+	public static String ReferencePattern_3;
+	public static String Referencer_1;
+	public static String Referencer_2;
+	public static String RelativeFrequency_3;
+	public static String Progression_1;
+	public static String Progression_10;
+	public static String Progression_11;
+	public static String Progression_12;
+	public static String Progression_13;
+	public static String Progression_14;
+	public static String Progression_2;
+	public static String Progression_3;
+	public static String Progression_9;
+	public static String SERVER_STARTED;
+	public static String SERVER_STOPED;
+	public static String STARTING_SERVER;
+	public static String STOPING_SERVER;
+	public static String SUBCORPUS_CREATED;
+	public static String SUBCORPUS_LEXICON;
+	public static String SUBCORPUS_SIZE;
+	public static String Selection_0;
+	public static String Selection_1;
+	public static String Selection_2;
+	public static String Selection_26;
+	public static String Selection_3;
+	public static String Selection_4;
+	public static String Selection_5;
+	public static String Selection_6;
+	public static String Selection_7;
+	public static String Selection_8;
+	public static String Selection_9;
+	public static String Sh_4;
+	public static String SpecificitesResult_0;
+	public static String SpecificitesResult_1;
+	public static String SpecificitesResult_10;
+	public static String SpecificitesResult_2;
+	public static String SpecificitesResult_3;
+	public static String SpecificitesResult_4;
+	public static String SpecificitesResult_5;
+	public static String SpecificitesResult_6;
+	public static String SpecificitesResult_7;
+	public static String SpecificitesResult_8;
+	public static String Specificites_0;
+	public static String Specificites_1;
+	public static String Specificites_2;
+	public static String StartRserve_0;
+	public static String StartRserve_2;
+	public static String StartRserve_21;
+	public static String StartRserve_22;
+	public static String StartRserve_28;
+	public static String StartRserve_29;
+	public static String StartRserve_3;
+	public static String StartRserve_4;
+	public static String StartRserve_6;
+	public static String StreamGobbler_0;
+	public static String StreamGobbler_1;
+	public static String StreamGobbler_2;
+	public static String StreamGobbler_3;
+	public static String StructuralUnitProperty_0;
+	public static String Subcorpus_1;
+	public static String Subcorpus_2;
+	public static String Subcorpus_3;
+	public static String Summary_13;
+	public static String Summary_14;
+	public static String Summary_15;
+	public static String Summary_16;
+	public static String Summary_17;
+	public static String TSCmd_30;
+	public static String TSCmd_31;
+	public static String TSCorpusManager_0;
+	public static String TSCorpusManager_1;
+	public static String TSCorpus_0;
+	public static String TSResult_0;
+	public static String TSResult_13;
+	public static String TSResult_14;
+	public static String TSResult_18;
+	public static String TSResult_2;
+	public static String TSResult_7;
+	public static String TSResult_8;
+	public static String TigerXmlIndexing_2;
+	public static String TigerXmlIndexing_3;
+	public static String TigerXmlIndexing_6;
+	public static String TigerXmlIndexing_7;
+	public static String Toolbox_0;
+	public static String Toolbox_1;
+	public static String Toolbox_10;
+	public static String Toolbox_11;
+	public static String Toolbox_12;
+	public static String Toolbox_14;
+	public static String Toolbox_15;
+	public static String Toolbox_16;
+	public static String Toolbox_17;
+	public static String Toolbox_18;
+	public static String Toolbox_2;
+	public static String Toolbox_21;
+	public static String Toolbox_22;
+	public static String Toolbox_23;
+	public static String Toolbox_24;
+	public static String Toolbox_25;
+	public static String Toolbox_26;
+	public static String Toolbox_27;
+	public static String Toolbox_28;
+	public static String Toolbox_29;
+	public static String Toolbox_3;
+	public static String Toolbox_30;
+	public static String Toolbox_31;
+	public static String Toolbox_33;
+	public static String Toolbox_34;
+	public static String Toolbox_35;
+	public static String Toolbox_37;
+	public static String Toolbox_38;
+	public static String Toolbox_39;
+	public static String Toolbox_4;
+	public static String Toolbox_40;
+	public static String Toolbox_43;
+	public static String Toolbox_45;
+	public static String Toolbox_47;
+	public static String Toolbox_5;
+	public static String Toolbox_7;
+	public static String Toolbox_8;
+	public static String Toolbox_9;
+	public static String Toolbox_connected_to_corpus_sever;
+	public static String Toolbox_wait_failed;
+	public static String Toolbox_workspace_init;
+	public static String Toolbox_workspace_init_failed;
+	public static String Toolbox_wrong_port;
+	public static String TxmObject_0;
+	public static String TxmObject_1;
+	public static String TxmObject_2;
+	public static String TxmRenderer_1;
+	public static String TxmRenderer_5;
+	public static String TxmRenderer_6;
+	public static String TxmRenderer_7;
+	public static String VARIABLE_REMOVED;
+	public static String ValidateXml_0;
+	public static String ValidateXml_1;
+	public static String ValidateXml_2;
+	public static String ValidateXml_3;
+	public static String VectorizeArray_0;
+	public static String VectorizeArray_1;
+	public static String VectorizeArray_10;
+	public static String VectorizeArray_11;
+	public static String VectorizeArray_3;
+	public static String VectorizeArray_4;
+	public static String VectorizeArray_5;
+	public static String VectorizeArray_7;
+	public static String VectorizeArray_8;
+	public static String VectorizeArray_9;
+	public static String Index_0;
+	public static String Index_1;
+	public static String Index_7;
+	public static String WORKSPACE_PURGED;
+	public static String Workspace_0;
+	public static String Workspace_1;
+	public static String Workspace_10;
+	public static String Workspace_2;
+	public static String Workspace_26;
+	public static String Workspace_27;
+	public static String Workspace_28;
+	public static String Workspace_29;
+	public static String Workspace_3;
+	public static String Workspace_30;
+	public static String Workspace_31;
+	public static String Workspace_4;
+	public static String Workspace_5;
+	public static String Workspace_6;
+	public static String Workspace_7;
+	public static String Workspace_8;
+
+	static {
+		// initialize resource bundle
+		initializeMessages(BUNDLE_NAME, Messages.class);
+		//NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	private Messages() {
+	}
+	
+	/**
+	 * Initializes messages using UTF-8 encoding.
+	 * @param baseName
+	 * @param clazz
+	 */
+	public static void initializeMessages(final String baseName, final Class<?> clazz) {
+		//TODO: factorize this methods in a Utilities plugin
+		// initialize resource bundle
+		NLS.initializeMessages(baseName, clazz);
+
+		// reencode the fields
+		final Field[] fieldArray = clazz.getDeclaredFields();
+		final int len = fieldArray.length;
+		for(int i = 0; i < len; i++) {
+			final Field field = (Field) fieldArray[i];
+			if(field.getType() == java.lang.String.class) {
+				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"));
+				}
+				catch(Exception e) {
+				//	e.printStackTrace();
+				}
+			}
+		}
+	}
+}
+				

Property changes on: tmp/org.txm.utils/src/org/txm/Messages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/org/txm/functions/ProgressWatcher.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/functions/ProgressWatcher.java	(revision 0)
+++ tmp/org.txm.utils/src/org/txm/functions/ProgressWatcher.java	(revision 147)
@@ -0,0 +1,20 @@
+package org.txm.functions;
+
+/**
+ * Interface for RCP monitors
+ * 
+ * @author mdecorde
+ *
+ */
+public interface ProgressWatcher {
+	public void worked(int amount, String message);
+	public void setMessage(String message);
+	public boolean isCanceled();
+	public void done();
+	public void worked(int step);
+	public void acquireSemaphore();
+	public boolean tryAcquireSemaphore();
+	public void releaseSemaphore();
+	public void beginTask(String name, long l);
+	public void worked();
+}

Property changes on: tmp/org.txm.utils/src/org/txm/functions/ProgressWatcher.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/src/messages_fr.properties
===================================================================
--- tmp/org.txm.utils/src/messages_fr.properties	(revision 0)
+++ tmp/org.txm.utils/src/messages_fr.properties	(revision 147)
@@ -0,0 +1,542 @@
+﻿FAILED=Échec.
+DONE=Terminé.
+AbsoluteFrequency_1=Fréquence absolue
+AbstractCqiClient_2=Pas d'erreur à notifier.
+ArrayIndex_0=** Le tableau d'index ne peut pas être nul ou vide.
+ArrayIndex_1=** Un index commençant à 0 ne peut pas être inférieur à 0 ou supérieur au nombre d'éléments indexés.
+Base_0=Dossier binaire 
+Base_22=L'élément 'corpora' est absent de l'élément 'base'
+Base_3=\ n'existe pas ?
+Base_4=Le dossier parent 
+Base_5=\ n'existe pas ?
+Base_6=Erreur: linkGrp/link/@target mal formé : 
+BuildCwbEncodeArgs_0=Le fichier ''{0}'' est introuvable.
+CAH_0=Erreur durant l'export du résultat CAH : 
+CA_0=** La table lexicale n'a pas été trouvée dans l'espace de travail R.
+CA_16=** Impossible de charger la librairie 'ca'
+CA_2=** Erreur lors du calcul de l'analyse factorielle des correspondances : 
+CA_4=** Impossible d'extraire les valeurs propres 
+CHAR_VECTOR_ADDED_TO_WORKSPACE=Le vecteur "{1}" ({0,number,integer} valeurs "character") a été transmis au Moteur Statistique.
+CONNECTED_TO_STATS_MODULE= connecté.
+CONNECTING_CQI_CLIENT=Connexion au moteur de recherche avec les paramètres suivants : {0}:{1}@{2}{3}...
+CONNECTION_OK=Connexion au Moteur Statistique établie.
+CQI_CLIENT_CONNECTED=Connexion au moteur de recherche établie.
+CREATING_PART=Partie {0} créée à partir de la requête {1}
+CREATING_SUBCORPUS=Création du sous-corpus {1} à partir du corpus {0} et de la requête {2}
+CatalogManager_0=** Erreur du gestionnaire de catalogue : initialisation 
+CatalogManager_1=\ n'existe pas.
+Catalog_0=** Fichier de catalogue introuvable
+CompositeComparator_0=Composé : 
+Concordance_0=\ 
+Concordance_1=** Echec de récupération de la propriété 'text_id' des lignes 
+Concordance_12=** Echec de l'exportation de la concordance : 
+Concordance_13=Référence
+Concordance_14=ContexteGauche
+Concordance_15=Pivot
+Concordance_16=ContexteDroit
+Concordance_17=Référence
+Concordance_18=
+Concordance_19=Contexte
+Concordance_2=indéfini
+Concordance_3=\ résultats obtenus en\ 
+Concordance_4=Echec de la suppression du QueryResult de CQP: 
+Concordance_5=
+Concordance_6=Récupération 
+Concordance_7=\ résultats
+Concordance_8=Echec de la récupération des limites de texte : 
+Contrasts_0=Calcul: 
+Convert5To6_1=''{0}'' est introuvable.
+Convert5To6_10=le dossier 'registry' est manquant
+Convert5To6_11=le dossier 'html' est manquant
+Convert5To6_12=traitement en cours...
+Convert5To6_15=Reorganisation des fichiers de 
+Convert5To6_19=Lecture des informatins sur le corpus depuis le fichier import.xml : 
+Convert5To6_30=Remplissage du fichier 'import.xml' avec : 
+Convert5To6_46=traitement du fichier : 
+Convert5To6_6=Vérification du format...
+Convert5To6_7=le dossier 'txm' est manquant
+Convert5To6_8=le dossier 'html' est manquant
+Convert5To6_9=le dossier 'data' est manquant
+Cooccurrence_0=Coocurrence : 
+Cooccurrence_1=** Echec de la recherche de 'n' ou 'o' : 
+Cooccurrence_10=\ propriétés : 
+Cooccurrence_102=** Erreur : argument négatif dans la fonction 'factln'
+Cooccurrence_103=** Erreur : argument négatif dans la fonction 'rbicoln'
+Cooccurrence_105=Occ\tFréq\tCoFréq\tIndice\tDistMoy\tMode
+Cooccurrence_106=\n
+Cooccurrence_107=** Erreur : 
+Cooccurrence_11=Occ
+Cooccurrence_12=Fréq
+Cooccurrence_13=CoFréq
+Cooccurrence_14=Indice
+Cooccurrence_15=DistMoy
+Cooccurrence_16=Mode
+Cooccurrence_2=Cooc : 
+Cooccurrence_22=Erreur: ref_forms.length ! ref_freqs.length
+Cooccurrence_23=Erreur: pas de cooccurrents
+Cooccurrence_3=\ (
+Cooccurrence_4=\ F : 
+Cooccurrence_5=** Impossible de calculer des cooccurrences avec cette concordance
+Cooccurrence_6=Occ\tFréq\tCoFréq\tIndice\tDistMoy\tMode
+Cooccurrence_7=\ Occ :
+Cooccurrence_8=\ Indice:
+Cooccurrence_9=\ DistMoy:
+CorpusManager_0=** Le client CQi n'est pas initilialisé
+CorpusManager_1=** Erreur : Cette exception ne devrait pas se lever
+Corpus_12=** Echec de la restauration du sous-corpus
+Corpus_13=Corpus: getLocale: CQP est pas prêt à répondre : 
+Corpus_14=Attention: le corpus ne peut pas être chargé 
+Corpus_15= informations from workspace (selfElement  null)
+Corpus_19=** Echec de la restauration de la partition
+Corpus_2=Corpus : 
+Corpus_3=, Encodage : 
+Corpus_4=, Langue : 
+Corpus_5= Pas de valeur donnée
+Corpus_6=** Corpus : la référence au texte 
+Corpus_7=\ est manquante
+Corpus_8=\ dans
+CorrespondanceAnalysisEditorInput_21=Lignes
+CorrespondanceAnalysisEditorInput_22=Colonnes
+CorrespondanceAnalysisEditorInput_23=Q12
+CorrespondanceAnalysisEditorInput_24=Q13
+CorrespondanceAnalysisEditorInput_25=Q23
+CorrespondanceAnalysisEditorInput_26=Mass
+CorrespondanceAnalysisEditorInput_27=Dist
+CorrespondanceAnalysisEditorInput_29=Cont
+CorrespondanceAnalysisEditorInput_30=Cos\u00B2
+CorrespondanceAnalysisEditorInput_32=c1
+CorrespondanceAnalysisEditorInput_33=c2
+CorrespondanceAnalysisEditorInput_34=c3
+CorrespondanceAnalysisEditorInput_4=Facteur
+CorrespondanceAnalysisEditorInput_44=Colonnes
+CorrespondanceAnalysisEditorInput_46=Q12
+CorrespondanceAnalysisEditorInput_47=Q13
+CorrespondanceAnalysisEditorInput_48=Q23
+CorrespondanceAnalysisEditorInput_49=Mass
+CorrespondanceAnalysisEditorInput_5=Valeurs propres
+CorrespondanceAnalysisEditorInput_50=Dist
+CorrespondanceAnalysisEditorInput_52=Cont
+CorrespondanceAnalysisEditorInput_53=Cos\u00B2
+CorrespondanceAnalysisEditorInput_55=c1
+CorrespondanceAnalysisEditorInput_56=c2
+CorrespondanceAnalysisEditorInput_57=c3
+CqiClient_0=Récupération de la dernière erreur CQP
+CqiClient_1=Lecture de CQI CTRL LAST GENERAL ERROR
+CqiClient_3=** Echec de la lecture de la dernière erreur CQP
+CqiClient_32=Moteur de recherche lancé...
+CqiClient_33=** La connexion au moteur de recherche a échoué.
+CqiClient_34=Moteur de recherche lancé.
+CwbEncode_0=le dossier n'existe pas :
+CwbEncode_21=Le dossier "bin" n'existe pas : 
+CwbEncode_23=Le dossier "registry" n'existe pas : 
+CwbEncode_25=Le dossier "corpora" n'existe pas :
+CwbEncode_27=Traitement du corpus 
+CwbEncode_29=Le dossier "data" n'existe pas :
+CwbEncode_32=Patch le fichier registry {0} avec {1}
+CwbProcess_1=Démarrage avec la ligne de commande : 
+CwbProcess_3=Arrêt en cours du processus : 
+CwbProcess_4=Processus arrêté : 
+CwbProcess_5=** Echec de localisation de CQP : 
+DOUBLE_VECTOR_ADDED_TO_WORKSPACE=Le vecteur "{1}" ({0,number,integer} valeurs numériques "doubles") a été transmis au Moteur Statistique.
+DROP_PARTITION=Suppression de la partition {0}
+DROP_QUERYRESULT=Suppression du résultat de requête {0}
+DROP_SUBCORPUS=Suppression du sous-corpus {0}
+Diagnostic_0=<h3>Propriétés des structures\n
+Diagnostic_1=** Echec d'accès au corpus
+Diagnostic_10=Nom de la partition : 
+Diagnostic_11=\ structures
+Diagnostic_12=Nombre de parties :
+Diagnostic_13=Taille de la partition : 
+Diagnostic_14=Propriétés des unités lexicales (max {0} valeurs)
+Diagnostic_15=Numéro de la partie : 
+Diagnostic_16=Nombre d'unités de structure 
+Diagnostic_17=Nom des parties : 
+Diagnostic_18=Taille des parties : 
+Diagnostic_19=Propriétés des parties : 
+Diagnostic_2=** Erreur
+Diagnostic_20=Requêtes de parties : 
+Diagnostic_22=Propriétés des structures (max {0} valeurs)
+Diagnostic_23=\ valeurs)
+Diagnostic_26=Pas de propriété
+Diagnostic_3=Description du corpus 
+Diagnostic_4=\ propriétés
+Diagnostic_40=* Statistiques Générales\n
+Diagnostic_41=- T
+Diagnostic_43=- Propriétés de mot 
+Diagnostic_49=- S
+Diagnostic_5=Statistiques Générales
+Diagnostic_6=** Echec d'accès au corpus
+Diagnostic_7=Nombre de mots 
+Diagnostic_8=\ lexique
+Diagnostic_9=Nombre de propriétés de mot 
+END_SUBCORPUS_LEXICON=Lexique du sous-corpus {0} calculé en {1} ms
+END_SUBCORPUS_SIZE=Taille du sous-corpus {0} ({1}) calculée en {2} ms
+ERROR_EXTRACT_ITEM=** Erreur lors de l'extraction de la liste d'items : 	
+EVALUATED_EXPRESSION=L''expression ''{0}'' a été évaluée.
+ExecTimer_0=\ msec
+ExecTimer_1=\ sec
+ExecTimer_2=\ min et 
+ExecTimer_3=h, 
+FAILED_INIT_CONNECTION_R=** Echec de connexion au serveur statistique.
+FactoMineRCA_2=** Echec d'accès à la colonne des contributions : 
+FactoMineRCA_3=** Echec d'accès à la colonne des cos\u00B2 : 
+FactoMineRCA_4=** Echec d'accès à la ligne des contributions : 
+FactoMineRCA_5=** Echec d'accès à la ligne des cos\u00B2 : 
+Factor_0=** Non implémenté
+FileCopy_0=** Copie de fichiers : échec d'accès à la source : 
+FileCopy_2=** Copie de fichiers : droits d'accès insuffisants à la source : 
+FileCopy_4=** Copie de fichiers : échec de création du dossier : 
+FilterManager_0=** Erreur du gestionnaire de filtre : initialisation 
+FilterManager_1=\ n'existe pas.
+Filter_7=** Erreur de lecture
+Focus_1=** Le focus est vide ou nul.
+GroovyImportScriptRunner_0=Initialisation de GroovyImportScriptRunner
+GroovyImportScriptRunner_1=> début de l'exécution de 
+GroovyImportScriptRunner_3=> fin de l'exécution
+INT_VECTOR_ADDED_TO_WORKSPACE=Le vecteur "{1}" ({0,number,integer} valeurs numériques "entières") a été transmis au Moteur Statistique.
+InternalView_3=\ \ Information des structures :
+InternalView_6=InternalView: erreur lors de la récupération des valeurs des propriétés de structure
+InternalView_7=\ \ No d'informations sur les structures
+LEXICON=Lexique
+LEXICON_ADDED=Le lexique "{1}" ({0,number,integer} entrées) a été transmis au Moteur Statistique.
+LIBBRARY_NOT_LOADED=LA librairie {0} n''a pu être chargée : {1}
+LS_0=Erreur : 
+LS_1=\ n'est pas un dossier
+LexicalTableImpl_0=
+LexicalTableImpl_1=Construction de la table lexicale avec : 
+LexicalTableImpl_10=colonnes
+LexicalTableImpl_12=Erreur: les marges
+LexicalTableImpl_13=\ sont plus grandes que la taille des parties
+LexicalTableImpl_3=\ <sans partition> /
+LexicalTableImpl_5=pas assez de colonnes : minimum 2 (ici : 
+LexicalTableImpl_8=ligne
+LexicalTableImpl_9= n'a pas 
+LexicographicKeywordComparator_0=Pivot
+LexicographicLeftContextComparator_0=Contexte gauche
+LexicographicRightContextComparator_0=Contexte droit
+Lexicon_0=Le tableau des formes et des fréquences doivent avoir la même longueur.
+Lexicon_3=Lexique :
+Localizer_0=[Traduction manquante] 
+Localizer_1=messages
+Log_3=Copie des messages dans 
+Log_5=Ecriture des messages dans
+Log_8=\nstack:\n
+MATRIX_ADDED_TO_WORKSPACE=La matrice "{2}" ({0,number,integer} lignes et {1,number,integer} colonnes) a été transmise au Moteur Statistique.
+MainCorpus_0=\ n'est pas un identifiant de corpus CQP valide. Il doit être en majuscule.
+MainCorpus_1=\ dans
+MainCorpus_2=Suppression du dossier de corpus binaire : 
+MatrixImpl_0=Une variable ("
+MatrixImpl_1=") n'existe pas dans l'espace de travail R.
+MatrixImpl_10=Index de ligne (
+MatrixImpl_11=) trop grand (max 
+MatrixImpl_13=Index de colonne (
+MatrixImpl_14=) trop grand (max 
+MatrixImpl_19=L'objet R a une valeur nulle.
+MatrixImpl_2=dim(
+MatrixImpl_20=Type inconnu : 
+MatrixImpl_21=mode
+MatrixImpl_22=Index de ligne (
+MatrixImpl_23=) trop grand (max 
+MatrixImpl_28=Index de colonne (
+MatrixImpl_29=) trop grand (max 
+MatrixImpl_4=Les noms de lignes d'une matrice de contingence ne peuvent pas être nuls.
+MatrixImpl_5=La dimension du vecteur des noms de lignes doit être égale au nombre de lignes de la matrice.
+MatrixImpl_6=Les noms de colonnes d'une matrice de contingence ne peuvent pas être nuls.
+MatrixImpl_67=Matrice: impossible d'obtenir le nombre de lignes: 
+MatrixImpl_7=La dimension du vecteur des noms de colonnes doit être égale au nombre de colonnes de la matrice (
+MatrixImpl_73=MatrixImpl: Erreur: la taille des colonnes diffère de l'originale
+MatrixImpl_79=Impossible d'obtenir les noms de lignes
+MatrixImpl_88=Impossible de supprimer toutes les lignes
+MemCqiClient_0=Erreur interne CQi : 
+MemCqiClient_1=Erreur 
+MemCqiClient_10=Codes CQP inconnus : b1 
+MemCqiClient_11=Erreur de requête
+MemCqiClient_2=Attention 
+MemCqiClient_3=Erreur CQP inconnue : b1 
+MemCqiClient_5=Erreur CQP cqi inconnue : b1 
+MemCqiClient_7=Code CQP inconnu : b1 
+MemCqiClient_9= b2 
+MessageBox_0=Erreur
+MessageBox_1=Attention
+MessageBox_2=Information
+NEW_PARTION=Création d''une nouvelle partition du corpus {0} : {1}
+NOT_FOUND_IN_R=) n'a pas été trouvé dans l'espace de travail R.
+NetCqiClient_1=Dernière erreur Cqi : 
+NetCqiClient_3=Dernière erreur CQP
+NetCqiClient_5=Echec de la reconnexion auserveur : 
+NetCqiClient_97=client.dumpSubCorpus(subcorpus, NetCqiClient.CQI_CONST_FIELD_MATCH, 1, 2) : 
+NetCqiServer_0=** cqpserver stdout: 
+NetCqiServer_1=** cqpserver stderr: 
+NullComparator_0=Aucun
+PACKAGE_LOADED=Bibliothèque {0} chargée.
+PARTITION_CREATED=Partition {0} créée en {1} ms
+PART_CREATED=Partie {0} créée en {1} ms
+Page_3=** URL mal formée, fichier 
+Pair_0=\ devrait valoir faux
+Pair_1=\ devrait valoir vrai
+PartitionFocus_1=Le focus ne doit pas être vide ou nul.
+PartitionFocus_2=Le focus est vide ou nul
+PartitionFocus_3=Le focus de la partie {0} n''appartient pas à la partition {1}.
+PartitionFocus_4=** Nom de partition inconnu.
+Partition_1=\ dans
+Partition_18=Erreur lors de la récupération de la dernière erreur CQP : 
+Partition_2=\ dans
+Partition_21=Attention : la partition n'a pu être sauvegardée
+Partition_4=\ requête : 
+Partition_9=** Echec de la création de la partie :
+PatchCwbRegistry_0=Mise à jour du registre du corpus "{0}"
+PatchCwbRegistry_1='
+PatchCwbRegistry_13=Le fichier registry source n'existe pas
+PatchCwbRegistry_16=Le fichier 'registry' est introuvable
+PatchCwbRegistry_2=Mise à jour du corpus 
+PatchCwbRegistry_23= pour l'encodage 
+PatchCwbRegistry_27=dossier 'data'
+PatchCwbRegistry_28=Erreur lors de la reécriture du fichier 'registry'
+PatchCwbRegistry_29= n'a pu être trouvé dans 
+PatchCwbRegistry_3=** Le corpus cible n'existe pas
+PatchCwbRegistry_34=Mise à jour de la langue du corpus 
+PatchCwbRegistry_35= à 
+PatchCwbRegistry_4=Ajout au corpus 
+PatchCwbRegistry_5= de l'attribut d'alignement 
+Project_0=Utiliser le nom de dossier pour générer la déclaration de corpus
+Project_1=Le fichier de déclaration de corpus n'a pas été trouvé
+Project_10=Project.load: erreur dans le fichier XML du workspace: 
+Project_11=Erreur lors  de la récupération des 
+Project_12=Chargement du corpus {0}...
+Project_13=Ajout des textes : 
+Project_14=Erreur : le fichier 'import.xml' ne contient pas de version
+Project_15=Erreur : la version du fichier 'import.xml' est trop ancienne pour que le corpus soit chargé
+Project_16=Le nom de corpus a été changé de {0} à {1} 
+Project_17=Erreur : le corpus ne sera pas chargé
+Project_18=Paramètres : 
+Project_2=Attention, l''attribut ''name'' du corpus n''est pas défini dans la définition XML du fichier {0}.
+Project_25=Erreur : le dossier 'registry' n'existe pas
+Project_26=** Erreur : le dossier d'entrée n'est pas conforme au format de corpus binaire de TXM :  
+Project_27=Erreur lors de la reécriture du fichier 'registry' : 
+Project_28=TXM a besoin des dossiers suivants : 
+Project_3=Attention : deux corpus partagent le même identifiant (@name) dans leur fichier de configuration : {0}
+Project_31= et le fichier
+Project_4=Suppression des doublons de la liste des corpus:
+Project_5=Analyse du dossier...
+Project_6=Erreur lors du chargement du corpus avec : 
+Project_7=Erreur lors du chargement du corpus avec : 
+Project_8=Le fichier de paramétrage de corpus est introuvable (ou illisible). : {0}. Le corpus correspondant ne sera pas disponible. 
+Project_9= base
+PropertiesReferenceComparator_0=Références
+QUERY=Requête sur {0} : {1} <- {2}
+QUERYING_PARTITION=Requête sur la partition {0}
+QuantitativeDataStructureImpl_0=Aucun objet de nom "
+QuantitativeDataStructureImpl_1=" dans l'espace de travail
+QuantitativeDataStructureImpl_2=** Impossible de supprimer un objet qui n'existe pas.
+QueryIndex_2=Attention : requête dupliquée : 
+QueryIndex_3=Attention: échec de la requête:
+QueryResult_0=\ n'est pas un identifiant de sous-corpus CQP valide. Il doit être en majuscules suivies de caractères minuscules.
+READING_2D_INT_ARRAY_FROM_CQI_SERVER=Lecture d'un tableau d'entiers du serveur CQi
+READING_BOOLEAN_FROM_CQI_SERVER=Lecture d'un booléen du serveur CQi
+READING_HEADER_FROM_CQI_SERVER=Lecture d'une entête du serveur CQi
+READING_INTEGER_FROM_CQI_SERVER=Lecture d'un entier du serveur CQi
+READING_INT_ARRAY_FROM_CQI_SERVER=Lecture d'un tableau d'entiers du serveur CQi
+READING_STRING_ARRAY_FROM_CQI_SERVER=Lecture d'un tableau de chaines du serveur CQi
+READING_STRING_FROM_CQI_SERVER=Lecture d'une chaine du serveur CQi
+READ_2D_INT_ARRAY_FROM_CQI_SERVER=Tableau d''entiers reçu du serveur CQi : {0}
+READ_BOOLEAN_FROM_CQI_SERVER=Booléen reçu du serveur CQi : {0}
+READ_BYTE_FROM_CQI_SERVER=Octet reçu du serveur CQi : {0}
+READ_HEADER_FROM_CQI_SERVER=Entête reçue du serveur CQi : {0}
+READ_INTEGER_FROM_CQI_SERVER=Entier reçu du serveur CQi : {0}
+READ_INT_ARRAY_FROM_CQI_SERVER=Tableau d''entiers reçu du serveur CQi : {0}
+READ_STRING_ARRAY_FROM_CQI_SERVER=Tableau de chaines reçu du serveur CQi : {0}
+READ_STRING_FROM_CQI_SERVER=Chaine reçue du serveur CQi : {0}
+REQUESTED_OBJECT=L'objet demandé (
+RETURNING_CACHED_LEXICON=Recyclage du lexique {0}
+RETURN_FROM_QUERY={0} occurrences trouvées en {1} ms
+RException_0=** Erreur R : "
+RException_1="
+RException_2=\n lors de l'évaluation de :
+RSERVE_ACTIVATED=Moteur Statistique lancé 
+RSERVE_PATH_NOT_SET_ERROR=** Le chemin du programme du serveur statistique n'a pas été renseigné et sa recherche a échoué
+RSERVE_PATH_SET_ERROR=** Le chemin du programme du serveur statistique a été renseigné mais sa recherche a échoué
+RWorkspace_0=** Echec de connexion à l'espace de travail R 
+RWorkspace_1=** Erreur d'évaluation : 
+RWorkspace_10=Démarrage de R avec le chemin d'accès: 
+RWorkspace_11=Dernier 'safeeval'
+RWorkspace_2=tentative de connexion à R : 
+RWorkspace_21=Commande complète : 
+RWorkspace_3=Sauvegarde du graphique dans le fichier 
+RWorkspace_4=
+RWorkspace_5=
+RWorkspace_6=** Echec de l'initialisation du transfert : 
+RWorkspace_7=La matrice est vide
+RWorkspace_8=Impossible de démarrer RServe : 
+R_EXPR=Expression transmise au Moteur Statistique pour évaluation : {0}.
+R_READ_CONSOLE=Le Moteur Statistique attend une réponse de la console ({0}, {1}).
+R_SAVE_HISTORY=Le Moteur Statistique a sauvegardé un historique ({0}).
+R_SHOW_MESSAGE=Le Moteur Statistique a affiché ce message : {0}.
+R_WRITE_CONSOLE=Le Moteur Statistique a afiché ce message dans la console: {0}.
+ReferencePattern_3=Référence
+Referencer_1=Références
+Referencer_2=Références : l'export a échoué :  
+RelativeFrequency_3=Fréquence Relative %
+Progression_1=Erreur la taille du sous-corpus est 0
+Progression_10= dans
+Progression_11= (densité)
+Progression_12=structure : 
+Progression_13=, propriété : 
+Progression_14=, valeur 
+Progression_2=Attention, le corpus est discontinu
+Progression_3=Erreur la taille du sous-corpus est 0
+Progression_9=Progression de
+SERVER_STARTED=Moteur de recherche lancé 
+SERVER_STOPED=Moteur de recherche arrêté
+STARTING_SERVER=Lancement du moteur de recherche : {0}
+STOPING_SERVER=Arrêt du moteur de recherche
+SUBCORPUS_CREATED=Sous-corpus {0} créé en {1} ms
+SUBCORPUS_LEXICON=Calcul du lexique du sous-corpus {0}
+SUBCORPUS_SIZE=Calcul de la taille du sous-corpus {0}
+Selection_0=\ nombre de mots : 
+Selection_1=\ nombre de textes : 
+Selection_2=\ valeur : 
+Selection_26=Echec de la récupération des valeurs de structures de
+Selection_3=Propriété : 
+Selection_4=nombre de mots : 
+Selection_5=Métadonnées de textes : 
+Selection_6=Erreur : le corpus
+Selection_7=n'a pas de 'Base'
+Selection_8=Erreur : pas de structures trouvées pour la métadonnée d'identifiant : 
+Selection_9=Erreur lors de la récupération des metadonnées du corpus
+Sh_4=Le processus a terminé avec le code d'erreur : 
+SpecificitesResult_0=** Pas de tableau d'index de spécificité
+SpecificitesResult_1=** Le tableau d'index des spécificités ne correspond pas à une matrice
+SpecificitesResult_10=** Référence à une colonne inexistante.
+SpecificitesResult_2=** La table lexicale ne peut être nulle.
+SpecificitesResult_3=** Le nombre lignes prévu (
+SpecificitesResult_4=) et trouvé (
+SpecificitesResult_5=) ne correspondent pas
+SpecificitesResult_6=** Référence à une ligne inexistante
+SpecificitesResult_7=** Le nombre de colonnes données et le nombre de colonnes trouvées sont différents (
+SpecificitesResult_8=Unité
+Specificites_0=** Il faut au moins 2 parties pour calculer des spécificités
+Specificites_1=** Echec d'accès aux spécificités : 
+Specificites_2=\ spécificités calculées
+StartRserve_0=Démarrage de R avec la ligne de commande: 
+StartRserve_2=Chemin d'accès à R non fourni, tentative de résolution...
+StartRserve_21=** Echec du lancement de Rserve avec la commande : 
+StartRserve_22=Moteur statistique lancé
+StartRserve_28=** Echec du lancement de REG pour localiser le programme R
+StartRserve_29=\ Vous avez besoin du logiciel 'R' et de configurer ses chemins via la fenêtre de préférences 'Outils/Préférences'
+StartRserve_3=Rserve déja démarré sur le port 
+StartRserve_4=Essai du chemin de R : 'R'
+StartRserve_6=Essai du chemin de R : 
+StreamGobbler_0=Initialisation de l'enregistreur de journal
+StreamGobbler_1=démarrage de l'enregistreur de journal
+StreamGobbler_2=Arrêt de l'enregistreur de journal
+StreamGobbler_3=Interruption de l'enregistreur de journal
+StructuralUnitProperty_0=** Echec de lecture des valeurs de la propriété de structure 
+Subcorpus_1=\ dans
+Subcorpus_2=Attention : le sous-corpus n'a pu être sauvegardé.
+Subcorpus_3=\ n'est pas un identifiant de sous-corpus CQP valide. Il doit être en majuscules suivies de caractères minuscules.
+Summary_13=Erreur : text
+Summary_14= a pour valeur  'null'
+Summary_15=Erreur : edition a pour valeur 'null'
+Summary_16=Erreur : textids
+Summary_17= et wordids
+TSCmd_30=La requête était : 
+TSCmd_31= résultats trouvés
+TSCorpusManager_0=Erreur dans le dossier registre :
+TSCorpusManager_1=Erreur dans le dossier de configuration : 
+TSCorpus_0=Erreur : le corpus n'a pas les droits de lecture
+TSResult_0=Nombre de match
+TSResult_13=Erreur : le fichier tigerXML est introuvable : 
+TSResult_14=Erreur : la concordance n'a pu être enregistré dans le fichier XML
+TSResult_18=Début de l'injection
+TSResult_2=Nombre de sous graph
+TSResult_7=Erreur : la méthode d'export 
+TSResult_8=est introuvable
+TigerXmlIndexing_2=Erreur : n'existe pas
+TigerXmlIndexing_3=Erreur : n'a pas les droits de lecture
+TigerXmlIndexing_6=IO :
+TigerXmlIndexing_7=SAX : 
+Toolbox_0=** Le fichier 
+Toolbox_1=** Plateforme : les paramètres SERVER_PATH_TO_EXECUTABLE, SERVER_PATH_TO_REGISTRY et SERVER_PATH_TO_INIT_FILE doivent être renseignés dans le fichier '.properties' donné à la plateforme 
+Toolbox_10=** Pas d'espace de travail trouvé, création d'un nouvel espace de travail dans le dossier 
+Toolbox_11=Mis à jour avec : 
+Toolbox_12=Chargement de l'espace de travail à partir du fichier 
+Toolbox_14=** Echec de lecture de l'espace de travail à partir du fichier 
+Toolbox_15=** Erreur :
+Toolbox_16=\ n'existe pas.
+Toolbox_17=Fin du test d'attente de CQP
+Toolbox_18=** Echec du test d'attente de CQP : 
+Toolbox_2=** Erreur : valeur nulle pour la clé 
+Toolbox_21=\ R :
+Toolbox_22=\ Espace de travail : 
+Toolbox_23=Démarrage du moteur de statistiques par l'utilisateur : 
+Toolbox_24=\ distant : 
+Toolbox_25=\ port : 
+Toolbox_26=** Echec de connexion au moteur de recherche avec les paramètres suivants : 
+Toolbox_27=\ et  
+Toolbox_28=Erreur lors du démarage du mode mémoire de CQP
+Toolbox_29=** Échec de la connexion au moteur de recherche : 
+Toolbox_3=vrai
+Toolbox_30=- mauvais login/mot de passe/nom de machine/port :
+Toolbox_31=Echec de la commande 'taskkill /IM cqpserver.exe /F': 
+Toolbox_33=- ou le moteur de recherche n'a pas été lancé avec la ligne de commande : 
+Toolbox_34=Echec de la commande 'tskill cqpserver.exe': 
+Toolbox_35=** La connexion au moteur statistique a échoué
+Toolbox_37=kill `ps aux | grep cqpserver | awk '/-P 
+Toolbox_38=/ {print $2}'`
+Toolbox_39=Echec de l'exécution de '
+Toolbox_4=Avec les paramètres suivants :
+Toolbox_40=' :
+Toolbox_43=Echec de la commande 'taskkill /IM Rserve.exe /F': 
+Toolbox_45=Echec de la commande 'tskill Rserve.exe': 
+Toolbox_47=Echec de la commande 'killall -9 Rserve-bin.so': 
+Toolbox_5= debug: 
+Toolbox_7=Le chemin vers le programme R est null
+Toolbox_8=Clés non définies :
+Toolbox_9=Paramètres de la plateforme :
+Toolbox_connected_to_corpus_sever=connecté.
+Toolbox_wait_failed=** Echec de l'attente du processus interrompu
+Toolbox_workspace_init=Chargement des sous-corpus et des partitions...
+Toolbox_workspace_init_failed=** Echec de l'initialisation de l'espace de travail : 
+Toolbox_wrong_port=** La connexion au moteur de recherche a échoué : le port fourni en paramètre n'est pas un nombre entier
+TxmObject_0=** Echec de l'accès à l'objet parent
+TxmObject_1=TxmObject : delete : l'objet parent est nul
+TxmObject_2=Erreur de la sauvegarde de l'attribut
+TxmRenderer_1=TxmRenderer: erreur: pas de corpus trouvé
+TxmRenderer_5=ligne : 
+TxmRenderer_6=prop
+TxmRenderer_7=mdc :
+VARIABLE_REMOVED=La variable R "{0}" a été supprimée.
+ValidateXml_0=Validation XML : 
+ValidateXml_1=est un dossier
+ValidateXml_2=n'existe pas
+ValidateXml_3=n'a pas les bon droits de lecture
+VectorizeArray_0=** Rien à faire avec une matrice vide
+VectorizeArray_1=** Les tableaux internes doivent avoir une dimension supérieure à 0
+VectorizeArray_10=** Un tableau interne ne peut pas être nul
+VectorizeArray_11=** Les tableaux internes n'ont pas tous la même dimension.
+VectorizeArray_3=** Les tableaux internes n'ont pas tous la même dimension.
+VectorizeArray_4=** Rien à faire avec une matrice vide
+VectorizeArray_5=** Les tableaux internes doivent avoir une dimension supérieure à 0
+VectorizeArray_7=* Les tableaux internes n'ont pas tous la même dimension.
+VectorizeArray_8=** Rien à faire avec une matrice vide
+VectorizeArray_9=** Les tableaux internes doivent avoir une dimension supérieure à 0
+Index_0=** Erreur lors du calcul du lexique : \n
+Index_1=console : 
+Index_7=** Echec de l'exportation du Lexique : 
+WORKSPACE_PURGED=Moteur Statistique nettoyé.
+Workspace_0=, index 
+Workspace_1=\t\t\tÉdition : 
+Workspace_10=corpus :
+Workspace_2=** Echec du chargement de l'espace de travail :
+Workspace_26=\t\t\t\tPage : 
+Workspace_27=\ identifiant de mot 
+Workspace_28=\t\tScript : 
+Workspace_29=, type :  
+Workspace_3=Projet : 
+Workspace_30=\tCorpus : 
+Workspace_31=\t\tTexte : 
+Workspace_4=\tBase : 
+Workspace_5=\t\tTexte : 
+Workspace_6=** Echec de la création du fichier d'espace de travail : 
+Workspace_7=\ pages
+Workspace_8=Le fichier XML d'espace de travail est mal formé. Un nouveau doit être regénéré...

Property changes on: tmp/org.txm.utils/src/messages_fr.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/commons-cli-1.2.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.utils/commons-cli-1.2.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.utils/saxon9he.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.utils/saxon9he.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.utils/build.properties
===================================================================
--- tmp/org.txm.utils/build.properties	(revision 0)
+++ tmp/org.txm.utils/build.properties	(revision 147)
@@ -0,0 +1,11 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               saxon9he.jar,\
+               commons-cli-1.2.jar,\
+               commons-io-1.4.jar,\
+               commons-lang-2.4.jar,\
+               juniversalchardet-1.0.3.jar,\
+               ant-1.7.1.jar,\
+               textcat-1.0.1.jar

Property changes on: tmp/org.txm.utils/build.properties
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/commons-io-1.4.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.utils/commons-io-1.4.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.utils/.settings/org.eclipse.jdt.core.prefs
===================================================================
--- tmp/org.txm.utils/.settings/org.eclipse.jdt.core.prefs	(revision 0)
+++ tmp/org.txm.utils/.settings/org.eclipse.jdt.core.prefs	(revision 147)
@@ -0,0 +1,7 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6

Property changes on: tmp/org.txm.utils/.settings/org.eclipse.jdt.core.prefs
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/ant-1.7.1.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.utils/ant-1.7.1.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.utils/.classpath
===================================================================
--- tmp/org.txm.utils/.classpath	(revision 0)
+++ tmp/org.txm.utils/.classpath	(revision 147)
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry exported="true" kind="lib" path="saxon9he.jar"/>
+	<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>

Property changes on: tmp/org.txm.utils/.classpath
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.utils/META-INF/MANIFEST.MF	(revision 0)
+++ tmp/org.txm.utils/META-INF/MANIFEST.MF	(revision 147)
@@ -0,0 +1,117 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Utils
+Bundle-SymbolicName: org.txm.utils
+Bundle-Version: 1.0.0.qualifier
+Bundle-Activator: org.txm.utils.Activator
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.core.net;bundle-version="1.2.200"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
+Export-Package: javax.xml.xquery,
+ net.sf.saxon,
+ net.sf.saxon.dom,
+ net.sf.saxon.event,
+ net.sf.saxon.evpull,
+ net.sf.saxon.expr,
+ net.sf.saxon.expr.flwor,
+ net.sf.saxon.expr.instruct,
+ net.sf.saxon.expr.number,
+ net.sf.saxon.expr.parser,
+ net.sf.saxon.expr.sort,
+ net.sf.saxon.functions,
+ net.sf.saxon.functions.regex,
+ net.sf.saxon.java,
+ net.sf.saxon.lib,
+ net.sf.saxon.om,
+ net.sf.saxon.pattern,
+ net.sf.saxon.pull,
+ net.sf.saxon.query,
+ net.sf.saxon.s9api,
+ net.sf.saxon.serialize,
+ net.sf.saxon.serialize.charcode,
+ net.sf.saxon.serialize.codenorm,
+ net.sf.saxon.style,
+ net.sf.saxon.sxpath,
+ net.sf.saxon.trace,
+ net.sf.saxon.trans,
+ net.sf.saxon.tree,
+ net.sf.saxon.tree.iter,
+ net.sf.saxon.tree.linked,
+ net.sf.saxon.tree.tiny,
+ net.sf.saxon.tree.util,
+ net.sf.saxon.tree.wrapper,
+ net.sf.saxon.type,
+ net.sf.saxon.value,
+ net.sf.saxon.xpath,
+ net.sf.saxon.xqj,
+ org.apache.commons.cli,
+ org.apache.commons.io,
+ org.apache.commons.io.comparator,
+ org.apache.commons.io.filefilter,
+ org.apache.commons.io.input,
+ org.apache.commons.io.output,
+ org.apache.commons.lang,
+ org.apache.commons.lang.builder,
+ org.apache.commons.lang.enum,
+ org.apache.commons.lang.enums,
+ org.apache.commons.lang.exception,
+ org.apache.commons.lang.math,
+ org.apache.commons.lang.mutable,
+ org.apache.commons.lang.text,
+ org.apache.commons.lang.time,
+ org.apache.tools.ant,
+ org.apache.tools.ant.dispatch,
+ org.apache.tools.ant.filters,
+ org.apache.tools.ant.filters.util,
+ org.apache.tools.ant.helper,
+ org.apache.tools.ant.input,
+ org.apache.tools.ant.listener,
+ org.apache.tools.ant.loader,
+ org.apache.tools.ant.taskdefs,
+ org.apache.tools.ant.taskdefs.compilers,
+ org.apache.tools.ant.taskdefs.condition,
+ org.apache.tools.ant.taskdefs.cvslib,
+ org.apache.tools.ant.taskdefs.email,
+ org.apache.tools.ant.taskdefs.rmic,
+ org.apache.tools.ant.types,
+ org.apache.tools.ant.types.mappers,
+ org.apache.tools.ant.types.resources,
+ org.apache.tools.ant.types.resources.comparators,
+ org.apache.tools.ant.types.resources.selectors,
+ org.apache.tools.ant.types.selectors,
+ org.apache.tools.ant.types.selectors.modifiedselector,
+ org.apache.tools.ant.types.spi,
+ org.apache.tools.ant.util,
+ org.apache.tools.ant.util.facade,
+ org.apache.tools.ant.util.regexp,
+ org.apache.tools.bzip2,
+ org.apache.tools.mail,
+ org.apache.tools.tar,
+ org.apache.tools.zip,
+ org.mozilla.universalchardet,
+ org.mozilla.universalchardet.prober,
+ org.mozilla.universalchardet.prober.contextanalysis,
+ org.mozilla.universalchardet.prober.distributionanalysis,
+ org.mozilla.universalchardet.prober.sequence,
+ org.mozilla.universalchardet.prober.statemachine,
+ org.txm,
+ org.txm.functions,
+ org.txm.utils,
+ org.txm.utils.i18n,
+ org.txm.utils.logger,
+ org.txm.utils.processbuilder,
+ org.txm.utils.saxon,
+ org.txm.utils.tostring,
+ org.txm.utils.treetagger,
+ org.txm.utils.xml,
+ org.txm.utils.zip
+Bundle-ClassPath: .,
+ saxon9he.jar,
+ commons-cli-1.2.jar,
+ commons-io-1.4.jar,
+ commons-lang-2.4.jar,
+ juniversalchardet-1.0.3.jar,
+ ant-1.7.1.jar,
+ textcat-1.0.1.jar

Property changes on: tmp/org.txm.utils/META-INF/MANIFEST.MF
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.utils/textcat-1.0.1.jar
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.utils/textcat-1.0.1.jar
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

