|
|
#ifndef LSCBK_DEFINED
#define LSCBK_DEFINED
/* LineServices callbacks */
#include "lsdefs.h"
#include "lsdevice.h"
#include "lsksplat.h"
#include "lskjust.h"
#include "lstflow.h"
#include "endres.h"
#include "mwcls.h"
#include "lsact.h"
#include "lspract.h"
#include "brkcond.h"
#include "brkcls.h"
#include "gprop.h"
#include "gmap.h"
#include "lsexpinf.h"
#include "lskalign.h"
#include "plstabs.h"
#include "pheights.h"
#include "plsrun.h"
#include "plscbk.h"
#include "plschp.h"
#include "plspap.h"
#include "plstxm.h"
#include "plshyph.h"
#include "plsstinf.h"
#include "plsulinf.h"
#include "plsems.h"
#define cpFirstAnm (-0x7FFFFFFF) /* Used for the fetch of the first Autonumber run */
struct lscbk /* Interfaces to application-specific callbacks */ { /* Dynamic memory APIs */ void* (WINAPI* pfnNewPtr)(POLS, DWORD); void (WINAPI* pfnDisposePtr)(POLS, void*); void* (WINAPI* pfnReallocPtr)(POLS, void*, DWORD);
LSERR (WINAPI* pfnFetchRun)(POLS, LSCP, LPCWSTR*, DWORD*, BOOL*, PLSCHP, PLSRUN*); /* FetchRun:
* pols (IN): * cp (IN): * &lpwchRun (OUT): run of characters. * &cchRun (OUT): number of characters in run * &fHidden (OUT) : hidden run? * &lsChp (OUT): char properties of run * &plsrun (OUT): abstract representation of run properties */
LSERR (WINAPI* pfnGetAutoNumberInfo)(POLS, LSKALIGN*, PLSCHP, PLSRUN*, WCHAR*, PLSCHP, PLSRUN*, BOOL*, long*, long*);
/* GetAutoNumberInfo:
* pols (IN): * &lskalAnm (OUT): * &lschpAnm (OUT): lschp for Anm * &plsrunAnm (OUT): plsrun for Anm * &wchAdd (OUT): character to add (Nil is treated as none) * &lschpWch (OUT): lschp for added char * &plsrunWch (OUT): plsrun for added char * &fWord95Model(OUT): * &duaSpaceAnm(OUT): relevant iff fWord95Model * &duaWidthAnm(OUT): relevant iff fWord95Model */
LSERR (WINAPI* pfnGetNumericSeparators)(POLS, PLSRUN, WCHAR*,WCHAR*); /* GetNumericSeparators:
* pols (IN): * plsrun (IN): run pointer as returned from FetchRun * &wchDecimal (OUT): decimal separator for this run. * &wchThousands (OUT): thousands separator for this run */
LSERR (WINAPI* pfnCheckForDigit)(POLS, PLSRUN, WCHAR, BOOL*); /* GetNumericSeparators:
* pols (IN): * plsrun (IN): run pointer as returned from FetchRun * wch (IN): character to check * &fIsDigit (OUT): this character is digit */
LSERR (WINAPI* pfnFetchPap)(POLS, LSCP, PLSPAP); /* FetchPap:
* pols (IN): * cp (IN): an arbitrary cp value inside the paragraph * &lsPap (OUT): Paragraph properties. */
LSERR (WINAPI* pfnFetchTabs)(POLS, LSCP, PLSTABS, BOOL*, long*, WCHAR*); /* FetchTabs:
* pols (IN): * cp (IN): an arbitrary cp value inside the paragraph * &lstabs (OUT): tabs array * &fHangingTab (OUT): there is hanging tab * &duaHangingTab (OUT): dua of hanging tab * &wchHangingTabLeader (OUT): leader of hanging tab */
LSERR (WINAPI* pfnGetBreakThroughTab)(POLS, long, long, long*); /* GetBreakThroughTab:
* pols (IN): * uaRightMargin (IN): right margin for breaking * uaTabPos (IN): breakthrough tab position * uaRightMarginNew (OUT): new right margin */
LSERR (WINAPI* pfnFGetLastLineJustification)(POLS, LSKJUST, LSKALIGN, ENDRES, BOOL*, LSKALIGN*); /* FGetLastLineJustification:
* pols (IN): * lskj (IN): kind of justification for the paragraph * lskal (IN): kind of alignment for the paragraph * endr (IN): result of formatting * &fJustifyLastLine (OUT): should last line be fully justified * &lskalLine (OUT): kind of alignment for this line */
LSERR (WINAPI* pfnCheckParaBoundaries)(POLS, LSCP, LSCP, BOOL*); /* CheckParaBoundaries:
* pols (IN): * cpOld (IN): * cpNew (IN): * &fChanged (OUT): "Dangerous" change between paragraph properties. */
LSERR (WINAPI* pfnGetRunCharWidths)(POLS, PLSRUN, LSDEVICE, LPCWSTR, DWORD, long, LSTFLOW, int*,long*,long*); /* GetRunCharWidths:
* pols (IN): * plsrun (IN): * lsDeviceID (IN): presentation or reference * lpwchRun (IN): run of characters * cwchRun (IN): number of characters in run * du (IN): available space for characters * kTFlow (IN): text direction and orientation * rgDu (OUT): widths of characters * &duRun (OUT): sum of widths in rgDx[0] to rgDu[limDx-1] * &limDu (OUT): number of widths fetched */
LSERR (WINAPI* pfnCheckRunKernability)(POLS, PLSRUN,PLSRUN, BOOL*); /* CheckRunKernability:
* pols (IN): * plsrunLeft (IN): 1st of pair of adjacent runs * plsrunRight (IN): 2nd of pair of adjacent runs * &fKernable (OUT) : if TRUE, Line Service may kern between these runs */
LSERR (WINAPI* pfnGetRunCharKerning)(POLS, PLSRUN, LSDEVICE, LPCWSTR, DWORD, LSTFLOW, int*); /* GetRunCharKerning:
* pols (IN): * plsrun (IN): * lsDeviceID (IN): presentation or reference * lpwchRun (IN): run of characters * cwchRun (IN): number of characters in run * kTFlow (IN): text direction and orientation * rgDu (OUT): widths of characters */
LSERR (WINAPI* pfnGetRunTextMetrics)(POLS, PLSRUN, LSDEVICE, LSTFLOW, PLSTXM); /* GetRunTextMetrics:
* pols (IN): * plsrun (IN): * deviceID (IN): presentation, reference, or absolute * kTFlow (IN): text direction and orientation * &lsTxMet (OUT): Text metrics */
LSERR (WINAPI* pfnGetRunUnderlineInfo)(POLS, PLSRUN, PCHEIGHTS, LSTFLOW, PLSULINFO); /* GetRunUnderlineInfo:
* pols (IN): * plsrun (IN): * heightsPres (IN): * kTFlow (IN): text direction and orientation * &lsUlInfo (OUT): Underline information */
LSERR (WINAPI* pfnGetRunStrikethroughInfo)(POLS, PLSRUN, PCHEIGHTS, LSTFLOW, PLSSTINFO); /* GetRunStrikethroughInfo:
* pols (IN): * plsrun (IN): * heightsPres (IN): * kTFlow (IN): text direction and orientation * &lsStInfo (OUT): Strikethrough information */
LSERR (WINAPI* pfnGetBorderInfo)(POLS, PLSRUN, LSTFLOW, long*, long*); /* GetBorderInfo:
* pols (IN): * plsrun (IN): * kTFlow (IN): text direction and orientation * &durBorder (OUT): Width of the border on the reference device * &dupBorder (OUT): Width of the border on the presentation device */
LSERR (WINAPI* pfnReleaseRun)(POLS, PLSRUN); /* ReleaseRun:
* pols (IN): * plsrun (IN): run to be released, from GetRun() or FetchRun() */
LSERR (WINAPI* pfnHyphenate)(POLS, PCLSHYPH, LSCP, LSCP, PLSHYPH); /* Hyphenate:
* pols (IN): * &lsHyphLast (IN): last hyphenation found. kysr==kysrNil means "none" * cpBeginWord (IN): 1st cp in word which exceeds column * cpExceed (IN): 1st which exceeds column, in this word * &lsHyph (OUT): hyphenation results. kysr==kysrNil means "none" */
LSERR (WINAPI* pfnGetHyphenInfo)(POLS, PLSRUN, DWORD*, WCHAR*); /* GetHyphenInfo:
* pols (IN): * plsrun (IN): * kysr (OUT) Ysr type - see "lskysr.h" * wchYsr (OUT) Character code of YSR */
LSERR (WINAPI* pfnDrawUnderline)(POLS, PLSRUN, UINT, const POINT*, DWORD, DWORD, LSTFLOW, UINT, const RECT*); /* DrawUnderline:
* pols (IN): * plsrun (IN): run to use for the underlining * kUlbase (IN): underline kind * pptStart (IN): starting position (top left) * dupUL (IN): underline width * dvpUL (IN) : underline thickness * kTFlow (IN): text direction and orientation * kDisp (IN) : display mode - opaque, transparent * prcClip (IN) : clipping rectangle */
LSERR (WINAPI* pfnDrawStrikethrough)(POLS, PLSRUN, UINT, const POINT*, DWORD, DWORD, LSTFLOW, UINT, const RECT*); /* DrawStrikethrough:
* pols (IN): * plsrun (IN): the run for the strikethrough * kStbase (IN): strikethrough kind * pptStart (IN): starting position (top left) * dupSt (IN): strikethrough width * dvpSt (IN) : strikethrough thickness * kTFlow (IN): text direction and orientation * kDisp (IN) : display mode - opaque, transparent * prcClip (IN) : clipping rectangle */
LSERR (WINAPI* pfnDrawBorder)(POLS, PLSRUN, const POINT*, PCHEIGHTS, PCHEIGHTS, PCHEIGHTS, PCHEIGHTS, long, long, LSTFLOW, UINT, const RECT*);
/* DrawBorder:
* pols (IN): * plsrun (IN): plsrun of the first bordered run * pptStart (IN): starting point for the border * pheightsLineFull (IN): height of the line including SpaceBefore & SpaceAfter * pheightsLineWithoutAddedSpace (IN): height of the line without SpaceBefore & SpaceAfter * pheightsSubline (IN): height of subline * pheightsRuns (IN): height of collected runs to be bordered * dupBorder (IN): width of one border * dupRunsInclBorders (IN): width of collected runs * kTFlow (IN): text direction and orientation * kDisp (IN) : display mode - opaque, transparent * prcClip (IN) : clipping rectangle */
LSERR (WINAPI* pfnDrawUnderlineAsText)(POLS, PLSRUN, const POINT*, long, LSTFLOW, UINT, const RECT*); /* DrawUnderlineAsText:
* pols (IN): * plsrun (IN): run to use for the underlining * pptStart (IN): starting pen position * dupLine (IN): length of UL * kTFlow (IN): text direction and orientation * kDisp (IN) : display mode - opaque, transparent * prcClip (IN) : clipping rectangle */
LSERR (WINAPI* pfnFInterruptUnderline)(POLS, PLSRUN, LSCP, PLSRUN, LSCP,BOOL*); /* FInterruptUnderline:
* pols (IN): * plsrunFirst (IN): run pointer for the previous run * cpLastFirst (IN): cp of the last character of the previous run * plsrunSecond (IN): run pointer for the current run * cpStartSecond (IN): cp of the first character of the current run * &fInterruptUnderline (OUT): do you want to interrupt drawing of the underline between these runs */
LSERR (WINAPI* pfnFInterruptShade)(POLS, PLSRUN, PLSRUN, BOOL*); /* FInterruptShade:
* pols (IN): * plsrunFirst (IN): run pointer for the previous run * plsrunSecond (IN): run pointer for the current run * &fInterruptShade (OUT): do you want to interrupt shading between these runs */
LSERR (WINAPI* pfnFInterruptBorder)(POLS, PLSRUN, PLSRUN, BOOL*); /* FInterruptBorder:
* pols (IN): * plsrunFirst (IN): run pointer for the previous run * plsrunSecond (IN): run pointer for the current run * &fInterruptBorder (OUT): do you want to interrupt border between these runs */
LSERR (WINAPI* pfnShadeRectangle)(POLS, PLSRUN, const POINT*, PCHEIGHTS, PCHEIGHTS, PCHEIGHTS, PCHEIGHTS, PCHEIGHTS, long, long, LSTFLOW, UINT, const RECT*);
/* ShadeRectangle:
* pols (IN): * plsrun (IN): plsrun of the first shaded run * pptStart (IN): starting point for the shading rectangle * pheightsLineWithAddSpace(IN): height of the line including SpaceBefore & SpaceAfter (main baseline, * lstflow of main line) * pheightsLineWithoutAddedSpace (IN): height of the line without SpaceBefore & SpaceAfter * pheightsSubline (IN): height of subline (local baseline, lstflow of subline) * pheightsRunsExclTrail (IN): height of collected runs to be shaded excluding * trailing spaces area (local baseline, lstflow of subline) * pheightsRunsInclTrail (IN): height of collected runs to be shaded including * trailing spaces area (local baseline, lstflow of subline) * dupRunsExclTrail (IN): width of collected runs excluding trailing spaces area * dupRunsInclTrail (IN): width of collected runs including trailing spaces area * kTFlow (IN): text direction and orientation of subline * kDisp (IN) : display mode - opaque, transparent * prcClip (IN) : clipping rectangle */
LSERR (WINAPI* pfnDrawTextRun)(POLS, PLSRUN, BOOL, BOOL, const POINT*, LPCWSTR, const int*, DWORD, LSTFLOW, UINT, const POINT*, PCHEIGHTS, long, long, const RECT*); /* DrawTextRun:
* pols (IN): * plsrun (IN): * fStrikeout (IN) : * fUnderline (IN) : * pptText (IN): starting point for the text output * lpwchRun (IN): run of characters * rgDupRun (IN): widths of characters * cwchRun (IN): number of characters in run * kTFlow (IN): text direction and orientation * kDisp (IN): display mode - opaque, transparent * pptRun (IN): starting point of the run * heightsPres (IN): presentation heights for this run * dupRun (IN): presentation width for this run * dupLimUnderline (IN): underlining limit * pRectClip (IN): clipping rectangle */
LSERR (WINAPI* pfnDrawSplatLine)(POLS, enum lsksplat, LSCP, const POINT*, PCHEIGHTS, PCHEIGHTS, PCHEIGHTS, long, LSTFLOW, UINT, const RECT*); /* DrawSplatLine:
* pols (IN): * ksplat (IN): See definitions in lsksplat.h * cpSplat (IN): location of the break character which caused the splat. * pptSplatLine (IN) : starting position of the splat line * pheightsLineFull (IN): height of the line including SpaceBefore & SpaceAfter * pheightsLineWithoutAddedSpace (IN): height of the line without SpaceBefore & SpaceAfter * pheightsSubline (IN): height of subline * dup (IN): distance to right margin * kTFlow (IN): text direction and orientation * kDisp (IN): display mode - opaque, transparent * &rcClip (IN) : clipping rectangle */
/* Advanced typography enabling API's */
/* Glyph enabling */
LSERR (WINAPI* pfnFInterruptShaping)(POLS, LSTFLOW, PLSRUN, PLSRUN, BOOL*); /* FInterruptShaping:
* pols (IN): * kTFlow (IN): text direction and orientation * plsrunFirst (IN): run pointer for the previous run * plsrunSecond (IN): run pointer for the current run * &fInterruptShaping (OUT): do you want to interrupt character shaping between these runs */
LSERR (WINAPI* pfnGetGlyphs)(POLS, PLSRUN, LPCWSTR, DWORD, LSTFLOW, PGMAP, PGINDEX*, PGPROP*, DWORD*); /* GetGlyphs:
* pols (IN): * plsrun (IN): run pointer of the first run * pwch (IN): pointer to the string of character codes * cwch (IN): number of characters to be shaped * kTFlow (IN): text direction and orientation * rgGmap (OUT): parallel to the char codes mapping wch->glyph info * &rgGindex (OUT): array of output glyph indices * &rgGprop (OUT): array of output glyph properties * &cgindex (OUT): number of output glyph indices */
LSERR (WINAPI* pfnGetGlyphPositions)(POLS, PLSRUN, LSDEVICE, LPWSTR, PCGMAP, DWORD, PCGINDEX, PCGPROP, DWORD, LSTFLOW, int*, PGOFFSET); /* GetGlyphPositions:
* pols (IN): * plsrun (IN): run pointer of the first run * lsDeviceID (IN): presentation or reference * pwch (IN): pointer to the string of character codes * pgmap (IN): array of wch->glyph mapping * cwch (IN): number of characters to be shaped * rgGindex (IN): array of glyph indices * rgGprop (IN): array of glyph properties * cgindex (IN): number glyph indices * kTFlow (IN): text direction and orientation * rgDu (OUT): array of widths of glyphs * rgGoffset (OUT): array of offsets of glyphs */
LSERR (WINAPI* pfnResetRunContents)(POLS, PLSRUN, LSCP, LSDCP, LSCP, LSDCP); /* ResetRunContents:
* pols (IN): * plsrun (IN): run pointer as returned from FetchRun * cpFirstOld (IN): cpFirst before shaping * dcpOld (IN): dcp before shaping * cpFirstNew (IN): cpFirst after shaping * dcpNew (IN): dcp after shaping */
LSERR (WINAPI* pfnDrawGlyphs)(POLS, PLSRUN, BOOL, BOOL, PCGINDEX, const int*, const int*, PGOFFSET, PGPROP, PCEXPTYPE, DWORD, LSTFLOW, UINT, const POINT*, PCHEIGHTS, long, long, const RECT*); /* DrawGlyphs:
* pols (IN): * plsrun (IN): run pointer of the first run * fStrikeout (IN) : * fUnderline (IN) : * pglyph (IN): array of glyph indices * rgDu (IN): array of widths of glyphs * rgDuBeforeJust (IN): array of widths of glyphs before justification * rgGoffset (IN): array of offsets of glyphs * rgGprop (IN): array of glyph properties * rgExpType (IN): array of glyph expansion types * cglyph (IN): number glyph indices * kTFlow (IN): text direction and orientation * kDisp (IN): display mode - opaque, transparent * pptRun (IN): starting point of the run * heightsPres (IN): presentation heights for this run * dupRun (IN): presentation width for this run * dupLimUnderline (IN): underlining limit * pRectClip (IN): clipping rectangle */
/* Glyph justification */
LSERR (WINAPI* pfnGetGlyphExpansionInfo)(POLS, PLSRUN, LSDEVICE, LPCWSTR, PCGMAP, DWORD, PCGINDEX, PCGPROP, DWORD, LSTFLOW, BOOL, PEXPTYPE, LSEXPINFO*); /* GetGlyphExpansionInfo:
* pols (IN): * plsrun (IN): run pointer of the first run * lsDeviceID (IN): presentation or reference * pwch (IN): pointer to the string of character codes * rggmap (IN): array of wchar->glyph mapping * cwch (IN): number of characters to be shaped * rgglyph (IN): array of glyph indices * rgProp (IN): array of glyph properties * cglyph (IN): number glyph indices * kTFlow (IN): text direction and orientation * fLastTextChunkOnLine (IN): Last text chunk on line? * rgExpType (OUT): array of glyph expansion types * rgexpinfo (OUT): array of glyph expansion info */
LSERR (WINAPI* pfnGetGlyphExpansionInkInfo)(POLS, PLSRUN, LSDEVICE, GINDEX, GPROP, LSTFLOW, DWORD, long*); /* GetGlyphExpansionInkInfo:
* pols (IN): * plsrun (IN): run pointer of the first run * lsDeviceID (IN): presentation or reference * gindex (IN): glyph index * gprop (IN): glyph properties * kTFlow (IN): text direction and orientation * cAddInkDiscrete (IN): number of discrete values (minus 1, because maximum is already known) * rgDu (OUT): array of discrete values */
/* FarEast realted typograpy issues */
LSERR (WINAPI* pfnGetEms)(POLS, PLSRUN, LSTFLOW, PLSEMS); /* GetEms:
* pols (IN): * plsrun (IN): run pointer as returned from FetchRun * kTFlow (IN): text direction and orientation * &lsems (OUT): different fractions of EM in appropriate pixels */
LSERR (WINAPI* pfnPunctStartLine)(POLS, PLSRUN, MWCLS, WCHAR, LSACT*); /* PunctStartLine:
* pols (IN): * plsrun (IN): run pointer for the char * mwcls (IN): mod width class for the char * wch (IN): char * &lsact (OUT): action on the first char on the line */
LSERR (WINAPI* pfnModWidthOnRun)(POLS, PLSRUN, WCHAR, PLSRUN, WCHAR, LSACT*); /* ModWidthOnRun:
* pols (IN): * plsrunFirst (IN): run pointer for the first char * wchFirst (IN): first char * plsrunSecond (IN): run pointer for the second char * wchSecond (IN): second char * &lsact (OUT): action on the last char in 1st run */
LSERR (WINAPI* pfnModWidthSpace)(POLS, PLSRUN, PLSRUN, WCHAR, PLSRUN, WCHAR, LSACT*); /* ModWidthSpace:
* pols (IN): * plsrunCur (IN): run pointer for the current run * plsrunPrev (IN): run pointer for the previous char * wchPrev (IN): previous char * plsrunNext (IN): run pointer for the next char * wchNext (IN): next char * &lsact (OUT): action on space's width */
LSERR (WINAPI* pfnCompOnRun)(POLS, PLSRUN, WCHAR, PLSRUN, WCHAR, LSPRACT*); /* CompOnRun:
* pols (IN): * plsrunFirst (IN): run pointer for the first char * wchFirst (IN): first char * plsrunSecond (IN): run pointer for the second char * wchSecond (IN): second char * &lspract (OUT): prioritized action on the last char in 1st run */
LSERR (WINAPI* pfnCompWidthSpace)(POLS, PLSRUN, PLSRUN, WCHAR, PLSRUN, WCHAR, LSPRACT*); /* CompWidthSpace:
* pols (IN): * plsrunCur (IN): run pointer for the current run * plsrunPrev (IN): run pointer for the previous char * wchPrev (IN): previous char * plsrunNext (IN): run pointer for the next char * wchNext (IN): next char * &lspract (OUT): prioritized action on space's width */
LSERR (WINAPI* pfnExpOnRun)(POLS, PLSRUN, WCHAR, PLSRUN, WCHAR, LSACT*); /* ExpOnRun:
* pols (IN): * plsrunFirst (IN): run pointer for the first char * wchFirst (IN): first char * plsrunSecond (IN): run pointer for the second char * wchSecond (IN): second char * &lsact (OUT): action on the last run char from 1st run */
LSERR (WINAPI* pfnExpWidthSpace)(POLS, PLSRUN, PLSRUN, WCHAR, PLSRUN, WCHAR, LSACT*); /* ExpWidthSpace:
* pols (IN): * plsrunCur (IN): run pointer for the current run * plsrunPrev (IN): run pointer for the previous char * wchPrev (IN): previous char * plsrunNext (IN): run pointer for the next char * wchNext (IN): next char * &lsact (OUT): action on space's width */
LSERR (WINAPI* pfnGetModWidthClasses)(POLS, PLSRUN, const WCHAR*, DWORD, MWCLS*); /* GetModWidthClasses:
* pols (IN): * plsrun (IN): run pointer for the characters * rgwch (IN): array of characters * cwch (IN): number of characters in the rgwch array * rgmwcls(OUT): array of ModWidthClass's for chars from the rgwch array */
LSERR (WINAPI* pfnGetBreakingClasses)(POLS, PLSRUN, LSCP, WCHAR, BRKCLS*, BRKCLS*); /* GetBreakingClasses:
* pols (IN): * plsrun (IN): run pointer for the char * cp (IN): cp of the character * wch (IN): character * &brkclsFirst (OUT): breaking class for this char as the leading one in a pair * &brkclsSecond (OUT): breaking class for this char as the following one in a pair */
LSERR (WINAPI* pfnFTruncateBefore)(POLS, PLSRUN, LSCP, WCHAR, long, PLSRUN, LSCP, WCHAR, long, long, BOOL*); /* FTruncateBefore:
* pols (IN): * plsrunCur (IN): plsrun of the current character * cpCur (IN): cp of truncation char * wchCur (IN): truncation character * durCur (IN): width of truncation character * plsrunPrev (IN): plsrun of the previous character * cpPrev (IN): cp of the previous character * wchPrev (IN): previous character * durPrev (IN): width of truncation character * durCut (IN): width from the RM until the end of the current character * &fTruncateBefore (OUT): truncation point is before this character * (if it exceeds RM) */ LSERR (WINAPI* pfnCanBreakBeforeChar)(POLS, BRKCLS, BRKCOND*); /* CanBreakBeforeChar:
* pols (IN): * brkcls (IN): breaking class for the char as the following one in a pair * &brktxtBefore (OUT): break condition before the character */
LSERR (WINAPI* pfnCanBreakAfterChar)(POLS, BRKCLS, BRKCOND*); /* CanBreakAfterChar:
* pols (IN): * brkcls (IN): breaking class for the char as the leading one in a pair * &brktxtAfter (OUT): break text condition after the character */
LSERR (WINAPI* pfnFHangingPunct)(POLS, PLSRUN, MWCLS, WCHAR, BOOL*); /* FHangingPunct:
* pols (IN): * plsrun (IN): run pointer for the char * mwcls (IN): mod width class of this char * wch (IN): character * &fHangingPunct (OUT): can be pushed to the right margin? */
LSERR (WINAPI* pfnGetSnapGrid)(POLS, WCHAR*, PLSRUN*, LSCP*, DWORD, BOOL*, DWORD*); /* GetGridInfo:
* pols (IN): * rgwch (IN): array of characters * rgplsrun (IN): array of corresponding plsrun's * rgcp (IN): array of corresponding cp's * iwch (IN): number of characters * rgfSnap (OUT): array of fSnap flags for all characters * pwGridNumber (OUT): number of grid points on the line */
LSERR (WINAPI* pfnDrawEffects)(POLS, PLSRUN, UINT, const POINT*, LPCWSTR, const int*, const int*, DWORD, LSTFLOW, UINT, PCHEIGHTS, long, long, const RECT*); /* DrawTextRun:
* pols (IN): * plsrun (IN): * EffectsFlags (IN): set of client defined special effects bits * ppt (IN): output location * lpwchRun (IN): run of characters * rgDupRun (IN): widths of characters * rgDupLeftCut (IN): dup cut from the left side of the char * cwchRun (IN): number of characters in run * kTFlow (IN): text direction and orientation * kDisp (IN): display mode - opaque, transparent * heightsPres (IN): presentation heights for this run * dupRun (IN): presentation width for this run * dupLimUnderline (IN): underlining limit * pRectClip (IN): clipping rectangle */
LSERR (WINAPI* pfnFCancelHangingPunct)(POLS, LSCP, LSCP, WCHAR, MWCLS, BOOL*);
/* FCancelHangingPunct:
* pols (IN): * cpLim (IN): cpLim of the line * cpLastAdjustable (IN): cp of the last adjustable character on the line * wch (IN): last character * mwcls (IN): mod width class of this char * pfCancelHangingPunct (OUT): cancel hanging punctuation? */
LSERR (WINAPI* pfnModifyCompAtLastChar)(POLS, LSCP, LSCP, WCHAR, MWCLS, long, long, long*);
/* ModifyCompAtLastChar:
* pols (IN): * cpLim (IN): cpLim of the line * cpLastAdjustable (IN): cp of the last adjustable character on the line * wch (IN): last character * mwcls (IN): mod width class of this char * durCompLastRight (IN): suggested compression on the right side * durCompLastLeft (IN): suggested compression on the left side * pdurCahngeComp (OUT): change compression amount on the last char */
/* Enumeration callbacks */
LSERR (WINAPI* pfnEnumText)(POLS, PLSRUN, LSCP, LSDCP, LPCWSTR, DWORD, LSTFLOW, BOOL, BOOL, const POINT*, PCHEIGHTS, long, BOOL, long*); /* EnumText:
* pols (IN): * plsrun (IN): from DNODE * cpFirst (IN): from DNODE * dcp (IN): from DNODE * rgwch(IN): array of characters * cwch(IN): number of characters * lstflow (IN): text flow * fReverseOrder (IN): enumerate in reverse order * fGeometryProvided (IN): * pptStart (IN): starting position, iff fGeometryProvided * pheightsPres(IN): from DNODE, relevant iff fGeometryProvided * dupRun(IN): from DNODE, relevant iff fGeometryProvided * fCharWidthProvided (IN): * rgdup(IN): array of character widths, iff fCharWidthProvided */
LSERR (WINAPI* pfnEnumTab)(POLS, PLSRUN, LSCP, LPCWSTR, WCHAR, LSTFLOW, BOOL, BOOL, const POINT*, PCHEIGHTS, long); /* EnumTab:
* pols (IN): * plsrun (IN): from DNODE * cpFirst (IN): from DNODE * rgwch(IN): Pointer to one Tab character * wchTabLeader (IN): tab leader * lstflow (IN): text flow * fReverseOrder (IN): enumerate in reverse order * fGeometryProvided (IN): * pptStart (IN): starting position, iff fGeometryProvided * pheightsPres(IN): from DNODE, relevant iff fGeometryProvided * dupRun(IN): from DNODE, relevant iff fGeometryProvided */
LSERR (WINAPI* pfnEnumPen)(POLS, BOOL, LSTFLOW, BOOL, BOOL, const POINT*, long, long); /* EnumPen:
* pols (IN): * fBorder (IN): * lstflow (IN): text flow * fReverseOrder (IN): enumerate in reverse order * fGeometryProvided (IN): * pptStart (IN): starting position, iff fGeometryProvided * dup(IN): from DNODE iff fGeometryProvided * dvp(IN): from DNODE iff fGeometryProvided */
/* Objects bundling */
LSERR (WINAPI* pfnGetObjectHandlerInfo)(POLS, DWORD, void*); /* GetObjectHandlerInfo:
* pols (IN): * idObj (IN): id of the object handler * pObjectInfo (OUT): initialization information of the specified object */
/* Debugging APIs */ void (WINAPI *pfnAssertFailed)(char*, char*, int);
}; typedef struct lscbk LSCBK;
#endif /* !LSCBK_DEFINED */
|