@authorPeter B. West@version
package org.apache.fop.fo;
import java.lang.CloneNotSupportedException;
import java.util.Set;
import java.util.BitSet;
import java.util.HashSet;
import java.util.HashMap;
import java.util.List;
import java.util.ListIterator;
import java.util.Iterator;
import java.util.Arrays;
import java.util.Collections;
import org.apache.fop.fo.expr.PropertyException;
import org.apache.fop.datatypes.PropertyValue;
import org.apache.fop.datatypes.PropertyValueList;
import org.apache.fop.fo.PropNames;
import org.apache.fop.fo.PropertyConsts;
import org.apache.fop.datastructs.ROIntArray;
import org.apache.fop.datastructs.ROBitSet;
import org.apache.fop.datatypes.Ints;
public class ShorthandPropSets {
private static final String tag = "$Name$";
private static final String revision = "$Revision$";
private static final String packageName = "org.apache.fop.fo";
private static final int[] backgroundPosition = {
PropNames.BACKGROUND_POSITION_HORIZONTAL
,PropNames.BACKGROUND_POSITION_VERTICAL
};
private static final int[] borderColor = {
PropNames.BORDER_TOP_COLOR
,PropNames.BORDER_RIGHT_COLOR
,PropNames.BORDER_BOTTOM_COLOR
,PropNames.BORDER_LEFT_COLOR
};
private static final int[] borderStyle = {
PropNames.BORDER_TOP_STYLE
,PropNames.BORDER_RIGHT_STYLE
,PropNames.BORDER_BOTTOM_STYLE
,PropNames.BORDER_LEFT_STYLE
};
private static final int[] borderWidth = {
PropNames.BORDER_TOP_WIDTH
,PropNames.BORDER_RIGHT_WIDTH
,PropNames.BORDER_BOTTOM_WIDTH
,PropNames.BORDER_LEFT_WIDTH
};
public static final ROIntArray backgroundExpansion =
new ROIntArray(new int[][] {
new int[] {
PropNames.BACKGROUND_COLOR
,PropNames.BACKGROUND_IMAGE
,PropNames.BACKGROUND_REPEAT
,PropNames.BACKGROUND_ATTACHMENT
,PropNames.BACKGROUND_POSITION_HORIZONTAL
,PropNames.BACKGROUND_POSITION_VERTICAL
}, backgroundPosition});
public static final ROIntArray backgroundPositionExpansion =
new ROIntArray(backgroundPosition);
public static final ROIntArray borderExpansion =
new ROIntArray(new int[][] { borderStyle, borderColor, borderWidth });
public static final ROIntArray borderStyleExpansion =
new ROIntArray(borderStyle);
public static final ROIntArray borderColorExpansion =
new ROIntArray(borderColor);
public static final ROIntArray borderWidthExpansion =
new ROIntArray(borderWidth);
public static final ROIntArray borderTopExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_TOP_STYLE
,PropNames.BORDER_TOP_COLOR
,PropNames.BORDER_TOP_WIDTH
});
public static final ROIntArray borderRightExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_RIGHT_STYLE
,PropNames.BORDER_RIGHT_COLOR
,PropNames.BORDER_RIGHT_WIDTH
});
public static final ROIntArray borderBottomExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_BOTTOM_STYLE
,PropNames.BORDER_BOTTOM_COLOR
,PropNames.BORDER_BOTTOM_WIDTH
});
public static final ROIntArray borderLeftExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_LEFT_STYLE
,PropNames.BORDER_LEFT_COLOR
,PropNames.BORDER_LEFT_WIDTH
});
border-spacing
public static final ROIntArray borderSpacingExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_SEPARATION
});
public static final ROIntArray cueExpansion =
new ROIntArray(new int[] {
PropNames.CUE_BEFORE
,PropNames.CUE_AFTER
});
fontline-height
public static final ROIntArray fontExpansion =
new ROIntArray(new int[] {
PropNames.FONT_FAMILY
,PropNames.FONT_STYLE
,PropNames.FONT_VARIANT
,PropNames.FONT_WEIGHT
,PropNames.FONT_SIZE
,PropNames.LINE_HEIGHT
,PropNames.FONT_SIZE_ADJUST
,PropNames.FONT_STRETCH
,PropNames.FONT_SELECTION_STRATEGY
});
public static final ROIntArray marginExpansion =
new ROIntArray(new int[] {
PropNames.MARGIN_TOP
,PropNames.MARGIN_RIGHT
,PropNames.MARGIN_BOTTOM
,PropNames.MARGIN_LEFT
});
public static final ROIntArray paddingExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_TOP
,PropNames.PADDING_RIGHT
,PropNames.PADDING_BOTTOM
,PropNames.PADDING_LEFT
});
public static final ROIntArray pageBreakAfterExpansion =
new ROIntArray(new int[] {
PropNames.BREAK_AFTER
,PropNames.KEEP_WITH_NEXT
});
public static final ROIntArray pageBreakBeforeExpansion =
new ROIntArray(new int[] {
PropNames.BREAK_BEFORE
,PropNames.KEEP_WITH_PREVIOUS
});
public static final ROIntArray pageBreakInsideExpansion =
new ROIntArray(new int[] {
PropNames.KEEP_TOGETHER
});
public static final ROIntArray pauseExpansion =
new ROIntArray(new int[] {
PropNames.PAUSE_BEFORE
,PropNames.PAUSE_AFTER
});
public static final ROIntArray positionExpansion =
new ROIntArray(new int[] {
PropNames.RELATIVE_POSITION
,PropNames.ABSOLUTE_POSITION
});
public static final ROIntArray sizeExpansion =
new ROIntArray(new int[] {
PropNames.PAGE_HEIGHT
,PropNames.PAGE_WIDTH
});
public static final ROIntArray verticalAlignExpansion =
new ROIntArray(new int[] {
PropNames.ALIGNMENT_BASELINE
,PropNames.ALIGNMENT_ADJUST
,PropNames.BASELINE_SHIFT
,PropNames.DOMINANT_BASELINE
});
public static final ROIntArray whiteSpaceExpansion =
new ROIntArray(new int[] {
PropNames.LINEFEED_TREATMENT
,PropNames.WHITE_SPACE_COLLAPSE
,PropNames.WHITE_SPACE_TREATMENT
,PropNames.WRAP_OPTION
});
public static final ROIntArray xmlLangExpansion =
new ROIntArray(new int[] {
PropNames.COUNTRY
,PropNames.LANGUAGE
});
private static final int[] shorthands = {
PropNames.BACKGROUND
,PropNames.BACKGROUND_POSITION
,PropNames.BORDER
,PropNames.BORDER_STYLE
,PropNames.BORDER_COLOR
,PropNames.BORDER_WIDTH
,PropNames.BORDER_TOP
,PropNames.BORDER_RIGHT
,PropNames.BORDER_BOTTOM
,PropNames.BORDER_LEFT
,PropNames.BORDER_SPACING
,PropNames.CUE
,PropNames.FONT
,PropNames.MARGIN
,PropNames.PADDING
,PropNames.PAGE_BREAK_AFTER
,PropNames.PAGE_BREAK_BEFORE
,PropNames.PAGE_BREAK_INSIDE
,PropNames.PAUSE
,PropNames.POSITION
,PropNames.SIZE
,PropNames.VERTICAL_ALIGN
,PropNames.WHITE_SPACE
,PropNames.XML_LANG
};
ROIntArray</i><b> in same order as <i>shorthands</i>ROIntArray
private static final ROIntArray[] shorthandExpansions = {
backgroundExpansion
,backgroundPositionExpansion
,borderExpansion
,borderStyleExpansion
,borderColorExpansion
,borderWidthExpansion
,borderTopExpansion
,borderRightExpansion
,borderBottomExpansion
,borderLeftExpansion
,borderSpacingExpansion
,cueExpansion
,fontExpansion
,marginExpansion
,paddingExpansion
,pageBreakAfterExpansion
,pageBreakBeforeExpansion
,pageBreakInsideExpansion
,pauseExpansion
,positionExpansion
,sizeExpansion
,verticalAlignExpansion
,whiteSpaceExpansion
,xmlLangExpansion
};
private static final HashMap shorthandMap;
static {
shorthandMap = new HashMap(shorthands.length);
for (int i = 0; i < shorthands.length; i++) {
shorthandMap.put
((Object)(Ints.consts.get(shorthands[i])),
(Object)(Ints.consts.get(i)));
}
}
public static final ROIntArray roShorthands =
new ROIntArray(shorthands);
public static final ROBitSet shorthandPropSet;
private static final BitSet shorthandpropset;
static {
shorthandpropset = new BitSet(PropNames.LAST_PROPERTY_INDEX + 1);
for (int i = 0; i < shorthands.length; i++)
shorthandpropset.set(shorthands[i]);
shorthandPropSet = new ROBitSet(shorthandpropset);
}
@paramproperty@return@exception<tt>PropertyException</tt>
public static ROIntArray getSHandExpansionSet(int property)
throws PropertyException
{
Integer sHIndex =
(Integer)(shorthandMap.get(Ints.consts.get(property)));
if (sHIndex == null) {
String propname = PropNames.getPropertyName(property);
throw new PropertyException
(propname + " not a shorthand property");
}
return shorthandExpansions[sHIndex.intValue()];
}
property@paramvalueproperty@return@exceptionPropertyException
public static PropertyValueList expandAndCopySHand(PropertyValue value)
throws PropertyException
{
int property = value.getProperty();
ROIntArray expansion = getSHandExpansionSet(property);
PropertyValueList list = new PropertyValueList(property);
return copyValueToSet(value, expansion, list);
}
references@paramfoTree@paramproperty@return@exception<tt>PropertyException</tt>
property@paramexpansionList@paramelement@return@exception<tt>PropertyException</tt>
public static PropertyValueList overrideSHandElement
(PropertyValueList expansionList, PropertyValue element)
throws PropertyException
{
int elementProp = element.getProperty();
ListIterator elements = expansionList.listIterator();
while (elements.hasNext()) {
PropertyValue next = (PropertyValue)(elements.next());
if (next.getProperty() == elementProp) {
elements.set(element);
return expansionList;
}
}
throw new PropertyException
("Unmatched property " + elementProp +
" in expansion list for " + expansionList.getProperty());
}
property@paramexpansionList@paramlist@return@exception<tt>PropertyException</tt>
public static PropertyValueList overrideSHandElements
(PropertyValueList expansionList, PropertyValueList list)
throws PropertyException
{
int listsize = list.size();
Object[] listrefs = new Object[listsize];
int[] listprops = new int[listsize];
boolean[] propseen = new boolean[listsize];
Iterator listels = list.iterator();
int i = 0;
while (listels.hasNext()) {
listrefs[i] = listels.next();
listprops[i] = ((PropertyValue)listrefs[i]).getProperty();
i++;
}
ListIterator elements = expansionList.listIterator();
while (elements.hasNext()) {
PropertyValue next = (PropertyValue)(elements.next());
int expprop = next.getProperty();
for (i = 0; i < listsize; i++) {
if (expprop != listprops[i]) continue;
elements.set(listrefs[i]);
propseen[i] = true;
}
}
String unmatched = "";
boolean someunmatched = false;
for (i = 0; i < listsize; i++) {
if ( ! propseen[i]) {
someunmatched = true;
unmatched = unmatched + " " +
PropNames.getPropertyName(listprops[i]);
}
}
if (someunmatched)
throw new PropertyException
("Unmatched properties:" + unmatched +
" : in expansion list for " + expansionList.getProperty());
return expansionList;
}
public static final ROIntArray blockProgressionDimensionCopyExpansion =
new ROIntArray(new int[] {
PropNames.BLOCK_PROGRESSION_DIMENSION_MINIMUM
,PropNames.BLOCK_PROGRESSION_DIMENSION_OPTIMUM
,PropNames.BLOCK_PROGRESSION_DIMENSION_MAXIMUM
});
public static final ROIntArray blockProgressionDimensionNonCopyExpansion =
new ROIntArray(new int[] {});
public static final ROIntArray borderAfterWidthCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_AFTER_WIDTH_LENGTH
});
public static final ROIntArray borderAfterWidthNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_AFTER_WIDTH_CONDITIONALITY
});
public static final ROIntArray borderBeforeWidthCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_BEFORE_WIDTH_LENGTH
});
public static final ROIntArray borderBeforeWidthNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_BEFORE_WIDTH_CONDITIONALITY
});
public static final ROIntArray borderEndWidthCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_END_WIDTH_LENGTH
});
public static final ROIntArray borderEndWidthNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_END_WIDTH_CONDITIONALITY
});
public static final ROIntArray borderStartWidthCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_START_WIDTH_LENGTH
});
public static final ROIntArray borderStartWidthNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_START_WIDTH_CONDITIONALITY
});
public static final ROIntArray borderSeparationCopyExpansion =
new ROIntArray(new int[] {
PropNames.BORDER_SEPARATION_BLOCK_PROGRESSION_DIRECTION
,PropNames.BORDER_SEPARATION_INLINE_PROGRESSION_DIRECTION
});
public static final ROIntArray borderSeparationNonCopyExpansion =
new ROIntArray(new int[] {});
public static final ROIntArray inlineProgressionDimensionCopyExpansion =
new ROIntArray(new int[] {
PropNames.INLINE_PROGRESSION_DIMENSION_MINIMUM
,PropNames.INLINE_PROGRESSION_DIMENSION_OPTIMUM
,PropNames.INLINE_PROGRESSION_DIMENSION_MAXIMUM
});
public static final ROIntArray inlineProgressionDimensionNonCopyExpansion =
new ROIntArray(new int[] {});
public static final ROIntArray keepTogetherCopyExpansion =
new ROIntArray(new int[] {
PropNames.KEEP_TOGETHER_WITHIN_LINE
,PropNames.KEEP_TOGETHER_WITHIN_COLUMN
,PropNames.KEEP_TOGETHER_WITHIN_PAGE
});
public static final ROIntArray keepTogetherNonCopyExpansion =
new ROIntArray(new int[] {});
public static final ROIntArray keepWithNextCopyExpansion =
new ROIntArray(new int[] {
PropNames.KEEP_WITH_NEXT_WITHIN_LINE
,PropNames.KEEP_WITH_NEXT_WITHIN_COLUMN
,PropNames.KEEP_WITH_NEXT_WITHIN_PAGE
});
public static final ROIntArray keepWithNextNonCopyExpansion =
new ROIntArray(new int[] {});
public static final ROIntArray keepWithPreviousCopyExpansion =
new ROIntArray(new int[] {
PropNames.KEEP_WITH_PREVIOUS_WITHIN_LINE
,PropNames.KEEP_WITH_PREVIOUS_WITHIN_COLUMN
,PropNames.KEEP_WITH_PREVIOUS_WITHIN_PAGE
});
public static final ROIntArray keepWithPreviousNonCopyExpansion =
new ROIntArray(new int[] {});
public static final ROIntArray leaderLengthCopyExpansion =
new ROIntArray(new int[] {
PropNames.LEADER_LENGTH_MINIMUM
,PropNames.LEADER_LENGTH_OPTIMUM
,PropNames.LEADER_LENGTH_MAXIMUM
});
public static final ROIntArray leaderLengthNonCopyExpansion =
new ROIntArray(new int[] {});
public static final ROIntArray letterSpacingCopyExpansion =
new ROIntArray(new int[] {
PropNames.LETTER_SPACING_MINIMUM
,PropNames.LETTER_SPACING_OPTIMUM
,PropNames.LETTER_SPACING_MAXIMUM
});
public static final ROIntArray letterSpacingNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.LETTER_SPACING_CONDITIONALITY
,PropNames.LETTER_SPACING_PRECEDENCE
});
public static final ROIntArray lineHeightCopyExpansion =
new ROIntArray(new int[] {
PropNames.LINE_HEIGHT_MINIMUM
,PropNames.LINE_HEIGHT_OPTIMUM
,PropNames.LINE_HEIGHT_MAXIMUM
});
public static final ROIntArray lineHeightNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.LINE_HEIGHT_CONDITIONALITY
,PropNames.LINE_HEIGHT_PRECEDENCE
});
public static final ROIntArray paddingAfterCopyExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_AFTER_LENGTH
});
public static final ROIntArray paddingAfterNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_AFTER_CONDITIONALITY
});
public static final ROIntArray paddingBeforeCopyExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_BEFORE_LENGTH
});
public static final ROIntArray paddingBeforeNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_BEFORE_CONDITIONALITY
});
public static final ROIntArray paddingEndCopyExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_END_LENGTH
});
public static final ROIntArray paddingEndNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_END_CONDITIONALITY
});
public static final ROIntArray paddingStartCopyExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_START_LENGTH
});
public static final ROIntArray paddingStartNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.PADDING_START_CONDITIONALITY
});
public static final ROIntArray spaceAfterCopyExpansion =
new ROIntArray(new int[] {
PropNames.SPACE_AFTER_MINIMUM
,PropNames.SPACE_AFTER_OPTIMUM
,PropNames.SPACE_AFTER_MAXIMUM
});
public static final ROIntArray spaceAfterNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.SPACE_AFTER_CONDITIONALITY
,PropNames.SPACE_AFTER_PRECEDENCE
});
public static final ROIntArray spaceBeforeCopyExpansion =
new ROIntArray(new int[] {
PropNames.SPACE_BEFORE_MINIMUM
,PropNames.SPACE_BEFORE_OPTIMUM
,PropNames.SPACE_BEFORE_MAXIMUM
});
public static final ROIntArray spaceBeforeNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.SPACE_BEFORE_CONDITIONALITY
,PropNames.SPACE_BEFORE_PRECEDENCE
});
public static final ROIntArray spaceEndCopyExpansion =
new ROIntArray(new int[] {
PropNames.SPACE_END_MINIMUM
,PropNames.SPACE_END_OPTIMUM
,PropNames.SPACE_END_MAXIMUM
});
public static final ROIntArray spaceEndNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.SPACE_END_CONDITIONALITY
,PropNames.SPACE_END_PRECEDENCE
});
public static final ROIntArray spaceStartCopyExpansion =
new ROIntArray(new int[] {
PropNames.SPACE_START_MINIMUM
,PropNames.SPACE_START_OPTIMUM
,PropNames.SPACE_START_MAXIMUM
});
public static final ROIntArray spaceStartNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.SPACE_START_CONDITIONALITY
,PropNames.SPACE_START_PRECEDENCE
});
public static final ROIntArray wordSpacingCopyExpansion =
new ROIntArray(new int[] {
PropNames.WORD_SPACING_MINIMUM
,PropNames.WORD_SPACING_OPTIMUM
,PropNames.WORD_SPACING_MAXIMUM
});
public static final ROIntArray wordSpacingNonCopyExpansion =
new ROIntArray(new int[] {
PropNames.WORD_SPACING_CONDITIONALITY
,PropNames.WORD_SPACING_PRECEDENCE
});
private static final int[] compounds = {
PropNames.BLOCK_PROGRESSION_DIMENSION
,PropNames.BORDER_AFTER_WIDTH
,PropNames.BORDER_BEFORE_WIDTH
,PropNames.BORDER_END_WIDTH
,PropNames.BORDER_START_WIDTH
,PropNames.BORDER_SEPARATION
,PropNames.INLINE_PROGRESSION_DIMENSION
,PropNames.KEEP_TOGETHER
,PropNames.KEEP_WITH_NEXT
,PropNames.KEEP_WITH_PREVIOUS
,PropNames.LEADER_LENGTH
,PropNames.LETTER_SPACING
,PropNames.LINE_HEIGHT
,PropNames.PADDING_AFTER
,PropNames.PADDING_BEFORE
,PropNames.PADDING_END
,PropNames.PADDING_START
,PropNames.SPACE_AFTER
,PropNames.SPACE_BEFORE
,PropNames.SPACE_END
,PropNames.SPACE_START
,PropNames.WORD_SPACING
};
private static final HashMap compoundMap;
static {
compoundMap = new HashMap(compounds.length);
for (int i = 0; i < compounds.length; i++) {
compoundMap.put
((Object)(Ints.consts.get(compounds[i])),
(Object)(Ints.consts.get(i)));
}
}
public static final ROIntArray roCompounds;
static {
roCompounds = new ROIntArray(compounds);
}
public static final ROBitSet compoundPropSet;
private static final BitSet compoundpropset;
public static final ROBitSet shorthandCompoundProps;
private static final BitSet shorthandcompoundprops;
static {
compoundpropset = new BitSet(PropNames.LAST_PROPERTY_INDEX + 1);
for (int i = 0; i < compounds.length; i++)
compoundpropset.set(compounds[i]);
compoundPropSet = new ROBitSet(compoundpropset);
shorthandcompoundprops = new BitSet();
shorthandcompoundprops.or(compoundpropset);
shorthandcompoundprops.or(shorthandpropset);
shorthandCompoundProps = new ROBitSet(shorthandcompoundprops);
}
ROIntArraycompoundsROIntArray
private static final ROIntArray[] compoundCopyExpansions = {
blockProgressionDimensionCopyExpansion
,borderAfterWidthCopyExpansion
,borderBeforeWidthCopyExpansion
,borderEndWidthCopyExpansion
,borderStartWidthCopyExpansion
,borderSeparationCopyExpansion
,inlineProgressionDimensionCopyExpansion
,keepTogetherCopyExpansion
,keepWithNextCopyExpansion
,keepWithPreviousCopyExpansion
,leaderLengthCopyExpansion
,letterSpacingCopyExpansion
,lineHeightCopyExpansion
,paddingAfterCopyExpansion
,paddingBeforeCopyExpansion
,paddingEndCopyExpansion
,paddingStartCopyExpansion
,spaceAfterCopyExpansion
,spaceBeforeCopyExpansion
,spaceEndCopyExpansion
,spaceStartCopyExpansion
,wordSpacingCopyExpansion
};
ROIntArraycompoundsROIntArray
private static final ROIntArray[] compoundNonCopyExpansions = {
blockProgressionDimensionNonCopyExpansion
,borderAfterWidthNonCopyExpansion
,borderBeforeWidthNonCopyExpansion
,borderEndWidthNonCopyExpansion
,borderStartWidthNonCopyExpansion
,borderSeparationNonCopyExpansion
,inlineProgressionDimensionNonCopyExpansion
,keepTogetherNonCopyExpansion
,keepWithNextNonCopyExpansion
,keepWithPreviousNonCopyExpansion
,leaderLengthNonCopyExpansion
,letterSpacingNonCopyExpansion
,lineHeightNonCopyExpansion
,paddingAfterNonCopyExpansion
,paddingBeforeNonCopyExpansion
,paddingEndNonCopyExpansion
,paddingStartNonCopyExpansion
,spaceAfterNonCopyExpansion
,spaceBeforeNonCopyExpansion
,spaceEndNonCopyExpansion
,spaceStartNonCopyExpansion
,wordSpacingNonCopyExpansion
};
@paramfoTree@paramvalue@return
public static PropertyValueList expandCompoundProperty
(FOTree foTree, PropertyValue value)
throws PropertyException
{
int property = value.getProperty();
Integer compoundX =
(Integer)(compoundMap.get(Ints.consts.get(property)));
if (compoundX == null)
throw new PropertyException
(PropNames.getPropertyName(property) + " (" + property + ") "
+ " is not a compound property.");
int compoundIdx = compoundX.intValue();
PropertyValueList list = new PropertyValueList(property);
ROIntArray expansion;
list = copyValueToSet
(value, compoundCopyExpansions[compoundIdx], list);
return initialValueCompoundExpansion
(foTree, compoundNonCopyExpansions[compoundIdx], list);
}
@paramvalue@paramexpansionSet@paramlist@return@exception<tt>PropertyException</tt>
private static PropertyValueList copyValueToSet(PropertyValue value,
ROIntArray expansionSet, PropertyValueList list)
throws PropertyException
{
for (int i = 0; i < expansionSet.length; i++) {
int expandedProp = expansionSet.get(i);
PropertyValue expandedPropValue;
try {
expandedPropValue = (PropertyValue)(value.clone());
} catch (CloneNotSupportedException e) {
throw new PropertyException(e.getMessage());
}
expandedPropValue.setProperty(expandedProp);
list.add(expandedPropValue);
}
return list;
}
references@paramfoTree@paramexpansion@paramlist@return@exception<tt>PropertyException</tt>
public static PropertyValueList initialValueCompoundExpansion
(FOTree foTree, ROIntArray expansion, PropertyValueList list)
throws PropertyException
{
for (int i = 0; i < expansion.length; i++) {
int expandedProp = expansion.get(i);
PropertyValue specified
= PropertyConsts.pconsts.getInitialValue(expandedProp);
list.add(specified);
}
return list;
}
private ShorthandPropSets (){}
}