windows-nt/Source/XPSP1/NT/windows/richedit/inci/lsdnode.h

113 lines
3.4 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
#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 */