You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2014/03/15 09:14:36 UTC
svn commit: r1577802 - in /poi/trunk/src/scratchpad/src/org/apache/poi/hslf:
model/textproperties/IndentProp.java record/MasterTextPropAtom.java
record/RecordTypes.java record/TxMasterStyleAtom.java
Author: nick
Date: Sat Mar 15 08:14:36 2014
New Revision: 1577802
URL: http://svn.apache.org/r1577802
Log:
Implement MasterTextPropAtom, which provides the indents for a run of text, needed for #56260
Added:
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/IndentProp.java
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java
Modified:
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordTypes.java
poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java
Added: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/IndentProp.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/IndentProp.java?rev=1577802&view=auto
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/IndentProp.java (added)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/model/textproperties/IndentProp.java Sat Mar 15 08:14:36 2014
@@ -0,0 +1,65 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hslf.model.textproperties;
+
+import org.apache.poi.hslf.record.TxMasterStyleAtom;
+
+/**
+ * Definition of the indent level of some text. Defines how many
+ * characters it applies to, and what indent level they share.
+ *
+ * This is defined by the slightly confusingly named MasterTextPropRun
+ */
+public class IndentProp {
+ private int charactersCovered;
+ private short indentLevel;
+
+ /**
+ * Generate the definition of a given text indent
+ */
+ public IndentProp(int charactersCovered, short indentLevel) {
+ this.charactersCovered = charactersCovered;
+ this.indentLevel = indentLevel;
+ }
+
+ /** Fetch the number of characters this styling applies to */
+ public int getCharactersCovered() { return charactersCovered; }
+
+ public int getIndentLevel() {
+ return (int)indentLevel;
+ }
+
+ /**
+ * Sets the indent level, which can be between 0 and 4
+ */
+ public void setIndentLevel(int indentLevel) {
+ if (indentLevel >= TxMasterStyleAtom.MAX_INDENT ||
+ indentLevel < 0) {
+ throw new IllegalArgumentException("Indent must be between 0 and 4");
+ }
+ this.indentLevel = (short)indentLevel;
+ }
+
+ /**
+ * Update the size of the text that this set of properties
+ * applies to
+ */
+ public void updateTextSize(int textSize) {
+ charactersCovered = textSize;
+ }
+}
\ No newline at end of file
Added: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java?rev=1577802&view=auto
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java (added)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/MasterTextPropAtom.java Sat Mar 15 08:14:36 2014
@@ -0,0 +1,152 @@
+/* ====================================================================
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+==================================================================== */
+
+package org.apache.poi.hslf.record;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.apache.poi.hslf.model.textproperties.IndentProp;
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.POILogger;
+
+/**
+ * Specifies the Indent Level for the text
+ */
+public final class MasterTextPropAtom extends RecordAtom {
+ /**
+ * Record header.
+ */
+ private byte[] _header;
+
+ /**
+ * Record data.
+ */
+ private byte[] _data;
+
+ // indent details
+ private List<IndentProp> indents;
+
+ /**
+ * Constructs a new empty master text prop atom.
+ */
+ public MasterTextPropAtom() {
+ _header = new byte[8];
+ _data = new byte[0];
+
+ LittleEndian.putShort(_header, 2, (short)getRecordType());
+ LittleEndian.putInt(_header, 4, _data.length);
+
+ indents = new ArrayList<IndentProp>();
+ }
+
+ /**
+ * Constructs the ruler atom record from its
+ * source data.
+ *
+ * @param source the source data as a byte array.
+ * @param start the start offset into the byte array.
+ * @param len the length of the slice in the byte array.
+ */
+ protected MasterTextPropAtom(byte[] source, int start, int len) {
+ // Get the header.
+ _header = new byte[8];
+ System.arraycopy(source,start,_header,0,8);
+
+ // Get the record data.
+ _data = new byte[len-8];
+ System.arraycopy(source,start+8,_data,0,len-8);
+
+ try {
+ read();
+ } catch (Exception e){
+ logger.log(POILogger.ERROR, "Failed to parse MasterTextPropAtom: " + e.getMessage());
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Gets the record type.
+ *
+ * @return the record type.
+ */
+ public long getRecordType() {
+ return RecordTypes.MasterTextPropAtom.typeID;
+ }
+
+ /**
+ * Write the contents of the record back, so it can be written
+ * to disk.
+ *
+ * @param out the output stream to write to.
+ * @throws java.io.IOException if an error occurs.
+ */
+ public void writeOut(OutputStream out) throws IOException {
+ write();
+ out.write(_header);
+ out.write(_data);
+ }
+
+ /**
+ * Write the internal variables to the record bytes
+ */
+ private void write() {
+ int pos = 0;
+ _data = new byte[indents.size()*6];
+ for (IndentProp prop : indents) {
+ LittleEndian.putInt(_data, pos, prop.getCharactersCovered());
+ LittleEndian.putShort(_data, pos+4, (short)prop.getIndentLevel());
+ pos += 6;
+ }
+ }
+
+ /**
+ * Read the record bytes and initialize the internal variables
+ */
+ private void read() {
+ int pos = 0;
+ indents = new ArrayList<IndentProp>(_data.length/6);
+
+ while (pos <= _data.length - 6) {
+ int count = LittleEndian.getInt(_data, pos);
+ short indent = LittleEndian.getShort(_data, pos+4);
+ indents.add(new IndentProp(count, indent));
+ pos += 6;
+ }
+ }
+
+ /**
+ * Returns the indent that applies at the given text offset
+ */
+ public int getIndentAt(int offset) {
+ int charsUntil = 0;
+ for (IndentProp prop : indents) {
+ charsUntil += prop.getCharactersCovered();
+ if (offset < charsUntil) {
+ return prop.getIndentLevel();
+ }
+ }
+ return -1;
+ }
+
+ public List<IndentProp> getIndents() {
+ return Collections.unmodifiableList(indents);
+ }
+}
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordTypes.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordTypes.java?rev=1577802&r1=1577801&r2=1577802&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordTypes.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/RecordTypes.java Sat Mar 15 08:14:36 2014
@@ -85,7 +85,7 @@ public final class RecordTypes {
public static final Type TextHeaderAtom = new Type(3999,TextHeaderAtom.class);
public static final Type TextCharsAtom = new Type(4000,TextCharsAtom.class);
public static final Type StyleTextPropAtom = new Type(4001, StyleTextPropAtom.class);//0x0fa1 RT_StyleTextPropAtom
- public static final Type BaseTextPropAtom = new Type(4002,null);
+ public static final Type MasterTextPropAtom = new Type(4002, MasterTextPropAtom.class);
public static final Type TxMasterStyleAtom = new Type(4003,TxMasterStyleAtom.class);
public static final Type TxCFStyleAtom = new Type(4004,null);
public static final Type TxPFStyleAtom = new Type(4005,null);
Modified: poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java?rev=1577802&r1=1577801&r2=1577802&view=diff
==============================================================================
--- poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java (original)
+++ poi/trunk/src/scratchpad/src/org/apache/poi/hslf/record/TxMasterStyleAtom.java Sat Mar 15 08:14:36 2014
@@ -17,12 +17,14 @@
package org.apache.poi.hslf.record;
-import org.apache.poi.util.LittleEndian;
-
-import java.io.OutputStream;
import java.io.IOException;
+import java.io.OutputStream;
-import org.apache.poi.hslf.model.textproperties.*;
+import org.apache.poi.hslf.model.textproperties.CharFlagsTextProp;
+import org.apache.poi.hslf.model.textproperties.ParagraphFlagsTextProp;
+import org.apache.poi.hslf.model.textproperties.TextProp;
+import org.apache.poi.hslf.model.textproperties.TextPropCollection;
+import org.apache.poi.util.LittleEndian;
/**
* TxMasterStyleAtom atom (4003).
@@ -41,11 +43,10 @@ import org.apache.poi.hslf.model.textpro
* @author Yegor Kozlov
*/
public final class TxMasterStyleAtom extends RecordAtom {
-
/**
- * Maximum number of indentatio levels allowed in PowerPoint documents
+ * Maximum number of indentation levels allowed in PowerPoint documents
*/
- private static final int MAX_INDENT = 5;
+ public static final int MAX_INDENT = 5;
private byte[] _header;
private static long _type = 4003;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org