509 |
void split(Element el, int offset) |
void split(Element el, int offset) |
510 |
{ |
{ |
511 |
if (el instanceof AbstractElement) |
if (el instanceof AbstractElement) |
512 |
{ |
{ |
513 |
AbstractElement ael = (AbstractElement) el; |
AbstractElement ael = (AbstractElement) el; |
514 |
int startOffset = ael.getStartOffset(); |
int startOffset = ael.getStartOffset(); |
515 |
int endOffset = ael.getEndOffset(); |
int endOffset = ael.getEndOffset(); |
516 |
int len = endOffset - startOffset; |
int len = endOffset - startOffset; |
517 |
if (startOffset != offset && endOffset != offset) |
if (startOffset != offset && endOffset != offset) |
518 |
{ |
{ |
519 |
Element paragraph = ael.getParentElement(); |
Element paragraph = ael.getParentElement(); |
520 |
if (paragraph instanceof BranchElement) |
if (paragraph instanceof BranchElement) |
521 |
{ |
{ |
522 |
BranchElement par = (BranchElement) paragraph; |
BranchElement par = (BranchElement) paragraph; |
523 |
Element child1 = createLeafElement(par, ael, startOffset, |
Element child1 = createLeafElement(par, ael, startOffset, |
524 |
offset); |
offset); |
525 |
Element child2 = createLeafElement(par, ael, offset, |
Element child2 = createLeafElement(par, ael, offset, |
526 |
endOffset); |
endOffset); |
527 |
int index = par.getElementIndex(startOffset); |
int index = par.getElementIndex(startOffset); |
528 |
Element[] add = new Element[]{ child1, child2 }; |
Element[] add = new Element[]{ child1, child2 }; |
529 |
par.replace(index, 1, add); |
par.replace(index, 1, add); |
530 |
documentEvent.addEdit(new ElementEdit(par, index, |
documentEvent.addEdit(new ElementEdit(par, index, |
531 |
new Element[]{ el }, |
new Element[]{ el }, |
532 |
add)); |
add)); |
533 |
} |
} |
534 |
else |
else |
535 |
throw new AssertionError("paragraph elements are expected to " |
throw new AssertionError("paragraph elements are expected to " |
536 |
+ "be instances of " |
+ "be instances of " |
537 |
+ "javax.swing.text.AbstractDocument.BranchElement"); |
+ "javax.swing.text.AbstractDocument.BranchElement"); |
538 |
} |
} |
539 |
} |
} |
540 |
else |
else |
541 |
throw new AssertionError("content elements are expected to be " |
throw new AssertionError("content elements are expected to be " |
542 |
+ "instances of " |
+ "instances of " |
543 |
+ "javax.swing.text.AbstractDocument.AbstractElement"); |
+ "javax.swing.text.AbstractDocument.AbstractElement"); |
544 |
} |
} |
545 |
|
|
946 |
{ |
{ |
947 |
Element element = getDefaultRootElement(); |
Element element = getDefaultRootElement(); |
948 |
|
|
949 |
while (! element.isLeaf()) |
while (!element.isLeaf()) |
950 |
{ |
{ |
951 |
int index = element.getElementIndex(position); |
int index = element.getElementIndex(position); |
952 |
element = element.getElement(index); |
element = element.getElement(index); |
953 |
} |
} |
954 |
|
|
955 |
return element; |
return element; |
1097 |
int paragraphCount = root.getElementCount(); |
int paragraphCount = root.getElementCount(); |
1098 |
for (int pindex = 0; pindex < paragraphCount; pindex++) |
for (int pindex = 0; pindex < paragraphCount; pindex++) |
1099 |
{ |
{ |
1100 |
Element paragraph = root.getElement(pindex); |
Element paragraph = root.getElement(pindex); |
1101 |
// Skip paragraphs that lie outside the interval. |
// Skip paragraphs that lie outside the interval. |
1102 |
if ((paragraph.getStartOffset() > offset + length) |
if ((paragraph.getStartOffset() > offset + length) |
1103 |
|| (paragraph.getEndOffset() < offset)) |
|| (paragraph.getEndOffset() < offset)) |
1104 |
continue; |
continue; |
1105 |
|
|
1106 |
// Visit content elements within this paragraph |
// Visit content elements within this paragraph |
1107 |
int contentCount = paragraph.getElementCount(); |
int contentCount = paragraph.getElementCount(); |
1108 |
for (int cindex = 0; cindex < contentCount; cindex++) |
for (int cindex = 0; cindex < contentCount; cindex++) |
1109 |
{ |
{ |
1110 |
Element content = paragraph.getElement(cindex); |
Element content = paragraph.getElement(cindex); |
1111 |
// Skip content that lies outside the interval. |
// Skip content that lies outside the interval. |
1112 |
if ((content.getStartOffset() > offset + length) |
if ((content.getStartOffset() > offset + length) |
1113 |
|| (content.getEndOffset() < offset)) |
|| (content.getEndOffset() < offset)) |
1114 |
continue; |
continue; |
1115 |
|
|
1116 |
if (content instanceof AbstractElement) |
if (content instanceof AbstractElement) |
1117 |
{ |
{ |
1118 |
AbstractElement el = (AbstractElement) content; |
AbstractElement el = (AbstractElement) content; |
1119 |
if (replace) |
if (replace) |
1120 |
el.removeAttributes(el); |
el.removeAttributes(el); |
1121 |
el.addAttributes(attributes); |
el.addAttributes(attributes); |
1122 |
} |
} |
1123 |
else |
else |
1124 |
throw new AssertionError("content elements are expected to be" |
throw new AssertionError("content elements are expected to be" |
1125 |
+ "instances of " |
+ "instances of " |
1126 |
+ "javax.swing.text.AbstractDocument.AbstractElement"); |
+ "javax.swing.text.AbstractDocument.AbstractElement"); |
1127 |
} |
} |
1128 |
} |
} |
1129 |
|
|
1130 |
fireChangedUpdate(ev); |
fireChangedUpdate(ev); |
1195 |
catch (BadLocationException ex) |
catch (BadLocationException ex) |
1196 |
{ |
{ |
1197 |
AssertionError ae = new AssertionError("Unexpected bad location"); |
AssertionError ae = new AssertionError("Unexpected bad location"); |
1198 |
ae.initCause(ex); |
ae.initCause(ex); |
1199 |
throw ae; |
throw ae; |
1200 |
} |
} |
1201 |
|
|
1202 |
int len = 0; |
int len = 0; |