Back to index

texmacs  1.0.7.15
Classes | Defines | Typedefs | Functions | Variables
cid.h File Reference
#include "pdfobj.h"
#include "type0.h"
#include "fontmap.h"
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  CIDSysInfo

Defines

#define CIDFONT_TYPE0   1
#define CIDFONT_TYPE2   2
#define CIDFONT_FORCE_FIXEDPITCH   (1 << 1)
#define CIDFONT_FLAG_TYPE1   (1 << 8)
#define CIDFONT_FLAG_TYPE1C   (1 << 9)
#define CIDFONT_FLAG_TRUETYPE   (1 << 10)

Typedefs

typedef struct CIDFont

Functions

void CIDFont_set_verbose (void)
void CIDFont_set_flags (long flags)
CIDFontCIDFont_new (void)
void CIDFont_release (CIDFont *font)
void CIDFont_flush (CIDFont *font)
char * CIDFont_get_fontname (CIDFont *font)
char * CIDFont_get_ident (CIDFont *font)
int CIDFont_get_opt_index (CIDFont *font)
int CIDFont_get_flag (CIDFont *font, int mask)
int CIDFont_get_subtype (CIDFont *font)
int CIDFont_get_embedding (CIDFont *font)
pdf_objCIDFont_get_resource (CIDFont *font)
CIDSysInfoCIDFont_get_CIDSysInfo (CIDFont *font)
void CIDFont_attach_parent (CIDFont *font, int parent_id, int wmode)
int CIDFont_get_parent_id (CIDFont *font, int wmode)
int CIDFont_is_BaseFont (CIDFont *font)
int CIDFont_is_ACCFont (CIDFont *font)
int CIDFont_is_UCSFont (CIDFont *font)
void CIDFont_cache_init (void)
int CIDFont_cache_find (const char *map_name, CIDSysInfo *cmap_csi, fontmap_opt *fmap_opt)
CIDFontCIDFont_cache_get (int fnt_id)
void CIDFont_cache_close (void)

Variables

CIDSysInfo CSI_IDENTITY
CIDSysInfo CSI_UNICODE

Class Documentation

struct CIDSysInfo

Definition at line 30 of file cid.h.

Class Members
char * ordering
char * registry
int supplement

Define Documentation

#define CIDFONT_FLAG_TRUETYPE   (1 << 10)

Definition at line 56 of file cid.h.

#define CIDFONT_FLAG_TYPE1   (1 << 8)

Definition at line 54 of file cid.h.

#define CIDFONT_FLAG_TYPE1C   (1 << 9)

Definition at line 55 of file cid.h.

#define CIDFONT_FORCE_FIXEDPITCH   (1 << 1)

Definition at line 47 of file cid.h.

#define CIDFONT_TYPE0   1

Definition at line 27 of file cid.h.

#define CIDFONT_TYPE2   2

Definition at line 28 of file cid.h.


Typedef Documentation

typedef struct CIDFont

Definition at line 39 of file cid.h.


Function Documentation

void CIDFont_attach_parent ( CIDFont font,
int  parent_id,
int  wmode 
)

Definition at line 287 of file cid.c.

{
  ASSERT(font);

  if (wmode < 0 || wmode > 1)
    ERROR("%s: Invalid wmode value.", CIDFONT_DEBUG_STR);

  if (font->parent[wmode] >= 0)
    WARN("%s: CIDFont already have a parent Type1 font.", CIDFONT_DEBUG_STR);

  font->parent[wmode] = parent_id;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void CIDFont_cache_close ( void  )

Definition at line 658 of file cid.c.

{
  int  font_id;

  if (__cache) {
    for (font_id = 0;
        font_id < __cache->num; font_id++) {
      CIDFont *font;

      font = __cache->fonts[font_id];

      if (__verbose)
       MESG("(CID");

      CIDFont_dofont (font);
      CIDFont_flush  (font);
      CIDFont_release(font);

      RELEASE(font);

      if (__verbose)
       MESG(")");
    }
    RELEASE(__cache->fonts);
    RELEASE(__cache);
    __cache = NULL;
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

int CIDFont_cache_find ( const char *  map_name,
CIDSysInfo cmap_csi,
fontmap_opt fmap_opt 
)

Definition at line 553 of file cid.c.

{
  int      font_id = -1;
  CIDFont *font    = NULL;
  cid_opt *opt     = NULL;

  if (!__cache)
    CIDFont_cache_init();

  opt  = NEW(1, cid_opt);
  opt->style = fmap_opt->style;
  opt->index = fmap_opt->index;
  opt->embed = (fmap_opt->flags & FONTMAP_OPT_NOEMBED) ? 0 : 1;
  opt->name  = NULL;
  opt->csi   = get_cidsysinfo(map_name, fmap_opt);
  opt->stemv = fmap_opt->stemv;

  if (!opt->csi && cmap_csi) {
    /*
     * No CIDSystemInfo supplied explicitly. Copy from CMap's one if available.
     * It is not neccesary for CID-keyed fonts. But TrueType requires them.
     */
    opt->csi = NEW(1, CIDSysInfo);
    opt->csi->registry   = NEW(strlen(cmap_csi->registry)+1, char);
    strcpy(opt->csi->registry, cmap_csi->registry);
    opt->csi->ordering   = NEW(strlen(cmap_csi->ordering)+1, char);
    strcpy(opt->csi->ordering, cmap_csi->ordering);
    opt->csi->supplement = cmap_csi->supplement;
  }
  /*
   * Here, we do not compare font->ident and map_name because of
   * implicit CIDSystemInfo supplied by CMap for TrueType.
   */
  for (font_id = 0; font_id < __cache->num; font_id++) {
    font = __cache->fonts[font_id];
    if (!strcmp(font->name, map_name) &&
       font->options->style == opt->style &&
       font->options->index == opt->index) {
      if (font->options->embed == opt->embed) {
       /*
        * Case 1: CSI not available (Identity CMap)
        *         Font is TrueType --> continue
        *         Font is CIDFont  --> break
        * Case 2: CSI matched      --> break
        */
       if (!opt->csi) {
         if (font->subtype == CIDFONT_TYPE2)
           continue;
         else
           break;
       } else if (!strcmp(font->csi->registry, opt->csi->registry) &&
                 !strcmp(font->csi->ordering, opt->csi->ordering)) {
         if (font->subtype == CIDFONT_TYPE2)
           font->csi->supplement =
             MAX(opt->csi->supplement, font->csi->supplement);
         break;
       }
      } else if (CIDFont_is_BaseFont(font)) {
       opt->embed = 0;
       break;
      }
    }
  }

  if (font_id < __cache->num && cmap_csi) {
    if (strcmp(font->csi->registry, cmap_csi->registry) ||
       strcmp(font->csi->ordering, cmap_csi->ordering))
      ERROR("%s: Incompatible CMap for CIDFont \"%s\"",
           CIDFONT_DEBUG_STR, map_name);
  }

  if (font_id == __cache->num) {
    font = CIDFont_new();
    if (CIDFont_type0_open(font, map_name, cmap_csi, opt)    < 0 &&
       CIDFont_type2_open(font, map_name, cmap_csi, opt)    < 0 &&
       CIDFont_type0_t1open(font, map_name, cmap_csi, opt)  < 0 &&
       CIDFont_type0_t1copen(font, map_name, cmap_csi, opt) < 0 &&
       CIDFont_base_open (font, map_name, cmap_csi, opt)    < 0
       ) {
      CIDFont_release(font);
      release_opt(opt);
      return -1;
    } else {
      if (__cache->num >= __cache->max) {
       __cache->max  += CACHE_ALLOC_SIZE;
       __cache->fonts = RENEW(__cache->fonts,
                            __cache->max, struct CIDFont *);
      }
      font->name    = NEW(strlen(map_name)+1, char);
      strcpy(font->name,  map_name);
      font->ident   = NEW(strlen(map_name)+1, char);
      strcpy(font->ident, map_name);
      font->options = opt;
      __cache->fonts[font_id] = font;
      (__cache->num)++;
    }
  } else if (opt) {
    release_opt(opt);
  }

  return font_id;
}

Here is the call graph for this function:

Here is the caller graph for this function:

CIDFont* CIDFont_cache_get ( int  fnt_id)

Definition at line 543 of file cid.c.

{
  CHECK_ID(font_id);
  return __cache->fonts[font_id];
}

Here is the caller graph for this function:

void CIDFont_cache_init ( void  )

Definition at line 530 of file cid.c.

{
  if (__cache)
    ERROR("%s: Already initialized.", CIDFONT_DEBUG_STR);

  __cache = NEW(1, struct FontCache);

  __cache->max  = CACHE_ALLOC_SIZE;
  __cache->fonts = NEW(__cache->max, struct CIDFont *);
  __cache->num  = 0;
}

Here is the caller graph for this function:

void CIDFont_flush ( CIDFont font)

Definition at line 159 of file cid.c.

{
  if (font) {
    if (font->indirect)   pdf_release_obj(font->indirect);
    font->indirect = NULL;
    if (font->fontdict)   pdf_release_obj(font->fontdict);
    font->fontdict = NULL;
    if (font->descriptor) pdf_release_obj(font->descriptor);
    font->descriptor = NULL;
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 250 of file cid.c.

{
  ASSERT(font);

  return font->csi;
}

Here is the caller graph for this function:

int CIDFont_get_embedding ( CIDFont font)

Definition at line 243 of file cid.c.

{
  ASSERT(font);
  return font->options->embed;
}

Here is the caller graph for this function:

int CIDFont_get_flag ( CIDFont font,
int  mask 
)

Definition at line 331 of file cid.c.

{
  ASSERT(font);
  return ((font->flags & mask) ? 1 : 0);
}

Here is the caller graph for this function:

char* CIDFont_get_fontname ( CIDFont font)

Definition at line 206 of file cid.c.

{
  ASSERT(font);
  return font->fontname;
}

Here is the caller graph for this function:

char* CIDFont_get_ident ( CIDFont font)

Definition at line 213 of file cid.c.

{
  ASSERT(font);
  return font->ident;
}

Here is the caller graph for this function:

int CIDFont_get_opt_index ( CIDFont font)

Definition at line 220 of file cid.c.

{
  int  opt_index;

  ASSERT(font);

  if (font->options)
    opt_index = font->options->index;
  else {
    opt_index = 0;
  }

  return opt_index;
}

Here is the caller graph for this function:

int CIDFont_get_parent_id ( CIDFont font,
int  wmode 
)

Definition at line 262 of file cid.c.

{
  ASSERT(font);

  if (wmode < 0 || wmode > 1)
    ERROR("%s: Invalid wmode value.", CIDFONT_DEBUG_STR);

  return (font->parent)[wmode];
}

Here is the caller graph for this function:

Definition at line 273 of file cid.c.

{
  ASSERT(font);

  if (!font->indirect)
    font->indirect = pdf_ref_obj(font->fontdict);

  return pdf_link_obj(font->indirect);
}

Here is the call graph for this function:

Here is the caller graph for this function:

int CIDFont_get_subtype ( CIDFont font)

Definition at line 236 of file cid.c.

{
  ASSERT(font);
  return font->subtype;
}

Here is the caller graph for this function:

int CIDFont_is_ACCFont ( CIDFont font)

Definition at line 301 of file cid.c.

{
  int   i;

  ASSERT(font);

  if (!font->csi)
    ERROR("%s: CIDSystemInfo undefined.", CIDFONT_DEBUG_STR);

  for (i = ACC_START; i <= ACC_END ; i++) {
    if (!strcmp(font->csi->registry, CIDFont_stdcc_def[i].registry) &&
       !strcmp(font->csi->ordering, CIDFont_stdcc_def[i].ordering))
      return 1;
  }

  return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int CIDFont_is_BaseFont ( CIDFont font)

Definition at line 377 of file cid.c.

{
  ASSERT(font);
  return (font->flags & FONT_FLAG_BASEFONT) ? 1 : 0;
}

Here is the caller graph for this function:

int CIDFont_is_UCSFont ( CIDFont font)

Definition at line 320 of file cid.c.

{
  ASSERT(font);
  if (!strcmp(font->csi->ordering, "UCS") ||
      !strcmp(font->csi->ordering, "UCS2"))
    return 1;
  return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

CIDFont* CIDFont_new ( void  )

Definition at line 127 of file cid.c.

{
  CIDFont *font = NULL;

  font = NEW(1, struct CIDFont);

  font->name     = NULL;
  font->fontname = NULL;
  font->ident    = NULL;

  /*
   * CIDFont
   */
  font->subtype = -1;
  font->flags   = FONT_FLAG_NONE;
  font->csi     = NULL;
  font->options = NULL;
  (font->parent)[0] = -1; /* Horizontal */
  (font->parent)[1] = -1; /* Vertical   */

  /*
   * PDF Font Resource
   */
  font->indirect = NULL;
  font->fontdict = NULL;
  font->descriptor = NULL;

  return font;
}

Here is the caller graph for this function:

void CIDFont_release ( CIDFont font)

Definition at line 172 of file cid.c.

{
  if (font) {
    switch(font->subtype) {
    case CIDFONT_TYPE0:
      CIDFont_type0_release(font);
      break;
    case CIDFONT_TYPE2:
      CIDFont_type2_release(font);
      break;
    }
    if (font->indirect)
      ERROR("%s: Object not flushed.", CIDFONT_DEBUG_STR);
    if (font->fontdict)
      ERROR("%s: Object not flushed.", CIDFONT_DEBUG_STR);
    if (font->descriptor)
      ERROR("%s: Object not flushed.", CIDFONT_DEBUG_STR);

    if (font->fontname) RELEASE(font->fontname);
    if (font->name)     RELEASE(font->name);
    if (font->ident)    RELEASE(font->ident);
    if (font->csi) {
      if (font->csi->registry)
       RELEASE(font->csi->registry);
      if (font->csi->ordering)
       RELEASE(font->csi->ordering);
      RELEASE(font->csi);
    }
    if (font->options)
      release_opt(font->options);
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

void CIDFont_set_flags ( long  flags)

Definition at line 800 of file cid.c.

Here is the call graph for this function:

void CIDFont_set_verbose ( void  )

Definition at line 111 of file cid.c.

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

Definition at line 79 of file cid.c.

Definition at line 85 of file cid.c.