comparison dwtx/jface/text/TextUtilities.d @ 161:f8d52b926852

...
author Frank Benoit <benoit@tionex.de>
date Wed, 27 Aug 2008 14:49:30 +0200
parents f70d9508c95c
children
comparison
equal deleted inserted replaced
160:3678e4f1a766 161:f8d52b926852
58 import dwtx.jface.text.IRegion; // packageimport 58 import dwtx.jface.text.IRegion; // packageimport
59 import dwtx.jface.text.IInformationControlExtension2; // packageimport 59 import dwtx.jface.text.IInformationControlExtension2; // packageimport
60 import dwtx.jface.text.IDocumentExtension4; // packageimport 60 import dwtx.jface.text.IDocumentExtension4; // packageimport
61 import dwtx.jface.text.IDocumentExtension2; // packageimport 61 import dwtx.jface.text.IDocumentExtension2; // packageimport
62 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport 62 import dwtx.jface.text.IDocumentPartitionerExtension2; // packageimport
63 import dwtx.jface.text.Assert; // packageimport 63 // import dwtx.jface.text.Assert; // packageimport
64 import dwtx.jface.text.DefaultInformationControl; // packageimport 64 import dwtx.jface.text.DefaultInformationControl; // packageimport
65 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport 65 import dwtx.jface.text.IWidgetTokenOwnerExtension; // packageimport
66 import dwtx.jface.text.DocumentClone; // packageimport 66 import dwtx.jface.text.DocumentClone; // packageimport
67 import dwtx.jface.text.DefaultUndoManager; // packageimport 67 import dwtx.jface.text.DefaultUndoManager; // packageimport
68 import dwtx.jface.text.IFindReplaceTarget; // packageimport 68 import dwtx.jface.text.IFindReplaceTarget; // packageimport
219 * @return an <code>int[]</code> with two elements where the first is the starting offset, the second the index of the found 219 * @return an <code>int[]</code> with two elements where the first is the starting offset, the second the index of the found
220 * search string in the given <code>searchStrings</code> array, returns <code>[-1, -1]</code> if no match exists 220 * search string in the given <code>searchStrings</code> array, returns <code>[-1, -1]</code> if no match exists
221 */ 221 */
222 public static int[] indexOf(String[] searchStrings, String text, int offset) { 222 public static int[] indexOf(String[] searchStrings, String text, int offset) {
223 223
224 int[] result= { -1, -1 }; 224 int[] result= [ -1, -1 ];
225 int zeroIndex= -1; 225 int zeroIndex= -1;
226 226
227 for (int i= 0; i < searchStrings.length; i++) { 227 for (int i= 0; i < searchStrings.length; i++) {
228 228
229 int length= searchStrings[i].length(); 229 int length= searchStrings[i].length();
231 if (length is 0) { 231 if (length is 0) {
232 zeroIndex= i; 232 zeroIndex= i;
233 continue; 233 continue;
234 } 234 }
235 235
236 int index= text.indexOf(searchStrings[i], offset); 236 int index= .indexOf( text, searchStrings[i], offset);
237 if (index >= 0) { 237 if (index >= 0) {
238 238
239 if (result[0] is -1) { 239 if (result[0] is -1) {
240 result[0]= index; 240 result[0]= index;
241 result[1]= i; 241 result[1]= i;
242 } else if (index < result[0]) { 242 } else if (index < result[0]) {
243 result[0]= index; 243 result[0]= index;
244 result[1]= i; 244 result[1]= i;
245 } else if (index is result[0] && length > searchStrings[result[1]].length()) { 245 } else if (index is result[0] && length > searchStrings[result[1]].length) {
246 result[0]= index; 246 result[0]= index;
247 result[1]= i; 247 result[1]= i;
248 } 248 }
249 } 249 }
250 } 250 }
268 public static int endsWith(String[] searchStrings, String text) { 268 public static int endsWith(String[] searchStrings, String text) {
269 269
270 int index= -1; 270 int index= -1;
271 271
272 for (int i= 0; i < searchStrings.length; i++) { 272 for (int i= 0; i < searchStrings.length; i++) {
273 if (text.endsWith(searchStrings[i])) { 273 if (.endsWith(text, searchStrings[i])) {
274 if (index is -1 || searchStrings[i].length() > searchStrings[index].length()) 274 if (index is -1 || searchStrings[i].length() > searchStrings[index].length())
275 index= i; 275 index= i;
276 } 276 }
277 } 277 }
278 278
290 public static int startsWith(String[] searchStrings, String text) { 290 public static int startsWith(String[] searchStrings, String text) {
291 291
292 int index= -1; 292 int index= -1;
293 293
294 for (int i= 0; i < searchStrings.length; i++) { 294 for (int i= 0; i < searchStrings.length; i++) {
295 if (text.startsWith(searchStrings[i])) { 295 if (.startsWith(text, searchStrings[i])) {
296 if (index is -1 || searchStrings[i].length() > searchStrings[index].length()) 296 if (index is -1 || searchStrings[i].length() > searchStrings[index].length())
297 index= i; 297 index= i;
298 } 298 }
299 } 299 }
300 300
309 * @param text the text to check 309 * @param text the text to check
310 * @return the index of the first equal compare string or <code>-1</code> 310 * @return the index of the first equal compare string or <code>-1</code>
311 */ 311 */
312 public static int equals(String[] compareStrings, String text) { 312 public static int equals(String[] compareStrings, String text) {
313 for (int i= 0; i < compareStrings.length; i++) { 313 for (int i= 0; i < compareStrings.length; i++) {
314 if (text.equals(compareStrings[i])) 314 if (.equals(text,compareStrings[i]))
315 return i; 315 return i;
316 } 316 }
317 return -1; 317 return -1;
318 } 318 }
319 319
359 length= (eventOffset - delta) + eventLength - offset; 359 length= (eventOffset - delta) + eventLength - offset;
360 360
361 // event is left from merged event 361 // event is left from merged event
362 } else if (eventOffset + eventLength < offset) { 362 } else if (eventOffset + eventLength < offset) {
363 final String string= document.get(eventOffset + eventLength, offset - (eventOffset + eventLength)); 363 final String string= document.get(eventOffset + eventLength, offset - (eventOffset + eventLength));
364 text.insert(0, string); 364 text.select(0,0);
365 text.insert(0, eventText); 365 text.replace(string);
366 text.select(0,0);
367 text.replace(eventText);
366 368
367 length= offset + length - eventOffset; 369 length= offset + length - eventOffset;
368 offset= eventOffset; 370 offset= eventOffset;
369 371
370 // events overlap each other 372 // events overlap each other
371 } else { 373 } else {
372 final int start= Math.max(0, eventOffset - offset); 374 final int start= Math.max(0, eventOffset - offset);
373 final int end= Math.min(text.length(), eventLength + eventOffset - offset); 375 final int end= Math.min(text.length(), eventLength + eventOffset - offset);
374 text.replace(start, end, eventText); 376 text.select(start, end);
377 text.replace(eventText);
375 378
376 offset= Math.min(offset, eventOffset); 379 offset= Math.min(offset, eventOffset);
377 final int totalDelta= delta + eventText.length() - eventLength; 380 final int totalDelta= delta + eventText.length - eventLength;
378 length= text.length() - totalDelta; 381 length= text.length() - totalDelta;
379 } 382 }
380 } 383 }
381 384
382 return new DocumentEvent(document, offset, length, text.toString()); 385 return new DocumentEvent(document, offset, length, text.toString());
402 405
403 // current merged event 406 // current merged event
404 final IDocument document= firstEvent.getDocument(); 407 final IDocument document= firstEvent.getDocument();
405 int offset= firstEvent.getOffset(); 408 int offset= firstEvent.getOffset();
406 int length= firstEvent.getLength(); 409 int length= firstEvent.getLength();
407 int textLength= firstEvent.getText() is null ? 0 : firstEvent.getText().length(); 410 int textLength= firstEvent.getText() is null ? 0 : firstEvent.getText().length;
408 411
409 while (iterator.hasPrevious()) { 412 while (iterator.hasPrevious()) {
410 413
411 final int delta= length - textLength; 414 final int delta= length - textLength;
412 415
413 final DocumentEvent event= cast(DocumentEvent) iterator.previous(); 416 final DocumentEvent event= cast(DocumentEvent) iterator.previous();
414 final int eventOffset= event.getOffset(); 417 final int eventOffset= event.getOffset();
415 final int eventLength= event.getLength(); 418 final int eventLength= event.getLength();
416 final int eventTextLength= event.getText() is null ? 0 : event.getText().length(); 419 final int eventTextLength= event.getText() is null ? 0 : event.getText().length;
417 420
418 // event is right from merged event 421 // event is right from merged event
419 if (eventOffset > offset + textLength + delta) { 422 if (eventOffset > offset + textLength + delta) {
420 length= (eventOffset - delta) - (offset + textLength) + length + eventLength; 423 length= (eventOffset - delta) - (offset + textLength) + length + eventLength;
421 textLength= (eventOffset - delta) + eventTextLength - offset; 424 textLength= (eventOffset - delta) + eventTextLength - offset;
458 for (int i= 0; i < partitionings.length; i++) { 461 for (int i= 0; i < partitionings.length; i++) {
459 IDocumentPartitioner partitioner= extension3.getDocumentPartitioner(partitionings[i]); 462 IDocumentPartitioner partitioner= extension3.getDocumentPartitioner(partitionings[i]);
460 if (partitioner !is null) { 463 if (partitioner !is null) {
461 extension3.setDocumentPartitioner(partitionings[i], null); 464 extension3.setDocumentPartitioner(partitionings[i], null);
462 partitioner.disconnect(); 465 partitioner.disconnect();
463 partitioners.put(partitionings[i], partitioner); 466 partitioners.put(stringcast(partitionings[i]), cast(Object)partitioner);
464 } 467 }
465 } 468 }
466 } else { 469 } else {
467 IDocumentPartitioner partitioner= document.getDocumentPartitioner(); 470 IDocumentPartitioner partitioner= document.getDocumentPartitioner();
468 if (partitioner !is null) { 471 if (partitioner !is null) {
469 document.setDocumentPartitioner(null); 472 document.setDocumentPartitioner(null);
470 partitioner.disconnect(); 473 partitioner.disconnect();
471 partitioners.put(IDocumentExtension3.DEFAULT_PARTITIONING, partitioner); 474 partitioners.put(stringcast(IDocumentExtension3.DEFAULT_PARTITIONING), cast(Object)partitioner);
472 } 475 }
473 } 476 }
474 return partitioners; 477 return partitioners;
475 } 478 }
476 479
485 public static void addDocumentPartitioners(IDocument document, Map partitioners) { 488 public static void addDocumentPartitioners(IDocument document, Map partitioners) {
486 if (cast(IDocumentExtension3)document ) { 489 if (cast(IDocumentExtension3)document ) {
487 IDocumentExtension3 extension3= cast(IDocumentExtension3) document; 490 IDocumentExtension3 extension3= cast(IDocumentExtension3) document;
488 Iterator e= partitioners.keySet().iterator(); 491 Iterator e= partitioners.keySet().iterator();
489 while (e.hasNext()) { 492 while (e.hasNext()) {
490 String partitioning= cast(String) e.next(); 493 String partitioning= stringcast( e.next() );
491 IDocumentPartitioner partitioner= cast(IDocumentPartitioner) partitioners.get(partitioning); 494 IDocumentPartitioner partitioner= cast(IDocumentPartitioner) partitioners.get(partitioning);
492 partitioner.connect(document); 495 partitioner.connect(document);
493 extension3.setDocumentPartitioner(partitioning, partitioner); 496 extension3.setDocumentPartitioner(partitioning, partitioner);
494 } 497 }
495 partitioners.clear(); 498 partitioners.clear();
604 for (int j= 0; j < c.length; j++) 607 for (int j= 0; j < c.length; j++)
605 categories.add(c[j]); 608 categories.add(c[j]);
606 } 609 }
607 } 610 }
608 } 611 }
609 String[] result= new String[categories.size()]; 612 return stringcast(categories.toArray());
610 categories.toArray(result);
611 return result;
612 } 613 }
613 } 614 }
614 return null; 615 return null;
615 } 616 }
616 617
640 641
641 String sysLineDelimiter= System.getProperty("line.separator"); //$NON-NLS-1$ 642 String sysLineDelimiter= System.getProperty("line.separator"); //$NON-NLS-1$
642 String[] delimiters= document.getLegalLineDelimiters(); 643 String[] delimiters= document.getLegalLineDelimiters();
643 Assert.isTrue(delimiters.length > 0); 644 Assert.isTrue(delimiters.length > 0);
644 for (int i= 0; i < delimiters.length; i++) { 645 for (int i= 0; i < delimiters.length; i++) {
645 if (delimiters[i].equals(sysLineDelimiter)) { 646 if (.equals(delimiters[i], sysLineDelimiter)) {
646 lineDelimiter= sysLineDelimiter; 647 lineDelimiter= sysLineDelimiter;
647 break; 648 break;
648 } 649 }
649 } 650 }
650 651