More rich text work

git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@377169 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Nick Burch 2006-02-12 12:56:26 +00:00
parent 4157c96aff
commit 4cba14090b
2 changed files with 24 additions and 14 deletions

View File

@ -208,25 +208,19 @@ public class TextRun
ensureStyleAtomPresent(); ensureStyleAtomPresent();
// Update the text length for its Paragraph and Character stylings // Update the text length for its Paragraph and Character stylings
LinkedList pStyles = _styleAtom.getParagraphStyles(); TextPropCollection pCol = run._getRawParagraphStyle();
LinkedList cStyles = _styleAtom.getCharacterStyles(); TextPropCollection cCol = run._getRawCharacterStyle();
TextPropCollection pCol = (TextPropCollection)pStyles.get(runID); // Character style covers the new run
TextPropCollection cCol = (TextPropCollection)cStyles.get(runID);
pCol.updateTextSize(s.length());
cCol.updateTextSize(s.length()); cCol.updateTextSize(s.length());
// Paragraph might cover other runs to, so remove old size and add new one
pCol.updateTextSize( pCol.getCharactersCovered() - run.getLength() + s.length());
// Build up the new text // Build up the new text
// As we go through, update the start position for all subsequent runs // As we go through, update the start position for all subsequent runs
// The building relies on the old text still being present // The building relies on the old text still being present
StringBuffer newText = new StringBuffer(); StringBuffer newText = new StringBuffer();
for(int i=0; i<_rtRuns.length; i++) { for(int i=0; i<_rtRuns.length; i++) {
// Do we need to update the start position of this run? int newStartPos = newText.length();
if(i <= runID) {
// Change is after this, so don't need to change start position
} else {
// Change has occured, so update start position
_rtRuns[i].updateStartPosition(newText.length());
}
// Build up the new text // Build up the new text
if(i != runID) { if(i != runID) {
@ -236,6 +230,15 @@ public class TextRun
// Affected run, so use new text // Affected run, so use new text
newText.append(s); newText.append(s);
} }
// Do we need to update the start position of this run?
// (Need to get the text before we update the start pos)
if(i <= runID) {
// Change is after this, so don't need to change start position
} else {
// Change has occured, so update start position
_rtRuns[i].updateStartPosition(newStartPos);
}
} }
// Now we can save the new text // Now we can save the new text

View File

@ -87,6 +87,13 @@ public class RichTextRun
characterStyle = cStyle; characterStyle = cStyle;
} }
/**
* Get the length of the text
*/
public int getLength() {
return length;
}
/** /**
* Fetch the text, in output suitable form * Fetch the text, in output suitable form
*/ */
@ -119,12 +126,12 @@ public class RichTextRun
/** /**
* Unit Testing Only - get the underlying paragraph style collection. * Internal Use Only - get the underlying paragraph style collection.
* For normal use, use the friendly setters and getters * For normal use, use the friendly setters and getters
*/ */
public TextPropCollection _getRawParagraphStyle() { return paragraphStyle; } public TextPropCollection _getRawParagraphStyle() { return paragraphStyle; }
/** /**
* Unit Testing Only - get the underlying character style collection. * Internal Use Only - get the underlying character style collection.
* For normal use, use the friendly setters and getters * For normal use, use the friendly setters and getters
*/ */
public TextPropCollection _getRawCharacterStyle() { return characterStyle; } public TextPropCollection _getRawCharacterStyle() { return characterStyle; }