Author: nick
Date: Sun Feb 12 11:01:07 2006
New Revision: 377215
URL: http://svn.apache.org/viewcvs?rev=377215&view=rev
Log:
Start to support friendly usermodel interface to rich text character properties
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java
URL:
http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java?rev=377215&r1=377214&r2=377215&view=diff
==============================================================================
--- jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java
(original)
+++ jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/TextRun.java
Sun Feb 12 11:01:07 2006
@@ -285,9 +285,9 @@
/**
* Ensure a StyleTextPropAtom is present for this run,
- * by adding if required
+ * by adding if required. Normally for internal TextRun use.
*/
- private synchronized void ensureStyleAtomPresent() {
+ public synchronized void ensureStyleAtomPresent() {
if(_styleAtom != null) {
// All there
return;
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java
URL:
http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java?rev=377215&r1=377214&r2=377215&view=diff
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/StyleTextPropAtom.java
Sun Feb 12 11:01:07 2006
@@ -84,8 +84,8 @@
public void setCharacterStyles(LinkedList cs) { charStyles = cs; }
/** All the different kinds of paragraph properties we might handle */
- public TextProp[] paragraphTextPropTypes = new TextProp[] {
- new BitMaskTextProp(2, 0xF, new String[] {
+ public static TextProp[] paragraphTextPropTypes = new TextProp[] {
+ new BitMaskTextProp(2, 0xF, "paragraph_flags",
new String[] {
"bullet", "bullet.hardfont",
"bullet.hardcolor", "bullet.hardsize"}
),
@@ -105,7 +105,7 @@
new TextProp(2, 0xA0000, "para_unknown_6")
};
/** All the different kinds of character properties we might handle */
- public TextProp[] characterTextPropTypes = new TextProp[] {
+ public static TextProp[] characterTextPropTypes = new TextProp[] {
new CharFlagsTextProp(),
new TextProp(2, 0x10000, "font.index"),
new TextProp(2, 0x20000, "font.size"),
@@ -329,6 +329,48 @@
public int getCharactersCovered() { return charactersCovered; }
/** Fetch the TextProps that define this styling */
public LinkedList getTextPropList() { return textPropList; }
+
+ /** Fetch the TextProp with this name, or null if it isn't
present */
+ public TextProp findByName(String textPropName) {
+ for(int i=0; i<textPropList.size(); i++) {
+ TextProp prop = (TextProp)textPropList.get(i);
+ if(prop.getName().equals(textPropName)) {
+ return prop;
+ }
+ }
+ return null;
+ }
+
+ /** Add the TextProp with this name to the list */
+ public TextProp addWithName(String name) {
+ // Find the base TextProp to base on
+ TextProp base = null;
+ for(int i=0; i <
StyleTextPropAtom.characterTextPropTypes.length; i++) {
+
if(StyleTextPropAtom.characterTextPropTypes[i].getName().equals(name)) {
+ base =
StyleTextPropAtom.characterTextPropTypes[i];
+ }
+ }
+ for(int i=0; i <
StyleTextPropAtom.paragraphTextPropTypes.length; i++) {
+
if(StyleTextPropAtom.paragraphTextPropTypes[i].getName().equals(name)) {
+ base =
StyleTextPropAtom.paragraphTextPropTypes[i];
+ }
+ }
+ if(base == null) {
+ throw new IllegalArgumentException("No TextProp
with name " + name + " is defined to add from");
+ }
+
+ // Add a copy of this property, in the right place to
the list
+ TextProp textProp = (TextProp)base.clone();
+ int pos = 0;
+ for(int i=0; i<textPropList.size(); i++) {
+ TextProp curProp =
(TextProp)textPropList.get(i);
+ if(textProp.getMask() > curProp.getMask()) {
+ pos++;
+ }
+ }
+ textPropList.add(pos, textProp);
+ return textProp;
+ }
/**
* Create a new collection of text properties (be they paragraph
@@ -504,9 +546,10 @@
/** Fetch the list of if the sub properties match or not */
public boolean[] getSubPropMatches() { return subPropMatches; }
- private BitMaskTextProp(int sizeOfDataBlock, int maskInHeader,
String[] subPropNames) {
+ private BitMaskTextProp(int sizeOfDataBlock, int maskInHeader,
String overallName, String[] subPropNames) {
super(sizeOfDataBlock,maskInHeader,"bitmask");
this.subPropNames = subPropNames;
+ this.propName = overallName;
subPropMasks = new int[subPropNames.length];
subPropMatches = new boolean[subPropNames.length];
}
@@ -545,6 +588,7 @@
} else {
dataValue -= subPropMasks[idx];
}
+ subPropMatches[idx] = value;
}
public Object clone(){
@@ -575,7 +619,7 @@
public static final int ENABLE_NUMBERING_2_IDX = 12;
private CharFlagsTextProp() {
- super(2,0xffff, new String[] {
+ super(2,0xffff, "char_flags", new String[] {
"bold", // 0x0001
"italic", // 0x0002
"underline", // 0x0004
Modified:
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java
URL:
http://svn.apache.org/viewcvs/jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java?rev=377215&r1=377214&r2=377215&view=diff
==============================================================================
---
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java
(original)
+++
jakarta/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/usermodel/RichTextRun.java
Sun Feb 12 11:01:07 2006
@@ -20,6 +20,7 @@
package org.apache.poi.hslf.usermodel;
import org.apache.poi.hslf.model.TextRun;
+import org.apache.poi.hslf.record.StyleTextPropAtom.CharFlagsTextProp;
import org.apache.poi.hslf.record.StyleTextPropAtom.TextPropCollection;
/**
@@ -123,6 +124,39 @@
startPos = startAt;
}
+
+ // --------------- Internal helpers on rich text properties -------
+ private boolean isCharFlagsTextPropVal(int index) {
+ if(characterStyle == null) { return false; }
+
+ CharFlagsTextProp cftp = (CharFlagsTextProp)
+ characterStyle.findByName("char_flags");
+
+ if(cftp == null) { return false; }
+ return cftp.getSubValue(index);
+ }
+ private void setCharFlagsTextPropVal(int index, boolean value) {
+ if(characterStyle == null) {
+ parentRun.ensureStyleAtomPresent();
+ }
+
+ CharFlagsTextProp cftp = (CharFlagsTextProp)
+ characterStyle.findByName("char_flags");
+ if(cftp == null) {
+ cftp =
(CharFlagsTextProp)characterStyle.addWithName("char_flags");
+ }
+
+ cftp.setSubValue(value,index);
+ }
+
+ // --------------- Friendly getters / setters on rich text properties
-------
+ public boolean isBold() {
+ return isCharFlagsTextPropVal(CharFlagsTextProp.BOLD_IDX);
+ }
+
+ public void setBold(boolean bold) {
+ setCharFlagsTextPropVal(CharFlagsTextProp.BOLD_IDX, bold);
+ }
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/