Back to index

texmacs  1.0.7.15
Functions
pdfencoding.h File Reference
#include "pdfobj.h"
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void pdf_encoding_set_verbose (void)
void pdf_init_encodings (void)
void pdf_close_encodings (void)
void pdf_encoding_complete (void)
int pdf_encoding_findresource (char *enc_name)
pdf_objpdf_get_encoding_obj (int enc_id)
int pdf_encoding_is_predefined (int enc_id)
void pdf_encoding_used_by_type3 (int enc_id)
char * pdf_encoding_get_name (int enc_id)
char ** pdf_encoding_get_encoding (int enc_id)
pdf_objpdf_create_ToUnicode_CMap (const char *enc_name, char **enc_vec, const char *is_used)
void pdf_encoding_add_usedchars (int encoding_id, const char *is_used)
pdf_objpdf_encoding_get_tounicode (int encoding_id)
pdf_objpdf_load_ToUnicode_stream (const char *ident)

Function Documentation

void pdf_close_encodings ( void  )

Definition at line 487 of file pdfencoding.c.

{
  int  enc_id;

  if (enc_cache.encodings) {
    for (enc_id = 0; enc_id < enc_cache.count; enc_id++) {
      pdf_encoding *encoding;

      encoding = &enc_cache.encodings[enc_id];
      if (encoding) {
        pdf_flush_encoding(encoding);
        pdf_clean_encoding_struct(encoding);
      }
    }
    RELEASE(enc_cache.encodings);
  }
  enc_cache.encodings = NULL;
  enc_cache.count     = 0;
  enc_cache.capacity  = 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

pdf_obj* pdf_create_ToUnicode_CMap ( const char *  enc_name,
char **  enc_vec,
const char *  is_used 
)

Definition at line 645 of file pdfencoding.c.

{
  pdf_obj  *stream;
  CMap     *cmap;
  int       code, all_predef;
  char     *cmap_name;
  unsigned char *p, *endptr;

  ASSERT(enc_name && enc_vec);

  cmap_name = NEW(strlen(enc_name)+strlen("-UTF16")+1, char);
  sprintf(cmap_name, "%s-UTF16", enc_name);

  cmap = CMap_new();
  CMap_set_name (cmap, cmap_name);
  CMap_set_type (cmap, CMAP_TYPE_TO_UNICODE);
  CMap_set_wmode(cmap, 0);

  CMap_set_CIDSysInfo(cmap, &CSI_UNICODE);

  CMap_add_codespacerange(cmap, range_min, range_max, 1);

  all_predef = 1;
  for (code = 0; code <= 0xff; code++) {
    if (is_used && !is_used[code])
      continue;

    if (enc_vec[code]) {
      long   len;
      int    fail_count = 0;
      agl_name *agln = agl_lookup_list(enc_vec[code]);
      /* Adobe glyph naming conventions are not used by viewers,
       * hence even ligatures (e.g, "f_i") must be explicitly defined
       */
      if (pdf_get_version() < 5 || !agln || !agln->is_predef) {
        wbuf[0] = (code & 0xff);
        p      = wbuf + 1;
        endptr = wbuf + WBUF_SIZE;
        len = agl_sput_UTF16BE(enc_vec[code], &p, endptr, &fail_count);
        if (len >= 1 && !fail_count) {
          CMap_add_bfchar(cmap, wbuf, 1, wbuf + 1, len);
         all_predef &= agln && agln->is_predef;
        }
      }
    }
  }

  stream = all_predef ? NULL : CMap_create_stream(cmap, 0);

  CMap_release(cmap);
  RELEASE(cmap_name);

  return stream;
}

Here is the call graph for this function:

Here is the caller graph for this function:

void pdf_encoding_add_usedchars ( int  encoding_id,
const char *  is_used 
)

Definition at line 609 of file pdfencoding.c.

{
  pdf_encoding *encoding;
  int code;

  CHECK_ID(encoding_id);

  if (!is_used || pdf_encoding_is_predefined(encoding_id))
    return;

  encoding = &enc_cache.encodings[encoding_id];

  for (code = 0; code <= 0xff; code++)
    encoding->is_used[code] |= is_used[code];
}

Here is the call graph for this function:

Here is the caller graph for this function:

void pdf_encoding_complete ( void  )

Definition at line 460 of file pdfencoding.c.

{
  int  enc_id;

  for (enc_id = 0; enc_id < enc_cache.count; enc_id++) {
    if (!pdf_encoding_is_predefined(enc_id)) {
      pdf_encoding *encoding = &enc_cache.encodings[enc_id];
      /* Section 5.5.4 of the PDF 1.5 reference says that the encoding
       * of a Type 3 font must be completely described by a Differences
       * array, but implementation note 56 explains that this is rather
       * an incorrect implementation in Acrobat 4 and earlier. Hence,
       * we do use a base encodings for PDF versions >= 1.3.
       */
      int with_base = !(encoding->flags & FLAG_USED_BY_TYPE3)
                     || pdf_get_version() >= 4;
      ASSERT(!encoding->resource);
      encoding->resource = create_encoding_resource(encoding,
                                              with_base ? encoding->baseenc : NULL);
      ASSERT(!encoding->tounicode);
      encoding->tounicode = pdf_create_ToUnicode_CMap(encoding->enc_name,
                                                encoding->glyphs,
                                                encoding->is_used);
    }
  }
}

Here is the call graph for this function:

Here is the caller graph for this function:

int pdf_encoding_findresource ( char *  enc_name)

Definition at line 509 of file pdfencoding.c.

{
  int           enc_id;
  pdf_encoding *encoding;

  ASSERT(enc_name);
  for (enc_id = 0; enc_id < enc_cache.count; enc_id++) {
    encoding = &enc_cache.encodings[enc_id];
    if (encoding->ident &&
        !strcmp(enc_name, encoding->ident))
      return enc_id;
    else if (encoding->enc_name &&
             !strcmp(enc_name, encoding->enc_name))
      return enc_id;
  }

  return load_encoding_file(enc_name);
}

Here is the call graph for this function:

Here is the caller graph for this function:

char** pdf_encoding_get_encoding ( int  enc_id)

Definition at line 534 of file pdfencoding.c.

{
  pdf_encoding *encoding;

  CHECK_ID(enc_id);

  encoding = &enc_cache.encodings[enc_id];

  return encoding->glyphs;
}

Here is the caller graph for this function:

char* pdf_encoding_get_name ( int  enc_id)

Definition at line 583 of file pdfencoding.c.

{
  pdf_encoding *encoding;

  CHECK_ID(enc_id);

  encoding = &enc_cache.encodings[enc_id];

  return encoding->enc_name;
}

Here is the caller graph for this function:

pdf_obj* pdf_encoding_get_tounicode ( int  encoding_id)

Definition at line 626 of file pdfencoding.c.

{
  CHECK_ID(encoding_id);

  return enc_cache.encodings[encoding_id].tounicode;
}

Here is the caller graph for this function:

int pdf_encoding_is_predefined ( int  enc_id)

Definition at line 558 of file pdfencoding.c.

{
  pdf_encoding *encoding;

  CHECK_ID(enc_id);

  encoding = &enc_cache.encodings[enc_id];

  return (encoding->flags & FLAG_IS_PREDEFINED) ? 1 : 0;
}

Here is the caller graph for this function:

void pdf_encoding_set_verbose ( void  )

Definition at line 58 of file pdfencoding.c.

{
  verbose++;
}

Here is the caller graph for this function:

void pdf_encoding_used_by_type3 ( int  enc_id)

Definition at line 570 of file pdfencoding.c.

{
  pdf_encoding *encoding;

  CHECK_ID(enc_id);

  encoding = &enc_cache.encodings[enc_id];

  encoding->flags |= FLAG_USED_BY_TYPE3;
}

Here is the caller graph for this function:

pdf_obj* pdf_get_encoding_obj ( int  enc_id)

Definition at line 546 of file pdfencoding.c.

{
  pdf_encoding *encoding;

  CHECK_ID(enc_id);

  encoding = &enc_cache.encodings[enc_id];

  return encoding->resource;
}

Here is the caller graph for this function:

void pdf_init_encodings ( void  )

Definition at line 372 of file pdfencoding.c.

{
  enc_cache.count     = 0;
  enc_cache.capacity  = 3;
  enc_cache.encodings = NEW(enc_cache.capacity, pdf_encoding);

  /*
   * PDF Predefined Encodings
   */
  pdf_encoding_new_encoding("WinAnsiEncoding", "WinAnsiEncoding",
                         WinAnsiEncoding, NULL, FLAG_IS_PREDEFINED);
  pdf_encoding_new_encoding("MacRomanEncoding", "MacRomanEncoding",
                         MacRomanEncoding, NULL, FLAG_IS_PREDEFINED);
  pdf_encoding_new_encoding("MacExpertEncoding", "MacExpertEncoding",
                         MacExpertEncoding, NULL, FLAG_IS_PREDEFINED);

  return;
}

Here is the call graph for this function:

Here is the caller graph for this function:

pdf_obj* pdf_load_ToUnicode_stream ( const char *  ident)

Definition at line 703 of file pdfencoding.c.

{
  pdf_obj *stream = NULL;
  CMap    *cmap;
  FILE    *fp;

  if (!ident)
    return NULL;

  fp = DPXFOPEN(ident, DPX_RES_TYPE_CMAP);
  if (!fp)
    return NULL;
  else if (CMap_parse_check_sig(fp) < 0) {
    DPXFCLOSE(fp);
    return NULL;
  }

  cmap = CMap_new();
  if (CMap_parse(cmap, fp) < 0) {
    WARN("Reading CMap file \"%s\" failed.", ident);
  } else {
    if (verbose) {
      MESG("(CMap:%s)", ident);
    }
    stream = CMap_create_stream(cmap, 0);
    if (!stream) {
      WARN("Failed to creat ToUnicode CMap stream for \"%s\".", ident);
    }
  }
  CMap_release(cmap);
  DPXFCLOSE(fp);

  return  stream;
}

Here is the call graph for this function:

Here is the caller graph for this function: