|
|
#include "iobj.h"
#include "lsidefs.h"
#include "lssetdoc.h"
#include "lsc.h"
#include "lstext.h"
#include "prepdisp.h"
#include "zqfromza.h"
static LSERR SetDocForFormaters(PLSC plsc, LSDOCINF* plsdocinf);
/* L S S E T D O C */ /*----------------------------------------------------------------------------
%%Function: LsSetDoc %%Contact: igorzv
Parameters: plsc - (IN) ptr to line services context fDisplay - (IN) Intend to display? fPresEqualRef - (IN) Ref & Pres Devices are equal? pclsdevres - (IN) device resolutions
Fill in a part of a Line Services context. Can be called more frequently then LsCreateContext. ----------------------------------------------------------------------------*/
LSERR WINAPI LsSetDoc(PLSC plsc, BOOL fDisplay, BOOL fPresEqualRef, const LSDEVRES* pclsdevres) {
LSDOCINF* plsdocinf = &(plsc->lsdocinf); LSERR lserr;
if (!FIsLSC(plsc)) /* check that context is valid and not busy (for example in formating) */ return lserrInvalidContext; if (FIsLSCBusy(plsc)) return lserrSetDocDisabled;
if (!fDisplay && !fPresEqualRef) { plsc->lsstate = LsStateNotReady; return lserrInvalidParameter; }
/* if nothing is changed: return right away */ if (((BYTE) fDisplay == plsdocinf->fDisplay) && ((BYTE) fPresEqualRef == plsdocinf->fPresEqualRef ) && (pclsdevres->dxrInch == plsdocinf->lsdevres.dxrInch) && (pclsdevres->dyrInch == plsdocinf->lsdevres.dyrInch) && (fPresEqualRef || ((pclsdevres->dxpInch == plsdocinf->lsdevres.dxpInch) && (pclsdevres->dypInch == plsdocinf->lsdevres.dypInch)))) return lserrNone;
/* if we have current line we must prepare it for display before changing context */ if (plsc->plslineCur != NULL) { lserr = PrepareLineForDisplayProc(plsc->plslineCur); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; } plsc->plslineCur = NULL; }
plsc->lsstate = LsStateSettingDoc; /* this assignment should be after PrepareForDisplay */
plsdocinf->fDisplay = (BYTE) fDisplay; plsdocinf->fPresEqualRef = (BYTE) fPresEqualRef; plsdocinf->lsdevres = *pclsdevres;
if (fPresEqualRef) { plsdocinf->lsdevres.dxpInch = plsdocinf->lsdevres.dxrInch; plsdocinf->lsdevres.dypInch = plsdocinf->lsdevres.dyrInch; }
if (!FBetween(plsdocinf->lsdevres.dxpInch, 0, zqLim-1) || !FBetween(plsdocinf->lsdevres.dypInch, 0, zqLim-1) || !FBetween(plsdocinf->lsdevres.dxrInch, 0, zqLim-1) || !FBetween(plsdocinf->lsdevres.dyrInch, 0, zqLim-1)) { plsc->lsstate = LsStateNotReady; return lserrInvalidParameter; } lserr = SetDocForFormaters(plsc, plsdocinf); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; }
plsc->lsstate = LsStateFree; return lserrNone; }
LSERR WINAPI LsSetModWidthPairs( PLSC plsc, /* IN: ptr to line services context */ DWORD clspairact, /* IN: Number of mod pairs info units*/ const LSPAIRACT* rglspairact, /* IN: Mod pairs info units array */ DWORD cModWidthClasses, /* IN: Number of Mod Width classes */ const BYTE* rgilspairact) /* IN: Mod width information(square):
indexes in the LSPAIRACT array */ { LSERR lserr; DWORD iobjText; PILSOBJ pilsobjText;
if (!FIsLSC(plsc)) /* check that context is valid and not busy (for example in formating) */ return lserrInvalidContext; if (FIsLSCBusy(plsc)) return lserrSetDocDisabled;
/* if we have current line we must prepare it for display before changing context */ if (plsc->plslineCur != NULL) { lserr = PrepareLineForDisplayProc(plsc->plslineCur); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; } plsc->plslineCur = NULL; }
plsc->lsstate = LsStateSettingDoc; /* this assignment should be after PrepareForDisplay */
iobjText = IobjTextFromLsc(&plsc->lsiobjcontext); pilsobjText = PilsobjFromLsc(&plsc->lsiobjcontext, iobjText); lserr = SetTextModWidthPairs(pilsobjText, clspairact, rglspairact, cModWidthClasses, rgilspairact); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; }
plsc->lsstate = LsStateFree; return lserrNone; }
LSERR WINAPI LsSetCompression( PLSC plsc, /* IN: ptr to line services context */ DWORD cPriorities, /* IN: Number of compression priorities*/ DWORD clspract, /* IN: Number of compression info units*/ const LSPRACT* rglspract, /* IN: Compession info units array */ DWORD cModWidthClasses, /* IN: Number of Mod Width classes */ const BYTE* rgilspract) /* IN: Compression information:
indexes in the LSPRACT array */ { LSERR lserr; DWORD iobjText; PILSOBJ pilsobjText;
if (!FIsLSC(plsc)) /* check that context is valid and not busy (for example in formating) */ return lserrInvalidContext; if (FIsLSCBusy(plsc)) return lserrSetDocDisabled;
/* if we have current line we must prepare it for display before changing context */ if (plsc->plslineCur != NULL) { lserr = PrepareLineForDisplayProc(plsc->plslineCur); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; } plsc->plslineCur = NULL; }
plsc->lsstate = LsStateSettingDoc; /* this assignment should be after PrepareForDisplay */
iobjText = IobjTextFromLsc(&plsc->lsiobjcontext); pilsobjText = PilsobjFromLsc(&plsc->lsiobjcontext, iobjText); lserr = SetTextCompression(pilsobjText, cPriorities, clspract, rglspract, cModWidthClasses, rgilspract); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; }
plsc->lsstate = LsStateFree; return lserrNone; }
LSERR WINAPI LsSetExpansion( PLSC plsc, /* IN: ptr to line services context */ DWORD cExpansionClasses, /* IN: Number of expansion info units*/ const LSEXPAN* rglsexpan, /* IN: Expansion info units array */ DWORD cModWidthClasses, /* IN: Number of Mod Width classes */ const BYTE* rgilsexpan) /* IN: Expansion information(square):
indexes in the LSEXPAN array */
{ LSERR lserr; DWORD iobjText; PILSOBJ pilsobjText;
if (!FIsLSC(plsc)) /* check that context is valid and not busy (for example in formating) */ return lserrInvalidContext; if (FIsLSCBusy(plsc)) return lserrSetDocDisabled;
/* if we have current line we must prepare it for display before changing context */ if (plsc->plslineCur != NULL) { lserr = PrepareLineForDisplayProc(plsc->plslineCur); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; } plsc->plslineCur = NULL; }
plsc->lsstate = LsStateSettingDoc; /* this assignment should be after PrepareForDisplay */
iobjText = IobjTextFromLsc(&plsc->lsiobjcontext); pilsobjText = PilsobjFromLsc(&plsc->lsiobjcontext, iobjText); lserr = SetTextExpansion(pilsobjText, cExpansionClasses, rglsexpan, cModWidthClasses, rgilsexpan); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; }
plsc->lsstate = LsStateFree; return lserrNone; }
LSERR WINAPI LsSetBreaking( PLSC plsc, /* IN: ptr to line services context */ DWORD clsbrk, /* IN: Number of breaking info units*/ const LSBRK* rglsbrk, /* IN: Breaking info units array */ DWORD cBreakingClasses, /* IN: Number of breaking classes */ const BYTE* rgilsbrk) /* IN: Breaking information(square):
indexes in the LSBRK array */
{ LSERR lserr; DWORD iobjText; PILSOBJ pilsobjText;
if (!FIsLSC(plsc)) /* check that context is valid and not busy (for example in formating) */ return lserrInvalidContext; if (FIsLSCBusy(plsc)) return lserrSetDocDisabled;
/* if we have current line we must prepare it for display before changing context */ if (plsc->plslineCur != NULL) { lserr = PrepareLineForDisplayProc(plsc->plslineCur); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; } plsc->plslineCur = NULL; }
plsc->lsstate = LsStateSettingDoc; /* this assignment should be after PrepareForDisplay */
iobjText = IobjTextFromLsc(&plsc->lsiobjcontext); pilsobjText = PilsobjFromLsc(&plsc->lsiobjcontext, iobjText); lserr = SetTextBreaking(pilsobjText, clsbrk, rglsbrk, cBreakingClasses, rgilsbrk); if (lserr != lserrNone) { plsc->lsstate = LsStateNotReady; return lserr; }
plsc->lsstate = LsStateFree; return lserrNone; }
/* S E T D O C F O R F O R M A T E R S */ /*----------------------------------------------------------------------------
%%Function: SetDocForFormaters %%Contact: igorzv Parameter: plsc - (IN) ptr to line services context plsdocinf - (IN) ptr to set doc input
Invokes SetDoc methods for all formaters ----------------------------------------------------------------------------*/
LSERR SetDocForFormaters(PLSC plsc, LSDOCINF* plsdocinf) { DWORD iobjMac; DWORD iobj; PILSOBJ pilsobj; LSERR lserr;
Assert(FIsLSC(plsc)); Assert(plsc->lsstate == LsStateSettingDoc); Assert(plsdocinf != NULL);
iobjMac = plsc->lsiobjcontext.iobjMac;
for (iobj = 0; iobj < iobjMac; iobj++) { pilsobj = plsc->lsiobjcontext.rgobj[iobj].pilsobj; lserr = plsc->lsiobjcontext.rgobj[iobj].lsim.pfnSetDoc(pilsobj,plsdocinf); if (lserr != lserrNone) return lserr; } return lserrNone; }
|