Mercurial > projects > dwt-addons
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 |