windows-nt/Source/XPSP1/NT/windows/richedit/inci/lssubl.h
2020-09-26 16:20:57 +08:00

101 lines
2.6 KiB
C

#ifndef LSSUBL_DEFINED
#define LSSUBL_DEFINED
#include "lsidefs.h"
#include "plsdnode.h"
#include "lstflow.h"
#include "plschcon.h"
#include "posinln.h"
#include "objdim.h"
#include "brkkind.h"
#define tagLSSUBL Tag('L','S','S','L')
#define FIsLSSUBL(p) FHasTag(p,tagLSSUBL)
typedef struct brkcontext
{
POSINLINE posinlineBreakPrev; /* information about previous break */
OBJDIM objdimBreakPrev;
BRKKIND brkkindForPrev;
BOOL fBreakPrevValid;
POSINLINE posinlineBreakNext; /* information about next break */
OBJDIM objdimBreakNext;
BRKKIND brkkindForNext;
BOOL fBreakNextValid;
POSINLINE posinlineBreakForce; /* information about force break */
OBJDIM objdimBreakForce;
BRKKIND brkkindForForce;
BOOL fBreakForceValid;
}
BRKCONTEXT;
typedef struct lssubl
{
DWORD tag; /* tag for safety checks */
PLSC plsc; /* LineServices context
parameter to CreateSubLine */
LSCP cpFirst; /* cp for the first fetch
parameter to CreateSubLine */
LSTFLOW lstflow; /* text flow of the subline
parameter to CreateSubLine */
long urColumnMax; /* max lenght to fit into a main line
parameter to CreateSubLine */
LSCP cpLim; /* during formatting is a cpFirst for the next fetch
after SetBreak indicates boundary of the line */
LSCP cpLimDisplay; /* doesn't consider splat char */
PLSDNODE plsdnFirst; /* starting dnode in a subline */
PLSDNODE plsdnLast; /* last dnode in a subline
during formatting serves as psdnToAppend */
PLSDNODE plsdnLastDisplay; /* doesn't consider splat dnode */
PLSCHUNKCONTEXT plschunkcontext;
PLSDNODE plsdnUpTemp; /* temporary used for collecting group chunk */
long urCur, vrCur; /* Current pen position in reference units */
BRKCONTEXT* pbrkcontext; /* information about break opportunites */
BYTE fContiguous; /* if TRUE such line has the same coordinate system as main line
and is allowed to have tabs,
otherwise coordinates of the line starts from 0,0
parameter to CreateSubLine */
BYTE fDupInvalid; /* TRUE before preparing line for display */
BYTE fMain; /* is this subline main */
BYTE fAcceptedForDisplay; /* subline was submitted for display and accepted */
BYTE fRightMarginExceeded; /* used for low level subline to avoid double call to
nominal to ideal */
} LSSUBL;
#define LstflowFromSubline(plssubl) ((plssubl)->lstflow)
#define PlschunkcontextFromSubline(plssubl) ((plssubl)->plschunkcontext)
#define FIsSubLineMain(plssubl) (plssubl)->fMain
#endif /* LSSUBL_DEFINED */