Revision 23

tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/Perspective.java (revision 23)
1
package ___wordcloudrcp;
2

  
3
import org.eclipse.ui.IPageLayout;
4
import org.eclipse.ui.IPerspectiveFactory;
5

  
6
public class Perspective implements IPerspectiveFactory {
7

  
8
	public void createInitialLayout(IPageLayout layout) {
9
	}
10
}
0 11

  
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/messages_fr.properties (revision 23)
1
WordCloudTitle=Nuage de mot
2
ComputeVocabulary_0=Ouverture du r?sultat
3
ComputeWordCloud_0=Le moteur de statistique n'est pas pr?t. Abandon.
4
ComputeWordCloud_11=Les packages n?c?ssaires au fonctionnement de la fonctionnalit? n'ont pas pu ?tre install?s. Voir les instructions pour installation manuelle ? l'adresse https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud
5
ComputeWordCloud_12=Abandon du calcul.
6
ComputeWordCloud_2=Les packages R ont ?t? charg?s. Lancement du calcul.
7
ComputeWordCloud_3=Le package R {0} n'a pas pu ?tre install?. Raison : {1} 
8
ComputeWordCloud_4=Installation du package R {0}...
9
ComputeWordCloud_5=Chargement du package : 
10
ComputeWordCloud_6=Echec de l'installation du package {0}.
11
ComputeWordCloud_7=Annulation par l'utilisateur.
12
WordCloudEditor_0=Vmax : 
13
WordCloudEditor_1=Fmin : 
14
WordCloudEditor_2=% de labels verticaux : 
15
WordCloudEditor_3=Position al?atoire
16
WordCloudEditor_4=Calculer
17
WordCloudEditor_5=Object non-compatible avec la fonctionnalit? Nuage de mot
18
WordCloudEditor_6=WordCloud est pr?t : 
19
WordCloudEditor_7=Dessin en cours...
20
WordCloudEditor_8=Sauvegarde dans le fichier {0} 
21
WordCloudEditor_9=Rafra?chissement 
22
WordCloudPreferencePage_0=Filtre en nombre de mot ? utiliser
23
WordCloudPreferencePage_1=Filtre en fr?quence minimal des mots ? utiliser frequency
24
WordCloudPreferencePage_2=Pourcentage de mot verticaux
25
WordCloudPreferencePage_3=Position al?atoire des mots
0 26

  
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/ApplicationActionBarAdvisor.java (revision 23)
1
package ___wordcloudrcp;
2

  
3
import org.eclipse.jface.action.IMenuManager;
4
import org.eclipse.ui.IWorkbenchWindow;
5
import org.eclipse.ui.application.ActionBarAdvisor;
6
import org.eclipse.ui.application.IActionBarConfigurer;
7

  
8
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
9

  
10
    public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
11
        super(configurer);
12
    }
13

  
14
    protected void makeActions(IWorkbenchWindow window) {
15
    }
16

  
17
    protected void fillMenuBar(IMenuManager menuBar) {
18
    }
19
    
20
}
0 21

  
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/ApplicationWorkbenchAdvisor.java (revision 23)
1
package ___wordcloudrcp;
2

  
3
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
4
import org.eclipse.ui.application.WorkbenchAdvisor;
5
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
6

  
7
public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
8

  
9
	private static final String PERSPECTIVE_ID = "WordCloudRCP.perspective"; //$NON-NLS-1$
10

  
11
    public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
12
        return new ApplicationWorkbenchWindowAdvisor(configurer);
13
    }
14

  
15
	public String getInitialWindowPerspectiveId() {
16
		return PERSPECTIVE_ID;
17
	}
18
}
0 19

  
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/messages.properties (revision 23)
1
WordCloudTitle=WordCloud
2
ComputeVocabulary_0=Opening WordCloud results
3
ComputeWordCloud_0=StatEngine is not ready. Canceling command.
4
ComputeWordCloud_11=The necessary R packages have not been installed properly, it is not possible to complete the installation of the WordCloud command.\nSee instructions at https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud 
5
ComputeWordCloud_12=Aborting WordCloud.
6
ComputeWordCloud_2=R packages loaded. Now running WordCloud
7
ComputeWordCloud_3=The {0} R package was not installed. Reason: {1}
8
ComputeWordCloud_4=Installing {0} R package...
9
ComputeWordCloud_5=Loading package: 
10
ComputeWordCloud_6=Could not install the {0} package
11
ComputeWordCloud_7=Operation canceled by user
12
WordCloudEditor_0=Vmax: 
13
WordCloudEditor_1=Fmin: 
14
WordCloudEditor_2=% of rotated labels: 
15
WordCloudEditor_3=Randomize positions
16
WordCloudEditor_4=Draw
17
WordCloudEditor_5=Wrong WordCloud input object
18
WordCloudEditor_6=WordCloud ready: 
19
WordCloudEditor_7=WordClouding...
20
WordCloudEditor_8=Drawing in {0}
21
WordCloudEditor_9=WordCloud refreshed
22
WordCloudPreferencePage_0=Number of used words
23
WordCloudPreferencePage_1=Minimal frequency for used words
24
WordCloudPreferencePage_2=Percent of rotated words
25
WordCloudPreferencePage_3=Random word positions
0 26

  
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/Application.java (revision 23)
1
package ___wordcloudrcp;
2

  
3
import org.eclipse.equinox.app.IApplication;
4
import org.eclipse.equinox.app.IApplicationContext;
5
import org.eclipse.swt.widgets.Display;
6
import org.eclipse.ui.IWorkbench;
7
import org.eclipse.ui.PlatformUI;
8

  
9
/**
10
 * This class controls all aspects of the application's execution
11
 */
12
public class Application implements IApplication {
13
	
14
	public static String PLUGIN_ID = "WordCloudRCP"; //$NON-NLS-1$
15

  
16
	/* (non-Javadoc)
17
	 * @see org.eclipse.equinox.app.IApplication#start(org.eclipse.equinox.app.IApplicationContext)
18
	 */
19
	public Object start(IApplicationContext context) throws Exception {
20
		Display display = PlatformUI.createDisplay();
21
		try {
22
			int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
23
			if (returnCode == PlatformUI.RETURN_RESTART)
24
				return IApplication.EXIT_RESTART;
25
			else
26
				return IApplication.EXIT_OK;
27
		} finally {
28
			display.dispose();
29
		}
30
	}
31

  
32
	/* (non-Javadoc)
33
	 * @see org.eclipse.equinox.app.IApplication#stop()
34
	 */
35
	public void stop() {
36
		if (!PlatformUI.isWorkbenchRunning())
37
			return;
38
		final IWorkbench workbench = PlatformUI.getWorkbench();
39
		final Display display = workbench.getDisplay();
40
		display.syncExec(new Runnable() {
41
			public void run() {
42
				if (!display.isDisposed())
43
					workbench.close();
44
			}
45
		});
46
	}
47
}
0 48

  
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/___Messages.java (revision 23)
1
package ___wordcloudrcp;
2

  
3
import org.eclipse.osgi.util.NLS;
4

  
5
public class ___Messages extends NLS {
6
	private static final String BUNDLE_NAME = "wordcloudrcp.messages"; //$NON-NLS-1$
7
	public static String WordCloudTitle;
8
	public static String ComputeIndex_0;
9
	public static String ComputeWordCloud_0;
10
	public static String ComputeWordCloud_11;
11
	public static String ComputeWordCloud_12;
12
	public static String ComputeWordCloud_2;
13
	public static String ComputeWordCloud_3;
14
	public static String ComputeWordCloud_4;
15
	public static String ComputeWordCloud_5;
16
	public static String ComputeWordCloud_6;
17
	public static String ComputeWordCloud_7;
18
	public static String WordCloudEditor_0;
19
	public static String WordCloudEditor_1;
20
	public static String WordCloudEditor_2;
21
	public static String WordCloudEditor_3;
22
	public static String WordCloudEditor_4;
23
	public static String WordCloudEditor_5;
24
	public static String WordCloudEditor_6;
25
	public static String WordCloudEditor_7;
26
	public static String WordCloudEditor_8;
27
	public static String WordCloudEditor_9;
28
	public static String WordCloudPreferencePage_0;
29
	public static String WordCloudPreferencePage_1;
30
	public static String WordCloudPreferencePage_2;
31
	public static String WordCloudPreferencePage_3;
32
	static {
33
		// initialize resource bundle
34
		NLS.initializeMessages(BUNDLE_NAME, ___Messages.class);
35
	}
36

  
37
	private ___Messages() {
38
	}
39
}
0 40

  
tmp/org.txm.wordcloud.rcp/src/___wordcloudrcp/ApplicationWorkbenchWindowAdvisor.java (revision 23)
1
package ___wordcloudrcp;
2

  
3
import org.eclipse.swt.graphics.Point;
4
import org.eclipse.ui.application.ActionBarAdvisor;
5
import org.eclipse.ui.application.IActionBarConfigurer;
6
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
7
import org.eclipse.ui.application.WorkbenchWindowAdvisor;
8

  
9
public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
10

  
11
    public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
12
        super(configurer);
13
    }
14

  
15
    public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
16
        return new ApplicationActionBarAdvisor(configurer);
17
    }
18
    
19
    public void preWindowOpen() {
20
        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
21
        configurer.setInitialSize(new Point(400, 300));
22
        configurer.setShowCoolBar(false);
23
        configurer.setShowStatusLine(false);
24
        configurer.setTitle("Hello RCP"); //$NON-NLS-1$
25
    }
26
}
0 27

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/preferences/WordCloudPreferencePage.java (revision 23)
1
package org.txm.wordcloud.rcp.preferences;
2

  
3
// Copyright © 2010-2013 ENS de Lyon.
4
// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
5
// Lyon 2, University of Franche-Comté, University of Nice
6
// Sophia Antipolis, University of Paris 3.
7
// 
8
// The TXM platform is free software: you can redistribute it
9
// and/or modify it under the terms of the GNU General Public
10
// License as published by the Free Software Foundation,
11
// either version 2 of the License, or (at your option) any
12
// later version.
13
// 
14
// The TXM platform is distributed in the hope that it will be
15
// useful, but WITHOUT ANY WARRANTY; without even the implied
16
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
17
// PURPOSE. See the GNU General Public License for more
18
// details.
19
// 
20
// You should have received a copy of the GNU General
21
// Public License along with the TXM platform. If not, see
22
// http://www.gnu.org/licenses.
23
// 
24
// 
25
// 
26
// $LastChangedDate:$
27
// $LastChangedRevision:$
28
// $LastChangedBy:$ 
29
//
30

  
31

  
32
import org.eclipse.jface.preference.BooleanFieldEditor;
33
import org.eclipse.jface.preference.IntegerFieldEditor;
34
import org.eclipse.ui.IWorkbench;
35
import org.txm.rcp.preferences.TXMPreferencePage;
36
import org.txm.rcp.preferences.TXMPreferenceStore;
37
import org.txm.wordcloud.core.preferences.WordCloudPreferences;
38
import org.txm.wordcloud.rcp.messages.Messages;
39

  
40
/**
41
 * @author mdecorde
42
 * @author sjacquot
43
 *
44
 */
45
public class WordCloudPreferencePage extends TXMPreferencePage {
46

  
47

  
48
	/**
49
	 * The Constant ID.
50
	 */
51
	public static final String ID = "org.txm.rcp.wordcloud.preferences.WordCloudPreferencePage"; //$NON-NLS-1$
52

  
53
	/**
54
	 * Instantiates a new Wordcloud preference page.
55
	 */
56
	public WordCloudPreferencePage() {
57
		super();
58
	}
59

  
60
	/**
61
	 * Creates the field editors. Field editors are abstractions of the common
62
	 * GUI blocks needed to manipulate various types of preferences. Each field
63
	 * editor knows how to save and restore itself.
64
	 */
65
	@Override
66
	public void createFieldEditors() {
67
		this.addField(new IntegerFieldEditor(WordCloudPreferences.MAX_WORDS, Messages.PreferencePage_Number_of_used_words, getFieldEditorParent()));
68
		this.addField(new IntegerFieldEditor(WordCloudPreferences.FMIN, Messages.PreferencePage_Minimal_frequency, getFieldEditorParent()));
69
		this.addField(new IntegerFieldEditor(WordCloudPreferences.ROT, Messages.PreferencePage_Percent_of_rotated_words, getFieldEditorParent()));
70
		this.addField(new BooleanFieldEditor(WordCloudPreferences.RANDOM_POSITION, Messages.PreferencePage_Random_word_positions, getFieldEditorParent()));
71
	}
72
	
73
	
74
	/**
75
	 * 
76
	 * @return
77
	 */
78
	public static TXMPreferenceStore getNewPreferenceStore()	{
79
		return new TXMPreferenceStore(WordCloudPreferences.PREFERENCES_NODE);
80
	}
81

  
82
	/*
83
	 * (non-Javadoc)
84
	 * 
85
	 * @see
86
	 * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
87
	 */
88
	@Override
89
	public void init(IWorkbench workbench) {
90
		setPreferenceStore(getNewPreferenceStore());
91
		//setTitle("WordCloud");
92
	}
93

  
94

  
95
}
0 96

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/adapters/AdapterFactory.java (revision 23)
1
// Copyright © 2010-2013 ENS de Lyon.
2
package org.txm.wordcloud.rcp.adapters;
3

  
4
import org.eclipse.jface.resource.ImageDescriptor;
5
import org.eclipse.ui.model.IWorkbenchAdapter;
6
import org.eclipse.ui.plugin.AbstractUIPlugin;
7
import org.osgi.framework.FrameworkUtil;
8
import org.txm.rcp.adapters.BaseAdapterFactory;
9
import org.txm.wordcloud.core.functions.WordCloud;
10

  
11
/**
12
 * A factory for creating Adapter objects.
13
 * 
14
 * @author mdecorde
15
 * @author sjacquot
16
 */
17
public class AdapterFactory extends BaseAdapterFactory {
18

  
19
	
20
	/**
21
	 * Gets the adapter.
22
	 *
23
	 * @param adaptableObject the adaptable object
24
	 * @param adapterType the adapter type
25
	 * @return the adapter
26
	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
27
	 */
28
	@Override
29
	public Object getAdapter(Object adaptableObject, Class adapterType) {
30
		
31
		if(adapterType == IWorkbenchAdapter.class)	{
32
			if(adaptableObject instanceof WordCloud)	{
33
				return new IWorkbenchAdapter() {
34
					@Override
35
					public Object[] getChildren(Object resultData) {
36
						return new Object[0];
37
					}
38
	
39
					@Override
40
					public ImageDescriptor getImageDescriptor(Object object) {
41
						return AbstractUIPlugin.imageDescriptorFromPlugin(FrameworkUtil.getBundle(AdapterFactory.class).getSymbolicName(), "platform:/plugin/org.txm.wordcloud.rcp/icons/functions/wordcloud.png"); //$NON-NLS-1$
42
					}
43
	
44
					@Override
45
					public String getLabel(Object resultData) {
46
						return ((WordCloud) resultData).getName();
47
					}
48
	
49
					@Override
50
					public Object getParent(Object resultData) {
51
						return ((WordCloud) resultData).getCorpus();
52
					}
53
				};
54
			}
55
		}
56
		return null;
57
	}
58

  
59

  
60
}
0 61

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/Messages.java (revision 23)
1
package org.txm.wordcloud.rcp.messages;
2

  
3
import org.eclipse.osgi.util.NLS;
4

  
5
public class Messages extends NLS {
6
	
7

  
8
	//private static final String BUNDLE_NAME = "org.txm.rcp.wordcloud.messages.messages"; //$NON-NLS-1$
9
	// FIXME: use the same properties file than the bundle	
10
	private static final String BUNDLE_NAME = "l10n.bundle"; //$NON-NLS-1$
11
	
12
	
13
	
14
	public static String EditorName;
15
	public static String EditorToolBar_vmin;
16
	public static String EditorToolBar_fmin;
17
	public static String EditorToolBar_Percent_of_rotated_labels;
18
	public static String EditorToolBar_Randomize_positions;
19
	public static String EditorToolBar_Draw;
20
	public static String Log_Wrong_input_object;
21
	public static String Log_WordCloud_ready;
22
	public static String WordCloudEditor_7;
23
	public static String WordCloudEditor_8;
24
	public static String WordCloudEditor_9;
25
	public static String PreferencePage_Number_of_used_words;
26
	public static String PreferencePage_Minimal_frequency;
27
	public static String PreferencePage_Percent_of_rotated_words;
28
	public static String PreferencePage_Random_word_positions;
29
	static {
30
		// initialize resource bundle
31
		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
32
	}
33

  
34
	private Messages() {
35
	}
36
}
0 37

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditor.java (revision 23)
1
package org.txm.wordcloud.rcp.editors;
2

  
3
import java.lang.reflect.InvocationTargetException;
4

  
5
import org.eclipse.core.runtime.IProgressMonitor;
6
import org.eclipse.core.runtime.IStatus;
7
import org.eclipse.core.runtime.Status;
8
import org.eclipse.core.runtime.jobs.Job;
9
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
10
import org.eclipse.jface.operation.IRunnableWithProgress;
11
import org.eclipse.swt.SWT;
12
import org.eclipse.swt.events.SelectionEvent;
13
import org.eclipse.swt.events.SelectionListener;
14
import org.eclipse.swt.widgets.Button;
15
import org.eclipse.swt.widgets.Composite;
16
import org.eclipse.swt.widgets.Display;
17
import org.eclipse.swt.widgets.Label;
18
import org.eclipse.swt.widgets.Spinner;
19
import org.eclipse.ui.IEditorInput;
20
import org.eclipse.ui.IEditorSite;
21
import org.eclipse.ui.PartInitException;
22
import org.eclipse.ui.part.EditorPart;
23
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
24
import org.txm.chartsengine.rcp.editors.ChartEditorInput;
25
import org.txm.chartsengine.rcp.editors.ChartEditorPart;
26
import org.txm.rcpapplication.views.CorporaView;
27
import org.txm.stat.engine.r.RWorkspaceException;
28
import org.txm.tbx.preferences.TXMPreferences;
29
import org.txm.utils.logger.Log;
30
import org.txm.wordcloud.core.functions.WordCloud;
31
import org.txm.wordcloud.core.preferences.WordCloudPreferences;
32
import org.txm.wordcloud.rcp.messages.Messages;
33

  
34
/**
35
 * Word cloud editor. 
36
 * @author mdecorde
37
 * @author sjacquot
38
 *
39
 */
40
public class WordCloudEditor extends ChartEditorPart {
41
	
42
	
43
	/**
44
	 * 
45
	 */
46
	public WordCloudEditor() {
47
	}
48

  
49
	
50
	
51
	/**
52
	 * 
53
	 * @param swtComponentsProvider
54
	 * @param chartEditorInput
55
	 */
56
	public WordCloudEditor(SWTChartsComponentsProvider swtComponentsProvider, ChartEditorInput chartEditorInput) {
57
		super(swtComponentsProvider, chartEditorInput);
58
	}
59
	
60
	
61
	@Override
62
	public void createPartControl(Composite parent) {
63
		super.createPartControl(parent);
64
		
65
		//Composite paramPanel = new Composite(parent, SWT.NONE);
66
		
67
//		FormData fdata = new FormData();
68
//		fdata.top = new FormAttachment(0);
69
//		fdata.left = new FormAttachment(0);
70
//		fdata.right = new FormAttachment(100);
71
//		this.getParametersComposite().setLayoutData(fdata);
72

  
73
//		FormData fdata = new FormData();
74
//		fdata.top = new FormAttachment(this.getParametersComposite());
75
//		fdata.left = new FormAttachment(0);
76
//		fdata.right = new FormAttachment(100);
77
//		fdata.bottom = new FormAttachment(100);
78

  
79
		// fill param Area
80
//		RowLayout layout = new RowLayout();
81
//		layout.wrap = true;
82
//		layout.center = true;
83
//		this.getParametersComposite().setLayout(layout);
84

  
85
		// max words
86
		new Label(this.getParametersGroup(), SWT.NONE).setText(Messages.EditorToolBar_vmin);
87
		final Spinner maxWordsSpinner = new Spinner(this.getParametersGroup(), SWT.BORDER);
88
		maxWordsSpinner.setMinimum(10);
89
		maxWordsSpinner.setIncrement(1);
90
		maxWordsSpinner.setMaximum(100000);
91
		maxWordsSpinner.setSelection(TXMPreferences.getInt(WordCloudPreferences.PREFERENCES_NODE, this.getResultData(), WordCloudPreferences.MAX_WORDS));
92
		
93
		// fmin
94
		new Label(this.getParametersGroup(), SWT.NONE).setText(Messages.EditorToolBar_fmin);
95
		final Spinner minFreqSpinner = new Spinner(this.getParametersGroup(), SWT.BORDER);
96
		minFreqSpinner.setMinimum(1);
97
		minFreqSpinner.setIncrement(1);
98
		minFreqSpinner.setMaximum(100000000);
99
		minFreqSpinner.setSelection(TXMPreferences.getInt(WordCloudPreferences.PREFERENCES_NODE, this.getResultData(), WordCloudPreferences.FMIN));
100
		
101
		// rotation percent
102
		new Label(this.getParametersGroup(), SWT.NONE).setText(Messages.EditorToolBar_Percent_of_rotated_labels);
103
		final Spinner rotPerSpinner = new Spinner(this.getParametersGroup(), SWT.BORDER);
104
		rotPerSpinner.setMinimum(0);
105
		rotPerSpinner.setIncrement(1);
106
		rotPerSpinner.setMaximum(100);
107
		rotPerSpinner.setSelection(TXMPreferences.getInt(WordCloudPreferences.PREFERENCES_NODE, this.getResultData(), WordCloudPreferences.ROT));
108
		
109
		// random positions
110
		final Button randomOrderButton = new Button(this.getParametersGroup(), SWT.CHECK);
111
		randomOrderButton.setText(Messages.EditorToolBar_Randomize_positions);
112
		randomOrderButton.setSelection(TXMPreferences.getBoolean(WordCloudPreferences.PREFERENCES_NODE, this.getResultData(), WordCloudPreferences.RANDOM_POSITION));
113

  
114
		
115
		// compute button
116
		Button okButton = new Button(this.getParametersGroup(), SWT.PUSH);
117
		okButton.setText(Messages.EditorToolBar_Draw);
118
		okButton.addSelectionListener(new SelectionListener() {
119
			@Override
120
			public void widgetSelected(SelectionEvent e) {
121
					
122
					// persistence
123
					TXMPreferences.putLocalInt(getResultData(), WordCloudPreferences.MAX_WORDS, maxWordsSpinner.getSelection());
124
					TXMPreferences.putLocalInt(getResultData(), WordCloudPreferences.FMIN, minFreqSpinner.getSelection());
125
					TXMPreferences.putLocalFloat(getResultData(), WordCloudPreferences.ROT, rotPerSpinner.getSelection());
126
					TXMPreferences.putLocalBoolean(getResultData(), WordCloudPreferences.RANDOM_POSITION, randomOrderButton.getSelection());
127
					
128

  
129
					compute(true);
130
			}
131
					
132
					
133
			
134
			
135
			@Override
136
			public void widgetDefaultSelected(SelectionEvent e) { }
137
		});
138

  
139
		
140
		this.compute(false);
141
		Log.info(Messages.Log_WordCloud_ready + this.getResultData());
142

  
143
	}
144

  
145
	
146
	/**
147
	 * Computes.
148
	 */
149
	public void compute(final boolean update) {
150

  
151
		Job job = new Job("Compute Word Cloud") {
152

  
153
		    @Override
154
		    protected IStatus run(IProgressMonitor monitor) {
155

  
156
		    	// creating
157
				monitor.beginTask("Computing", IProgressMonitor.UNKNOWN);
158
		    	
159
				if(update)	{
160
					updateChart();
161
				}
162
				else	{
163
					createChart();
164
				}
165

  
166
				// cancel
167
				if(monitor.isCanceled())	{
168
					close();
169
					return Status.CANCEL_STATUS;
170
				}
171
				
172
				// loading
173
				monitor.setTaskName("Loading");
174
				loadChart();
175
				
176
				
177
				setPartName(((WordCloud)getResultData()).getCorpus().getName() + " - " + ((WordCloud)getResultData()).getName());
178
				
179
				
180
				// FIXME: persistence test, saving local preferences/parameters to file
181
				//WordCloudPreferences.flush((WordCloud)getResultData());
182

  
183
				// refreshes the view to update the node label
184
				getSite().getShell().getDisplay().syncExec(new Runnable() {
185
					@Override
186
					public void run() {
187
						CorporaView.refresh();
188
					}
189
				});
190

  
191
				
192
				// done
193
				monitor.done(); 
194
				return Status.OK_STATUS;
195
	    }
196

  
197
		};
198
		job.setUser(true); // show progress bar, without that the progress is located to bottom right
199
		job.schedule();
200
	}
201
	
202

  
203
	/* (non-Javadoc)
204
	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
205
	 */
206
	@Override
207
	public void doSave(IProgressMonitor monitor) { }
208

  
209
	/* (non-Javadoc)
210
	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
211
	 */
212
	@Override
213
	public void doSaveAs() { }
214

  
215
	/* (non-Javadoc)
216
	 * @see org.eclipse.ui.part.EditorPart#isDirty()
217
	 */
218
	@Override
219
	public boolean isDirty() {
220
		// TODO Auto-generated method stub
221
		return false;
222
	}
223

  
224
	/* (non-Javadoc)
225
	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
226
	 */
227
	@Override
228
	public boolean isSaveAsAllowed() {
229
		// TODO Auto-generated method stub
230
		return false;
231
	}
232

  
233
	
234

  
235
}
0 236

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditorInput.java (revision 23)
1
// Copyright © 2010-2013 ENS de Lyon.
2
// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
3
// Lyon 2, University of Franche-Comté, University of Nice
4
// Sophia Antipolis, University of Paris 3.
5
// 
6
// The TXM platform is free software: you can redistribute it
7
// and/or modify it under the terms of the GNU General Public
8
// License as published by the Free Software Foundation,
9
// either version 2 of the License, or (at your option) any
10
// later version.
11
// 
12
// The TXM platform is distributed in the hope that it will be
13
// useful, but WITHOUT ANY WARRANTY; without even the implied
14
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15
// PURPOSE. See the GNU General Public License for more
16
// details.
17
// 
18
// You should have received a copy of the GNU General
19
// Public License along with the TXM platform. If not, see
20
// http://www.gnu.org/licenses.
21
// 
22
// 
23
// 
24
// $LastChangedDate:$
25
// $LastChangedRevision:$
26
// $LastChangedBy:$ 
27
//
28
package org.txm.wordcloud.rcp.editors;
29

  
30
import org.eclipse.jface.resource.ImageDescriptor;
31
import org.eclipse.ui.IPersistableElement;
32
import org.eclipse.ui.plugin.AbstractUIPlugin;
33
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
34
import org.txm.chartsengine.rcp.editors.ChartEditorInput;
35
import org.txm.rcpapplication.Application;
36
import org.txm.rcpapplication.IImageKeys;
37
import org.txm.wordcloud.core.functions.WordCloud;
38
import org.txm.wordcloud.core.preferences.WordCloudPreferences;
39
import org.txm.wordcloud.rcp.messages.Messages;
40

  
41

  
42
/**
43
 *
44
 *
45
 * @author sloiseau
46
 */
47
public class WordCloudEditorInput extends ChartEditorInput {
48
	
49
		
50
	/**
51
	 * 
52
	 * @param src
53
	 * @param wc
54
	 */
55
	public WordCloudEditorInput(Object src, WordCloud wc) {
56
		super(wc, WordCloudPreferences.PREFERENCES_NODE);
57
	}
58
	
59
	/**
60
	 * Exists.
61
	 *
62
	 * @return true, if successful
63
	 * @see org.eclipse.ui.IEditorInput#exists()
64
	 */
65
	@Override
66
	public boolean exists() {
67
		return false;
68
	}
69

  
70
	/**
71
	 * Gets the image descriptor.
72
	 *
73
	 * @return the image descriptor
74
	 * @see org.eclipse.ui.IEditorInput#getImageDescriptor()
75
	 */
76
	@Override
77
	public ImageDescriptor getImageDescriptor() {
78
		return AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKeys.ACTION_WORDCLOUD);
79
	}
80

  
81
	/**
82
	 * Gets the name.
83
	 *
84
	 * @return the name
85
	 * @see org.eclipse.ui.IEditorInput#getName()
86
	 */
87
	@Override
88
	public String getName() {
89
		return Messages.EditorName;
90
	}
91

  
92
	/**
93
	 * Gets the persistable.
94
	 *
95
	 * @return the persistable
96
	 * @see org.eclipse.ui.IEditorInput#getPersistable()
97
	 */
98
	@Override
99
	public IPersistableElement getPersistable() {
100
		return null;
101
	}
102

  
103
	/**
104
	 * Gets the tool tip text.
105
	 *
106
	 * @return the tool tip text
107
	 * @see org.eclipse.ui.IEditorInput#getToolTipText()
108
	 */
109
	@Override
110
	public String getToolTipText() {
111
		return getName();
112
	}
113

  
114
	/**
115
	 * Gets the adapter.
116
	 *
117
	 * @param arg0 the arg0
118
	 * @return the adapter
119
	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
120
	 */
121
	@Override
122
	@SuppressWarnings("unchecked") //$NON-NLS-1$
123
	public Object getAdapter(Class arg0) {
124
		return null;
125
	}
126

  
127

  
128
}
129

  
0 130

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/handlers/ComputeWordCloud.java (revision 23)
1
// Copyright © 2010-2013 ENS de Lyon.
2
// Copyright © 2007-2010 ENS de Lyon, CNRS, INRP, University of
3
// Lyon 2, University of Franche-Comté, University of Nice
4
// Sophia Antipolis, University of Paris 3.
5
// 
6
// The TXM platform is free software: you can redistribute it
7
// and/or modify it under the terms of the GNU General Public
8
// License as published by the Free Software Foundation,
9
// either version 2 of the License, or (at your option) any
10
// later version.
11
// 
12
// The TXM platform is distributed in the hope that it will be
13
// useful, but WITHOUT ANY WARRANTY; without even the implied
14
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
15
// PURPOSE. See the GNU General Public License for more
16
// details.
17
// 
18
// You should have received a copy of the GNU General
19
// Public License along with the TXM platform. If not, see
20
// http://www.gnu.org/licenses.
21
// 
22
// 
23
// 
24
// $LastChangedDate:$
25
// $LastChangedRevision:$
26
// $LastChangedBy:$ 
27
//
28
package org.txm.wordcloud.rcp.handlers;
29

  
30
import java.io.IOException;
31
import java.lang.reflect.InvocationTargetException;
32

  
33
import org.eclipse.core.commands.AbstractHandler;
34
import org.eclipse.core.commands.ExecutionEvent;
35
import org.eclipse.core.commands.ExecutionException;
36
import org.eclipse.core.runtime.IProgressMonitor;
37
import org.eclipse.core.runtime.IStatus;
38
import org.eclipse.core.runtime.Status;
39
import org.eclipse.core.runtime.jobs.Job;
40
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
41
import org.eclipse.jface.operation.IRunnableWithProgress;
42
import org.eclipse.jface.viewers.IStructuredSelection;
43
import org.eclipse.swt.widgets.Display;
44
import org.eclipse.ui.handlers.HandlerUtil;
45
import org.txm.Toolbox;
46
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
47
import org.txm.functions.index.Index;
48
import org.txm.rcpapplication.Messages;
49
import org.txm.rcpapplication.StatusLine;
50
import org.txm.rcpapplication.commands.OpenBrowser;
51
import org.txm.rcpapplication.views.CorporaView;
52
import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
53
import org.txm.searchengine.cqp.corpus.Corpus;
54
import org.txm.searchengine.cqp.corpus.Lexicon;
55
import org.txm.searchengine.cqp.serverException.CqiServerError;
56
import org.txm.tbx.preferences.TXMPreferences;
57
import org.txm.utils.logger.Log;
58
import org.txm.wordcloud.core.functions.WordCloud;
59
import org.txm.wordcloud.core.messages.TBXWordCloudMessages;
60
import org.txm.wordcloud.core.preferences.WordCloudPreferences;
61
import org.txm.wordcloud.rcp.editors.WordCloudEditorInput;
62

  
63
// TODO: Auto-generated Javadoc
64
/**
65
 * open the WordCloud Editor 
66
 * @author mdecorde
67
 * @author sjacquot
68
 */
69
public class ComputeWordCloud extends AbstractHandler {
70
	
71

  
72
	// FIXME: should be put in an Activator? or better in an extension point loaded by the corpora view?
73
	// adds a double click listener to the Corpus View
74
	static	{
75
		CorporaView.addDoubleClickListener(WordCloud.class, "org.txm.rcp.handlers.ComputeWordCloud"); //$NON-NLS-1$
76
	}
77
	
78
	
79

  
80

  
81
	/* (non-Javadoc)
82
	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
83
	 */
84
	@Override
85
	public Object execute(final ExecutionEvent event) throws ExecutionException {
86
		if (!Toolbox.isStatEngineInitialized()) {
87
			System.out.println(TBXWordCloudMessages.Log_Stats_Engine_not_ready);
88
			return null;
89
		};
90

  
91
		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
92
		Object s = selection.getFirstElement();
93
		
94
		boolean newResult = true;
95
		Corpus corpus = null;
96
		WordCloud wordCloud = null;
97
		
98
		// opens existing result
99
		if (s instanceof WordCloud) {
100
			wordCloud = (WordCloud) s;
101
			corpus = wordCloud.getCorpus();
102
			newResult = false;
103
		}
104
		else	{
105
				// Inits R packages
106
				if(!WordCloud.initPackages())	{
107
					OpenBrowser.openfile("https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud"); //$NON-NLS-1$
108
					//return Status.CANCEL_STATUS;
109
				}
110

  
111
				// creates new result
112
				if (s instanceof Corpus) {
113
					try {
114
						corpus = (Corpus)s;
115
						wordCloud = new WordCloud(corpus);
116
					}
117
					catch (CqiClientException e) {
118
						Log.printStackTrace(e);
119
						//return null;
120
					}
121
					catch(IOException e) {
122
						// TODO Auto-generated catch block
123
						e.printStackTrace();
124
					}
125
					catch(CqiServerError e) {
126
						// TODO Auto-generated catch block
127
						e.printStackTrace();
128
					}
129
				}
130
				// creates new result
131
				else if (s instanceof Index) {
132
					wordCloud = new WordCloud((Index)s);
133
					corpus = ((Index)s).getCorpus();
134
				}
135
				// creates new result
136
				else if (s instanceof Lexicon) {
137
					wordCloud = new WordCloud((Lexicon)s);
138
					corpus = ((Lexicon)s).getCorpus();
139
				}
140
			}
141
		
142
			if(wordCloud != null)	{
143
				StatusLine.setMessage(TBXWordCloudMessages.StatusBar_Opening_result);
144

  
145
				WordCloudEditorInput editorInput = new WordCloudEditorInput(s, wordCloud);
146
				SWTChartsComponentsProvider.getCurrent().openEditor(editorInput);
147
				
148
				if(newResult && corpus != null)	{
149
					CorporaView.storeResult(corpus, wordCloud);
150
				}
151
			}
152
							
153
		return null;
154
	}
155

  
156
//	public static void openEditor(Object obj) {
157
//		if (obj instanceof Index || 
158
//				obj instanceof Lexicon || 
159
//				//obj instanceof QueryIndex || 
160
//				obj instanceof Corpus) {
161
//			IWorkbenchPage page = TXMWindows.getActiveWindow().getActivePage();
162
//			WordCloudEditorInput editorInput = new WordCloudEditorInput(Application.swtComponentProvider2, obj, null);
163
//			try {
164
//				StatusLine.setMessage(TBXWordCloudMessages.StatusBar_Opening_result);
165
//				WordCloudEditor wceditor = (WordCloudEditor) page.openEditor(editorInput,WordCloudEditor.ID); //$NON-NLS-1$
166
//				//voceditor.initializeFields();
167
//			} catch (Exception e) {
168
//				Log.printStackTrace(e);
169
//			}
170
//		}
171
//	}
172
}
0 173

  
tmp/org.txm.wordcloud.rcp/build.properties (revision 23)
1
source.. = src/
2
output.. = bin/
3
bin.includes = META-INF/,\
4
               .,\
5
               plugin.xml
0 6

  
tmp/org.txm.wordcloud.rcp/OSGI-INF/l10n/bundle_fr.properties (revision 23)
1
Bundle-Name = WordCloudRCP
2
command.label = Nuage de mots
3
command.name = Nuage de mots
4
editor.name = Nuage de mots
5
EditorToolBar_Draw=Calculer
6
EditorToolBar_fmin=Fmin : 
7
EditorToolBar_Percent_of_rotated_labels=% de labels verticaux : 
8
EditorToolBar_Randomize_positions=Position al?atoire
9
EditorToolBar_vmin=Vmax : 
10
Log_WordCloud_ready=WordCloud est pr?t : 
11
Log_Wrong_input_object=Object non-compatible avec la fonctionnalit? Nuage de mots
12
page.name = Nuage de mots
13
perspective.name = RCP Perspective
14
PreferencePage_Minimal_frequency=Filtre en fr?quence minimal des mots ? utiliser frequency
15
PreferencePage_Number_of_used_words=Filtre en nombre de mot ? utiliser
16
PreferencePage_Percent_of_rotated_words=Pourcentage de mot verticaux
17
PreferencePage_Random_word_positions=Position al?atoire des mots
18
WordCloudEditor_7=Dessin en cours...
19
WordCloudEditor_8=Sauvegarde dans le fichier {0} 
20
WordCloudEditor_9=Rafra?chissement 
21
EditorName=Nuage de mots
0 22

  
tmp/org.txm.wordcloud.rcp/OSGI-INF/l10n/bundle.properties (revision 23)
1
Bundle-Name = WordCloudRCP
2
command.label = WordCloud
3
command.name = WordCloud
4
editor.name = WordCloud
5
EditorToolBar_Draw=Compute
6
EditorToolBar_fmin=Fmin: 
7
EditorToolBar_Percent_of_rotated_labels=% of rotated labels: 
8
EditorToolBar_Randomize_positions=Randomize positions
9
EditorToolBar_vmin=Vmax: 
10
Log_WordCloud_ready=WordCloud ready: 
11
Log_Wrong_input_object=Wrong WordCloud input object
12
page.name = WordCloud
13
perspective.name = RCP Perspective
14
PreferencePage_Minimal_frequency=Minimal frequency for used words
15
PreferencePage_Number_of_used_words=Number of used words
16
PreferencePage_Percent_of_rotated_words=Percent of rotated words
17
PreferencePage_Random_word_positions=Random word positions
18
WordCloudEditor_7=WordClouding...
19
WordCloudEditor_8=Drawing in {0}
20
WordCloudEditor_9=WordCloud refreshed
21
EditorName=WordCloud
0 22

  
tmp/org.txm.wordcloud.rcp/icons/alt_launcher.xpm (revision 23)
1
/* XPM */
2
static char * icon48_xpm[] = {
3
"48 48 256 2",
4
"  	c #4B4B3B3B9090",
5
". 	c #0D0D0E0E5454",
6
"X 	c #11110E0E5B5B",
7
"o 	c #17170F0F6363",
8
"O 	c #1D1D13136969",
9
"+ 	c #212114146C6C",
10
"@ 	c #252514147171",
11
"# 	c #282811116C6C",
12
"$ 	c #26260D0D6363",
13
"% 	c #22220B0B5E5E",
14
"& 	c #1C1C0B0B5A5A",
15
"* 	c #1C1C0B0B5252",
16
"= 	c #1B1B05055353",
17
"- 	c #161606064D4D",
18
"; 	c #161605054949",
19
": 	c #111104044848",
20
"> 	c #131304044545",
21
", 	c #131305054242",
22
"< 	c #141410105E5E",
23
"1 	c #2C2C15157373",
24
"2 	c #2B2B1B1B7575",
25
"3 	c #343416167272",
26
"4 	c #313113136E6E",
27
"5 	c #222209095757",
28
"6 	c #1B1B06064D4D",
29
"7 	c #15150B0B4242",
30
"8 	c #13130C0C5555",
31
"9 	c #2E2E1B1B7878",
32
"0 	c #33331F1F7C7C",
33
"q 	c #343418187878",
34
"w 	c #3B3B1C1C7575",
35
"e 	c #2E2E10106767",
36
"r 	c #1B1B07074747",
37
"t 	c #18180B0B4646",
38
"y 	c #151513136262",
39
"u 	c #1A1A15156464",
40
"i 	c #34341F1F7777",
41
"p 	c #40401E1E8080",
42
"a 	c #42421B1B7A7A",
43
"s 	c #3B3B15157474",
44
"d 	c #2B2B0B0B5B5B",
45
"f 	c #222207075252",
46
"g 	c #373727277A7A",
47
"h 	c #474724248484",
48
"j 	c #393915156E6E",
49
"k 	c #373711116A6A",
50
"l 	c #343413136363",
51
"z 	c #232319196E6E",
52
"x 	c #292919197070",
53
"c 	c #3C3C2C2C8282",
54
"v 	c #444431318585",
55
"b 	c #494934348A8A",
56
"n 	c #505026268A8A",
57
"m 	c #3D3D1B1B6E6E",
58
"M 	c #31310E0E5C5C",
59
"N 	c #2B2B0D0D5353",
60
"B 	c #222207074A4A",
61
"V 	c #52523C3C9292",
62
"C 	c #58583C3C9494",
63
"Z 	c #5D5D44449797",
64
"A 	c #5C5C2E2E9292",
65
"S 	c #676733339595",
66
"D 	c #424228287575",
67
"F 	c #29290A0A4F4F",
68
"G 	c #6C6C4A4A9E9E",
69
"H 	c #72725454A7A7",
70
"J 	c #8C8C6D6DB2B2",
71
"K 	c #343424246E6E",
72
"L 	c #3A3A23236A6A",
73
"P 	c #3A3A1C1C6767",
74
"I 	c #24240A0A4B4B",
75
"U 	c #151518186161",
76
"Y 	c #76766F6FA5A5",
77
"T 	c #ADAD9191CCCC",
78
"R 	c #98988989D3D3",
79
"E 	c #45453B3B8686",
80
"W 	c #3C3C35357979",
81
"Q 	c #363631317575",
82
"! 	c #32322D2D6B6B",
83
"~ 	c #323229296363",
84
"^ 	c #30301F1F6262",
85
"/ 	c #323218185E5E",
86
"( 	c #272707074B4B",
87
") 	c #202028286C6C",
88
"_ 	c #1E1E1D1D6868",
89
"` 	c #9A9A8282BBBB",
90
"' 	c #C8C8B3B3D3D3",
91
"] 	c #B3B3AFAFE7E7",
92
"[ 	c #84847272C6C6",
93
"{ 	c #58585757A3A3",
94
"} 	c #3F3F3C3C8A8A",
95
"| 	c #3B3B3A3A8484",
96
" .	c #414139397D7D",
97
"..	c #3D3D39397A7A",
98
"X.	c #37372E2E6E6E",
99
"o.	c #2C2C21215A5A",
100
"O.	c #2E2E1B1B5B5B",
101
"+.	c #F5F5EFEFF5F5",
102
"@.	c #656566669A9A",
103
"#.	c #47474B4B8E8E",
104
"$.	c #3C3C44447B7B",
105
"%.	c #444442428080",
106
"&.	c #45453E3E8181",
107
"*.	c #40403C3C8181",
108
"=.	c #3D3D33337474",
109
"-.	c #3B3B30306E6E",
110
";.	c #38382D2D6969",
111
":.	c #303026265D5D",
112
">.	c #2C2C15155A5A",
113
",.	c #1F1F1C1C7070",
114
"<.	c #25251E1E7171",
115
"1.	c #59595C5C9191",
116
"2.	c #4D4D53538989",
117
"3.	c #4C4C49498484",
118
"4.	c #484845458585",
119
"5.	c #494941418585",
120
"6.	c #494940408181",
121
"7.	c #2F2F1C1C5353",
122
"8.	c #2B2B28287676",
123
"9.	c #323231317F7F",
124
"0.	c #545452528B8B",
125
"q.	c #51514E4E8989",
126
"w.	c #4E4E4B4B8C8C",
127
"e.	c #4C4C47478686",
128
"r.	c #46463D3D7E7E",
129
"t.	c #434336367A7A",
130
"y.	c #2B2B13135555",
131
"u.	c #47473D3D8D8D",
132
"i.	c #575757578E8E",
133
"p.	c #48483E3E7F7F",
134
"a.	c #46463A3A7D7D",
135
"s.	c #424235357575",
136
"d.	c #404034347171",
137
"f.	c #BFBFCBCBFAFA",
138
"g.	c #B8B8A8A8DDDD",
139
"h.	c #5E5E60609292",
140
"j.	c #565655558C8C",
141
"k.	c #4B4B44448282",
142
"l.	c #454539397B7B",
143
"z.	c #434338387878",
144
"x.	c #3F3F32326D6D",
145
"c.	c #3D3D30306969",
146
"v.	c #3A3A2E2E6363",
147
"b.	c #36362A2A5C5C",
148
"n.	c #343424245555",
149
"m.	c #30301E1E4D4D",
150
"M.	c #49493C3C8282",
151
"N.	c #5E5E4F4F8C8C",
152
"B.	c #56563B3B8B8B",
153
"V.	c #545407078585",
154
"C.	c #424234347272",
155
"Z.	c #9797A4A4F7F7",
156
"A.	c #444436367676",
157
"S.	c #7D7D7979D5D5",
158
"D.	c #464640408A8A",
159
"F.	c #44444B4B8282",
160
"G.	c #414107077777",
161
"H.	c #71716161C1C1",
162
"J.	c #303039397979",
163
"K.	c #8E8E8E8EE6E6",
164
"L.	c #404033338B8B",
165
"P.	c #4A4A45458C8C",
166
"I.	c #46463A3A8080",
167
"U.	c #363629295454",
168
"Y.	c #303022224848",
169
"T.	c #424237377575",
170
"R.	c #2E2E1D1D6363",
171
"E.	c #79798383EAEA",
172
"W.	c #74747B7BE4E4",
173
"Q.	c #6D6D7676D6D6",
174
"!.	c #6A6A7171CECE",
175
"~.	c #66666969C6C6",
176
"^.	c #62626565BCBC",
177
"/.	c #5F5F6060B5B5",
178
"(.	c #5B5B5B5BACAC",
179
").	c #535353539898",
180
"_.	c #4F4F4F4FA4A4",
181
"`.	c #54544D4DA4A4",
182
"'.	c #323204046B6B",
183
"].	c #303035357979",
184
"[.	c #313122224343",
185
"{.	c #5A5A5B5BB7B7",
186
"}.	c #484846468080",
187
"|.	c #454541417575",
188
" X	c #4B4B31318282",
189
".X	c #47473C3C8484",
190
"XX	c #3E3E35356E6E",
191
"oX	c #2F2F26264040",
192
"OX	c #2B2B23233A3A",
193
"+X	c #262619195C5C",
194
"@X	c #252515155A5A",
195
"#X	c #55555151B3B3",
196
"$X	c #3C3C2D2D5D5D",
197
"%X	c #39392F2F5656",
198
"&X	c #37372D2D5050",
199
"*X	c #25251F1F3030",
200
"=X	c #24241D1D4343",
201
"-X	c #202013135656",
202
";X	c #41413B3B6C6C",
203
":X	c #444442429696",
204
">X	c #212100005E5E",
205
",X	c #444436367272",
206
"<X	c #444436366F6F",
207
"1X	c #424236366868",
208
"2X	c #3F3F34346161",
209
"3X	c #3C3C32325A5A",
210
"4X	c #34342A2A4A4A",
211
"5X	c #21211B1B2121",
212
"6X	c #22221C1C6363",
213
"7X	c #2D2D01015E5E",
214
"8X	c #20201B1B2525",
215
"9X	c #49492F2F7B7B",
216
"0X	c #434334346C6C",
217
"qX	c #323229294545",
218
"wX	c #1C1C10104F4F",
219
"eX	c #222217176363",
220
"rX	c #37371E1E6B6B",
221
"tX	c #424232326E6E",
222
"yX	c #444433336969",
223
"uX	c #424233336565",
224
"iX	c #1E1E1A1A1E1E",
225
"pX	c #161601014C4C",
226
"aX	c #1C1C11115454",
227
"sX	c #252503035B5B",
228
"dX	c #414131316A6A",
229
"fX	c #22221F1F7878",
230
"gX	c #272724246767",
231
"hX	c #1D1D16165E5E",
232
"jX	c #131305055151",
233
"kX	c #40402F2F6464",
234
"lX	c #111107074E4E",
235
"zX	c #0C0C05054B4B",
236
"xX	c #22221E1E5757",
237
"cX	c #1A1A0D0D4D4D",
238
"vX	c #16160B0B4D4D",
239
"bX	c #060604044747",
240
"nX	c #040403034343",
241
"mX	c #3B3B27276565",
242
"MX	c #0E0E03034141",
243
"NX	c #111106064A4A",
244
"BX	c #0E0E04044646",
245
"VX	c #111105053B3B",
246
"CX	c #0D0D01013A3A",
247
"ZX	c #030305053F3F",
248
"AX	c #0F0F0F0F4C4C",
249
"SX	c #020207073B3B",
250
"DX	c #0D0D03034646",
251
"FX	c #0B0B02023F3F",
252
"GX	c #0D0D02023434",
253
"HX	c #0A0A0E0E4444",
254
"JX	c #161614145252",
255
"KX	c #0B0B04044646",
256
"LX	c #0A0A03034444",
257
"PX	c #1D1D21215757",
258
"IX	c #090910104040",
259
"UX	c #18181E1E5353",
260
"                                                                                                ",
261
"  . . . . X X o o o o O + + @ @ @ @ @ @ @ # # # # # # $ $ % % & & & & * = - - - ; : > > , , ,   ",
262
"  . . X X < < o o O O + @ 1 2 2 1 1 1 1 1 1 1 1 3 4 # # $ $ $ % % % 5 = = 6 6 - ; ; > > , , 7   ",
263
"  . 8 < < < o O O + @ @ 2 9 9 0 0 q q q q q q q w 3 4 4 e e $ $ $ $ % 5 = = 6 6 6 ; ; > > r t   ",
264
"  . X < y u O O + @ 1 2 i 0 0 p p p p p p p a a p a s 3 4 4 e e e e d 5 5 f f 6 6 6 ; ; r r t   ",
265
"  X < y u O + + @ 2 9 0 g p p h h h h h h h p h h a a s s j k k j l d d 5 5 f f 6 6 r r r r r   ",
266
"  X < y O z x x 9 0 g c v b n n n n n n n n n n n h a a s s j j m l M d d N f f B B B B r r r   ",
267
"  < y u + z 2 0 c c b V C Z C C A A A A A S S S n h D w w m m m m k l M d d N f F F F B r r r   ",
268
"  < y O z z 9 c b V Z G H H H G S G G J J H V v c g g K K K K L P l l l M M N N N N I B B r r   ",
269
"  U u + z x i v C H Y J J J J H J T R H V E W W Q Q Q Q ! ! ! ~ ^ ^ / / M M M M M N ( B B r r   ",
270
"  ) _ z x 9 g b Z Y ` ' ' ' T T ] [ { } |  .........W W Q Q X.! ~ ~ o.O./ / / / N F ( B B B r   ",
271
"  ) ) z x i c V G J ' +.+.+.+.] [ @.#.$.%.%.%.&.*. . .....W =.-.X.;.~ :.o.O.^ >.N F ( B B B B   ",
272
"  ) ,.<.2 g v C H J ' +.+.+.+.T Y 1.2.3.4.4.4.5.6.&.&. . ...W =.=.-.;.~ :.o.7.>.N F F ( B I I   ",
273
"  ) ,.<.8.9.b C H J T +.+.+.' J @.1.0.q.q.w.e.4.5.6.&.r. . .t.W =.=.-.;.~ :.o.7.y.N F ( ( I I   ",
274
"  8.8.8.9.| u.C G J T +.+.' ` Y @.1.i.0.q.q.e.e.5.6.p.r.a. .t.t.s.d.d.-.;.~ :.7.7.y.F F ( I I   ",
275
"  9.c c c v b A S H ' f.g.` Y @.h.1.i.j.0.q.q.e.k.6.p.r.a.l.t.z.s.s.d.x.c.v.b.n.m.7.N F F F I   ",
276
"  <.g M.N.B.B.n V.J f.R J @.h.h.1.i.i.j.j.0.q.3.k.6.p.r.a.l.l.z.s.C.d.x.x.c.v.b.n.m.y.N F F F   ",
277
"  + x i v B.Z Z G g.Z.[ @.2.i.i.j.j.j.j.j.0.q.3.k.6.p.p.a.l.l.A.s.C.C.d.x.c.v.b.n.m.7.y.N N y.  ",
278
"  O # 3 w p n Z ` f.S.H D.F.q.0.0.0.0.j.0.q.q.3.k.6.p.r.a.a.l.A.s.s.C.d.x.x.c.v.b.n.m.y.y.y.y.  ",
279
"  O # 4 s a G.V.T Z.H.V J.%.e.w.q.0.0.0.0.q.q.e.k.6.p.r.a.a.l.z.A.s.C.d.d.x.c.v.b.n.m.7.>.y.y.  ",
280
"  O # 4 s w G.A f.K.H L...4.P.w.w.w.q.q.q.q.e.e.5.6.M.I.I.a.a.l.z.A.s.d.d.x.c.v.v.U.Y.7.O.>.y.  ",
281
"  $ # 4 3 s G.G f.S.Z 9.*.D.P.P.w.w.w.w.w.e.e.5.5.M.M.I.I.a.a.l.z.T.s.d.d.x.x.c.v.U.Y.m.R.>.>.  ",
282
"  E.E.W.W.W.W.E.Z.E.W.Q.Q.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!.!.~.~.~.~.~.~.^.^.^.^.^./././.(.{ { )._.`._.  ",
283
"  + # 3 w s '.` f.H.V ].*.D.P.P.P.P.P.P.P.5.5.5.M.M.M.I.I.a.l.z.z.T.T.s.d.d.x.c.v.U.Y.[.^ O.>.  ",
284
"  ~.~.~.~.~.~.K.Z.S.~.{.^.^.^.^.^.^.^.^././././././.(.(.(.(.(.(.{ { { { { ).).).w.w.}.|.P.u.}   ",
285
"   .I.6. X X XT f.H.b ].*.E D.D.D.D.5.5..X.XM.M.I.I.a.a.l.l.z.z.T.T.T.d.XXx.c.v.b.U.oXOXR.+X@X  ",
286
"  E.E.E.W.W.W.K.Z.E.W.Q.Q.Q.Q.Q.Q.Q.Q.!.!.!.!.!.!.~.~.~.~.~.~.^.^.^.^.^./././.(.{ { ).).#X_._.  ",
287
"  & % $ e '.= H f.H.b 8.W *.E E E .X.X.XI.I.I.I.a.a.l.l.z.z.T.T.T.C.XXXXc.v.$X%X&XY.*X=X2 @X-X  ",
288
"  {.{.{.{.{.#X~.Z.W.~.{.{./././././././././.(.(.(.(.(.(.(.{ { { { { { ).).).w.w.3.}.;X%.:X} }   ",
289
"  & & % $ e >XV.f.S.C K X.W t. . .l.l.t.t.t.t.A.A.A.,X,X,X,X,X<X;X1X1X2X3X%X&X4XoX*X5Xo.6X-X-X  ",
290
"  & & % $ $ >X7X` Z.Z D ! =.=.s.t.t.t.A.A.s.A.,X,X,X,X<X<X<X<X;X1X2X2X3X%X&X4XoXOX8X5X<.@X-X-X  ",
291
"  8 & & $ e K 9XJ f.^. XK X.=.=.s.s.s.s.s.C.C.C.C.<X0X0X0X1X1X1X2X2X3X%X&X4XqXOX*X8X=X<.-X-XwX  ",
292
"  8 & eXK k.@.M. Xg.E.B.rX~ -.d.d.C.C.C.C.C.tX0X0X0XyXyX1X1XuX2X2X3X%X&X4XqXoXOX8XiX6XeX-X-XwX  ",
293
"  6XQ h.Y N.K e pXB.f./.9Xo.;.-.x.d.tXtXtXtXtX0X0XyXyXyXuXuX2X2X3X%X&X4XqXoXOX*XiX=X_ aX-XaXwX  ",
294
"  Y Y  .R.@X% sX= 7XT Z.V P :.;.c.x.x.x.tXdXdXdXyXyXuXuX2X2X3X3X%X&X4XqXoXOX*X8X*XfXaXaXaXwXwX  ",
295
"  gXhX& * & 5 5 sXjXa ] S.9X/ ~ v.c.dXdXdXdXdXuXuXuXkX2X2X3X%X%X&X4XqXoXOX*X8XiX<.hXwXwXaXwXwX  ",
296
"  8 lXlXjX= * 5 5 = zX9X] H.D 7.b.v.v.kXc.kXkXkXkXkX2X$X3X%X&X&X4XqXoXOX*X8XiXxXhXwXcXcXwXwXwX  ",
297
"  zXzXlXlXjX= = f f sXD Y ] ~.D 7.n.b.v.v.kXkXkXkX$X$X%X%X&X4XqXoXoXOX*X8X5XgXu cXvXvXcXcXwXwX  ",
298
"  bXbXzXlXlX- = * @XX.h.e D T S.D n.m.b.$X$X$X$X$X%X%X&X&X4XqXoXOX*X8X8X*X<.hXvX; ; vXvXvXcXwX  ",
299
"  nXbXzXzXlXlX- -XX.Y R.pXpXP J K.Z mXm.n.U.U.U.U.U.4X4XY.oXOX*X8X8X8X=X,.aXvX; > > > t t t cX  ",
300
"  nXbXbXzXzXlXaXXXY +Xf = f = 7XtXR R   mXn.Y.[.[.[.[.OX*X*X8X5X*X=X,.u vXvX; > > MXMX, 7 t t   ",
301
"  nXnXnXbXzXvX-.Y +XcX6 6 = = = d L B.G H `.X.:.7.m.=X=X=X=X=X6X,.u cXvXNX: BX> MXVXCXVX7 7 7   ",
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff