Index: tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditor.java
===================================================================
--- tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditor.java	(revision 652)
+++ tmp/org.txm.chartsengine.rcp/src/org/txm/chartsengine/rcp/editors/ChartEditor.java	(revision 653)
@@ -208,7 +208,7 @@
 		if(this.getResult().getChartsEngine() != this.getSWTChartsComponentsProvider().getChartsEngine())	{
 			this.getEditorInput().setSWTChartsComponentsProvider(SWTChartsComponentsProvider.getComponentsProvider(this.getResult().getChartsEngine()));
 			this.getSWTChartsComponentsProvider().setChartsEngine(this.getResult().getChartsEngine());
-			System.err.println("ChartEditor.__updateEditorFromResult(): charts engine used to create the chart is not the current one. The SWT components provider has been changed to match it: " + this.getSWTChartsComponentsProvider() + ".");
+			System.err.println("ChartEditor.__updateEditorFromResult(): charts engine used to create the chart does not match the editor one. The SWT components provider has been changed to match it: " + this.getSWTChartsComponentsProvider() + ".");
 			
 			// recreating the chart composite
 			Composite parent = this.chartComposite.getParent();
Index: tmp/org.txm.referencer.rcp/plugin.xml
===================================================================
--- tmp/org.txm.referencer.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.referencer.rcp/plugin.xml	(revision 653)
@@ -29,7 +29,7 @@
                </menuContribution>
                <menuContribution
                      allPopups="false"
-                     locationURI="toolbar:org.txm.rcp.toolbartools">
+                     locationURI="toolbar:org.txm.rcp.toolbartools?after=org.txm.progression.rcp.handlers.ComputeProgression">
                   <command
                         commandId="org.txm.referencer.rcp.handlers.ComputeReferencer"
                         icon="icons/functions/referencer.png"
Index: tmp/org.txm.specificities.rcp/plugin.xml
===================================================================
--- tmp/org.txm.specificities.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.specificities.rcp/plugin.xml	(revision 653)
@@ -84,7 +84,7 @@
       </menuContribution>
       <menuContribution
             allPopups="false"
-            locationURI="toolbar:org.txm.rcp.toolbartools">
+            locationURI="toolbar:org.txm.rcp.toolbartools?after=org.txm.referencer.rcp.handlers.ComputeReferencer">
          <command
                commandId="org.txm.specificities.rcp.handlers.ComputeSpecifities"
                icon="icons/functions/specificities.png"
Index: tmp/org.txm.groovy.core/src/groovy/org/txm/test/CQPBenchmark.groovy
===================================================================
--- tmp/org.txm.groovy.core/src/groovy/org/txm/test/CQPBenchmark.groovy	(revision 652)
+++ tmp/org.txm.groovy.core/src/groovy/org/txm/test/CQPBenchmark.groovy	(revision 653)
@@ -104,7 +104,7 @@
 	// INFORMATIONS
 	print " INFO"
 	time = System.currentTimeMillis();
-	Diagnostic diag = new Diagnostic(corpus, 20)
+	Information diag = new Information(corpus, 20)
 	diag.stepGeneralInfos();
 	diag.stepLexicalProperties();
 	diag.stepStructuralUnits();
Index: tmp/org.txm.groovy.core/src/groovy/org/txm/test/Informations.groovy
===================================================================
--- tmp/org.txm.groovy.core/src/groovy/org/txm/test/Informations.groovy	(revision 652)
+++ tmp/org.txm.groovy.core/src/groovy/org/txm/test/Informations.groovy	(revision 653)
@@ -36,7 +36,7 @@
 // imports des fonctions que l'on va utiliser
 import org.txm.Toolbox
 import org.txm.searchengine.cqp.corpus.*
-import org.txm.functions.diagnostic.Diagnostic
+import org.txm.functions.diagnostic.Information
 import org.txm.objects.*
 
 // TODO: Auto-generated Javadoc
@@ -54,7 +54,7 @@
 
 try
 {
-	def d = new Diagnostic(corpus, 20)
+	def d = new Information(corpus, 20)
 	d.process();
 	println d.htmldump()
 } catch(Exception e){	e.printStackTrace() }
Index: tmp/org.txm.groovy.core/src/groovy/org/txm/test/ReleaseFunctionsValidation.groovy
===================================================================
--- tmp/org.txm.groovy.core/src/groovy/org/txm/test/ReleaseFunctionsValidation.groovy	(revision 652)
+++ tmp/org.txm.groovy.core/src/groovy/org/txm/test/ReleaseFunctionsValidation.groovy	(revision 653)
@@ -6,7 +6,7 @@
 //import org.txm.concordance.core.functions.*
 //import org.txm.concordance.core.functions.comparators.*
 //import org.txm.functions.cooccurrences.Cooccurrence
-//import org.txm.functions.diagnostic.*
+//import org.txm.searchengine.cqp.core.functions.information.*
 //import org.txm.functions.index.*
 //import org.txm.functions.referencer.Referencer
 //import org.txm.functions.specificities.*
@@ -48,7 +48,7 @@
 //
 //// INFORMATIONS
 //time = System.currentTimeMillis();
-//Diagnostic diag = new Diagnostic(discours, 20)
+//Information diag = new Information(discours, 20)
 //diag.stepGeneralInfos();
 //diag.stepLexicalProperties();
 //diag.stepStructuralUnits();
Index: tmp/org.txm.partition.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.partition.rcp/META-INF/MANIFEST.MF	(revision 652)
+++ tmp/org.txm.partition.rcp/META-INF/MANIFEST.MF	(revision 653)
@@ -15,9 +15,9 @@
  org.txm.rcp;bundle-version="0.7.8",
  org.eclipse.core.expressions;bundle-version="3.4.600"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
-Bundle-ActivationPolicy: lazy
 Bundle-Vendor: Textometrie.org
 Export-Package: org.txm.partition.rcp.adapters,
  org.txm.partition.rcp.handlers,
  org.txm.partition.rcp.messages,
  org.txm.partition.rcp.preferences
+Bundle-ActivationPolicy: lazy
Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/Messages.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/Messages.java	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/Messages.java	(revision 653)
@@ -1,24 +0,0 @@
-package org.txm.searchengine.cqp.rcp;
-
-import org.txm.utils.messages.Utf8NLS;
-
-public class Messages extends Utf8NLS {
-	
-	public static String CQPPreferenceInitializer_0;
-	public static String CQPPreferenceInitializer_1;
-	public static String CQPPreferencePage_0;
-	public static String CQPPreferencePage_1;
-	public static String CQPPreferencePage_10;
-	public static String CQPPreferencePage_11;
-	public static String CQPPreferencePage_12;
-	public static String CQPPreferencePage_13;
-	public static String CQPPreferencePage_14;
-	public static String CQPPreferencePage_15;
-	public static String CQPPreferencePage_16;
-	public static String CQPPreferencePage_17;
-	public static String CQPPreferencePage_18;
-	
-	static {
-		Utf8NLS.initializeMessages(Messages.class);
-	}
-}
Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages_ru.properties
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages_ru.properties	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages_ru.properties	(revision 653)
@@ -1,299 +0,0 @@
-CGU_TITLE=Licence d'utilisation
-CGU_MESSAGE=<p>TXM est diffusé sous licence GNU GPL 2 &lt;<a href="https://www.gnu.org/licenses/gpl-2.0.fr.html">https://www.gnu.org/licenses/gpl-2.0.fr.html</a>
-CGU_CHECKMESSAGE=J'accepte la licence et je m'engage à citer TXM dans mes travaux de recherche \n(voir la section Citation de la page <http://textometrie.ens-lyon.fr/spip.php?rubrique61>)
-
-About_Menu_Label = О платформе TXM...
-
-AdapterFactory_0 = ** Предупреждение: корпус {0} поврежден. Некоторые команды могут быть недоступны или функционировать некорркетно.
-
-ERROR          = N/A_Error: 
-
-AssistedQueryWidget_0 = Ouvrir l'assistant de requêtes
-
-BackToText_0 = Показать в полнотекстовом режиме
-
-
-CQPPreferenceInitializer_0 = localhost
-CQPPreferenceInitializer_1 = anonymous
-
-CQPPreferencePage_0  = N/A_CQPlib path
-CQPPreferencePage_1  = Использовать сетевой протокол
-CQPPreferencePage_10 = Удаленный &сервер CWB
-CQPPreferencePage_11 = Удаленный сервер: &имя машины
-CQPPreferencePage_12 = Удаленный сервер: &номер порта
-CQPPreferencePage_13 = Удаленный сервер: &логин
-CQPPreferencePage_14 = Удаленный сервер: &пароль
-CQPPreferencePage_15 = Путь к исполняемому &файлу 'cqpserver'
-CQPPreferencePage_16 = Путь к папке &Регистр сервера CWB
-CQPPreferencePage_17 = Путь к файлу инициализации сервера CWB
-CQPPreferencePage_18 = Дополнительные опции сервера CWB: 
-
-Cannot_ask_simple_when_advance = Невозможно отобразить закладку простых опций, когда пользователь выбрал отображение дополнительных опций
-
-Commands_0 = Ошибка: невозможно инициализировать команды
-
-ComplexSortSelector_0 = Ключи для сортировки:
-ComplexSortSelector_1 = Мульти-сортировка
-ComplexSortSelector_2 = Сортировка
-ComplexSortSelector_5 = ** Ошибка при сортировке: {0}
-ComplexSortSelector_6 = по умолчанию
-
-ComplexSort_0         = Открытие диалогового окна сложной сортировки
-ComplexSort_1         = &Сложная сортировка
-ComplexSort_10        = Недопустимый блок сравнения
-ComplexSort_11        = Необходимо выбрать не менее двух блоков сравнения
-ComplexSort_12        = Добавить в выделенному
-ComplexSort_14        = Удалить из выделенного
-ComplexSort_16        = Поднять выделение на один уровень
-ComplexSort_18        = Опустить выделение на один уровень
-ComplexSort_2         = Задать и использовать сложную сортировку
-ComplexSort_3         = Выберите сложную сортировку
-ComplexSort_4         = &Новый
-ComplexSort_5         = Создать новый метод сортировки
-ComplexSort_6         = Имя: 
-ComplexSort_9         = Поле Имя обязательно.
-
-ComplexSubcorpusPanel_0  = Выделить
-ComplexSubcorpusPanel_1  = Все критерии
-ComplexSubcorpusPanel_16 = не содержит
-ComplexSubcorpusPanel_2  = отдельные критерии
-ComplexSubcorpusPanel_4  = Запрос 
-ComplexSubcorpusPanel_5  = Обновить
-
-ONE_RESULT           = Готово: один результат
-
-ConvertCorpus_0 = N/A_Corpus conversion failed.
-
-CorpusPage_0  = Издания
-CorpusPage_1  = Добавить издание
-CorpusPage_10 = Свойства слова
-CorpusPage_11 = Добавить определение свойства
-CorpusPage_12 = Добавить опредление свойства структуры
-CorpusPage_13 = Удалить определение свойства
-CorpusPage_14 = Подкорпуса и распределения по умолчанию
-CorpusPage_15 = Добавить подкорпус
-CorpusPage_16 = N/A_caract�res de ponctuations s�parateurs
-CorpusPage_17 = Удалить подкорпус
-CorpusPage_18 = Добавить распределение
-CorpusPage_19 = N/A_caract�res d'ellision
-CorpusPage_2  = Удалить издание
-CorpusPage_20 = Удалить распределение
-CorpusPage_21 = Добавить запрос
-CorpusPage_22 = N/A_caract�res de fin de phrase
-CorpusPage_23 = Удалить запрос
-CorpusPage_24 = Свойства структуры
-CorpusPage_25 = Добавить определение свойства структуры
-CorpusPage_26 = N/A_Annotate the corpus
-CorpusPage_27 = Удалить определение свойства структуры
-CorpusPage_28 = Использовать только эти тесты при словарной сегментации
-CorpusPage_29 = Добавить параметр
-CorpusPage_3  = Шрифт
-CorpusPage_31 = Удалить параметр
-CorpusPage_32 = Добавить тест
-CorpusPage_33 = Добавить параметр
-CorpusPage_34 = Удалить тест
-CorpusPage_35 = 1.\	Нажмите на значок 
-CorpusPage_36 = 'папка', чтобы 
-CorpusPage_37 = выбрать папку с исходными материалами.
-CorpusPage_38 = 2.\	Вы можете изменить параметры на следующих этапах.
-CorpusPage_39 = 3.\	Вы можете 
-CorpusPage_4  = Добавить параметр
-CorpusPage_40 = сохранить параметры импорта,
-CorpusPage_41 = \ нажав на значок дискеты: 
-CorpusPage_42 = 4.\	Чтобы
-CorpusPage_43 = начать импортирование,
-CorpusPage_44 = \ нажмите на этот значок: 
-CorpusPage_45 = ПИ
-CorpusPage_46 = Папка с исходными материалами не содержала файл 'import.xml'. Создан новый.
-CorpusPage_47 = Ошибка при создании файла 'import.xml' 
-CorpusPage_48 = Загрузка параметров импорта из файла: 
-CorpusPage_49 = N/A_Default
-CorpusPage_5  = N/A_caract�res blancs s�parateurs
-CorpusPage_50 = Параметры модуля: 
-CorpusPage_51 = Только эти тесты
-CorpusPage_52 = Сохранение параметров импорта...
-CorpusPage_53 = Имя корпуса обязательно
-CorpusPage_54 = Имя корпуса должно содержать хотя бы одну букву
-CorpusPage_55 = Только эти тесты
-CorpusPage_6  = Удалить параметр
-CorpusPage_60 = N/A_OK
-CorpusPage_61 = Edit XSL stylesheet...
-CorpusPage_65 = N/A_Cannot save import configuration. No source folder selected.
-CorpusPage_66 = N/A_Cannot start import configuration. No source folder selected.
-CorpusPage_7  = Общая информация
-CorpusPage_8  = Имя корпуса*
-CorpusPage_9  = Описание - HTML
-
-CreatePartitionDialog_0  = Создать Распределение
-CreatePartitionDialog_1  = Простое
-CreatePartitionDialog_16 = Запросы не должны быть пустыми
-CreatePartitionDialog_2  = &Структура: 
-CreatePartitionDialog_3  = С подсказкой
-CreatePartitionDialog_4  = С&войство: 
-CreatePartitionDialog_5  = Продвинутое
-CreatePartitionDialog_6  = &Имя: 
-CreatePartitionDialog_7  = &Часть 
-CreatePartitionDialog_8  = Не задана ни одна часть
-CreatePartitionDialog_9  = Имя распределения не вводилось. Автоматическое имя: {0}
-
-CreatePartition_0        = Создание распределения по {0}
-CreatePartition_2        = ** Ошибка: распределение не создано
-CreatePartition_5        = Готово: {0} пунктов на {1} употреблений
-CreatePartition_55       = N/A_Done: {0} items for {1} occurrences
-CreatePartition_6        = Готово: {0} частей
-
-CreateSubCorpus_0      = ** Ошибка: подкорпус не был создан
-CreateSubCorpus_2      = N/A_Failed to get last CQP error: 
-CreateSubCorpus_begin  = Новый &Подкорпус
-CreateSubCorpus_create = Создать новый подокорпус для {0}
-
-CreateSubcorpusDialog_0  = Создать подкорпус
-CreateSubcorpusDialog_10 = &Запрос: 
-CreateSubcorpusDialog_11 = Некорректное имя
-CreateSubcorpusDialog_13 = Некорректный запрос
-CreateSubcorpusDialog_14 = Поле Запрос не должно быть пустым.
-CreateSubcorpusDialog_6  = Зна&чение: 
-CreateSubcorpusDialog_8  = Имя подкорпуса создано автоматически.
-
-CreateSubcorpus_7        = Составление подкорпуса для {0}, структура {1}, свойство {2} : {3}
-CreateSubcorpus_8        = Готово : {0} образован 
-CreateSubcorpus_9        = Составление подкорпуса для {0} по запросу <{1}>
-
-DONE = Готово: {0}
-
-DefineReferencePattern_0 = Шаблон ссылок для отображения
-DefineReferencePattern_1 = Шаблон ссылок для &отображения
-DefineReferencePattern_2 = Шаблон ссылок для отображения
-DefineReferencePattern_3 = Шаблон ссылок для &сортировки
-DefineReferencePattern_4 = Шаблон ссылок для сортировки
-DefineReferencePattern_5 = Шаблон ссылок для сортировки
-
-DeleteInCorporaView_1 = ** Ошибка при удалении подкорпуса {0}
-DeleteInCorporaView_2 = ** Ошибка при удалении распределения {0}
-
-
-DiagnosticPreferencePage_1 = Описание
-DiagnosticPreferencePage_2 = Число отображаемых значений свойства
-DiagnosticPreferencePage_3 = Сортировать части по размеру
-
-Diagnostique_0  = Структурные единицы {0}
-Diagnostique_1  = Информация о {0} уже сформирована. Хотите ли Вы ее обновить?
-Diagnostique_10 = Получение информации о структурных единицах
-Diagnostique_11 = Открытие окна
-Diagnostique_2  = ** Ошибка при чтении файла *informations* 
-Diagnostique_7  = Создание окна с информацией
-Diagnostique_8  = Получение общей информации
-Diagnostique_9  = Получение данных о словарных единицах
-
-EmpantWidget_0 = Контекст: 
-EmpantWidget_1 = форма
-EmpantWidget_2 = структура
-EmpantWidget_3 = от -
-EmpantWidget_4 = до -
-EmpantWidget_5 = и от
-EmpantWidget_6 = до
-EmpantWidget_7 = вклюая структуру, содержащую мотив
-EmpantWidget_8 = Активный левый контекст
-EmpantWidget_9 = Активный правый контекст
-
-Error_creating_partition      = ** Ошибка во время создания распределения: {0}
-
-ExportCorpus_0 = ** Не удалось экспортировать корпу {0}
-ExportCorpus_3 = Экпортирование 
-ExportCorpus_4 = Готово, бинарный файл - {0} 
-
-InternalCorpusView_0 = ** Ошибка при подготовке информации о корпусе
-InternalCorpusView_1 = Перезагрузить
-InternalCorpusView_2 = ** Внутренняя ошибка: getText {0}
-
-Invalid_analysis_property = Некорректное свойство
-
-LastCQPError = Последняя ошибка CQP: 
-
-PartitionComposer_0  = Структура: 
-PartitionComposer_11 = Удалить
-PartitionComposer_2  = Выбрать значения для назначения: 
-PartitionComposer_3  = Новая часть
-PartitionComposer_5  = Часть
-PartitionComposer_6  = Удалить все части
-PartitionComposer_8  = Заголовок: 
-PartitionComposer_9  = Назначить
-
-Preferences_Menu_Label = Опции
-
-PropertiesSelector_0 = Не удается загрузить свойства корпуса {0} ({1})
-PropertiesSelector_1 = Свойства: 
-PropertiesSelector_2 = Править
-
-PropertySelector_0 = Выбрать свойство
-
-PurgeCorpora_0  = Осторожно! Эта команда приведет к удалению всех выделенных корпусов. Продолжить?
-PurgeCorpora_1  = Удаляемые корпуса 
-PurgeCorpora_10 = Создание нового рабочего пространства
-PurgeCorpora_12 = Перезагрузка платформы
-PurgeCorpora_13 = ** Ошибка: не удалось найти рабочее пространство: 
-PurgeCorpora_2  = ** Внимание! не были удалены корпуса: 
-PurgeCorpora_3  = Осторожно! Эта команда приведет к удалению всех корпусов. Продолжить?
-PurgeCorpora_4  = ** Ошибка: переменная окружения 'TXMHOME' не задана (ее значение по умолчанию -  '$HOME/TXM'). Работа прекращена.
-PurgeCorpora_5  = Удаление всех корпусов
-PurgeCorpora_7  = ** Не удалось удалить корпуса
-PurgeCorpora_9  = ** Не удалось удалить регистр
-
-QueriesView_1  = Экспортировать всё
-QueriesView_10 = ошибка: 
-QueriesView_5  = Запросы:\n
-
-QueryAssistDialog_0  = Мастер Запросов
-QueryAssistDialog_1  = Дополнительное слово
-QueryAssistDialog_10 = совпадает с
-QueryAssistDialog_11 = начинается с
-QueryAssistDialog_12 = заканчивается на
-QueryAssistDialog_13 = содержит
-QueryAssistDialog_2  = Я ищу: 
-QueryAssistDialog_3  = слово
-QueryAssistDialog_32 = за ним 
-QueryAssistDialog_33 = с интервалом не менее 0 слов
-QueryAssistDialog_34 = с интервалом не менее 1 слова
-QueryAssistDialog_8  = - Слово №
-
-
-RefreshingCorporaView = Обновление вида корпусов...
-
-
-
-SetContextSize_1 = Задать размер &контекстов
-SetContextSize_2 = Задать размер контекстов
-SetContextSize_3 = Размер левого контекста
-SetContextSize_4 = Размер правого контекста
-
-SetEncoding_0 = Изменить кодировку
-SetEncoding_1 = Изменить кодировку.\n\n\	Используемая кодировка: 
-SetEncoding_2 = \n\	Кодировка по умолчанию:  
-
-SetLineNumber_0 = Количество строк на странице
-SetLineNumber_1 = № строки
-
-SetSortProperty_1 = Задать свойство &Сортировки
-SetSortProperty_2 = Задать свойство сортировки
-SetSortProperty_3 = Сортировка свойств 
-
-ShowSelected_4 = Править свойство 'LANG'
-
-SortPropertySelection_0 = Сортировка свойств 
-
-Structure_field_not_empty = Поле Структура не должно быть пустым.
-
-Submit_0 = Сохранить
-
-TXMCqpServerWatcher_0 = Поисковая машина остановлена
-TXMCqpServerWatcher_1 = Пожалуйста, подождите, пока поисковая машина перезагружается...
-
-TXMRServeWatcher_0 = Статистическая машина остановлена
-TXMRServeWatcher_1 = Пожалуйста, подождите, пока статистическая машина перезагружается...
-TXMRServeWatcher_2 = Ok
-TXMRServeWatcher_3 = Перезагрузка вида корпусов...
-TXMRServeWatcher_4 = Пожалуйста, подождите...
-
-ViewPropertySelectionDialog_0 = Отображение свойств
-
-ViewPropertySelection_0       = Отображение свойств
\ No newline at end of file
Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages_fr.properties
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages_fr.properties	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages_fr.properties	(revision 653)
@@ -1,306 +0,0 @@
-﻿#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
-#Eclipse modern messages class
-#Mon Feb 10 10:26:04 CET 2014
-
-OK=OK
-REFRESH=Rafraîchir
-CGU_TITLE=Licence d'utilisation
-CGU_MESSAGE=<p>TXM est diffusé sous licence GNU GPL 2 &lt;<a href="https://www.gnu.org/licenses/gpl-2.0.fr.html">https://www.gnu.org/licenses/gpl-2.0.fr.html</a>
-CGU_CHECKMESSAGE=J'accepte la licence et je m'engage à citer TXM dans mes travaux de recherche \n(voir la section Citation de la page <http://textometrie.ens-lyon.fr/spip.php?rubrique61>)
-
-About_Menu_Label = À propos de TXM...
-
-AdapterFactory_0 = ** Avertissement : le corpus {0} est corrompu. Certaines commandes ne fonctionneront pas correctement.
-
-
-ERROR                           = Erreur: 
-
-AssistedQueryWidget_0 = Ouvrir l'assistant de requêtes
-
-CQPPreferenceInitializer_0 = localhost
-CQPPreferenceInitializer_1 = anonymous
-
-CQPPreferencePage_0  = Chemin vers CQPlib
-CQPPreferencePage_1  = Utiliser le protocole réseau
-CQPPreferencePage_10 = &Serveur CWB distant
-CQPPreferencePage_11 = Serveur distant : nom de machine
-CQPPreferencePage_12 = Serveur distant : numéro de &port
-CQPPreferencePage_13 = Serveur distant : &login
-CQPPreferencePage_14 = Serveur distant : &mot de passe
-CQPPreferencePage_15 = Chemin vers le fichier &exécutable 'cqpserver'
-CQPPreferencePage_16 = Chemin vers le dossier de &Registre du serveur CWB
-CQPPreferencePage_17 = Chemin vers le fichier d'initialisation du serveur CWB
-CQPPreferencePage_18 = Options additionnelles pour le serveur CWB : 
-
-Cannot_ask_simple_when_advance = Impossible d'afficher l'onglet des options simples quand l'utilisateur a sélectionné l'affichage des options avancées
-
-ComplexSortSelector_0 = Clés de tri : 
-ComplexSortSelector_1 = Tri multiple : 
-ComplexSortSelector_2 = Tri
-ComplexSortSelector_5 = ** Erreur pendant le tri : {0}
-ComplexSortSelector_6 = par défaut
-
-ComplexSort_0         = Ouverture de la boite de dialogue du tri composé
-ComplexSort_1         = &Tri composé
-ComplexSort_10        = Comparateur invalide
-ComplexSort_11        = Il faut sélectionner au moins deux comparateurs
-ComplexSort_12        = Ajouter à la sélection
-ComplexSort_14        = Retirer de la sélection
-ComplexSort_16        = Monter d'un cran la sélection
-ComplexSort_18        = Descendre d'un cran la sélection
-ComplexSort_2         = Définir et utiliser un tri composé
-ComplexSort_3         = Sélectionnez un tri composé
-ComplexSort_4         = &Nouveau
-ComplexSort_5         = Créer une nouvelle méthode de tri
-ComplexSort_6         = Nom : 
-ComplexSort_9         = Le champ Nom est obligatoire.
-
-ComplexSubcorpusPanel_0  = Sélectionner
-ComplexSubcorpusPanel_1  = Tous les critères
-ComplexSubcorpusPanel_16 = ne contient pas
-ComplexSubcorpusPanel_2  = certains critères
-ComplexSubcorpusPanel_4  = Requête 
-ComplexSubcorpusPanel_5  = Rafraîchir
-
-ComputeCoocFromLines_0 = Calcul des cooccurrents en cours
-ComputeCoocFromLines_1 = Ouverture du tableau de cooccurrents
-
-
-ONE_RESULT           = Terminé : un résultat.
-
-ConvertCorpus_0 = La conversion du corpus a échoué.
-
-
-CreatePartitionDialog_0  = Créer une Partition
-CreatePartitionDialog_1  = Simple
-CreatePartitionDialog_16 = Les requêtes ne doivent pas être vides
-CreatePartitionDialog_2  = &Structure : 
-CreatePartitionDialog_3  = Assisté
-CreatePartitionDialog_4  = &Propriété : 
-CreatePartitionDialog_5  = Avancé
-CreatePartitionDialog_6  = &Nom : 
-CreatePartitionDialog_7  = Partie 
-CreatePartitionDialog_8  = Aucune partie définie
-CreatePartitionDialog_9  = Le nom de la partition n''a pas été précisé. Le nom est {0}
-
-CreatePartition_0        = Création d''une partition sur {0}
-CreatePartition_2        = ** Erreur : la partition n'a pas été créé
-CreatePartition_5        = Terminé : {0} items pour {1} occurrences.
-CreatePartition_55       = Terminé : {0} items pour {1} occurrences.
-CreatePartition_6        = Terminé : {0} parties
-
-CreateSubCorpus_0      = ** Erreur : le sous-corpus n'a pas été créé
-CreateSubCorpus_2      = Erreur lors de la récupération de la dernière erreur CQP : 
-CreateSubCorpus_begin  = Nouveau &Sous-corpus
-CreateSubCorpus_create = Créer un nouveau sous-corpus de {0}
-
-CreateSubcorpusDialog_0  = Créer un sous-corpus
-CreateSubcorpusDialog_10 = &Requête : 
-CreateSubcorpusDialog_11 = Nom incorrect
-CreateSubcorpusDialog_13 = Requête invalide
-CreateSubcorpusDialog_14 = Le champ Requête ne doit pas être vide.
-CreateSubcorpusDialog_6  = &Valeur : 
-CreateSubcorpusDialog_8  = Un nom de sous-corpus a été généré.
-
-CreateSubcorpus_7        = Calcul d''un sous-corpus de {0}, structure {1}, propriété {2} : {3}
-CreateSubcorpus_8        = Terminé : {0} a été créé  
-CreateSubcorpus_9        = Calcul d''un sous-corpus de {0} avec la requête <{1}>
-
-DONE = Terminé : {0}
-
-DefineReferencePattern_0 = Options d'affichage des références
-DefineReferencePattern_1 = Options d'&affichage des références
-DefineReferencePattern_2 = Options d'affichage des références
-DefineReferencePattern_3 = Options de &tri des références
-DefineReferencePattern_4 = Options de tri des références
-DefineReferencePattern_5 = Options de tri des références
-
-DeleteInCorporaView_1 = ** Erreur lors de la suppression du sous-corpus {0}
-DeleteInCorporaView_2 = ** Erreur lors de la suppression de la partition {0}
-
-DeleteLines_0 = Le tableau doit comporter au moins une ligne
-DeleteLines_1 = Sûr(e) ?
-
-DiagnosticPreferencePage_1 = Description
-DiagnosticPreferencePage_2 = Nombre de valeurs de propriété affiché
-DiagnosticPreferencePage_3 = Ordonner les parties par taille
-
-Diagnostique_0  = Unités de structure de {0}
-Diagnostique_1  = Les informations de {0} ont déjà été calculées. Souhaitez vous les recalculer ?
-Diagnostique_10 = Récupération des informations sur les unités de structure
-Diagnostique_11 = Ouverture de la fenêtre...
-Diagnostique_2  = ** Échec de lecture du fichier *informations* de 
-Diagnostique_7  = Création de la fenêtre d'informations
-Diagnostique_8  = Récupération des informations générales
-Diagnostique_9  = Récupération des données sur les unités lexicales
-
-EmpantWidget_0 = Contexte : 
-EmpantWidget_1 = forme
-EmpantWidget_2 = structure
-EmpantWidget_3 = de -
-EmpantWidget_4 = à -
-EmpantWidget_5 = et de
-EmpantWidget_6 = à
-EmpantWidget_7 = inclure la structure contenant le pivot
-EmpantWidget_8 = Contexte gauche actif
-EmpantWidget_9 = Contexte droit actif
-
-Exit_Menu_Label = Quitter
-
-ExportAnnotation_0 = Exportation des annotations
-
-ExportCorpus_0 = ** Échec de l''exportation du corpus {0}
-ExportCorpus_3 = Exportation de {0}. Cela peut prendre du temps en fonction de la taille du corpus.
-ExportCorpus_4 = Terminé, le fichier binaire créé est {0}
-
-InternalCorpusView_0 = ** Erreur lors du calcul des informations du corpus
-InternalCorpusView_1 = Recharger
-InternalCorpusView_2 = ** Erreur interne : getText {0}
-
-Invalid_analysis_property = Propriété invalide
-
-LastCQPError = Dernière erreur CQP : 
-
-NavigationWidget_0 = Erreur lors de la récupération des données à l'indice : 
-
-NumberOfLines = Nombre de lignes :
-
-OpenEmptyEditor_2 = ** Bibliographie : dossier {0} introuvable
-
-OpenTXMUserPreferences_0 = Paramètres par défaut
-
-
-PartitionComposer_0  = Structure : 
-PartitionComposer_11 = Supprimer
-PartitionComposer_2  = Sélectionner les valeurs à affecter : 
-PartitionComposer_3  = Nouvelle partie
-PartitionComposer_5  = Partie
-PartitionComposer_6  = Supp. toutes les parties
-PartitionComposer_8  = Titre : 
-PartitionComposer_9  = Affecter
-
-PartsSize_0  = Trier par taille
-PartsSize_10 = Dimensions de la partition {0} du corpus {1}
-PartsSize_2  = Nombre de mots par partie
-
-PasteFile_1 = ** Erreur lors de la copie  
-PasteFile_3 = ** Échec de la suppression
-PasteFile_4 = : 
-
-Preferences_Menu_Label = Préférences
-
-
-PropertiesSelector_0 = Impossible de charger les propriétés du corpus {0} ({1})
-PropertiesSelector_1 = Propriétés : 
-PropertiesSelector_2 = Editer
-
-Property = Propriétés :
-
-PropertySelector_0 = Sélectionner une propriété
-
-PurgeCorpora_0  = Attention ! Cette commande va supprimer tous les corpus sélectionnés. Continuer ?
-PurgeCorpora_1  = Corpus à supprimer 
-PurgeCorpora_10 = Création d'un nouvel espace de travail
-PurgeCorpora_12 = Redémarrage de la plateforme
-PurgeCorpora_13 = ** Erreur : espace de travail introuvable : 
-PurgeCorpora_2  = ** Attention : corpus non supprimés : 
-PurgeCorpora_3  = Attention ! Cette commande va supprimer tous les corpus. Continuer ?
-PurgeCorpora_4  = ** Erreur : la variable d'environnement 'TXMHOME' n'est pas configurée (sa valeur standard est '$HOME/TXM'). Abandon.
-PurgeCorpora_5  = Supprime tous les corpus
-PurgeCorpora_7  = ** Échec de la suppression des corpus
-PurgeCorpora_9  = ** Échec de la suppression du registre
-
-QueriesView_1  = Tout exporter
-QueriesView_10 = erreur : 
-QueriesView_5  = Requêtes :\n
-
-QueryAssistDialog_0  = Assistant de Requête
-QueryAssistDialog_1  = Mot supplémentaire
-QueryAssistDialog_10 = correspond à
-QueryAssistDialog_11 = commence par
-QueryAssistDialog_12 = se termine par
-QueryAssistDialog_13 = contient
-QueryAssistDialog_2  = Je recherche : 
-QueryAssistDialog_3  = mot
-QueryAssistDialog_32 = suivi de 
-QueryAssistDialog_33 = séparé d'au moins 0 mot
-QueryAssistDialog_34 = séparé d'au moins 1 mot
-QueryAssistDialog_8  = un mot dont
-
-
-RefreshingCorporaView = Mise à jour de la vue des corpus...
-
-RenameFile_0 = Renommer le fichier
-RenameFile_2 = Renommage par : 
-RenameFile_3 = ** Échec du renommage 
-
-RestartTXM_0 = Rechargement des vues...
-RestartTXM_1 = Redémarrer TXM
-
-RunGroovyScript_0  = Exécution du script
-RunGroovyScript_1  = &Exécuter un script
-RunGroovyScript_10 = Répertoire de sources :
-RunGroovyScript_2  = Exécuter un script
-RunGroovyScript_3  = *.groovy
-RunGroovyScript_4  = Erreur lors de l''ouverture du script groovy : {0}
-RunGroovyScript_8  = ** Erreur lors de l''exécution du script groovy : {0}
-RunGroovyScript_9  = Exécution du script
-
-SEARCH = &Искать
-
-SVGGraphicEditor_1 = Impossible d'afficher un graphique avec les informations fournies.
-
-SaveAs_2 = ** Échec de la sauvegarde 
-
-ScriptPreferencePage_0 = Prochain numéro de session 
-ScriptPreferencePage_3 = Dossier &racine
-
-SetContextSize_1 = Options d'affichage des &contextes
-SetContextSize_2 = Options d'affichage des contextes
-SetContextSize_3 = Taille du contexte gauche
-SetContextSize_4 = Taille du contexte droit
-
-SetEncoding_0 = Changer l'encodage des caractères
-SetEncoding_1 = Changer l'encodage des caractères.\n\n\	Encodage actuel : 
-SetEncoding_2 = \n\	Encodage par défaut :  
-
-SetLineNumber_0 = Options de pagination
-SetLineNumber_1 = Lignes par page : 
-
-SetSortProperty_1 = Options de tri
-SetSortProperty_2 = Options de tri
-SetSortProperty_3 = Options de tri
-
-ShowSelected_4 = Régler la propriété 'LANG'
-
-SingularValuesEditor_0 = Entrée erronée
-
-SortPropertySelection_0 = Options de tri
-
-Structure_field_not_empty = Le champ structure ne doit pas être vide.
-
-Submit_0 = Enregistrer
-
-TXMCqpServerWatcher_0 = Le moteur de recherche est arrêté
-TXMCqpServerWatcher_1 = Veuillez attendre que le moteur de recherche ai redémarré...
-
-TXMRServeWatcher_0 = Le moteur statistique est arrêté
-TXMRServeWatcher_1 = Veuillez attendre que le moteur statistique ai redémarré...
-TXMRServeWatcher_2 = Ok
-TXMRServeWatcher_3 = Rechargement de la vue des corpus...
-TXMRServeWatcher_4 = Veuillez patienter...
-
-TablableVector_0 = Les deux tables doivent être de même taille.
-
-TableEditor_0 = Impossible d'afficher un tableau avec les informations fournies
-
-TableKeyListener_1 = Saisissez l'expression régulière de votre recherche
-TableKeyListener_6 = Lignes copiées : \n
-
-TxmCommand_1 = Chargement de l'extension 
-
-UIParameterException_0 = Erreur  
-
-ViewPropertySelectionDialog_0 = Options d'affichage
-
-ViewPropertySelection_0       = Options d'affichage
Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages.properties
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages.properties	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages.properties	(revision 653)
@@ -1,170 +0,0 @@
-#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
-#Eclipse modern messages class
-#Mon Feb 10 11:04:14 CET 2014
-
-
-CANT_CREATE_GRAPHIC = ** Cannot create the graphic
-
-CQPPreferenceInitializer_0 = localhost
-CQPPreferenceInitializer_1 = anonymous
-
-CQPPreferencePage_0  = CQPlib path
-CQPPreferencePage_1  = Use network protocol
-CQPPreferencePage_10 = &Remote CWB server address:
-CQPPreferencePage_11 = CWB server: &host:
-CQPPreferencePage_12 = CWB server: &port:
-CQPPreferencePage_13 = CWB server: &login:
-CQPPreferencePage_14 = CWB server: &password:
-CQPPreferencePage_15 = Path to CWB server binary
-CQPPreferencePage_16 = Path to CWB server registry
-CQPPreferencePage_17 = Path to CWB server initialisation file
-CQPPreferencePage_18 = Additionnal &options for the CWB server:
-
-ComplexSubcorpusPanel_0  = Match
-ComplexSubcorpusPanel_1  = All criteria
-ComplexSubcorpusPanel_16 = does not contain
-ComplexSubcorpusPanel_2  = Some criteria
-ComplexSubcorpusPanel_4  = Query
-ComplexSubcorpusPanel_5  = Refresh
-
-
-ComputeDiagnostic_0 = Selection is not structured
-ComputeDiagnostic_1 = Error: selection is not a corpus:
-
-ONE_RESULT                         = Done: one result.
-
-DeleteInCorporaView_1 = ** Failed to delete subcorpus {0}
-DeleteInCorporaView_2 = ** Failed to delete partition {0}
-
-DiagnosticPreferencePage_1 = Description
-DiagnosticPreferencePage_2 = Maximum values to display
-DiagnosticPreferencePage_3 = Order partition parts by size
-
-Diagnostique_0  = Structural Units of {0}
-Diagnostique_1  = Informations of {0} already exists. Do you want to compute a new one ?
-Diagnostique_10 = get structural units data
-Diagnostique_11 = Open editor...
-Diagnostique_2  = ** Failed to read *informations* file of
-Diagnostique_7  = Create Informations
-Diagnostique_8  = Getting general informations
-Diagnostique_9  = Getting lexical properties data
-
-EmpantWidget_0 = Context:
-EmpantWidget_1 = word
-EmpantWidget_2 = structure
-EmpantWidget_3 = from -
-EmpantWidget_4 = to -
-EmpantWidget_5 = and from
-EmpantWidget_6 = to
-EmpantWidget_7 = include the keyword structure in the count
-EmpantWidget_8 = use left Window
-EmpantWidget_9 = use right Window
-
-Error_creating_partition      = Error while creating a partition: {0}
-
-ExportAnnotation_0 = Exporting annotations.
-
-ExportCorpus_0 = ** Failed to export corpus {0}
-ExportCorpus_3 = Exporting {0}. This may take a while.
-ExportCorpus_4 = Done, the created binary file is {0}
-
-
-GraphicalLogger_0 = Error {0}
-
-InternalCorpusView_0 = Error while computing corpus summary
-InternalCorpusView_1 = Reload
-InternalCorpusView_2 = Error: getText: {0}
-
-Invalid_analysis_property = Invalid property
-
-LastCQPError = Last CQP error:
-
-
-NumberOfLines = Number of lines:
-
-PartitionComposer_0  = Structure:
-PartitionComposer_1  = Error: this partition has no part.
-PartitionComposer_11 = Remove
-PartitionComposer_2  = Select values to assign:
-PartitionComposer_3  = New part
-PartitionComposer_5  = Part
-PartitionComposer_6  = Rmv all the parts
-PartitionComposer_8  = Title:
-PartitionComposer_9  = Assign
-
-PropertiesSelector_0 = Can''t load properties from corpus {0}: {1}
-PropertiesSelector_1 = Properties:
-PropertiesSelector_2 = Edit
-
-Property = Property:
-
-PropertySelector_0 = Select a property
-
-PurgeCorpora_0  = Warning! this command will delete the selected corpora, Continue ?
-PurgeCorpora_1  = Corpora to delete
-PurgeCorpora_10 = Creating new workspace
-PurgeCorpora_12 = Restarting platform
-PurgeCorpora_13 = ** Error: could not find workspace:
-PurgeCorpora_2  = ** Warning: Failed to delete corpora:
-PurgeCorpora_3  = Warning! this command will delete all your corpora, Continue ?
-PurgeCorpora_4  = ** Error: 'TXMHOME' environment variable is not set (its standard value is '$HOME/TXM'). Aborting
-PurgeCorpora_5  = Delete all corpora
-PurgeCorpora_7  = ** Failed to delete corpora
-PurgeCorpora_9  = ** Failed to delete registry
-
-QueriesView_1  = Export all
-QueriesView_10 = Error with element {0}
-QueriesView_5  = Queries:\n
-
-QueryAssistDialog_0  = Query Assistant
-QueryAssistDialog_1  = Add a word
-QueryAssistDialog_10 = equals to
-QueryAssistDialog_11 = starts with
-QueryAssistDialog_12 = ends with
-QueryAssistDialog_13 = contains
-QueryAssistDialog_2  = I'm looking for:
-QueryAssistDialog_3  = I''m looking for {0} words
-QueryAssistDialog_32 = followed by
-QueryAssistDialog_33 = separated by at least 0 word
-QueryAssistDialog_34 = separated by at least 1 word
-QueryAssistDialog_8  = a word with its property
-
-RefreshingCorporaView = Refreshing corpora...
-
-SEARCH = &Search
-
-SetContextSize_1 = &Contexts display options
-SetContextSize_2 = Contexts display options
-SetContextSize_3 = Left context size
-SetContextSize_4 = Right context size
-
-SetLineNumber_0 = Pagination options
-SetLineNumber_1 = Line per page:
-
-SetSortProperty_1 = &Sort options
-SetSortProperty_2 = Sort options
-SetSortProperty_3 = Sort options
-
-ShowSelected_0 = File: 
-ShowSelected_4 = Set the 'LANG' property
-
-SimpleSubcorpusPanel_0 = Structural unit combo selected
-
-SortPropertySelection_0 = Sort options
-
-Structure_field_not_empty = structure field is mandatory.
-
-SummaryView_0 = No default edition page found for element: 
-
-TXMCqpServerWatcher_0 = CQP server is down
-TXMCqpServerWatcher_1 = Please wait for searchengine to restart...
-
-TXMRServeWatcher_0 = StatEngine server is down
-TXMRServeWatcher_1 = Please wait for StatEngine to restart...
-TXMRServeWatcher_2 = Ok
-TXMRServeWatcher_3 = Reloading corpora view...
-TXMRServeWatcher_4 = Please wait...
-
-ViewPropertySelectionDialog_0 = Display options
-
-ViewPropertySelection_0       = Display options
\ No newline at end of file
Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/ComputeInformation.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/ComputeInformation.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/ComputeInformation.java	(revision 653)
@@ -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:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.searchengine.cqp.rcp.handlers;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.txm.rcp.RCPMessages;
+import org.txm.rcp.TXMWindows;
+import org.txm.rcp.editors.TXMEditor;
+import org.txm.rcp.editors.TXMResultEditorInput;
+import org.txm.rcp.views.corpora.CorporaView;
+import org.txm.searchengine.cqp.CQPEngine;
+import org.txm.searchengine.cqp.core.functions.information.Information;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.rcp.editors.InformationEditor;
+import org.txm.utils.logger.Log;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Call the function Information on a MainCorpus, a SubCorpus and a Partition
+ * show basic stats and give some properties values 
+ * @author mdecorde.
+ */
+public class ComputeInformation extends AbstractHandler {
+	
+	// adds a double click listener to the Corpus View
+	static	{
+		CorporaView.addDoubleClickListener(Information.class, ComputeInformation.class);
+	}
+	
+	/** The selection. */
+	private IStructuredSelection selection;
+	
+	/** The response. */
+	int response = SWT.YES;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		if (!CQPEngine.isInitialized()) {
+			System.out.println("SearchEngine is not ready. Aborting.");
+			return false;
+		}
+		
+		Object sel = HandlerUtil.getCurrentSelection(event);
+		if (!(sel instanceof IStructuredSelection)) {
+			Log.warning(RCPMessages.ComputeDiagnostic_0);
+			return null;
+		}
+		
+		selection = (IStructuredSelection) sel;
+		Object s = selection.getFirstElement();
+		Information diag = null;
+		if (s instanceof Corpus) {
+			diag = new Information((Corpus)s);
+		} else if (s instanceof Information) {
+			diag = (Information)s;
+		} else {
+			System.out.println("Selection not managed: "+s);
+		}
+		try {
+			open(diag);
+		} catch (PartInitException e) {
+			System.out.println("Error while opening editor: "+e.getLocalizedMessage());
+			Log.printStackTrace(e);
+		}
+		return null;
+	}
+	
+	public static void open(Information diag) throws PartInitException {
+		TXMEditor.openEditor(diag, InformationEditor.class.getName());
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/ComputeInformation.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/CreateSubCorpus.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/CreateSubCorpus.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/CreateSubCorpus.java	(revision 653)
@@ -0,0 +1,167 @@
+// 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.searchengine.cqp.rcp.handlers.base;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.txm.Toolbox;
+import org.txm.rcp.JobsTimer;
+import org.txm.rcp.RCPMessages;
+import org.txm.rcp.actions.CreateSubcorpusDialog;
+import org.txm.rcp.utils.JobHandler;
+import org.txm.rcp.views.corpora.CorporaView;
+import org.txm.searchengine.cqp.CQPEngine;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.Subcorpus;
+import org.txm.searchengine.cqp.corpus.query.Query;
+import org.txm.utils.logger.Log;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Command which creates a subcorpus from a Corpus @ author mdecorde.
+ */
+public class CreateSubCorpus extends AbstractHandler {
+
+	/** The selection. */
+	private IStructuredSelection selection;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		
+		selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
+		if (selection == null) {
+			System.out.println(RCPMessages.CreateSubCorpus_1+HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getActiveEditor());
+			return null;
+		}
+		Object firstElement = selection.getFirstElement();
+		
+		if (!(firstElement instanceof Corpus)) {
+			System.out.println(RCPMessages.CreateSubCorpus_3+firstElement);
+			return null;
+		}
+		
+		final Corpus corpus = (Corpus) firstElement;
+		Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event)
+				.getShell();
+		final CreateSubcorpusDialog d = new CreateSubcorpusDialog(shell, corpus);
+		int code = d.open();
+		if (code == Window.OK) {
+			JobHandler jobhandler = new JobHandler(NLS.bind(
+					RCPMessages.CreateSubCorpus_create, corpus.getName())) {
+				@Override
+				protected IStatus run(IProgressMonitor monitor) {		
+					this.runInit(monitor);
+					JobsTimer.start();
+					try {
+						monitor.beginTask(RCPMessages.CreateSubCorpus_begin, 100);
+						final Subcorpus subcorpus;
+
+						if (d.isAdvancedSelected() || d.isAssistedSelected()) {
+							Query q = new Query(d.getQuery());
+							System.out.println(NLS.bind(RCPMessages.CreateSubcorpus_9,
+								corpus.getName(), q.getQueryString())); 
+							subcorpus = corpus.createSubcorpus(q, d.getName());
+						} 
+						else {
+							System.out.println(NLS.bind(RCPMessages.CreateSubcorpus_7,
+							new Object[]{corpus.getName(), d.getStructuralUnit(),
+									d.getStructuralUnitProperty(), d.getValues()}));
+							
+							//Escape regex char of prop values
+							//List<String> values = d.getValues();
+							//for(int i = 0 ; i < values.size() ; i++)
+							//	values.set(i, Query.addBackSlash(values.get(i)));
+							
+							subcorpus = corpus.createSubcorpus(d
+									.getStructuralUnit(), d
+									.getStructuralUnitProperty(),
+									d.getValues(), d.getName());
+
+						}
+						
+						if(subcorpus == null)
+						{
+							monitor.done();
+							System.out.println(RCPMessages.CreateSubCorpus_0);
+							return Status.CANCEL_STATUS;
+						}
+						
+						System.out.println(NLS.bind(RCPMessages.CreateSubcorpus_8
+								, subcorpus.getName()));
+						monitor.worked(50);
+
+						monitor.subTask(RCPMessages.RefreshingCorporaView);
+						syncExec(new Runnable() {
+							@Override
+							public void run() {
+								CorporaView.refresh();
+								//System.out.println("expand");
+								CorporaView.expand(subcorpus.getParent());
+							}
+						});
+
+						monitor.worked(100);
+					} catch (ThreadDeath td) {
+						return Status.CANCEL_STATUS;
+					} catch (CqiClientException e) {
+						org.txm.rcp.utils.Logger.printStackTrace(e);
+						Log.severe(e.toString());
+						
+						try {
+							System.out.println(RCPMessages.LastCQPError+CQPEngine.getCqiClient().getLastCQPError());
+						} catch (Exception e1) {
+							System.out.println(RCPMessages.CreateSubCorpus_2+e1);
+							org.txm.rcp.utils.Logger.printStackTrace(e1);
+						}
+					} finally {
+						monitor.done();
+						JobsTimer.stopAndPrint();
+					}				
+					return Status.OK_STATUS;
+				}
+			};
+			jobhandler.startJob();
+		}
+		return null;
+	}
+
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/CreateSubCorpus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/CreatePartition.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/CreatePartition.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/CreatePartition.java	(revision 653)
@@ -0,0 +1,131 @@
+// 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.searchengine.cqp.rcp.handlers.base;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.txm.rcp.JobsTimer;
+import org.txm.rcp.RCPMessages;
+import org.txm.rcp.actions.CreatePartitionDialog;
+import org.txm.rcp.utils.JobHandler;
+import org.txm.rcp.views.corpora.CorporaView;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.Partition;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Command which creates a Partition from a Corpus @ author mdecorde.
+ */
+public class CreatePartition extends AbstractHandler {
+
+	/** The window. */
+	private IWorkbenchWindow window;
+
+	/** The selection. */
+	private IStructuredSelection selection;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands
+	 * .ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
+
+		final Corpus corpus = (Corpus) selection.getFirstElement();
+		Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event)
+				.getShell();
+		final CreatePartitionDialog d = new CreatePartitionDialog(shell, corpus);
+		int code = d.open();
+		if (code == Window.OK) {
+			try {
+				JobHandler jobhandler = new JobHandler(NLS.bind(
+						RCPMessages.CreatePartition_0, corpus.getName())) {
+					@Override
+					protected IStatus run(IProgressMonitor monitor) {
+						this.runInit(monitor);
+						try {
+							JobsTimer.start();
+							monitor.beginTask(
+									NLS.bind(RCPMessages.CreatePartition_0,
+											corpus.getName()), 100);
+							System.out.println(NLS.bind(
+									RCPMessages.CreatePartition_0,
+									corpus.getName()));
+							final Partition partition = d.getPartition();
+							if (partition == null) {
+								monitor.done();
+								System.out.println(RCPMessages.CreatePartition_2);
+								return Status.CANCEL_STATUS;
+							}
+							System.out.println(NLS.bind(
+									RCPMessages.CreatePartition_6,
+									partition.getNPart()));
+							monitor.worked(95);
+
+							monitor.subTask(RCPMessages.RefreshingCorporaView);
+							syncExec(new Runnable() {
+								@Override
+								public void run() {
+									CorporaView.refresh();
+									CorporaView.expand(partition.getParent());
+								}
+							});
+							monitor.worked(100);
+						} catch (ThreadDeath td) {
+							return Status.CANCEL_STATUS;
+						} finally {
+							monitor.done();
+							JobsTimer.stopAndPrint();
+						}
+						return Status.OK_STATUS;
+					}
+				};
+				jobhandler.startJob();
+
+			} catch (Exception e) {
+				System.err.println(NLS.bind(RCPMessages.Error_creating_partition,
+						e));
+			}
+		}
+		return null;
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/CreatePartition.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/ExportCorpus.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/ExportCorpus.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/ExportCorpus.java	(revision 653)
@@ -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:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.searchengine.cqp.rcp.handlers.base;
+
+import java.io.File;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.txm.Toolbox;
+import org.txm.core.preferences.TBXPreferences;
+import org.txm.rcp.RCPMessages;
+import org.txm.rcp.swt.dialog.LastOpened;
+import org.txm.rcp.utils.JobHandler;
+import org.txm.searchengine.cqp.corpus.MainCorpus;
+
+// TODO: Auto-generated Javadoc
+/**
+ * Call the function Information on a MainCorpus, a SubCorpus and a Partition
+ * show basic stats and give some properties values @ author mdecorde.
+ */
+public class ExportCorpus extends AbstractHandler {
+
+	public final static String ID = "org.txm.rcp.commands.base.ExportCorpus"; //$NON-NLS-1$
+	/** The selection. */
+	private IStructuredSelection selection;
+
+	/** The lastopenedfile. */
+	private static String lastopenedfile;
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands
+	 * .ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
+
+		Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event)
+				.getShell();
+
+		String txmhome = Toolbox.getTXMHOMEPATH();
+		if (!(selection.getFirstElement() instanceof MainCorpus))
+			return null;
+
+		final MainCorpus corpus = (MainCorpus) selection.getFirstElement();
+
+		if (corpus.isModified()) {
+			boolean ret = MessageDialog.openConfirm(shell, "Export - "+corpus.getName()+" annotations not saved", "Do you wish to export without the current annotations?\n\n(to include the current annotations in the exported corpus, you need to save them before calling the \"Export\" command)");
+			if (!ret) return null;
+		}
+		
+		FileDialog dialog = new FileDialog(shell, SWT.SAVE);
+		String[] exts = {"*.txm", "*.zip"}; //$NON-NLS-1$ //$NON-NLS-2$
+		dialog.setFilterExtensions(exts);
+		if (LastOpened.getFile(ID) != null) {
+			lastopenedfile = LastOpened.getFolder(ID)
+					+ "/" + LastOpened.getFile(ID); //$NON-NLS-1$
+		} else if (lastopenedfile != null) {
+			dialog.setFilterPath(new File(lastopenedfile).getAbsolutePath());
+		} else {
+			dialog.setFilterPath(txmhome + "/samples"); //$NON-NLS-1$
+		}
+
+		dialog.setFileName(corpus.getName()+".txm");
+		
+		if (dialog.open() != null) {
+			String filepath = dialog.getFilterPath()
+					+ "/" + dialog.getFileName(); //$NON-NLS-1$
+			if (!(filepath.endsWith(".txm") || filepath.endsWith(".zip"))) { //$NON-NLS-1$ //$NON-NLS-2$
+				filepath += ".txm"; //$NON-NLS-1$
+			}
+			LastOpened.set(ID, dialog.getFilterPath(), dialog.getFileName());
+			lastopenedfile = filepath;
+			final File outfile = new File(filepath);
+			JobHandler jobhandler = new JobHandler(NLS.bind(
+					RCPMessages.ExportCorpus_3, corpus.getName())) {
+				@Override
+				protected IStatus run(IProgressMonitor monitor) {
+					this.runInit(monitor);
+					try {
+						monitor.beginTask(
+								NLS.bind(RCPMessages.ExportCorpus_3,
+										corpus.getName()), 100);
+						
+
+						if (!corpus.export(outfile, this)) {
+							System.out.println(NLS.bind(
+									RCPMessages.ExportCorpus_0, corpus.getName()));
+						}
+
+						System.out.println(RCPMessages.bind(RCPMessages.ExportCorpus_4,outfile.getAbsolutePath()));
+						monitor.worked(100);
+					} catch (ThreadDeath td) {
+						return Status.CANCEL_STATUS;
+					} finally {
+						monitor.done();
+					}
+					return Status.OK_STATUS;
+				}
+			};
+			jobhandler.startJob();
+		}
+
+		return null;
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/ExportCorpus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/package.html
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/package.html	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/package.html	(revision 653)
@@ -0,0 +1,5 @@
+<html>
+<body>
+	<p>Commands which deals with the CWB corpora view</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/OpenBiblio.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/OpenBiblio.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/OpenBiblio.java	(revision 653)
@@ -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:$
+// $LastChangedRevision:$
+// $LastChangedBy:$ 
+//
+package org.txm.searchengine.cqp.rcp.handlers.base;
+
+import java.util.ArrayList;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.txm.objects.Text;
+import org.txm.rcp.RCPMessages;
+import org.txm.rcp.commands.OpenBrowser;
+import org.txm.rcp.editors.TXMBrowser;
+import org.txm.rcp.swt.dialog.ComboDialog;
+import org.txm.searchengine.cqp.corpus.Corpus;
+/**
+ * Open a text edition from: a main corpus : the first text of the maincorpus a
+ * sub-corpus : the first text of the subcorpus a partition : the user must
+ * choose one of the text used in the partition
+ * 
+ * note: unplugged for now
+ *  
+ * @author mdecorde.
+ */
+public class OpenBiblio extends AbstractHandler {
+
+	/** The Constant ID. */
+	public final static String ID = "org.txm.rcp.commands.base.OpenBiblio"; //$NON-NLS-1$
+
+	/** The lastopenedfile. */
+	public static String lastopenedfile;
+
+	/** The textids. */
+	private ArrayList<String> textids;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+
+		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
+
+		Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell();
+
+		if (selection.getFirstElement() instanceof Corpus) {
+			Corpus corpus = (Corpus) selection.getFirstElement();
+
+			textids = new ArrayList<String>(corpus.getTextsID());
+			if (textids.size() == 0)
+			{
+				System.out.println(NLS.bind(RCPMessages.OpenBiblio_1, corpus.getName()));
+				return null;
+			}
+
+			ComboDialog dialog = new ComboDialog(shell, RCPMessages.OpenBiblio_2, textids, textids.get(0));
+			if (dialog.open() == Window.OK)
+			{
+				String textid = dialog.getSelectedValue();
+				openBiblio(corpus, textid);
+			}
+		}
+		else if (selection.getFirstElement() instanceof Text)
+		{
+			Text text = (Text) selection.getFirstElement();
+			openBiblio(text);
+		}
+		return null;
+	}
+
+	/**
+	 * Open biblio.
+	 *
+	 * @param base the base
+	 * @param textid the textid
+	 * @return the object
+	 */
+	public Object openBiblio(Corpus corpus, String textid ) {
+
+		Text text = corpus.getMainCorpus().getText(textid);
+		if (text == null) {
+			System.out.println(NLS.bind(RCPMessages.OpenBiblio_7, textid, corpus.getName()));
+			return null;
+		}
+
+		return openBiblio(text);
+	}
+
+	/**
+	 * Open biblio.
+	 *
+	 * @param text the text
+	 * @return the object
+	 */
+	public Object openBiblio(Text text) {
+
+		if (text == null)
+		{
+			return null;
+		}
+		if (text.getBiblioPath() == null) {
+			System.out.println(NLS.bind(RCPMessages.OpenBiblio_9, text.getName()));
+			return null;
+		}
+		String url = text.getBiblioPath().toString();
+		if (url.trim().length() == 0) {
+			System.out.println(NLS.bind(RCPMessages.OpenBiblio_9, text.getName()));
+			return null;
+		}
+		TXMBrowser attachedBrowserEditor = OpenBrowser.openEdition(url);
+		//attachedBrowserEditor.setCorpus(text.getCorpus());
+		return null;
+	}
+
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/handlers/base/OpenBiblio.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/DiagnosticPreferencePage.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/DiagnosticPreferencePage.java	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/DiagnosticPreferencePage.java	(revision 653)
@@ -1,80 +0,0 @@
-// 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.searchengine.cqp.rcp.preferences;
-
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.preferences.ScopedPreferenceStore;
-import org.txm.rcp.Application;
-import org.txm.rcp.RCPMessages;
-import org.txm.rcp.preferences.TXMPreferencePage;
-import org.txm.rcp.preferences.TXMPreferenceStore;
-import org.txm.searchengine.cqp.CQPPreferences;
-// TODO: Auto-generated Javadoc
-/**
- * This class represents a preference page that is contributed to the
- * Preferences dialog. By subclassing <samp>FieldEditorPreferencePage</samp>, we
- * can use the field support built into JFace that allows us to create a page
- * that is small and knows how to save, restore and apply itself.
- * <p>
- * This page is used to modify preferences only. They are stored in the
- * preference store that belongs to the main plug-in class. That way,
- * preferences can be accessed directly via the preference store.
- */
-
-public class DiagnosticPreferencePage extends TXMPreferencePage {
-
-	/** The diag_maxvalue. */
-	private IntegerFieldEditor diag_maxvalue;
-		
-	@Override
-	public void init(IWorkbench workbench) {
-		this.setPreferenceStore(new TXMPreferenceStore(CQPPreferences.PREFERENCES_NODE));
-	}
-	
-	/**
-	 * Instantiates a new diagnostic preference page.
-	 */
-	public DiagnosticPreferencePage() {
-		super();
-		setTitle(RCPMessages.DiagnosticPreferencePage_1);
-	}
-
-	/**
-	 * Creates the field editors. Field editors are abstractions of the common
-	 * GUI blocks needed to manipulate various types of preferences. Each field
-	 * editor knows how to save and restore itself.
-	 */
-	@Override
-	public void createFieldEditors() {
-		
-		diag_maxvalue = new IntegerFieldEditor(CQPPreferences.MAXVALUE, RCPMessages.DiagnosticPreferencePage_2, getFieldEditorParent());
-		diag_maxvalue.setValidRange(1, 9999);
-		addField(diag_maxvalue);
-	}
-}
Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/CQPPreferencePage.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/CQPPreferencePage.java	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/CQPPreferencePage.java	(revision 653)
@@ -41,8 +41,7 @@
 import org.txm.rcp.Application;
 import org.txm.rcp.preferences.TXMPreferencePage;
 import org.txm.rcp.preferences.TXMPreferenceStore;
-import org.txm.searchengine.cqp.CQPPreferences;
-import org.txm.searchengine.cqp.rcp.*;
+import org.txm.searchengine.cqp.rcp.messages.CQPUIMessages;
 
 // TODO: Auto-generated Javadoc
 /**
@@ -105,38 +104,38 @@
 	public void createFieldEditors() {
 
 		cqi_use_network = new BooleanFieldEditor(CQPLibPreferences.CQI_NETWORK_MODE,
-				Messages.CQPPreferencePage_1,
+				CQPUIMessages.CQPPreferencePage_1,
 				BooleanFieldEditor.DEFAULT, getFieldEditorParent());
 		cqi_server_path_to_cqplib = new DirectoryFieldEditor(
-				CQPLibPreferences.CQI_SERVER_PATH_TO_CQPLIB, Messages.CQPPreferencePage_0,
+				CQPLibPreferences.CQI_SERVER_PATH_TO_CQPLIB, CQPUIMessages.CQPPreferencePage_0,
 				getFieldEditorParent());
 		cqi_server_is_remote = new BooleanFieldEditor(CQPLibPreferences.CQI_SERVER_IS_REMOTE,
-				Messages.CQPPreferencePage_10,
+				CQPUIMessages.CQPPreferencePage_10,
 				BooleanFieldEditor.DEFAULT, getFieldEditorParent());
 		cqi_server_host = new StringFieldEditor(CQPLibPreferences.CQI_SERVER_HOST,
-				Messages.CQPPreferencePage_11, getFieldEditorParent());
+				CQPUIMessages.CQPPreferencePage_11, getFieldEditorParent());
 
 		cqi_server_port = new IntegerFieldEditor(CQPLibPreferences.CQI_SERVER_PORT,
-				Messages.CQPPreferencePage_12, getFieldEditorParent());
+				CQPUIMessages.CQPPreferencePage_12, getFieldEditorParent());
 
 		cqi_server_user = new StringFieldEditor(CQPLibPreferences.CQI_SERVER_LOGIN,
-				Messages.CQPPreferencePage_13, getFieldEditorParent());
+				CQPUIMessages.CQPPreferencePage_13, getFieldEditorParent());
 
 		cqi_server_password = new StringFieldEditor(CQPLibPreferences.CQI_SERVER_PASSWORD,
-				Messages.CQPPreferencePage_14, getFieldEditorParent());
+				CQPUIMessages.CQPPreferencePage_14, getFieldEditorParent());
 
 		cqi_server_path_to_executable = new FileFieldEditor(
-				CQPLibPreferences.CQI_SERVER_PATH_TO_EXECUTABLE, Messages.CQPPreferencePage_15,
+				CQPLibPreferences.CQI_SERVER_PATH_TO_EXECUTABLE, CQPUIMessages.CQPPreferencePage_15,
 				getFieldEditorParent());
 
 //		cqi_server_path_to_registry = new DirectoryFieldEditor(
-//				CQI_SERVER_PATH_TO_REGISTRY, Messages.CQPPreferencePage_16,
+//				CQI_SERVER_PATH_TO_REGISTRY, CQPUIMessages.CQPPreferencePage_16,
 //				getFieldEditorParent());
 		cqi_server_path_to_init_file = new FileFieldEditor(
-				CQPLibPreferences.CQI_SERVER_PATH_TO_INIT_FILE, Messages.CQPPreferencePage_17,
+				CQPLibPreferences.CQI_SERVER_PATH_TO_INIT_FILE, CQPUIMessages.CQPPreferencePage_17,
 				getFieldEditorParent());
 		cqi_server_additional_options = new StringFieldEditor(
-				CQPLibPreferences.CQI_SERVER_ADDITIONAL_OPTIONS, Messages.CQPPreferencePage_18,
+				CQPLibPreferences.CQI_SERVER_ADDITIONAL_OPTIONS, CQPUIMessages.CQPPreferencePage_18,
 				getFieldEditorParent());
 
 		addField(cqi_use_network);
Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/InformationPreferencePage.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/InformationPreferencePage.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/InformationPreferencePage.java	(revision 653)
@@ -0,0 +1,66 @@
+// 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.searchengine.cqp.rcp.preferences;
+
+import org.eclipse.jface.preference.IntegerFieldEditor;
+import org.eclipse.ui.IWorkbench;
+import org.txm.rcp.RCPMessages;
+import org.txm.rcp.preferences.TXMPreferencePage;
+import org.txm.rcp.preferences.TXMPreferenceStore;
+import org.txm.searchengine.cqp.CQPPreferences;
+// TODO: Auto-generated Javadoc
+/**
+ * This class represents a preference page that is contributed to the
+ * Preferences dialog. By subclassing <samp>FieldEditorPreferencePage</samp>, we
+ * can use the field support built into JFace that allows us to create a page
+ * that is small and knows how to save, restore and apply itself.
+ * <p>
+ * This page is used to modify preferences only. They are stored in the
+ * preference store that belongs to the main plug-in class. That way,
+ * preferences can be accessed directly via the preference store.
+ */
+
+public class InformationPreferencePage extends TXMPreferencePage {
+
+		
+	@Override
+	public void init(IWorkbench workbench) {
+		this.setPreferenceStore(new TXMPreferenceStore(CQPPreferences.PREFERENCES_NODE));
+		this.setTitle(RCPMessages.DiagnosticPreferencePage_1);
+	}
+	
+
+	@Override
+	public void createFieldEditors() {
+		
+		// The diag_maxvalue
+		IntegerFieldEditor diag_maxvalue = new IntegerFieldEditor(CQPPreferences.MAXVALUE, RCPMessages.DiagnosticPreferencePage_2, this.getFieldEditorParent());
+		diag_maxvalue.setValidRange(1, 9999);
+		this.addField(diag_maxvalue);
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/preferences/InformationPreferencePage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/adapters/InformationAdapterFactory.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/adapters/InformationAdapterFactory.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/adapters/InformationAdapterFactory.java	(revision 653)
@@ -0,0 +1,40 @@
+// Copyright © 2010-2013 ENS de Lyon.
+package org.txm.searchengine.cqp.rcp.adapters;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.model.IWorkbenchAdapter;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.FrameworkUtil;
+import org.txm.rcp.adapters.TXMResultAdapter;
+import org.txm.rcp.adapters.TXMResultAdapterFactory;
+import org.txm.searchengine.cqp.core.functions.information.Information;
+
+
+/**
+ * 
+ *  
+ * @author mdecorde
+ * @author sjacquot
+ */
+public class InformationAdapterFactory extends TXMResultAdapterFactory {
+
+	public static final ImageDescriptor ICON =
+			AbstractUIPlugin.imageDescriptorFromPlugin(FrameworkUtil.getBundle(InformationAdapterFactory.class).getSymbolicName(),
+					"platform:/plugin/"+ FrameworkUtil.getBundle(InformationAdapterFactory.class).getSymbolicName() + "/icons/functions/information.png"); //$NON-NLS-1$ //$NON-NLS-2$
+
+	@Override
+	public Object getAdapter(Object adaptableObject, Class adapterType) {
+		if(adapterType == IWorkbenchAdapter.class && adaptableObject instanceof Information)	{
+			return new TXMResultAdapter() {
+				@Override
+				public ImageDescriptor getImageDescriptor(Object object) {
+					if (object instanceof Information) {
+							return ICON;
+					}
+					return null;
+				}
+			};
+		}
+		return null;
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/adapters/InformationAdapterFactory.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages.properties
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages.properties	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages.properties	(revision 653)
@@ -0,0 +1,170 @@
+#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
+#Eclipse modern messages class
+#Mon Feb 10 11:04:14 CET 2014
+
+
+CANT_CREATE_GRAPHIC = ** Cannot create the graphic
+
+CQPPreferenceInitializer_0 = localhost
+CQPPreferenceInitializer_1 = anonymous
+
+CQPPreferencePage_0  = CQPlib path
+CQPPreferencePage_1  = Use network protocol
+CQPPreferencePage_10 = &Remote CWB server address:
+CQPPreferencePage_11 = CWB server: &host:
+CQPPreferencePage_12 = CWB server: &port:
+CQPPreferencePage_13 = CWB server: &login:
+CQPPreferencePage_14 = CWB server: &password:
+CQPPreferencePage_15 = Path to CWB server binary
+CQPPreferencePage_16 = Path to CWB server registry
+CQPPreferencePage_17 = Path to CWB server initialisation file
+CQPPreferencePage_18 = Additionnal &options for the CWB server:
+
+ComplexSubcorpusPanel_0  = Match
+ComplexSubcorpusPanel_1  = All criteria
+ComplexSubcorpusPanel_16 = does not contain
+ComplexSubcorpusPanel_2  = Some criteria
+ComplexSubcorpusPanel_4  = Query
+ComplexSubcorpusPanel_5  = Refresh
+
+
+ComputeDiagnostic_0 = Selection is not structured
+ComputeDiagnostic_1 = Error: selection is not a corpus:
+
+ONE_RESULT                         = Done: one result.
+
+DeleteInCorporaView_1 = ** Failed to delete subcorpus {0}
+DeleteInCorporaView_2 = ** Failed to delete partition {0}
+
+DiagnosticPreferencePage_1 = Description
+DiagnosticPreferencePage_2 = Maximum values to display
+DiagnosticPreferencePage_3 = Order partition parts by size
+
+Diagnostique_0  = Structural Units of {0}
+Diagnostique_1  = Informations of {0} already exists. Do you want to compute a new one ?
+Diagnostique_10 = get structural units data
+Diagnostique_11 = Open editor...
+Diagnostique_2  = ** Failed to read *informations* file of
+Diagnostique_7  = Create Informations
+Diagnostique_8  = Getting general informations
+Diagnostique_9  = Getting lexical properties data
+
+EmpantWidget_0 = Context:
+EmpantWidget_1 = word
+EmpantWidget_2 = structure
+EmpantWidget_3 = from -
+EmpantWidget_4 = to -
+EmpantWidget_5 = and from
+EmpantWidget_6 = to
+EmpantWidget_7 = include the keyword structure in the count
+EmpantWidget_8 = use left Window
+EmpantWidget_9 = use right Window
+
+Error_creating_partition      = Error while creating a partition: {0}
+
+ExportAnnotation_0 = Exporting annotations.
+
+ExportCorpus_0 = ** Failed to export corpus {0}
+ExportCorpus_3 = Exporting {0}. This may take a while.
+ExportCorpus_4 = Done, the created binary file is {0}
+
+
+GraphicalLogger_0 = Error {0}
+
+InternalCorpusView_0 = Error while computing corpus summary
+InternalCorpusView_1 = Reload
+InternalCorpusView_2 = Error: getText: {0}
+
+Invalid_analysis_property = Invalid property
+
+LastCQPError = Last CQP error:
+
+
+NumberOfLines = Number of lines:
+
+PartitionComposer_0  = Structure:
+PartitionComposer_1  = Error: this partition has no part.
+PartitionComposer_11 = Remove
+PartitionComposer_2  = Select values to assign:
+PartitionComposer_3  = New part
+PartitionComposer_5  = Part
+PartitionComposer_6  = Rmv all the parts
+PartitionComposer_8  = Title:
+PartitionComposer_9  = Assign
+
+PropertiesSelector_0 = Can''t load properties from corpus {0}: {1}
+PropertiesSelector_1 = Properties:
+PropertiesSelector_2 = Edit
+
+Property = Property:
+
+PropertySelector_0 = Select a property
+
+PurgeCorpora_0  = Warning! this command will delete the selected corpora, Continue ?
+PurgeCorpora_1  = Corpora to delete
+PurgeCorpora_10 = Creating new workspace
+PurgeCorpora_12 = Restarting platform
+PurgeCorpora_13 = ** Error: could not find workspace:
+PurgeCorpora_2  = ** Warning: Failed to delete corpora:
+PurgeCorpora_3  = Warning! this command will delete all your corpora, Continue ?
+PurgeCorpora_4  = ** Error: 'TXMHOME' environment variable is not set (its standard value is '$HOME/TXM'). Aborting
+PurgeCorpora_5  = Delete all corpora
+PurgeCorpora_7  = ** Failed to delete corpora
+PurgeCorpora_9  = ** Failed to delete registry
+
+QueriesView_1  = Export all
+QueriesView_10 = Error with element {0}
+QueriesView_5  = Queries:\n
+
+QueryAssistDialog_0  = Query Assistant
+QueryAssistDialog_1  = Add a word
+QueryAssistDialog_10 = equals to
+QueryAssistDialog_11 = starts with
+QueryAssistDialog_12 = ends with
+QueryAssistDialog_13 = contains
+QueryAssistDialog_2  = I'm looking for:
+QueryAssistDialog_3  = I''m looking for {0} words
+QueryAssistDialog_32 = followed by
+QueryAssistDialog_33 = separated by at least 0 word
+QueryAssistDialog_34 = separated by at least 1 word
+QueryAssistDialog_8  = a word with its property
+
+RefreshingCorporaView = Refreshing corpora...
+
+SEARCH = &Search
+
+SetContextSize_1 = &Contexts display options
+SetContextSize_2 = Contexts display options
+SetContextSize_3 = Left context size
+SetContextSize_4 = Right context size
+
+SetLineNumber_0 = Pagination options
+SetLineNumber_1 = Line per page:
+
+SetSortProperty_1 = &Sort options
+SetSortProperty_2 = Sort options
+SetSortProperty_3 = Sort options
+
+ShowSelected_0 = File: 
+ShowSelected_4 = Set the 'LANG' property
+
+SimpleSubcorpusPanel_0 = Structural unit combo selected
+
+SortPropertySelection_0 = Sort options
+
+Structure_field_not_empty = structure field is mandatory.
+
+SummaryView_0 = No default edition page found for element: 
+
+TXMCqpServerWatcher_0 = CQP server is down
+TXMCqpServerWatcher_1 = Please wait for searchengine to restart...
+
+TXMRServeWatcher_0 = StatEngine server is down
+TXMRServeWatcher_1 = Please wait for StatEngine to restart...
+TXMRServeWatcher_2 = Ok
+TXMRServeWatcher_3 = Reloading corpora view...
+TXMRServeWatcher_4 = Please wait...
+
+ViewPropertySelectionDialog_0 = Display options
+
+ViewPropertySelection_0       = Display options
\ No newline at end of file

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

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages_ru.properties
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages_ru.properties	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages_ru.properties	(revision 653)
@@ -0,0 +1,299 @@
+CGU_TITLE=Licence d'utilisation
+CGU_MESSAGE=<p>TXM est diffusé sous licence GNU GPL 2 &lt;<a href="https://www.gnu.org/licenses/gpl-2.0.fr.html">https://www.gnu.org/licenses/gpl-2.0.fr.html</a>
+CGU_CHECKMESSAGE=J'accepte la licence et je m'engage à citer TXM dans mes travaux de recherche \n(voir la section Citation de la page <http://textometrie.ens-lyon.fr/spip.php?rubrique61>)
+
+About_Menu_Label = О платформе TXM...
+
+AdapterFactory_0 = ** Предупреждение: корпус {0} поврежден. Некоторые команды могут быть недоступны или функционировать некорркетно.
+
+ERROR          = N/A_Error: 
+
+AssistedQueryWidget_0 = Ouvrir l'assistant de requêtes
+
+BackToText_0 = Показать в полнотекстовом режиме
+
+
+CQPPreferenceInitializer_0 = localhost
+CQPPreferenceInitializer_1 = anonymous
+
+CQPPreferencePage_0  = N/A_CQPlib path
+CQPPreferencePage_1  = Использовать сетевой протокол
+CQPPreferencePage_10 = Удаленный &сервер CWB
+CQPPreferencePage_11 = Удаленный сервер: &имя машины
+CQPPreferencePage_12 = Удаленный сервер: &номер порта
+CQPPreferencePage_13 = Удаленный сервер: &логин
+CQPPreferencePage_14 = Удаленный сервер: &пароль
+CQPPreferencePage_15 = Путь к исполняемому &файлу 'cqpserver'
+CQPPreferencePage_16 = Путь к папке &Регистр сервера CWB
+CQPPreferencePage_17 = Путь к файлу инициализации сервера CWB
+CQPPreferencePage_18 = Дополнительные опции сервера CWB: 
+
+Cannot_ask_simple_when_advance = Невозможно отобразить закладку простых опций, когда пользователь выбрал отображение дополнительных опций
+
+Commands_0 = Ошибка: невозможно инициализировать команды
+
+ComplexSortSelector_0 = Ключи для сортировки:
+ComplexSortSelector_1 = Мульти-сортировка
+ComplexSortSelector_2 = Сортировка
+ComplexSortSelector_5 = ** Ошибка при сортировке: {0}
+ComplexSortSelector_6 = по умолчанию
+
+ComplexSort_0         = Открытие диалогового окна сложной сортировки
+ComplexSort_1         = &Сложная сортировка
+ComplexSort_10        = Недопустимый блок сравнения
+ComplexSort_11        = Необходимо выбрать не менее двух блоков сравнения
+ComplexSort_12        = Добавить в выделенному
+ComplexSort_14        = Удалить из выделенного
+ComplexSort_16        = Поднять выделение на один уровень
+ComplexSort_18        = Опустить выделение на один уровень
+ComplexSort_2         = Задать и использовать сложную сортировку
+ComplexSort_3         = Выберите сложную сортировку
+ComplexSort_4         = &Новый
+ComplexSort_5         = Создать новый метод сортировки
+ComplexSort_6         = Имя: 
+ComplexSort_9         = Поле Имя обязательно.
+
+ComplexSubcorpusPanel_0  = Выделить
+ComplexSubcorpusPanel_1  = Все критерии
+ComplexSubcorpusPanel_16 = не содержит
+ComplexSubcorpusPanel_2  = отдельные критерии
+ComplexSubcorpusPanel_4  = Запрос 
+ComplexSubcorpusPanel_5  = Обновить
+
+ONE_RESULT           = Готово: один результат
+
+ConvertCorpus_0 = N/A_Corpus conversion failed.
+
+CorpusPage_0  = Издания
+CorpusPage_1  = Добавить издание
+CorpusPage_10 = Свойства слова
+CorpusPage_11 = Добавить определение свойства
+CorpusPage_12 = Добавить опредление свойства структуры
+CorpusPage_13 = Удалить определение свойства
+CorpusPage_14 = Подкорпуса и распределения по умолчанию
+CorpusPage_15 = Добавить подкорпус
+CorpusPage_16 = N/A_caract�res de ponctuations s�parateurs
+CorpusPage_17 = Удалить подкорпус
+CorpusPage_18 = Добавить распределение
+CorpusPage_19 = N/A_caract�res d'ellision
+CorpusPage_2  = Удалить издание
+CorpusPage_20 = Удалить распределение
+CorpusPage_21 = Добавить запрос
+CorpusPage_22 = N/A_caract�res de fin de phrase
+CorpusPage_23 = Удалить запрос
+CorpusPage_24 = Свойства структуры
+CorpusPage_25 = Добавить определение свойства структуры
+CorpusPage_26 = N/A_Annotate the corpus
+CorpusPage_27 = Удалить определение свойства структуры
+CorpusPage_28 = Использовать только эти тесты при словарной сегментации
+CorpusPage_29 = Добавить параметр
+CorpusPage_3  = Шрифт
+CorpusPage_31 = Удалить параметр
+CorpusPage_32 = Добавить тест
+CorpusPage_33 = Добавить параметр
+CorpusPage_34 = Удалить тест
+CorpusPage_35 = 1.\	Нажмите на значок 
+CorpusPage_36 = 'папка', чтобы 
+CorpusPage_37 = выбрать папку с исходными материалами.
+CorpusPage_38 = 2.\	Вы можете изменить параметры на следующих этапах.
+CorpusPage_39 = 3.\	Вы можете 
+CorpusPage_4  = Добавить параметр
+CorpusPage_40 = сохранить параметры импорта,
+CorpusPage_41 = \ нажав на значок дискеты: 
+CorpusPage_42 = 4.\	Чтобы
+CorpusPage_43 = начать импортирование,
+CorpusPage_44 = \ нажмите на этот значок: 
+CorpusPage_45 = ПИ
+CorpusPage_46 = Папка с исходными материалами не содержала файл 'import.xml'. Создан новый.
+CorpusPage_47 = Ошибка при создании файла 'import.xml' 
+CorpusPage_48 = Загрузка параметров импорта из файла: 
+CorpusPage_49 = N/A_Default
+CorpusPage_5  = N/A_caract�res blancs s�parateurs
+CorpusPage_50 = Параметры модуля: 
+CorpusPage_51 = Только эти тесты
+CorpusPage_52 = Сохранение параметров импорта...
+CorpusPage_53 = Имя корпуса обязательно
+CorpusPage_54 = Имя корпуса должно содержать хотя бы одну букву
+CorpusPage_55 = Только эти тесты
+CorpusPage_6  = Удалить параметр
+CorpusPage_60 = N/A_OK
+CorpusPage_61 = Edit XSL stylesheet...
+CorpusPage_65 = N/A_Cannot save import configuration. No source folder selected.
+CorpusPage_66 = N/A_Cannot start import configuration. No source folder selected.
+CorpusPage_7  = Общая информация
+CorpusPage_8  = Имя корпуса*
+CorpusPage_9  = Описание - HTML
+
+CreatePartitionDialog_0  = Создать Распределение
+CreatePartitionDialog_1  = Простое
+CreatePartitionDialog_16 = Запросы не должны быть пустыми
+CreatePartitionDialog_2  = &Структура: 
+CreatePartitionDialog_3  = С подсказкой
+CreatePartitionDialog_4  = С&войство: 
+CreatePartitionDialog_5  = Продвинутое
+CreatePartitionDialog_6  = &Имя: 
+CreatePartitionDialog_7  = &Часть 
+CreatePartitionDialog_8  = Не задана ни одна часть
+CreatePartitionDialog_9  = Имя распределения не вводилось. Автоматическое имя: {0}
+
+CreatePartition_0        = Создание распределения по {0}
+CreatePartition_2        = ** Ошибка: распределение не создано
+CreatePartition_5        = Готово: {0} пунктов на {1} употреблений
+CreatePartition_55       = N/A_Done: {0} items for {1} occurrences
+CreatePartition_6        = Готово: {0} частей
+
+CreateSubCorpus_0      = ** Ошибка: подкорпус не был создан
+CreateSubCorpus_2      = N/A_Failed to get last CQP error: 
+CreateSubCorpus_begin  = Новый &Подкорпус
+CreateSubCorpus_create = Создать новый подокорпус для {0}
+
+CreateSubcorpusDialog_0  = Создать подкорпус
+CreateSubcorpusDialog_10 = &Запрос: 
+CreateSubcorpusDialog_11 = Некорректное имя
+CreateSubcorpusDialog_13 = Некорректный запрос
+CreateSubcorpusDialog_14 = Поле Запрос не должно быть пустым.
+CreateSubcorpusDialog_6  = Зна&чение: 
+CreateSubcorpusDialog_8  = Имя подкорпуса создано автоматически.
+
+CreateSubcorpus_7        = Составление подкорпуса для {0}, структура {1}, свойство {2} : {3}
+CreateSubcorpus_8        = Готово : {0} образован 
+CreateSubcorpus_9        = Составление подкорпуса для {0} по запросу <{1}>
+
+DONE = Готово: {0}
+
+DefineReferencePattern_0 = Шаблон ссылок для отображения
+DefineReferencePattern_1 = Шаблон ссылок для &отображения
+DefineReferencePattern_2 = Шаблон ссылок для отображения
+DefineReferencePattern_3 = Шаблон ссылок для &сортировки
+DefineReferencePattern_4 = Шаблон ссылок для сортировки
+DefineReferencePattern_5 = Шаблон ссылок для сортировки
+
+DeleteInCorporaView_1 = ** Ошибка при удалении подкорпуса {0}
+DeleteInCorporaView_2 = ** Ошибка при удалении распределения {0}
+
+
+DiagnosticPreferencePage_1 = Описание
+DiagnosticPreferencePage_2 = Число отображаемых значений свойства
+DiagnosticPreferencePage_3 = Сортировать части по размеру
+
+Diagnostique_0  = Структурные единицы {0}
+Diagnostique_1  = Информация о {0} уже сформирована. Хотите ли Вы ее обновить?
+Diagnostique_10 = Получение информации о структурных единицах
+Diagnostique_11 = Открытие окна
+Diagnostique_2  = ** Ошибка при чтении файла *informations* 
+Diagnostique_7  = Создание окна с информацией
+Diagnostique_8  = Получение общей информации
+Diagnostique_9  = Получение данных о словарных единицах
+
+EmpantWidget_0 = Контекст: 
+EmpantWidget_1 = форма
+EmpantWidget_2 = структура
+EmpantWidget_3 = от -
+EmpantWidget_4 = до -
+EmpantWidget_5 = и от
+EmpantWidget_6 = до
+EmpantWidget_7 = вклюая структуру, содержащую мотив
+EmpantWidget_8 = Активный левый контекст
+EmpantWidget_9 = Активный правый контекст
+
+Error_creating_partition      = ** Ошибка во время создания распределения: {0}
+
+ExportCorpus_0 = ** Не удалось экспортировать корпу {0}
+ExportCorpus_3 = Экпортирование 
+ExportCorpus_4 = Готово, бинарный файл - {0} 
+
+InternalCorpusView_0 = ** Ошибка при подготовке информации о корпусе
+InternalCorpusView_1 = Перезагрузить
+InternalCorpusView_2 = ** Внутренняя ошибка: getText {0}
+
+Invalid_analysis_property = Некорректное свойство
+
+LastCQPError = Последняя ошибка CQP: 
+
+PartitionComposer_0  = Структура: 
+PartitionComposer_11 = Удалить
+PartitionComposer_2  = Выбрать значения для назначения: 
+PartitionComposer_3  = Новая часть
+PartitionComposer_5  = Часть
+PartitionComposer_6  = Удалить все части
+PartitionComposer_8  = Заголовок: 
+PartitionComposer_9  = Назначить
+
+Preferences_Menu_Label = Опции
+
+PropertiesSelector_0 = Не удается загрузить свойства корпуса {0} ({1})
+PropertiesSelector_1 = Свойства: 
+PropertiesSelector_2 = Править
+
+PropertySelector_0 = Выбрать свойство
+
+PurgeCorpora_0  = Осторожно! Эта команда приведет к удалению всех выделенных корпусов. Продолжить?
+PurgeCorpora_1  = Удаляемые корпуса 
+PurgeCorpora_10 = Создание нового рабочего пространства
+PurgeCorpora_12 = Перезагрузка платформы
+PurgeCorpora_13 = ** Ошибка: не удалось найти рабочее пространство: 
+PurgeCorpora_2  = ** Внимание! не были удалены корпуса: 
+PurgeCorpora_3  = Осторожно! Эта команда приведет к удалению всех корпусов. Продолжить?
+PurgeCorpora_4  = ** Ошибка: переменная окружения 'TXMHOME' не задана (ее значение по умолчанию -  '$HOME/TXM'). Работа прекращена.
+PurgeCorpora_5  = Удаление всех корпусов
+PurgeCorpora_7  = ** Не удалось удалить корпуса
+PurgeCorpora_9  = ** Не удалось удалить регистр
+
+QueriesView_1  = Экспортировать всё
+QueriesView_10 = ошибка: 
+QueriesView_5  = Запросы:\n
+
+QueryAssistDialog_0  = Мастер Запросов
+QueryAssistDialog_1  = Дополнительное слово
+QueryAssistDialog_10 = совпадает с
+QueryAssistDialog_11 = начинается с
+QueryAssistDialog_12 = заканчивается на
+QueryAssistDialog_13 = содержит
+QueryAssistDialog_2  = Я ищу: 
+QueryAssistDialog_3  = слово
+QueryAssistDialog_32 = за ним 
+QueryAssistDialog_33 = с интервалом не менее 0 слов
+QueryAssistDialog_34 = с интервалом не менее 1 слова
+QueryAssistDialog_8  = - Слово №
+
+
+RefreshingCorporaView = Обновление вида корпусов...
+
+
+
+SetContextSize_1 = Задать размер &контекстов
+SetContextSize_2 = Задать размер контекстов
+SetContextSize_3 = Размер левого контекста
+SetContextSize_4 = Размер правого контекста
+
+SetEncoding_0 = Изменить кодировку
+SetEncoding_1 = Изменить кодировку.\n\n\	Используемая кодировка: 
+SetEncoding_2 = \n\	Кодировка по умолчанию:  
+
+SetLineNumber_0 = Количество строк на странице
+SetLineNumber_1 = № строки
+
+SetSortProperty_1 = Задать свойство &Сортировки
+SetSortProperty_2 = Задать свойство сортировки
+SetSortProperty_3 = Сортировка свойств 
+
+ShowSelected_4 = Править свойство 'LANG'
+
+SortPropertySelection_0 = Сортировка свойств 
+
+Structure_field_not_empty = Поле Структура не должно быть пустым.
+
+Submit_0 = Сохранить
+
+TXMCqpServerWatcher_0 = Поисковая машина остановлена
+TXMCqpServerWatcher_1 = Пожалуйста, подождите, пока поисковая машина перезагружается...
+
+TXMRServeWatcher_0 = Статистическая машина остановлена
+TXMRServeWatcher_1 = Пожалуйста, подождите, пока статистическая машина перезагружается...
+TXMRServeWatcher_2 = Ok
+TXMRServeWatcher_3 = Перезагрузка вида корпусов...
+TXMRServeWatcher_4 = Пожалуйста, подождите...
+
+ViewPropertySelectionDialog_0 = Отображение свойств
+
+ViewPropertySelection_0       = Отображение свойств
\ No newline at end of file

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

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/CQPUIMessages.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/CQPUIMessages.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/CQPUIMessages.java	(revision 653)
@@ -0,0 +1,26 @@
+package org.txm.searchengine.cqp.rcp.messages;
+
+import org.txm.utils.messages.Utf8NLS;
+
+public class CQPUIMessages extends Utf8NLS {
+	
+	private static final String BUNDLE_NAME = "org.txm.searchengine.cqp.rcp.messages.messages"; //$NON-NLS-1$
+	
+	public static String CQPPreferenceInitializer_0;
+	public static String CQPPreferenceInitializer_1;
+	public static String CQPPreferencePage_0;
+	public static String CQPPreferencePage_1;
+	public static String CQPPreferencePage_10;
+	public static String CQPPreferencePage_11;
+	public static String CQPPreferencePage_12;
+	public static String CQPPreferencePage_13;
+	public static String CQPPreferencePage_14;
+	public static String CQPPreferencePage_15;
+	public static String CQPPreferencePage_16;
+	public static String CQPPreferencePage_17;
+	public static String CQPPreferencePage_18;
+	
+	static {
+		Utf8NLS.initializeMessages(CQPUIMessages.class);
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/CQPUIMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages_fr.properties	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/messages/messages_fr.properties	(revision 653)
@@ -0,0 +1,306 @@
+﻿#Generated by ResourceBundle Editor (http://essiembre.github.io/eclipse-rbe/)
+#Eclipse modern messages class
+#Mon Feb 10 10:26:04 CET 2014
+
+OK=OK
+REFRESH=Rafraîchir
+CGU_TITLE=Licence d'utilisation
+CGU_MESSAGE=<p>TXM est diffusé sous licence GNU GPL 2 &lt;<a href="https://www.gnu.org/licenses/gpl-2.0.fr.html">https://www.gnu.org/licenses/gpl-2.0.fr.html</a>
+CGU_CHECKMESSAGE=J'accepte la licence et je m'engage à citer TXM dans mes travaux de recherche \n(voir la section Citation de la page <http://textometrie.ens-lyon.fr/spip.php?rubrique61>)
+
+About_Menu_Label = À propos de TXM...
+
+AdapterFactory_0 = ** Avertissement : le corpus {0} est corrompu. Certaines commandes ne fonctionneront pas correctement.
+
+
+ERROR                           = Erreur: 
+
+AssistedQueryWidget_0 = Ouvrir l'assistant de requêtes
+
+CQPPreferenceInitializer_0 = localhost
+CQPPreferenceInitializer_1 = anonymous
+
+CQPPreferencePage_0  = Chemin vers CQPlib
+CQPPreferencePage_1  = Utiliser le protocole réseau
+CQPPreferencePage_10 = &Serveur CWB distant
+CQPPreferencePage_11 = Serveur distant : nom de machine
+CQPPreferencePage_12 = Serveur distant : numéro de &port
+CQPPreferencePage_13 = Serveur distant : &login
+CQPPreferencePage_14 = Serveur distant : &mot de passe
+CQPPreferencePage_15 = Chemin vers le fichier &exécutable 'cqpserver'
+CQPPreferencePage_16 = Chemin vers le dossier de &Registre du serveur CWB
+CQPPreferencePage_17 = Chemin vers le fichier d'initialisation du serveur CWB
+CQPPreferencePage_18 = Options additionnelles pour le serveur CWB : 
+
+Cannot_ask_simple_when_advance = Impossible d'afficher l'onglet des options simples quand l'utilisateur a sélectionné l'affichage des options avancées
+
+ComplexSortSelector_0 = Clés de tri : 
+ComplexSortSelector_1 = Tri multiple : 
+ComplexSortSelector_2 = Tri
+ComplexSortSelector_5 = ** Erreur pendant le tri : {0}
+ComplexSortSelector_6 = par défaut
+
+ComplexSort_0         = Ouverture de la boite de dialogue du tri composé
+ComplexSort_1         = &Tri composé
+ComplexSort_10        = Comparateur invalide
+ComplexSort_11        = Il faut sélectionner au moins deux comparateurs
+ComplexSort_12        = Ajouter à la sélection
+ComplexSort_14        = Retirer de la sélection
+ComplexSort_16        = Monter d'un cran la sélection
+ComplexSort_18        = Descendre d'un cran la sélection
+ComplexSort_2         = Définir et utiliser un tri composé
+ComplexSort_3         = Sélectionnez un tri composé
+ComplexSort_4         = &Nouveau
+ComplexSort_5         = Créer une nouvelle méthode de tri
+ComplexSort_6         = Nom : 
+ComplexSort_9         = Le champ Nom est obligatoire.
+
+ComplexSubcorpusPanel_0  = Sélectionner
+ComplexSubcorpusPanel_1  = Tous les critères
+ComplexSubcorpusPanel_16 = ne contient pas
+ComplexSubcorpusPanel_2  = certains critères
+ComplexSubcorpusPanel_4  = Requête 
+ComplexSubcorpusPanel_5  = Rafraîchir
+
+ComputeCoocFromLines_0 = Calcul des cooccurrents en cours
+ComputeCoocFromLines_1 = Ouverture du tableau de cooccurrents
+
+
+ONE_RESULT           = Terminé : un résultat.
+
+ConvertCorpus_0 = La conversion du corpus a échoué.
+
+
+CreatePartitionDialog_0  = Créer une Partition
+CreatePartitionDialog_1  = Simple
+CreatePartitionDialog_16 = Les requêtes ne doivent pas être vides
+CreatePartitionDialog_2  = &Structure : 
+CreatePartitionDialog_3  = Assisté
+CreatePartitionDialog_4  = &Propriété : 
+CreatePartitionDialog_5  = Avancé
+CreatePartitionDialog_6  = &Nom : 
+CreatePartitionDialog_7  = Partie 
+CreatePartitionDialog_8  = Aucune partie définie
+CreatePartitionDialog_9  = Le nom de la partition n''a pas été précisé. Le nom est {0}
+
+CreatePartition_0        = Création d''une partition sur {0}
+CreatePartition_2        = ** Erreur : la partition n'a pas été créé
+CreatePartition_5        = Terminé : {0} items pour {1} occurrences.
+CreatePartition_55       = Terminé : {0} items pour {1} occurrences.
+CreatePartition_6        = Terminé : {0} parties
+
+CreateSubCorpus_0      = ** Erreur : le sous-corpus n'a pas été créé
+CreateSubCorpus_2      = Erreur lors de la récupération de la dernière erreur CQP : 
+CreateSubCorpus_begin  = Nouveau &Sous-corpus
+CreateSubCorpus_create = Créer un nouveau sous-corpus de {0}
+
+CreateSubcorpusDialog_0  = Créer un sous-corpus
+CreateSubcorpusDialog_10 = &Requête : 
+CreateSubcorpusDialog_11 = Nom incorrect
+CreateSubcorpusDialog_13 = Requête invalide
+CreateSubcorpusDialog_14 = Le champ Requête ne doit pas être vide.
+CreateSubcorpusDialog_6  = &Valeur : 
+CreateSubcorpusDialog_8  = Un nom de sous-corpus a été généré.
+
+CreateSubcorpus_7        = Calcul d''un sous-corpus de {0}, structure {1}, propriété {2} : {3}
+CreateSubcorpus_8        = Terminé : {0} a été créé  
+CreateSubcorpus_9        = Calcul d''un sous-corpus de {0} avec la requête <{1}>
+
+DONE = Terminé : {0}
+
+DefineReferencePattern_0 = Options d'affichage des références
+DefineReferencePattern_1 = Options d'&affichage des références
+DefineReferencePattern_2 = Options d'affichage des références
+DefineReferencePattern_3 = Options de &tri des références
+DefineReferencePattern_4 = Options de tri des références
+DefineReferencePattern_5 = Options de tri des références
+
+DeleteInCorporaView_1 = ** Erreur lors de la suppression du sous-corpus {0}
+DeleteInCorporaView_2 = ** Erreur lors de la suppression de la partition {0}
+
+DeleteLines_0 = Le tableau doit comporter au moins une ligne
+DeleteLines_1 = Sûr(e) ?
+
+DiagnosticPreferencePage_1 = Description
+DiagnosticPreferencePage_2 = Nombre de valeurs de propriété affiché
+DiagnosticPreferencePage_3 = Ordonner les parties par taille
+
+Diagnostique_0  = Unités de structure de {0}
+Diagnostique_1  = Les informations de {0} ont déjà été calculées. Souhaitez vous les recalculer ?
+Diagnostique_10 = Récupération des informations sur les unités de structure
+Diagnostique_11 = Ouverture de la fenêtre...
+Diagnostique_2  = ** Échec de lecture du fichier *informations* de 
+Diagnostique_7  = Création de la fenêtre d'informations
+Diagnostique_8  = Récupération des informations générales
+Diagnostique_9  = Récupération des données sur les unités lexicales
+
+EmpantWidget_0 = Contexte : 
+EmpantWidget_1 = forme
+EmpantWidget_2 = structure
+EmpantWidget_3 = de -
+EmpantWidget_4 = à -
+EmpantWidget_5 = et de
+EmpantWidget_6 = à
+EmpantWidget_7 = inclure la structure contenant le pivot
+EmpantWidget_8 = Contexte gauche actif
+EmpantWidget_9 = Contexte droit actif
+
+Exit_Menu_Label = Quitter
+
+ExportAnnotation_0 = Exportation des annotations
+
+ExportCorpus_0 = ** Échec de l''exportation du corpus {0}
+ExportCorpus_3 = Exportation de {0}. Cela peut prendre du temps en fonction de la taille du corpus.
+ExportCorpus_4 = Terminé, le fichier binaire créé est {0}
+
+InternalCorpusView_0 = ** Erreur lors du calcul des informations du corpus
+InternalCorpusView_1 = Recharger
+InternalCorpusView_2 = ** Erreur interne : getText {0}
+
+Invalid_analysis_property = Propriété invalide
+
+LastCQPError = Dernière erreur CQP : 
+
+NavigationWidget_0 = Erreur lors de la récupération des données à l'indice : 
+
+NumberOfLines = Nombre de lignes :
+
+OpenEmptyEditor_2 = ** Bibliographie : dossier {0} introuvable
+
+OpenTXMUserPreferences_0 = Paramètres par défaut
+
+
+PartitionComposer_0  = Structure : 
+PartitionComposer_11 = Supprimer
+PartitionComposer_2  = Sélectionner les valeurs à affecter : 
+PartitionComposer_3  = Nouvelle partie
+PartitionComposer_5  = Partie
+PartitionComposer_6  = Supp. toutes les parties
+PartitionComposer_8  = Titre : 
+PartitionComposer_9  = Affecter
+
+PartsSize_0  = Trier par taille
+PartsSize_10 = Dimensions de la partition {0} du corpus {1}
+PartsSize_2  = Nombre de mots par partie
+
+PasteFile_1 = ** Erreur lors de la copie  
+PasteFile_3 = ** Échec de la suppression
+PasteFile_4 = : 
+
+Preferences_Menu_Label = Préférences
+
+
+PropertiesSelector_0 = Impossible de charger les propriétés du corpus {0} ({1})
+PropertiesSelector_1 = Propriétés : 
+PropertiesSelector_2 = Editer
+
+Property = Propriétés :
+
+PropertySelector_0 = Sélectionner une propriété
+
+PurgeCorpora_0  = Attention ! Cette commande va supprimer tous les corpus sélectionnés. Continuer ?
+PurgeCorpora_1  = Corpus à supprimer 
+PurgeCorpora_10 = Création d'un nouvel espace de travail
+PurgeCorpora_12 = Redémarrage de la plateforme
+PurgeCorpora_13 = ** Erreur : espace de travail introuvable : 
+PurgeCorpora_2  = ** Attention : corpus non supprimés : 
+PurgeCorpora_3  = Attention ! Cette commande va supprimer tous les corpus. Continuer ?
+PurgeCorpora_4  = ** Erreur : la variable d'environnement 'TXMHOME' n'est pas configurée (sa valeur standard est '$HOME/TXM'). Abandon.
+PurgeCorpora_5  = Supprime tous les corpus
+PurgeCorpora_7  = ** Échec de la suppression des corpus
+PurgeCorpora_9  = ** Échec de la suppression du registre
+
+QueriesView_1  = Tout exporter
+QueriesView_10 = erreur : 
+QueriesView_5  = Requêtes :\n
+
+QueryAssistDialog_0  = Assistant de Requête
+QueryAssistDialog_1  = Mot supplémentaire
+QueryAssistDialog_10 = correspond à
+QueryAssistDialog_11 = commence par
+QueryAssistDialog_12 = se termine par
+QueryAssistDialog_13 = contient
+QueryAssistDialog_2  = Je recherche : 
+QueryAssistDialog_3  = mot
+QueryAssistDialog_32 = suivi de 
+QueryAssistDialog_33 = séparé d'au moins 0 mot
+QueryAssistDialog_34 = séparé d'au moins 1 mot
+QueryAssistDialog_8  = un mot dont
+
+
+RefreshingCorporaView = Mise à jour de la vue des corpus...
+
+RenameFile_0 = Renommer le fichier
+RenameFile_2 = Renommage par : 
+RenameFile_3 = ** Échec du renommage 
+
+RestartTXM_0 = Rechargement des vues...
+RestartTXM_1 = Redémarrer TXM
+
+RunGroovyScript_0  = Exécution du script
+RunGroovyScript_1  = &Exécuter un script
+RunGroovyScript_10 = Répertoire de sources :
+RunGroovyScript_2  = Exécuter un script
+RunGroovyScript_3  = *.groovy
+RunGroovyScript_4  = Erreur lors de l''ouverture du script groovy : {0}
+RunGroovyScript_8  = ** Erreur lors de l''exécution du script groovy : {0}
+RunGroovyScript_9  = Exécution du script
+
+SEARCH = &Искать
+
+SVGGraphicEditor_1 = Impossible d'afficher un graphique avec les informations fournies.
+
+SaveAs_2 = ** Échec de la sauvegarde 
+
+ScriptPreferencePage_0 = Prochain numéro de session 
+ScriptPreferencePage_3 = Dossier &racine
+
+SetContextSize_1 = Options d'affichage des &contextes
+SetContextSize_2 = Options d'affichage des contextes
+SetContextSize_3 = Taille du contexte gauche
+SetContextSize_4 = Taille du contexte droit
+
+SetEncoding_0 = Changer l'encodage des caractères
+SetEncoding_1 = Changer l'encodage des caractères.\n\n\	Encodage actuel : 
+SetEncoding_2 = \n\	Encodage par défaut :  
+
+SetLineNumber_0 = Options de pagination
+SetLineNumber_1 = Lignes par page : 
+
+SetSortProperty_1 = Options de tri
+SetSortProperty_2 = Options de tri
+SetSortProperty_3 = Options de tri
+
+ShowSelected_4 = Régler la propriété 'LANG'
+
+SingularValuesEditor_0 = Entrée erronée
+
+SortPropertySelection_0 = Options de tri
+
+Structure_field_not_empty = Le champ structure ne doit pas être vide.
+
+Submit_0 = Enregistrer
+
+TXMCqpServerWatcher_0 = Le moteur de recherche est arrêté
+TXMCqpServerWatcher_1 = Veuillez attendre que le moteur de recherche ai redémarré...
+
+TXMRServeWatcher_0 = Le moteur statistique est arrêté
+TXMRServeWatcher_1 = Veuillez attendre que le moteur statistique ai redémarré...
+TXMRServeWatcher_2 = Ok
+TXMRServeWatcher_3 = Rechargement de la vue des corpus...
+TXMRServeWatcher_4 = Veuillez patienter...
+
+TablableVector_0 = Les deux tables doivent être de même taille.
+
+TableEditor_0 = Impossible d'afficher un tableau avec les informations fournies
+
+TableKeyListener_1 = Saisissez l'expression régulière de votre recherche
+TableKeyListener_6 = Lignes copiées : \n
+
+TxmCommand_1 = Chargement de l'extension 
+
+UIParameterException_0 = Erreur  
+
+ViewPropertySelectionDialog_0 = Options d'affichage
+
+ViewPropertySelection_0       = Options d'affichage

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

Index: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/editors/InformationEditor.java
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/editors/InformationEditor.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/editors/InformationEditor.java	(revision 653)
@@ -0,0 +1,80 @@
+package org.txm.searchengine.cqp.rcp.editors;
+
+import java.io.File;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.layout.RowData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Spinner;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.PartInitException;
+import org.txm.rcp.editors.TXMEditor;
+import org.txm.searchengine.cqp.CQPPreferences;
+import org.txm.searchengine.cqp.core.functions.information.Information;
+
+public class InformationEditor extends TXMEditor<Information> {
+
+	private Spinner maxScore;
+	private Browser browser;
+	protected Information diag;
+
+	@Override
+	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
+		super.init(site, input);
+		if (getResult() instanceof Information)
+			this.diag = (Information) getResult();
+	}
+	
+	@Override
+	public void _createPartControl(Composite parent) {
+//		super.createPartControl(parent);
+		
+		Composite parametersArea = getCommandParametersGroup();
+		
+		new Label(parametersArea, SWT.NONE).setText("V max");
+
+		maxScore = new Spinner(parametersArea, SWT.BORDER);
+		maxScore.setToolTipText("The maximum number of word property values to show");
+		maxScore.setMinimum(0);
+		maxScore.setSelection(CQPPreferences.getInt(CQPPreferences.MAXVALUE, CQPPreferences.PREFERENCES_NODE));
+		RowData gdata = new RowData();
+		gdata.width = 100;
+		maxScore.setLayoutData(gdata);
+		maxScore.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				compute(true);
+			}
+			
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) { }
+		});
+		
+		Composite displayArea = getResultArea();
+		displayArea.setLayout(new GridLayout(1, true));
+		
+		browser = new Browser(displayArea, SWT.NONE);
+		browser.setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, true));
+	}
+	
+	@Override
+	public void updateEditorFromResult(boolean update) {
+		File file = diag.getHTMLFile();
+		if (file.exists()) {
+			browser.setUrl(file.getAbsolutePath());
+		}
+	}
+
+	@Override
+	public void updateResultFromEditor() {
+		if (!maxScore.isDisposed())
+			this.diag.setParameters(maxScore.getSelection());
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.rcp/src/org/txm/searchengine/cqp/rcp/editors/InformationEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.rcp/icons/functions/diagnostique.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Index: tmp/org.txm.searchengine.cqp.rcp/icons/functions/biblio.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.searchengine.cqp.rcp/icons/functions/biblio.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.searchengine.cqp.rcp/icons/functions/delete.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.searchengine.cqp.rcp/icons/functions/delete.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.searchengine.cqp.rcp/icons/functions/information.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.searchengine.cqp.rcp/icons/functions/information.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.searchengine.cqp.rcp/icons/functions/subcorpus.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.searchengine.cqp.rcp/icons/functions/subcorpus.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.searchengine.cqp.rcp/icons/functions/partition.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.searchengine.cqp.rcp/icons/functions/partition.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.searchengine.cqp.rcp/icons/functions/compress.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream

Property changes on: tmp/org.txm.searchengine.cqp.rcp/icons/functions/compress.png
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream

Index: tmp/org.txm.searchengine.cqp.rcp/plugin.xml
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/plugin.xml	(revision 653)
@@ -5,18 +5,18 @@
          point="org.eclipse.ui.commands">
          <command
             categoryId="org.eclipse.ui.category.navigate"
-            defaultHandler="org.txm.rcp.commands.base.OpenBiblio"
-            id="org.txm.rcp.commands.base.OpenBiblio"
+            defaultHandler="org.txm.searchengine.cqp.rcp.handlers.base.OpenBiblio"
+            id="org.txm.searchengine.cqp.rcp.handlers.base.OpenBiblio"
             name="%command.name.63">
       </command>
             <command
-            defaultHandler="org.txm.rcp.commands.base.ExportCorpus"
-            id="org.txm.rcp.commands.base.ExportCorpus"
+            defaultHandler="org.txm.searchengine.cqp.rcp.handlers.base.ExportCorpus"
+            id="org.txm.searchengine.cqp.rcp.handlers.base.ExportCorpus"
             name="%command.name.52">
       </command>
       <command
-            defaultHandler="org.txm.rcp.commands.base.CreatePartition"
-            id="org.txm.rcp.commands.base.CreatePartition"
+            defaultHandler="org.txm.searchengine.cqp.rcp.handlers.base.CreatePartition"
+            id="org.txm.searchengine.cqp.rcp.handlers.base.CreatePartition"
             name="%command.name.2">
          <commandParameter
                id="CorpusParameter"
@@ -25,8 +25,8 @@
          </commandParameter>
       </command>
       <command
-            defaultHandler="org.txm.rcp.commands.base.CreateSubCorpus"
-            id="org.txm.rcp.commands.base.CreateSubCorpus"
+            defaultHandler="org.txm.searchengine.cqp.rcp.handlers.base.CreateSubCorpus"
+            id="org.txm.searchengine.cqp.rcp.handlers.base.CreateSubCorpus"
             name="Subcorpus">
          <commandParameter
                id="CorpusParameter"
@@ -35,8 +35,8 @@
          </commandParameter>
       </command>
       <command
-            defaultHandler="org.txm.searchengine.cqp.rcp.command.ComputeDiagnostic"
-            id="org.txm.searchengine.cqp.rcp.command.ComputeDiagnostic"
+            defaultHandler="org.txm.searchengine.cqp.rcp.handlers.ComputeInformation"
+            id="org.txm.searchengine.cqp.rcp.handlers.ComputeInformation"
             name="Information">
       </command>
    </extension>
@@ -71,7 +71,7 @@
          </separator>
          <command
                commandId="org.txm.rcp.commands.base.DeleteInCorpora"
-               icon="icons/functions/Delete.png"
+               icon="icons/functions/delete.png"
                label="%command.label.65"
                style="push"
                tooltip="%command.tooltip.33">
@@ -109,8 +109,8 @@
             </visibleWhen>
          </command>
          <command
-               commandId="org.txm.rcp.commands.base.OpenBiblio"
-               icon="icons/functions/Biblio.png"
+               commandId="org.txm.searchengine.cqp.rcp.handlers.base.OpenBiblio"
+               icon="icons/functions/biblio.png"
                label="%command.label.148"
                style="push"
                tooltip="%command.tooltip.91">
@@ -130,8 +130,8 @@
       <menuContribution
             locationURI="popup:corporaview.menu.file.export">
          <command
-               commandId="org.txm.rcp.commands.base.ExportCorpus"
-               icon="icons/functions/Compress.png"
+               commandId="org.txm.searchengine.cqp.rcp.handlers.base.ExportCorpus"
+               icon="icons/functions/compress.png"
                label="%command.name.52"
                style="push"
                tooltip="%command.tooltip.71">
@@ -146,8 +146,8 @@
       <menuContribution
             locationURI="menu:menu.file.export">
          <command
-               commandId="org.txm.rcp.commands.base.ExportCorpus"
-               icon="icons/functions/Compress.png"
+               commandId="org.txm.searchengine.cqp.rcp.handlers.base.ExportCorpus"
+               icon="icons/functions/compress.png"
                label="%command.name.52"
                style="push"
                tooltip="%command.tooltip.67">
@@ -163,8 +163,8 @@
             allPopups="true"
             locationURI="toolbar:org.txm.rcp.toolbarfile">
             <command
-                  commandId="org.txm.rcp.commands.base.ExportCorpus"
-                  icon="icons/functions/Compress.png"
+                  commandId="org.txm.searchengine.cqp.rcp.handlers.base.ExportCorpus"
+                  icon="icons/functions/compress.png"
                   label="%command.name.52"
                   style="push"
                   tooltip="%command.tooltip.71">
@@ -177,12 +177,10 @@
             </command>
       </menuContribution>
       <menuContribution
-            locationURI="toolbar:org.txm.rcp.toolbarcorpus">
+            locationURI="toolbar:org.txm.rcp.toolbarcorpus?after=org.txm.synopticedition.rcp.handlers.OpenEdition">
             <command
-                  commandId="org.txm.searchengine.cqp.rcp.command.ComputeDiagnostic"
-                  icon="icons/functions/diagnostique.png"
-                  id="menu.corpus.description"
-                  label="%command.label.48"
+                  commandId="org.txm.searchengine.cqp.rcp.handlers.ComputeInformation"
+                  icon="icons/functions/information.png"
                   style="push"
                   tooltip="%command.tooltip.60">
                <visibleWhen
@@ -193,9 +191,8 @@
                </visibleWhen>
             </command>
          <command
-               commandId="org.txm.rcp.commands.base.CreateSubCorpus"
-               icon="icons/functions/SubCorpus.png"
-               label="Subcorpus"
+               commandId="org.txm.searchengine.cqp.rcp.handlers.base.CreateSubCorpus"
+               icon="icons/functions/subcorpus.png"
                style="push">
             <visibleWhen
                   checkEnabled="false">
@@ -205,9 +202,8 @@
             </visibleWhen>
          </command>
                         <command
-                  commandId="org.txm.rcp.commands.base.CreatePartition"
-                  icon="icons/functions/Partition.png"
-                  label="%command.label.8"
+                  commandId="org.txm.searchengine.cqp.rcp.handlers.base.CreatePartition"
+                  icon="icons/functions/partition.png"
                   style="push"
                   tooltip="%command.tooltip.4">
                <visibleWhen
@@ -221,12 +217,9 @@
       <menuContribution
             locationURI="popup:org.txm.rcp.views.corpora.CorporaView">
             <command
-                  commandId="org.txm.searchengine.cqp.rcp.command.ComputeDiagnostic"
-                  icon="icons/functions/diagnostique.png"
-                  id="menu.corpus.description"
-                  label="%command.label.48"
-                  style="push"
-                  tooltip="%command.tooltip.60">
+                  commandId="org.txm.searchengine.cqp.rcp.handlers.ComputeInformation"
+                  icon="icons/functions/information.png"
+                  style="push">
                <visibleWhen
                      checkEnabled="false">
                   <reference
@@ -235,9 +228,8 @@
                </visibleWhen>
             </command>
          <command
-               commandId="org.txm.rcp.commands.base.CreateSubCorpus"
-               icon="icons/functions/SubCorpus.png"
-               label="Subcorpus"
+               commandId="org.txm.searchengine.cqp.rcp.handlers.base.CreateSubCorpus"
+               icon="icons/functions/subcorpus.png"
                style="push">
             <visibleWhen
                   checkEnabled="false">
@@ -247,11 +239,9 @@
             </visibleWhen>
          </command>
          <command
-               commandId="org.txm.rcp.commands.base.CreatePartition"
-               icon="icons/functions/Partition.png"
-               label="%command.label.8"
-               style="push"
-               tooltip="%command.tooltip.4">
+               commandId="org.txm.searchengine.cqp.rcp.handlers.base.CreatePartition"
+               icon="icons/functions/partition.png"
+               style="push">
             <visibleWhen
                   checkEnabled="false">
                <reference
@@ -263,12 +253,9 @@
       <menuContribution
             locationURI="menu:menu.corpus">
             <command
-                  commandId="org.txm.searchengine.cqp.rcp.command.ComputeDiagnostic"
-                  icon="icons/functions/diagnostique.png"
-                  id="menu.corpus.description"
-                  label="%command.label.48"
-                  style="push"
-                  tooltip="%command.tooltip.60">
+                  commandId="org.txm.searchengine.cqp.rcp.handlers.ComputeInformation"
+                  icon="icons/functions/information.png"
+                  style="push">
                <visibleWhen
                      checkEnabled="false">
                   <reference
@@ -277,9 +264,8 @@
                </visibleWhen>
             </command>
          <command
-               commandId="org.txm.rcp.commands.base.CreateSubCorpus"
-               icon="icons/functions/SubCorpus.png"
-               label="Subcorpus"
+               commandId="org.txm.searchengine.cqp.rcp.handlers.base.CreateSubCorpus"
+               icon="icons/functions/subcorpus.png"
                style="push">
             <visibleWhen
                   checkEnabled="false">
@@ -289,11 +275,9 @@
             </visibleWhen>
          </command>
          <command
-               commandId="org.txm.rcp.commands.base.CreatePartition"
-               icon="icons/functions/Partition.png"
-               label="%command.label.8"
-               style="push"
-               tooltip="%command.tooltip.4">
+               commandId="org.txm.searchengine.cqp.rcp.handlers.base.CreatePartition"
+               icon="icons/functions/partition.png"
+               style="push">
             <visibleWhen
                   checkEnabled="false">
                <reference
@@ -315,18 +299,18 @@
    <extension
          point="org.eclipse.ui.editors">
       <editor
-            class="org.txm.searchengine.cqp.rcp.editor.DiagnosticEditor"
+            class="org.txm.searchengine.cqp.rcp.editors.InformationEditor"
             default="false"
-            icon="icons/functions/Biblio.png"
-            id="org.txm.searchengine.cqp.rcp.editor.DiagnosticEditor"
-            name="Diagnostic">
+            icon="icons/functions/biblio.png"
+            id="org.txm.searchengine.cqp.rcp.editors.InformationEditor"
+            name="Information">
       </editor>
    </extension>
    <extension
          point="org.eclipse.core.runtime.adapters">
       <factory
-            adaptableType="org.txm.functions.diagnostic.Diagnostic"
-            class="org.txm.searchengine.cqp.rcp.command.DiagnosticAdapterFactory">
+            adaptableType="org.txm.searchengine.cqp.core.functions.information.Information"
+            class="org.txm.searchengine.cqp.rcp.adapters.InformationAdapterFactory">
          <adapter
                type="org.eclipse.ui.model.IWorkbenchAdapter">
          </adapter>
Index: tmp/org.txm.searchengine.cqp.rcp/.settings/org.eclipse.core.resources.prefs
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/.settings/org.eclipse.core.resources.prefs	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/.settings/org.eclipse.core.resources.prefs	(revision 653)
@@ -1,3 +1,3 @@
 eclipse.preferences.version=1
-encoding//src/org/txm/searchengine/cqp/rcp/messages_fr.properties=UTF-8
-encoding//src/org/txm/searchengine/cqp/rcp/messages_ru.properties=UTF-8
+encoding//src/org/txm/searchengine/cqp/rcp/messages/messages_fr.properties=UTF-8
+encoding//src/org/txm/searchengine/cqp/rcp/messages/messages_ru.properties=UTF-8
Index: tmp/org.txm.searchengine.cqp.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.searchengine.cqp.rcp/META-INF/MANIFEST.MF	(revision 652)
+++ tmp/org.txm.searchengine.cqp.rcp/META-INF/MANIFEST.MF	(revision 653)
@@ -11,8 +11,9 @@
  org.eclipse.core.commands;bundle-version="3.6.100",
  org.eclipse.ui.workbench;bundle-version="3.106.2",
  org.eclipse.ui
-Export-Package: org.txm.rcp.commands.base,
- org.txm.searchengine.cqp.rcp,
- org.txm.searchengine.cqp.rcp.command,
- org.txm.searchengine.cqp.rcp.editor,
+Export-Package: org.txm.searchengine.cqp.rcp.adapters,
+ org.txm.searchengine.cqp.rcp.editors,
+ org.txm.searchengine.cqp.rcp.handlers,
+ org.txm.searchengine.cqp.rcp.handlers.base,
+ org.txm.searchengine.cqp.rcp.messages,
  org.txm.searchengine.cqp.rcp.preferences
Index: tmp/org.txm.utils/src/org/txm/utils/messages/Utf8NLS.java
===================================================================
--- tmp/org.txm.utils/src/org/txm/utils/messages/Utf8NLS.java	(revision 652)
+++ tmp/org.txm.utils/src/org/txm/utils/messages/Utf8NLS.java	(revision 653)
@@ -2,8 +2,6 @@
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
 
 import org.eclipse.osgi.util.NLS;
 
@@ -25,7 +23,7 @@
 	 */
 	public static void initializeMessages(final Class<?> clazz) {
 		// initialize resource bundle
-		initializeMessages(clazz.getPackage().getName()+".messages", clazz);
+		initializeMessages(clazz.getPackage().getName() + ".messages", clazz); //$NON-NLS-1$
 	}
 	
 	/**
@@ -53,7 +51,7 @@
 				field.setAccessible(true);
 			try {
 				final String rawValue = (String) field.get(null);
-				field.set(null, new String(rawValue.getBytes("ISO-8859-1"), "UTF-8"));
+				field.set(null, new String(rawValue.getBytes("ISO-8859-1"), "UTF-8")); //$NON-NLS-1$ //$NON-NLS-2$
 			}
 			catch(Exception e) {
 				//	e.printStackTrace();
Index: tmp/org.txm.synopticeditor.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.synopticeditor.rcp/META-INF/MANIFEST.MF	(revision 652)
+++ tmp/org.txm.synopticeditor.rcp/META-INF/MANIFEST.MF	(revision 653)
@@ -3,7 +3,6 @@
 Bundle-Name: %Bundle-Name
 Bundle-SymbolicName: org.txm.synopticeditor.rcp;singleton:=true
 Bundle-Version: 1.0.0.qualifier
-Bundle-Activator: synopticeditor.Activator
 Require-Bundle: org.txm.concordance.rcp;bundle-version="1.0.0",
  org.txm.core;bundle-version="0.7.0",
  org.eclipse.ui,
@@ -16,8 +15,9 @@
  org.txm.searchengine.cqp.core;bundle-version="1.1.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
-Export-Package: org.txm.rcp.synoptic.commands,
- org.txm.rcp.synoptic.editor,
- org.txm.rcp.synoptic.editor.ext,
- synopticeditor
+Export-Package: org.txm.synopticedition.rcp.editors,
+ org.txm.synopticedition.rcp.editors.ext,
+ org.txm.synopticedition.rcp.handlers,
+ org.txm.synopticedition.rcp.messages,
+ org.txm.synopticedition.rcp.preferences
 Bundle-Vendor: Textometrie.org
Index: tmp/org.txm.synopticeditor.rcp/schema/org.txm.synopticeditor.toolbarbutton.exsd
===================================================================
--- tmp/org.txm.synopticeditor.rcp/schema/org.txm.synopticeditor.toolbarbutton.exsd	(revision 652)
+++ tmp/org.txm.synopticeditor.rcp/schema/org.txm.synopticeditor.toolbarbutton.exsd	(revision 653)
@@ -55,7 +55,7 @@
                   
                </documentation>
                <appinfo>
-                  <meta.attribute kind="java" basedOn="org.txm.rcp.synoptic.editor.ext.ToolbarButton:"/>
+                  <meta.attribute kind="java" basedOn="org.txm.synopticedition.rcp.editors.ext.ToolbarButton:"/>
                </appinfo>
             </annotation>
          </attribute>
Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/handlers/BackToText.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/handlers/BackToText.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/handlers/BackToText.java	(revision 653)
@@ -0,0 +1,271 @@
+// 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.synopticedition.rcp.handlers;
+
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+
+import javax.sound.sampled.Line;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.txm.concordance.core.functions.Concordance;
+import org.txm.concordance.rcp.editors.ConcordanceEditor;
+import org.txm.concordance.rcp.handlers.BackToTextCommand;
+import org.txm.objects.Text;
+import org.txm.rcp.StatusLine;
+import org.txm.rcp.utils.SWTEditorsUtils;
+import org.txm.searchengine.cqp.AbstractCqiClient;
+import org.txm.searchengine.cqp.CQPEngine;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.Property;
+import org.txm.searchengine.cqp.corpus.StructuralUnit;
+import org.txm.searchengine.cqp.corpus.query.Match;
+import org.txm.synopticedition.rcp.editors.SynopticEditionEditor;
+import org.txm.synopticedition.rcp.editors.EditionPanel.RGBA;
+import org.txm.synopticedition.rcp.messages.SynopticEditionUIMessages;
+import org.txm.utils.logger.Log;
+
+import cern.colt.Arrays;
+
+/**
+ * Open a text edition from: a concordance Line 
+ * @author mdecorde.
+ */
+public class BackToText extends BackToTextCommand {
+
+	/** The Constant ID. */
+	public final static String ID = "org.txm.synopticedition.rcp.handlers.BackToText"; //$NON-NLS-1$
+	public final static RGBA lightred = new RGBA(249,208,208);
+	public final static RGBA red = new RGBA(249, 160, 160);
+	//TODO: this kind of link associations must be transfered to a TXMEditor class
+	private static HashMap<ConcordanceEditor, SynopticEditionEditor> associatedEditors = new HashMap<ConcordanceEditor, SynopticEditionEditor>();
+	private static HashMap<ConcordanceEditor, List<String>> associatedEditorsPreviousOtherWordIDs = new HashMap<ConcordanceEditor, List<String>>();
+	private static HashMap<ConcordanceEditor, List<String>> associatedEditorsPreviousLineids = new HashMap<ConcordanceEditor, List<String>>();
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		IWorkbenchWindow wb = HandlerUtil.getActiveWorkbenchWindow(event);
+		IEditorPart ieditor = wb.getActivePage().getActiveEditor();
+		if (!(ieditor instanceof ConcordanceEditor)) {
+			return null;
+		}
+		ConcordanceEditor concordanceEditor = (ConcordanceEditor)ieditor;
+		ISelection sel = wb.getSelectionService().getSelection();
+		if (sel instanceof IStructuredSelection) {
+			IStructuredSelection selection = (IStructuredSelection) sel;
+			if (selection.getFirstElement() instanceof Match) {
+				backToText(concordanceEditor, (Match)(selection.getFirstElement()));
+			} else {
+				System.out.println(SynopticEditionUIMessages.BackToText_1+selection);
+			}
+		} else {
+			System.out.println(SynopticEditionUIMessages.BackToText_2);
+		}
+		return null;
+	}
+
+	/**
+	 * Open edition.
+	 *
+	 * @param corpus the corpus
+	 * @return the object
+	 */
+	@Override
+	public boolean backToText(ConcordanceEditor editor, Match match) {
+		Concordance conc = editor.getConcordance();
+		Corpus corpus = editor.getCorpus();
+
+		try {
+			if (match == null) return false;
+
+			StructuralUnit textS = null;
+			String textid = ""; //$NON-NLS-1$
+			String baseid = ""; //$NON-NLS-1$
+			
+			Property xProperty = corpus.getProperty("x"), yProperty, wProperty, hProperty;
+			String x="0",y="0",w="0",h="0";
+			int[] pos = null;
+			if (xProperty != null) {
+				yProperty = corpus.getProperty("y");
+				if (yProperty != null) {
+					wProperty = corpus.getProperty("w");
+					if (wProperty != null) {
+						AbstractCqiClient CQI = CQPEngine.getCqiClient();
+						int[] cpos = {match.getStart()};
+						hProperty = corpus.getProperty("h");
+						if (hProperty != null) {
+							x = CQI.cpos2Str(xProperty.getQualifiedName(), cpos)[0];
+							y = CQI.cpos2Str(yProperty.getQualifiedName(), cpos)[0];
+							w = CQI.cpos2Str(wProperty.getQualifiedName(), cpos)[0];
+							h = CQI.cpos2Str(hProperty.getQualifiedName(), cpos)[0];
+							
+							pos = new int[4];
+							pos[0] = Integer.parseInt(x);
+							pos[1] = Integer.parseInt(y);
+							pos[2] = Integer.parseInt(w);
+							pos[3] = Integer.parseInt(h);
+						}
+					}
+				}
+			}
+			
+			
+			String projectid = ""; //$NON-NLS-1$
+			try {
+				textS = corpus.getStructuralUnit("text"); //$NON-NLS-1$
+				Property textP = textS.getProperty("id"); //$NON-NLS-1$
+				textid = match.getValueForProperty(textP);// get text via text struct property id
+			} catch (Exception e2) {
+				System.out.println("The corpus has no text_id property" + e2); //$NON-NLS-1$
+				org.txm.rcp.utils.Logger.printStackTrace(e2);
+				return false;
+			}
+
+			Log.info("Loading line informations..."); //$NON-NLS-1$
+
+			SynopticEditionEditor attachedBrowserEditor = associatedEditors.get(editor);
+			if (attachedBrowserEditor!= null && attachedBrowserEditor.isDisposed()) {
+				associatedEditorsPreviousOtherWordIDs.put(editor, new ArrayList<String>());
+				associatedEditorsPreviousLineids.put(editor, new ArrayList<String>());
+			}
+			List<String> previousOtherWordIDs = associatedEditorsPreviousOtherWordIDs.get(editor);
+			List<String> previousLineids = associatedEditorsPreviousLineids.get(editor);
+			
+			if (attachedBrowserEditor == null || attachedBrowserEditor.isDisposed()) {
+				String[] editionsToOpen = OpenEdition.getDefaultEditions(corpus);
+
+				if (editionsToOpen.length == 0) { // the defaultEdition parameter is not set
+					ArrayList<String> editionNames = corpus.getEditionNames();
+					if (editionNames.size() > 0) { // use the first edition declared
+						editionsToOpen = new String[1];
+						editionsToOpen[0] = editionNames.get(0);
+						Log.info(SynopticEditionUIMessages.BackToText_0+editionNames.get(0));
+					} else { // no edition in the corpus
+						Log.info(SynopticEditionUIMessages.BackToText_4);
+						editionsToOpen = new String[0];
+						return false;
+					}
+				} else {
+					Log.info(SynopticEditionUIMessages.BackToText_5+Arrays.toString(editionsToOpen));
+				}
+
+				attachedBrowserEditor = OpenEdition.openEdition(corpus, editionsToOpen);
+				associatedEditors.put(editor, attachedBrowserEditor);
+				SWTEditorsUtils.addEditor(editor, attachedBrowserEditor, EModelService.ABOVE);
+			}
+			
+			// remove previous highlighted words
+			if (previousOtherWordIDs != null) {
+				//System.out.println("remove previousOtherWordIDs="+previousOtherWordIDs);
+				attachedBrowserEditor.removeHighlightWordsById(lightred, previousOtherWordIDs);
+				associatedEditorsPreviousOtherWordIDs.remove(editor); // free mem
+			}
+			if (previousLineids != null) {
+				//System.out.println("remove previousLineids="+previousLineids);
+				attachedBrowserEditor.removeHighlightWordsById(red, previousLineids);
+				associatedEditorsPreviousLineids.remove(editor); // free mem
+			}
+			
+			//System.out.println("getKeywordsId from "+editor.getTopLine()+" to "+editor.getBottomLine() + 1);
+			List<String> otherWordIDs = conc.getKeywordsId(textid, editor.getTopLine(), editor.getBottomLine() + 1);
+			//System.out.println("getKeywordsId="+otherWordIDs);
+			List<String> lineids = null;
+			try {
+				lineids = match.getValuesForProperty(corpus.getProperty("id")); //$NON-NLS-1$
+			} catch (Exception e1) {
+				org.txm.rcp.utils.Logger.printStackTrace(e1);
+				return false;
+			}
+			Log.info(NLS.bind("Project id {0} Corpus (Base) id {1} Text id {2}",  //$NON-NLS-1$
+					new Object[]{projectid, baseid, textid}));
+			
+			otherWordIDs.removeAll(lineids); // remove the pivot from others words 
+			
+			Text text = corpus.getMainCorpus().getText(textid);
+			if (text == null) {
+				System.out.println(NLS.bind("BackToText: Text {0} is missing", textid)); //$NON-NLS-1$
+				StatusLine.setMessage(NLS.bind("BackToText: Text {0} is missing", textid)); //$NON-NLS-1$
+				Log.severe(NLS.bind("BackToText: Text {0} is missing", textid)); //$NON-NLS-1$
+				return false;
+			}
+
+			String line_wordid = lineids.get(0);
+			if (line_wordid == null) {
+				System.out.println(SynopticEditionUIMessages.BackToText_3);
+				return false;				
+			}
+			
+			
+			String focusid = null;
+			if (lineids.size() > 0) focusid = lineids.get(0);
+				
+			//System.out.println("add otherWordIDs="+otherWordIDs);
+			attachedBrowserEditor.addHighlightWordsById(lightred, otherWordIDs);
+			
+			//System.out.println("add linesids="+lineids);
+			attachedBrowserEditor.addHighlightWordsById(red, lineids);
+			
+			associatedEditorsPreviousOtherWordIDs.put(editor, otherWordIDs);
+			associatedEditorsPreviousLineids.put(editor, lineids);
+						
+			HashSet<int[]> posses = new HashSet<int[]>();
+			posses.add(pos);
+			attachedBrowserEditor.setHighlightedArea(posses);
+			
+			attachedBrowserEditor.setFocusedWordID(focusid);
+			
+			// reload the page and styles
+			attachedBrowserEditor.backToText(text, line_wordid);// open the page(S) containing the word with id=line_wordid
+			
+			IWorkbenchPage attachedPage = attachedBrowserEditor.getEditorSite().getPage();
+			attachedPage.activate(attachedBrowserEditor);
+
+			return true;
+
+		} catch (Exception err) {
+			Log.severe(NLS.bind("Full text display failed: {0}", err)); //$NON-NLS-1$
+			Log.printStackTrace(err);
+		}
+		return false;
+	}
+}

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/handlers/BackToText.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/handlers/OpenEdition.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/handlers/OpenEdition.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/handlers/OpenEdition.java	(revision 653)
@@ -0,0 +1,191 @@
+// 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.synopticedition.rcp.handlers;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.txm.objects.BaseParameters;
+import org.txm.objects.Text;
+import org.txm.rcp.RCPMessages;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.MainCorpus;
+import org.txm.searchengine.cqp.corpus.Property;
+import org.txm.searchengine.cqp.corpus.StructuralUnit;
+import org.txm.searchengine.cqp.corpus.Subcorpus;
+import org.txm.searchengine.cqp.corpus.query.Match;
+import org.txm.synopticedition.rcp.editors.EditionSelectorDialog;
+import org.txm.synopticedition.rcp.editors.SynopticEditionEditor;
+import org.txm.synopticedition.rcp.editors.SynopticEditorInput;
+import org.txm.synopticedition.rcp.messages.SynopticEditionUIMessages;
+import org.txm.utils.logger.Log;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import cern.colt.Arrays;
+// TODO: Auto-generated Javadoc
+/**
+ * Open a text edition from: a main corpus : the first text of the maincorpus a
+ * sub-corpus : the first text of the subcorpus a partition : the user must
+ * choose one of the text used in the partition @ author mdecorde.
+ */
+public class OpenEdition extends AbstractHandler {
+
+	/** The Constant ID. */
+	public final static String ID = "org.txm.synopticedition.rcp.handlers.OpenEdition"; //$NON-NLS-1$
+
+	/** The lastopenedfile. */
+	public static String lastopenedfile;
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+
+		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
+		if (selection.getFirstElement() instanceof Corpus) {
+			try {
+				Corpus c = (Corpus) selection.getFirstElement();
+				Shell shell = HandlerUtil.getActiveWorkbenchWindowChecked(event).getShell();
+
+				EditionSelectorDialog d = new EditionSelectorDialog(shell, c, null);
+				SynopticEditionEditor editor = null;
+				//				if (c.getEditionNames().size() > 1 && d.open() == Window.OK) {
+				//					Object[] rez = d.getResult();
+				//					String[] rezS = new String[rez.length];
+				//					for (int i =0 ; i < rez.length ; i++) rezS[i] = rez[i].toString();
+				//					editor = openEdition(c, rezS);
+				//				} else 
+				String[] editionsToOpen = getDefaultEditions(c);
+
+				if (editionsToOpen.length == 0) { // the defaultEdition parameter is not set
+					ArrayList<String> editionNames = c.getEditionNames();
+					if (editionNames.size() > 0) { // use the first edition declared
+						editionsToOpen = new String[1];
+						editionsToOpen[0] = editionNames.get(0);
+						Log.info(SynopticEditionUIMessages.OpenEdition_0+editionNames.get(0));
+					} else { // no edition in the corpus
+						Log.info(SynopticEditionUIMessages.OpenEdition_1);
+						editionsToOpen = new String[0];
+						return false;
+					}
+				} else {
+					Log.info(SynopticEditionUIMessages.OpenEdition_3+Arrays.toString(editionsToOpen));
+				}
+
+				editor = openEdition(c, editionsToOpen);
+
+				if (editor != null)
+					editor.firstPage();
+
+			} catch (Exception e) {
+				System.out.println(SynopticEditionUIMessages.OpenEdition_4+e);
+				org.txm.rcp.utils.Logger.printStackTrace(e);
+			}
+		} else {
+			System.out.println(SynopticEditionUIMessages.OpenEdition_9);
+		}
+		return null;
+	}
+	public static String[] getDefaultEditions(Corpus c) {
+		BaseParameters params = c.getBase().getBaseParameters();
+		Element editionsElement = params.getEditionsElement(params.getCorpusElement());
+		return editionsElement.getAttribute("default").split(","); //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/**
+	 * Open edition, but don't show a page 
+	 *
+	 * @param corpus the corpus
+	 * @return the object
+	 */
+	public static SynopticEditionEditor openEdition(Corpus corpus, String[] editions) {
+		String textid = null;
+
+		System.out.println("Opening edition of "+corpus); //$NON-NLS-1$
+		try {
+			Text text = null;
+			if (corpus instanceof Subcorpus) {
+				Subcorpus sub = (Subcorpus)corpus;
+				List<Match> matches = sub.getMatches();
+				if (matches.size() > 0) {
+					StructuralUnit text_su = corpus.getStructuralUnit("text"); //$NON-NLS-1$
+					Property text_id = text_su.getProperty("id"); //$NON-NLS-1$
+
+					textid = matches.get(0).getValueForProperty(text_id);
+					if (textid != null) text = corpus.getMainCorpus().getText(textid);
+				}
+			}
+			//			QueryResult result = corpus.query(new Query("<text> []"), "get_edition", false); //$NON-NLS-1$ //$NON-NLS-2$ 
+			//			StructuralUnit text_su = corpus.getStructuralUnit("text"); //$NON-NLS-1$
+			//			Property text_id = text_su.getProperty("id"); //$NON-NLS-1$
+
+			// 			if (result.getNMatch() > 0) textid = result.getMatches(0, 1).get(0).getValueForProperty(text_id);
+			MainCorpus maincorpus = corpus.getMainCorpus();
+
+			//			if (textid != null) text = maincorpus.getText(textid);
+
+			if (text == null) {
+				text = maincorpus.getFirstText();
+
+				if (text == null) {
+					System.out.println("** Could not find first text of ID "+textid+SynopticEditionUIMessages.OpenEdition_7); //$NON-NLS-1$ //$NON-NLS-1$
+					return null;
+				}
+
+				textid = text.getName();
+			}
+
+			//String[] editions = {maincorpus.getDefaultEdition()};
+			IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+			IWorkbenchPage page = window.getActivePage();
+
+			SynopticEditorInput editorInput = new SynopticEditorInput(corpus, text.getName(), editions);
+			SynopticEditionEditor editor = (SynopticEditionEditor) page.openEditor(editorInput,
+					SynopticEditionEditor.ID, true);
+
+			return editor;
+
+		} catch (Exception e) {
+			Log.printStackTrace(e);
+			System.out.println(SynopticEditionUIMessages.OpenEdition_10+e);
+			return null;
+		}
+	}
+}

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/handlers/OpenEdition.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/preferences/SynopticEditionPreferencePage.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/preferences/SynopticEditionPreferencePage.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/preferences/SynopticEditionPreferencePage.java	(revision 653)
@@ -0,0 +1,34 @@
+package org.txm.synopticedition.rcp.preferences;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.preferences.ScopedPreferenceStore;
+import org.txm.rcp.Application;
+
+public class SynopticEditionPreferencePage  extends FieldEditorPreferencePage
+implements IWorkbenchPreferencePage {
+	ScopedPreferenceStore preferences;
+
+	private BooleanFieldEditor slow_highlight;
+	
+	
+	public SynopticEditionPreferencePage() {
+		super();
+		preferences = new ScopedPreferenceStore(org.eclipse.core.runtime.preferences.InstanceScope.INSTANCE,
+				Application.PLUGIN_ID);
+		setPreferenceStore(preferences);
+		setTitle("Analec");
+	}
+	
+	@Override
+	public void init(IWorkbench workbench) { }
+
+	@Override
+	protected void createFieldEditors() {
+		slow_highlight = new BooleanFieldEditor(SynopticEditionPreferences.FAST_HIGHLIGHT,
+				"Enable fast word highlight", getFieldEditorParent());
+		addField(slow_highlight);
+	}
+}

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/preferences/SynopticEditionPreferencePage.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/preferences/SynopticEditionPreferences.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/preferences/SynopticEditionPreferences.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/preferences/SynopticEditionPreferences.java	(revision 653)
@@ -0,0 +1,18 @@
+package org.txm.synopticedition.rcp.preferences;
+
+import org.eclipse.core.runtime.preferences.DefaultScope;
+import org.osgi.service.prefs.Preferences;
+import org.txm.core.preferences.TXMPreferences;
+
+public class SynopticEditionPreferences extends TXMPreferences {
+
+	public static String PREFERENCES_NODE = "org.txm.synopticedition.rcp.synoptic";
+	
+	public static String FAST_HIGHLIGHT = "org.txm.synopticedition.rcp.synoptic.slow_highlight";
+
+	@Override
+	public void initializeDefaultPreferences() {
+		Preferences preferences = DefaultScope.INSTANCE.getNode(PREFERENCES_NODE);
+		preferences.putBoolean(FAST_HIGHLIGHT, false);
+	}
+}

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/preferences/SynopticEditionPreferences.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/messages_fr.properties
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/messages_fr.properties	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/messages_fr.properties	(revision 653)
@@ -0,0 +1,34 @@
+BackToText_0=Ouverture avec la premi�re �dition (pas de d�faut) : 
+BackToText_1=Abandon : la s�lection courante n''est pas une ligne de concordance : 
+BackToText_2=Abandon : erreur de s�lection
+BackToText_3=Abandon : erreur pendant la r�cup�ration des identifiants de mot.
+BackToText_4=Pas d'�dition disponible.
+BackToText_5=Ouverture de l'�dition par d�faut : 
+EditionPanel_0=Pas d''�dition trouv�e pour le texte : 
+EditionPanel_1=�chec de la r�cup�ration de la premi�re page d'�dition
+EditionPanel_2=\ pour le texte  
+EditionPanel_5=\ �dition=
+EditionPanel_6=Pas d''�dition nomm�e   
+EditionPanel_7=\ disponible pour le texte  
+EditionSelectorDialog_0=�ditions
+EditionSelectorDialog_1=S�lectionner une ou plusieurs �ditions.
+OpenEdition_0=Ouverture avec la premi�re �dition (pas de d�faut) : 
+OpenEdition_1=Pas d'�dition disponible.
+OpenEdition_10=Erreur lors de l''ouverture de l''�diteur : 
+OpenEdition_2=Pas d''�dition trouv�e 
+OpenEdition_3=Ouverture de l'�dition par d�faut : 
+OpenEdition_4=Erreur lors de l''ouverture de l''�dition : 
+OpenEdition_7=\ dans le corpus
+OpenEdition_9=Abandon : la s�lection n''est pas un corpus
+SynopticEditionEditor_0=Premier texte du corpus
+SynopticEditionEditor_1=Texte pr�c�dent
+SynopticEditionEditor_10=Texte suivant
+SynopticEditionEditor_11=Dernier texte du corpus
+SynopticEditionEditor_2=�ditions...
+SynopticEditionEditor_3=Premi�re page du texte
+SynopticEditionEditor_4=Page pr�c�dente
+SynopticEditionEditor_5=Pas d''�dition trouv�e 
+SynopticEditionEditor_6=Erreur lors de la r�cup�ration des �ditions disponibles : 
+SynopticEditionEditor_7=Page suivante
+SynopticEditionEditor_8=Derni�re page du texte
+SynopticEditionEditor_9=Attention: �chec de la r�cup�ration de l''�dition  
\ No newline at end of file

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

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/SynopticEditionUIMessages.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/SynopticEditionUIMessages.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/SynopticEditionUIMessages.java	(revision 653)
@@ -0,0 +1,53 @@
+package org.txm.synopticedition.rcp.messages;
+
+import org.eclipse.osgi.util.NLS;
+import org.txm.utils.messages.Utf8NLS;
+
+public class SynopticEditionUIMessages extends NLS {
+	
+	private static final String BUNDLE_NAME = "org.txm.synopticedition.rcp.messages.messages"; //$NON-NLS-1$
+	
+	public static String BackToText_0;
+	public static String BackToText_1;
+	public static String BackToText_2;
+	public static String BackToText_3;
+	public static String BackToText_4;
+	public static String BackToText_5;
+	public static String EditionPanel_0;
+	public static String EditionPanel_1;
+	public static String EditionPanel_2;
+	public static String EditionPanel_5;
+	public static String EditionPanel_6;
+	public static String EditionPanel_7;
+	public static String EditionSelectorDialog_0;
+	public static String EditionSelectorDialog_1;
+	public static String OpenEdition_0;
+	public static String OpenEdition_1;
+	public static String OpenEdition_10;
+	public static String OpenEdition_2;
+	public static String OpenEdition_3;
+	public static String OpenEdition_4;
+	public static String OpenEdition_7;
+	public static String OpenEdition_9;
+	public static String SynopticEditionEditor_0;
+	public static String SynopticEditionEditor_1;
+	public static String SynopticEditionEditor_10;
+	public static String SynopticEditionEditor_11;
+	public static String SynopticEditionEditor_2;
+	public static String SynopticEditionEditor_3;
+	public static String SynopticEditionEditor_4;
+	public static String SynopticEditionEditor_5;
+	public static String SynopticEditionEditor_6;
+	public static String SynopticEditionEditor_7;
+	public static String SynopticEditionEditor_8;
+	public static String SynopticEditionEditor_9;
+	
+	
+	static {
+		// initialize resource bundle
+		Utf8NLS.initializeMessages(BUNDLE_NAME, SynopticEditionUIMessages.class);
+	}
+
+	private SynopticEditionUIMessages() {
+	}
+}

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/SynopticEditionUIMessages.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/messages.properties
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/messages.properties	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/messages/messages.properties	(revision 653)
@@ -0,0 +1,34 @@
+BackToText_0=Opening with first edition (no default edition set): 
+BackToText_1=Aborting: selection is not a concordance line: 
+BackToText_2=Aborting: error during selection.
+BackToText_3=Error: could not retrieve line word ids. Aborting back to text.
+BackToText_4=No edition to open.
+BackToText_5=Opening default editions: 
+EditionPanel_0=No edition found for text=
+EditionPanel_1=Fail to retrieve first page of edition 
+EditionPanel_2=\ and text 
+EditionPanel_5=\ edition=
+EditionPanel_6=No edition with name 
+EditionPanel_7=\ available for text 
+EditionSelectorDialog_0=Editions
+EditionSelectorDialog_1=Select one or more editions
+OpenEdition_0=Opening with first edition (no default edition set): 
+OpenEdition_1=No edition to open.
+OpenEdition_10=Error while opening editor: 
+OpenEdition_2=No edition found
+OpenEdition_3=Opening default editions: 
+OpenEdition_4=Error while opening edition: 
+OpenEdition_7=\ in the corpus
+OpenEdition_9=Aborting: selection is not a corpus
+SynopticEditionEditor_0=First text of the corpus
+SynopticEditionEditor_1=Previous text
+SynopticEditionEditor_10=Next text
+SynopticEditionEditor_11=Last text of the corpus
+SynopticEditionEditor_2=Editions...
+SynopticEditionEditor_3=First page of the text
+SynopticEditionEditor_4=Previous page
+SynopticEditionEditor_5=No edition found
+SynopticEditionEditor_6=Error while getting available editions: 
+SynopticEditionEditor_7=Next page
+SynopticEditionEditor_8=Last page of the text
+SynopticEditionEditor_9=Warning: could not find edition for name: 
\ No newline at end of file

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

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/ext/ToolbarButton.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/ext/ToolbarButton.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/ext/ToolbarButton.java	(revision 653)
@@ -0,0 +1,41 @@
+package org.txm.synopticedition.rcp.editors.ext;
+
+import org.eclipse.swt.widgets.Composite;
+import org.txm.objects.Text;
+import org.txm.synopticedition.rcp.editors.SynopticEditionEditor;
+
+public abstract class ToolbarButton {
+
+	protected SynopticEditionEditor editor;
+
+	public ToolbarButton() {}
+	
+	/**
+	 * 
+	 * @param parent
+	 * @param editor
+	 * @return the button to dislay in the bottom toolbar
+	 */
+	public Composite getToolbarButton(Composite parent, SynopticEditionEditor editor) {
+		this.editor = editor;
+		return null;
+	}
+	
+	/**
+	 * Called when the editor is disposed
+	 * 
+	 * @return true is the editor can be closed
+	 */
+	public boolean onClose() {
+		return true;
+	}
+
+	public abstract void save();
+	
+	public abstract boolean isDirty();
+	
+	public abstract void discardChanges();
+
+	public abstract void onBackToText(Text text, String line_wordid);
+
+}
\ No newline at end of file

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/ext/ToolbarButton.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/EditionPanel.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/EditionPanel.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/EditionPanel.java	(revision 653)
@@ -0,0 +1,1234 @@
+package org.txm.synopticedition.rcp.editors;
+
+import java.io.File;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.logging.Level;
+
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IParameter;
+import org.eclipse.core.commands.NotEnabledException;
+import org.eclipse.core.commands.NotHandledException;
+import org.eclipse.core.commands.Parameterization;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.browser.Browser;
+import org.eclipse.swt.browser.BrowserFunction;
+import org.eclipse.swt.browser.ProgressEvent;
+import org.eclipse.swt.browser.ProgressListener;
+import org.eclipse.swt.events.MenuEvent;
+import org.eclipse.swt.events.MenuListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.MenuItem;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.internal.browser.BrowserViewer;
+import org.osgi.framework.Bundle;
+import org.txm.core.preferences.TXMPreferences;
+import org.txm.objects.Corpus;
+import org.txm.objects.Edition;
+import org.txm.objects.Page;
+import org.txm.objects.Text;
+import org.txm.rcp.StatusLine;
+import org.txm.rcp.utils.IOClipboard;
+import org.txm.synopticedition.rcp.messages.SynopticEditionUIMessages;
+import org.txm.synopticedition.rcp.preferences.SynopticEditionPreferencePage;
+import org.txm.synopticedition.rcp.preferences.SynopticEditionPreferences;
+import org.txm.utils.io.IOUtils;
+import org.txm.utils.logger.Log;
+
+public class EditionPanel extends BrowserViewer implements ISelectionProvider {
+
+	public static class RGBA {
+		public int r=0, g=0, b=0;
+		public float a = 1f;
+		public RGBA(int r, int g, int b) {
+			this.r =r;this.g=g; this.b =b;
+		}
+		public RGBA(String rgb) {
+			String[] split = rgb.split(",");
+			try{this.r =Integer.parseInt(split[0]);}catch(Exception e){}
+			try{this.g =Integer.parseInt(split[1]);}catch(Exception e){}
+			try{this.b =Integer.parseInt(split[2]);}catch(Exception e){}
+		}
+		public RGBA(String rgb, float a) {
+			String[] split = rgb.split(",");
+			try{this.r =Integer.parseInt(split[0]);}catch(Exception e){}
+			try{this.g =Integer.parseInt(split[1]);}catch(Exception e){}
+			try{this.b =Integer.parseInt(split[2]);}catch(Exception e){}
+			this.a = a;
+		}
+		public RGBA(int r, int g, int b, float a) {
+			this.r =r;this.g=g; this.b =b;this.a =a;
+		}
+
+		public String toString() {return "{"+r+", "+g+","+b+", "+a+"}";}
+	}
+
+	private ProgressListener progresslistener;
+	//	private List<String> wordids;
+	//	private List<String> lineids;
+	/** The edition. */
+	Text currentText;
+	Edition currentEdition;
+	Page currentPage;
+	protected SynopticEditionEditor synopticEditionEditor;
+	private ISelectionProvider selProvider;
+	private MenuManager menuManager;
+
+	private HashSet<int[]> highlightedAreas = null;
+
+	//HashMap<String, ArrayList<RGBA>> highlightedColorSpans = new HashMap<String, ArrayList<RGBA>>(); // background color
+
+	HashMap<String, ArrayList<RGBA>> highlightedColorPerWordIDS = new HashMap<String, ArrayList<RGBA>>(); // background color
+	public static final String STYLE_NORMAL = "normal";
+	public static final String STYLE_ITALIC = "italic";
+	public static final String STYLE_OBLIQUE = "oblique";
+	HashMap<String, String> fontStylePerWordIDS = new HashMap<String, String>();
+	public static final String WEIGHT_NORMAL = "normal";
+	public static final String WEIGHT_BOLD = "bold";
+	HashMap<String, String> fontWeightPerWordIDS = new HashMap<String, String>();
+	HashMap<String, ArrayList<RGBA>> fontColorPerWordIDS = new HashMap<String, ArrayList<RGBA>>();
+	public static final String SIZE_SMALL = "small";
+	public static final String SIZE_MEDIUM = "medium";
+	public static final String SIZE_LARGE = "larger";
+	public static final String SIZE_SMALLER = "smaller";
+	public static final String SIZE_LARGER = "larger";
+	HashMap<String, String> fontSizePerWordIDS = new HashMap<String, String>();
+	public static final String FAMILLY_TIMES = "\"Times New Roman\", Times";
+	public static final String FAMILLY_ARIAL = "Arial";
+	public static final String FAMILLY_COURIER = "\"Courier New\", Courier";
+	HashMap<String, String> fontFamillyPerWordIDS = new HashMap<String, String>();
+	public static final String VARIANT_NORMAL = "normal";
+	public static final String VARIANT_SMALLCAPS = "small-caps";
+	HashMap<String, String> fontVariantPerWordIDS = new HashMap<String, String>();
+	String focusedWordID = null;
+
+	public static final String highlightscript = "try { var elt = document.getElementById(\"%s\");" + //$NON-NLS-1$ //$NON-NLS-2$
+			"elt.style.backgroundColor=\"rgb(%s,%s,%s)\";" + //$NON-NLS-1$
+			//"elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
+			//"elt.style.paddingRight=\"3px\";" + //$NON-NLS-1$
+			//"elt.style.paddingTop=\"1px\";" + //$NON-NLS-1$
+			//"elt.style.paddingBottom=\"1px\";" + //$NON-NLS-1$
+			"} catch (e) { };"; //$NON-NLS-1$
+	public static final String highlightscriptRuleFast = "sheet.insertRule(\"#%s {background-color:rgba(%s,%s,%s,%s);}\", 0);";
+	public static final String colorscriptRuleFast = "sheet.insertRule(\"#%s {color:rgba(%s,%s,%s,%s);}\", 0);";
+	public static final String sizescriptRuleFast = "sheet.insertRule(\"#%s {font-size:%s;}\", 0);";
+	public static final String stylescriptRuleFast = "sheet.insertRule(\"#%s {font-style:%s;}\", 0);";
+	public static final String variantscriptRuleFast = "sheet.insertRule(\"#%s {font-variant:%s;}\", 0);";
+	public static final String famillyscriptRuleFast = "sheet.insertRule(\"#%s {font-familly:%s;}\", 0);";
+	public static final String weightscriptRuleFast = "sheet.insertRule(\"#%s {font-weight:%s;}\", 0);";
+
+	public static final String highlightscriptRule = "sheet.insertRule(\"span[id=\\\"%s\\\"] {background-color:rgba(%s,%s,%s,%s); }\", 0);";
+
+	public static final String clearhighlightscript = "try { var elt = document.getElementById(\"%s\"); elt.style.backgroundColor=\"white\";elt.style.fontWeight=\"\";" + //$NON-NLS-1$
+			"} catch (e) { };"; //$NON-NLS-1$
+
+	public String functions = 
+			""//"alert(\"loading functions\");"
+					+"\nfunction getNodeText(node) {"
+					+"\n	if (typeof node == 'string') return node;"
+					+"\n	else if (typeof  node.innerText != 'undefined') return node.innerText;"
+					+"\n	else if (typeof  node.InnerText != 'undefined') return node.InnerText;"
+					+"\n	else if (typeof  node.textContent != 'undefined') return node.textContent;"
+					+"\n	else return null;"
+					+"\n}"
+					+"\nfunction txmGetParent(node) {"
+					+"\n	if (typeof  node.parentNode != 'undefined') return node.parentNode;"
+					+"\n	else return null;"
+					+"\n}"
+					+"\nfunction txmGetChildren(node) {"
+					+"\n	if (typeof node == 'string') return 'STRING HTML';"
+					+"\n	else if (typeof  node.children != 'undefined') return node.children;"
+					+"\n	else if (typeof  node.ChildNodes != 'undefined') return node.ChildNodes;"
+					+"\n	else if (typeof  node.childNodes != 'undefined') return node.childNodes;"
+					+"\n	else return null;"
+					+"\n}"
+					+"\nfunction txmGetSelection() {"
+					+"\n	if (typeof window.getSelection != 'undefined') {return window.getSelection();}"
+					+"\n	else if (typeof document.selection != 'undefined') { return document.selection;}"
+					+"\n	else return 'NO SELECTION';"
+					+"\n}"
+					+"\nfunction txmGetRangeSize(selection) {"
+					+"\n	if (typeof selection.rangeCount != 'undefined') {return selection.rangeCount;}"
+					+"\n	else if (typeof selection.createRangeCollection != 'undefined') { return selection.createRangeCollection().length();} // IE5 has no multiple selection"
+					+"\n}"
+					+"\nfunction txmGetRange(selection, i) {"
+					+"\n	if (typeof selection.getRangeAt != 'undefined') {return selection.getRangeAt(i);}"
+					+"\n	else if (typeof selection.createRangeCollection != 'undefined') {return selection.createRangeCollection().item(i);}" // IE > IE5 
+					+"\n	else if (typeof selection.createRange != 'undefined') { return selection.createRange();} // IE5 has no multiple selection"
+					+"\n	else return 'NO RANGE';"
+					+"\n}"
+					+"\nfunction txmGetParentElementRange(range) {"
+					+"\n	if (typeof range.parentElement != 'undefined') {return range.parentElement();}"
+					+"\n	else if (typeof range.startContainer != 'undefined') { return range.startContainer.parentNode;}"
+					+"\n	else return 'NO PARENT';"
+					+"\n}"
+					+"\nfunction txmGetFragment(range) {"
+					+"\n	if (typeof range.cloneContents != 'undefined') { return range.cloneContents();}"
+					+"\n	else if (typeof range.htmlText != 'undefined') {var node = document.createElement('sel'); node.innerHTML = range.htmlText; 		return node;"
+					+"\n	} else return 'NO FRAG';"
+					+"\n}"
+					+"\nfunction txmGetTagName(node) {"
+					+"\n	if (typeof node.tagName != 'undefined') {return node.tagName;}"
+					+"\n	else if (typeof node.nodeName != 'undefined') { return node.nodeName;}"
+					+"\n	else if (typeof node.name != 'undefined') { return node.name;}"
+					+"\n	else return 'NO TAGNAME';"
+					+"\n}"
+					+"\nfunction findSpans(children, all) {"
+					+"\n    for (var i = 0 ; i < children.length ; i++) {"
+					+"\n    	var node = children.item(i);"
+					+"\n		if (node.nodeType == 1) {"
+					+"\n    	var id = node.getAttribute('id');"
+					+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {"
+					+"\n            	if (id != null) all.push(id);"
+					+"\n        	} else {"
+					+"\n        		findSpans(txmGetChildren(node), all)"
+					+"\n        	}"
+					+"\n		}"
+					+"\n	}"
+					+"\n}"
+					+"\nfunction findIdsInString(str, all) {"
+					+"\n    for (var i = 0 ; i < children.length ; i++) {"
+					+"\n    	var node = children.item(i);"
+					+"\n		if (node.nodeType == 1) {"
+					+"\n    	var id = node.getAttribute('id');"
+					+"\n       		if (node.tagName == 'SPAN' && id != null && id.indexOf('w_') == 0 && getNodeText(node).length > 0) {"
+					+"\n            	if (id != null) all.push(id);"
+					+"\n        	} else {"
+					+"\n        		findSpans(txmGetChildren(node), all)"
+					+"\n        	}"
+					+"\n		}"
+					+"\n	}"
+					+"\n}"
+					+"\nfunction get_type(thing){if(thing===null)return \"[object Null]\";  return Object.prototype.toString.call(thing);}\n"
+					+"\nfunction getDetailedObject(inputObject) { var detailedObject = {}; var properties; \n   do {        properties = Object.getOwnPropertyNames( inputObject );        for (var o in properties) {detailedObject[properties[o]] = inputObject[properties[o]];}} while ( inputObject = Object.getPrototypeOf(inputObject) );return detailedObject;}\n"
+					+"\nvar sheet = null;"
+					+"\ntry{"
+					+"\n	var style = document.createElement(\"style\");"
+					+"\n	style.appendChild(document.createTextNode(\"\"));"//webkit hack
+					+"\n	document.head.appendChild(style);"
+					+"\n	sheet = style.sheet;"
+					+"\n} catch(e) {sheet='error'}"
+					+"\ntry{"
+					+"\n" // define scrollIntoViewIfNeeded if absent
+					+"\nif (!Element.prototype.scrollIntoViewIfNeeded) {"
+					+"\n	Element.prototype.scrollIntoViewIfNeeded = function (centerIfNeeded) {"
+					+"\n		centerIfNeeded = arguments.length === 0 ? true : !!centerIfNeeded;"
+					+"\n		var parent = this.parentNode,"
+					+"\n		parentComputedStyle = window.getComputedStyle(parent, null),"
+					+"\n		parentBorderTopWidth = parseInt(parentComputedStyle.getPropertyValue('border-top-width')),"
+					+"\n		parentBorderLeftWidth = parseInt(parentComputedStyle.getPropertyValue('border-left-width')),"
+					+"\n		overTop = this.offsetTop - parent.offsetTop < parent.scrollTop,"
+					+"\n		overBottom = (this.offsetTop - parent.offsetTop + this.clientHeight - parentBorderTopWidth) > (parent.scrollTop + parent.clientHeight),"
+					+"\n		overLeft = this.offsetLeft - parent.offsetLeft < parent.scrollLeft,"
+					+"\n		overRight = (this.offsetLeft - parent.offsetLeft + this.clientWidth - parentBorderLeftWidth) > (parent.scrollLeft + parent.clientWidth),"
+					+"\n		alignWithTop = overTop && !overBottom;"
+					+"\n		if ((overTop || overBottom) && centerIfNeeded) {"
+					+"\n			parent.scrollTop = this.offsetTop - parent.offsetTop - parent.clientHeight / 2 - parentBorderTopWidth + this.clientHeight / 2;"
+					+"\n		}"
+					+"\n		if ((overLeft || overRight) && centerIfNeeded) {"
+					+"\n			parent.scrollLeft = this.offsetLeft - parent.offsetLeft - parent.clientWidth / 2 - parentBorderLeftWidth + this.clientWidth / 2;"
+					+"\n		}"
+					+"\n		if ((overTop || overBottom || overLeft || overRight) && !centerIfNeeded) {"
+					+"\n			this.scrollIntoView(alignWithTop);"
+					+"\n		}"
+					+"\n	};"
+					+"\n}"
+					+"\n} catch(e) {Element.prototype.scrollIntoViewIfNeeded = Element.prototype.scrollIntoView}";
+	protected boolean fastWordHighLight = TXMPreferences.getBoolean(SynopticEditionPreferences.FAST_HIGHLIGHT, SynopticEditionPreferences.PREFERENCES_NODE);
+
+	public Object evaluate(String code) {
+		if (Log.getLevel().intValue() <= Level.FINEST.intValue()) System.out.println(code);
+		return getBrowser().evaluate(code);
+	}
+	public Object execute(String code) {
+		if (Log.getLevel().intValue() <= Level.FINEST.intValue()) System.out.println(code);
+		return getBrowser().execute(code);
+	}
+	public EditionPanel(SynopticEditionEditor synopticEditionEditor, Composite parent, int style, Edition edition) {
+		super(parent, style);
+		this.synopticEditionEditor = synopticEditionEditor;
+		this.currentEdition = edition;
+		this.currentText = currentEdition.getText();
+
+		File functionsFile = null;
+		try {
+
+			Bundle bundle = Platform.getBundle("SynopticEditorRCP");
+			URL fileURL = bundle.getEntry("res/js/functions.js");
+			URL r = FileLocator.resolve(fileURL);
+			Log.info("Load JS functions from: "+r);
+			functions = IOUtils.getText(r, "UTF-8");
+
+		} catch (Exception e) {
+			System.out.println("Error while reading "+functionsFile+": "+e.getLocalizedMessage());
+			Log.printStackTrace(e);
+		}
+
+		progresslistener = new ProgressListener() {
+
+			@Override
+			public void changed(ProgressEvent event) { }
+
+			@Override
+			public void completed(ProgressEvent event) {
+				//				System.out.println("EditionPanel "+currentEdition.getName()+" reload "+getCurrentPage().getName());
+				Object rez = evaluate("return typeof sheet");
+				if ("undefined".equals(rez)) execute(functions); // build the sheet if not present in the HTML DOM
+
+				//System.out.println("highlight: "+highlightedColorPerWordIDS);
+				StringBuilder buffer = new StringBuilder();
+				//buffer.append("alert(\"\"+sheet);\n");
+				if (!fastWordHighLight) {
+					//					for (String wordid : highlightedColorPerWordIDS.keySet()) {
+					//						buffer.append(String.format(clearhighlightscript, wordid)+"\n");
+					//					}
+				} else {
+					buffer.append("try { while(sheet.cssRules.length > 0) sheet.deleteRule(0); } catch (e) {};\n"); // empty style
+				}
+
+				if (buffer.length() > 0) execute(buffer.toString());
+				buffer = new StringBuilder();
+
+				String firstWord = currentPage.getWordId();
+				Page nextPage = currentEdition.getNextPage(currentPage);
+				String lastWord = "w_999999999";
+				if (nextPage != null && currentPage != nextPage) lastWord = nextPage.getWordId();
+				//System.out.println("firstWord="+firstWord+" lastWord="+lastWord);
+				//int n = 0;
+				//long start = System.currentTimeMillis();
+				//System.out.println(highlightedColorPerWordIDS);
+				for (String wordid : highlightedColorPerWordIDS.keySet()) {
+					if (highlightedColorPerWordIDS.get(wordid).size() == 0) continue; // error
+
+					//if (!slowWordHighLight) { //TODO: this code must be replaced with word position instead of word id comparaison
+					if (Edition.isFirstGTthanSecond(wordid, firstWord) < 0) continue; // skip the word to highlight
+					if (Edition.isFirstGTthanSecond(lastWord, wordid) < 0) continue; // skip the word to highlight
+					//}
+					//n++;
+					RGBA composite = new RGBA(0,0,0,0f);
+					int size = highlightedColorPerWordIDS.get(wordid).size();
+
+					for (RGBA color : highlightedColorPerWordIDS.get(wordid)) {
+						composite.r += color.r;
+						composite.g += color.g;
+						composite.b += color.b;
+						composite.a += color.a;
+					}
+
+					composite.r /= size;
+					composite.g /= size;
+					composite.b /= size;
+
+					String s = null;
+					if (!fastWordHighLight) {
+						//s = String.format(highlightscriptRule, wordid, composite.r, composite.g, composite.b, composite.a);
+						s = "try { document.getElementById(\"" + wordid + "\").style.backgroundColor=\"rgba("+composite.r+","+composite.g+","+composite.b+","+composite.a+")\";" //$NON-NLS-1$
+								+ 
+								//								"elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
+								//								"elt.style.paddingRight=\"3px\";" + //$NON-NLS-1$
+								//								"elt.style.paddingTop=\"1px\";" + //$NON-NLS-1$
+								//								"elt.style.paddingBottom=\"1px\";" + //$NON-NLS-1$
+								"} catch (e) { };"; //$NON-NLS-1$
+					} else {
+						//TODO: replace this line with the next one for TXM 0.7.9
+						s = String.format(highlightscriptRuleFast, wordid.replace(" ", "\\ "), composite.r, composite.g, composite.b, composite.a);
+						//						s = String.format(highlightscriptRuleFast, wordid, composite.r, composite.g, composite.b, composite.a);
+					}
+
+					buffer.append(s+"\n");
+				}
+
+				if (buffer.length() > 0) execute(buffer.toString());
+				buffer = new StringBuilder();
+
+				//				for (String wordidslist : highlightedColorSpans.keySet()) {
+				//					RGBA composite = new RGBA(0,0,0,0f);
+				//					int size = highlightedColorSpans.get(wordidslist).size();
+				//					
+				//					for (RGBA color : highlightedColorSpans.get(wordidslist)) {
+				//						composite.r += color.r;
+				//						composite.g += color.g;
+				//						composite.b += color.b;
+				//						composite.a += color.a;
+				//					}
+				//					
+				//					composite.r /= size;
+				//					composite.g /= size;
+				//					composite.b /= size;
+				//					
+				//					String cmd = "var l = "+wordidslist+";\n";
+				//					cmd += "wrap(l, \""+wordidslist+"\";\n";
+				//					buffer.append(cmd+"\n");
+				//				}
+
+				for (String wordid : fontColorPerWordIDS.keySet()) {
+					RGBA composite = new RGBA(0,0,0,0f);
+					int size = fontColorPerWordIDS.get(wordid).size();
+
+					for (RGBA color : fontColorPerWordIDS.get(wordid)) {
+						composite.r += color.r;
+						composite.g += color.g;
+						composite.b += color.b;
+						composite.a += color.a;
+					}
+
+					composite.r /= size;
+					composite.g /= size;
+					composite.b /= size;
+
+					String s = String.format(colorscriptRuleFast, wordid, composite.r, composite.g, composite.b, composite.a);
+					buffer.append(s+"\n");
+				}
+
+				if (buffer.length() > 0) execute(buffer.toString());
+				buffer = new StringBuilder();
+
+				for (String wordid : fontSizePerWordIDS.keySet()) {
+					String s = String.format(sizescriptRuleFast, wordid, fontSizePerWordIDS.get(wordid));
+					buffer.append(s+"\n");
+				}
+
+				for (String wordid : fontWeightPerWordIDS.keySet()) {
+					String s = null;
+					if (!fastWordHighLight) {
+						//s = String.format(highlightscriptRule, wordid, composite.r, composite.g, composite.b, composite.a);
+						s = "try { document.getElementById(\"" + wordid + "\").style.fontWeight=\""+fontWeightPerWordIDS.get(wordid)+"\";" //$NON-NLS-1$
+								+ 
+								//								"elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
+								//								"elt.style.paddingRight=\"3px\";" + //$NON-NLS-1$
+								//								"elt.style.paddingTop=\"1px\";" + //$NON-NLS-1$
+								//								"elt.style.paddingBottom=\"1px\";" + //$NON-NLS-1$
+								"} catch (e) { };"; //$NON-NLS-1$
+						//s = String.format(highlightscriptRule, wordid, composite.r, composite.g, composite.b, composite.a);
+						//						s = "try { var elt = document.getElementById(\"" + wordid + "\");" + //$NON-NLS-1$ //$NON-NLS-2$
+						//								"elt.style.fontWeight=\""+fontWeightPerWordIDS.get(wordid)+"\";" + //$NON-NLS-1$
+						////								"elt.style.paddingLeft=\"3px\";" + //$NON-NLS-1$
+						////								"elt.style.paddingRight=\"3px\";" + //$NON-NLS-1$
+						////								"elt.style.paddingTop=\"1px\";" + //$NON-NLS-1$
+						////								"elt.style.paddingBottom=\"1px\";" + //$NON-NLS-1$
+						//								"} catch (e) { };"; //$NON-NLS-1$
+					} else {
+						s = String.format(weightscriptRuleFast, wordid, fontWeightPerWordIDS.get(wordid));
+					}
+					buffer.append(s+"\n");
+				}
+
+				for (String wordid : fontFamillyPerWordIDS.keySet()) {
+					String s = String.format(famillyscriptRuleFast, wordid, fontFamillyPerWordIDS.get(wordid));
+					buffer.append(s+"\n");
+				}
+
+				if (buffer.length() > 0) execute(buffer.toString());
+				buffer = new StringBuilder();
+
+				if (focusedWordID != null) {
+					//System.out.println("Focus on: "+focusedWordID);
+					String s = "try { showElementIfNeeded(document.getElementById(\"" + focusedWordID + "\")); } catch (e) {document.getElementById(\"" + focusedWordID + "\").scrollIntoView();};"; //$NON-NLS-1$ //$NON-NLS-2$
+					buffer.append(s+"\n");
+					focusedWordID = null; // focus one time
+				}
+
+				if (buffer.length() > 0) execute(buffer.toString());
+				buffer = new StringBuilder();
+
+				if (highlightedAreas != null) {
+					for (int[] pos : highlightedAreas ) {
+						if (pos == null || pos.length != 4) continue;
+						String s = "try {v.setFocusOn("+pos[0]+", "+pos[1]+", "+pos[2]+", "+pos[3]+");} catch (e) { };"; //$NON-NLS-1$
+						buffer.append(s+"\n");
+						break;// one word only for now
+					}
+				}
+
+				//System.out.println(buffer);
+				if (buffer.length() > 0) execute(buffer.toString());
+				//System.out.println("n="+n+" time="+(System.currentTimeMillis()-start));
+			}
+		};
+		getBrowser().addProgressListener(progresslistener);
+		new CommandLink (getBrowser());
+	}
+
+	/**
+	 * Bypass BrowserViewer restriction on the getBrowser method
+	 */
+	public Browser getBrowser() {
+		return super.getBrowser();
+	}
+
+	/**
+	 * Bypass BrowserViewer restriction on the getBrowser method
+	 */
+	public String getDOM() {
+		return "";//execute("return document.innerHTML";
+	}
+
+	public ISelectionProvider getSelectionProvider() {
+		return selProvider;
+	}
+
+	public void setHighlightWordsById(RGBA color, HashSet<String> wordids) {
+		for (String wordid : wordids) {
+			if (this.highlightedColorPerWordIDS.get(wordid) != null) {
+				removeHighlightWordsById(color, wordid);
+			}
+			ArrayList<RGBA> hs = new ArrayList<RGBA>();
+			this.highlightedColorPerWordIDS.put(wordid, hs);
+			hs.add(color);
+		}
+	}
+
+	public void addHighlightWordsById(RGBA color, String wordid) {
+		if (!this.highlightedColorPerWordIDS.containsKey(wordid)) {
+			this.highlightedColorPerWordIDS.put(wordid, new ArrayList<RGBA>());
+		}
+		this.highlightedColorPerWordIDS.get(wordid).add(color);
+	}
+
+	/**
+	 * Can be called to refresh the page word styles but only when the page is loaded
+	 */
+	public void updateWordStyles() {
+		progresslistener.completed(null);
+	}
+
+	public void addHighlightWordsById(RGBA color, Collection<String> wordids) {
+		for (String wordid : wordids) {
+			addHighlightWordsById(color, wordid);
+		}
+	}
+
+	public void removeHighlightWordsById(RGBA color, Collection<String> wordids) {
+		//System.out.println("Call removeHighlightWordsById: "+wordids+" color="+color);
+		StringBuffer buffer = new StringBuffer();
+		for (String wordid : wordids) {
+			removeHighlightWordsById(color, wordid);
+			if (!fastWordHighLight) {
+				buffer.append(String.format(clearhighlightscript, wordid)+"\n");
+			}
+		}
+
+		if (buffer.length() > 0) execute(buffer.toString());
+	}
+
+	public void removeHighlightWordsById(RGBA color, String wordid) {
+		if (highlightedColorPerWordIDS.get(wordid) == null) return; // nothing to do
+
+		//System.out.println("remove color="+color+" from id="+wordid);
+		this.highlightedColorPerWordIDS.get(wordid).remove(color);
+
+		if (this.highlightedColorPerWordIDS.get(wordid).size() == 0) {
+			this.highlightedColorPerWordIDS.remove(wordid);
+		}
+	}
+
+	/**
+	 * Open the page containing the word with ID=$line_wordid
+	 * @param line_wordid
+	 * @return true if the page changed
+	 */
+	public boolean backToText(Text text, String line_wordid) {
+
+		String name = currentEdition.getName();
+		Edition edition = text.getEdition(name);
+
+		if (edition == null) {
+			String s = SynopticEditionUIMessages.EditionPanel_0+text+SynopticEditionUIMessages.EditionPanel_5+name;
+			System.out.println(s);
+			StatusLine.setMessage(s);
+			Log.severe(s);
+		} else {
+			Page openedPage = edition.getPageForWordId(line_wordid);
+			if (openedPage != null && openedPage != currentPage) {
+				this.showPage(openedPage);
+				return true;
+			}
+		}
+		updateWordStyles(); // update styles if any new one
+		return false;
+	}
+
+	/**
+	 * First page.
+	 */
+	public void firstPage() {
+		// System.out.println(Messages.TxmBrowser_1+currentPage);
+		currentPage = currentEdition.getFirstPage();
+		currentText = currentEdition.getText();
+		if (currentPage == null) {
+			System.out.println(SynopticEditionUIMessages.EditionPanel_1+currentEdition.getName()+SynopticEditionUIMessages.EditionPanel_2+currentText.getName());
+		}
+
+		this.setURL(currentPage.toURL());
+
+		//page_label.setText(makePageLabel());
+	}
+
+	public void setURL(String url) {
+		super.setURL(url);
+	}
+
+	/**
+	 * Last page.
+	 */
+	public void lastPage() {
+		// System.out.println(Messages.TxmBrowser_2+currentPage);
+
+		if (currentPage != null && currentPage.getFile().equals(currentEdition.getLastPage()))
+			return;
+		currentPage = currentEdition.getLastPage();
+		currentText = currentEdition.getText();
+		this.setURL(currentPage.toURL());
+	}
+
+	/**
+	 * Previous page.
+	 */
+	public void previousPage() {
+		// System.out.println(Messages.TxmBrowser_3+currentPage);
+		if (currentPage != null) {
+			Page previous = currentEdition.getPreviousPage(currentPage);
+
+			if (previous == currentPage) {
+				previousText(true);
+			} else {
+				currentPage = previous;
+				this.setURL(currentPage.toURL());
+			}
+			currentText = currentEdition.getText();
+		} else
+			firstPage();
+		//page_label.setText(makePageLabel());
+	}
+
+
+
+	/**
+	 * Next page.
+	 */
+	public void nextPage() {
+		// System.out.println(Messages.TxmBrowser_4+currentPage);
+		if (currentPage != null) {
+			Page next = currentEdition.getNextPage(currentPage);
+			if (next == currentPage) {
+				nextText();
+			} else {
+				currentPage = next;
+				this.setURL(currentPage.toURL());
+			}
+			currentText = currentEdition.getText();
+		} else
+			firstPage();
+		//page_label.setText(makePageLabel());
+	}
+
+
+	public void firstText() {
+		//Text current = this.currentPage.getEdition().getText();
+		Corpus corpus = currentText.getCorpus();
+		Text firstText = corpus.getFirstText();
+
+		if (firstText != null) {
+			String editionName = currentEdition.getName();
+			Edition tmp = firstText.getEdition(editionName);
+			if (tmp == null) {
+				System.out.println(SynopticEditionUIMessages.EditionPanel_6+editionName+SynopticEditionUIMessages.EditionPanel_7+firstText.getName());
+				return;
+			}
+			currentEdition = tmp;
+			currentPage = currentEdition.getFirstPage(); 
+			currentText = firstText;
+			if (currentPage == null) {
+				StatusLine.setMessage("No previous text"); //$NON-NLS-1$
+				return;
+			}
+			this.setURL(currentPage.toURL());
+		}
+	}
+
+	/**
+	 * Next text.
+	 */
+	public void lastText() {
+		//Text current = this.currentPage.getEdition().getText();
+		Corpus b = currentText.getCorpus();
+		Text lastText = b.getLastText();
+
+		if (lastText != null) {
+			String editionName = currentEdition.getName();
+			Edition tmp = lastText.getEdition(editionName);
+			if (tmp == null) {
+				System.out.println(SynopticEditionUIMessages.EditionPanel_6+editionName+SynopticEditionUIMessages.EditionPanel_7+lastText.getName());
+				return;
+			}
+
+			currentEdition = tmp;
+			currentPage = currentEdition.getFirstPage(); 
+			currentText = lastText;
+			if (currentPage == null) {
+				StatusLine.setMessage("No text next"); //$NON-NLS-1$
+				return;
+			}
+
+			this.setURL(currentPage.toURL());
+			//page_label.setText(makePageLabel());
+		}
+		// System.out.println("Next texts "+nextText);
+	}
+
+	/**
+	 * Previous text.
+	 * @param fromNextText if true  it means the user was reading the next text and then we show the last page of the previous text
+	 */
+	public void previousText(boolean fromNextText) {
+
+		//Text current = this.currentPage.getEdition().getText();
+		Corpus corpus = currentText.getCorpus();
+		Text previousText = corpus.getPreviousText(currentText);
+
+		if (previousText != null) {
+			String editionName = currentEdition.getName();
+
+			Edition tmp = previousText.getEdition(editionName);
+			if (tmp == null) {
+				System.out.println(SynopticEditionUIMessages.EditionPanel_6+editionName+SynopticEditionUIMessages.EditionPanel_7+previousText.getName());
+			}
+			currentEdition = tmp;
+			currentText = previousText;
+			if (fromNextText) {
+				currentPage = currentEdition.getLastPage(); 
+			} else {
+				currentPage = currentEdition.getFirstPage(); 
+			}
+
+			if (currentPage == null) {
+				StatusLine.setMessage("No previous text"); //$NON-NLS-1$
+				return;
+			}
+			this.setURL(currentPage.toURL());
+		}
+		// System.out.println("Previous texts "+previousText);
+	}
+
+	/**
+	 * Next text.
+	 */
+	public void nextText() {
+		//Text current = this.currentPage.getEdition().getText();
+		Corpus b = currentText.getCorpus();
+		Text nextText = b.getNextText(currentText);
+
+		if (nextText != null) {
+			String editionName = currentEdition.getName();
+			Edition tmp = nextText.getEdition(editionName);
+			if (tmp == null) {
+				System.out.println(SynopticEditionUIMessages.EditionPanel_6+editionName+SynopticEditionUIMessages.EditionPanel_7+nextText.getName());
+				return;
+			}
+			currentEdition = tmp;
+
+			currentPage = currentEdition.getFirstPage(); 
+			currentText = nextText;
+			if (currentPage == null) {
+				StatusLine.setMessage("No text next"); //$NON-NLS-1$
+				return;
+			}
+
+			this.setURL(currentPage.toURL());
+			//page_label.setText(makePageLabel());
+		}
+		// System.out.println("Next texts "+nextText);
+	}
+
+
+	public void setText(Text text, boolean refresh) {
+		String editionName = currentEdition.getName();
+		Edition tmp = text.getEdition(editionName);
+		if (tmp == null) {
+			System.out.println(SynopticEditionUIMessages.EditionPanel_6+editionName+SynopticEditionUIMessages.EditionPanel_7+text.getName());
+			return;
+		}
+
+		currentEdition = tmp;
+		currentPage = currentEdition.getFirstPage(); 
+		currentText = text;
+		if (currentPage == null) {
+			StatusLine.setMessage("No text next"); //$NON-NLS-1$
+			return;
+		}
+
+		if (refresh) this.setURL(currentPage.toURL());
+		//page_label.setText(makePageLabel());
+	}
+
+	/**
+	 * Gets the current page.
+	 *
+	 * @return the current page
+	 */
+	public Page getCurrentPage() {
+		return currentPage;
+	}
+
+	/**
+	 * Gets the current text.
+	 *
+	 * @return the current page
+	 */
+	public Text getCurrentText() {
+		return currentText;
+	}
+
+	/**
+	 * Make page label.
+	 *
+	 * @return the string
+	 */
+	public String makePageLabel() {
+		return currentPage.getName()
+				+ " / " + currentPage.getEdition().getNumPages(); //$NON-NLS-1$
+	}
+
+	/**
+	 * Show page.
+	 *
+	 * @param page the page
+	 */
+	public void showPage(Page page) {
+		//System.out.println("SHOW PAGE "+page);
+		currentEdition = page.getEdition();
+		currentText = currentEdition.getText();
+		currentPage = page;
+		this.setURL(currentPage.toURL());
+	}
+
+	public void reloadPage() {
+		this.setURL(currentPage.toURL());
+	}
+
+	//	/**
+	//	 * Sets the edition.
+	//	 *
+	//	 * @param edition the new edition
+	//	 */
+	//	public void setEdition(Edition edition) {
+	//		this.currentEdition = edition;
+	//	}
+
+	static String SCRIPT01 = "var html = \"\";"+
+			"if (typeof window.getSelection != \"undefined\") {"+ // modern Web browsers
+			"var sel = window.getSelection();"+
+			"if (sel.rangeCount) {"+
+			"var container = document.createElement(\"div\");"+
+			"for (var i = 0, len = sel.rangeCount; i < len; ++i) {"+
+			"container.appendChild(sel.getRangeAt(i).cloneContents());"+
+			"}"+
+			"html = container.innerHTML;"+
+			"}"+
+			"} else if (typeof document.selection != \"undefined\") {"+ // for IE < 11
+			"if (document.selection.type == \"Text\") {"+
+			"html = document.selection.createRange().htmlText;"+
+			"}" +
+			"}" +
+			"return html";
+
+	public String getTextSelectionDOM() {
+		return ((String) evaluate(SCRIPT01));
+	}
+
+	public String[] getWordSelection() {
+
+		//System.out.println("getWordSelection");
+		String SCRIPT02_getspans = ""//functions
+				+"var all = [];"
+				+"\nvar sel = txmGetSelection();"
+				+"\nif (sel.rangeCount == 0) {return all;}"
+				//+"\nalert('sel='+sel);"
+				+"\nvar range = txmGetRange(sel, 0);"
+				//+"\nalert('range='+range);"
+				+"\nvar frag = txmGetFragment(range);"
+				//+"\nalert('frag='+frag);"
+				+"\nvar children = txmGetChildren(frag);"
+				//+"\nalert('children='+children);"
+				//+"\nalert('children.length='+children.length);"
+				+"\nif ((children.length == 0) || (children.length == 1 && children.item(0).nodeType == 3)) {"
+				+"\n	var parent = txmGetParentElementRange(range);"
+				//+"\n	if (parent instanceof HTMLHtmlElement) {alert('HTMLHtmlElement parent='+parent);return findIdsInString(parent, all);}"
+				+"\n	if (typeof parent.getAttribute == 'undefined') {return all}"
+				+"\n	var id = parent.getAttribute('id');"
+				+"\n	var id = parent.getAttribute('id');"
+				+"\n	if (txmGetTagName(parent) == 'SPAN' && id != null && id.indexOf('w_') == 0) {"
+				+"\n		all.push(id);"
+				+"\n	} else {" // try with the parent's parent 
+				+"\n		var parent = txmGetParent(parent);"
+				//+"\n		alert('text selection, parent='+txmGetTagName(parent))"
+				+"\n	if (typeof parent.getAttribute == 'undefined') {return all}"
+				+"\n		var id = parent.getAttribute('id');"
+				+"\n		if (txmGetTagName(parent) == 'SPAN' && id != null && id.indexOf('w_') == 0) {"
+				+"\n			all.push(id);"
+				+"\n		}"
+				+"\n	}"
+				+"\n} else {"
+				+"\n	findSpans(children, all);"
+				+"\n}"
+				//+"alert('result='+all)"
+				+"\nreturn all;";
+
+		//		System.out.println(functions);
+		//		System.out.println(SCRIPT02_getspans);
+
+		Object ret = evaluate(SCRIPT02_getspans);
+		if (ret instanceof Object[]) {
+			Log.info("selection word ids="+Arrays.toString((Object[])ret));
+			Object[] array = (Object[])ret;
+			String[] sel = new String[2];
+			if (array.length == 0) {
+				return null;
+			} else if (array.length == 1) {
+				sel[0] = array[0].toString();
+				return sel;
+			} else {
+				sel[0] = array[0].toString();
+				sel[1] = array[array.length-1].toString();
+				return sel;
+			}
+		} else { 
+			System.out.println("SCRIPT RETURNED="+ret);
+			return null;
+		}
+	}
+
+	public String getTextSelection() {
+		//System.out.println("DOM="+getTextSelectionDOM());
+		String rez =  getTextSelectionDOM().replaceAll("<[^>]+>", "");
+		//System.out.println("STR="+rez);
+		return rez;
+	}
+
+	@Override
+	public void addSelectionChangedListener(ISelectionChangedListener listener) {	}
+
+	@Override
+	public ISelection getSelection() {
+		return new SynopticTextSelection(this);
+	}
+
+	@Override
+	public void removeSelectionChangedListener(
+			ISelectionChangedListener listener) {	}
+
+	@Override
+	public void setSelection(ISelection selection) {	}
+
+	static public class SynopticTextSelection implements ISelection  {
+		String str;
+		public SynopticTextSelection(EditionPanel panel) {
+			this.str = panel.getTextSelection();
+		}
+
+		@Override
+		public boolean isEmpty() {
+			return str != null && str.length() > 0;
+		}
+
+		public String getTextSelection() {
+			return str;
+		}
+	}
+
+	public Edition getEdition() {
+		return currentEdition;
+	}
+
+	public MenuManager getMenuManager() {	
+		return menuManager;
+	}
+
+	public void initMenu() {
+		// create a new menu	
+		menuManager = new MenuManager(); //$NON-NLS-1$
+
+		Menu menu = menuManager.createContextMenu(this.getBrowser());
+
+		menu.addMenuListener(new MenuListener() {
+
+			@Override
+			public void menuShown(MenuEvent e) {
+				Menu menu = menuManager.getMenu();
+				if (menu == null) return;
+				new MenuItem(menu, SWT.SEPARATOR);
+
+				MenuItem copyItem = new MenuItem(menu, SWT.NONE);
+				copyItem.setText("Copy text selection");
+				copyItem.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						String text = EditionPanel.this.getTextSelection();
+						if (text != null && text.length() > 0) {
+							IOClipboard.write(text);
+						}
+					}
+
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) { }
+				});
+				String text = EditionPanel.this.getTextSelection();
+				copyItem.setEnabled(text != null && text.length() > 0);
+
+				MenuItem reloadItem = new MenuItem(menu, SWT.NONE);
+				reloadItem.setText("Reload");
+				reloadItem.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						EditionPanel.this.getBrowser().refresh();
+					}
+
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) { }
+				});
+				MenuItem backItem = new MenuItem(menu, SWT.NONE);
+				backItem.setText("Back");
+				backItem.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						EditionPanel.this.getBrowser().back();
+					}
+
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) { }
+				});
+				MenuItem forwardItem = new MenuItem(menu, SWT.NONE);
+				forwardItem.setText("Forward");
+				forwardItem.addSelectionListener(new SelectionListener() {
+
+					@Override
+					public void widgetSelected(SelectionEvent e) {
+						EditionPanel.this.getBrowser().forward();
+					}
+
+					@Override
+					public void widgetDefaultSelected(SelectionEvent e) { }
+				});
+			}
+
+			@Override
+			public void menuHidden(MenuEvent e) {
+				// TODO Auto-generated method stub
+
+			}
+		});
+		//		// restore old listeners
+		//		Menu origMenu = this.browser.getMenu();
+		//		if (origMenu != null) {
+		//			if (origMenu.getListeners(SWT.Hide) != null)
+		//				for (Listener listener : origMenu.getListeners(SWT.Hide)) menu.addListener(SWT.Hide, listener);
+		//			if (origMenu.getListeners(SWT.Show) != null)
+		//				for (Listener listener : origMenu.getListeners(SWT.Show)) menu.addListener(SWT.Show, listener);
+		//			for (MenuItem origItem : origMenu.getItems()) { // restore old menu items
+		//				MenuItem item = new MenuItem(menu, origItem.getStyle());
+		//				item.setText(origItem.getText());
+		//				item.setImage(origItem.getImage());
+		//				if (origItem.getListeners(SWT.Selection) != null && origItem.getListeners(SWT.Selection).length > 0)
+		//					item.addListener(SWT.Selection, origItem.getListeners(SWT.Selection)[0]);
+		//			}
+		//		}
+		// replace the menu
+		this.getBrowser().setMenu(menu); 
+	}
+
+	public void initSelectionProvider() {
+		selProvider = new ISelectionProvider() {
+			@Override
+			public void setSelection(ISelection selection) { }
+			@Override
+			public void removeSelectionChangedListener(ISelectionChangedListener listener) { }
+			@Override
+			public ISelection getSelection() {
+				ITextSelection sel = new ITextSelection() {
+					@Override
+					public boolean isEmpty() {return EditionPanel.this.getTextSelection().length() == 0;}
+					@Override
+					public String getText() {return EditionPanel.this.getTextSelection();}
+					@Override
+					public int getStartLine() {	return 0;}
+					@Override
+					public int getOffset() {return 0;}
+					@Override
+					public int getLength() {return 0;}
+					@Override
+					public int getEndLine() {return 0;}
+				};
+				return sel;
+			}
+
+			@Override
+			public void addSelectionChangedListener(ISelectionChangedListener listener) { }
+		};
+	}
+
+
+
+	public void goToPage(String name) {
+
+		Page next = currentEdition.get(name);
+		// System.out.println(Messages.TxmBrowser_4+currentPage);
+		if (next != null) {
+			currentPage = next;
+			this.setURL(currentPage.toURL());
+		} else {
+			System.out.println("Page not found ("+name+").");
+		}
+	}
+
+	public void setFocusedWordID(String focusid) {
+		this.focusedWordID = focusid;
+	}
+
+	public void setHighlightedArea(HashSet<int[]> positions) {
+		Log.info("Highlight area: not implemented");
+	}
+
+	public void expandSelectionTo(String[] ids) {
+		// expand selection
+
+		if (ids.length == 0) return;
+		//TODO: enable the feature for Windows computers
+		//if (System.getProperty("os.name").toLowerCase().contains("windows")) return; 
+
+		//this.getBrowser().evaluate("alert('expand selection');");
+		//System.out.println("EXPAND SELECTION TO "+Arrays.toString(ids));
+		String id1 = ids[0];
+		String id2 = ids[1];
+		if (id2 == null) id2 = id1;
+		String SCRIPT02_expand = ""
+				+ "var elt = document.getElementById(\""+id1+"\");\n"
+				+ "var elt2 = document.getElementById(\""+id2+"\");\n"
+				//+ "alert(\"elt=\"+elt);\n"
+				+ "var sel = txmGetSelection();\n"
+				//+ "alert(\"sel=\"+sel.extentNode);\n"
+				//+ "alert(\"typeof sel=\"+Object.getOwnPropertyNames(sel));\n"
+				//+ "alert(\"get_type sel=\"+get_type(sel));\n"
+				+ "var range = txmGetRange(sel, 0);\n"
+				//+ "alert(\"range=\"+range);\n"
+				//+ "alert(\"typeof range=\"+Object.getOwnPropertyNames(range));\n"
+				//+ "alert(\"get_type range=\"+get_type(range));\n"
+				+"range.setStart(elt, 0);\n"
+				+"range.setEndAfter(elt2, 0);\n"
+				+"sel.removeAllRanges();\n"
+				+"sel.addRange(range);\n"
+				+ "\n"
+				+ "return null;";
+
+		//System.out.println("Eval...\n"+SCRIPT02_expand);
+		evaluate(SCRIPT02_expand);
+		return;
+	}
+
+	public void addFontWeightWordsById(String weight, List<String> wordids) {
+		for (String wordid : wordids) {
+			addFontWeightWordsById(weight, wordid);
+		}
+	}
+
+	public void addFontWeightWordsById(String weight, String wordid) {
+		this.fontWeightPerWordIDS.put(wordid, weight);
+	}
+
+	public void removeFontWeightWordsById(String wordid) {
+		this.fontWeightPerWordIDS.remove(wordid);
+	}
+
+	public void removeFontWeightWordsById(List<String> wordids) {
+		for (String wordid : wordids) {
+			removeFontWeightWordsById(wordid);
+		}
+	}
+
+	// Called by JavaScript
+	public class CommandLink extends BrowserFunction {
+		String data = "";
+		Browser browser;
+		CommandLink (Browser browser) {
+			super (browser, "txmcommand");
+			this.browser = browser;
+		}
+		public Object function (Object[] arguments) {
+			HashMap<String, String> params = new HashMap<String, String>();
+			for (int i = 0 ; i < arguments.length ; i += 2) {
+				params.put(arguments[i].toString(), arguments[i+1].toString());
+			}
+
+
+			String id = params.get("id");
+			if (id != null) {
+				params.remove("id");
+				System.out.println("CALLING CMD with id="+id+" and parameters="+params);
+				//get the command from plugin.xml
+				IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+				ICommandService cmdService = (ICommandService)window.getService(ICommandService.class);
+				Command cmd = cmdService.getCommand(id);
+
+				//get the parameter
+				ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
+				for (String k : params.keySet()) {
+					try {
+						IParameter iparam = cmd.getParameter(k);
+						Parameterization p = new Parameterization(iparam, params.get(k));
+						parameters.add(p);
+					} catch (NotDefinedException e) {
+						System.out.println("warning: unknowned parameter id="+k);
+					}
+				}
+
+				//build the parameterized command
+				ParameterizedCommand pc = new ParameterizedCommand(cmd, parameters.toArray(new Parameterization[parameters.size()]));
+
+				//execute the command
+				IHandlerService handlerService = (IHandlerService)window.getService(IHandlerService.class);
+				try {
+					handlerService.executeCommand(pc, null);
+				} catch (Exception e) {
+					e.printStackTrace();
+				}
+			} else {
+				System.out.println("Cannot call txmcommand without 'id' parameter: "+params);
+			}
+			return arguments;
+		}
+	}
+
+	/**
+	 * Clear all highlighted words
+	 */
+	public void removeHighlightWords() {
+		Set<String> keys = highlightedColorPerWordIDS.keySet();
+		for (String key : keys) {
+			highlightedColorPerWordIDS.remove(key);
+		}
+	}
+}

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/EditionPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SynopticEditionEditor.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SynopticEditionEditor.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SynopticEditionEditor.java	(revision 653)
@@ -0,0 +1,891 @@
+// 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.synopticedition.rcp.editors;
+
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+
+import org.apache.commons.lang.StringUtils;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.KeyEvent;
+import org.eclipse.swt.events.KeyListener;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IPartListener2;
+import org.eclipse.ui.IWorkbenchPartReference;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.part.EditorPart;
+import org.txm.objects.Edition;
+import org.txm.objects.Text;
+import org.txm.rcp.IImageKeys;
+import org.txm.rcp.editors.IEditionEditor;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.synopticedition.rcp.editors.EditionPanel.RGBA;
+import org.txm.synopticedition.rcp.editors.ext.ToolbarButton;
+import org.txm.synopticedition.rcp.messages.SynopticEditionUIMessages;
+import org.txm.utils.logger.Log;
+/**
+ * Call the internal browser of RCP a Texte can be set to browse pages and
+ * others texts of the same base 
+ * 
+ * @author mdecorde.
+ * 
+ */
+public class SynopticEditionEditor extends EditorPart implements IEditionEditor {
+
+	/** The Constant ID. */
+	public final static String ID = SynopticEditionEditor.class.getName(); //$NON-NLS-1$
+	LinkedHashMap<String, EditionPanel> editionPanels = new LinkedHashMap<String, EditionPanel>();
+
+	/** The page_label: show current page name. */
+	org.eclipse.swt.widgets.Text page_text;
+	Label page_label;
+	Composite editionsArea;
+	private String[] editionNames;
+	private Corpus corpus;
+	private Text text;
+	private Button editionsChooser;
+	//private Label editionsLabel;
+	private Composite controlsArea;
+	private Composite toolbarsArea;
+	private Composite supplementaryButtonComposite;
+	private HashSet<ToolbarButton> toolbarButtons = new HashSet<ToolbarButton>();
+	private ISelectionProvider selProvider;
+
+	/**
+	 * Instantiates a new txm browser.
+	 */
+	public SynopticEditionEditor() {
+		selProvider = new ISelectionProvider() {
+			@Override
+			public void setSelection(ISelection selection) { }
+			@Override
+			public void removeSelectionChangedListener(ISelectionChangedListener listener) { }
+			@Override
+			public ISelection getSelection() {
+				ITextSelection sel = new ITextSelection() {
+					@Override
+					public boolean isEmpty() {
+						for (EditionPanel panel : editionPanels.values()) {
+							String s = panel.getTextSelection();
+							if (s.length() > 0) return false;
+						}
+						return true;
+					}
+					@Override
+					public String getText() {
+						for (EditionPanel panel : editionPanels.values()) {
+							String s = panel.getTextSelection();
+							if (s.length() > 0) return s;
+						}
+						return "";
+					}
+					@Override
+					public int getStartLine() {	return 0;}
+					@Override
+					public int getOffset() {return 0;}
+					@Override
+					public int getLength() {return 0;}
+					@Override
+					public int getEndLine() {return 0;}
+				};
+				return sel;
+			}
+
+			@Override
+			public void addSelectionChangedListener(ISelectionChangedListener listener) { }
+		};
+
+	}
+
+	public void setHighlightWordsById(RGBA color, HashSet<String> wordids) {
+		for(EditionPanel panel : editionPanels.values()) {
+			panel.setHighlightWordsById(color, wordids);
+		}
+	}
+
+	public void addHighlightWordsById(RGBA color, String wordid) {
+		for(EditionPanel panel : editionPanels.values()) {
+			panel.addHighlightWordsById(color, wordid);
+		}
+	}
+
+	public void addHighlightWordsById(RGBA color, Collection<String> wordids) {
+		for(EditionPanel panel : editionPanels.values()) {
+			panel.addHighlightWordsById(color, wordids);
+		}
+	}
+
+	public void removeHighlightWordsById(RGBA color, Collection<String> wordids) {
+		for(EditionPanel panel : editionPanels.values()) {
+			panel.removeHighlightWordsById(color, wordids);
+		}
+	}
+
+	public void removeHighlightWordsById(RGBA color, String wordid) {
+		for(EditionPanel panel : editionPanels.values()) {
+			panel.removeHighlightWordsById(color, wordid);
+		}
+	}
+
+	//	/**
+	//	 * 
+	//	 * @param wordids2 all the words to highlight
+	//	 * @param lineids2 the words to highlight better and to scroll to
+	//	 */
+	//	public void highlightWordsById(List<String> wordids, List<String> lineids, int[] pos, String focusid) {
+	//		for(EditionPanel panel : editionPanels.values()) {
+	//			if (panel.getEdition().getName().startsWith("facs")) {
+	//				List<int[]> wordRectangles = new ArrayList<int[]>();
+	//				List<int[]> keywordRectangles = new ArrayList<int[]>();
+	//				if (pos != null) keywordRectangles.add(pos);
+	//				panel.highlightWordsByPositions(wordRectangles, keywordRectangles);
+	//			} else {
+	//				panel.highlightWordsById(wordids, lineids, focusid);
+	//			}
+	//		}
+	//
+	//		updatePageLabel();
+	//		
+	//		
+	//	}
+
+	public void dispose() {
+		if (releaseExtensions()) {
+			super.dispose();
+		}
+	}
+
+	private boolean releaseExtensions() {
+		boolean error = false;
+		for (ToolbarButton tb : toolbarButtons) {
+			try {
+				tb.onClose();
+			} catch(Exception e) {
+				Log.printStackTrace(e);
+				System.out.println("Error while closing editor toolbar button: "+e);
+				error = true;
+			}
+		}
+		return !error;
+	}
+
+	/**
+	 * First page.
+	 */
+	public void firstPage() {
+		for(EditionPanel panel : editionPanels.values())
+			panel.firstPage();
+		updatePageLabel();
+	}
+
+	/**
+	 * Last page.
+	 */
+	public void lastPage() {
+		for(EditionPanel panel : editionPanels.values())
+			panel.lastPage();
+		updatePageLabel();
+	}
+
+	/**
+	 * Previous page.
+	 */
+	public void previousPage() {
+		for(EditionPanel panel : editionPanels.values())
+			panel.previousPage();
+		updatePageLabel();
+	}
+
+	/**
+	 * Next page.
+	 */
+	public void nextPage() {
+		for(EditionPanel panel : editionPanels.values())
+			panel.nextPage();
+		updatePageLabel();
+	}
+
+	/**
+	 * Next page.
+	 */
+	public void goToPage(String name) {
+		for(EditionPanel panel : editionPanels.values())
+			panel.goToPage(name);
+		updatePageLabel();
+
+	}
+
+	/**
+	 * Previous text.
+	 */
+	public void previousText(boolean fromNextText) {
+		for(EditionPanel panel : editionPanels.values())
+			panel.previousText(fromNextText);
+		updatePageLabel();
+	}
+
+	/**
+	 * Next text.
+	 */
+	public void nextText() {
+		for(EditionPanel panel : editionPanels.values())
+			panel.nextText();
+		updatePageLabel();
+	}
+
+	/**
+	 * Previous text.
+	 */
+	public void firstText() {
+		for(EditionPanel panel : editionPanels.values())
+			panel.firstText();
+		updatePageLabel();
+	}
+
+	/**
+	 * Next text.
+	 */
+	public void lastText() {
+		for(EditionPanel panel : editionPanels.values())
+			panel.lastText();
+		updatePageLabel();
+	}
+
+	public Composite getEditionArea() {
+		return editionsArea;
+	}
+
+	public Composite getUpperToolbarArea() {
+		return toolbarsArea;
+	}
+
+	public Composite getLowerToolbarArea() {
+		return controlsArea;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.internal.browser.WebBrowserEditor#createPartControl(org.eclipse.swt.widgets.Composite)
+	 */
+	@Override
+	public void createPartControl(Composite parent) {
+		FormLayout mainLayout = new FormLayout();
+		parent.setLayout(mainLayout);
+
+		toolbarsArea = new Composite(parent, SWT.NONE);
+		GridLayout toolbarsLayout = new GridLayout(1, true);
+		toolbarsLayout.marginBottom = toolbarsLayout.marginHeight = 0;
+		toolbarsLayout.marginTop = toolbarsLayout.marginWidth = 0;
+		toolbarsLayout.horizontalSpacing = 2;
+		toolbarsArea.setLayout(toolbarsLayout);
+
+		editionsArea = new Composite(parent, SWT.NONE);
+		GridLayout editionLayout = new GridLayout();
+		editionLayout.marginBottom = editionLayout.marginHeight = 0;
+		editionLayout.marginTop = editionLayout.marginWidth = 0;
+		editionLayout.horizontalSpacing = 2;
+		editionsArea.setLayout(editionLayout);
+
+		controlsArea = new Composite(parent, SWT.NONE);
+		GridLayout subLayout = new GridLayout(17, false);
+		subLayout.marginBottom = subLayout.marginHeight = 0;
+		subLayout.marginTop = subLayout.marginWidth = 0;
+		subLayout.horizontalSpacing = 2;
+		controlsArea.setLayout(subLayout);
+
+		//agencing panels : upper toolbar, edition and bottom
+		FormData upperFormData = new FormData();
+		upperFormData.top = new FormAttachment(0);
+		upperFormData.bottom = new FormAttachment(editionsArea);
+		upperFormData.left = new FormAttachment(0);
+		upperFormData.right = new FormAttachment(100);
+		toolbarsArea.setLayoutData(upperFormData);
+		FormData middleFormData = new FormData();
+		middleFormData.top = new FormAttachment(toolbarsArea);
+		middleFormData.bottom = new FormAttachment(controlsArea);
+		middleFormData.left = new FormAttachment(0);
+		middleFormData.right = new FormAttachment(100);
+		editionsArea.setLayoutData(middleFormData);
+		FormData lowerFormData = new FormData();
+		//lowerFormData.top = new FormAttachment(70);
+		lowerFormData.bottom = new FormAttachment(100);
+		lowerFormData.left = new FormAttachment(0);
+		lowerFormData.right = new FormAttachment(100);
+		controlsArea.setLayoutData(lowerFormData);
+
+		//spacer
+		new Label(controlsArea, SWT.NONE).setText("  "); //$NON-NLS-1$
+
+		// Edition names label
+		editionsChooser = new Button(controlsArea, SWT.PUSH);
+		editionsChooser.setText(StringUtils.join(editionNames, " | ")); //$NON-NLS-1$
+
+		if (corpus.getEditionNames().size() > 1) {			
+
+			editionsChooser.addSelectionListener(new SelectionListener() {
+				@Override
+				public void widgetSelected(SelectionEvent e) {
+					try {
+						Shell shell = e.display.getActiveShell();
+						EditionSelectorDialog d = new EditionSelectorDialog(shell, corpus, editionNames);
+
+						if (corpus.getEditionNames().size() > 1 && d.open() == Window.OK) {
+							Object[] rez = d.getResult();
+							editionNames = new String[rez.length];
+							for(int i = 0 ; i < rez.length ; i++) editionNames[i] = rez[i].toString();
+							editionsChooser.setText(StringUtils.join(editionNames, " | ")); //$NON-NLS-1$
+							openEditions(corpus, text, editionNames);
+							firstPage();
+						} else if (corpus.getEditionNames().size() == 1) {
+							editionNames = new String[]{corpus.getEditionNames().get(0)};
+							editionsChooser.setText(StringUtils.join(editionNames, " | ")); //$NON-NLS-1$
+							openEditions(corpus, text, editionNames);
+							firstPage();
+						} else {
+							System.out.println(SynopticEditionUIMessages.SynopticEditionEditor_5);
+						}
+					} catch (Exception e2) {
+						org.txm.rcp.utils.Logger.printStackTrace(e2);
+						System.out.println(SynopticEditionUIMessages.SynopticEditionEditor_6+e2);
+					}
+				}
+
+				@Override
+				public void widgetDefaultSelected(SelectionEvent e) { }
+			});
+		} else {
+			editionsChooser.setEnabled(false);
+		}
+
+		supplementaryButtonComposite = new Composite(controlsArea, SWT.NONE);
+		supplementaryButtonComposite.setLayout(new FillLayout(SWT.HORIZONTAL));
+
+		// Navigation buttons
+
+		Button first = new Button(controlsArea, SWT.FLAT|SWT.PUSH);
+		Button previous = new Button(controlsArea, SWT.FLAT|SWT.PUSH);
+		page_text = new org.eclipse.swt.widgets.Text(controlsArea, SWT.BORDER);
+		page_label = new Label(controlsArea, SWT.NONE);
+		Button next = new Button(controlsArea, SWT.FLAT|SWT.PUSH);
+		Button last = new Button(controlsArea, SWT.FLAT|SWT.PUSH);
+
+
+		Button firstText = new Button(controlsArea, SWT.FLAT);
+		Button previousText = new Button(controlsArea, SWT.FLAT);
+		new Label(controlsArea, SWT.NONE).setText(" ");
+		Button nextText = new Button(controlsArea, SWT.FLAT|SWT.PUSH);
+		Button lastText = new Button(controlsArea, SWT.FLAT|SWT.PUSH);
+
+		// Layouts data
+
+		editionsChooser.setLayoutData(new GridData(GridData.BEGINNING,GridData.CENTER, false, false));
+
+		GridData buttonGridData = new GridData(GridData.FILL,GridData.CENTER, false, false);
+		buttonGridData.widthHint = 30;
+		buttonGridData.heightHint = 30;
+		firstText.setLayoutData(buttonGridData);
+		previousText.setLayoutData(buttonGridData);
+		GridData centerButtonGridData = new GridData(GridData.END,GridData.CENTER, true, true);
+		centerButtonGridData.widthHint = 30;
+		centerButtonGridData.heightHint = 30;
+		first.setLayoutData(centerButtonGridData);
+		previous.setLayoutData(buttonGridData);
+
+		// set sizes
+
+		GridData gdata = new GridData(GridData.END,GridData.CENTER, false, false);
+		gdata.minimumWidth = 40;
+		gdata.widthHint = 40;
+		page_text.setLayoutData(gdata);
+		page_label.setLayoutData(new GridData(GridData.BEGINNING,GridData.CENTER, false, false));
+
+		next.setLayoutData(buttonGridData);
+		centerButtonGridData = new GridData(GridData.BEGINNING, GridData.CENTER, true, true);
+		centerButtonGridData.widthHint = 30;
+		centerButtonGridData.heightHint = 30;
+		last.setLayoutData(centerButtonGridData);
+		nextText.setLayoutData(buttonGridData);
+		lastText.setLayoutData(buttonGridData);
+
+		GridData supplementaryButtonCompositeLayoutData = new GridData(GridData.BEGINNING, GridData.CENTER, false, true);
+		supplementaryButtonComposite.setLayoutData(supplementaryButtonCompositeLayoutData);
+
+		if (editionsChooser != null)
+			editionsChooser.setLayoutData(new GridData(GridData.BEGINNING,GridData.CENTER, false, true));
+		//else spacer.setLayoutData(new GridData(GridData.END,GridData.CENTER, true, true));
+
+		// set labels
+		page_label.setText(""); //$NON-NLS-1$
+		firstText.setImage(IImageKeys.getImage(IImageKeys.CTRLREWINDSTART));
+		firstText.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_0); 
+		previousText.setImage(IImageKeys.getImage(IImageKeys.CTRLREWIND));
+		previousText.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_1); 
+		first.setImage(IImageKeys.getImage(IImageKeys.CTRLSTART)); 
+		first.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_3); 
+		previous.setImage(IImageKeys.getImage(IImageKeys.CTRLREVERSE));
+		previous.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_4); 
+		next.setImage(IImageKeys.getImage(IImageKeys.CTRLPLAY));
+		next.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_7); 
+		last.setImage(IImageKeys.getImage(IImageKeys.CTRLEND));
+		last.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_8);
+		nextText.setImage(IImageKeys.getImage(IImageKeys.CTRLFASTFORWARD));
+		nextText.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_10); 
+		lastText.setImage(IImageKeys.getImage(IImageKeys.CTRLFASTFORWARDEND));
+		lastText.setToolTipText(SynopticEditionUIMessages.SynopticEditionEditor_11); 
+
+		// browse available extension points
+		try {		
+			IConfigurationElement[] config = Platform.getExtensionRegistry()
+					.getConfigurationElementsFor("org.txm.synopticeditor.toolbarbutton");
+			//Log.warning(Messages.ApplicationWorkbenchAdvisor_15+config.length);
+			for (IConfigurationElement e : config) {
+				Object o = e.createExecutableExtension("class"); //$NON-NLS-1$
+				if (o instanceof ToolbarButton) {
+					ToolbarButton tb = ((ToolbarButton) o);
+					Composite b = tb.getToolbarButton(supplementaryButtonComposite, this);
+					//b.setLayoutData(buttonGridData);
+					toolbarButtons.add(tb);
+				}
+			}
+		} catch (Exception ex) {
+			System.out.println(ex.getMessage());
+		}
+
+		page_text.addKeyListener(new KeyListener() {
+
+			@Override
+			public void keyReleased(KeyEvent e) {
+				if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
+					goToPage(page_text.getText());
+				}
+			}
+
+			@Override
+			public void keyPressed(KeyEvent e) {}
+		});
+		// set listeners
+		first.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				firstPage();
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				firstPage();
+			}
+		});
+		previous.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				previousPage();
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				previousPage();
+			}
+		});
+		next.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				nextPage();
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				nextPage();
+			}
+		});
+		last.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				lastPage();
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				lastPage();
+			}
+		});
+		nextText.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				nextText();
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				nextText();
+			}
+		});
+		// set listeners
+		previousText.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				previousText(false);
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				previousText(false);
+			}
+		});
+		lastText.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				lastText();
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				lastText();
+			}
+		});
+		// set listeners
+		firstText.addSelectionListener(new SelectionListener() {
+			@Override
+			public void widgetDefaultSelected(SelectionEvent e) {
+				firstText();
+			}
+
+			@Override
+			public void widgetSelected(SelectionEvent e) {
+				firstText();
+			}
+		});
+
+		// set Layouts
+		FormLayout parentLayout = new FormLayout();
+		parent.setLayout(parentLayout);
+
+		parent.pack();
+
+		openEditions(corpus, text, editionNames);
+	}
+
+	/**
+	 * Opens the default corpus edition with the first Text
+	 * 
+	 * @param corpus
+	 */
+	public boolean openEditions(Corpus corpus) {
+		if (corpus == null) return false;
+		return openEditions(corpus, corpus.getFirstText(), corpus.getDefaultEdition());
+	}
+
+	/**
+	 * update editor title using the first panel only 
+	 */
+	private void updatePageLabel() {
+		for (EditionPanel p : editionPanels.values()) {
+			this.setPartName(p.getCurrentPage().getEdition().getText().getName()+ " - "+p.getCurrentPage().getName()); //$NON-NLS-1$
+			page_text.setText(p.getCurrentPage().getName());
+			page_label.setText(" / "+p.getCurrentPage().getEdition().getNumPages()); //$NON-NLS-1$
+			controlsArea.layout();
+			return;
+		}
+	}
+
+	public boolean openEditions(Corpus corpus, String textID, String... editionNames) {
+		Text text = corpus.getText(textID);
+		if (text == null) return false;
+		return openEditions(corpus, text, editionNames);
+	}
+
+	/**
+	 * Opens a list of edition corpus
+	 * @param corpus
+	 * @param editionNames
+	 */
+	public boolean openEditions(Corpus corpus, Text text, String... editionNames) {
+
+		// remove previous EditionPanel
+		for (EditionPanel panel : editionPanels.values()) {
+			panel.dispose();
+		}
+		editionPanels = new LinkedHashMap<String, EditionPanel>();
+
+		editionsArea.setLayout(new GridLayout(editionNames.length, true));
+
+		for (int i = 0 ; i < editionNames.length ;i++) {
+			String editionName = editionNames[i];
+			//System.out.println("EDITION NAME: "+editionName);
+			Composite container = editionsArea;//.getContainer(i);
+			Edition edition = text.getEdition(editionName);
+			if (edition != null) {
+				EditionPanel panel = new EditionPanel(this, container, SWT.BORDER, edition);
+				panel.initSelectionProvider();
+
+				if (i == 0) { // TODO: how to manage multiple menumanager -> the text selection does not work only the first panel selection is used
+					panel.initMenu();
+					getSite().registerContextMenu(panel.getMenuManager(), panel.getSelectionProvider());
+				}
+
+				editionPanels.put(editionName, panel);
+			} else {
+				System.out.println(SynopticEditionUIMessages.SynopticEditionEditor_9+editionName);
+			}
+		}
+		editionsArea.layout();
+		return true;
+	}
+
+	/**
+	 * 
+	 * //TODO: add getDefaultEditions to Corpus object
+	 * 
+	 * @param corpus
+	 * @return a list of default editions
+	 */
+	public String[] getDefaultEditions(Corpus corpus) {
+		String defaultEdition = corpus.getDefaultEdition();
+		if (defaultEdition.contains(",")) { //$NON-NLS-1$
+			return defaultEdition.split(","); //$NON-NLS-1$
+		} else {
+			return new String[]{defaultEdition};
+		}
+	}
+
+	@Override
+	public void doSave(IProgressMonitor monitor) {
+		for (ToolbarButton b : toolbarButtons) {
+			b.save();
+		}
+		firePropertyChange(IEditorPart.PROP_DIRTY);
+	}
+
+	@Override
+	public void doSaveAs() {
+		return;
+	}
+
+	@Override
+	public void init(IEditorSite site, IEditorInput input)
+			throws PartInitException {
+		setSite(site);
+		setInput(input);
+
+		corpus = ((SynopticEditorInput) getEditorInput()).getCorpus();
+		corpus = corpus.getMainCorpus();
+		text = ((SynopticEditorInput) getEditorInput()).getText();
+		editionNames = ((SynopticEditorInput) getEditorInput()).getEditions();
+
+		IPartListener2 pl = new IPartListener2() {
+			// ... Other methods
+			public void partClosed(IWorkbenchPartReference partRef) {
+				if (partRef.getId().equals(ID)) { // called after this.doSave() 
+					//System.out.println("EVENT partClosed");
+					for (ToolbarButton b : toolbarButtons) {
+						if (b.isDirty()) b.discardChanges();
+					}
+				}
+			}
+
+			@Override
+			public void partActivated(IWorkbenchPartReference partRef) { }
+
+			@Override
+			public void partBroughtToTop(IWorkbenchPartReference partRef) { }
+
+			@Override
+			public void partDeactivated(IWorkbenchPartReference partRef) { }
+
+			@Override
+			public void partOpened(IWorkbenchPartReference partRef) { }
+
+			@Override
+			public void partHidden(IWorkbenchPartReference partRef) { }
+
+			@Override
+			public void partVisible(IWorkbenchPartReference partRef) { }
+
+			@Override
+			public void partInputChanged(IWorkbenchPartReference partRef) { }
+
+		};
+		this.getEditorSite().getPage().addPartListener(pl);
+	}
+
+	@Override
+	public boolean isDirty() {
+		boolean dirty = false;
+		for (ToolbarButton b : toolbarButtons) {
+			dirty = dirty || b.isDirty();
+		}
+		return dirty;
+	}
+
+	public boolean isDisposed() {
+		return editionsArea.isDisposed();
+	}
+
+	@Override
+	public boolean isSaveAsAllowed() {
+		return false;
+	}
+
+	@Override
+	public void setFocus() {
+
+	}
+
+	public void backToText(Text text, String line_wordid) {
+		for (EditionPanel p : editionPanels.values()) {
+			p.backToText(text, line_wordid);
+		}
+		updatePageLabel();
+		
+		for (ToolbarButton button : this.toolbarButtons) {
+			button.onBackToText(text, line_wordid);
+		}
+	}
+
+	public void reloadPage() {
+		for (EditionPanel p : editionPanels.values()) {
+			p.reloadPage();
+		}
+	}
+
+	@Override
+	public String getTextSelection() {
+		String sel = null;
+		for (EditionPanel p : editionPanels.values()) {
+			sel = p.getTextSelection();
+			if (sel != null) return sel;
+		}
+		return "";
+	}
+
+	@Override
+	public Corpus getCorpus() {
+		return corpus;
+	}
+
+	public EditionPanel getEditionPanel(int i) {
+		int n = 0;
+		for (EditionPanel p : editionPanels.values()) {
+			if (n == i) return p;
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @return the first and last word ID covered by the text selection of the first EditionPanel
+	 */
+	public Object getWordSelection() {
+		for (EditionPanel p : editionPanels.values()) {
+			return p.getWordSelection();
+		}
+		return null;
+	}
+
+	/**
+	 * 
+	 * @param text2 the Text to set
+	 * @param refresh if true set the first Text page
+	 */
+	public void setText(Text text2, boolean refresh) {
+		for (EditionPanel p : editionPanels.values()) {
+			p.setText(text2, refresh);
+		}
+	}
+
+	public void setFocusedWordID(String focusid) {
+		for (EditionPanel p : editionPanels.values()) {
+			p.setFocusedWordID(focusid);
+		}
+	}
+
+	/**
+	 *  NOT DONE
+	 *  
+	 * @param pos
+	 */
+	public void setHighlightedArea(HashSet<int[]> positions) {
+		for (EditionPanel p : editionPanels.values()) {
+			p.setHighlightedArea(positions);
+		}
+	}
+
+	public void updateWordStyles() {
+		for (EditionPanel p : editionPanels.values()) {
+			p.updateWordStyles();
+		}
+	}
+
+	public void addFontWeightWordsById(String weight, List<String> previousSelectedUnitIDS) {
+		for (EditionPanel p : editionPanels.values()) {
+			p.addFontWeightWordsById(weight, previousSelectedUnitIDS);
+		}
+	}
+
+	public void removeFontWeightWordsById(List<String> previousSelectedUnitIDS) {
+		for (EditionPanel p : editionPanels.values()) {
+			p.removeFontWeightWordsById(previousSelectedUnitIDS);
+		}
+	}
+
+	public void fireIsDirty() {
+		this.firePropertyChange(IEditorPart.PROP_DIRTY);
+	}
+
+	/**
+	 * Clear all highlighted words
+	 */
+	public void removeHighlightWords() {
+		for (EditionPanel p : editionPanels.values()) {
+			p.removeHighlightWords();
+		}
+	}
+}
\ No newline at end of file

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SynopticEditionEditor.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/EditionSelectorDialog.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/EditionSelectorDialog.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/EditionSelectorDialog.java	(revision 653)
@@ -0,0 +1,52 @@
+package org.txm.synopticedition.rcp.editors;
+
+import org.eclipse.jface.viewers.ILabelProvider;
+import org.eclipse.jface.viewers.ILabelProviderListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.dialogs.ElementListSelectionDialog;
+import org.txm.objects.Corpus;
+import org.txm.synopticedition.rcp.messages.SynopticEditionUIMessages;
+
+public class EditionSelectorDialog extends ElementListSelectionDialog {
+
+	public EditionSelectorDialog(Shell parent, Corpus corpus, String[] defaultSelection) {
+		super(parent, new ILabelProvider() {
+			@Override
+			public void removeListener(ILabelProviderListener listener) { }
+
+			@Override
+			public boolean isLabelProperty(Object element,
+					String property) {
+				return false;
+			}
+
+			@Override
+			public void dispose() { }
+
+			@Override
+			public void addListener(ILabelProviderListener listener) { }
+
+			@Override
+			public Image getImage(Object element) {
+				return null;
+			}
+
+			@Override
+			public String getText(Object element) {
+				return element.toString();
+			}
+		});
+
+		setTitle(SynopticEditionUIMessages.EditionSelectorDialog_0);
+		setMessage(SynopticEditionUIMessages.EditionSelectorDialog_1);
+		setMultipleSelection(true);
+		setElements(corpus.getEditionNames().toArray());
+		setFilter("*"); //$NON-NLS-1$
+		
+		if (defaultSelection == null) {
+			defaultSelection = new String[]{corpus.getDefaultEdition()};
+		}
+		this.setInitialSelections(defaultSelection);
+	}
+}
\ No newline at end of file

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/EditionSelectorDialog.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SashPanel.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SashPanel.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SashPanel.java	(revision 653)
@@ -0,0 +1,90 @@
+package org.txm.synopticedition.rcp.editors;
+
+import java.util.ArrayList;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.layout.FormLayout;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Sash;
+
+public class SashPanel extends Composite {
+
+	//Composite parent;
+	ArrayList<Composite> cells;
+
+	public SashPanel(Composite parent, int style) {
+		super(parent, style);
+		//this.parent = parent;
+		this.setLayout(new FormLayout());
+	}
+
+	public void init(int ncolumns) {
+		if (cells != null) {
+			for(Control c : this.getChildren())
+				c.dispose();
+			cells.clear();
+			cells = new ArrayList<Composite>();
+		}
+
+		cells = new ArrayList<Composite>();
+		Sash sash = null;
+		FormData sashData = null;
+		for (int i = 0 ; i < ncolumns ; i++) {
+			Composite container = new Composite(this, SWT.NONE);
+			container.setLayout(new GridLayout());
+			cells.add(container);
+
+			FormData containerData = new FormData();
+			containerData.width = 100;
+			containerData.top = new FormAttachment(0, 0);
+			containerData.bottom = new FormAttachment(100, 0);
+			container.setLayoutData(containerData);// set new layout data
+
+			if (sash != null) { // attached FormData to previous sash and vice-versa
+				sashData.right = new FormAttachment(container, 0);
+				containerData.left = new FormAttachment(sash, 0);
+			} else if (i == 0) {
+				containerData.left = new FormAttachment(0, 0); // first cell
+			}
+
+			if (i == ncolumns -1 ) {
+				containerData.right = new FormAttachment(100, 0); // last cell
+			} else {
+				sash = new Sash(this, SWT.VERTICAL);
+				containerData.right = new FormAttachment(sash, 0);
+
+				sashData = new FormData();
+				sashData.left = new FormAttachment(container, 0);
+				sashData.top = new FormAttachment(0, 0);
+				sashData.bottom = new FormAttachment(100, 0);
+				sash.setLayoutData(sashData);
+			}
+			sash.addListener(SWT.Selection, new Listener() {
+				@Override
+				public void handleEvent(Event e) {
+					SashPanel.this.layout();
+					//								e.getBounds()
+					//								Rectangle sashRect = sash.getBounds();
+					//								Rectangle shellRect = SashPanel.this.getClientArea();
+					//								int right = shellRect.width - sashRect.width;
+					//								e.x = Math.max(Math.min(e.x, right), 0);
+					//								if (e.x != sashRect.x) {
+					//									sashData.left = new FormAttachment(0, e.x);
+					//									parentContainer.layout();
+					//								}
+				}
+			});
+		}
+
+	}
+
+	public Composite getContainer(int i) {
+		return cells.get(i);
+	}
+}

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SashPanel.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SynopticEditorInput.java
===================================================================
--- tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SynopticEditorInput.java	(revision 0)
+++ tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SynopticEditorInput.java	(revision 653)
@@ -0,0 +1,112 @@
+package org.txm.synopticedition.rcp.editors;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IPersistableElement;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.txm.objects.Text;
+import org.txm.rcp.Application;
+import org.txm.rcp.IImageKeys;
+import org.txm.rcp.editors.TXMResultEditorInput;
+import org.txm.searchengine.cqp.corpus.Corpus;
+
+import cern.colt.Arrays;
+
+public class SynopticEditorInput extends TXMResultEditorInput implements IEditorInput {
+
+	private Corpus corpus;
+	private Text text;
+	private String[] editions;
+
+	/**
+	 * Instantiates a new SynopticEditorInput
+	 *
+	 * @param corpus, the corpus
+	 * @param text, the text to show
+	 * @param editions, the editions to show
+	 */
+	public SynopticEditorInput(Corpus corpus, String text, String[] editions) {
+		super(corpus);
+		
+		this.corpus = corpus;
+		corpus = corpus.getMainCorpus();
+		this.editions = editions;
+		
+		if (text == null) {
+			this.text = corpus.getFirstText();
+		} else {
+			this.text = corpus.getText(text);
+		}
+		
+		if (editions == null) {
+			String[] defaultEditions = {corpus.getDefaultEdition()};
+			this.editions = defaultEditions;
+		}
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
+	 */
+	@Override
+	public ImageDescriptor getImageDescriptor() {
+		return AbstractUIPlugin.imageDescriptorFromPlugin(
+				Application.PLUGIN_ID, IImageKeys.EDITION);
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IEditorInput#getName()
+	 */
+	@Override
+	public String getName() {
+		return corpus.getName()+ " - "+text+ " - "+Arrays.toString(editions);  //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IEditorInput#getPersistable()
+	 */
+	@Override
+	public IPersistableElement getPersistable() {
+		return null;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IEditorInput#getToolTipText()
+	 */
+	@Override
+	public String getToolTipText() {
+		return getName();
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+	 */
+	@Override
+	public Object getAdapter(Class adapter) {
+		return null;
+	}
+
+	/**
+	 * Gets the corpus.
+	 *
+	 * @return the corpus
+	 */
+	public Corpus getCorpus() {
+		return corpus;
+	}
+
+	public Text getText() {
+		return text;
+	}
+	
+	public String[] getEditions() {
+		return editions;
+	}
+
+	/* (non-Javadoc)
+	 * @see org.eclipse.ui.IEditorInput#exists()
+	 */
+	@Override
+	public boolean exists() {
+		return false;
+	}
+}

Property changes on: tmp/org.txm.synopticeditor.rcp/src/org/txm/synopticedition/rcp/editors/SynopticEditorInput.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.synopticeditor.rcp/plugin.xml
===================================================================
--- tmp/org.txm.synopticeditor.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.synopticeditor.rcp/plugin.xml	(revision 653)
@@ -7,7 +7,7 @@
       <menuContribution
             locationURI="popup:ConcordanceEditor">
          <command
-               commandId="org.txm.rcp.synoptic.commands.BackToText"
+               commandId="org.txm.synopticedition.rcp.handlers.BackToText"
                icon="icons/objects/edition.png"
                style="push">
          </command>
@@ -27,9 +27,9 @@
       </menuContribution>
       <menuContribution
             allPopups="true"
-            locationURI="toolbar:org.txm.rcp.toolbarcorpus?before=org.txm.rcp.toolbarcorpus.description">
+            locationURI="toolbar:org.txm.rcp.toolbarcorpus">
          <command
-               commandId="org.txm.rcp.synoptic.commands.OpenEdition"
+               commandId="org.txm.synopticedition.rcp.handlers.OpenEdition"
                icon="icons/objects/edition.png"
                style="push"
                tooltip="%command.tooltip.0">
@@ -46,7 +46,7 @@
       <menuContribution
             locationURI="popup:org.txm.rcp.views.corpora.CorporaView?before=corporaview.description">
          <command
-               commandId="org.txm.rcp.synoptic.commands.OpenEdition"
+               commandId="org.txm.synopticedition.rcp.handlers.OpenEdition"
                icon="icons/objects/edition.png"
                style="push"
                tooltip="%command.tooltip.0">
@@ -63,7 +63,7 @@
       <menuContribution
             locationURI="menu:menu.corpus?before=menu.corpus.description">
          <command
-               commandId="org.txm.rcp.synoptic.commands.OpenEdition"
+               commandId="org.txm.synopticedition.rcp.handlers.OpenEdition"
                icon="icons/objects/edition.png"
                style="push"
                tooltip="%command.tooltip.0">
@@ -89,30 +89,30 @@
    <extension
          point="org.eclipse.ui.commands">
       <command
-            defaultHandler="org.txm.rcp.synoptic.commands.OpenEdition"
-            id="org.txm.rcp.synoptic.commands.OpenEdition"
+            defaultHandler="org.txm.synopticedition.rcp.handlers.OpenEdition"
+            id="org.txm.synopticedition.rcp.handlers.OpenEdition"
             name="%command.name">
       </command>
       <command
-            defaultHandler="org.txm.rcp.synoptic.commands.BackToText"
-            id="org.txm.rcp.synoptic.commands.BackToText"
+            defaultHandler="org.txm.synopticedition.rcp.handlers.BackToText"
+            id="org.txm.synopticedition.rcp.handlers.BackToText"
             name="%command.name.0">
       </command>
    </extension>
    <extension
          point="org.eclipse.ui.editors">
       <editor
-            class="org.txm.rcp.synoptic.editor.SynopticEditionEditor"
+            class="org.txm.synopticedition.rcp.editors.SynopticEditionEditor"
             default="false"
             icon="icons/objects/edition.png"
-            id="org.txm.rcp.synoptic.editor.SynopticEditionEditor"
+            id="org.txm.synopticedition.rcp.editors.SynopticEditionEditor"
             name="%editor.name">
       </editor>
    </extension>
    <extension
          point="org.eclipse.ui.bindings">
       <key
-            commandId="org.txm.rcp.synoptic.commands.BackToText"
+            commandId="org.txm.synopticedition.rcp.handlers.BackToText"
             contextId="org.eclipse.ui.contexts.window"
             schemeId="org.txm.rcp.scheme"
             sequence="M1+E">
@@ -121,7 +121,7 @@
    <extension
          point="org.txm.rcp.extensionpoint.backtotext">
       <command
-            class="org.txm.rcp.synoptic.commands.BackToText"
+            class="org.txm.synopticedition.rcp.handlers.BackToText"
             name="Synoptic">
       </command>
    </extension>
@@ -129,7 +129,7 @@
          point="org.eclipse.ui.preferencePages">
       <page
             category="org.txm.rcp.preferences.UserPreferencePage"
-            class="org.txm.rcp.synoptic.preferences.EditionPreferencePage"
+            class="org.txm.synopticedition.rcp.preferences.SynopticEditionPreferencePage"
             id="org.txm.rcp.synoptic.preferences.EditionPreferencePage"
             name="Edition">
       </page>
Index: tmp/org.txm.links.rcp/plugin.xml
===================================================================
--- tmp/org.txm.links.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.links.rcp/plugin.xml	(revision 653)
@@ -5,76 +5,76 @@
          id="links"
          point="org.eclipse.ui.commands">
       <command
-            defaultHandler="org.txm.rcp.commands.link.ToConcordance"
-            id="org.txm.rcp.commands.link.ToConcordance"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.ToConcordance"
+            id="org.txm.synopticedition.rcp.commands.link.ToConcordance"
             name="%command.name.1">
       </command>
       <command
-            defaultHandler="org.txm.rcp.commands.link.ToIndex"
-            id="org.txm.rcp.commands.link.ToIndex"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.ToIndex"
+            id="org.txm.synopticedition.rcp.commands.link.ToIndex"
             name="%command.name.2">
       </command>
       <command
-            defaultHandler="org.txm.rcp.commands.link.ToProgression"
-            id="org.txm.rcp.commands.link.ToProgression"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.ToProgression"
+            id="org.txm.synopticedition.rcp.commands.link.ToProgression"
             name="%command.name.3">
       </command>
             <command
-            defaultHandler="org.txm.rcp.commands.link.IndexToConcordance"
-            id="org.txm.rcp.commands.link.IndexToConcordance"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.IndexToConcordance"
+            id="org.txm.synopticedition.rcp.commands.link.IndexToConcordance"
             name="%command.label.73">
       </command>
            <command
-            categoryId="org.txm.rcp.category.txm"
-            defaultHandler="org.txm.rcp.commands.link.CooccurrencesToConcordances"
-            id="org.txm.rcp.commands.link.CooccurrencesToConcordances"
+            categoryId="org.txm.synopticedition.rcp.category.txm"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.CooccurrencesToConcordances"
+            id="org.txm.synopticedition.rcp.commands.link.CooccurrencesToConcordances"
             name="%command.label.102">
       </command>
       <command
-            categoryId="org.txm.rcp.category.txm"
-            defaultHandler="org.txm.rcp.commands.link.IndexToProgression"
-            id="org.txm.rcp.commands.link.IndexToProgression"
+            categoryId="org.txm.synopticedition.rcp.category.txm"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.IndexToProgression"
+            id="org.txm.synopticedition.rcp.commands.link.IndexToProgression"
             name="%command.label.103">
       </command>
       <command
-            defaultHandler="org.txm.rcp.commands.link.IndexToLexicalTable"
-            id="org.txm.rcp.commands.link.IndexToLexicalTable"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.IndexToLexicalTable"
+            id="org.txm.synopticedition.rcp.commands.link.IndexToLexicalTable"
             name="%command.name.43">
       </command>
       <command
-            defaultHandler="org.txm.rcp.commands.link.LexiconToIndex"
-            id="org.txm.rcp.commands.link.LexiconToIndex"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.LexiconToIndex"
+            id="org.txm.synopticedition.rcp.commands.link.LexiconToIndex"
             name="%command.label.128">
       </command>
       <command
-            defaultHandler="org.txm.rcp.commands.link.IndexToCooccurrence"
-            id="org.txm.rcp.commands.link.IndexToCooccurrence"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.IndexToCooccurrence"
+            id="org.txm.synopticedition.rcp.commands.link.IndexToCooccurrence"
             name="%command.name.65">
       </command>
             <command
-            defaultHandler="org.txm.rcp.commands.link.TextToConcordance"
-            id="org.txm.rcp.commands.link.TextToConcordance"
+            defaultHandler="org.txm.synopticedition.rcp.commands.link.TextToConcordance"
+            id="org.txm.synopticedition.rcp.commands.link.TextToConcordance"
             name="%command.name.96">
       </command>
    </extension>
    <extension
          point="org.eclipse.ui.menus">
                <menuContribution
-            locationURI="popup:org.txm.rcp.editors.TXMBrowser">
+            locationURI="popup:org.txm.synopticedition.rcp.editors.TXMBrowser">
          <command
-               commandId="org.txm.rcp.commands.link.TextToConcordance"
+               commandId="org.txm.synopticedition.rcp.commands.link.TextToConcordance"
                label="%command.label.73"
                style="push">
          </command>
          <command
-               commandId="org.txm.rcp.commands.editor.Copy"
+               commandId="org.txm.synopticedition.rcp.commands.editor.Copy"
                label="%command.label.19">
          </command>
       </menuContribution>
       <menuContribution
-            locationURI="popup:org.txm.rcp.editors.TableEditor">
+            locationURI="popup:org.txm.synopticedition.rcp.editors.TableEditor">
          <command
-               commandId="org.txm.rcp.commands.link.TextToConcordance"
+               commandId="org.txm.synopticedition.rcp.commands.link.TextToConcordance"
                label="%command.label.74"
                style="push">
          </command>
Index: tmp/org.txm.links.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.links.rcp/META-INF/MANIFEST.MF	(revision 652)
+++ tmp/org.txm.links.rcp/META-INF/MANIFEST.MF	(revision 653)
@@ -29,9 +29,9 @@
  org.txm.cooccurrence.rcp;bundle-version="1.0.0";visibility:=reexport,
  org.txm.internalview.rcp;bundle-version="1.0.0";visibility:=reexport,
  org.txm.statsengine.r.rcp;bundle-version="1.0.0";visibility:=reexport,
- org.txm.rcp,
+ org.txm.synopticedition.rcp,
  org.txm.index.rcp,
  org.txm.progression.rcp,
  org.txm.lexicaltable.rcp,
  org.txm.libs.batik
-Export-Package: org.txm.rcp.commands.link
+Export-Package: org.txm.synopticedition.rcp.commands.link
Index: tmp/org.txm.links.rcp/src/org/txm/rcp/commands/link/TextToConcordance.java
===================================================================
--- tmp/org.txm.links.rcp/src/org/txm/rcp/commands/link/TextToConcordance.java	(revision 652)
+++ tmp/org.txm.links.rcp/src/org/txm/rcp/commands/link/TextToConcordance.java	(revision 653)
@@ -41,9 +41,9 @@
 import org.txm.rcp.RCPMessages;
 import org.txm.rcp.editors.IEditionEditor;
 import org.txm.rcp.editors.TXMResultEditorInput;
+import org.txm.searchengine.cqp.core.tests.Concordances;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.query.Query;
-import org.txm.test.Concordances;
 
 // TODO: Auto-generated Javadoc
 /**
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/r/RAHCChartCreator.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/r/RAHCChartCreator.java	(revision 652)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/chartsengine/r/RAHCChartCreator.java	(revision 653)
@@ -24,7 +24,7 @@
 		
 		String cmd = null;
 		// 2D
-		if (result.getBooleanParameterValue(AHCPreferences.DISPLAY_2D)) {
+		if (result.getBooleanParameterValue(AHCPreferences.RENDERING_2D)) {
 			cmd = "plot.HCPC(" + cah.getSymbol() + ", new.plot=FALSE, choice=\"tree\")";
 			
 		// FIXME: for tests without drawing the inertia barplot. Without it, the max available clusters can exceed 16
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/preferences/AHCPreferences.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/preferences/AHCPreferences.java	(revision 652)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/preferences/AHCPreferences.java	(revision 653)
@@ -19,32 +19,43 @@
 	// auto populate the preference node qualifier from the current bundle id
 	public static final String PREFERENCES_NODE = FrameworkUtil.getBundle(AHCPreferences.class).getSymbolicName();
 
-	/** The Constant DISPLAY. */
-	public static final String DISPLAY_2D = "display_2d"; //$NON-NLS-1$
+	public static final String PREFERENCES_PREFIX = "ahc_"; //$NON-NLS-1$
 	
-	/** The Constant METHOD. */
-	public static final String METHOD = "method"; //$NON-NLS-1$
 	
-	/** The Constant METRIC. */
-	public static final String METRIC = "metric"; //$NON-NLS-1$
+	/**
+	 * To display in 2D or 3D.
+	 */
+	public static final String RENDERING_2D = PREFERENCES_PREFIX + "rendering_2d"; //$NON-NLS-1$
 	
-	/** The Constant NCLUSTER. */
-	public static final String N_CLUSTERS = "n_clusters"; //$NON-NLS-1$
+	/**
+	 * The method (METHODS <- c("average", "single", "complete", "ward", "weighted", "flexible")).
+	 */
+	public static final String METHOD = PREFERENCES_PREFIX + "method"; //$NON-NLS-1$
 	
-	public static final String COLUMNS_COMPUTING = "columns_computing"; //$NON-NLS-1$
+	/**
+	 * The metric (euclidean, manhattan).
+	 */
+	public static final String METRIC = PREFERENCES_PREFIX + "metric"; //$NON-NLS-1$
 	
-	public AHCPreferences() {
-		// TODO Auto-generated constructor stub
-	}
+	/**
+	 * The number of clusters.
+	 */
+	public static final String N_CLUSTERS = PREFERENCES_PREFIX + "n_clusters"; //$NON-NLS-1$
+	
+	/**
+	 * To compute the columns or the rows.
+	 */
+	public static final String COLUMNS_COMPUTING = PREFERENCES_PREFIX + "columns_computing"; //$NON-NLS-1$
+	
 
 	@Override
 	public void initializeDefaultPreferences() {
 		Preferences preferences = DefaultScope.INSTANCE.getNode(PREFERENCES_NODE);
 		
-		preferences.putBoolean(DISPLAY_2D, true);
+		preferences.putBoolean(RENDERING_2D, true);
 		preferences.putInt(N_CLUSTERS, 2);
-		preferences.put(METHOD, "ward");
-		preferences.put(METRIC, "euclidean");
+		preferences.put(METHOD, "ward"); //$NON-NLS-1$
+		preferences.put(METRIC, "euclidean"); //$NON-NLS-1$
 		
 		preferences.putBoolean(COLUMNS_COMPUTING, true);
 		
Index: tmp/org.txm.cah.core/src/org/txm/cah/core/functions/AHC.java
===================================================================
--- tmp/org.txm.cah.core/src/org/txm/cah/core/functions/AHC.java	(revision 652)
+++ tmp/org.txm.cah.core/src/org/txm/cah/core/functions/AHC.java	(revision 653)
@@ -36,6 +36,7 @@
 import org.txm.cah.core.preferences.AHCPreferences;
 import org.txm.chartsengine.core.results.ChartResult;
 import org.txm.core.preferences.TXMPreferences;
+import org.txm.core.results.Parameter;
 import org.txm.core.results.TXMParameters;
 import org.txm.lexicaltable.core.functions.LexicalTable;
 import org.txm.statsengine.r.core.RWorkspace;
@@ -51,24 +52,24 @@
  */
 public class AHC extends ChartResult	{
 
-	/** The metric. */
-	String pMetric = "euclidean"; // euclidean, manhattan //$NON-NLS-1$
+	/**
+	 * The R name prefix.
+	 */
+	protected static String prefixR = "FactoMineRAHC"; //$NON-NLS-1$
 
-	/** The method. */
-	String pMethod = "ward"; // METHODS <- c("average", "single", "complete", "ward", "weighted", "flexible") //$NON-NLS-1$
+	/**
+	 * Counter used in name suffix.
+	 */
+	protected static int ahcCounter = 1;
+	
 
-	/** The N cluster. */
-	Integer pNCluster = 3;
-
-	/** if true classify columns values. */
-	Boolean pColumns = true;
-
 	/** The symbol. */
 	String symbol = null;
 
 	/** The CA symbol target. */
 	String target;
 
+	
 	/**
 	 * The coordinates of the clusters.
 	 */
@@ -107,48 +108,121 @@
 	protected CA ca;
 	protected LexicalTable table;
 
+	
+	
+	
+	
+	
 	/**
-	 * Instantiates a new cAH.
+	 * The metric (euclidean, manhattan).
+	 */
+	@Parameter(key=AHCPreferences.METRIC)
+	protected String metric;
+
+	/**
+	 * The method (METHODS <- c("average", "single", "complete", "ward", "weighted", "flexible")).
+	 */
+	@Parameter(key=AHCPreferences.METHOD)
+	protected String method;
+
+	/**
+	 * The number of clusters.
+	 */
+	@Parameter(key=AHCPreferences.N_CLUSTERS)
+	protected int numberOfClusters;
+
+	/**
+	 * To compute the columns or the rows.
+	 */
+	@Parameter(key=AHCPreferences.COLUMNS_COMPUTING)
+	protected boolean columnsComputing;
+	
+	/**
+	 * To display in 2D or 3D.
+	 */
+	@Parameter(key=AHCPreferences.RENDERING_2D)
+	protected boolean rendering2D;
+	
+	
+	
+	/**
+	 * Instantiates a new AHC.
 	 *
 	 * @param ca the ca
 	 * @param col the col
-	 * @param pMethod the method
-	 * @param pMetric the metric
-	 * @param pNCluster the n cluster
+	 * @param method the method
+	 * @param metric the metric
+	 * @param numberOfClusters the n cluster
 	 * @param display2D the display mode
 	 */
 	public AHC(CA ca)	{
 		super(ca);
 		this.ca = ca;
-		this.table = ca.getLexicalTable();
-		this.target = ca.getSymbol();
 	}
 
+	@Override
+	protected boolean _compute()	{
+
+		
+		Log.info("Computing CAH...");
+		try {
+			this.table = this.ca.getLexicalTable();
+			this.target = this.ca.getSymbol();
+
+			// reset the number of clusters to default
+			if(this.hasParameterChanged(AHCPreferences.COLUMNS_COMPUTING))	{
+				this.numberOfClusters = TXMPreferences.getInt(AHCPreferences.N_CLUSTERS, AHCPreferences.PREFERENCES_NODE);
+			}
+
+			
+			String colOrLine = "columns"; //$NON-NLS-1$
+			if (!this.columnsComputing)
+				colOrLine ="rows"; //$NON-NLS-1$
+
+			if (this.symbol == null)	{
+				this.symbol = prefixR + (ahcCounter++);
+			}
+
+			RWorkspace rw = RWorkspace.getRWorkspaceInstance();
+			rw.eval("library(FactoMineR)"); //$NON-NLS-1$
+			rw.eval(this.symbol +" <- HCPC(" + this.target + //$NON-NLS-1$
+					", cluster.CA=\"" + colOrLine + "\"" + //$NON-NLS-1$ //$NON-NLS-2$
+					", nb.clust=" + this.numberOfClusters + //$NON-NLS-1$
+					", metric=\"" + this.metric + "\"" + //$NON-NLS-1$ //$NON-NLS-2$
+					", method=\"" + this.method + "\"" + //$NON-NLS-1$ //$NON-NLS-2$
+					", graph=FALSE)"); //$NON-NLS-1$
+			
+		} catch(Exception e) {
+			Log.printStackTrace(e);
+			return false;
+		}
+
+		// Reset the cached data
+		this.resetCache();
+		this.dirty = false;
+		return true;
+	}
 	
+	
+	
 	public void setParameters(Boolean columns, String metric, Integer nCluster, String method) {
-		if (columns != null) this.pColumns = columns;
-		if (metric != null) this.pMetric = metric;
-		if (nCluster != null) this.pNCluster = nCluster;
-		if (method != null) this.pMethod = method;
+		if (columns != null) this.columnsComputing = columns;
+		if (metric != null) this.metric = metric;
+		if (nCluster != null) this.numberOfClusters = nCluster;
+		if (method != null) this.method = method;
 		dirty = true;
 	}
 
 
 	@Override
 	public boolean loadParameters() {
-		this.setParameters(
-				this.getBooleanParameterValue(AHCPreferences.COLUMNS_COMPUTING),
-				this.getStringParameterValue(AHCPreferences.METRIC),
-				this.getIntParameterValue(AHCPreferences.N_CLUSTERS),
-				this.getStringParameterValue(AHCPreferences.METHOD)
-				);
+		// nothing to do
 		return true;
 	}
 
 	@Override
 	public boolean saveParameters() {
-		// TODO Auto-generated method stub
-		System.err.println("AHC.saveParameters(): not yet implemented.");
+		// nothing to do
 		return true;
 	}
 
@@ -156,10 +230,10 @@
 	
 	@Override
 	public boolean canCompute() {
-		return ca != null 
-				&& Arrays.binarySearch(AHC.getMethods(), pMethod) >= 0 
-				&& Arrays.binarySearch(AHC.getMetrics(), pMetric) >= 0
-				&& pNCluster >= 2;
+		return this.ca != null 
+				&& Arrays.binarySearch(AHC.getMethods(), this.method) >= 0 
+				&& Arrays.binarySearch(AHC.getMetrics(), this.metric) >= 0
+				&& this.numberOfClusters >= 2;
 	}
 
 	@Override
@@ -210,58 +284,6 @@
 		return metrics;
 	}
 
-	/** The prefix r. */
-	protected static String prefixR = "FactoMineRAHC"; //$NON-NLS-1$
-
-	/** The nocah. */
-	protected static int nocah = 1;
-
-	@Override
-	protected boolean _compute()	{
-
-		
-		Log.info("Computing CAH...");
-		try {
-			
-			// compute the lexical table
-			this.table.compute();
-			
-			
-			RWorkspace rw = RWorkspace.getRWorkspaceInstance();
-
-			String colOrLine = "columns"; //$NON-NLS-1$
-			if (!pColumns)
-				colOrLine ="rows"; //$NON-NLS-1$
-
-			if (symbol == null)	{
-				symbol = prefixR+(nocah++);
-			}
-
-			rw.eval("library(FactoMineR)"); //$NON-NLS-1$
-
-
-			rw.eval(symbol +" <- HCPC("+target + //$NON-NLS-1$
-					", cluster.CA=\""+colOrLine+"\"" + //$NON-NLS-1$ //$NON-NLS-2$
-					", nb.clust="+pNCluster + //$NON-NLS-1$
-					", metric=\""+pMetric+"\"" + //$NON-NLS-1$ //$NON-NLS-2$
-					", method=\""+pMethod+"\"" + //$NON-NLS-1$ //$NON-NLS-2$
-					", graph=FALSE)"); //$NON-NLS-1$
-		} catch(Exception e) {
-			System.out.println("Failed to compute CAH: "+e);
-			Log.printStackTrace(e);
-			return false;
-		}
-
-		// FIXME: persistence
-		this.saveParameter(AHCPreferences.N_CLUSTERS, this.pNCluster);
-		this.saveParameter(AHCPreferences.COLUMNS_COMPUTING, this.pColumns);
-
-		// Reset the cached data
-		this.resetCache();
-		dirty = false;
-		return true;
-	}
-
 	/**
 	 *
 	 * @param outfile
@@ -495,7 +517,7 @@
 	 * @param metric the metric to set
 	 */
 	public void setMetric(String metric) {
-		this.pMetric = metric;
+		this.metric = metric;
 	}
 
 	/**
@@ -503,31 +525,31 @@
 	 * @param method the method to set
 	 */
 	public void setMethod(String method) {
-		this.pMethod = method;
+		this.method = method;
 	}
 
 	/**
-	 * Sets the computing to columns or rows.
-	 * @param columns the columns to set
+	 * Sets the computing to columns or rows and rest the number of clusters to default value.
+	 * @param columnsComputing the columns to set
 	 */
-	public void setColumnsComputing(boolean columns) {
-		this.pColumns = columns;
+	public void setColumnsComputing(boolean columnsComputing) {
+		this.columnsComputing = columnsComputing;
 	}
 
 	/**
 	 * Sets the number of clusters to use for computing
-	 * @param nCluster the nCluster to set
+	 * @param nClusters the nCluster to set
 	 */
-	public void setNCluster(int nCluster) {
-		pNCluster = nCluster;
+	public void setNumberOfClusters(int nClusters) {
+		numberOfClusters = nClusters;
 	}
 
 	/**
 	 * Checks if the computing mode is set as columns. If not, the computing mode is set as rows.
-	 * @return the columns
+	 * @return  
 	 */
 	public boolean isColumnsComputing() {
-		return pColumns;
+		return columnsComputing;
 	}
 
 	/**
@@ -582,10 +604,10 @@
 
 	/**
 	 * Returns the number of clusters.
-	 * @return the nCluster
+	 * @return the number of clusters
 	 */
-	public int getNCluster() {
-		return pNCluster;
+	public int getNumberOfClusters() {
+		return numberOfClusters;
 	}
 
 	public CA getCA() {
@@ -606,10 +628,10 @@
 	@Override
 	public String getSimpleName() {
 		StringBuffer buffer = new StringBuffer();
-		if (pColumns != null) buffer.append(pColumns?"cols":"rows");
-		if (pMethod != null) buffer.append(" "+pMethod);
-		if (pMetric != null) buffer.append(" "+pMetric);
-		if (pNCluster != null) buffer.append(" "+pNCluster);
+		buffer.append(this.columnsComputing ? "cols" : "rows"); //$NON-NLS-1$
+		buffer.append(this.method);
+		buffer.append(this.metric);
+		buffer.append(this.numberOfClusters);
 		return this.getName();
 	}
 
@@ -618,6 +640,24 @@
 		return this.getName();
 	}
 
+	/**
+	 * Gets the 2D rendering state.
+	 * If false, the rendering will be done in 3D.
+	 * @return the rendering2D
+	 */
+	public boolean isRendering2D() {
+		return rendering2D;
+	}
 
+	/**
+	 * Sets the 2D rendering state.
+	 * If set to false, the rendering will be done in 3D.
+	 * @param rendering2d the rendering2D to set
+	 */
+	public void setRendering2D(boolean rendering2d) {
+		rendering2D = rendering2d;
+	}
 
+
+
 }
Index: tmp/org.txm.annotation.rcp/src/org/txm/annotation/rcp/views/knowledgerepositories/KRView.java
===================================================================
--- tmp/org.txm.annotation.rcp/src/org/txm/annotation/rcp/views/knowledgerepositories/KRView.java	(revision 652)
+++ tmp/org.txm.annotation.rcp/src/org/txm/annotation/rcp/views/knowledgerepositories/KRView.java	(revision 653)
@@ -40,6 +40,8 @@
 
 
 
+
+
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.viewers.AbstractTreeViewer;
 import org.eclipse.jface.viewers.DoubleClickEvent;
Index: tmp/org.txm.progression.rcp/plugin.xml
===================================================================
--- tmp/org.txm.progression.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.progression.rcp/plugin.xml	(revision 653)
@@ -23,7 +23,7 @@
          point="org.eclipse.ui.menus">
       <menuContribution
             allPopups="false"
-            locationURI="toolbar:org.txm.rcp.toolbartools">
+            locationURI="toolbar:org.txm.rcp.toolbartools?after=org.txm.cooccurrence.rcp.handlers.ComputeCooccurrences">
          <command
                commandId="org.txm.progression.rcp.handlers.ComputeProgression"
                icon="icons/functions/progression.png"
@@ -41,7 +41,7 @@
       </menuContribution>
       <menuContribution
             allPopups="false"
-            locationURI="popup:org.txm.rcp.views.corpora.CorporaView">
+            locationURI="popup:org.txm.synopticedition.rcp.views.corpora.CorporaView">
          <command
                commandId="org.txm.progression.rcp.handlers.ComputeProgression"
                icon="icons/functions/progression.png"
Index: tmp/org.txm.progression.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.progression.rcp/META-INF/MANIFEST.MF	(revision 652)
+++ tmp/org.txm.progression.rcp/META-INF/MANIFEST.MF	(revision 653)
@@ -23,9 +23,9 @@
  org.eclipse.swt,
  org.txm.core;bundle-version="0.7.0",
  org.txm.chartsengine.jfreechart.core;bundle-version="1.0.0",
- org.txm.rcp,
  org.eclipse.core.expressions;bundle-version="3.4.600",
- org.txm.searchengine.core;bundle-version="1.0.0"
+ org.txm.searchengine.core;bundle-version="1.0.0",
+ org.txm.rcp
 Export-Package: org.txm.progression.rcp.adapters,
  org.txm.progression.rcp.chartsengine.events,
  org.txm.progression.rcp.editors,
Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionEventCallBack.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionEventCallBack.java	(revision 652)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/chartsengine/events/ProgressionEventCallBack.java	(revision 653)
@@ -31,14 +31,14 @@
 import org.txm.progression.core.functions.Progression;
 import org.txm.rcp.RCPMessages;
 import org.txm.rcp.editors.TXMResultEditorInput;
-import org.txm.rcp.synoptic.commands.OpenEdition;
-import org.txm.rcp.synoptic.editor.EditionPanel.RGBA;
-import org.txm.rcp.synoptic.editor.SynopticEditionEditor;
 import org.txm.rcp.utils.SWTEditorsUtils;
 import org.txm.searchengine.cqp.corpus.Corpus;
 import org.txm.searchengine.cqp.corpus.Property;
 import org.txm.searchengine.cqp.corpus.StructuralUnit;
 import org.txm.searchengine.cqp.corpus.query.Match;
+import org.txm.synopticedition.rcp.editors.SynopticEditionEditor;
+import org.txm.synopticedition.rcp.editors.EditionPanel.RGBA;
+import org.txm.synopticedition.rcp.handlers.OpenEdition;
 import org.txm.utils.logger.Log;
 
 /**
Index: tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/preferences/ProgressionPreferencePage.java
===================================================================
--- tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/preferences/ProgressionPreferencePage.java	(revision 652)
+++ tmp/org.txm.progression.rcp/src/org/txm/progression/rcp/preferences/ProgressionPreferencePage.java	(revision 653)
@@ -31,15 +31,13 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.ui.IWorkbench;
 import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
-import org.txm.core.preferences.TXMPreferences;
 import org.txm.progression.core.messages.ProgressionCoreMessages;
 import org.txm.progression.core.preferences.ProgressionPreferences;
 import org.txm.progression.rcp.adapters.ProgressionAdapterFactory;
 import org.txm.progression.rcp.messages.ProgressionUIMessages;
+import org.txm.rcp.jface.DoubleFieldEditor;
 import org.txm.rcp.preferences.TXMPreferencePage;
 import org.txm.rcp.preferences.TXMPreferenceStore;
-import org.txm.rcp.TxmPreferences;
-import org.txm.rcp.jface.DoubleFieldEditor;
 
 /**
  * Progression preference page.
Index: tmp/org.txm.concordance.rcp/plugin.xml
===================================================================
--- tmp/org.txm.concordance.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.concordance.rcp/plugin.xml	(revision 653)
@@ -67,7 +67,7 @@
       </menuContribution>
       <menuContribution
             allPopups="false"
-            locationURI="toolbar:org.txm.rcp.toolbartools">
+            locationURI="toolbar:org.txm.rcp.toolbartools?after=org.txm.index.rcp.handlers.ComputeIndex">
          <command
                commandId="org.txm.concordance.rcp.handlers.ComputeConcordance"
                icon="icons/concordance.png"
Index: tmp/org.txm.searchengine.cqp.core/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.searchengine.cqp.core/META-INF/MANIFEST.MF	(revision 652)
+++ tmp/org.txm.searchengine.cqp.core/META-INF/MANIFEST.MF	(revision 653)
@@ -13,14 +13,14 @@
 Bundle-ClassPath: res/,
  .
 Bundle-Vendor: %Bundle-Vendor
-Export-Package: org.txm.functions.diagnostic,
- org.txm.functions.preview,
- org.txm.functions.selection,
- org.txm.functions.summary,
- org.txm.importer.cwb,
+Export-Package: org.txm.importer.cwb,
  org.txm.searchengine.cqp,
  org.txm.searchengine.cqp.clientExceptions,
+ org.txm.searchengine.cqp.core.functions.information,
+ org.txm.searchengine.cqp.core.functions.preview,
+ org.txm.searchengine.cqp.core.functions.selection,
+ org.txm.searchengine.cqp.core.functions.summary,
+ org.txm.searchengine.cqp.core.tests,
  org.txm.searchengine.cqp.corpus,
  org.txm.searchengine.cqp.corpus.query,
- org.txm.searchengine.cqp.serverException,
- org.txm.test
+ org.txm.searchengine.cqp.serverException
Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Corpus.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Corpus.java	(revision 652)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Corpus.java	(revision 653)
@@ -39,11 +39,11 @@
 import org.eclipse.osgi.util.NLS;
 import org.txm.core.messages.TXMCoreMessages;
 import org.txm.core.results.TXMResult;
-import org.txm.functions.selection.SelectionResult;
 import org.txm.objects.Base;
 import org.txm.objects.TxmObject;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.clientExceptions.InvalidCqpIdException;
+import org.txm.searchengine.cqp.core.functions.selection.SelectionResult;
 import org.txm.searchengine.cqp.corpus.query.Match;
 import org.txm.searchengine.cqp.corpus.query.Query;
 import org.txm.searchengine.cqp.corpus.query.QueryPart;
Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Subcorpus.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Subcorpus.java	(revision 652)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/Subcorpus.java	(revision 653)
@@ -34,7 +34,6 @@
 import org.eclipse.osgi.util.NLS;
 import org.txm.core.messages.TXMCoreMessages;
 import org.txm.core.results.TXMParameters;
-import org.txm.functions.selection.SelectionResult;
 import org.txm.objects.Base;
 import org.txm.objects.TxmObject;
 import org.txm.searchengine.cqp.AbstractCqiClient;
@@ -42,6 +41,7 @@
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.clientExceptions.InvalidCqpIdException;
 import org.txm.searchengine.cqp.clientExceptions.UnexpectedAnswerException;
+import org.txm.searchengine.cqp.core.functions.selection.SelectionResult;
 import org.txm.searchengine.cqp.corpus.query.Match;
 import org.txm.searchengine.cqp.corpus.query.Query;
 import org.txm.searchengine.cqp.serverException.CqiServerError;
Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/query/Match.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/query/Match.java	(revision 652)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/corpus/query/Match.java	(revision 653)
@@ -28,6 +28,7 @@
 package org.txm.searchengine.cqp.corpus.query;
 
 import groovy.lang.IntRange;
+
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/Reference.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/Reference.java	(revision 652)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/Reference.java	(revision 653)
@@ -30,6 +30,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Property;
 import org.txm.searchengine.cqp.corpus.query.Match;
Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/tests/package.html
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/tests/package.html	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/tests/package.html	(revision 653)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>First draft of tests for TXM</p>
+</body>
+</html>
\ No newline at end of file

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

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/tests/TestSubcorpus.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/tests/TestSubcorpus.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/tests/TestSubcorpus.java	(revision 653)
@@ -0,0 +1,71 @@
+package org.txm.searchengine.cqp.core.tests;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.util.Arrays;
+
+import org.txm.searchengine.cqp.NetCqiClient;
+import org.txm.searchengine.cqp.clientExceptions.UnexpectedAnswerException;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.CorpusManager;
+import org.txm.searchengine.cqp.corpus.Subcorpus;
+import org.txm.searchengine.cqp.corpus.query.Query;
+import org.txm.searchengine.cqp.serverException.CqiServerError;
+
+public class TestSubcorpus {
+
+	public static String CORPUS = "DISCOURS"; //$NON-NLS-1$
+
+	public static boolean allTests(File outdir) {
+		TestSubcorpus tester = new TestSubcorpus();
+		return tester.test1(outdir) && tester.test2(outdir) && tester.test3(outdir);
+	}
+
+	public boolean test1(File outdir) {
+		try {
+			Corpus corpus = CorpusManager.getCorpusManager().getCorpus(CORPUS);
+			Subcorpus sub = corpus.createSubcorpus(new Query("\"je\" expand to p"), "JEP"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			writePositions(sub, new File(outdir, TestSubcorpus.class.getName()+"_test1.csv")); //$NON-NLS-1$
+		} catch (Exception e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+			return false;
+		}
+		return true;
+	}
+
+	public boolean test2(File outdir) {
+		try {
+			Corpus corpus = CorpusManager.getCorpusManager().getCorpus(CORPUS);
+			Subcorpus sub = corpus.createSubcorpus(corpus.getStructuralUnit("text"), corpus.getStructuralUnit("text").getProperty("loc"), "De_Gaulle", "DG"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
+
+			writePositions(sub, new File(outdir, TestSubcorpus.class.getName()+"_test2.csv")); //$NON-NLS-1$
+		} catch (Exception e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+			return false;
+		}
+		return true;
+	}
+
+	public boolean test3(File outdir) {
+		try {
+			Corpus corpus = CorpusManager.getCorpusManager().getCorpus(CORPUS);
+			Subcorpus sub = corpus.createSubcorpus(corpus.getStructuralUnit("text"), corpus.getStructuralUnit("text").getProperty("type"), Arrays.asList("Allocution radiotélévisée", "Conférence de presse"), "alloc+presse"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ //$NON-NLS-6$
+
+			writePositions(sub, new File(outdir, TestSubcorpus.class.getName()+"_test3.csv")); //$NON-NLS-1$
+		} catch (Exception e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+			return false;
+		}
+		return true;
+	}
+
+	private void writePositions(Subcorpus sub, File outfile) throws UnexpectedAnswerException, IOException, CqiServerError {
+		int[] positions = CorpusManager.getCorpusManager().getCqiClient().dumpSubCorpus(sub.getQualifiedCqpId(), NetCqiClient.CQI_CONST_FIELD_MATCH, 0, sub.getNMatch());
+		PrintWriter writer = new PrintWriter(new FileWriter(outfile));
+		for(int i : positions) writer.println(i);
+		writer.close();
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/tests/TestSubcorpus.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/preview/package.html
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/preview/package.html	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/preview/package.html	(revision 653)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Prototype of Preview functionnaly: shows the begining of a corpus or a partition.</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/preview/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/preview/Preview.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/preview/Preview.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/preview/Preview.java	(revision 653)
@@ -0,0 +1,128 @@
+package org.txm.searchengine.cqp.core.functions.preview;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.List;
+
+import org.txm.core.results.TXMParameters;
+import org.txm.core.results.TXMResult;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.Partition;
+import org.txm.searchengine.cqp.corpus.query.Match;
+
+public class Preview extends TXMResult {
+	
+	private Corpus corpus;
+	private Partition partition;
+	
+	private int n;
+	
+	public Preview(Corpus corpus, int n) {
+		super(corpus);
+		this.corpus = corpus;
+		this.n = n;
+	}
+	
+	public Preview(Partition partition, int n) {
+		super(partition);
+		this.partition = partition;
+		this.n = n;
+	}
+	
+	protected boolean computeCorpus() {
+		boolean ok = false;
+		
+		return ok;
+	}
+	
+	protected boolean computePartition() {
+		boolean ok = false;
+		List<Match> matches = corpus.getMatches();
+		for (Match m : matches) {
+			if (m.getLength() >= n) {
+				ok = true;
+			}
+		}
+		return ok;
+	}
+	
+	private String getLine(Corpus corpus) {
+		List<Match> matches = corpus.getMatches();
+		if (matches.size() == 0) return ""; //$NON-NLS-1$
+		
+		Match firstOkMatch = matches.get(0);
+		for (Match m : matches) {
+			if (m.getLength() >= n) {
+				Collection<? extends Integer> positions = m.getRange();
+				
+			}
+		}
+		return "";//getString(firstOkMatch); //$NON-NLS-1$
+	}
+
+	@Override
+	public String getName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getSimpleName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getDetails() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public void clean() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public boolean canCompute() {
+		return corpus != null;
+	}
+
+	@Override
+	public boolean setParameters(TXMParameters parameters) {
+		// TODO Auto-generated method stub
+		System.err.println("Preview.setParameters(): not yet implemented.");
+		return true;
+	}
+
+	@Override
+	public boolean loadParameters() {
+		// TODO Auto-generated method stub
+		System.err.println("Preview.loadParameters(): not yet implemented.");
+		return true;
+	}
+
+	@Override
+	public boolean saveParameters() {
+		// TODO Auto-generated method stub
+		System.err.println("Preview.saveParameters(): not yet implemented.");
+		return true;
+	}
+
+	
+	@Override
+	protected boolean _compute() throws Exception {
+		if (partition != null) {
+			return computePartition();
+		} else {
+			return computeCorpus();
+		}
+	}
+
+	@Override
+	public boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
+		// TODO Auto-generated method stub
+		return false;
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/preview/Preview.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/information/Information.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/information/Information.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/information/Information.java	(revision 653)
@@ -0,0 +1,679 @@
+// 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.searchengine.cqp.core.functions.information;
+
+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.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Locale;
+
+import org.eclipse.osgi.util.NLS;
+import org.txm.core.messages.TXMCoreMessages;
+import org.txm.core.preferences.TBXPreferences;
+import org.txm.core.preferences.TXMPreferences;
+import org.txm.core.results.Parameter;
+import org.txm.core.results.TXMParameters;
+import org.txm.core.results.TXMResult;
+import org.txm.objects.Base;
+import org.txm.searchengine.cqp.AbstractCqiClient;
+import org.txm.searchengine.cqp.CQPPreferences;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.CorpusManager;
+import org.txm.searchengine.cqp.corpus.Property;
+import org.txm.searchengine.cqp.corpus.StructuralUnit;
+import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
+import org.txm.searchengine.cqp.corpus.WordProperty;
+import org.txm.utils.AsciiUtils;
+import org.txm.utils.logger.Log;
+
+// TODO: Auto-generated Javadoc
+/**
+ * compute a diagnostic of Corpus, sub corpus and partition @ author mdecorde.
+ */
+public class Information extends TXMResult {
+	// Base base;
+	/** The corpus. */
+	Corpus corpus;
+	
+	// Numbers
+	/** The T. */
+	int T = 0; // number of word
+
+	/** The N properties. */
+	int NProperties = 0; // number of word properties
+	//HashMap<String, Integer> propertiesCounts = new HashMap<String, Integer>(); // properties counts
+	/** The properties values. */
+	HashMap<String, List<String>> propertiesValues = new HashMap<String, List<String>>(); // properties values
+
+	/** The N structures. */
+	int NStructures = 0; // number of structures
+	
+	/** The structures counts. */
+	HashMap<String, Integer> structuresCounts = new HashMap<String, Integer>(); // structures counts
+
+	/** The internal architecture. */
+	List<String> internalArchitecture = new ArrayList<String>(); // wtc structures = propertiesCounts keys but ordered
+	
+	/** The hierarchie counts. */
+	HashMap<String, Integer> hierarchieCounts = new HashMap<String, Integer>(); // hierarchic structures counts
+	
+	/** The internal architecture properties. */
+	HashMap<String, HashMap<String, List<String>>> internalArchitectureProperties = new HashMap<String, HashMap<String, List<String>>>(); // hierarchic structures counts
+	
+	/** The internal architecture properties counts. */
+	HashMap<String, HashMap<String, Integer>> internalArchitecturePropertiesCounts = new HashMap<String, HashMap<String, Integer>>(); // hierarchic structures counts
+
+	// Annotations description
+	/** The annotations types. */
+	HashMap<String, Integer> annotationsTypes = new HashMap<String, Integer>(); // for each annotation its description
+	
+	/** The annotations origins. */
+	HashMap<String, Integer> annotationsOrigins = new HashMap<String, Integer>(); // for each annoation its origin description
+
+	// Import description
+	/** The import description. */
+	String importDescription = ""; //$NON-NLS-1$
+	
+	/** The properties. */
+	List<WordProperty> properties;
+	
+	/** The structures. */
+	List<StructuralUnit> structures;
+
+	private File diagfile;
+
+	
+	/** The maxvalue. */
+	@Parameter(key=CQPPreferences.MAXVALUE)
+	Integer pMaxValue;
+	
+	
+	
+	/**
+	 * Instantiates a new diagnostic.
+	 *
+	 * @param corpus a MainCorpus or a SubCorpus
+	 */
+	public Information(Corpus corpus) {
+		super(corpus);
+		this.corpus = corpus;
+	}
+	
+	public void setParameters(int maxvalue) {
+		this.pMaxValue = maxvalue;
+		if (pMaxValue <= 0)
+			pMaxValue = 10;
+		
+		dirty = true;
+	}
+	
+
+//	public boolean setParameters(TXMParameters parameters) {
+//		try {
+//			Integer max = null;
+//			Object o = parameters.get(CQPPreferences.MAXVALUE);
+//			if (o instanceof Integer) max = (Integer)o;
+//			else if (o instanceof String) max = Integer.parseInt(o.toString());
+//			
+//			this.setParameters(max);
+//		} catch (Exception e) {
+//			System.out.println("Error while setting parameters of Informations: "+e.getLocalizedMessage());
+//			return false;
+//		}
+//		return true;
+//	}
+	
+	/**
+	 * Step general infos.
+	 */
+	public void stepGeneralInfos()
+	{
+		try {
+			properties = corpus.getProperties();
+			NProperties = properties.size();
+		} catch (CqiClientException e1) {
+			Log.severe(TXMCoreMessages.Diagnostic_1 + corpus.getName()
+					+ TXMCoreMessages.Diagnostic_4);
+			return;
+		}
+		
+		try {
+			T = corpus.getSize();// corpus.getLexicon(corpus.getProperty("id")).nbrOfToken();
+		} catch (CqiClientException e1) {
+			Log.severe(TXMCoreMessages.Diagnostic_6 + corpus.getName()
+					+ TXMCoreMessages.Diagnostic_8);
+			return;
+		} 
+	}
+	
+	/**
+	 * step2.
+	 * randomly position are choose
+	 */
+	public void stepLexicalProperties()
+	{
+		AbstractCqiClient cqiClient = CorpusManager.getCorpusManager().getCqiClient();
+		for (Property p : properties) {
+			//int size;
+			try {
+				//size = CorpusManager.getCorpusManager().getCqiClient().lexiconSize(p.getQualifiedName());
+				//propertiesCounts.put(p.getName(), size);
+				//List<String> list = Arrays.asList(corpus.getLexicon(p).getForms(this.maxvalue));
+
+				int[] positions = new int[Math.min(pMaxValue, T)];
+				for(int i = 0 ; i < Math.min(pMaxValue, T) ; i++)
+					positions[i] = i;
+				
+				//ArrayList<String> values = new ArrayList<String>();
+				LinkedHashSet<String> values = new LinkedHashSet<String>(cqiClient.getSingleData(p, positions));
+				propertiesValues.put(p.getName(), new ArrayList<String>(values));
+			} catch (Exception e) {
+				org.txm.utils.logger.Log.printStackTrace(e);
+			}
+		}
+	}
+	
+	/**
+	 * Step structural units.
+	 */
+	public void stepStructuralUnits()
+	{
+		try {
+			structures = corpus.getOrderedStructuralUnits();
+		} catch (CqiClientException e1) {
+			Log.severe(TXMCoreMessages.Diagnostic_1 + corpus.getName()
+					+ TXMCoreMessages.Diagnostic_11);
+			return;
+		}
+		NStructures = structures.size();
+		for (StructuralUnit su : structures) { // for each structural unit
+			internalArchitecture.add(su.getName());
+			hierarchieCounts.put(su.getName(), -1);
+			internalArchitectureProperties.put(su.getName(),
+					new HashMap<String, List<String>>());
+			internalArchitecturePropertiesCounts.put(su.getName(),
+					new HashMap<String, Integer>());
+			if (su.getProperties().size() > 0) {
+				for (StructuralUnitProperty sup : su.getProperties())  {// for each of its property
+					try {
+						List<String> allvalues = sup.getValues(corpus);
+						internalArchitectureProperties.get(su.getName()).put(
+								sup.getName(),
+								allvalues.subList(0, Math.min(allvalues.size(),
+										pMaxValue)));
+						internalArchitecturePropertiesCounts.get(su.getName())
+						.put(sup.getName(), allvalues.size());
+					} catch (Exception e) {
+						ArrayList<String> list = new ArrayList<String>(1);
+						list.add(TXMCoreMessages.Diagnostic_2);
+						internalArchitectureProperties.get(su.getName()).put(
+								sup.getName(), list);
+						internalArchitecturePropertiesCounts.get(su.getName())
+						.put(sup.getName(), -1);
+					}
+				}
+			}
+		}
+	}
+
+//	/**
+//	 * Instantiates a new diagnostic.
+//	 *
+//	 * @param partition the partition
+//	 * @throws CqiClientException the cqi client exception
+//	 */
+//	public Information(Partition partition) throws CqiClientException {
+//		corpus = partition.getCorpus();
+//		this.partition = partition;
+//		int T = corpus.getSize();
+//		System.out.println(TXMCoreMessages.Diagnostic_12);
+//		int nbParts = partition.getNPart();
+//		List<String> partNames = partition.getPartNames();
+//		List<Integer> partSizes = new ArrayList<Integer>();
+//		List<List<Property>> partProperties = new ArrayList<List<Property>>();
+//		List<String> partQueries = new ArrayList<String>();
+//		for (Part part : partition.getParts()) {
+//			partSizes.add(part.getSize());
+//			partProperties.add(part.getProperties());
+//			partQueries.add(part.getQuery().getQueryString());
+//		}
+//	}
+
+	/**
+	 * dump the results of the diagnostic in a String containing HTML code.
+	 *
+	 * @return the string
+	 */
+	public String htmldump() {
+		StringBuffer buff = new StringBuffer();
+
+		buff.append("<? version=\"1.0\" encoding=\"UTF-8\"?>\n" + //$NON-NLS-1$
+				"<html>" + //$NON-NLS-1$
+				"<head>" + //$NON-NLS-1$
+				"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>" + //$NON-NLS-1$
+				"</head>" + //$NON-NLS-1$
+				"<body>\n"); //$NON-NLS-1$
+		buff.append("<h2 style'font-family:\"Arial\";'>"+TXMCoreMessages.Diagnostic_3 + this.corpus.getName() + "</h2>\n"); //$NON-NLS-2$ //$NON-NLS-1$
+		
+		if (corpus.getDescription() != null && corpus.getDescription().length() > 0) {
+			buff.append("<p>"+corpus.getDescription()+"</p>"); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		
+		buff.append("<h3 style'font-family:\"Arial\";'>"+TXMCoreMessages.Diagnostic_5+ "</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$ 
+
+		
+		
+		// counts
+		buff.append("<ul>\n"); //$NON-NLS-1$
+		buff.append("<li>" + TXMCoreMessages.Diagnostic_7 + T + "</li>\n"); //$NON-NLS-1$ //$NON-NLS-2$ 
+		buff
+		.append("<li>" + TXMCoreMessages.Diagnostic_9 + (NProperties - 1) + "</li>\n"); //$NON-NLS-2$ //$NON-NLS-1$
+		buff.append("<li>" + TXMCoreMessages.Diagnostic_16 + NStructures + "</li>\n"); //$NON-NLS-2$ //$NON-NLS-1$
+		buff.append("</ul>\n"); //$NON-NLS-1$
+
+		// Propriétés d'occurrences
+		buff.append("<h3 style'font-family:\"Arial\";'>"+NLS.bind(TXMCoreMessages.Diagnostic_14, pMaxValue) + "</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$ 
+		ArrayList<String> properties = new ArrayList<String>(propertiesValues.keySet());
+		Collections.sort(properties);
+		buff.append("<ul>\n"); //$NON-NLS-1$
+		for (String s : properties) {
+			if (!s.equals("id")) //$NON-NLS-1$
+			{
+				//buff.append("<li> " + s + " (" + propertiesCounts.get(s) + ") : "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				buff.append("<li> " + s + " : "); //$NON-NLS-1$ //$NON-NLS-2$ 
+				for (String v : propertiesValues.get(s))
+					buff.append(v + ", "); //$NON-NLS-1$
+				buff.append("..."); //$NON-NLS-1$
+				buff.append("</li>\n"); //$NON-NLS-1$ 
+			}
+		}
+		buff.append("</ul>\n"); //$NON-NLS-1$
+
+		// Propriété de structures
+		buff.append("<h3 style'font-family:\"Arial\";'>"+NLS.bind(TXMCoreMessages.Diagnostic_22, pMaxValue)+"</h3>\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		buff.append("<ul>\n"); //$NON-NLS-1$
+		for (String s : internalArchitecture) {
+			StringBuffer subbuffer = new StringBuffer();
+			if (s.equals("txmcorpus")) //$NON-NLS-1$
+				continue;//ignore the txmcorpus structure
+			
+			properties = new ArrayList<String>(internalArchitectureProperties.get(s).keySet());
+			
+			subbuffer.append("<li> " + s + "\n<ul>\n"); //$NON-NLS-1$ //$NON-NLS-2$
+			if (internalArchitectureProperties.get(s).keySet().size() == 0)
+				subbuffer.append("<li>"+TXMCoreMessages.Diagnostic_26+"</li>\n"); //$NON-NLS-1$ //$NON-NLS-2$ 
+
+			
+			//System.out.println("struct: "+s+" >> "+properties);
+			Collections.sort(properties);
+			//System.out.println("struct: "+s+" >sort> "+properties);
+			int nbOfValues = 0;
+			for (String ps : properties) {
+				if (!ps.equals("project") && !ps.equals("base") ) //$NON-NLS-1$ //$NON-NLS-2$ 
+				{
+					//System.out.println("struct: "+s+" >> "+ps);
+					int valuecount = internalArchitecturePropertiesCounts.get(s).get(ps);
+					ArrayList<String> values = new ArrayList<String>(
+							internalArchitectureProperties.get(s).get(ps));
+					subbuffer.append("<li> " + ps + " (" + valuecount + ") = "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+					//System.out.println("VALUES: "+values);
+					Collections.sort(values);
+					for (int i = 0 ; i < values.size() ; i++) {
+						nbOfValues++;
+						String psv = values.get(i);
+						if (psv != null && psv.length() > 0)
+							subbuffer.append(psv.replace("<", "&lt;")); //$NON-NLS-1$ //$NON-NLS-2$
+						else
+							subbuffer.append("\"\""); //$NON-NLS-1$
+						
+						if (i == values.size() -1)
+							subbuffer.append("."); //$NON-NLS-1$
+						else
+							subbuffer.append(", "); //$NON-NLS-1$
+						
+						if (i >= pMaxValue) {
+							subbuffer.append("..."); //$NON-NLS-1$
+							break;
+						}
+					}
+					subbuffer.append("</li>\n"); //$NON-NLS-1$
+				}
+			}
+			subbuffer.append("</ul>\n</li>\n"); //$NON-NLS-1$
+			if (nbOfValues > 0) {
+				buff.append(subbuffer);
+			}
+		}
+		buff.append("</ul>\n"); //$NON-NLS-1$
+		buff.append("</body>\n"); //$NON-NLS-1$
+		buff.append("</html>\n"); //$NON-NLS-1$
+		
+		return buff.toString();
+	}
+
+	
+	
+	/**
+	 * dump the result in the console.
+	 *
+	 * @param maxvalue the maxvalue
+	 * @return the string
+	 */
+	public String dump(int maxvalue) {
+		StringBuffer buff = new StringBuffer();
+
+		buff.append(TXMCoreMessages.Diagnostic_40);
+		buff.append(TXMCoreMessages.Diagnostic_41 + String.format(Locale.FRANCE,"%,d", T) + "\n"); //$NON-NLS-1$ 
+		buff.append(TXMCoreMessages.Diagnostic_43 + String.format("%,d", NProperties) + "\n"); //$NON-NLS-1$ 
+		/*for (String s : propertiesCounts.keySet())
+			if (!s.equals("id")) //$NON-NLS-1$
+				buff.append(" - " + s + " " + propertiesCounts.get(s) + "\n"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				*/
+		buff.append(TXMCoreMessages.Diagnostic_49 + String.format("%,d", NStructures) + "\n"); //$NON-NLS-1$ 
+		for (String s : structuresCounts.keySet())
+			buff.append(" - " + s + "\n");//+structuresCounts.get(s)+"\n"); //$NON-NLS-1$ //$NON-NLS-2$
+
+		/*
+		 * buff.append("* Structural Units counts\n"); for(String s :
+		 * internalArchitecture)
+		 * buff.append(" - "+s+" "+hierarchieCounts.get(s)+"\n");
+		 */
+		buff.append(TXMCoreMessages.Diagnostic_0);
+		for (String s : internalArchitecture) {
+			buff.append(" - " + s + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+			for (String ps : internalArchitectureProperties.get(s).keySet()) {
+				if (!(s.equals("text") && (ps.equals("project") || ps.equals("base") || ps.equals("id")))) //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
+				{
+					buff
+					.append("   - " + ps + "(" + internalArchitectureProperties.get(s).get(ps).size() + ") = "); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+
+					int valuecount = 0;
+					for (String psv : internalArchitectureProperties.get(s)
+							.get(ps)) {
+						buff.append(psv);
+						if (valuecount++ >= maxvalue) {
+							buff.append("..."); //$NON-NLS-1$
+							break;
+						}
+						if (valuecount < internalArchitectureProperties.get(s)
+								.get(ps).size())
+							buff.append(", "); //$NON-NLS-1$
+					}
+
+					buff.append("\n"); //$NON-NLS-1$
+				}
+			}
+		}
+
+		return buff.toString();
+	}
+
+	/**
+	 * dump the result in the console with maxvalue=30.
+	 *
+	 * @return the string
+	 */
+	public String dump() {
+		return dump(30);
+	}
+
+	/**
+	 * Gets the name.
+	 *
+	 * @return the name
+	 */
+	public String getName() {
+		return corpus.getName();
+	}
+
+	/**
+	 * Gets the base.
+	 *
+	 * @return the base
+	 */
+	public Base getBase() {
+		return corpus.getBase();
+	}
+
+	/**
+	 * Gets the t.
+	 *
+	 * @return the t
+	 */
+	public int getT() {
+		return T;
+	}
+
+	/**
+	 * Gets the n properties.
+	 *
+	 * @return the n properties
+	 */
+	public int getNProperties() {
+		return NProperties;
+	}
+
+	/**
+	 * Gets the internal architecture.
+	 *
+	 * @return the internal architecture
+	 */
+	public List<String> getInternalArchitecture() {
+		return internalArchitecture;
+	}
+
+	/**
+	 * Gets the n structures.
+	 *
+	 * @return the n structures
+	 */
+	public int getNStructures() {
+		return NStructures;
+	}
+
+	/**
+	 * Gets the structures counts.
+	 *
+	 * @return the structures counts
+	 */
+	public HashMap<String, Integer> getStructuresCounts() {
+		return structuresCounts;
+	}
+
+	/**
+	 * Gets the annotations types.
+	 *
+	 * @return the annotations types
+	 */
+	public HashMap<String, Integer> getAnnotationsTypes() {
+		return annotationsTypes;
+	}
+
+	/**
+	 * Gets the annotations origins.
+	 *
+	 * @return the annotations origins
+	 */
+	public HashMap<String, Integer> getAnnotationsOrigins() {
+		return annotationsOrigins;
+	}
+
+	/**
+	 * Gets the import description.
+	 *
+	 * @return the import description
+	 */
+	public String getImportDescription() {
+		return importDescription;
+	}
+
+	/**
+	 * dump the diagnostic in a text file.
+	 *
+	 * @param outfile the outfile
+	 * @param maxvalue the maxvalue
+	 * @return true, if successful
+	 */
+	public boolean toTxt(File outfile, String encoding, int maxvalue) {
+		BufferedWriter writer = null;
+		try {
+			writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(outfile),	encoding));
+		} catch (UnsupportedEncodingException e1) {
+			org.txm.utils.logger.Log.printStackTrace(e1);
+			return false;
+		} catch (FileNotFoundException e1) {
+			org.txm.utils.logger.Log.printStackTrace(e1);
+			return false;
+		}
+
+		try {
+			writer.write(this.dump(maxvalue));
+			writer.close();
+		} catch (IOException e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * dump the diagnostic in a HTML file.
+	 *
+	 * @param outfile the outfile
+	 * @return true, if successful
+	 */
+	public boolean toHTML(File outfile) {
+		OutputStreamWriter writer;
+		try {
+			writer = new OutputStreamWriter(new FileOutputStream(outfile), "UTF-8"); //$NON-NLS-1$
+			writer.write(this.htmldump());
+			writer.close();
+		} catch (IOException e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+			return false;
+		}
+
+		return true;
+	}
+
+	/**
+	 * dump the diagnostic in a text file, maxvalue = 100.
+	 *
+	 * @param outfile the outfile
+	 * @return true, if successful
+	 */
+	public boolean toTxt(File outfile) {
+
+		return toTxt(outfile, "UTF-8", 100); //$NON-NLS-1$
+	}
+
+	@Override
+	public void clean() {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public boolean toTxt(File outfile, String encoding, String colseparator,
+			String txtseparator) throws Exception {
+		return toTxt(outfile, encoding, 100);
+	}
+
+	@Override
+	public String getSimpleName() {
+		return "Informations";
+	}
+
+	@Override
+	public String getDetails() {
+		return ""+T;
+	}
+
+	@Override
+	protected boolean _compute() throws Exception {
+		
+		this.beginTask("Computing informations...", 3);
+		stepGeneralInfos();
+		this.worked(1);
+		
+		stepLexicalProperties();
+		this.worked(1);
+		
+		stepStructuralUnits();
+		this.worked(1);
+		
+		String txmhome = TXMPreferences.getString(TBXPreferences.USER_TXM_HOME, TBXPreferences.PREFERENCES_NODE);
+		String filename = corpus.getParent().getName() + "-" + corpus.getName(); //$NON-NLS-1$
+		filename = AsciiUtils.buildId(filename);
+		diagfile = new File(txmhome, "results/" + filename + "-infos.html"); //$NON-NLS-1$ //$NON-NLS-2$
+		
+		this.toHTML(diagfile);
+		return true;
+	}
+	
+	public File getHTMLFile() {
+		return diagfile;
+	}
+
+	@Override
+	public boolean canCompute() {
+		return corpus != null;
+	}
+
+	@Override
+	public boolean setParameters(TXMParameters parameters) {
+		
+		pMaxValue = parameters.getInteger(CQPPreferences.MAXVALUE);
+		
+		return true;
+	}
+
+	@Override
+	public boolean loadParameters() {
+		// nothing to do
+		return true;
+	}
+
+	
+	@Override
+	public boolean saveParameters() {
+		// nothing to do
+		return true;
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/information/Information.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/information/package.html
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/information/package.html	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/information/package.html	(revision 653)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Diagnostic function</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/information/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/package.html
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/package.html	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/package.html	(revision 653)
@@ -0,0 +1,5 @@
+<html>
+<body>
+<p>Selection: select text using metadata values</p>
+</body>
+</html>
\ No newline at end of file

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/package.html
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/SelectionResult.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/SelectionResult.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/SelectionResult.java	(revision 653)
@@ -0,0 +1,13 @@
+package org.txm.searchengine.cqp.core.functions.selection;
+
+import java.util.*;
+
+public class SelectionResult extends ArrayList<String>{
+	public HashMap<String,ArrayList<String>> critera = new HashMap<String, ArrayList<String>>();
+	
+	@Override
+	public String toString()
+	{
+		return super.toString() + critera.toString();
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/SelectionResult.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/Selection.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/Selection.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/Selection.java	(revision 653)
@@ -0,0 +1,529 @@
+// 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.searchengine.cqp.core.functions.selection;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+
+import org.txm.core.messages.TXMCoreMessages;
+import org.txm.core.results.TXMParameters;
+import org.txm.core.results.TXMResult;
+import org.txm.metadatas.Metadata;
+import org.txm.metadatas.MetadataGroup;
+import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
+import org.txm.searchengine.cqp.clientExceptions.UnexpectedAnswerException;
+import org.txm.searchengine.cqp.corpus.Corpus;
+import org.txm.searchengine.cqp.corpus.CorpusManager;
+import org.txm.searchengine.cqp.corpus.MainCorpus;
+import org.txm.searchengine.cqp.corpus.Property;
+import org.txm.searchengine.cqp.corpus.QueryResult;
+import org.txm.searchengine.cqp.corpus.StructuralUnit;
+import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
+import org.txm.searchengine.cqp.corpus.query.Match;
+import org.txm.searchengine.cqp.corpus.query.Query;
+import org.txm.searchengine.cqp.serverException.CqiServerError;
+import org.txm.utils.logger.Log;
+
+/**
+ * Used to build sub-corpus of texts.
+ * It links texts to their properties and compute some stats 
+ * 
+ * @author mdecorde
+ *
+ */
+public class Selection extends TXMResult {
+
+	/** Full selection. */
+	Corpus corpus;
+	
+	/** The query to get texts metadatas and number. */
+	Query query;
+	
+	/** The cqp positions of the texts start element. */
+	int[] positions;
+	
+	/** The all properties. */
+	List<StructuralUnitProperty> allProperties;
+	
+	/** The textids. */
+	List<String> textids;
+	
+	/** The numberofwords. */
+	HashMap<String, Integer> numberOfWordsPerText;
+
+	/** The text metadatas values. */
+	HashMap<String, HashMap<String, String>> metadatasValuesPerText;
+	HashMap<String, List<String>> valuesPerMetadata;
+	
+	/** The metadatas and groups. */
+	ArrayList<Metadata> metadatas;
+	ArrayList<MetadataGroup> metadatagroups;
+	
+	/** The property and group names per usage. */
+	private ArrayList<String> selectionPropertyNames;
+	private ArrayList<String> displayPropertyNames;
+	private ArrayList<String> selectionGroupNames;
+	private ArrayList<String> displayGroupNames;
+	
+	/** the list of property used per group**/
+	private HashMap<String, List<String>> propertyNamesPerGroup;
+	
+	/**
+	 * Instantiates a new selection.
+	 *
+	 * @param corpus the corpus
+	 */
+	public Selection(MainCorpus corpus) {
+		super(corpus);
+		// this query returns N results, where N is the number of text
+		this.query = new Query("<text>[]"); //$NON-NLS-1$
+		this.corpus = corpus;
+		init();
+	}
+	
+	/**
+	 * get positions, properties
+	 * and compute texts stats (but not words)
+	 * and get texts metadatas.
+	 */
+	private boolean init() {
+		try {
+			if (corpus.getBase() == null) {
+				System.out.println(TXMCoreMessages.Selection_6+corpus+TXMCoreMessages.Selection_7);
+				return false;
+			}
+			metadatas = corpus.getImportMetadata();
+			metadatagroups = corpus.getMetadataGroups();
+			
+			//get texts positions
+			QueryResult result = corpus.query(query, "selection", false); //$NON-NLS-1$
+			List<Match> matches = result.getMatches();
+			result.drop();
+			//System.out.println("Nb of texts: "+matches.size());
+			positions = new int[matches.size()]; // starting positions of texts in the corpus
+			for (int i = 0 ; i < matches.size() ; i++)
+				positions[i] = matches.get(i).getStart();
+			
+			// select used structuralUnitsProperties in corpus structuralUnitsProperties
+			StructuralUnit text_su = corpus.getStructuralUnit("text"); //$NON-NLS-1$
+			allProperties = new ArrayList<StructuralUnitProperty>();
+			if (metadatas.size() > 0) {
+				for (Metadata m : metadatas) {
+					try {
+						StructuralUnitProperty sup = text_su.getProperty(m.id);
+						if (sup == null) {
+							Log.warning(TXMCoreMessages.Selection_8+m.id);
+							continue;
+						}
+						allProperties.add(sup);
+					} catch(Exception e) {
+						Log.severe(TXMCoreMessages.Selection_9+e);
+					}
+				}
+			}
+
+			// in case no metadatas are declared in import.xml
+			if (allProperties.size() == 0) 
+				for (StructuralUnitProperty sup : text_su.getProperties())
+					allProperties.add(sup);
+
+			//get text ids (using starting position of texts) + text size using the positions
+			StructuralUnitProperty sup = text_su.getProperty("id"); //$NON-NLS-1$
+			int[] idx = CorpusManager.getCorpusManager().getCqiClient().cpos2Struc(sup.getQualifiedName(), positions);
+			//System.out.println("cpos2Struc: "+Arrays.toString(idx));
+			String[] textsIdArray = CorpusManager.getCorpusManager().getCqiClient().struc2Str(sup.getQualifiedName(), idx);
+			//System.out.println("struc2Str: "+Arrays.toString(textsIdArray));
+			textids = Arrays.asList(textsIdArray);
+
+			metadatasValuesPerText = new HashMap<String, HashMap<String,String>>();
+			numberOfWordsPerText = new HashMap<String, Integer>();
+			for (int i = 0 ; i < textids.size() ; i++) {
+				this.metadatasValuesPerText.put(textids.get(i), new HashMap<String, String>());
+				
+				//QueryResult result2 = corpus.query(new Query("[_.text_id=\""+textids.get(i)+"\"] expand to text"), "temp", false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				QueryResult result2 = corpus.query(new Query("/region[text,a]:: a.text_id=\""+textids.get(i)+"\""), "temp", false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				int tot = 0;
+				for (Match m : result2.getMatches(0,0))
+					tot += m.getEnd()- m.getStart();
+				numberOfWordsPerText.put(textids.get(i), tot);
+				result2.drop();
+			}
+
+			//System.out.println(textMetadatas);
+			//INITIALIZATIONS
+			for (StructuralUnitProperty property : allProperties) {	
+				readTextMetadatas(property);
+			}
+
+			getTextMetadatas();
+			getStructuralUnitPropertyValues();
+			getDisplayPropertyNames();
+			getSelectionPropertyNames();
+			getDisplayGroupNames();
+			getSelectionGroupNames();
+			getMetadataGroupNames();
+		}
+		catch (Exception e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+			return false;
+		}
+		return true;
+	}
+	
+	public Corpus getCorpus() {
+		return this.corpus;
+	}
+	
+	public HashMap<String, List<String>> getMetadataGroupNames() {
+		if (propertyNamesPerGroup != null)
+			return propertyNamesPerGroup;
+		propertyNamesPerGroup = new HashMap<String, List<String>>();
+		for (MetadataGroup gp : metadatagroups) {
+			ArrayList<String> list = new ArrayList<String>();
+			System.out.println("gp: "+gp.id); //$NON-NLS-1$
+			propertyNamesPerGroup.put(gp.id, list);
+			for (Metadata m : gp.metadatas)
+				list.add(m.id);
+		}
+		return propertyNamesPerGroup;
+	}
+	
+	/**
+	 * print the full texts stats.
+	 *
+	 * @throws CqiClientException the cqi client exception
+	 */
+	public void fullDump() throws CqiClientException {
+		System.out.println(TXMCoreMessages.Selection_5);
+		System.out.println(TXMCoreMessages.Corpus_2+corpus);
+		System.out.println("Text query: "+query); //$NON-NLS-1$
+		System.out.println("Texts ids: "+textids); //$NON-NLS-1$
+		System.out.println("Text positions: "+Arrays.toString(positions)); //$NON-NLS-1$
+		System.out.println("Text nbwords: "+numberOfWordsPerText); //$NON-NLS-1$
+		System.out.println();
+		System.out.println("StructuralUnitsProperties: "+allProperties); //$NON-NLS-1$
+		System.out.println("Meta values per texts: "+metadatasValuesPerText); //$NON-NLS-1$
+		System.out.println("Meta values per name: "+valuesPerMetadata); //$NON-NLS-1$
+		System.out.println();
+		System.out.println("Declared metadatas: "+metadatas); //$NON-NLS-1$
+		System.out.println("Declared metadata groups: "+metadatagroups); //$NON-NLS-1$
+		System.out.println(""); //$NON-NLS-1$
+		System.out.println("Selection props: "+selectionPropertyNames); //$NON-NLS-1$
+		System.out.println("Displayed props: "+displayPropertyNames); //$NON-NLS-1$
+		System.out.println("Selection groups: "+selectionGroupNames); //$NON-NLS-1$
+		System.out.println("Displayed groups: "+displayGroupNames); //$NON-NLS-1$
+		System.out.println("Properties used per group: "+ propertyNamesPerGroup); //$NON-NLS-1$
+	}
+	
+	/**
+	 * Gets the number of word.
+	 *
+	 * @param property the property
+	 * @param value the value
+	 * @return the number of words which 'property' value matches param 'value'
+	 */
+	public int getNumberOfWord(StructuralUnitProperty property, String value) {
+		int nb = 0;
+		for (String text : metadatasValuesPerText.keySet())
+			if (metadatasValuesPerText.get(text).get(property).equals(value))
+				nb+= numberOfWordsPerText.get(text);
+		return nb;
+	}
+	
+	/**
+	 * Gets the text number.
+	 *
+	 * @param property the property
+	 * @param value the value
+	 * @return the number of text which 'property' value matches param 'value'
+	 */
+	public int getNumberOfText(StructuralUnitProperty property, String value) 
+	{
+		int nb = 0;
+		for (String text : metadatasValuesPerText.keySet())
+			if (metadatasValuesPerText.get(text).get(property).equals(value))
+				nb++;
+		return nb;
+	}
+	
+	/**
+	 * Loads the metadatas values and store them per text id.
+	 *
+	 * @param property the property
+	 * @return 
+	 * @return the text metadatas
+	 * @throws UnexpectedAnswerException the unexpected answer exception
+	 * @throws IOException Signals that an I/O exception has occurred.
+	 * @throws CqiServerError the cqi server error
+	 */
+	private HashMap<String, HashMap<String, String>> readTextMetadatas(StructuralUnitProperty property) throws UnexpectedAnswerException, IOException, CqiServerError
+	{
+		int[] idx = CorpusManager.getCorpusManager().getCqiClient().cpos2Struc(property.getQualifiedName(), positions);
+		String[] values = CorpusManager.getCorpusManager().getCqiClient().struc2Str(property.getQualifiedName(), idx);
+
+		for (int i = 0 ; i < values.length ; i++) {
+			this.metadatasValuesPerText.get(textids.get(i)).put(property.getName(), values[i]);
+		}
+		
+		return metadatasValuesPerText;
+	}
+	
+	/**
+	 * Gets the text metadatas values per text.
+	 *
+	 * @return the text metadatas
+	 */
+	public HashMap<String, HashMap<String, String>> getTextMetadatas() {
+		return this.metadatasValuesPerText;
+	}
+	
+	/**
+	 * Gets the number of words.
+	 *
+	 * @return the number of words
+	 */
+	public HashMap<String, Integer> getNumberOfWordsPerText() {
+		return this.numberOfWordsPerText;
+	}
+	
+	/**
+	 * Gets the text ids.
+	 *
+	 * @return the text ids, corpus ordered
+	 */
+	public List<String> getTextIds() {
+		return this.textids;
+	}
+	
+	/**
+	 * Gets and loads the selection properties name.
+	 *
+	 * @return the selection text metadata
+	 */
+	public ArrayList<String> getSelectionPropertyNames()
+	{
+		if (selectionPropertyNames != null)
+			return selectionPropertyNames;
+		StructuralUnit text_su;
+		selectionPropertyNames = new ArrayList<String>();
+		/*try {
+			text_su = corpus.getStructuralUnit("text");
+
+			// if corpus has metadatas declared
+			if (metadatas.size() > 0)
+			{
+				for(Metadata m : metadatas)
+				{
+						selectionPropertyNames.add(m.id);
+				}
+			}
+
+			//if no props added via metadata then get all text properties
+			if (selectionPropertyNames.size() == 0) 
+			{
+				for(Property p : text_su.getProperties())
+					selectionPropertyNames.add(p.getName());
+			}
+
+		} catch (Exception e) {
+			// TODO Auto-generated catch block
+			org.txm.utils.logger.Log.printStackTrace(e);
+		} //$NON-NLS-1$*/
+		for (StructuralUnitProperty prop : allProperties)
+			selectionPropertyNames.add(prop.getName());
+		return selectionPropertyNames;
+	}
+
+	/**
+	 * Gets and loads the selection group names.
+	 *
+	 * @return the selection text metadata
+	 */
+	public ArrayList<String> getSelectionGroupNames()
+	{
+		if (selectionGroupNames != null)
+			return selectionGroupNames;
+		selectionGroupNames = new ArrayList<String>();
+		for (Metadata m : metadatagroups) {
+			if (m.selection) {	
+				selectionGroupNames.add(m.id);
+			}
+		}
+
+		return selectionGroupNames;
+	}
+
+	/**
+	 * Gets the display properties name.
+	 *
+	 * @return the display text metadata
+	 */
+	public ArrayList<String> getDisplayPropertyNames()
+	{
+		if (displayPropertyNames != null)
+			return displayPropertyNames;
+		StructuralUnit text_su;
+		displayPropertyNames = new ArrayList<String>();
+		try {
+			text_su = corpus.getStructuralUnit("text"); //$NON-NLS-1$
+
+			// if corpus has metadatas declared
+			if (metadatas.size() > 0) {
+				for (Metadata m : metadatas) {
+					if (m.display) // only keep metadata for selection
+						displayPropertyNames.add(m.id);
+				}
+			}
+
+			if (displayPropertyNames.size() == 0) {
+				for (Property p : text_su.getProperties())
+					displayPropertyNames.add(p.getName());
+			}
+
+		} catch (Exception e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+		} 
+		return displayPropertyNames;
+	}
+
+	/**
+	 * Gets and loads the display group names.
+	 *
+	 * @return the display text metadata
+	 */
+	public ArrayList<String> getDisplayGroupNames()
+	{
+		if (displayGroupNames != null)
+			return displayGroupNames;
+		displayGroupNames = new ArrayList<String>();
+		for (Metadata m : metadatagroups) {
+			if (m.display) // only keep metadata for selection
+				displayGroupNames.add(m.id);
+		}
+		return displayGroupNames;
+	}
+
+	/**
+	 * Gets the structural unit property values per structuralUnitProperty.
+	 *
+	 * @return 
+	 */
+	public HashMap<String, List<String>> getStructuralUnitPropertyValues()
+	{
+		if (valuesPerMetadata != null)
+			return valuesPerMetadata;
+		valuesPerMetadata = new HashMap<String, List<String>>();
+
+		try {
+			for (StructuralUnitProperty sup : allProperties) {
+				try {
+					valuesPerMetadata.put(sup.getName(), sup.getValues());
+				} catch (CqiClientException e) {
+					System.out.println(TXMCoreMessages.Selection_26+sup.getFullName());
+					org.txm.utils.logger.Log.printStackTrace(e);
+					return valuesPerMetadata;
+				}
+			}
+		} catch(Exception e) {
+			org.txm.utils.logger.Log.printStackTrace(e);
+		}
+		return valuesPerMetadata;
+	}
+
+	public ArrayList<Metadata> getMetadatas() {
+		return metadatas;
+	}
+
+	public ArrayList<MetadataGroup> getMetadatagroups() {
+		return metadatagroups;
+	}
+
+	@Override
+	public String getName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getSimpleName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getDetails() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public void clean() {
+		// TODO Auto-generated method stub
+	}
+
+	@Override
+	public boolean canCompute() {
+		return this.corpus != null;
+	}
+
+	@Override
+	public boolean setParameters(TXMParameters parameters) {
+		// TODO Auto-generated method stub
+		System.err.println("Selection.setParameters(): not yet implemented.");
+		return true;
+	}
+
+	@Override
+	public boolean loadParameters() {
+		// TODO Auto-generated method stub
+		System.err.println("Selection.loadParameters(): not yet implemented.");
+		return true;
+	}
+
+	@Override
+	public boolean saveParameters() {
+		// TODO Auto-generated method stub
+		System.err.println("Selection.saveParameters(): not yet implemented.");
+		return true;
+	}
+	
+	@Override
+	protected boolean _compute() throws Exception {
+		System.err.println("Selection.compute() not implemented");
+		return false;
+	}
+
+	@Override
+	public boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
+		// TODO Auto-generated method stub
+		return false;
+	}
+
+}

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/selection/Selection.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/summary/Summary.java
===================================================================
--- tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/summary/Summary.java	(revision 0)
+++ tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/summary/Summary.java	(revision 653)
@@ -0,0 +1,300 @@
+package org.txm.searchengine.cqp.core.functions.summary;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.txm.core.messages.TXMCoreMessages;
+import org.txm.core.results.TXMParameters;
+import org.txm.core.results.TXMResult;
+import org.txm.objects.Edition;
+import org.txm.objects.Page;
+import org.txm.objects.Text;
+import org.txm.searchengine.cqp.CQPEngine;
+import org.txm.searchengine.cqp.corpus.MainCorpus;
+import org.txm.searchengine.cqp.corpus.Property;
+import org.txm.searchengine.cqp.corpus.QueryResult;
+import org.txm.searchengine.cqp.corpus.StructuralUnitProperty;
+import org.txm.searchengine.cqp.corpus.query.Query;
+
+public class Summary extends TXMResult {
+	
+	MainCorpus corpus;
+	TreeNode treenodes = new TreeNode("root"); //$NON-NLS-1$
+	private ArrayList<StructuralUnitProperty> properties;
+
+	public Summary(MainCorpus corpus) {
+		super(corpus);
+		this.corpus = corpus;
+	}
+
+	
+	@Override
+	public boolean canCompute() {
+		return corpus != null && properties != null && properties.size() > 0;
+	}
+
+	@Override
+	public boolean setParameters(TXMParameters parameters) {
+		// TODO Auto-generated method stub
+		System.err.println("Summary.setParameters(): not yet implemented.");
+		return true;
+	}
+
+	@Override
+	public boolean loadParameters() {
+		// TODO Auto-generated method stub
+		System.err.println("Summary.loadParameters(): not yet implemented.");
+		return true;
+	}
+
+
+	@Override
+	public boolean saveParameters() {
+		// TODO Auto-generated method stub
+		System.err.println("Summary.saveParameters(): not yet implemented.");
+		return true;
+	}
+
+	
+	@Override
+	protected boolean _compute() throws Exception {
+		treenodes.end = corpus.getSize();
+		treenodes.id = corpus.getName();
+		treenodes.start = 0;
+		treenodes.parent = null;
+		// get all type of structures
+		for (int j = 0 ; j < properties.size() ; j++) {
+			String suname = properties.get(j).getStructuralUnit().getName();
+			//System.out.println("getting : "+properties.get(j).getFullName());
+
+			QueryResult result = corpus.query(new Query("<"+properties.get(j).getFullName()+">[]"), "summary", false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			int[] starts = result.getStarts();
+			result.drop();
+			result = corpus.query(new Query("[]</"+properties.get(j).getFullName()+">"), "summary", false); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			int[] ends = result.getStarts();
+			result.drop();
+			//System.out.println("starts: "+Arrays.toString(starts));
+			//System.out.println("ends: "+Arrays.toString(ends));
+			int[] strcutpos = CQPEngine.getCqiClient().cpos2Struc(properties.get(j).getQualifiedName(), starts);
+			String[] infos = CQPEngine.getCqiClient().struc2Str(properties.get(j).getQualifiedName(), strcutpos);
+			//allMatches.put(suname, list);
+			if (starts.length != ends.length) {
+				System.out.println(suname+": starts.length "+starts.length+" != ends.length "+ends.length); //$NON-NLS-1$ //$NON-NLS-2$
+				return false;
+			}
+			for (int i = 0 ; i < starts.length ; i++) {
+				//System.out.println("suname: "+suname+" start: "+m.getStart());
+				TreeNode node = new TreeNode();
+				node.start = starts[i];
+				node.end = ends[i];
+				node.struct = suname;
+				node.id = infos[i];
+				treenodes.add(node);
+			}
+		}
+		//this.print();
+
+		//System.out.println("sorting... "+treenodes.size()+" nodes");
+		processNodeList(treenodes);
+
+		//System.out.println("checking result..."+treenodes.size()+" nodes");
+		if (treenodes.check()) {
+			return true;
+		}
+		else {
+			return false;
+		}
+	}
+
+	public TreeNode getRoot() {
+		return treenodes;
+	}
+
+
+
+	private void processNodeList(TreeNode nodes)
+	{
+		//System.out.println("+processing node list: "+nodes.size());
+		if (nodes.size() == 0)
+			return;
+
+		// 1st loop
+		//System.out.println("1st loop: "+nodes.size());
+		for (int i = 0 ; i < nodes.size() ; i++) {
+			TreeNode node = nodes.get(i);
+			if (node.end == -1)
+				System.out.println("ERROR: node.end = -1"); //$NON-NLS-1$
+			for (int j = 0 ; j < nodes.size() ; j++) {
+				if (j != i) {
+					TreeNode n2 = nodes.get(j);
+					if (n2.start >= node.start && n2.end <= node.end) {
+						n2.parent = node;
+						node.add(n2);
+						nodes.remove(j);
+						j--;
+						if (j < i)
+							i--;
+					}
+				}
+			}
+		}
+
+		//process sublists
+		//System.out.println("processing sublists: "+nodes.size());
+		for (int i = 0 ; i < nodes.size() ; i++) {
+			TreeNode node = nodes.get(i);
+			processNodeList(node);
+		}
+	}
+
+	public ArrayList<StructuralUnitProperty> getProperties()
+	{
+		return properties;
+	}
+
+	public void print()
+	{
+		for (TreeNode node : treenodes)
+			System.out.println("\n"+node); //$NON-NLS-1$
+	}
+
+
+	public Page getDefaultEditionPage(TreeNode node) throws Exception
+	{
+		StructuralUnitProperty text_id = corpus.getStructuralUnit("text").getProperty("id"); //$NON-NLS-1$ //$NON-NLS-2$
+		Property w_id =  corpus.getProperty("id"); //$NON-NLS-1$
+		int[] positions = {node.getStart()};
+		final String[] wordids = CQPEngine.getCqiClient().cpos2Str(w_id.getQualifiedName(), positions);
+		int[] textidstruct = CQPEngine.getCqiClient().cpos2Struc(text_id.getQualifiedName(), positions);
+		String[] textids = CQPEngine.getCqiClient().struc2Str(text_id.getQualifiedName(), textidstruct);
+
+		if (wordids.length == 1 && textids.length == 1) {
+			Text text = corpus.getText(textids[0]);
+			if (text == null) {
+				System.out.println(TXMCoreMessages.Summary_13+textids[0]+TXMCoreMessages.Summary_14);
+				return null;
+			}
+
+			Edition edition = text.getEdition("default"); //$NON-NLS-1$
+			if (edition == null) {
+				if (text.getEditions().size() == 0) {
+					System.out.println("No edition for text: "+text);
+				} else {
+					for (Edition ed : text.getEditions()) {
+						edition = ed;
+						break;
+					}
+				}
+			}
+			if (edition == null) {
+				System.out.println(TXMCoreMessages.Summary_15);
+				return null;
+			}
+
+			node.wordid = wordids[0];
+			return edition.getPageForWordId(wordids[0]);
+		} else {
+			System.out.println(TXMCoreMessages.Summary_16+Arrays.toString(textids)+TXMCoreMessages.Summary_17+Arrays.toString(wordids));
+			return null;
+		}
+	}
+
+	public class TreeNode extends ArrayList<TreeNode>
+	{
+		/**
+		 * 
+		 */
+		private static final long serialVersionUID = 1L;
+
+		public TreeNode parent;
+		boolean leaf = false;
+		String struct;
+		String id;
+		int start = -1;
+		int end = -1;
+		public String wordid;
+
+		public TreeNode()
+		{
+
+		}
+
+		public boolean check() {
+			for (TreeNode node : this) {
+				if(node.start >= this.start && node.end <= this.end && (node.end-node.start) < (this.end-this.start))
+					return node.check();
+				else
+					return false;
+			}
+			return true;
+		}
+
+
+		public TreeNode(String struct) {
+			this();
+			this.struct = struct;
+		}
+
+		@Override
+		public String toString()
+		{
+			String str = struct+"("+start+", "+end+")"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+			if(size() > 0)
+				str +="\n\t"+super.toString(); //$NON-NLS-1$
+			return str;
+		}
+
+		public TreeNode getParent()
+		{
+			return parent;
+		}
+
+		public String getInfo() {
+			return id;
+		}
+
+		public int getStart() {
+			return start;
+		}
+
+		public String getWordId() {
+			return wordid;
+		}
+	}
+
+	@Override
+	public String getName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getSimpleName() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public String getDetails() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public void clean() {
+		// TODO Auto-generated method stub
+		
+	}
+
+
+	@Override
+	public boolean toTxt(File outfile, String encoding, String colseparator, String txtseparator) throws Exception {
+		
+		return false;
+	}
+
+	public void setProperties(ArrayList<StructuralUnitProperty> properties) {
+		this.properties = properties;
+	}
+}

Property changes on: tmp/org.txm.searchengine.cqp.core/src/org/txm/searchengine/cqp/core/functions/summary/Summary.java
___________________________________________________________________
Added: svn:mime-type
   + text/plain

Index: tmp/org.txm.analec.rcp/src/org/txm/analec/toolbarbutton/StartButton.java
===================================================================
--- tmp/org.txm.analec.rcp/src/org/txm/analec/toolbarbutton/StartButton.java	(revision 652)
+++ tmp/org.txm.analec.rcp/src/org/txm/analec/toolbarbutton/StartButton.java	(revision 653)
@@ -26,13 +26,13 @@
 import org.txm.analec.toolbar.UnitToolbar;
 import org.txm.analec.view.ElementPropertiesView;
 import org.txm.analec.view.ElementSearchView;
-import org.txm.rcp.synoptic.editor.SynopticEditionEditor;
-import org.txm.rcp.synoptic.editor.ext.ToolbarButton;
 import org.txm.rcp.IImageKeys;
 import org.txm.rcp.swt.dialog.ConfirmDialog;
 import org.txm.rcp.utils.JobHandler;
 import org.txm.rcp.views.corpora.CorporaView;
 import org.txm.searchengine.cqp.corpus.MainCorpus;
+import org.txm.synopticedition.rcp.editors.SynopticEditionEditor;
+import org.txm.synopticedition.rcp.editors.ext.ToolbarButton;
 
 import visuAnalec.Message;
 import visuAnalec.Message.TypeMessage;
Index: tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/AnnotationToolbar.java
===================================================================
--- tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/AnnotationToolbar.java	(revision 652)
+++ tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/AnnotationToolbar.java	(revision 653)
@@ -5,7 +5,7 @@
 import org.eclipse.swt.events.MouseListener;
 import org.eclipse.swt.widgets.Composite;
 import org.txm.analec.toolbarbutton.StartButton;
-import org.txm.rcp.synoptic.editor.EditionPanel.RGBA;
+import org.txm.synopticedition.rcp.editors.EditionPanel.RGBA;
 
 import visuAnalec.donnees.Corpus;
 import visuAnalec.elements.Element;
Index: tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/UnitToolbar.java
===================================================================
--- tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/UnitToolbar.java	(revision 652)
+++ tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/UnitToolbar.java	(revision 653)
@@ -39,9 +39,6 @@
 import org.txm.objects.Edition;
 import org.txm.objects.Page;
 import org.txm.objects.Text;
-import org.txm.rcp.synoptic.editor.EditionPanel;
-import org.txm.rcp.synoptic.editor.EditionPanel.RGBA;
-import org.txm.rcp.synoptic.editor.SynopticEditionEditor;
 import org.txm.rcp.IImageKeys;
 import org.txm.rcp.TxmPreferences;
 import org.txm.rcp.swt.dialog.ConfirmDialog;
@@ -55,6 +52,9 @@
 import org.txm.searchengine.cqp.corpus.query.Match;
 import org.txm.searchengine.cqp.corpus.query.Query;
 import org.txm.searchengine.cqp.serverException.CqiServerError;
+import org.txm.synopticedition.rcp.editors.EditionPanel;
+import org.txm.synopticedition.rcp.editors.SynopticEditionEditor;
+import org.txm.synopticedition.rcp.editors.EditionPanel.RGBA;
 import org.txm.utils.logger.Log;
 
 import visuAnalec.Message;
Index: tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/SchemaToolbar.java
===================================================================
--- tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/SchemaToolbar.java	(revision 652)
+++ tmp/org.txm.analec.rcp/src/org/txm/analec/toolbar/SchemaToolbar.java	(revision 653)
@@ -35,14 +35,14 @@
 import org.txm.objects.Text;
 import org.txm.rcp.IImageKeys;
 import org.txm.rcp.swt.dialog.ConfirmDialog;
-import org.txm.rcp.synoptic.editor.EditionPanel;
-import org.txm.rcp.synoptic.editor.SynopticEditionEditor;
 import org.txm.searchengine.cqp.CQPEngine;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.corpus.Property;
 import org.txm.searchengine.cqp.corpus.QueryResult;
 import org.txm.searchengine.cqp.corpus.query.Match;
 import org.txm.searchengine.cqp.corpus.query.Query;
+import org.txm.synopticedition.rcp.editors.EditionPanel;
+import org.txm.synopticedition.rcp.editors.SynopticEditionEditor;
 import org.txm.utils.logger.Log;
 
 import visuAnalec.Message;
Index: tmp/org.txm.ca.core/src/org/txm/ca/core/preferences/CAPreferences.java
===================================================================
--- tmp/org.txm.ca.core/src/org/txm/ca/core/preferences/CAPreferences.java	(revision 652)
+++ tmp/org.txm.ca.core/src/org/txm/ca/core/preferences/CAPreferences.java	(revision 653)
@@ -19,37 +19,40 @@
 	// auto populate the preference node qualifier from the current bundle id
 	public static final String PREFERENCES_NODE = FrameworkUtil.getBundle(CAPreferences.class).getSymbolicName();
 	
+	
+	public static final String PREFERENCES_PREFIX = "ca_"; //$NON-NLS-1$
+	
 	/** Lexical table FMIN. */
-	public static final String F_MIN = "lt_fmin"; //$NON-NLS-1$
+	public static final String F_MIN = PREFERENCES_PREFIX + "lt_fmin"; //$NON-NLS-1$
 	/** Lexical table VMAX. */
-	public static final String V_MAX = "lt_vmax"; //$NON-NLS-1$
+	public static final String V_MAX = PREFERENCES_PREFIX + "lt_vmax"; //$NON-NLS-1$
 
 	/** The Constant QUALITYDISPLAY. */
-	public static final String QUALITY_DISPLAY_FORMAT = "quality_display_format"; //$NON-NLS-1$
+	public static final String QUALITY_DISPLAY_FORMAT = PREFERENCES_PREFIX + "quality_display_format"; //$NON-NLS-1$
 
 	/** The Constant CONTRIBDISPLAY. */
-	public static final String CONTRIB_DISPLAY_FORMAT = "contrib_display_format"; //$NON-NLS-1$
+	public static final String CONTRIB_DISPLAY_FORMAT = PREFERENCES_PREFIX + "contrib_display_format"; //$NON-NLS-1$
 
 	/** The Constant MASSDISPLAY. */
-	public static final String MASS_DISPLAY_FORMAT = "mass_display_format"; //$NON-NLS-1$
+	public static final String MASS_DISPLAY_FORMAT = PREFERENCES_PREFIX + "mass_display_format"; //$NON-NLS-1$
 
-	public static final String CHI_DISPLAY_FORMAT = "chi_display_format"; //$NON-NLS-1$
+	public static final String CHI_DISPLAY_FORMAT = PREFERENCES_PREFIX + "chi_display_format"; //$NON-NLS-1$
 	
 	/** The Constant DISTDISPLAY. */
-	public static final String DIST_DISPLAY_FORMAT = "dist_display_format"; //$NON-NLS-1$
+	public static final String DIST_DISPLAY_FORMAT = PREFERENCES_PREFIX + "dist_display_format"; //$NON-NLS-1$
 
 	/** The Constant COS2DISPLAY. */
-	public static final String COS2_DISPLAY_FORMAT = "cos2_display_format"; //$NON-NLS-1$
+	public static final String COS2_DISPLAY_FORMAT = PREFERENCES_PREFIX + "cos2_display_format"; //$NON-NLS-1$
 
 	/** The Constant COORDDISPLAY. */
-	public static final String COORD_DISPLAY_FORMAT = "coord_display_format"; //$NON-NLS-1$
+	public static final String COORD_DISPLAY_FORMAT = PREFERENCES_PREFIX + "coord_display_format"; //$NON-NLS-1$
 
 	
-	public static final String FIRST_DIMENSION = "first_dimension"; //$NON-NLS-1$
-	public static final String SECOND_DIMENSION = "second_dimension"; //$NON-NLS-1$
-	public static final String SHOW_INDIVIDUALS = "chart_show_individuals"; //$NON-NLS-1$
-	public static final String SHOW_VARIABLES = "chart_show_variables"; //$NON-NLS-1$
-	public static final String SHOW_POINT_SHAPES = "chart_show_point_shapes"; //$NON-NLS-1$
+	public static final String FIRST_DIMENSION = PREFERENCES_PREFIX + "first_dimension"; //$NON-NLS-1$
+	public static final String SECOND_DIMENSION = PREFERENCES_PREFIX + "second_dimension"; //$NON-NLS-1$
+	public static final String SHOW_INDIVIDUALS = PREFERENCES_PREFIX + "chart_show_individuals"; //$NON-NLS-1$
+	public static final String SHOW_VARIABLES = PREFERENCES_PREFIX + "chart_show_variables"; //$NON-NLS-1$
+	public static final String SHOW_POINT_SHAPES = PREFERENCES_PREFIX + "chart_show_point_shapes"; //$NON-NLS-1$
 	
 	
 
Index: tmp/org.txm.ca.core/src/org/txm/ca/core/functions/CA.java
===================================================================
--- tmp/org.txm.ca.core/src/org/txm/ca/core/functions/CA.java	(revision 652)
+++ tmp/org.txm.ca.core/src/org/txm/ca/core/functions/CA.java	(revision 653)
@@ -162,14 +162,14 @@
 			this.colfilter = col;
 		}
 		else {
-			System.out.println("Col filter malformed follow this pattern " + pattern);
+			System.out.println("Columns filter malformed follow this pattern " + pattern);
 		}
 		
 		if (row.matches(pattern)) {
 			this.rowfilter = row;
 		}
 		else {
-			System.out.println("Row filter malformed follow this pattern " + pattern);
+			System.out.println("Rows filter malformed follow this pattern " + pattern);
 		}
 	}
 
Index: tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/renderers/CAItemSelectionRenderer.java
===================================================================
--- tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/renderers/CAItemSelectionRenderer.java	(revision 652)
+++ tmp/org.txm.ca.core/src/org/txm/ca/core/chartsengine/jfreechart/themes/highcharts/renderers/CAItemSelectionRenderer.java	(revision 653)
@@ -39,13 +39,6 @@
 	
 
 	/**
-	 * Stack to store selected items to draw at last, over other items.
-	 */
-	protected ArrayList itemsToDrawAtLast; 
-	
-	
-	
-	/**
 	 * Creates a renderer dedicated to CA charts.
 	 */
 	public CAItemSelectionRenderer(CA ca, JFreeChart chart) {
Index: tmp/org.txm.cah.rcp/plugin.xml
===================================================================
--- tmp/org.txm.cah.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.cah.rcp/plugin.xml	(revision 653)
@@ -95,7 +95,7 @@
    <extension
          point="org.eclipse.core.runtime.adapters">
       <factory
-            adaptableType="org.txm.cah.core.functions.CAH"
+            adaptableType="org.txm.cah.core.functions.AHC"
             class="org.txm.cah.rcp.adapters.AHCAdapterFactory">
          <adapter
                type="org.eclipse.ui.model.IWorkbenchAdapter">
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/preferences/AHCPreferencePage.java
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/preferences/AHCPreferencePage.java	(revision 652)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/preferences/AHCPreferencePage.java	(revision 653)
@@ -78,7 +78,7 @@
 		Composite chartsTab = SWTChartsComponentsProvider.createChartsRenderingPreferencesTabFolderComposite(getFieldEditorParent());
 
 		String[][] labelAndValues = {{"2D", "true"}, {"3D", "false"}}; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
-		RadioGroupFieldEditor default2D3Ddisplay = new RadioGroupFieldEditor(AHCPreferences.DISPLAY_2D, AHCUIMessages.CAHPreferencePage_0, 2, labelAndValues, chartsTab);
+		RadioGroupFieldEditor default2D3Ddisplay = new RadioGroupFieldEditor(AHCPreferences.RENDERING_2D, AHCUIMessages.CAHPreferencePage_0, 2, labelAndValues, chartsTab);
 		addField(default2D3Ddisplay);
 		
 		
Index: tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/editors/AHCChartEditor.java
===================================================================
--- tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/editors/AHCChartEditor.java	(revision 652)
+++ tmp/org.txm.cah.rcp/src/org/txm/cah/rcp/editors/AHCChartEditor.java	(revision 653)
@@ -1,29 +1,19 @@
 package org.txm.cah.rcp.editors;
 
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Status;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.custom.CLabel;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.events.SelectionListener;
-import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Spinner;
 import org.eclipse.swt.widgets.ToolItem;
 import org.txm.cah.core.functions.AHC;
-import org.txm.cah.core.messages.AHCCoreMessages;
 import org.txm.cah.core.preferences.AHCPreferences;
 import org.txm.cah.rcp.messages.AHCUIMessages;
-import org.txm.chartsengine.core.results.ChartResult;
 import org.txm.chartsengine.rcp.editors.ChartEditor;
-import org.txm.core.preferences.TXMPreferences;
+import org.txm.core.results.Parameter;
 import org.txm.rcp.IImageKeys;
-import org.txm.rcp.JobsTimer;
-import org.txm.rcp.utils.JobHandler;
-import org.txm.rcp.views.QueriesView;
-import org.txm.statsengine.r.rcp.views.RVariablesView;
-import org.txm.utils.logger.Log;
+import org.txm.rcp.editors.listeners.ComputeSelectionListener;
 
 /**
  * CAH chart editor.
@@ -34,201 +24,100 @@
  */
 public class AHCChartEditor extends ChartEditor<AHC> {
 
+	
 	/**
-	 * Numbers of clusters.
+	 * Rows computing button.
 	 */
-	protected Spinner numbersOfClusters;
+	protected ToolItem rowsComputing;
+	
+	
 
+	/**
+	 * The metric (euclidean, manhattan).
+	 */
+	@Parameter(key=AHCPreferences.METRIC)
+	protected String metric;
 
+	/**
+	 * The method (METHODS <- c("average", "single", "complete", "ward", "weighted", "flexible")).
+	 */
+	@Parameter(key=AHCPreferences.METHOD)
+	protected String method;
 
+	/**
+	 * The number of clusters.
+	 */
+	@Parameter(key=AHCPreferences.N_CLUSTERS)
+	protected Spinner numberOfClusters;
+
+	/**
+	 * To compute the columns or the rows.
+	 */
+	@Parameter(key=AHCPreferences.COLUMNS_COMPUTING)
+	protected ToolItem columnsComputing;
+	
+	/**
+	 * To render in 2D or 3D.
+	 */
+	@Parameter(key=AHCPreferences.RENDERING_2D)
+	protected Button rendering2D;
+
+	
+	
+
 	@Override
 	public void _createPartControl(Composite parent) {
 
 		// Extend the chart editor tool bar
-		ToolItem separator = new ToolItem(this.topToolBar, SWT.SEPARATOR);
+		new ToolItem(this.chartToolBar, SWT.SEPARATOR);
 
 		// Number of clusters
-		ToolItem itemSeparator = new ToolItem(this.topToolBar, SWT.SEPARATOR);
-	    CLabel clustersLabel = new CLabel(this.topToolBar, SWT.CENTER);
+	    CLabel clustersLabel = new CLabel(this.chartToolBar, SWT.CENTER);
 		clustersLabel.setText(AHCUIMessages.CHART_TOOLBAR_BUTTON_NUMBER_OF_CLUSTERS);
-		clustersLabel.pack();
-		itemSeparator.setWidth(clustersLabel.getBounds().width);
-	    itemSeparator.setControl(clustersLabel);
+		this.chartToolBar.addControl(clustersLabel);
 
-	    itemSeparator = new ToolItem(this.topToolBar, SWT.SEPARATOR);
-	    this.numbersOfClusters = new Spinner(this.topToolBar, SWT.BORDER);
-	    this.numbersOfClusters.setMinimum(2);
-	    this.numbersOfClusters.setIncrement(1);
+	    this.numberOfClusters = new Spinner(this.chartToolBar, SWT.BORDER);
+	    this.numberOfClusters.setMinimum(2);
+	    this.numberOfClusters.setIncrement(1);
+	    this.chartToolBar.addControl(this.numberOfClusters);
+	    this.numberOfClusters.addSelectionListener(new ComputeSelectionListener(this));
 
-		itemSeparator.setControl(this.numbersOfClusters);
-		this.numbersOfClusters.pack();
-		itemSeparator.setWidth(this.numbersOfClusters.getBounds().width);
 
-
 		// Columns
-		final ToolItem computeColumns = new ToolItem(this.topToolBar, SWT.RADIO);
-		computeColumns.setToolTipText(AHCUIMessages.COMPUTE_COLUMNS);
-		computeColumns.setImage(IImageKeys.getImage(AHCChartEditor.class, "icons/compute_columns.png")); //$NON-NLS-1$
+		this.columnsComputing = new ToolItem(this.chartToolBar, SWT.RADIO);
+		this.columnsComputing.setToolTipText(AHCUIMessages.COMPUTE_COLUMNS);
+		this.columnsComputing.setImage(IImageKeys.getImage(AHCChartEditor.class, "icons/compute_columns.png")); //$NON-NLS-1$
+		this.columnsComputing.addSelectionListener(new ComputeSelectionListener(this));
 		// FIXME: keep this for offering an option "large icons" with text in buttons ?
-		//computeColumns.setText(CAUIPMessages.ComputeClassification_5);
-		computeColumns.setSelection(this.getBooleanParameterValue(AHCPreferences.COLUMNS_COMPUTING));
+		//this.columnsComputing.setText(CAUIPMessages.ComputeClassification_5);
+		//this.columnsComputing.setSelection(this.getBooleanParameterValue(AHCPreferences.COLUMNS_COMPUTING));
 
 		// Rows
-		final ToolItem computeRows = new ToolItem(this.topToolBar, SWT.RADIO);
-		computeRows.setToolTipText(AHCUIMessages.COMPUTE_ROWS);
-		computeRows.setImage(IImageKeys.getImage(AHCChartEditor.class, "icons/compute_rows.png")); //$NON-NLS-1$
-		// FIXME: keep this for offering an option "large icons" with text in buttons ?
-		//computeRows.setText(CAUIPMessages.ComputeClassification_6);
-		computeRows.setSelection(!this.getBooleanParameterValue(AHCPreferences.COLUMNS_COMPUTING));
+		this.rowsComputing = new ToolItem(this.chartToolBar, SWT.RADIO);
+		this.rowsComputing.setToolTipText(AHCUIMessages.COMPUTE_ROWS);
+		this.rowsComputing.setImage(IImageKeys.getImage(AHCChartEditor.class, "icons/compute_rows.png")); //$NON-NLS-1$
 
 		
-		// 2D/3D
-		final Combo displayCombo = new Combo(this.topToolBar, SWT.READ_ONLY);
-		String items[] = { "2D", "3D" }; //$NON-NLS-1$ //$NON-NLS-2$
-		displayCombo.setItems(items);
-		if(this.getBooleanParameterValue(AHCPreferences.DISPLAY_2D))	{
-			displayCombo.select(0);
-		}
-		else	{
-			displayCombo.select(1);
-		}
-		
-		ToolItem comboItem = new ToolItem(this.topToolBar, SWT.SEPARATOR);
-		comboItem.setControl(displayCombo);
-		displayCombo.pack();
-		comboItem.setWidth(displayCombo.getBounds().width);
-		
-		// Listeners
-		SelectionListener listener = new SelectionListener() {
-			
-			@Override
-			public void widgetSelected(SelectionEvent e) {
-				AHC cah = getResult();
+		// 2D/3D rendering
+		this.rendering2D = new Button(this.chartToolBar, SWT.CHECK);
+		this.rendering2D.setText("2D");//$NON-NLS-1$
+		this.chartToolBar.addControl(this.rendering2D);
+		this.rendering2D.addSelectionListener(new ComputeSelectionListener(this));
+		//this.rendering2D.setBackground(itemSeparator.getParent().getBackground());
 
-				// Numbers of clusters
-				if(e.getSource() == numbersOfClusters)	{
-					
-					cah.setNCluster(((Spinner)e.getSource()).getSelection());
-				}
-				// Compute columns or rows
-				else if(e.getSource() == computeColumns || e.getSource() == computeRows)	{
-					
-					// cancel the event if nothing has changed
-//					if(e.getSource() == computeColumns && computeColumns.getSelection()
-//							|| e.getSource() == computeRows && computeRows.getSelection())	{
-//						return;
-//					}
-					
-					cah.setColumnsComputing(computeColumns.getSelection());
-					
-					// reset the number of clusters
-					cah.setNCluster(TXMPreferences.getInt(AHCPreferences.N_CLUSTERS, AHCPreferences.PREFERENCES_NODE));
-
-					updateNumbersOfClustersCurrentValue();
-					// Update the maximum value of the number of clusters spinner according to the new CAH configuration 
-					updateNumbersOfClustersMaxValue();
-				}
-				else if(e.getSource() == displayCombo)	{
-					cah.saveParameter(AHCPreferences.DISPLAY_2D, (displayCombo.getSelectionIndex() == 0));
-				}
-				
-				
-				// Recompute the CAH and the chart
-				//computeResult(true);
-			}
-			
-			@Override
-			public void widgetDefaultSelected(SelectionEvent e) {
-				// TODO Auto-generated method stub
-				
-			}
-		};
-		
-		this.numbersOfClusters.addSelectionListener(listener);
-		computeColumns.addSelectionListener(listener);
-		displayCombo.addSelectionListener(listener);
-		
-		//this.computeResult(false);
-		
-		
-
 	}
 
 
-//	/**
-//	 * Computes the result and the chart.
-//	 * @param update
-//	 */
-//	public void computeResult(final boolean update)	{
-//		
-//		JobHandler jobhandler = new JobHandler(AHCCoreMessages.LOG_COMPUTE_CAH) {
-//			@Override
-//			protected IStatus run(IProgressMonitor monitor) {
-//				this.runInit(monitor);
-//				try {
-//
-//					this.acquireSemaphore();
-//					getResultData().compute(this);
-//					this.releaseSemaphore();
-//
-//					if(!update)	{
-//
-//						getResultData().getCA().addChild(getResultData());
-//						
-//						// Refresh views
-//						this.syncExec(new Runnable() {
-//							@Override
-//							public void run() {
-//								
-//							    updateNumbersOfClustersMaxValue();
-//							    updateNumbersOfClustersCurrentValue();
-//
-//								QueriesView.refresh();
-//								RVariablesView.refresh();
-//							}
-//						});
-//					
-//						
-//					}
-//					
-//					compute(update);
-//					
-//				}
-//				// for user direct canceling
-//				catch (ThreadDeath td) {
-//					return Status.CANCEL_STATUS;
-//				}
-//				catch (Exception e) {
-//					System.out.println(e.getLocalizedMessage());
-//					org.txm.rcp.utils.Logger.printStackTrace(e);
-//					Log.severe("Error while computing CAH: " + e.getLocalizedMessage());
-//				}
-//				finally {
-//					monitor.done();
-//					JobsTimer.stopAndPrint();
-//				}
-//				return Status.OK_STATUS;
-//			}
-//		};
-//		jobhandler.startJob();
-//	}
-	
-	
-	
-	
-	/**
-	 * Updates the maximum value of the number of clusters spinner according to the CAH configuration.
-	 */
-	public void updateNumbersOfClustersMaxValue()	{
-		int max = this.getResult().getMaxClustersCount();
-		this.numbersOfClusters.setMaximum(max);
-	}
+	@Override
+	public void updateEditorFromResult(boolean update) {
+		
+		// Update the maximum value of the number of clusters spinner according to the new CAH configuration 
+		this.numberOfClusters.setMaximum(this.getResult().getMaxClustersCount());
 
-	/**
-	 * Updates the current value of the number of clusters spinner.
-	 */
-	public void updateNumbersOfClustersCurrentValue()	{
-		this.numbersOfClusters.setSelection(TXMPreferences.getInt(AHCPreferences.PREFERENCES_NODE, this.getResult(), AHCPreferences.N_CLUSTERS));
+		// Updates the current value of the number of clusters spinner
+		this.numberOfClusters.setSelection(this.getResult().getNumberOfClusters());
+		
+		this.rowsComputing.setSelection(!this.getResult().isColumnsComputing());
 	}
 
 }
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/listeners/ComputeKeyListener.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/listeners/ComputeKeyListener.java	(revision 652)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/listeners/ComputeKeyListener.java	(revision 653)
@@ -27,11 +27,16 @@
 
 	@Override
 	public void keyPressed(KeyEvent e) {
-		// FIXME: debug
-		// System.out.println("key pressed : "+e.keyCode);
 		if (e.keyCode == SWT.CR || e.keyCode == SWT.KEYPAD_CR) {
 			this.editor.compute(false);
 		}
+		// FIXME: update the result from the widget
+		// purpose here is, for example, to enable the compute command button when a query is typed
+		// the code below doesn't work as expected
+//		else	{
+//			this.editor.autoUpdateResultFromEditorParameters();
+//			this.editor.updateResultFromEditor();
+//		}
 	}
 
 	@Override
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorToolBar.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorToolBar.java	(revision 652)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditorToolBar.java	(revision 653)
@@ -7,9 +7,9 @@
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
 import org.eclipse.swt.layout.RowLayout;
 import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Group;
 import org.eclipse.swt.widgets.ToolBar;
 import org.eclipse.swt.widgets.ToolItem;
@@ -90,7 +90,21 @@
 		this.setVisible(((Group) this.editorPart.getParametersGroupsComposite().getChildren()[0]), visible);
 	}
 	
+	
 	/**
+	 * Adds the specified control to this toolbar.
+	 * Convenience method to add non-ToolItem controls to the toolbar using the SWT.SEPARATOR trick, plus packing and setting the right width.
+	 * @param control
+	 */
+	public void addControl(Control control)	{
+		ToolItem itemSeparator = new ToolItem(this, SWT.SEPARATOR);
+		control.pack();
+		itemSeparator.setWidth(control.getBounds().width);
+	    itemSeparator.setControl(control);	
+	}
+
+	
+	/**
 	 * Creates a <code>Group</code> with some configuration to make it visible/invisible and a <code>ToolItem</code> attached to the specified tool bar to show/hide this group.
 	 * 
 	 * @param composite
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 652)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/editors/TXMEditor.java	(revision 653)
@@ -145,6 +145,8 @@
 			this.topToolBarContainer.setLayout(rl);
 
 			this.topToolBar = new TXMEditorToolBar(this, this.topToolBarContainer, SWT.FLAT | SWT.RIGHT, TOP_TOOLBAR_ID);
+			// FIXME: debug tests for see why there is an empty area at bottom of the toolbar
+			//this.topToolBar.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_RED));
 
 			this.parametersGroupsComposite = new Composite(parent, SWT.NONE);
 			GridLayout gl = new GridLayout(1, true);
@@ -694,6 +696,16 @@
 				e.printStackTrace();
 			}
 		}
+		
+		// FIXME: Updating the compute button enabled/disabled state
+		// the code below doesn't work as expected for text fields (as query field or other)
+//		try {
+//			this.topToolBar.getItem(0).setEnabled(this.getResult().canCompute());
+//		}
+//		catch (Exception e) {
+//			// TODO Auto-generated catch block
+//			e.printStackTrace();
+//		}
 	}
 
 
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/SummaryView.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/SummaryView.java	(revision 652)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/SummaryView.java	(revision 653)
@@ -57,7 +57,6 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.part.ViewPart;
 import org.txm.Toolbox;
-import org.txm.functions.summary.Summary;
 import org.txm.objects.Page;
 import org.txm.rcp.RCPMessages;
 import org.txm.rcp.commands.OpenBrowser;
@@ -65,6 +64,7 @@
 import org.txm.rcp.swt.widget.PropertiesSelector;
 import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
 import org.txm.searchengine.cqp.clientExceptions.InvalidCqpIdException;
+import org.txm.searchengine.cqp.core.functions.summary.Summary;
 import org.txm.searchengine.cqp.corpus.CorpusManager;
 import org.txm.searchengine.cqp.corpus.MainCorpus;
 import org.txm.searchengine.cqp.corpus.Property;
Index: tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/debug/TXMResultDebugView.java
===================================================================
--- tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/debug/TXMResultDebugView.java	(revision 652)
+++ tmp/org.txm.rcp/src/main/java/org/txm/rcp/views/debug/TXMResultDebugView.java	(revision 653)
@@ -106,7 +106,8 @@
 		buffer.append("Empty name: " + this.currentResult.getEmptyName() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		buffer.append("toString(): " + this.currentResult.toString() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
 		buffer.append("Details: " + this.currentResult.getDetails() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
-
+		buffer.append("Dirty: " + this.currentResult.isDirty() + "\n"); //$NON-NLS-1$ //$NON-NLS-2$
+		
 		// Object parameters
 		buffer.append("\n"); //$NON-NLS-1$
 		buffer.append(this.currentResult.dumpParameters());
Index: tmp/org.txm.rcp/plugin.xml
===================================================================
--- tmp/org.txm.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.rcp/plugin.xml	(revision 653)
@@ -946,9 +946,7 @@
             <command
                   commandId="org.txm.rcp.commands.base.DeleteInCorpora"
                   icon="icons/functions/Delete.png"
-                  label="%command.label.65"
-                  style="push"
-                  tooltip="%command.tooltip.33">
+                  style="push">
                <visibleWhen
                      checkEnabled="false">
                  
@@ -1316,7 +1314,58 @@
             locationURI="toolbar:org.eclipse.ui.main.toolbar">
          <toolbar
                id="org.txm.rcp.toolbarcorpus">
+            
             <command
+                  commandId="org.txm.rcp.commands.base.DeleteInCorpora"
+                  icon="icons/functions/Delete.png"
+                  style="push"
+                  tooltip="%command.tooltip.33">
+               <visibleWhen
+                     checkEnabled="false">
+                  <or>
+                     <reference
+                           definitionId="OneBaseSelected">
+                     </reference>
+                     <reference
+                           definitionId="OneConcordanceSelected">
+                     </reference>
+                     <reference
+                           definitionId="OneCorpusSelected">
+                     </reference>
+                     <reference
+                           definitionId="OneLexicalTableSelected">
+                     </reference>
+                     <reference
+                           definitionId="OneLexiconSelected">
+                     </reference>
+                     <reference
+                           definitionId="OnePartitionSelected">
+                     </reference>
+                     <reference
+                           definitionId="OneTxmObjectSelected">
+                     </reference>
+                     <reference
+                           definitionId="OneTXMResultSelected">
+                     </reference>
+                  </or>
+               </visibleWhen>
+            </command>
+            <separator
+                  name="org.txm.rcp.toolbarcorpus.corpus"
+                  visible="true">
+            </separator>
+            <separator
+                  name="org.txm.rcp.toolbarcorpus.annotation"
+                  visible="true">
+            </separator>
+         </toolbar>
+         <separator
+               name="org.txm.rcp.toolbar.separator1"
+               visible="true">
+         </separator>
+         <toolbar
+               id="org.txm.rcp.toolbartools">
+            <command
                   commandId="org.txm.rcp.commands.function.ExportResult"
                   icon="icons/functions/export_data.png"
                   label="%command.label.51"
@@ -1384,58 +1433,6 @@
                   </or>
                </visibleWhen>
             </command>
-            <separator
-                  name="org.txm.rcp.toolbarcorpus.corpus"
-                  visible="true">
-            </separator>
-            
-            <command
-                  commandId="org.txm.rcp.commands.base.DeleteInCorpora"
-                  icon="icons/functions/Delete.png"
-                  label="%command.label.65"
-                  style="push"
-                  tooltip="%command.tooltip.33">
-               <visibleWhen
-                     checkEnabled="false">
-                  <or>
-                     <reference
-                           definitionId="OneBaseSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneConcordanceSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneCorpusSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexicalTableSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneLexiconSelected">
-                     </reference>
-                     <reference
-                           definitionId="OnePartitionSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneTxmObjectSelected">
-                     </reference>
-                     <reference
-                           definitionId="OneTXMResultSelected">
-                     </reference>
-                  </or>
-               </visibleWhen>
-            </command>
-            <separator
-                  name="org.txm.rcp.toolbarcorpus.annotation"
-                  visible="true">
-            </separator>
-         </toolbar>
-         <separator
-               name="org.txm.rcp.toolbar.separator1"
-               visible="true">
-         </separator>
-         <toolbar
-               id="org.txm.rcp.toolbartools">
 
             <separator
                   name="org.txm.rcp.separator4"
@@ -1999,9 +1996,7 @@
             <command
                   commandId="org.txm.rcp.commands.base.DeleteInCorpora"
                   icon="icons/functions/Delete.png"
-                  label="%command.label.65"
-                  style="push"
-                  tooltip="%command.tooltip.33">
+                  style="push">
                <visibleWhen
                      checkEnabled="false">
                   <or>
Index: tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/VLCPlayerEditor.java
===================================================================
--- tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/VLCPlayerEditor.java	(revision 652)
+++ tmp/org.txm.backtomedia.rcp/src/org/txm/backtomedia/editors/vlcplayer/VLCPlayerEditor.java	(revision 653)
@@ -7,8 +7,6 @@
 import org.eclipse.ui.IEditorSite;
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.part.EditorPart;
-import org.txm.core.results.TXMResult;
-import org.txm.rcp.editors.TXMEditorPart;
 
 public class VLCPlayerEditor extends EditorPart {
 	
Index: tmp/org.txm.cooccurrence.rcp/plugin.xml
===================================================================
--- tmp/org.txm.cooccurrence.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.cooccurrence.rcp/plugin.xml	(revision 653)
@@ -72,7 +72,7 @@
       </menuContribution>
       <menuContribution
             allPopups="false"
-            locationURI="toolbar:org.txm.rcp.toolbartools">
+            locationURI="toolbar:org.txm.rcp.toolbartools?after=org.txm.concordance.rcp.handlers.ComputeConcordance">
          <command
                commandId="org.txm.cooccurrence.rcp.handlers.ComputeCooccurrences"
                icon="icons/cooccurrences.png"
Index: tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/messages/CAUIMessages.java
===================================================================
--- tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/messages/CAUIMessages.java	(revision 652)
+++ tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/messages/CAUIMessages.java	(revision 653)
@@ -1,6 +1,5 @@
 package org.txm.ca.rcp.messages;
 
-import org.eclipse.osgi.util.NLS;
 import org.txm.utils.messages.Utf8NLS;
 
 public class CAUIMessages extends Utf8NLS {
Index: tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAFactorialMapChartEditor.java
===================================================================
--- tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAFactorialMapChartEditor.java	(revision 652)
+++ tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/editors/CAFactorialMapChartEditor.java	(revision 653)
@@ -10,11 +10,11 @@
 import org.txm.ca.core.functions.CA;
 import org.txm.ca.core.preferences.CAPreferences;
 import org.txm.ca.rcp.messages.CAUIMessages;
-import org.txm.chartsengine.rcp.editors.ChartEditorInput;
 import org.txm.chartsengine.rcp.editors.ChartEditor;
+import org.txm.chartsengine.rcp.editors.ChartEditorInput;
 import org.txm.core.results.Parameter;
 import org.txm.rcp.IImageKeys;
-import org.txm.utils.logger.Log;
+import org.txm.rcp.editors.listeners.ComputeSelectionListener;
 
 /**
  * Correspondence analysis factorial map chart editor.
@@ -25,6 +25,7 @@
 
 
 	// FIXME: try to automate that
+	// a solution is to stop using to int in CA but a members int[] dimensions, then use a ComboViewer in this editor
 //	/**
 //	 * First dimension.
 //	 */
@@ -71,44 +72,42 @@
 	public void _createPartControl(Composite parent) {
 
 		// Extend the chart editor tool bar
-		ToolItem separator = new ToolItem(this.topToolBar, SWT.SEPARATOR);
+		new ToolItem(this.chartToolBar, SWT.SEPARATOR);
 
 		
 		// Show/hide columns
-		showIndividuals = new ToolItem(this.topToolBar, SWT.CHECK);
+		showIndividuals = new ToolItem(this.chartToolBar, SWT.CHECK);
 		// FIXME: keep this for offering an option "large icons" with text in buttons ?
 		//showColumns.setText(SWTComponentsProviderMessages.SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_COLUMS_LABEL);
 		showIndividuals.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_COLUMS_TOOLTIP);
 		showIndividuals.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_columns.png"));
-		//showIndividuals.setSelection(this.getBooleanParameterValue(CAPreferences.SHOW_INDIVIDUALS));
+		showIndividuals.addSelectionListener(new ComputeSelectionListener(this));
 
 		// Show/hide rows
-		showVariables = new ToolItem(this.topToolBar, SWT.CHECK);
+		showVariables = new ToolItem(this.chartToolBar, SWT.CHECK);
 		// FIXME: keep this for offering an option "large icons" with text in buttons ?
 		//this.showRows.setText(SWTComponentsProviderMessages.SWTChartsComponentProvider_CA_TOOLBAR_BUTTON_SHOW_ROWS_LABEL);
 		showVariables.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_ROWS_TOOLTIP);
 		showVariables.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_rows.png"));
-		//showVariables.setSelection(this.getBooleanParameterValue(CAPreferences.SHOW_VARIABLES));
+		showVariables.addSelectionListener(new ComputeSelectionListener(this));
 
+		
 		// Show/hide point shapes
-		showPointShapes = new ToolItem(this.topToolBar, SWT.CHECK);
+		showPointShapes = new ToolItem(this.chartToolBar, SWT.CHECK);
 		// FIXME: keep this for offering an option "large icons" with text in buttons ?
 		//showPointShapes.setText(CAUIMessages.SHOW_HIDE_POINT_SHAPES);
 		showPointShapes.setToolTipText(CAUIMessages.CHART_TOOLBAR_BUTTON_SHOW_HIDE_POINT_SHAPES);
 		showPointShapes.setImage(IImageKeys.getImage(CAFactorialMapChartEditor.class, "icons/show_point_shapes.png"));
-		//showPointShapes.setSelection(this.getBooleanParameterValue(CAPreferences.SHOW_POINT_SHAPES));
+		showPointShapes.addSelectionListener(new ComputeSelectionListener(this));
+
 		
-		
 		// Factors plane selection
-		ToolItem itemSeparator = new ToolItem(this.topToolBar, SWT.SEPARATOR);
-		CLabel factorsLabel = new CLabel(this.topToolBar, SWT.CENTER);
+		CLabel factorsLabel = new CLabel(this.chartToolBar, SWT.CENTER);
 		factorsLabel.setText(CAUIMessages.CHART_TOOLBAR_AXES_SELECTION_COMBO_BOX_LABEL);
-		factorsLabel.pack();
-		itemSeparator.setWidth(factorsLabel.getBounds().width);
-	    itemSeparator.setControl(factorsLabel);
+		this.chartToolBar.addControl(factorsLabel);
+		
+	    final Combo plansCombo = new Combo(this.chartToolBar, SWT.READ_ONLY);
 
-	    final Combo plansCombo = new Combo(this.topToolBar, SWT.READ_ONLY);
-
 		// FIXME: commented because the infos panel is not ready to manage more axes
 //		ArrayList<String> planes = null;
 //		try {
@@ -150,10 +149,7 @@
 		}
 
 
-		ToolItem comboItem = new ToolItem(this.topToolBar, SWT.SEPARATOR);
-		comboItem.setControl(plansCombo);
-		plansCombo.pack();
-		comboItem.setWidth(plansCombo.getBounds().width);
+		this.chartToolBar.addControl(plansCombo);
 		
 		
 		
@@ -165,33 +161,8 @@
 
 				boolean resetView = false;
 				
-				//Show/hide columns
-				if(e.getSource() == showIndividuals)	{
-
-					// Cancel the event and do nothing if only columns are currently displayed
-					if(!((ToolItem) e.getSource()).getSelection() && !showVariables.getSelection())	{
-						((ToolItem) e.getSource()).setSelection(true);
-						return;
-					}
-					getResult().setShowIndividuals(((ToolItem) e.getSource()).getSelection());
-				}
-				//Show/hide rows
-				else if(e.getSource() == showVariables)	{
-
-					// Cancel the event and do nothing if only rows are currently displayed
-					if(!((ToolItem) e.getSource()).getSelection() && !showIndividuals.getSelection())	{
-						((ToolItem) e.getSource()).setSelection(true);
-						return;
-					}
-
-					getResult().setShowVariables(((ToolItem) e.getSource()).getSelection());
-				}
-				//Show/hide rows
-				else if(e.getSource() == showPointShapes)	{
-					getResult().setShowPointShapes(((ToolItem) e.getSource()).getSelection());
-				}
 				// Change factors
-				else if(e.getSource() == plansCombo)	{
+				if(e.getSource() == plansCombo)	{
 
 					Combo plans = (Combo) e.getSource();
 
@@ -201,15 +172,9 @@
 					String str = plans.getItem(plans.getSelectionIndex());
 					str = str.substring(1, str.length() -1); // remove ( and )
 					String[] split = str.split(","); // 2 items //$NON-NLS-1$
-					// FIXME: this case should never happens
-					if(split.length != 2)	{
-						Log.severe("** Internal error: CA plan selection error"); //$NON-NLS-1$
-						return;
-					}
 					dimension1 = Integer.parseInt(split[0]);
 					dimension2 = Integer.parseInt(split[1]);
 
-					// FIXME: persistence
 					getResult().setFirstDimension(dimension1);
 					getResult().setSecondDimension(dimension2);
 
@@ -230,9 +195,6 @@
 		};
 		
 		
-		showIndividuals.addSelectionListener(listener);
-		showVariables.addSelectionListener(listener);
-		showPointShapes.addSelectionListener(listener);
 		plansCombo.addSelectionListener(listener);
 	
 	}
Index: tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/handlers/ComputeCA.java
===================================================================
--- tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/handlers/ComputeCA.java	(revision 652)
+++ tmp/org.txm.ca.rcp/src/org/txm/ca/rcp/handlers/ComputeCA.java	(revision 653)
@@ -121,7 +121,6 @@
 			else if (selection instanceof LexicalTable) {
 				LexicalTable lexicalTable = (LexicalTable) selection;
 				Property property = lexicalTable.getProperty();
-				Partition partition = lexicalTable.getPartition();
 
 				Log.info(NLS.bind(CAUIMessages.ComputeCorrespondanceAnalysis_0, lexicalTable, property));
 
@@ -144,10 +143,7 @@
 				Log.severe("Error: cannot compute a CA with current selection: " + selection);
 				return null;
 			}
-
-			// FIXME: old code
-			//ChartEditor.compute(ca);
-			// FIXME: new code
+			// compute the CA
 			ca.compute();
 
 			try {
Index: tmp/org.txm.ca.rcp/plugin.xml
===================================================================
--- tmp/org.txm.ca.rcp/plugin.xml	(revision 652)
+++ tmp/org.txm.ca.rcp/plugin.xml	(revision 653)
@@ -12,7 +12,7 @@
          point="org.eclipse.ui.menus">
       <menuContribution
             allPopups="false"
-            locationURI="toolbar:org.txm.rcp.toolbartools">
+            locationURI="toolbar:org.txm.rcp.toolbartools?after=org.txm.partition.rcp.handlers.ComputePartitionDimensionsBarChart">
          <command
                commandId="org.txm.ca.rcp.handlers.ComputeCA"
                icon="icons/ca.png"
Index: tmp/org.txm.ca.rcp/META-INF/MANIFEST.MF
===================================================================
--- tmp/org.txm.ca.rcp/META-INF/MANIFEST.MF	(revision 652)
+++ tmp/org.txm.ca.rcp/META-INF/MANIFEST.MF	(revision 653)
@@ -24,3 +24,4 @@
  org.txm.ca.rcp.messages,
  org.txm.ca.rcp.preferences
 Bundle-Vendor: Textometrie.org
+Bundle-ActivationPolicy: lazy
