<?xml version="1.0"?>
<!--
   ====================================================================
   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.
   ====================================================================
-->
<record id="0x101A" name="PAP" package="org.apache.poi.hwpf.model.types">
    <suffix>AbstractType</suffix>
    <extends>HDFType</extends>
    <description>Paragraph Properties.</description>
    <author>S. Ryan Ackley</author>
    <fields>
        <field type="int" size="2" name="istd" description="Index to style descriptor"/>
        <field type="boolean" size="1" name="fSideBySide"/>
        <field type="boolean" size="1" name="fKeep"/>
        <field type="boolean" size="1" name="fKeepFollow"/>
        <field type="boolean" size="1" name="fPageBreakBefore"/>

        <field type="byte" size="1" name="brcl" description="Border line style">
            <const type="byte" value="0" name="SINGLE"/>
            <const type="byte" value="1" name="THICK"/>
            <const type="byte" value="2" name="DOUBLE"/>
            <const type="byte" value="3" name="SHADOW"/>
        </field>
        <field type="byte" size="1" name="brcp" description="Rectangle border codes">
            <const type="byte" value="0" name="NONE"/>
            <const type="byte" value="1" name="BORDER_ABOVE"/>
            <const type="byte" value="2" name="BORDER_BELOW"/>
            <const type="byte" value="15" name="BOX_AROUND"/>
            <const type="byte" value="16" name="BAR_TO_LEFT_OF_PARAGRAPH"/>
        </field>

        <field type="byte" size="1" name="ilvl" description="List level if non-zero"/>
        <!-- According to PAPX doc pointer is byte, but according to sprmPIlfo documentation pointer is short, 
            we will use int -->
        <field type="int" size="2" name="ilfo" description="1-based index into the pllfo (lists structure), if non-zero"/>
        <field type="boolean" size="1" name="fNoLnn" description="No line numbering"/>

        <field type="LineSpacingDescriptor" size="4" default="new LineSpacingDescriptor()" name="lspd" description="Line spacing descriptor"/>

        <field type="int" size="4" name="dyaBefore" description="Space before paragraph"/>
        <field type="int" size="4" name="dyaAfter" description="Space after paragraph"/>

        <!-- Not documented in PAP, but referenced by SPRM doc -->
        <field type="boolean" size="1" name="fInTable" description="Paragraph is in table flag"/>
        <field type="boolean" size="1" name="finTableW97" description="Archaic paragraph is in table flag"/>
        <field type="boolean" size="1" name="fTtp" description="Table trailer paragraph (last in table row)"/>

        <field type="int" size="4" name="dxaAbs"/>
        <field type="int" size="4" name="dyaAbs"/>
        <field type="int" size="4" name="dxaWidth"/>

        <field type="boolean" size="1" name="fBrLnAbove"/>
        <field type="boolean" size="1" name="fBrLnBelow"/>

        <field type="byte" size="1" name="pcVert"/>
        <field type="byte" size="1" name="pcHorz"/>

        <field type="byte" size="1" name="wr"/>

        <field type="boolean" size="1" name="fNoAutoHyph"/>
        
        <!-- wHeightAbs? -->
        <field type="int" size="2" name="dyaHeight"/>
        <field type="boolean" size="1" name="fMinHeight" description="Minimum height is exact or auto">
            <const type="boolean" value="false" name="EXACT"/>
            <const type="boolean" value="true" name="AT_LEAST"/>
        </field>

        <field type="DropCapSpecifier" size="2" name="dcs"/>

        <field type="int" size="4" name="dyaFromText" description="Vertical distance between text and absolutely positioned object"/>
        <field type="int" size="4" name="dxaFromText" description="Horizontal distance between text and absolutely positioned object"/>

        <field type="boolean" size="1" name="fLocked" description="Anchor of an absolutely positioned frame is locked"/>
        <field type="boolean" size="1" default="true" name="fWidowControl" description="1, Word will prevent widowed lines in this paragraph from being placed at the beginning of a page"/>
        <field type="boolean" size="1" name="fKinsoku" description="apply Kinsoku rules when performing line wrapping"/>
        <field type="boolean" size="1" name="fWordWrap" description="perform word wrap"/>
        <field type="boolean" size="1" name="fOverflowPunct" description="apply overflow punctuation rules when performing line wrapping"/>
        <field type="boolean" size="1" name="fTopLinePunct" description="perform top line punctuation processing"/>
        <field type="boolean" size="1" name="fAutoSpaceDE" description="auto space East Asian and alphabetic characters"/>
        <field type="boolean" size="1" name="fAutoSpaceDN" description="auto space East Asian and numeric characters"/>
        <field type="int" size="2" name="wAlignFont">
            <const type="byte" value="0" name="HANGING"/>
            <const type="byte" value="1" name="CENTERED"/>
            <const type="byte" value="2" name="ROMAN"/>
            <const type="byte" value="3" name="VARIABLE"/>
            <const type="byte" value="4" name="AUTO"/>
        </field>
        <field type="short" size="2" name="fontAlign" description="Used internally by Word">
          <bit number="0" mask="0x0001" name="fVertical"/>
          <bit number="1" mask="0x0002" name="fBackward"/>
          <bit number="2" mask="0x0004" name="fRotateFont"/>
        </field>

        <field type="byte" size="1" default="9" name="lvl" description="Outline level"/>
        <field type="boolean" size="1" name="fBiDi"/>
        <field type="boolean" size="1" name="fNumRMIns"/>
        <field type="boolean" size="1" name="fCrLf"/>
        <field type="boolean" size="1" name="fUsePgsuSettings"/>
        <field type="boolean" size="1" name="fAdjustRight"/>

        <field type="int" size="4" name="itap" description="Table nesting level"/>
        <field type="boolean" size="1" name="fInnerTableCell" description="When 1, the end of paragraph mark is really an end of cell mark for a nested table cell"/>
        <field type="boolean" size="1" name="fOpenTch" description="Ensure the Table Cell char doesn't show up as zero height"/>
        <!-- not part of properties structure, but used anyway. See sprmPFInnerTtp doc. -->
        <field type="boolean" size="1" name="fTtpEmbedded" description="Word 97 compatibility indicates this end of paragraph mark is really an end of row marker for a nested table"/>
        
        <field type="short" size="2" name="dxcRight" description="Right indent in character units"/>
        <field type="short" size="2" name="dxcLeft" description="Left indent in character units"/>
        <field type="short" size="2" name="dxcLeft1" description="First line indent in character units"/>

        <field type="boolean" size="1" name="fDyaBeforeAuto" description="Vertical spacing before is automatic"/>
        <field type="boolean" size="1" name="fDyaAfterAuto" description="Vertical spacing after is automatic"/>

        <field type="int" size="4" name="dxaRight"/>
        <field type="int" size="4" name="dxaLeft"/>
        <field type="int" size="4" name="dxaLeft1"/>

        <field type="byte" size="1" name="jc"/>

        <field type="BorderCode" size="4" name="brcTop"/>
        <field type="BorderCode" size="4" name="brcLeft"/>
        <field type="BorderCode" size="4" name="brcBottom"/>
        <field type="BorderCode" size="4" name="brcRight"/>
        <field type="BorderCode" size="4" name="brcBetween"/>
        <field type="BorderCode" size="4" name="brcBar"/>

        <field type="ShadingDescriptor" size="10" name="shd"/>
        <field type="byte[]" size="84" name="anld"/>
        <field type="byte[]" size="12" name="phe"/>
        <field type="boolean" size="1" name="fPropRMark"/>
        <field type="int" size="2" name="ibstPropRMark"/>
        <field type="DateAndTime" size="4" name="dttmPropRMark"/>

        <field type="int" size="2" name="itbdMac" description="Number of tabs stops defined for paragraph. Must be &gt;= 0 and &lt;= 64."/>
        <field type="int[]" size="128" name="rgdxaTab" description="Array of positions of itbdMac tab stops. itbdMax==64"/>
        <field type="TabDescriptor[]" size="64" name="rgtbd" description="Array of itbdMac tab descriptors"/>

        <field type="byte[]" size="128" name="numrm"/>
        <field type="byte[]" size="4" name="ptap"/>

        <field type="boolean" size="1" name="fNoAllowOverlap" description="When 1, absolutely positioned paragraph cannot overlap with another paragraph"/>
        <field type="long" size="4" name="ipgp" description="HTML DIV ID for this paragraph"/>
        <field type="long" size="4" name="rsid" description="Save ID for last time this PAP was revised"/>
    </fields>
</record>
