Revision 128

tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/handlers/ComputeWordCloud.java (revision 128)
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

  
32
import org.eclipse.core.commands.AbstractHandler;
33
import org.eclipse.core.commands.ExecutionEvent;
34
import org.eclipse.core.commands.ExecutionException;
35
import org.eclipse.jface.viewers.IStructuredSelection;
36
import org.eclipse.ui.handlers.HandlerUtil;
37
import org.txm.Toolbox;
38
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
39
import org.txm.functions.index.Index;
40
import org.txm.rcpapplication.StatusLine;
41
import org.txm.rcpapplication.commands.OpenBrowser;
42
import org.txm.rcpapplication.views.CorporaView;
43
import org.txm.searchengine.cqp.clientExceptions.CqiClientException;
44
import org.txm.searchengine.cqp.corpus.Corpus;
45
import org.txm.searchengine.cqp.corpus.Lexicon;
46
import org.txm.searchengine.cqp.serverException.CqiServerError;
47
import org.txm.utils.logger.Log;
48
import org.txm.wordcloud.core.functions.WordCloud;
49
import org.txm.wordcloud.core.messages.TBXWordCloudMessages;
50
import org.txm.wordcloud.rcp.editors.WordCloudEditorInput;
51

  
52
// TODO: Auto-generated Javadoc
53
/**
54
 * open the WordCloud Editor 
55
 * @author mdecorde
56
 * @author sjacquot
57
 */
58
public class ComputeWordCloud extends AbstractHandler {
59
	
60

  
61
	// FIXME: should be put in an Activator? or better in an extension point loaded by the corpora view?
62
	// adds a double click listener to the Corpus View
63
	static	{
64
		CorporaView.addDoubleClickListener(WordCloud.class, "ComputeWordCloud"); //$NON-NLS-1$
65
	}
66
	
67
	
68

  
69

  
70
	/* (non-Javadoc)
71
	 * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent)
72
	 */
73
	@Override
74
	public Object execute(final ExecutionEvent event) throws ExecutionException {
75
		if (!Toolbox.isStatEngineInitialized()) {
76
			System.out.println(TBXWordCloudMessages.Log_Stats_Engine_not_ready);
77
			return null;
78
		};
79

  
80
		IStructuredSelection selection = (IStructuredSelection) HandlerUtil.getCurrentSelection(event);
81
		Object s = selection.getFirstElement();
82
		
83
		boolean newResult = true;
84
		Corpus corpus = null;
85
		WordCloud wordCloud = null;
86
		
87
		// opens existing result
88
		if (s instanceof WordCloud) {
89
			wordCloud = (WordCloud) s;
90
			corpus = wordCloud.getCorpus();
91
			newResult = false;
92
		}
93
		else	{
94
				// Inits R packages
95
				if(!WordCloud.initPackages())	{
96
					OpenBrowser.openfile("https://groupes.renater.fr/wiki/txm-users/public/extensions#wordcloud"); //$NON-NLS-1$
97
					//return Status.CANCEL_STATUS;
98
				}
99

  
100
				// creates new result
101
				if (s instanceof Corpus) {
102
					try {
103
						corpus = (Corpus)s;
104
						wordCloud = new WordCloud(corpus);
105
					}
106
					catch (CqiClientException e) {
107
						Log.printStackTrace(e);
108
						//return null;
109
					}
110
					catch(IOException e) {
111
						// TODO Auto-generated catch block
112
						e.printStackTrace();
113
					}
114
					catch(CqiServerError e) {
115
						// TODO Auto-generated catch block
116
						e.printStackTrace();
117
					}
118
				}
119
				// creates new result
120
				else if (s instanceof Index) {
121
					wordCloud = new WordCloud((Index)s);
122
					corpus = ((Index)s).getCorpus();
123
				}
124
				// creates new result
125
				else if (s instanceof Lexicon) {
126
					wordCloud = new WordCloud((Lexicon)s);
127
					corpus = ((Lexicon)s).getCorpus();
128
				}
129
			}
130
		
131
			if(wordCloud != null)	{
132
				StatusLine.setMessage(TBXWordCloudMessages.StatusBar_Opening_result);
133

  
134
				WordCloudEditorInput editorInput = new WordCloudEditorInput(s, wordCloud);
135
				SWTChartsComponentsProvider.getCurrent().openEditor(editorInput);
136
				
137
				if(newResult && corpus != null)	{
138
					CorporaView.storeResult(corpus, wordCloud);
139
				}
140
			}
141
							
142
		return null;
143
	}
144

  
145
//	public static void openEditor(Object obj) {
146
//		if (obj instanceof Index || 
147
//				obj instanceof Lexicon || 
148
//				//obj instanceof QueryIndex || 
149
//				obj instanceof Corpus) {
150
//			IWorkbenchPage page = TXMWindows.getActiveWindow().getActivePage();
151
//			WordCloudEditorInput editorInput = new WordCloudEditorInput(Application.swtComponentProvider2, obj, null);
152
//			try {
153
//				StatusLine.setMessage(TBXWordCloudMessages.StatusBar_Opening_result);
154
//				WordCloudEditor wceditor = (WordCloudEditor) page.openEditor(editorInput,WordCloudEditor.ID); //$NON-NLS-1$
155
//				//voceditor.initializeFields();
156
//			} catch (Exception e) {
157
//				Log.printStackTrace(e);
158
//			}
159
//		}
160
//	}
161
}
0 162

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/preferences/WordCloudPreferencePage.java (revision 128)
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.swt.widgets.Composite;
35
import org.eclipse.ui.IWorkbench;
36
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
37
import org.txm.rcp.preferences.TXMPreferencePage;
38
import org.txm.rcp.preferences.TXMPreferenceStore;
39
import org.txm.wordcloud.core.preferences.WordCloudPreferences;
40
import org.txm.wordcloud.rcp.adapters.WordCloudAdapterFactory;
41
import org.txm.wordcloud.rcp.messages.Messages;
42

  
43
/**
44
 * Word cloud preference page.
45
 * @author mdecorde
46
 * @author sjacquot
47
 *
48
 */
49
public class WordCloudPreferencePage extends TXMPreferencePage {
50

  
51

  
52
	/**
53
	 * The Constant ID.
54
	 */
55
	public static final String ID = "org.txm.wordcloud.rcp.preferences.WordCloudPreferencePage"; //$NON-NLS-1$
56

  
57
	/**
58
	 * Instantiates a new Wordcloud preference page.
59
	 */
60
	public WordCloudPreferencePage() {
61
		super();
62
	}
63

  
64
	/**
65
	 * Creates the field editors. Field editors are abstractions of the common
66
	 * GUI blocks needed to manipulate various types of preferences. Each field
67
	 * editor knows how to save and restore itself.
68
	 */
69
	@Override
70
	public void createFieldEditors() {
71
		
72
		// Charts rendering
73
		Composite chartsTab = SWTChartsComponentsProvider.createChartsRenderingPreferencesTabFolderComposite(this.getFieldEditorParent());
74
		
75
		this.addField(new IntegerFieldEditor(WordCloudPreferences.MAX_WORDS, Messages.PreferencePage_Number_of_used_words, chartsTab));
76
		this.addField(new IntegerFieldEditor(WordCloudPreferences.FMIN, Messages.PreferencePage_Minimal_frequency, chartsTab));
77
		this.addField(new IntegerFieldEditor(WordCloudPreferences.ROT, Messages.PreferencePage_Percent_of_rotated_words, chartsTab));
78
		this.addField(new BooleanFieldEditor(WordCloudPreferences.RANDOM_POSITION, Messages.PreferencePage_Random_word_positions, chartsTab));
79
		
80
		// other shared preferences
81
		SWTChartsComponentsProvider.createChartsRenderingPreferencesFields(this, chartsTab);
82

  
83
	}
84
	
85
	
86
	/*
87
	 * (non-Javadoc)
88
	 * 
89
	 * @see
90
	 * org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
91
	 */
92
	@Override
93
	public void init(IWorkbench workbench) {
94
		this.setPreferenceStore(new TXMPreferenceStore(WordCloudPreferences.PREFERENCES_NODE));
95
		//this.setTitle("WordCloud");
96
		this.setImageDescriptor(WordCloudAdapterFactory.ICON);
97
	}
98

  
99

  
100
}
0 101

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/adapters/WordCloudAdapterFactory.java (revision 128)
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 WordCloudAdapterFactory extends BaseAdapterFactory {
18

  
19
	
20
	public static final ImageDescriptor ICON =
21
			AbstractUIPlugin.imageDescriptorFromPlugin(FrameworkUtil.getBundle(WordCloudAdapterFactory.class).getSymbolicName(),
22
					"platform:/plugin/"+ FrameworkUtil.getBundle(WordCloudAdapterFactory.class).getSymbolicName() + "/icons/functions/wordcloud.png"); //$NON-NLS-1$
23

  
24
	
25
	
26
	/**
27
	 * Gets the adapter.
28
	 *
29
	 * @param adaptableObject the adaptable object
30
	 * @param adapterType the adapter type
31
	 * @return the adapter
32
	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class)
33
	 */
34
	@Override
35
	public Object getAdapter(Object adaptableObject, Class adapterType) {
36
		
37
		if(adapterType == IWorkbenchAdapter.class)	{
38
			if(adaptableObject instanceof WordCloud)	{
39
				return new IWorkbenchAdapter() {
40
					@Override
41
					public Object[] getChildren(Object resultData) {
42
						return new Object[0];
43
					}
44
	
45
					@Override
46
					public ImageDescriptor getImageDescriptor(Object object) {
47
						return ICON;
48
					}
49
	
50
					@Override
51
					public String getLabel(Object resultData) {
52
						return ((WordCloud) resultData).getName();
53
					}
54
	
55
					@Override
56
					public Object getParent(Object resultData) {
57
						return ((WordCloud) resultData).getCorpus();
58
					}
59
				};
60
			}
61
		}
62
		return null;
63
	}
64

  
65

  
66
}
0 67

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/messages/Messages.java (revision 128)
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 128)
1
package org.txm.wordcloud.rcp.editors;
2

  
3
import org.eclipse.core.runtime.IProgressMonitor;
4
import org.eclipse.core.runtime.IStatus;
5
import org.eclipse.core.runtime.Status;
6
import org.eclipse.core.runtime.jobs.Job;
7
import org.eclipse.swt.SWT;
8
import org.eclipse.swt.events.SelectionEvent;
9
import org.eclipse.swt.events.SelectionListener;
10
import org.eclipse.swt.widgets.Button;
11
import org.eclipse.swt.widgets.Composite;
12
import org.eclipse.swt.widgets.Label;
13
import org.eclipse.swt.widgets.Spinner;
14
import org.txm.chartsengine.rcp.SWTChartsComponentsProvider;
15
import org.txm.chartsengine.rcp.editors.ChartEditorInput;
16
import org.txm.chartsengine.rcp.editors.ChartEditorPart;
17
import org.txm.core.preferences.TXMPreferences;
18
import org.txm.rcpapplication.views.CorporaView;
19
import org.txm.utils.logger.Log;
20
import org.txm.wordcloud.core.functions.WordCloud;
21
import org.txm.wordcloud.core.preferences.WordCloudPreferences;
22
import org.txm.wordcloud.rcp.messages.Messages;
23

  
24
/**
25
 * Word cloud editor. 
26
 * @author mdecorde
27
 * @author sjacquot
28
 *
29
 */
30
public class WordCloudEditor extends ChartEditorPart {
31
	
32
	
33
	/**
34
	 * 
35
	 */
36
	public WordCloudEditor() {
37
	}
38

  
39
	
40
	
41
	/**
42
	 * 
43
	 * @param swtComponentsProvider
44
	 * @param chartEditorInput
45
	 */
46
	public WordCloudEditor(SWTChartsComponentsProvider swtComponentsProvider, ChartEditorInput chartEditorInput) {
47
		super(swtComponentsProvider, chartEditorInput);
48
	}
49
	
50
	
51
	@Override
52
	public void createPartControl(Composite parent) {
53
		super.createPartControl(parent);
54
		
55
		//Composite paramPanel = new Composite(parent, SWT.NONE);
56
		
57
//		FormData fdata = new FormData();
58
//		fdata.top = new FormAttachment(0);
59
//		fdata.left = new FormAttachment(0);
60
//		fdata.right = new FormAttachment(100);
61
//		this.getParametersComposite().setLayoutData(fdata);
62

  
63
//		FormData fdata = new FormData();
64
//		fdata.top = new FormAttachment(this.getParametersComposite());
65
//		fdata.left = new FormAttachment(0);
66
//		fdata.right = new FormAttachment(100);
67
//		fdata.bottom = new FormAttachment(100);
68

  
69
		// fill param Area
70
//		RowLayout layout = new RowLayout();
71
//		layout.wrap = true;
72
//		layout.center = true;
73
//		this.getParametersComposite().setLayout(layout);
74

  
75
		// max words
76
		new Label(this.getParametersGroup(), SWT.NONE).setText(Messages.EditorToolBar_vmin);
77
		final Spinner maxWordsSpinner = new Spinner(this.getParametersGroup(), SWT.BORDER);
78
		maxWordsSpinner.setMinimum(10);
79
		maxWordsSpinner.setIncrement(1);
80
		maxWordsSpinner.setMaximum(100000);
81
		maxWordsSpinner.setSelection(TXMPreferences.getInt(WordCloudPreferences.PREFERENCES_NODE, this.getResultData(), WordCloudPreferences.MAX_WORDS));
82
		
83
		// fmin
84
		new Label(this.getParametersGroup(), SWT.NONE).setText(Messages.EditorToolBar_fmin);
85
		final Spinner minFreqSpinner = new Spinner(this.getParametersGroup(), SWT.BORDER);
86
		minFreqSpinner.setMinimum(1);
87
		minFreqSpinner.setIncrement(1);
88
		minFreqSpinner.setMaximum(100000000);
89
		minFreqSpinner.setSelection(TXMPreferences.getInt(WordCloudPreferences.PREFERENCES_NODE, this.getResultData(), WordCloudPreferences.FMIN));
90
		
91
		// rotation percent
92
		new Label(this.getParametersGroup(), SWT.NONE).setText(Messages.EditorToolBar_Percent_of_rotated_labels);
93
		final Spinner rotPerSpinner = new Spinner(this.getParametersGroup(), SWT.BORDER);
94
		rotPerSpinner.setMinimum(0);
95
		rotPerSpinner.setIncrement(1);
96
		rotPerSpinner.setMaximum(100);
97
		rotPerSpinner.setSelection(TXMPreferences.getInt(WordCloudPreferences.PREFERENCES_NODE, this.getResultData(), WordCloudPreferences.ROT));
98
		
99
		// random positions
100
		final Button randomOrderButton = new Button(this.getParametersGroup(), SWT.CHECK);
101
		randomOrderButton.setText(Messages.EditorToolBar_Randomize_positions);
102
		randomOrderButton.setSelection(TXMPreferences.getBoolean(WordCloudPreferences.PREFERENCES_NODE, this.getResultData(), WordCloudPreferences.RANDOM_POSITION));
103

  
104
		
105
		// compute button
106
		Button okButton = new Button(this.getParametersGroup(), SWT.PUSH);
107
		okButton.setText(Messages.EditorToolBar_Draw);
108
		okButton.addSelectionListener(new SelectionListener() {
109
			@Override
110
			public void widgetSelected(SelectionEvent e) {
111
					
112
					// persistence
113
					TXMPreferences.putLocalInt(getResultData(), WordCloudPreferences.MAX_WORDS, maxWordsSpinner.getSelection());
114
					TXMPreferences.putLocalInt(getResultData(), WordCloudPreferences.FMIN, minFreqSpinner.getSelection());
115
					TXMPreferences.putLocalFloat(getResultData(), WordCloudPreferences.ROT, rotPerSpinner.getSelection());
116
					TXMPreferences.putLocalBoolean(getResultData(), WordCloudPreferences.RANDOM_POSITION, randomOrderButton.getSelection());
117
					
118

  
119
					compute(true);
120
			}
121
					
122
					
123
			
124
			
125
			@Override
126
			public void widgetDefaultSelected(SelectionEvent e) { }
127
		});
128

  
129
		
130
		this.compute(false);
131
		Log.info(Messages.Log_WordCloud_ready + this.getResultData());
132

  
133
	}
134

  
135
	
136
	/**
137
	 * Computes.
138
	 */
139
	public void compute(final boolean update) {
140

  
141
		Job job = new Job("Compute Word Cloud") {
142

  
143
		    @Override
144
		    protected IStatus run(IProgressMonitor monitor) {
145

  
146
		    	// creating
147
				monitor.beginTask("Computing", IProgressMonitor.UNKNOWN);
148
		    	
149
				if(update)	{
150
					updateChart();
151
				}
152
				else	{
153
					createChart();
154
				}
155

  
156
				// cancel
157
				if(monitor.isCanceled())	{
158
					close();
159
					return Status.CANCEL_STATUS;
160
				}
161
				
162
				// loading
163
				monitor.setTaskName("Loading");
164
				loadChart();
165
				
166
				
167
				setPartName(((WordCloud)getResultData()).getCorpus().getName() + " - " + ((WordCloud)getResultData()).getName());
168
				
169
				
170
				// FIXME: persistence test, saving local preferences/parameters to file
171
				//WordCloudPreferences.flush((WordCloud)getResultData());
172

  
173
				// refreshes the view to update the node label
174
				getSite().getShell().getDisplay().syncExec(new Runnable() {
175
					@Override
176
					public void run() {
177
						CorporaView.refresh();
178
					}
179
				});
180

  
181
				
182
				// done
183
				monitor.done(); 
184
				return Status.OK_STATUS;
185
	    }
186

  
187
		};
188
		job.setUser(true); // show progress bar, without that the progress is located to bottom right
189
		job.schedule();
190
	}
191
	
192

  
193
	/* (non-Javadoc)
194
	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
195
	 */
196
	@Override
197
	public void doSave(IProgressMonitor monitor) { }
198

  
199
	/* (non-Javadoc)
200
	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
201
	 */
202
	@Override
203
	public void doSaveAs() { }
204

  
205
	/* (non-Javadoc)
206
	 * @see org.eclipse.ui.part.EditorPart#isDirty()
207
	 */
208
	@Override
209
	public boolean isDirty() {
210
		// TODO Auto-generated method stub
211
		return false;
212
	}
213

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

  
223
	
224

  
225
}
0 226

  
tmp/org.txm.wordcloud.rcp/src/org/txm/wordcloud/rcp/editors/WordCloudEditorInput.java (revision 128)
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/___wordcloudrcp/ApplicationActionBarAdvisor.java (revision 128)
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 128)
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 128)
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 128)
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 128)
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 128)
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/___wordcloudrcp/Perspective.java (revision 128)
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 128)
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/build.properties (revision 128)
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.properties (revision 128)
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/OSGI-INF/l10n/bundle_fr.properties (revision 128)
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/icons/alt_launcher.xpm (revision 128)
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   ",
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff