483 lines
21 KiB
C
483 lines
21 KiB
C
/*++
|
|
|
|
Copyright (c) 1996-1997 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
dumpufm.c
|
|
|
|
Abstract:
|
|
|
|
UFM dump tool
|
|
|
|
Environment:
|
|
|
|
Windows NT PostScript driver
|
|
|
|
Revision History:
|
|
|
|
12/20/96 -eigos-
|
|
Created it.
|
|
|
|
--*/
|
|
|
|
#include "precomp.h"
|
|
|
|
//
|
|
// Macros
|
|
//
|
|
|
|
#define FILENAME_SIZE 256
|
|
|
|
//
|
|
// Globals
|
|
//
|
|
|
|
BYTE gcstrError1[] = "Usage: dumpufm *.ufm\n";
|
|
BYTE gcstrError2[] = "Cannot open file \"%ws\".\n";
|
|
BYTE *gcstrflInfo[] = {"FM_INFO_TECH_TRUETYPE",
|
|
"FM_INFO_TECH_BITMAP",
|
|
"FM_INFO_TECH_STROKE",
|
|
"FM_INFO_TECH_OUTLINE_NOT_TRUETYPE",
|
|
"FM_INFO_ARB_XFORMS",
|
|
"FM_INFO_1BPP",
|
|
"FM_INFO_4BPP",
|
|
"FM_INFO_8BPP",
|
|
"FM_INFO_16BPP",
|
|
"FM_INFO_24BPP",
|
|
"FM_INFO_32BPP",
|
|
"FM_INFO_INTEGER_WIDTH",
|
|
"FM_INFO_CONSTANT_WIDTH",
|
|
"FM_INFO_NOT_CONTIGUOUS",
|
|
"FM_INFO_TECH_MM",
|
|
"FM_INFO_RETURNS_OUTLINES",
|
|
"FM_INFO_RETURNS_STROKES",
|
|
"FM_INFO_RETURNS_BITMAPS",
|
|
"FM_INFO_UNICODE_COMPLIANT",
|
|
"FM_INFO_RIGHT_HANDED",
|
|
"FM_INFO_INTEGRAL_SCALING",
|
|
"FM_INFO_90DEGREE_ROTATIONS",
|
|
"FM_INFO_OPTICALLY_FIXED_PITCH",
|
|
"FM_INFO_DO_NOT_ENUMERATE",
|
|
"FM_INFO_ISOTROPIC_SCALING_ONLY",
|
|
"FM_INFO_ANISOTROPIC_SCALING_ONLY",
|
|
"FM_INFO_MM_INSTANCE",
|
|
"FM_INFO_FAMILY_EQUIV",
|
|
"FM_INFO_DBCS_FIXED_PITCH",
|
|
"FM_INFO_NONNEGATIVE_AC",
|
|
"FM_INFO_IGNORE_TC_RA_ABLE",
|
|
"FM_INFO_TECH_TYPE1"};
|
|
|
|
//
|
|
// Internal prototype
|
|
//
|
|
|
|
BOOL BDumpUFM(IN PUNIFM_HDR);
|
|
|
|
int __cdecl
|
|
main(
|
|
IN int argc,
|
|
IN char **argv)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
main
|
|
|
|
Arguments:
|
|
|
|
argc - Number of parameters in the following
|
|
argv - The parameters, starting with our name
|
|
|
|
Return Value:
|
|
|
|
Return error code
|
|
|
|
Note:
|
|
|
|
|
|
--*/
|
|
{
|
|
HFILEMAP hUFMData;
|
|
DWORD dwUFMSize;
|
|
WORD wSize;
|
|
WCHAR awchFile[FILENAME_SIZE];
|
|
PUNIFM_HDR pUFM;
|
|
|
|
//RIP(("Start dumpufm.exe\n"));
|
|
|
|
if (argc != 2)
|
|
{
|
|
fprintf( stderr, gcstrError1);
|
|
return -1;
|
|
}
|
|
|
|
argv++;
|
|
|
|
MultiByteToWideChar(CP_ACP,
|
|
0,
|
|
*argv,
|
|
strlen(*argv)+1,
|
|
awchFile,
|
|
FILENAME_SIZE);
|
|
|
|
hUFMData = MapFileIntoMemory( awchFile,
|
|
(PVOID)&pUFM,
|
|
&dwUFMSize );
|
|
|
|
if (!hUFMData)
|
|
{
|
|
fprintf( stderr, gcstrError2, *argv);
|
|
return -2;
|
|
}
|
|
|
|
printf(" File = %ws\n", awchFile);
|
|
BDumpUFM(pUFM);
|
|
|
|
UnmapFileFromMemory(hUFMData);
|
|
|
|
return 0;
|
|
}
|
|
|
|
|
|
BOOL
|
|
BDumpUFM(
|
|
IN PUNIFM_HDR pUFM)
|
|
{
|
|
|
|
PUNIDRVINFO pUnidrvInfo;
|
|
PIFIMETRICS pIFI;
|
|
PIFIEXTRA pIFIExtra;
|
|
FONTSIM *pFontSim;
|
|
FONTDIFF *pFontDiff;
|
|
EXTTEXTMETRIC *pExtTextMetric;
|
|
PWIDTHTABLE pWidthTable;
|
|
PKERNDATA pKerningData;
|
|
FD_KERNINGPAIR *pKernPair;
|
|
PANOSE *ppan;
|
|
PTRDIFF dpTmp;
|
|
|
|
PWSTR pwszFamilyName;
|
|
PWSTR pwszStyleName;
|
|
PWSTR pwszFaceName;
|
|
PWSTR pwszUniqueName;
|
|
|
|
DWORD dwI, dwJ;
|
|
PSHORT psWidth;
|
|
PCHAR pCommand;
|
|
BYTE ubCommand[256];
|
|
|
|
pUnidrvInfo = (PUNIDRVINFO) ((PBYTE)pUFM + pUFM->loUnidrvInfo);
|
|
pIFI = (PIFIMETRICS) ((PBYTE)pUFM + pUFM->loIFIMetrics);
|
|
if (pIFI->cjIfiExtra)
|
|
pIFIExtra = (PIFIEXTRA) (pIFI + 1);
|
|
else
|
|
pIFIExtra = (PIFIEXTRA) NULL;
|
|
if (pIFI->dpFontSim)
|
|
pFontSim = (FONTSIM*) ((PBYTE)pIFI + pIFI->dpFontSim);
|
|
else
|
|
pFontSim = (FONTSIM*) NULL;
|
|
if (pUFM->loExtTextMetric)
|
|
pExtTextMetric = (EXTTEXTMETRIC*) ((PBYTE)pUFM + pUFM->loExtTextMetric);
|
|
else
|
|
pExtTextMetric = NULL;
|
|
pWidthTable = (PWIDTHTABLE) ((PBYTE)pUFM + pUFM->loWidthTable);
|
|
pKerningData = (PKERNDATA) ((PBYTE)pUFM + pUFM->loKernPair);
|
|
ppan = &pIFI->panose;
|
|
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf(" Universal Printer Driver Font Metrics Data (UFM)\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("UNIFM_HDR.dwSize = %d\n", pUFM->dwSize);
|
|
printf("UNIFM_HDR.dwVersion = %d.%d\n", pUFM->dwVersion >> 16,
|
|
pUFM->dwVersion & 0xFFFF);
|
|
printf("UNIFM_HDR.ulDefaultCodepage = %d\n", pUFM->ulDefaultCodepage);
|
|
printf("UNIFM_HDR.lGlyphSetDataRCID = %d\n", pUFM->lGlyphSetDataRCID);
|
|
printf("UNIFM_HDR.loUnidrvInfo = 0x%x\n", pUFM->loUnidrvInfo);
|
|
printf("UNIFM_HDR.loIFIMetrics = 0x%x\n", pUFM->loIFIMetrics);
|
|
printf("UNIFM_HDR.loExtTextMetric = 0x%x\n", pUFM->loExtTextMetric);
|
|
printf("UNIFM_HDR.loWidthTable = 0x%x\n", pUFM->loWidthTable);
|
|
printf("UNIFM_HDR.loKernPair = 0x%x\n", pUFM->loKernPair);
|
|
printf("\n");
|
|
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("UNIDRVINFO\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("UNIDRVINFO.dwSize = %d\n", pUnidrvInfo->dwSize);
|
|
printf("UNIDRVINFO.flGenFlags = %d\n", pUnidrvInfo->flGenFlags);
|
|
printf("UNIDRVINFO.wType = %d\n", pUnidrvInfo->wType);
|
|
printf("UNIDRVINFO.fCaps = %d\n", pUnidrvInfo->fCaps);
|
|
printf("UNIDRVINFO.wXRes = %d\n", pUnidrvInfo->wXRes);
|
|
printf("UNIDRVINFO.wYRes = %d\n", pUnidrvInfo->wYRes);
|
|
printf("UNIDRVINFO.sYAdjust = %d\n", pUnidrvInfo->sYAdjust);
|
|
printf("UNIDRVINFO.sYMoved = %d\n", pUnidrvInfo->sYMoved);
|
|
printf("UNIDRVINFO.wPrivateData = %d\n", pUnidrvInfo->wPrivateData);
|
|
|
|
if (pUnidrvInfo->SelectFont.dwCount && pUnidrvInfo->SelectFont.loOffset)
|
|
{
|
|
pCommand = (PCHAR)pUnidrvInfo + pUnidrvInfo->SelectFont.loOffset;
|
|
printf("UNIDRVINFO.SelectFont = ");
|
|
|
|
for (dwI = 0; dwI < pUnidrvInfo->SelectFont.dwCount; dwI ++, pCommand++)
|
|
{
|
|
if (*pCommand < 0x20 || 0x7e < *pCommand )
|
|
{
|
|
printf("\\x%X",*pCommand);
|
|
}
|
|
else
|
|
{
|
|
printf("%c",*pCommand);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (pUnidrvInfo->UnSelectFont.dwCount && pUnidrvInfo->UnSelectFont.loOffset)
|
|
{
|
|
pCommand = (PCHAR)pUnidrvInfo + pUnidrvInfo->UnSelectFont.loOffset;
|
|
printf("\nUNIDRVINFO.UnSelectFont = ");
|
|
for (dwI = 0; dwI < pUnidrvInfo->UnSelectFont.dwCount; dwI ++, pCommand++)
|
|
{
|
|
if (*pCommand < 0x32 || 0x7e < *pCommand )
|
|
{
|
|
printf("\\x%X",*pCommand);
|
|
}
|
|
else
|
|
{
|
|
printf("%c",*pCommand);
|
|
}
|
|
}
|
|
}
|
|
printf("\n");
|
|
|
|
pwszFamilyName = (PWSTR)(((BYTE*) pIFI) + pIFI->dpwszFamilyName);
|
|
pwszStyleName = (PWSTR)(((BYTE*) pIFI) + pIFI->dpwszStyleName) ;
|
|
pwszFaceName = (PWSTR)(((BYTE*) pIFI) + pIFI->dpwszFaceName) ;
|
|
pwszUniqueName = (PWSTR)(((BYTE*) pIFI) + pIFI->dpwszUniqueName);
|
|
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("IFIMETRICS\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("IFIMETIRCS.cjThis = %-#8lx\n" , pIFI->cjThis );
|
|
printf("IFIMETIRCS.cjIfiExtra = %-#8lx\n" , pIFI->cjIfiExtra);
|
|
printf("IFIMETIRCS.pwszFamilyName = \"%ws\"\n", pwszFamilyName );
|
|
printf(" = %02x%02x%02x%02x%02x\n", *(PWCHAR)pwszFamilyName,*((PWCHAR)pwszFamilyName+1),*((PWCHAR)pwszFamilyName+2),*((PWCHAR)pwszFamilyName+3),*((PWCHAR)pwszFamilyName+4));
|
|
if( pIFI->flInfo & FM_INFO_FAMILY_EQUIV )
|
|
{
|
|
while( *(pwszFamilyName += wcslen( pwszFamilyName ) + 1) )
|
|
printf(" \"%ws\"\n", pwszFamilyName );
|
|
}
|
|
printf("IFIMETRICS.pwszStyleName = \"%ws\"\n", pwszStyleName );
|
|
printf("IFIMETRICS.pwszFaceName = \"%ws\"\n", pwszFaceName );
|
|
printf("IFIMETRICS.pwszUniqueName = \"%ws\"\n", pwszUniqueName );
|
|
printf("IFIMETRICS.dpFontSim = %-#8lx\n" , pIFI->dpFontSim );
|
|
printf("IFIMETRICS.lEmbedId = %d\n", pIFI->lEmbedId );
|
|
printf("IFIMETRICS.lItalicAngle = %d\n", pIFI->lItalicAngle);
|
|
printf("IFIMETRICS.lCharBias = %d\n", pIFI->lCharBias );
|
|
printf("IFIMETRICS.dpCharSets = %d\n", pIFI->dpCharSets );
|
|
printf("IFIMETRICS.jWinCharSet = %04x\n" , pIFI->jWinCharSet );
|
|
printf("IFIMETRICS.jWinPitchAndFamily = %04x\n" , pIFI->jWinPitchAndFamily );
|
|
printf("IFIMETRICS.usWinWeight = %d\n" , pIFI->usWinWeight );
|
|
printf("IFIMETRICS.flInfo = %-#8lx\n" , pIFI->flInfo );
|
|
for( dwI = 0; dwI < 32; dwI ++ )
|
|
{
|
|
if (pIFI->flInfo & (0x00000001 << dwI))
|
|
{
|
|
printf(" %s\n", gcstrflInfo[dwI]);
|
|
}
|
|
}
|
|
printf("IFIMETRICS.fsSelection = %-#6lx\n" , pIFI->fsSelection );
|
|
printf("IFIMETRICS.fsType = %-#6lx\n" , pIFI->fsType );
|
|
printf("IFIMETRICS.fwdUnitsPerEm = %d\n" , pIFI->fwdUnitsPerEm );
|
|
printf("IFIMETRICS.fwdLowestPPEm = %d\n" , pIFI->fwdLowestPPEm );
|
|
printf("IFIMETRICS.fwdWinAscender = %d\n" , pIFI->fwdWinAscender );
|
|
printf("IFIMETRICS.fwdWinDescender = %d\n" , pIFI->fwdWinDescender );
|
|
printf("IFIMETRICS.fwdMacAscender = %d\n" , pIFI->fwdMacAscender );
|
|
printf("IFIMETRICS.fwdMacDescender = %d\n" , pIFI->fwdMacDescender );
|
|
printf("IFIMETRICS.fwdMacLineGap = %d\n" , pIFI->fwdMacLineGap );
|
|
printf("IFIMETRICS.fwdTypoAscender = %d\n" , pIFI->fwdTypoAscender );
|
|
printf("IFIMETRICS.fwdTypoDescender = %d\n" , pIFI->fwdTypoDescender );
|
|
printf("IFIMETRICS.fwdTypoLineGap = %d\n" , pIFI->fwdTypoLineGap );
|
|
printf("IFIMETRICS.fwdAveCharWidth = %d\n" , pIFI->fwdAveCharWidth );
|
|
printf("IFIMETRICS.fwdMaxCharInc = %d\n" , pIFI->fwdMaxCharInc );
|
|
printf("IFIMETRICS.fwdCapHeight = %d\n" , pIFI->fwdCapHeight );
|
|
printf("IFIMETRICS.fwdXHeight = %d\n" , pIFI->fwdXHeight );
|
|
printf("IFIMETRICS.fwdSubscriptXSize = %d\n" , pIFI->fwdSubscriptXSize );
|
|
printf("IFIMETRICS.fwdSubscriptYSize = %d\n" , pIFI->fwdSubscriptYSize );
|
|
printf("IFIMETRICS.fwdSubscriptXOffset = %d\n" , pIFI->fwdSubscriptXOffset );
|
|
printf("IFIMETRICS.fwdSubscriptYOffset = %d\n" , pIFI->fwdSubscriptYOffset );
|
|
printf("IFIMETRICS.fwdSuperscriptXSize = %d\n" , pIFI->fwdSuperscriptXSize );
|
|
printf("IFIMETRICS.fwdSuperscriptYSize = %d\n" , pIFI->fwdSuperscriptYSize );
|
|
printf("IFIMETRICS.fwdSuperscriptXOffset= %d\n" , pIFI->fwdSuperscriptXOffset);
|
|
printf("IFIMETRICS.fwdSuperscriptYOffset= %d\n" , pIFI->fwdSuperscriptYOffset);
|
|
printf("IFIMETRICS.fwdUnderscoreSize = %d\n" , pIFI->fwdUnderscoreSize );
|
|
printf("IFIMETRICS.fwdUnderscorePosition= %d\n" , pIFI->fwdUnderscorePosition);
|
|
printf("IFIMETRICS.fwdStrikeoutSize = %d\n" , pIFI->fwdStrikeoutSize );
|
|
printf("IFIMETRICS.fwdStrikeoutPosition = %d\n" , pIFI->fwdStrikeoutPosition );
|
|
printf("IFIMETRICS.chFirstChar = %-#4x\n" , (int) (BYTE) pIFI->chFirstChar );
|
|
printf("IFIMETRICS.chLastChar = %-#4x\n" , (int) (BYTE) pIFI->chLastChar );
|
|
printf("IFIMETRICS.chDefaultChar = %-#4x\n" , (int) (BYTE) pIFI->chDefaultChar );
|
|
printf("IFIMETRICS.chBreakChar = %-#4x\n" , (int) (BYTE) pIFI->chBreakChar );
|
|
printf("IFIMETRICS.wcFirsChar = %-#6x\n" , pIFI->wcFirstChar );
|
|
printf("IFIMETRICS.wcLastChar = %-#6x\n" , pIFI->wcLastChar );
|
|
printf("IFIMETRICS.wcDefaultChar = %-#6x\n" , pIFI->wcDefaultChar );
|
|
printf("IFIMETRICS.wcBreakChar = %-#6x\n" , pIFI->wcBreakChar );
|
|
printf("IFIMETRICS.ptlBaseline = {%d,%d}\n" , pIFI->ptlBaseline.x,
|
|
pIFI->ptlBaseline.y);
|
|
printf("IFIMETRICS.ptlAspect = {%d,%d}\n" , pIFI->ptlAspect.x,
|
|
pIFI->ptlAspect.y );
|
|
printf("IFIMETRICS.ptlCaret = {%d,%d}\n" , pIFI->ptlCaret.x,
|
|
pIFI->ptlCaret.y );
|
|
printf("IFIMETRICS.rclFontBox = {%d,%d,%d,%d}\n",pIFI->rclFontBox.left,
|
|
pIFI->rclFontBox.top,
|
|
pIFI->rclFontBox.right,
|
|
pIFI->rclFontBox.bottom );
|
|
printf("IFIMETRICS.achVendId = \"%c%c%c%c\"\n",pIFI->achVendId[0],
|
|
pIFI->achVendId[1],
|
|
pIFI->achVendId[2],
|
|
pIFI->achVendId[3] );
|
|
printf("IFIMETRICS.cKerningPairs = %d\n" , pIFI->cKerningPairs );
|
|
printf("IFIMETRICS.ulPanoseCulture = %-#8lx\n" , pIFI->ulPanoseCulture);
|
|
printf(
|
|
"IFIMETRICS.panose = {%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x}\n"
|
|
, ppan->bFamilyType
|
|
, ppan->bSerifStyle
|
|
, ppan->bWeight
|
|
, ppan->bProportion
|
|
, ppan->bContrast
|
|
, ppan->bStrokeVariation
|
|
, ppan->bArmStyle
|
|
, ppan->bLetterform
|
|
, ppan->bMidline
|
|
, ppan->bXHeight);
|
|
|
|
printf("\n");
|
|
|
|
if (pIFIExtra)
|
|
{
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("IFIEXTRA\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("IFIEXTRA.ulIdentifier = %d\n", pIFIExtra->ulIdentifier);
|
|
printf("IFIEXTRA.dpFontSig = %d\n", pIFIExtra->dpFontSig);
|
|
printf("IFIEXTRA.cig = %d\n", pIFIExtra->cig);
|
|
printf("IFIEXTRA.dpDesignVector = %d\n", pIFIExtra->dpDesignVector);
|
|
printf("IFIEXTRA.dpAxesInfoW = %d\n", pIFIExtra->dpAxesInfoW);
|
|
printf("\n");
|
|
}
|
|
|
|
if (pFontSim)
|
|
{
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("FONTSIM\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("FONTSIM.dpBold = %d\n", pFontSim->dpBold);
|
|
printf("FONTSIM.dpItalic = %d\n", pFontSim->dpItalic);
|
|
printf("FONTSIM.dpBoldItalic = %d\n", pFontSim->dpBoldItalic);
|
|
for (dwI = 0; dwI < 3; dwI ++)
|
|
{
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
switch(dwI)
|
|
{
|
|
case 0:
|
|
printf("dpBold\n");
|
|
dpTmp = pFontSim->dpBold;
|
|
break;
|
|
case 1:
|
|
printf("dpItalic\n");
|
|
dpTmp = pFontSim->dpItalic;
|
|
break;
|
|
case 2:
|
|
printf("dpBoldItalic\n");
|
|
dpTmp = pFontSim->dpBoldItalic;
|
|
break;
|
|
}
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
if (dpTmp)
|
|
{
|
|
pFontDiff = (FONTDIFF*)((PBYTE)pFontSim + dpTmp);
|
|
|
|
printf("FONTDIFF.bWeight = %d\n",pFontDiff->bWeight);
|
|
printf("FONTDIFF.usWinWeight = %d\n",pFontDiff->usWinWeight);
|
|
printf("FONTDIFF.fsSelection = %d\n",pFontDiff->fsSelection);
|
|
printf("FONTDIFF.fwdAveCharWidth = %d\n",pFontDiff->fwdAveCharWidth);
|
|
printf("FONTDIFF.fwdMaxCharInc = %d\n",pFontDiff->fwdMaxCharInc);
|
|
printf("FONTDIFF.ptlCaret = %d\n",pFontDiff->ptlCaret);
|
|
}
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
if (pExtTextMetric)
|
|
{
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("EXTTEXTMETRIC\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("EXTTEXTMETRIC.emSize = %d\n",pExtTextMetric->emSize);
|
|
printf("EXTTEXTMETRIC.emPointSize = %d\n",pExtTextMetric->emPointSize);
|
|
printf("EXTTEXTMETRIC.emOrientation = %d\n",pExtTextMetric->emOrientation);
|
|
printf("EXTTEXTMETRIC.emMinScale = %d\n",pExtTextMetric->emMinScale);
|
|
printf("EXTTEXTMETRIC.emMaxScale = %d\n",pExtTextMetric->emMaxScale);
|
|
printf("EXTTEXTMETRIC.emMasterUnits = %d\n",pExtTextMetric->emMasterUnits);
|
|
printf("EXTTEXTMETRIC.emCapHeight = %d\n",pExtTextMetric->emCapHeight);
|
|
printf("EXTTEXTMETRIC.emXHeight = %d\n",pExtTextMetric->emXHeight);
|
|
printf("EXTTEXTMETRIC.emLowerCaseAscent = %d\n",pExtTextMetric->emLowerCaseAscent);
|
|
printf("EXTTEXTMETRIC.emLowerCaseDescent = %d\n",pExtTextMetric->emLowerCaseDescent);
|
|
printf("EXTTEXTMETRIC.emSlant = %d\n",pExtTextMetric->emSlant);
|
|
printf("EXTTEXTMETRIC.emSuperScript = %d\n",pExtTextMetric->emSuperScript);
|
|
printf("EXTTEXTMETRIC.emSubScript = %d\n",pExtTextMetric->emSubScript);
|
|
printf("EXTTEXTMETRIC.emSuperScriptSize = %d\n",pExtTextMetric->emSuperScriptSize);
|
|
printf("EXTTEXTMETRIC.emSubScriptSize = %d\n",pExtTextMetric->emSubScriptSize);
|
|
printf("EXTTEXTMETRIC.emUnderlineOffset = %d\n",pExtTextMetric->emUnderlineOffset);
|
|
printf("EXTTEXTMETRIC.emUnderlineWidth = %d\n",pExtTextMetric->emUnderlineWidth);
|
|
printf("EXTTEXTMETRIC.emDoubleUpperUnderlineOffset = %d\n",pExtTextMetric->emDoubleUpperUnderlineOffset);
|
|
printf("EXTTEXTMETRIC.emDoubleLowerUnderlineOffset = %d\n",pExtTextMetric->emDoubleLowerUnderlineOffset);
|
|
printf("EXTTEXTMETRIC.emDoubleUpperUnderlineWidth = %d\n",pExtTextMetric->emDoubleUpperUnderlineWidth);
|
|
printf("EXTTEXTMETRIC.emDoubleLowerUnderlineWidth = %d\n",pExtTextMetric->emDoubleLowerUnderlineWidth);
|
|
printf("EXTTEXTMETRIC.emStrikeOutOffset = %d\n",pExtTextMetric->emStrikeOutOffset);
|
|
printf("EXTTEXTMETRIC.emStrikeOutWidth = %d\n",pExtTextMetric->emStrikeOutWidth);
|
|
printf("EXTTEXTMETRIC.emKernPairs = %d\n",pExtTextMetric->emKernPairs);
|
|
printf("EXTTEXTMETRIC.emKernTracks = %d\n",pExtTextMetric->emKernTracks);
|
|
}
|
|
|
|
if (pUFM->loWidthTable)
|
|
{
|
|
printf("\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("WIDTHTABLE\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("WIDTHTABLE.dwSize = %d\n", pWidthTable->dwSize);
|
|
printf("WIDTHTABLE.dwRunNum = %d\n", pWidthTable->dwRunNum);
|
|
for (dwI = 0; dwI < pWidthTable->dwRunNum; dwI ++)
|
|
{
|
|
printf("WidthRun[%d].wStartGlyph = %x\n",
|
|
dwI+1, pWidthTable->WidthRun[dwI].wStartGlyph);
|
|
printf("WidthRun[%d].wGlyphCount = %d\n",
|
|
dwI+1, pWidthTable->WidthRun[dwI].wGlyphCount);
|
|
psWidth = (PSHORT)((PBYTE)pWidthTable +
|
|
pWidthTable->WidthRun[dwI].loCharWidthOffset);
|
|
for (dwJ = 0; dwJ < pWidthTable->WidthRun[dwI].wGlyphCount; dwJ ++, psWidth++)
|
|
{
|
|
printf("Width[%d] = %d\n", dwJ, *psWidth);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (pUFM->loKernPair)
|
|
{
|
|
printf("\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("KERNDATA\n");
|
|
printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
|
|
printf("KERNDATA.dwSize = %d\n", pKerningData->dwSize);
|
|
pKernPair = pKerningData->KernPair;
|
|
for (dwI = 0; dwI < pKerningData->dwKernPairNum; dwI++, pKernPair++)
|
|
{
|
|
printf("KERNDATA.KernPair[%d].wcFirst = %x\n", dwI+1, pKernPair->wcFirst);
|
|
printf("KERNDATA.KernPair[%d].wcSecond = %x\n", dwI+1, pKernPair->wcSecond);
|
|
printf("KERNDATA.KernPair[%d].fwdKern = %d\n", dwI+1, pKernPair->fwdKern);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|