KnuthPenalty (Apache FOP Core 2.11 API)
Date: 2025-04-24

org.apache.fop.layoutmgr

## Class KnuthPenalty

- java.lang.Object
- - org.apache.fop.layoutmgr.ListElement
  - - org.apache.fop.layoutmgr.KnuthElement
    - - org.apache.fop.layoutmgr.KnuthPenalty

- Direct Known Subclasses:
    WhitespaceManagementPenalty

      public class KnuthPenalty
      extends KnuthElement

  An instance of this class represents information about a feasible breaking point; it does not represent any piece of content. A KnuthPenalty is a feasible breaking point unless its value is infinity; a KnuthPenalty whose value is -infinity represents a forced break. A KnuthPenalty is suppressed, and its width is ignored, if it is not a chosen breaking point; for example, a KnuthPenalty representing a hyphenation point has a width (the "-" width), which must be ignored if that point is not chosen as a breaking point. Besides the inherited methods and attributes, this class has two more attributes and the methods used to get them: the penalty value, which is a kind of "aesthetic cost" (the higher the value, the more unsightly the breaking point), and a boolean that marks KnuthPenalties which should not be chosen as breaking points for consecutive lines.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static KnuthPenalty` | `DUMMY_ZERO_PENALTY` Dummy, zero-width penalty
    `static int` | `FLAGGED_PENALTY` Used for flagged penalties.

    - ### Fields inherited from class org.apache.fop.layoutmgr.KnuthElement

      `INFINITE`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `KnuthPenalty(int width, int penalty, boolean penaltyFlagged, int breakClass, Position pos, boolean isAuxiliary)` Create a new KnuthPenalty.
    `KnuthPenalty(int width, int penalty, boolean penaltyFlagged, Position pos, boolean auxiliary)` Create a new KnuthPenalty.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `getBreakClass()`
    `int` | `getPenalty()`
    `boolean` | `isForcedBreak()`
    `boolean` | `isPenalty()`
    `boolean` | `isPenaltyFlagged()`
    `void` | `setPenalty(int penalty)` Sets a new penalty value.
    `String` | `toString()`
    `protected static String` | `valueOf(int penaltyValue)` Get the penalty's value as a `String`.

    - ### Methods inherited from class org.apache.fop.layoutmgr.KnuthElement

      `getShrink, getStretch, getWidth, isAuxiliary, isUnresolvedElement`

    - ### Methods inherited from class org.apache.fop.layoutmgr.ListElement

      `getLayoutManager, getPosition, isBox, isGlue, setPosition`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### FLAGGED_PENALTY

          public static final int FLAGGED_PENALTY

      Used for flagged penalties. See Knuth algorithm.
      See Also:
        Constant Field Values

    - #### DUMMY_ZERO_PENALTY

          public static final KnuthPenalty DUMMY_ZERO_PENALTY

      Dummy, zero-width penalty

  - ### Constructor Detail

    - #### KnuthPenalty

          public KnuthPenalty(int width,
                              int penalty,
                              boolean penaltyFlagged,
                              Position pos,
                              boolean auxiliary)

      Create a new KnuthPenalty.
      Parameters:
        `width` - the width of this penalty
        `penalty` - the penalty value of this penalty
        `penaltyFlagged` - is this penalty flagged?
        `pos` - the Position stored in this penalty
        `auxiliary` - is this penalty auxiliary?

    - #### KnuthPenalty

          public KnuthPenalty(int width,
                              int penalty,
                              boolean penaltyFlagged,
                              int breakClass,
                              Position pos,
                              boolean isAuxiliary)

      Create a new KnuthPenalty.
      Parameters:
        `width` - the width of this penalty
        `penalty` - the penalty value of this penalty
        `penaltyFlagged` - is this penalty flagged?
        `breakClass` - the break class of this penalty (one of `Constants.EN_AUTO`, `Constants.EN_COLUMN`, `Constants.EN_PAGE`, `Constants.EN_EVEN_PAGE`, `Constants.EN_ODD_PAGE`).
        `pos` - the Position stored in this penalty
        `isAuxiliary` - is this penalty auxiliary?

  - ### Method Detail

    - #### valueOf

          protected static String valueOf(int penaltyValue)

      Get the penalty's value as a `String`. (Mainly used in `toString()` methods, to improve readability of the trace logs.) TODO: shouldn't be penalty a class of its own?
      Parameters:
        `penaltyValue` - the penalty value
      Returns:
        the penalty value as a `String`

    - #### isPenalty

          public boolean isPenalty()

      Overrides:
        `isPenalty` in class `ListElement`
      Returns:
        true if this element is a KnuthPenalty.

    - #### getPenalty

          public int getPenalty()

      Overrides:
        `getPenalty` in class `KnuthElement`
      Returns:
        the penalty value of this penalty.

    - #### setPenalty

          public void setPenalty(int penalty)

      Sets a new penalty value.
      Parameters:
        `penalty` - the new penalty value

    - #### isPenaltyFlagged

          public boolean isPenaltyFlagged()

      Returns:
        true is this penalty is a flagged one.

    - #### isForcedBreak

          public boolean isForcedBreak()

      Overrides:
        `isForcedBreak` in class `ListElement`
      Returns:
        true if the element is a penalty and represents a forced break.

    - #### getBreakClass

          public int getBreakClass()

      Returns:
        the break class of this penalty (EN_AUTO, EN_COLUMN, EN_PAGE, EN_EVEN_PAGE, EN_ODD_PAGE)

    - #### toString

          public String toString()

      Overrides:
        `toString` in class `Object`

Copyright © 2025 Apache Software Foundation. All rights reserved.