Mercurial > projects > dwt2
comparison org.eclipse.jface.text/src/org/eclipse/jface/text/TextSelection.d @ 12:bc29606a740c
Added dwt-addons in original directory structure of eclipse.org
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 14 Mar 2009 18:23:29 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
11:43904fec5dca | 12:bc29606a740c |
---|---|
1 /******************************************************************************* | |
2 * Copyright (c) 2000, 2005 IBM Corporation and others. | |
3 * All rights reserved. This program and the accompanying materials | |
4 * are made available under the terms of the Eclipse Public License v1.0 | |
5 * which accompanies this distribution, and is available at | |
6 * http://www.eclipse.org/legal/epl-v10.html | |
7 * | |
8 * Contributors: | |
9 * IBM Corporation - initial API and implementation | |
10 * Port to the D programming language: | |
11 * Frank Benoit <benoit@tionex.de> | |
12 *******************************************************************************/ | |
13 module org.eclipse.jface.text.TextSelection; | |
14 | |
15 import org.eclipse.jface.text.IDocumentPartitioningListener; // packageimport | |
16 import org.eclipse.jface.text.DefaultTextHover; // packageimport | |
17 import org.eclipse.jface.text.AbstractInformationControl; // packageimport | |
18 import org.eclipse.jface.text.TextUtilities; // packageimport | |
19 import org.eclipse.jface.text.IInformationControlCreatorExtension; // packageimport | |
20 import org.eclipse.jface.text.AbstractInformationControlManager; // packageimport | |
21 import org.eclipse.jface.text.ITextViewerExtension2; // packageimport | |
22 import org.eclipse.jface.text.IDocumentPartitioner; // packageimport | |
23 import org.eclipse.jface.text.DefaultIndentLineAutoEditStrategy; // packageimport | |
24 import org.eclipse.jface.text.ITextSelection; // packageimport | |
25 import org.eclipse.jface.text.Document; // packageimport | |
26 import org.eclipse.jface.text.FindReplaceDocumentAdapterContentProposalProvider; // packageimport | |
27 import org.eclipse.jface.text.ITextListener; // packageimport | |
28 import org.eclipse.jface.text.BadPartitioningException; // packageimport | |
29 import org.eclipse.jface.text.ITextViewerExtension5; // packageimport | |
30 import org.eclipse.jface.text.IDocumentPartitionerExtension3; // packageimport | |
31 import org.eclipse.jface.text.IUndoManager; // packageimport | |
32 import org.eclipse.jface.text.ITextHoverExtension2; // packageimport | |
33 import org.eclipse.jface.text.IRepairableDocument; // packageimport | |
34 import org.eclipse.jface.text.IRewriteTarget; // packageimport | |
35 import org.eclipse.jface.text.DefaultPositionUpdater; // packageimport | |
36 import org.eclipse.jface.text.RewriteSessionEditProcessor; // packageimport | |
37 import org.eclipse.jface.text.TextViewerHoverManager; // packageimport | |
38 import org.eclipse.jface.text.DocumentRewriteSession; // packageimport | |
39 import org.eclipse.jface.text.TextViewer; // packageimport | |
40 import org.eclipse.jface.text.ITextViewerExtension8; // packageimport | |
41 import org.eclipse.jface.text.RegExMessages; // packageimport | |
42 import org.eclipse.jface.text.IDelayedInputChangeProvider; // packageimport | |
43 import org.eclipse.jface.text.ITextOperationTargetExtension; // packageimport | |
44 import org.eclipse.jface.text.IWidgetTokenOwner; // packageimport | |
45 import org.eclipse.jface.text.IViewportListener; // packageimport | |
46 import org.eclipse.jface.text.GapTextStore; // packageimport | |
47 import org.eclipse.jface.text.MarkSelection; // packageimport | |
48 import org.eclipse.jface.text.IDocumentPartitioningListenerExtension; // packageimport | |
49 import org.eclipse.jface.text.IDocumentAdapterExtension; // packageimport | |
50 import org.eclipse.jface.text.IInformationControlExtension; // packageimport | |
51 import org.eclipse.jface.text.IDocumentPartitioningListenerExtension2; // packageimport | |
52 import org.eclipse.jface.text.DefaultDocumentAdapter; // packageimport | |
53 import org.eclipse.jface.text.ITextViewerExtension3; // packageimport | |
54 import org.eclipse.jface.text.IInformationControlCreator; // packageimport | |
55 import org.eclipse.jface.text.TypedRegion; // packageimport | |
56 import org.eclipse.jface.text.ISynchronizable; // packageimport | |
57 import org.eclipse.jface.text.IMarkRegionTarget; // packageimport | |
58 import org.eclipse.jface.text.TextViewerUndoManager; // packageimport | |
59 import org.eclipse.jface.text.IRegion; // packageimport | |
60 import org.eclipse.jface.text.IInformationControlExtension2; // packageimport | |
61 import org.eclipse.jface.text.IDocumentExtension4; // packageimport | |
62 import org.eclipse.jface.text.IDocumentExtension2; // packageimport | |
63 import org.eclipse.jface.text.IDocumentPartitionerExtension2; // packageimport | |
64 import org.eclipse.jface.text.Assert; // packageimport | |
65 import org.eclipse.jface.text.DefaultInformationControl; // packageimport | |
66 import org.eclipse.jface.text.IWidgetTokenOwnerExtension; // packageimport | |
67 import org.eclipse.jface.text.DocumentClone; // packageimport | |
68 import org.eclipse.jface.text.DefaultUndoManager; // packageimport | |
69 import org.eclipse.jface.text.IFindReplaceTarget; // packageimport | |
70 import org.eclipse.jface.text.IAutoEditStrategy; // packageimport | |
71 import org.eclipse.jface.text.ILineTrackerExtension; // packageimport | |
72 import org.eclipse.jface.text.IUndoManagerExtension; // packageimport | |
73 import org.eclipse.jface.text.DefaultAutoIndentStrategy; // packageimport | |
74 import org.eclipse.jface.text.IAutoIndentStrategy; // packageimport | |
75 import org.eclipse.jface.text.IPainter; // packageimport | |
76 import org.eclipse.jface.text.IInformationControl; // packageimport | |
77 import org.eclipse.jface.text.IInformationControlExtension3; // packageimport | |
78 import org.eclipse.jface.text.ITextViewerExtension6; // packageimport | |
79 import org.eclipse.jface.text.IInformationControlExtension4; // packageimport | |
80 import org.eclipse.jface.text.DefaultLineTracker; // packageimport | |
81 import org.eclipse.jface.text.IDocumentInformationMappingExtension; // packageimport | |
82 import org.eclipse.jface.text.IRepairableDocumentExtension; // packageimport | |
83 import org.eclipse.jface.text.ITextHover; // packageimport | |
84 import org.eclipse.jface.text.FindReplaceDocumentAdapter; // packageimport | |
85 import org.eclipse.jface.text.ILineTracker; // packageimport | |
86 import org.eclipse.jface.text.Line; // packageimport | |
87 import org.eclipse.jface.text.ITextViewerExtension; // packageimport | |
88 import org.eclipse.jface.text.IDocumentAdapter; // packageimport | |
89 import org.eclipse.jface.text.TextEvent; // packageimport | |
90 import org.eclipse.jface.text.BadLocationException; // packageimport | |
91 import org.eclipse.jface.text.AbstractDocument; // packageimport | |
92 import org.eclipse.jface.text.AbstractLineTracker; // packageimport | |
93 import org.eclipse.jface.text.TreeLineTracker; // packageimport | |
94 import org.eclipse.jface.text.ITextPresentationListener; // packageimport | |
95 import org.eclipse.jface.text.Region; // packageimport | |
96 import org.eclipse.jface.text.ITextViewer; // packageimport | |
97 import org.eclipse.jface.text.IDocumentInformationMapping; // packageimport | |
98 import org.eclipse.jface.text.MarginPainter; // packageimport | |
99 import org.eclipse.jface.text.IPaintPositionManager; // packageimport | |
100 import org.eclipse.jface.text.TextPresentation; // packageimport | |
101 import org.eclipse.jface.text.IFindReplaceTargetExtension; // packageimport | |
102 import org.eclipse.jface.text.ISlaveDocumentManagerExtension; // packageimport | |
103 import org.eclipse.jface.text.ISelectionValidator; // packageimport | |
104 import org.eclipse.jface.text.IDocumentExtension; // packageimport | |
105 import org.eclipse.jface.text.PropagatingFontFieldEditor; // packageimport | |
106 import org.eclipse.jface.text.ConfigurableLineTracker; // packageimport | |
107 import org.eclipse.jface.text.SlaveDocumentEvent; // packageimport | |
108 import org.eclipse.jface.text.IDocumentListener; // packageimport | |
109 import org.eclipse.jface.text.PaintManager; // packageimport | |
110 import org.eclipse.jface.text.IFindReplaceTargetExtension3; // packageimport | |
111 import org.eclipse.jface.text.ITextDoubleClickStrategy; // packageimport | |
112 import org.eclipse.jface.text.IDocumentExtension3; // packageimport | |
113 import org.eclipse.jface.text.Position; // packageimport | |
114 import org.eclipse.jface.text.TextMessages; // packageimport | |
115 import org.eclipse.jface.text.CopyOnWriteTextStore; // packageimport | |
116 import org.eclipse.jface.text.WhitespaceCharacterPainter; // packageimport | |
117 import org.eclipse.jface.text.IPositionUpdater; // packageimport | |
118 import org.eclipse.jface.text.DefaultTextDoubleClickStrategy; // packageimport | |
119 import org.eclipse.jface.text.ListLineTracker; // packageimport | |
120 import org.eclipse.jface.text.ITextInputListener; // packageimport | |
121 import org.eclipse.jface.text.BadPositionCategoryException; // packageimport | |
122 import org.eclipse.jface.text.IWidgetTokenKeeperExtension; // packageimport | |
123 import org.eclipse.jface.text.IInputChangedListener; // packageimport | |
124 import org.eclipse.jface.text.ITextOperationTarget; // packageimport | |
125 import org.eclipse.jface.text.IDocumentInformationMappingExtension2; // packageimport | |
126 import org.eclipse.jface.text.ITextViewerExtension7; // packageimport | |
127 import org.eclipse.jface.text.IInformationControlExtension5; // packageimport | |
128 import org.eclipse.jface.text.IDocumentRewriteSessionListener; // packageimport | |
129 import org.eclipse.jface.text.JFaceTextUtil; // packageimport | |
130 import org.eclipse.jface.text.AbstractReusableInformationControlCreator; // packageimport | |
131 import org.eclipse.jface.text.TabsToSpacesConverter; // packageimport | |
132 import org.eclipse.jface.text.CursorLinePainter; // packageimport | |
133 import org.eclipse.jface.text.ITextHoverExtension; // packageimport | |
134 import org.eclipse.jface.text.IEventConsumer; // packageimport | |
135 import org.eclipse.jface.text.IDocument; // packageimport | |
136 import org.eclipse.jface.text.IWidgetTokenKeeper; // packageimport | |
137 import org.eclipse.jface.text.DocumentCommand; // packageimport | |
138 import org.eclipse.jface.text.TypedPosition; // packageimport | |
139 import org.eclipse.jface.text.IEditingSupportRegistry; // packageimport | |
140 import org.eclipse.jface.text.IDocumentPartitionerExtension; // packageimport | |
141 import org.eclipse.jface.text.AbstractHoverInformationControlManager; // packageimport | |
142 import org.eclipse.jface.text.IEditingSupport; // packageimport | |
143 import org.eclipse.jface.text.IMarkSelection; // packageimport | |
144 import org.eclipse.jface.text.ISlaveDocumentManager; // packageimport | |
145 import org.eclipse.jface.text.DocumentEvent; // packageimport | |
146 import org.eclipse.jface.text.DocumentPartitioningChangedEvent; // packageimport | |
147 import org.eclipse.jface.text.ITextStore; // packageimport | |
148 import org.eclipse.jface.text.JFaceTextMessages; // packageimport | |
149 import org.eclipse.jface.text.DocumentRewriteSessionEvent; // packageimport | |
150 import org.eclipse.jface.text.SequentialRewriteTextStore; // packageimport | |
151 import org.eclipse.jface.text.DocumentRewriteSessionType; // packageimport | |
152 import org.eclipse.jface.text.TextAttribute; // packageimport | |
153 import org.eclipse.jface.text.ITextViewerExtension4; // packageimport | |
154 import org.eclipse.jface.text.ITypedRegion; // packageimport | |
155 | |
156 | |
157 import java.lang.all; | |
158 import java.util.Set; | |
159 | |
160 | |
161 /** | |
162 * Standard implementation of {@link org.eclipse.jface.text.ITextSelection}. | |
163 * <p> | |
164 * Makes advantage of the weak contract of correctness of its interface. If | |
165 * generated from a selection provider, it only remembers its offset and length | |
166 * and computes the remaining information on request.</p> | |
167 */ | |
168 public class TextSelection : ITextSelection { | |
169 | |
170 /** Internal empty text selection */ | |
171 private static ITextSelection NULL_; | |
172 private static ITextSelection NULL(){ | |
173 if( NULL_ is null ){ | |
174 synchronized( TextSelection.classinfo ){ | |
175 if( NULL_ is null ){ | |
176 NULL_= new TextSelection(); | |
177 } | |
178 } | |
179 } | |
180 return NULL_; | |
181 } | |
182 | |
183 /** | |
184 * Returns a shared instance of an empty text selection. | |
185 * | |
186 * @return a shared instance of an empty text selection | |
187 */ | |
188 public static ITextSelection emptySelection() { | |
189 return NULL; | |
190 } | |
191 | |
192 /** Document which delivers the data of the selection */ | |
193 private IDocument fDocument; | |
194 /** Offset of the selection */ | |
195 private int fOffset; | |
196 /** Length of the selection */ | |
197 private int fLength; | |
198 | |
199 | |
200 /** | |
201 * Creates an empty text selection. | |
202 */ | |
203 private this() { | |
204 this(null, -1, -1); | |
205 } | |
206 | |
207 /** | |
208 * Creates a text selection for the given range. This | |
209 * selection object describes generically a text range and | |
210 * is intended to be an argument for the <code>setSelection</code> | |
211 * method of selection providers. | |
212 * | |
213 * @param offset the offset of the range | |
214 * @param length the length of the range | |
215 */ | |
216 public this(int offset, int length) { | |
217 this(null, offset, length); | |
218 } | |
219 | |
220 /** | |
221 * Creates a text selection for the given range of the given document. | |
222 * This selection object is created by selection providers in responds | |
223 * <code>getSelection</code>. | |
224 * | |
225 * @param document the document whose text range is selected in a viewer | |
226 * @param offset the offset of the selected range | |
227 * @param length the length of the selected range | |
228 */ | |
229 public this(IDocument document, int offset, int length) { | |
230 fDocument= document; | |
231 fOffset= offset; | |
232 fLength= length; | |
233 } | |
234 | |
235 /** | |
236 * | |
237 * Returns true if the offset and length are smaller than 0. | |
238 * A selection of length 0, is a valid text selection as it | |
239 * describes, e.g., the cursor position in a viewer. | |
240 * | |
241 * @return <code>true</code> if this selection is empty | |
242 * @see org.eclipse.jface.viewers.ISelection#isEmpty() | |
243 */ | |
244 public bool isEmpty() { | |
245 return fOffset < 0 || fLength < 0; | |
246 } | |
247 | |
248 /* | |
249 * @see org.eclipse.jface.text.ITextSelection#getOffset() | |
250 */ | |
251 public int getOffset() { | |
252 return fOffset; | |
253 } | |
254 | |
255 /* | |
256 * @see org.eclipse.jface.text.ITextSelection#getLength() | |
257 */ | |
258 public int getLength() { | |
259 return fLength; | |
260 } | |
261 | |
262 /* | |
263 * @see org.eclipse.jface.text.ITextSelection#getStartLine() | |
264 */ | |
265 public int getStartLine() { | |
266 | |
267 try { | |
268 if (fDocument !is null) | |
269 return fDocument.getLineOfOffset(fOffset); | |
270 } catch (BadLocationException x) { | |
271 } | |
272 | |
273 return -1; | |
274 } | |
275 | |
276 /* | |
277 * @see org.eclipse.jface.text.ITextSelection#getEndLine() | |
278 */ | |
279 public int getEndLine() { | |
280 try { | |
281 if (fDocument !is null) { | |
282 int endOffset= fOffset + fLength; | |
283 if (fLength !is 0) | |
284 endOffset--; | |
285 return fDocument.getLineOfOffset(endOffset); | |
286 } | |
287 } catch (BadLocationException x) { | |
288 } | |
289 | |
290 return -1; | |
291 } | |
292 | |
293 /* | |
294 * @see org.eclipse.jface.text.ITextSelection#getText() | |
295 */ | |
296 public String getText() { | |
297 try { | |
298 if (fDocument !is null) | |
299 return fDocument.get(fOffset, fLength); | |
300 } catch (BadLocationException x) { | |
301 } | |
302 | |
303 return null; | |
304 } | |
305 | |
306 /* | |
307 * @see java.lang.Object#equals(Object) | |
308 */ | |
309 public override int opEquals(Object obj) { | |
310 if (obj is this) | |
311 return true; | |
312 | |
313 if (obj is null || this.classinfo !is obj.classinfo) | |
314 return false; | |
315 | |
316 TextSelection s= cast(TextSelection) obj; | |
317 bool sameRange= (s.fOffset is fOffset && s.fLength is fLength); | |
318 if (sameRange) { | |
319 | |
320 if (s.fDocument is null && fDocument is null) | |
321 return true; | |
322 if (s.fDocument is null || fDocument is null) | |
323 return false; | |
324 | |
325 try { | |
326 String sContent= s.fDocument.get(fOffset, fLength); | |
327 String content= fDocument.get(fOffset, fLength); | |
328 return sContent==/+eq+/content; | |
329 } catch (BadLocationException x) { | |
330 } | |
331 } | |
332 | |
333 return false; | |
334 } | |
335 | |
336 /* | |
337 * @see java.lang.Object#hashCode() | |
338 */ | |
339 public override hash_t toHash() { | |
340 int low= fDocument !is null ? (cast(Object)fDocument).toHash() : 0; | |
341 return (fOffset << 24) | (fLength << 16) | low; | |
342 } | |
343 } | |
344 |