From 4cba14090bd6f2396733ddc7768e2d33be52f658 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Sun, 12 Feb 2006 12:56:26 +0000 Subject: [PATCH] More rich text work git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@377169 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/hslf/model/TextRun.java | 27 ++++++++++--------- .../poi/hslf/usermodel/RichTextRun.java | 11 ++++++-- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java b/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java index ddcc357f3c..3b079ec562 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java +++ b/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java @@ -208,25 +208,19 @@ public class TextRun ensureStyleAtomPresent(); // Update the text length for its Paragraph and Character stylings - LinkedList pStyles = _styleAtom.getParagraphStyles(); - LinkedList cStyles = _styleAtom.getCharacterStyles(); - TextPropCollection pCol = (TextPropCollection)pStyles.get(runID); - TextPropCollection cCol = (TextPropCollection)cStyles.get(runID); - pCol.updateTextSize(s.length()); + TextPropCollection pCol = run._getRawParagraphStyle(); + TextPropCollection cCol = run._getRawCharacterStyle(); + // Character style covers the new run 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 // As we go through, update the start position for all subsequent runs // The building relies on the old text still being present StringBuffer newText = new StringBuffer(); for(int i=0; i<_rtRuns.length; i++) { - // Do we need to update the start position of this run? - 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()); - } + int newStartPos = newText.length(); // Build up the new text if(i != runID) { @@ -236,6 +230,15 @@ public class TextRun // Affected run, so use new text 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 diff --git a/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java b/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java index e38b936be7..1ccfea5d78 100644 --- a/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java +++ b/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java @@ -87,6 +87,13 @@ public class RichTextRun characterStyle = cStyle; } + /** + * Get the length of the text + */ + public int getLength() { + return length; + } + /** * 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 */ 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 */ public TextPropCollection _getRawCharacterStyle() { return characterStyle; }