#ifndef TABUTILS_DEFINED
#define TABUTILS_DEFINED

#include "lsdefs.h"
#include "plstbcon.h"
#include "plsdnode.h"
#include "lsktab.h"
#include "plssubl.h"

#define SetCpInPara(lstabscontext, cp) \
						lstabscontext.cpInPara = (cp);
   

#define InitLineTabsContext(lstabscontext, ColumnMax, cp, ResolveTabsAsWord97)      \
						lstabscontext.fTabsInitialized = fFalse;\
						lstabscontext.urColumnMax = (ColumnMax);\
						lstabscontext.plsdnPendingTab = NULL;\
						lstabscontext.fResolveTabsAsWord97 = (ResolveTabsAsWord97);\
						SetCpInPara(lstabscontext, cp);


#define CancelPendingTab(plstabscontext) 		((plstabscontext)->plsdnPendingTab = NULL)


LSERR GetCurTabInfoCore(
							PLSTABSCONTEXT plstabscontext,	/* IN: Pointer to LS tabs context */
							PLSDNODE plsdnTab,				/* IN: plsdnTab		*/
							long urBeforeTab,				/* IN: position before this tab */
							BOOL fResolveAllTabsAsLeft,		/* IN: switch all other tab to left */
							LSKTAB* plsktab,				/* OUT: Type of current tab  */
							BOOL* pfBreakThroughTab);		/* OUT: fBreakThroughTab		*/						

LSERR ResolvePrevTabCore(
						PLSTABSCONTEXT plstabscontext,	/* IN: Pointer to LS tabs context */
						PLSDNODE plsdnCurrent,			/* IN: current dnode */
						long urCurrentPen,				/* IN: Current pen position */
						long* pdurPendingTab);			/* OUT: offset because of pending tab */

LSERR InitTabsContextForAutoDecimalTab(PLSTABSCONTEXT plstabscontext,	/* IN: Pointer to LS tabs context */
									  long durAutoDecimalTab);			/* IN: durAutoDecimalTab */

LSERR GetMarginAfterBreakThroughTab(PLSTABSCONTEXT plstabscontext,	/* IN: pointer to LS tabs context */
								   PLSDNODE plsdnTab,				/* IN: tab which triggered breakthrough tab */
								   long* purNewMargin);				/* OUT: new margin because of breakthrough tab */


#endif /* TABUTILS_DEFINED */