campo-sirio/pdf/font/ft_cid.c
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

302 lines
9.0 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_cid.c,v 1.3 2009-03-23 08:51:17 guy Exp $
*
* FONT CID functions
*
*/
#define FT_CID_C
#include <errno.h>
#include "ft_font.h"
#include "pc_file.h"
/* ------------------------ Predefined CMaps ------------------------ */
/* Predefined CMaps and the corresponding character collection */
static const fnt_cmap_info fnt_predefined_cmaps[] =
{
{ "83pv-RKSJ-H", cc_japanese, 0, PDC_1_3, 1, 1, 1, 1, 0},
{ "90ms-RKSJ-H", cc_japanese, 0, PDC_1_3, 2, 2, 2, 2, 0},
{ "90ms-RKSJ-V", cc_japanese, 0, PDC_1_3, 2, 2, 2, 2, 1},
{ "90msp-RKSJ-H", cc_japanese, 0, PDC_1_3, 2, 2, 2, 2, 0},
{ "90msp-RKSJ-V", cc_japanese, 0, PDC_1_3, 2, 2, 2, 2, 1},
{ "90pv-RKSJ-H", cc_japanese, 0, PDC_1_3, 1, 1, 1, 1, 0},
{ "Add-RKSJ-H", cc_japanese, 0, PDC_1_3, 1, 1, 1, 1, 0},
{ "Add-RKSJ-V", cc_japanese, 0, PDC_1_3, 1, 1, 1, 1, 1},
{ "EUC-H", cc_japanese, 0, PDC_1_3, 1, 1, 1, 1, 0},
{ "EUC-V", cc_japanese, 0, PDC_1_3, 1, 1, 1, 1, 1},
{ "Ext-RKSJ-H", cc_japanese, 0, PDC_1_3, 2, 2, 2, 2, 0},
{ "Ext-RKSJ-V", cc_japanese, 0, PDC_1_3, 2, 2, 2, 2, 1},
{ "H", cc_japanese, 0, PDC_1_3, 1, 1, 1, 1, 0},
{ "V", cc_japanese, 0, PDC_1_3, 1, 1, 1, 1, 1},
{ "UniJIS-UCS2-H", cc_japanese, 2, PDC_1_3, 2, 4, 4, 6, 0},
{ "UniJIS-UCS2-V", cc_japanese, 2, PDC_1_3, 2, 4, 4, 6, 1},
{ "UniJIS-UCS2-HW-H", cc_japanese,-2, PDC_1_3, 2, 4, 4, 6, 0},
{ "UniJIS-UCS2-HW-V", cc_japanese -2, PDC_1_3, 2, 4, 4, 6, 1},
{ "UniJIS-UTF16-H", cc_japanese, 2, PDC_1_5, 0, 0, 5, 6, 0},
{ "UniJIS-UTF16-V", cc_japanese, 2, PDC_1_5, 0, 0, 5, 6, 1},
{ "GB-EUC-H", cc_simplified_chinese, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "GB-EUC-V", cc_simplified_chinese, 0, PDC_1_3, 0, 0, 0, 0, 1},
{ "GBpc-EUC-H", cc_simplified_chinese, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "GBpc-EUC-V", cc_simplified_chinese, 0, PDC_1_3, 0, 0, 0, 0, 1},
{ "GBK-EUC-H", cc_simplified_chinese, 0, PDC_1_3, 2, 2, 2, 2, 0},
{ "GBK-EUC-V", cc_simplified_chinese, 0, PDC_1_3, 2, 2, 2, 2, 1},
{ "GBKp-EUC-H", cc_simplified_chinese, 0, PDC_1_4, 0, 2, 2, 2, 0},
{ "GBKp-EUC-V", cc_simplified_chinese, 0, PDC_1_4, 0, 2, 2, 2, 1},
{ "GBK2K-H", cc_simplified_chinese, 0, PDC_1_4, 0, 4, 4, 5, 0},
{ "GBK2K-V", cc_simplified_chinese, 0, PDC_1_4, 0, 4, 4, 5, 1},
{ "UniGB-UCS2-H", cc_simplified_chinese, 2, PDC_1_3, 2, 4, 4, 4, 0},
{ "UniGB-UCS2-V", cc_simplified_chinese, 2, PDC_1_3, 2, 4, 4, 4, 1},
{ "UniGB-UTF16-H", cc_simplified_chinese, 2, PDC_1_5, 0, 0, 4, 5, 0},
{ "UniGB-UTF16-V", cc_simplified_chinese, 2, PDC_1_5, 0, 0, 4, 5, 1},
{ "B5pc-H", cc_traditional_chinese, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "B5pc-V", cc_traditional_chinese, 0, PDC_1_3, 0, 0, 0, 0, 1},
{ "HKscs-B5-H", cc_traditional_chinese, 0, PDC_1_4, 0, 3, 3, 5, 0},
{ "HKscs-B5-V", cc_traditional_chinese, 0, PDC_1_4, 0, 3, 3, 5, 1},
{ "ETen-B5-H", cc_traditional_chinese, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "ETen-B5-V", cc_traditional_chinese, 0, PDC_1_3, 0, 0, 0, 0, 1},
{ "ETenms-B5-H", cc_traditional_chinese, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "ETenms-B5-V", cc_traditional_chinese, 0, PDC_1_3, 0, 0, 0, 0, 1},
{ "CNS-EUC-H", cc_traditional_chinese, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "CNS-EUC-V", cc_traditional_chinese, 0, PDC_1_3, 0, 0, 0, 0, 1},
{ "UniCNS-UCS2-H", cc_traditional_chinese, 2, PDC_1_3, 0, 3, 3, 3, 0},
{ "UniCNS-UCS2-V", cc_traditional_chinese, 2, PDC_1_3, 0, 3, 3, 3, 1},
{ "UniCNS-UTF16-H", cc_traditional_chinese, 2, PDC_1_5, 0, 0, 4, 4, 0},
{ "UniCNS-UTF16-V", cc_traditional_chinese, 2, PDC_1_5, 0, 0, 4, 4, 1},
{ "KSC-EUC-H", cc_korean, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "KSC-EUC-V", cc_korean, 0, PDC_1_3, 0, 0, 0, 0, 1},
{ "KSCms-UHC-H", cc_korean, 0, PDC_1_3, 1, 1, 1, 1, 0},
{ "KSCms-UHC-V", cc_korean, 0, PDC_1_3, 1, 1, 1, 1, 1},
{ "KSCms-UHC-HW-H", cc_korean, 0, PDC_1_3, 1, 1, 1, 1, 0},
{ "KSCms-UHC-HW-V", cc_korean, 0, PDC_1_3, 1, 1, 1, 1, 1},
{ "KSCpc-EUC-H", cc_korean, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "UniKS-UCS2-H", cc_korean, 2, PDC_1_3, 1, 1, 1, 1, 0},
{ "UniKS-UCS2-V", cc_korean, 2, PDC_1_3, 1, 1, 1, 1, 1},
{ "UniKS-UTF16-H", cc_korean, 2, PDC_1_5, 0, 0, 2, 2, 0},
{ "UniKS-UTF16-V", cc_korean, 2, PDC_1_5, 0, 0, 2, 2, 1},
{ "Identity-H", cc_identity, 0, PDC_1_3, 0, 0, 0, 0, 0},
{ "Identity-V", cc_identity, 0, PDC_1_3, 0, 0, 0, 0, 1},
{ NULL, cc_none, 0, 0, 0, 0, 0, 0, 0},
};
static int
fnt_get_predefined_cmap_slot(const char *cmapname)
{
int slot;
for (slot = 0; ; slot++)
{
if (fnt_predefined_cmaps[slot].name == NULL)
{
slot = -1;
break;
}
if (!strcmp(fnt_predefined_cmaps[slot].name, cmapname))
break;
}
return slot;
}
int
fnt_get_predefined_cmap_info(const char *cmapname, fnt_cmap_info *cmapinfo)
{
int slot;
slot = fnt_get_predefined_cmap_slot(cmapname);
if (slot == -1)
return cc_none;
if (cmapinfo)
*cmapinfo = fnt_predefined_cmaps[slot];
return fnt_predefined_cmaps[slot].charcoll;
}
static const pdc_keyconn fnt_charcoll_keylist[] =
{
{ "Japan1", cc_japanese},
{ "GB1", cc_simplified_chinese},
{ "CNS1", cc_traditional_chinese},
{ "Korea1", cc_korean},
{ "Identity", cc_identity},
{ "Unknown", cc_unknown},
{ NULL, 0}
};
const char *
fnt_get_ordering_cid(int charcoll)
{
return pdc_get_keyword(charcoll, fnt_charcoll_keylist);
}
int
fnt_get_charcoll(const char *ordering)
{
int charcoll;
charcoll = (int) pdc_get_keycode(ordering, fnt_charcoll_keylist);
if (charcoll == PDC_KEY_NOTFOUND)
return cc_unknown;
else
return charcoll;
}
int
fnt_get_supplement(fnt_cmap_info *cmapinfo, int compatibility)
{
int retval = 0;
switch(compatibility)
{
case PDC_1_3:
retval = cmapinfo->supplement13;
break;
case PDC_1_4:
retval = cmapinfo->supplement14;
break;
case PDC_1_5:
retval = cmapinfo->supplement15;
break;
default:
case PDC_1_6:
retval = cmapinfo->supplement16;
break;
}
return retval;
}
/*
* See:
* Adobe Technical Note #5078 (Japanese1)
* Adobe Technical Note #5079 (GB1)
* Adobe Technical Note #5080 (CNS1)
* Adobe Technical Note #5093 (Korea1)
*
*/
int
fnt_get_maxcid(int charcoll, int supplement)
{
switch(charcoll)
{
case cc_japanese:
switch(supplement)
{
case 0:
return 8283;
case 1:
return 8358;
case 2:
return 8719;
case 3:
return 9353;
case 4:
return 15443;
case 5:
return 20316;
case 6:
default:
return 23057;
}
case cc_simplified_chinese:
switch(supplement)
{
case 0:
return 7716;
case 1:
return 9896;
case 2:
return 22126;
case 3:
return 22352;
case 4:
return 29063;
case 5:
default:
return 30283;
}
case cc_traditional_chinese:
switch(supplement)
{
case 0:
return 14098;
case 1:
return 17407;
case 2:
return 17600;
case 3:
return 18845;
case 4:
return 18964;
case 5:
default:
return 19087;
}
case cc_korean:
switch(supplement)
{
case 0:
return 9332;
case 1:
return 18154;
case 2:
default:
return 18351;
}
case cc_identity:
case cc_unknown:
return FNT_MAXCID;
default:
return 0;
}
}