Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /* ====================================================================
     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
    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;
For a given run of characters, holds the properties (which could be paragraph properties or character properties). Used to hold the number of characters affected, the list of active properties, and the random reserved field if required.
 public class TextPropCollection {
 	private int charactersCovered;
 	private short reservedField;
     private int maskSpecial = 0;
     public int getSpecialMask() { return ; }

Fetch the number of characters this styling applies to
 	public int getCharactersCovered() { return ; }
Fetch the TextProps that define this styling
 	public LinkedList<TextPropgetTextPropList() { return ; }

Fetch the TextProp with this name, or null if it isn't present
 	public TextProp findByName(String textPropName) {
 		for(int i=0; i<.size(); i++) {
 			TextProp prop = .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 < ..i++) {
 		for(int i=0; i < ..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<.size(); i++) {
 			TextProp curProp = .get(i);
 			if(textProp.getMask() > curProp.getMask()) {
 		return textProp;

For an existing set of text properties, build the list of properties coded for in a given run of properties.

the number of bytes that were used encoding the properties list
 	public int buildTextPropList(int containsFieldTextProp[] potentialPropertiesbyte[] dataint dataOffset) {
 		int bytesPassed = 0;
 		// For each possible entry, see if we match the mask
 		// If we do, decode that, save it, and shuffle on
 		for(int i=0; i<potentialProperties.lengthi++) {
 			// Check there's still data left to read
			// Check if this property is found in the mask
			if((containsField & potentialProperties[i].getMask()) != 0) {
                if(dataOffset+bytesPassed >= data.length) {
                    // Out of data, can't be any more properties to go
                    // remember the mask and return
                     |= potentialProperties[i].getMask();
                    return bytesPassed;
				// Bingo, data contains this property
				TextProp prop = (TextProp)potentialProperties[i].clone();
				int val = 0;
				if(prop.getSize() == 2) {
					val = LittleEndian.getShort(data,dataOffset+bytesPassed);
else if(prop.getSize() == 4){
					val = LittleEndian.getInt(data,dataOffset+bytesPassed);
else if (prop.getSize() == 0){
                    //remember "special" bits.
                     |= potentialProperties[i].getMask();
				bytesPassed += prop.getSize();
		// Return how many bytes were used
		return bytesPassed;

Create a new collection of text properties (be they paragraph or character) which will be groked via a subsequent call to buildTextPropList().
	public TextPropCollection(int charactersCoveredshort reservedField) {
		this. = charactersCovered;
		this. = reservedField;

Create a new collection of text properties (be they paragraph or character) for a run of text without any
	public TextPropCollection(int textSize) {
		 = textSize;

Update the size of the text that this set of properties applies to
	public void updateTextSize(int textSize) {
		 = textSize;

Writes out to disk the header, and then all the properties
	public void writeOut(OutputStream othrows IOException {
		// First goes the number of characters we affect
		// Then we have the reserved field if required
		if( > -1) {
		// Then the mask field
		int mask = ;
		for(int i=0; i<.size(); i++) {
			TextProp textProp = (TextProp).get(i);
            //sometimes header indicates that the bitmask is present but its value is 0
            if (textProp instanceof BitMaskTextProp) {
                if(mask == 0) mask |=  textProp.getWriteMask();
            else {
                mask |= textProp.getWriteMask();
		// Then the contents of all the properties
		for(int i=0; i<.size(); i++) {
			TextProp textProp = .get(i);
			int val = textProp.getValue();
			if(textProp.getSize() == 2) {
else if(textProp.getSize() == 4){
    public short getReservedField(){
        return ;
    public void setReservedField(short val){
         = val;
New to GrepCode? Check out our FAQ X