113 lines
3.4 KiB
C
113 lines
3.4 KiB
C
#ifndef LSDNODE_DEFINED
|
|
#define LSDNODE_DEFINED
|
|
|
|
#include "lsidefs.h"
|
|
#include "plsdnode.h"
|
|
#include "pdobj.h"
|
|
#include "objdim.h"
|
|
#include "plsrun.h"
|
|
#include "lschp.h"
|
|
#include "plssubl.h"
|
|
|
|
#define klsdnReal 0
|
|
#define klsdnPenBorder 1
|
|
|
|
#define tagLSDNODE Tag('L','S','D', 'N')
|
|
#define FIsLSDNODE(plsdn) (FHasTag(plsdn,tagLSDNODE))
|
|
|
|
struct lsdnode
|
|
{
|
|
DWORD tag;
|
|
|
|
PLSDNODE plsdnNext,plsdnPrev;
|
|
LSCP cpFirst;
|
|
LSCP cpLimOriginal; /* is not equal to cpFirst + dcp in a case when
|
|
glyph context goes across hidden text */
|
|
PLSSUBL plssubl; /* subline which contains this dnode */
|
|
|
|
LSDCP dcp; /* */
|
|
UINT klsdn : 1; /* klsdnReal, klsdnPenBorder */
|
|
UINT fAdvancedPen : 1; /* advanced pen, valid only if kldnPenBorder and not fBorder */
|
|
UINT fBorderNode : 1; /* border, valid only if kldnPenBorder */
|
|
UINT fOpenBorder :1; /* open or close border, valid only if fBorder */
|
|
UINT fRigidDup : 1; /* Rigid dup is set */
|
|
UINT fTab : 1; /* tab */
|
|
UINT icaltbd : 8; /* index in the lscaltbd array in lsc.h */
|
|
UINT fEndOfColumn : 1; /* dnode represents end of column */
|
|
UINT fEndOfSection : 1; /* dnode represents end of section */
|
|
UINT fEndOfPage : 1; /* dnode represents end of page */
|
|
UINT fEndOfPara : 1; /* dnode represents end of paragraph */
|
|
UINT fAltEndOfPara : 1; /* dnode represents alternative end of paragraphe */
|
|
UINT fSoftCR : 1; /* dnode represents end of line */
|
|
UINT fInsideBorder: 1; /* is true if dnode is inside bordered sequence or one
|
|
of the dnodes under him is inside bordered sequence */
|
|
UINT fAutoDecTab: 1; /* auto decimal tab */
|
|
UINT fTabForAutonumber: 1; /* tab which is added at the end of autonumber */
|
|
UINT fBorderMovedFromTrailingArea: 1;/* closing border which was moved to the begining of
|
|
trailing area */
|
|
|
|
UINT pad1 : 8;
|
|
|
|
union /* variant record */
|
|
{
|
|
struct /* valid iff klsdn==klsdnReal */
|
|
{
|
|
LSCHP lschp;
|
|
PLSRUN plsrun;
|
|
OBJDIM objdim;
|
|
long dup; /* width of object in pres pixels */
|
|
PDOBJ pdobj;
|
|
|
|
struct
|
|
{
|
|
DWORD cSubline; /* number of sublines */
|
|
PLSSUBL* rgpsubl; /* array of such sublines */
|
|
BOOL fUseForJustification;
|
|
BOOL fUseForCompression;
|
|
BOOL fUseForDisplay;
|
|
BOOL fUseForDecimalTab;
|
|
BOOL fUseForTrailingArea;
|
|
|
|
} * pinfosubl; /* information how object participates in
|
|
justification or display*/
|
|
|
|
} real;
|
|
|
|
struct /* valid iff klsdn==klsdnPen */
|
|
{
|
|
long dup,dvp;
|
|
long dur,dvr;
|
|
} pen;
|
|
|
|
|
|
} u;
|
|
};
|
|
|
|
#define FIsDnodeReal(plsdn) (Assert(FIsLSDNODE(plsdn)), ((plsdn)->klsdn == klsdnReal))
|
|
|
|
#define FIsDnodePen(plsdn) (Assert(FIsLSDNODE(plsdn)), \
|
|
(((plsdn)->klsdn == klsdnPenBorder) && \
|
|
(!(plsdn)->fBorderNode)))
|
|
|
|
#define FIsDnodeBorder(plsdn) (Assert(FIsLSDNODE(plsdn)), \
|
|
(((plsdn)->klsdn == klsdnPenBorder) && \
|
|
((plsdn)->fBorderNode)))
|
|
|
|
#define FIsDnodeOpenBorder(plsdn) (FIsDnodeBorder(plsdn) && \
|
|
((plsdn)->fOpenBorder))
|
|
|
|
#define FIsDnodeCloseBorder(plsdn) (FIsDnodeBorder(plsdn) && \
|
|
!((plsdn)->fOpenBorder))
|
|
|
|
#define FIsDnodeSplat(plsdn) ((plsdn)->fEndOfSection || \
|
|
(plsdn)->fEndOfColumn || (plsdn)->fEndOfPage )
|
|
|
|
#define FIsDnodeEndPara(plsdn) (plsdn)->fEndOfPara
|
|
|
|
#define FIsDnodeAltEndPara(plsdn) (plsdn)->fAltEndOfPara
|
|
|
|
#define FIsDnodeSoftCR(plsdn) (plsdn)->fSoftCr
|
|
|
|
|
|
#endif /* !LSDNODE_DEFINED */
|