campo-sirio/pdf/font/ft_font.h
guy 3bf951f42c Patch level : 10.0
Files correlati     : pdflib
Ricompilazione Demo : [ ]
Commento            :
Aggiornata pdflib.dll alla versione 7.0.4


git-svn-id: svn://10.65.10.50/trunk@18580 c028cbd2-c16b-5b4b-a496-9718f37d4682
2009-03-23 08:55:58 +00:00

274 lines
10 KiB
C
Executable File

/*---------------------------------------------------------------------------*
| PDFlib - A library for generating PDF on the fly |
+---------------------------------------------------------------------------+
| Copyright (c) 1997-2006 Thomas Merz and PDFlib GmbH. All rights reserved. |
+---------------------------------------------------------------------------+
| |
| This software is subject to the PDFlib license. It is NOT in the |
| public domain. Extended versions and commercial licenses are |
| available, please check http://www.pdflib.com. |
| |
*---------------------------------------------------------------------------*/
/* $Id: ft_font.h,v 1.3 2009-03-23 08:51:17 guy Exp $
*
* Header file for font handling
*
*/
#ifndef FT_FONT_H
#define FT_FONT_H
#include "pc_util.h"
#include "pc_geom.h"
#include "pc_file.h"
#include "ft_cid.h"
#define FNT_DEFAULT_WIDTH 250 /* some reasonable default */
#define FNT_DEFAULT_CIDWIDTH 1000 /* for CID fonts */
#define FNT_MISSING_WIDTH -1234567890 /* missing width value */
#define FNT_DEFAULT_UNDERLINEWIDTH 50 /* default value of underlineThickness*/
#define FNT_MAX_METRICS 2048.0 /* maximal font metrics value */
/*
* these are the font weight values of Microsoft
* see LOGFONT structure member lfWeight
*/
#define FNT_FW_DONTCARE 0
#define FNT_FW_THIN 100
#define FNT_FW_EXTRALIGHT 200
#define FNT_FW_ULTRALIGHT 200
#define FNT_FW_LIGHT 300
#define FNT_FW_NORMAL 400
#define FNT_FW_REGULAR 400
#define FNT_FW_MEDIUM 500
#define FNT_FW_SEMIBOLD 600
#define FNT_FW_DEMIBOLD 600
#define FNT_FW_BOLD 700
#define FNT_FW_EXTRABOLD 800
#define FNT_FW_ULTRABOLD 800
#define FNT_FW_HEAVY 900
#define FNT_FW_BLACK 900
/*
* these defaults are used when the stem value
* must be derived from the name (unused)
*/
#define FNT_STEMV_MIN 50 /* minimum StemV value */
#define FNT_STEMV_LIGHT 71 /* light StemV value */
#define FNT_STEMV_NORMAL 109 /* normal StemV value */
#define FNT_STEMV_MEDIUM 125 /* mediumbold StemV value */
#define FNT_STEMV_SEMIBOLD 135 /* semibold StemV value */
#define FNT_STEMV_BOLD 165 /* bold StemV value */
#define FNT_STEMV_EXTRABOLD 201 /* extrabold StemV value */
#define FNT_STEMV_BLACK 241 /* black StemV value */
/*
* Bit positions for the font descriptor flag
*/
#define FNT_FIXEDWIDTH (long) (1L<<0)
#define FNT_SERIF (long) (1L<<1)
#define FNT_SYMBOL (long) (1L<<2)
#define FNT_SCRIPT (long) (1L<<3)
#define FNT_ADOBESTANDARD (long) (1L<<5)
#define FNT_ITALIC (long) (1L<<6)
#define FNT_SMALLCAPS (long) (1L<<17)
#define FNT_FORCEBOLD (long) (1L<<18)
#define FNT_FI_ITALIC 255
#define FNT_FI_ITALICNAME "Italic"
#define FNT_DEF_ITALICANGLE -12 /* default italic angle */
#define FNT_MISSING_FONTVAL PDC_SHRT_MIN /* missing font value */
/* start sequence of PFA files */
#define FNT_PFA_STARTSEQU "%!PS"
/* missing file name for font outline data */
#define FNT_MISSING_FILENAME "__missing__filename__"
/* Font types */
typedef enum
{
fnt_Type0, /* Type0 fonts */
fnt_Type1, /* Type1 fonts */
fnt_MMType1, /* Multiple master fonts */
fnt_TrueType, /* TrueType fonts for 1-byte encoding */
fnt_CIDFontType2, /* TrueType fonts for 2-byte encoding */
fnt_Type1C, /* CFF PostScript fonts for 1-byte encoding */
fnt_CIDFontType0, /* OpenType fonts with CFF_ table for 2-byte encoding */
fnt_CIDFontType0C, /* CFF PostScript fonts for 2-byte encoding */
fnt_OpenType, /* OpenType fonts for 1-byte encoding */
fnt_OpenTypeC, /* OpenType fonts for 2-byte encoding */
fnt_Type3, /* Type3 fonts */
fnt_unknownType /* for initialization only */
}
fnt_fonttype;
/* Font styles */
typedef enum
{
fnt_Normal,
fnt_Bold,
fnt_Italic,
fnt_BoldItalic
}
fnt_fontstyle;
typedef struct fnt_interwidth_s fnt_interwidth;
typedef struct fnt_interwidth4_s fnt_interwidth4;
typedef struct fnt_glyphwidth_s fnt_glyphwidth;
typedef struct fnt_font_metric_s fnt_font_metric;
typedef struct fnt_font_s fnt_font;
/* Code interval for glyph width */
struct fnt_interwidth_s
{
pdc_ushort startcode; /* start code of interval */
pdc_short width; /* width of glyphs in the code interval */
};
struct fnt_interwidth4_s
{
int startcode; /* start UTF-32 Unicode of interval */
pdc_short width; /* width of glyphs in the code interval */
};
/* Code and Unicode for glyph width */
struct fnt_glyphwidth_s
{
pdc_ushort unicode; /* UTF-16 Unicode of glyph */
pdc_short code; /* builtin 8-bit code */
pdc_short width; /* glyph width */
};
/* Font metric exchange structure */
struct fnt_font_metric_s
{
char *name; /* font name (/FontName) */
pdc_ulong flags; /* font flags of font descriptor */
fnt_fonttype type; /* type of font */
int charcoll; /* supported CID character collection */
/* < 0: Halfwidth Latin-1 character */
/* font metric */
pdc_scalar italicAngle; /* AFM key: ItalicAngle */
int isFixedPitch; /* AFM key: IsFixedPitch */
pdc_scalar llx; /* AFM key: FontBBox */
pdc_scalar lly; /* AFM key: FontBBox */
pdc_scalar urx; /* AFM key: FontBBox */
pdc_scalar ury; /* AFM key: FontBBox */
int underlinePosition; /* AFM key: UnderlinePosition */
int underlineThickness; /* AFM key: UnderlineThickness */
int capHeight; /* AFM key: CapHeight */
int xHeight; /* AFM key: XHeight */
int ascender; /* AFM key: Ascender */
int descender; /* AFM key: Descender */
int StdVW; /* AFM key: StdVW */
int StdHW; /* AFM key: StdHW */
/* glyph widths */
int defwidth; /* default width */
int numwidths; /* number of entries in widths */
int *widths; /* ptr to glyph widths (enumerated by codes) */
int numinters; /* number of entries in ciw */
fnt_interwidth *ciw; /* ptr to code intervals for widths array */
int numglwidths; /* number of entries in glw */
fnt_glyphwidth *glw; /* ptr to glyph widths array */
};
/* Font exchange structure */
struct fnt_font_s
{
char *name; /* font name (/BaseFont or /Name or 'font_#') */
char *utf8name; /* UTF-8 encoded font name (maybe with BOM) */
char *filename; /* font file name */
fnt_font_metric m; /* name, type, flags, charcoll and metric */
pdc_bool isstdfont; /* is an incore font
* or standard CJK font in pdflib */
pdc_bool ishostfont; /* is an host font */
pdc_bool hasdescr; /* has font descriptor */
pdc_bool vertical; /* vertical writing mode */
pdc_ushort spacechar; /* code of space character depending on enc */
int spacewidth; /* width of space character */
int linegap; /* OpenType lineGap */
int weight; /* font weight value 0-1000 */
pdc_matrix matrix; /* Type3 font matrix */
pdc_rectangle bbox; /* Type3 font bounding box */
pdc_scalar fsscale; /* Type3 fontsize scaling */
pdc_bool issymbfont; /* is a symbol font */
pdc_encoding enc; /* font encoding shortcut */
int numglyphs; /* number of glyphs */
int numcodes; /* number of codes */
pdc_ushort *gid2code; /* mapping glyph ID -> [Uni]code or NULL */
pdc_ushort *code2gid; /* mapping [Uni]code -> glyph ID or NULL */
char *cmapname; /* CID CMap name */
/* font in memory */
pdc_bool embedded; /* embedded font */
char *imgname; /* name of virtual file containing *img */
size_t filelen; /* length of (uncompressed) font data */
pdc_byte *img; /* font (or CFF table) data */
};
/* font error numbers.
*/
enum
{
#define fnt_genNames 1
#include "ft_generr.h"
FNT_E_dummy
};
/* ft_font.c */
void fnt_register_errtab(pdc_core *pdc);
void fnt_init_font(fnt_font *font);
void fnt_cleanup_font(pdc_core *pdc, fnt_font *font);
void fnt_cleanup_fontimg(pdc_core *pdc, fnt_font *font);
int fnt_get_glyphid(int code, fnt_font *font);
int fnt_get_code(int gid, fnt_font *font);
int fnt_get_glyphwidth(int code, fnt_font *font);
int fnt_get_pdf_fonttype_code(const char *typenam);
const char *fnt_get_pdf_fonttype_name(int typecode);
const char *fnt_get_pdf_fonttype_desc(int typecode);
pdc_encodingvector *fnt_create_font_ev(pdc_core *pdc, fnt_font *font);
int fnt_check_weight(int weight);
int fnt_weightname2weight(const char *weightname);
int fnt_stemv2weight(int stemv);
const char *fnt_weight2weightname(int weight);
int fnt_macfontstyle2weight(int macfontstyle);
int fnt_weight2stemv(int weight);
void fnt_font_logg_widths(pdc_core *pdc, fnt_font *font);
void fnt_font_logg_protocol(pdc_core *pdc, fnt_font *font);
/* ft_corefont.c */
pdc_bool fnt_is_standard_font(const char *fontname);
const char *fnt_get_abb_std_fontname(const char *fontname);
void fnt_fill_font_metric(pdc_core *pdc, fnt_font *font, pdc_bool kerning,
const fnt_font_metric *metric);
const fnt_font_metric *fnt_get_core_metric(const char *fontname);
const char *fnt_get_abb_cjk_fontname(const char *fontname);
int fnt_get_preinstalled_cidfont(const char *fontname,
const fnt_font_metric **fontmetric);
const char **fnt_get_cid_widths_array(pdc_core *pdc, fnt_font *font);
/* ft_type1.c */
pdc_bool fnt_test_type1_font(pdc_core *pdc, const pdc_byte *img);
pdc_bool fnt_get_type1_encoding(pdc_core *pdc, fnt_font *font, int glyphflags);
#endif /* FT_FONT_H */