Mercurial > projects > dwt-addons
comparison dwtx/jface/text/projection/ProjectionDocument.d @ 134:51e6e63f930e
Regex fix for casts
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sun, 24 Aug 2008 01:46:20 +0200 |
parents | 7d818bd32d63 |
children | 6dcb0baaa031 |
comparison
equal
deleted
inserted
replaced
133:7d818bd32d63 | 134:51e6e63f930e |
---|---|
127 public this(IDocument masterDocument) { | 127 public this(IDocument masterDocument) { |
128 super(); | 128 super(); |
129 | 129 |
130 fMasterDocument= masterDocument; | 130 fMasterDocument= masterDocument; |
131 if (fMasterDocument instanceof IDocumentExtension) | 131 if (fMasterDocument instanceof IDocumentExtension) |
132 fMasterDocumentExtension= (IDocumentExtension) fMasterDocument; | 132 fMasterDocumentExtension= cast(IDocumentExtension) fMasterDocument; |
133 | 133 |
134 fSegmentsCategory= SEGMENTS_CATEGORY; | 134 fSegmentsCategory= SEGMENTS_CATEGORY; |
135 fFragmentsCategory= FRAGMENTS_CATEGORY_PREFIX + hashCode(); | 135 fFragmentsCategory= FRAGMENTS_CATEGORY_PREFIX + hashCode(); |
136 fMasterDocument.addPositionCategory(fFragmentsCategory); | 136 fMasterDocument.addPositionCategory(fFragmentsCategory); |
137 fFragmentsUpdater= new FragmentUpdater(fFragmentsCategory); | 137 fFragmentsUpdater= new FragmentUpdater(fFragmentsCategory); |
247 addPositionUpdater(fSegmentUpdater); | 247 addPositionUpdater(fSegmentUpdater); |
248 | 248 |
249 int offset= 0; | 249 int offset= 0; |
250 Position[] fragments= getFragments(); | 250 Position[] fragments= getFragments(); |
251 for (int i= 0; i < fragments.length; i++) { | 251 for (int i= 0; i < fragments.length; i++) { |
252 Fragment fragment= (Fragment) fragments[i]; | 252 Fragment fragment= cast(Fragment) fragments[i]; |
253 Segment segment= new Segment(offset, fragment.getLength()); | 253 Segment segment= new Segment(offset, fragment.getLength()); |
254 segment.fragment= fragment; | 254 segment.fragment= fragment; |
255 addPosition(fSegmentsCategory, segment); | 255 addPosition(fSegmentsCategory, segment); |
256 offset += fragment.length; | 256 offset += fragment.length; |
257 } | 257 } |
275 private Segment createSegmentFor(Fragment fragment, int index) throws BadLocationException, BadPositionCategoryException { | 275 private Segment createSegmentFor(Fragment fragment, int index) throws BadLocationException, BadPositionCategoryException { |
276 | 276 |
277 int offset= 0; | 277 int offset= 0; |
278 if (index > 0) { | 278 if (index > 0) { |
279 Position[] segments= getSegments(); | 279 Position[] segments= getSegments(); |
280 Segment segment= (Segment) segments[index - 1]; | 280 Segment segment= cast(Segment) segments[index - 1]; |
281 offset= segment.getOffset() + segment.getLength(); | 281 offset= segment.getOffset() + segment.getLength(); |
282 } | 282 } |
283 | 283 |
284 Segment segment= new Segment(offset, 0); | 284 Segment segment= new Segment(offset, 0); |
285 segment.fragment= fragment; | 285 segment.fragment= fragment; |
309 | 309 |
310 Fragment left= null; | 310 Fragment left= null; |
311 Fragment right= null; | 311 Fragment right= null; |
312 | 312 |
313 if (index < fragments.length) { | 313 if (index < fragments.length) { |
314 Fragment fragment= (Fragment) fragments[index]; | 314 Fragment fragment= cast(Fragment) fragments[index]; |
315 if (offsetInMaster is fragment.offset) | 315 if (offsetInMaster is fragment.offset) |
316 if (fragment.length is 0) // the fragment does not overlap - it is a zero-length fragment at the same offset | 316 if (fragment.length is 0) // the fragment does not overlap - it is a zero-length fragment at the same offset |
317 left= fragment; | 317 left= fragment; |
318 else | 318 else |
319 throw new IllegalArgumentException("overlaps with existing fragment"); //$NON-NLS-1$ | 319 throw new IllegalArgumentException("overlaps with existing fragment"); //$NON-NLS-1$ |
320 if (offsetInMaster + lengthInMaster is fragment.offset) | 320 if (offsetInMaster + lengthInMaster is fragment.offset) |
321 right= fragment; | 321 right= fragment; |
322 } | 322 } |
323 | 323 |
324 if (0 < index && index <= fragments.length) { | 324 if (0 < index && index <= fragments.length) { |
325 Fragment fragment= (Fragment) fragments[index - 1]; | 325 Fragment fragment= cast(Fragment) fragments[index - 1]; |
326 if (fragment.includes(offsetInMaster)) | 326 if (fragment.includes(offsetInMaster)) |
327 throw new IllegalArgumentException("overlaps with existing fragment"); //$NON-NLS-1$ | 327 throw new IllegalArgumentException("overlaps with existing fragment"); //$NON-NLS-1$ |
328 if (fragment.getOffset() + fragment.getLength() is offsetInMaster) | 328 if (fragment.getOffset() + fragment.getLength() is offsetInMaster) |
329 left= fragment; | 329 left= fragment; |
330 } | 330 } |
331 | 331 |
332 int offsetInSlave= 0; | 332 int offsetInSlave= 0; |
333 if (index > 0) { | 333 if (index > 0) { |
334 Fragment fragment= (Fragment) fragments[index - 1]; | 334 Fragment fragment= cast(Fragment) fragments[index - 1]; |
335 Segment segment= fragment.segment; | 335 Segment segment= fragment.segment; |
336 offsetInSlave= segment.getOffset() + segment.getLength(); | 336 offsetInSlave= segment.getOffset() + segment.getLength(); |
337 } | 337 } |
338 | 338 |
339 ProjectionDocumentEvent event= new ProjectionDocumentEvent(this, offsetInSlave, 0, fMasterDocument.get(offsetInMaster, lengthInMaster), offsetInMaster, lengthInMaster, masterDocumentEvent); | 339 ProjectionDocumentEvent event= new ProjectionDocumentEvent(this, offsetInSlave, 0, fMasterDocument.get(offsetInMaster, lengthInMaster), offsetInMaster, lengthInMaster, masterDocumentEvent); |
383 * @return the fragment representing the given master document range | 383 * @return the fragment representing the given master document range |
384 */ | 384 */ |
385 private Fragment findFragment(int offsetInMaster, int lengthInMaster) { | 385 private Fragment findFragment(int offsetInMaster, int lengthInMaster) { |
386 Position[] fragments= getFragments(); | 386 Position[] fragments= getFragments(); |
387 for (int i= 0; i < fragments.length; i++) { | 387 for (int i= 0; i < fragments.length; i++) { |
388 Fragment f= (Fragment) fragments[i]; | 388 Fragment f= cast(Fragment) fragments[i]; |
389 if (f.getOffset() <= offsetInMaster && offsetInMaster + lengthInMaster <= f.getOffset() + f.getLength()) | 389 if (f.getOffset() <= offsetInMaster && offsetInMaster + lengthInMaster <= f.getOffset() + f.getLength()) |
390 return f; | 390 return f; |
391 } | 391 } |
392 return null; | 392 return null; |
393 } | 393 } |
806 fMapping.projectionChanged(); | 806 fMapping.projectionChanged(); |
807 } | 807 } |
808 | 808 |
809 private int computeAnchor(DocumentEvent event) { | 809 private int computeAnchor(DocumentEvent event) { |
810 if (event instanceof ProjectionDocumentEvent) { | 810 if (event instanceof ProjectionDocumentEvent) { |
811 ProjectionDocumentEvent slave= (ProjectionDocumentEvent) event; | 811 ProjectionDocumentEvent slave= cast(ProjectionDocumentEvent) event; |
812 Object changeType= slave.getChangeType(); | 812 Object changeType= slave.getChangeType(); |
813 if (ProjectionDocumentEvent.CONTENT_CHANGE is changeType) { | 813 if (ProjectionDocumentEvent.CONTENT_CHANGE is changeType) { |
814 DocumentEvent master= slave.getMasterEvent(); | 814 DocumentEvent master= slave.getMasterEvent(); |
815 if (master !is null) | 815 if (master !is null) |
816 return master.getOffset(); | 816 return master.getOffset(); |
823 | 823 |
824 private bool ensureWellFormedSegmentation(int anchorOffset) { | 824 private bool ensureWellFormedSegmentation(int anchorOffset) { |
825 bool changed= false; | 825 bool changed= false; |
826 Position[] segments= getSegments(); | 826 Position[] segments= getSegments(); |
827 for (int i= 0; i < segments.length; i++) { | 827 for (int i= 0; i < segments.length; i++) { |
828 Segment segment= (Segment) segments[i]; | 828 Segment segment= cast(Segment) segments[i]; |
829 if (segment.isDeleted() || segment.getLength() is 0) { | 829 if (segment.isDeleted() || segment.getLength() is 0) { |
830 try { | 830 try { |
831 removePosition(fSegmentsCategory, segment); | 831 removePosition(fSegmentsCategory, segment); |
832 fMasterDocument.removePosition(fFragmentsCategory, segment.fragment); | 832 fMasterDocument.removePosition(fFragmentsCategory, segment.fragment); |
833 changed= true; | 833 changed= true; |
834 } catch (BadPositionCategoryException e) { | 834 } catch (BadPositionCategoryException e) { |
835 internalError(); | 835 internalError(); |
836 } | 836 } |
837 } else if (i < segments.length - 1) { | 837 } else if (i < segments.length - 1) { |
838 Segment next= (Segment) segments[i + 1]; | 838 Segment next= cast(Segment) segments[i + 1]; |
839 if (next.isDeleted() || next.getLength() is 0) | 839 if (next.isDeleted() || next.getLength() is 0) |
840 continue; | 840 continue; |
841 Fragment fragment= segment.fragment; | 841 Fragment fragment= segment.fragment; |
842 if (fragment.getOffset() + fragment.getLength() is next.fragment.getOffset()) { | 842 if (fragment.getOffset() + fragment.getLength() is next.fragment.getOffset()) { |
843 // join fragments and their corresponding segments | 843 // join fragments and their corresponding segments |
897 ProjectionDocumentEvent event= new ProjectionDocumentEvent(this, 0, fMapping.getImageLength(), fMasterDocument.get(offsetInMaster, lengthInMaster), offsetInMaster, lengthInMaster); | 897 ProjectionDocumentEvent event= new ProjectionDocumentEvent(this, 0, fMapping.getImageLength(), fMasterDocument.get(offsetInMaster, lengthInMaster), offsetInMaster, lengthInMaster); |
898 super.fireDocumentAboutToBeChanged(event); | 898 super.fireDocumentAboutToBeChanged(event); |
899 | 899 |
900 Position[] fragments= getFragments(); | 900 Position[] fragments= getFragments(); |
901 for (int i= 0; i < fragments.length; i++) { | 901 for (int i= 0; i < fragments.length; i++) { |
902 Fragment fragment= (Fragment) fragments[i]; | 902 Fragment fragment= cast(Fragment) fragments[i]; |
903 fMasterDocument.removePosition(fFragmentsCategory, fragment); | 903 fMasterDocument.removePosition(fFragmentsCategory, fragment); |
904 removePosition(fSegmentsCategory, fragment.segment); | 904 removePosition(fSegmentsCategory, fragment.segment); |
905 } | 905 } |
906 | 906 |
907 Fragment fragment= new Fragment(offsetInMaster, lengthInMaster); | 907 Fragment fragment= new Fragment(offsetInMaster, lengthInMaster); |