/*
 * 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.
 */

/* $Id: Block.java 1805173 2017-08-16 10:50:04Z ssteiner $ */

package org.apache.fop.area;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Locale;

// block areas hold either more block areas or line
// areas can also be used as a block spacer
// a block area may have children positioned by stacking
// or by relative to the parent for floats, tables and lists
// cacheable object
// has id information

This is the block area class. It holds child block areas such as other blocks or lines.
/** * This is the block area class. * It holds child block areas such as other blocks or lines. */
public class Block extends BlockParent { private static final long serialVersionUID = 6843727817993665788L;
Normally stacked with other blocks.
/** * Normally stacked with other blocks. */
public static final int STACK = 0;
Placed relative to the flow position. This effects the flow placement of stacking normally.
/** * Placed relative to the flow position. * This effects the flow placement of stacking normally. */
public static final int RELATIVE = 1;
Relative to the block parent but not effecting the stacking Used for block-container, tables and lists.
/** * Relative to the block parent but not effecting the stacking * Used for block-container, tables and lists. */
public static final int ABSOLUTE = 2;
Relative to a viewport/page but not effecting the stacking Used for block-container.
/** * Relative to a viewport/page but not effecting the stacking * Used for block-container. */
public static final int FIXED = 3; private int positioning = STACK;
if true, allow BPD update
/** if true, allow BPD update */
protected transient boolean allowBPDUpdate; private Locale locale; private String location; public Block() { allowBPDUpdate = true; } private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException { ois.defaultReadObject(); }
Add the block to this block area.
Params:
  • block – the block area to add
/** * Add the block to this block area. * * @param block the block area to add */
public void addBlock(Block block) { addBlock(block, true); }
Add the block to this block area.
Params:
  • block – the block area to add
  • autoHeight – increase the height of the block.
/** * Add the block to this block area. * * @param block the block area to add * @param autoHeight increase the height of the block. */
public void addBlock(Block block, boolean autoHeight) { if (autoHeight && allowBPDUpdate && block.isStacked()) { bpd += block.getAllocBPD(); } addChildArea(block); }
Add the line area to this block area.
Params:
  • line – the line area to add
/** * Add the line area to this block area. * * @param line the line area to add */
public void addLineArea(LineArea line) { bpd += line.getAllocBPD(); addChildArea(line); }
Set the positioning of this area.
Params:
  • pos – the positioning to use when rendering this area
/** * Set the positioning of this area. * * @param pos the positioning to use when rendering this area */
public void setPositioning(int pos) { positioning = pos; }
Get the positioning of this area.
Returns:the positioning to use when rendering this area
/** * Get the positioning of this area. * * @return the positioning to use when rendering this area */
public int getPositioning() { return positioning; }
Indicates whether this block is stacked, rather than absolutely positioned.
Returns:true if it is stacked
/** * Indicates whether this block is stacked, rather than absolutely positioned. * @return true if it is stacked */
public boolean isStacked() { return (getPositioning() == Block.STACK || getPositioning() == Block.RELATIVE); }
Returns:the start-indent trait
/** * @return the start-indent trait */
public int getStartIndent() { Integer startIndent = (Integer)getTrait(Trait.START_INDENT); return (startIndent != null ? startIndent : 0); }
Returns:the end-indent trait
/** * @return the end-indent trait */
public int getEndIndent() { Integer endIndent = (Integer)getTrait(Trait.END_INDENT); return (endIndent != null ? endIndent : 0); }
Sets the language information coming from the FO that generated this area.
/** * Sets the language information coming from the FO that generated this area. */
public void setLocale(Locale locale) { this.locale = locale; }
Returns the language information for the FO that generated this area.
/** * Returns the language information for the FO that generated this area. */
public Locale getLocale() { return locale; }
Sets the location in the source XML of the FO that generated this area.
Params:
  • location – the line and column location
/** * Sets the location in the source XML of the FO that generated this area. * * @param location the line and column location */
public void setLocation(String location) { this.location = location; }
Returns the location in the source XML of the FO that generated this area.
Returns:the line and column location, null if that information is not available
/** * Returns the location in the source XML of the FO that generated this area. * * @return the line and column location, {@code null} if that information is not available */
public String getLocation() { return location; } // maybe this can be done in the parent? public int getEffectiveIPD() { int eIPD = super.getEffectiveIPD(); if (eIPD != 0) { effectiveIPD = eIPD; } return eIPD; } // maybe this can be done in the parent? public void activateEffectiveIPD() { super.activateEffectiveIPD(); if (effectiveIPD != -1) { ipd = effectiveIPD; } } }