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
274 lines
10 KiB
C
Executable File
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 */
|