font.h 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #ifndef MUPDF_PDF_FONT_H
  2. #define MUPDF_PDF_FONT_H
  3. /*
  4. * Font
  5. */
  6. enum
  7. {
  8. PDF_FD_FIXED_PITCH = 1 << 0,
  9. PDF_FD_SERIF = 1 << 1,
  10. PDF_FD_SYMBOLIC = 1 << 2,
  11. PDF_FD_SCRIPT = 1 << 3,
  12. PDF_FD_NONSYMBOLIC = 1 << 5,
  13. PDF_FD_ITALIC = 1 << 6,
  14. PDF_FD_ALL_CAP = 1 << 16,
  15. PDF_FD_SMALL_CAP = 1 << 17,
  16. PDF_FD_FORCE_BOLD = 1 << 18
  17. };
  18. void pdf_load_encoding(const char **estrings, char *encoding);
  19. int pdf_lookup_agl(const char *name);
  20. const char **pdf_lookup_agl_duplicates(int ucs);
  21. extern const unsigned short pdf_doc_encoding[256];
  22. extern const char * const pdf_mac_roman[256];
  23. extern const char * const pdf_mac_expert[256];
  24. extern const char * const pdf_win_ansi[256];
  25. extern const char * const pdf_standard[256];
  26. typedef struct pdf_font_desc_s pdf_font_desc;
  27. typedef struct pdf_hmtx_s pdf_hmtx;
  28. typedef struct pdf_vmtx_s pdf_vmtx;
  29. struct pdf_hmtx_s
  30. {
  31. unsigned short lo;
  32. unsigned short hi;
  33. int w; /* type3 fonts can be big! */
  34. };
  35. struct pdf_vmtx_s
  36. {
  37. unsigned short lo;
  38. unsigned short hi;
  39. short x;
  40. short y;
  41. short w;
  42. };
  43. struct pdf_font_desc_s
  44. {
  45. fz_storable storable;
  46. size_t size;
  47. fz_font *font;
  48. /* FontDescriptor */
  49. int flags;
  50. float italic_angle;
  51. float ascent;
  52. float descent;
  53. float cap_height;
  54. float x_height;
  55. float missing_width;
  56. /* Encoding (CMap) */
  57. pdf_cmap *encoding;
  58. pdf_cmap *to_ttf_cmap;
  59. size_t cid_to_gid_len;
  60. unsigned short *cid_to_gid;
  61. /* ToUnicode */
  62. pdf_cmap *to_unicode;
  63. size_t cid_to_ucs_len;
  64. unsigned short *cid_to_ucs;
  65. /* Metrics (given in the PDF file) */
  66. int wmode;
  67. int hmtx_len, hmtx_cap;
  68. pdf_hmtx dhmtx;
  69. pdf_hmtx *hmtx;
  70. int vmtx_len, vmtx_cap;
  71. pdf_vmtx dvmtx;
  72. pdf_vmtx *vmtx;
  73. int is_embedded;
  74. };
  75. void pdf_set_font_wmode(fz_context *ctx, pdf_font_desc *font, int wmode);
  76. void pdf_set_default_hmtx(fz_context *ctx, pdf_font_desc *font, int w);
  77. void pdf_set_default_vmtx(fz_context *ctx, pdf_font_desc *font, int y, int w);
  78. void pdf_add_hmtx(fz_context *ctx, pdf_font_desc *font, int lo, int hi, int w);
  79. void pdf_add_vmtx(fz_context *ctx, pdf_font_desc *font, int lo, int hi, int x, int y, int w);
  80. void pdf_end_hmtx(fz_context *ctx, pdf_font_desc *font);
  81. void pdf_end_vmtx(fz_context *ctx, pdf_font_desc *font);
  82. pdf_hmtx pdf_lookup_hmtx(fz_context *ctx, pdf_font_desc *font, int cid);
  83. pdf_vmtx pdf_lookup_vmtx(fz_context *ctx, pdf_font_desc *font, int cid);
  84. void pdf_load_to_unicode(fz_context *ctx, pdf_document *doc, pdf_font_desc *font, const char **strings, char *collection, pdf_obj *cmapstm);
  85. int pdf_font_cid_to_gid(fz_context *ctx, pdf_font_desc *fontdesc, int cid);
  86. const char *pdf_lookup_substitute_font(fz_context *ctx, int mono, int serif, int bold, int italic, int *len);
  87. pdf_font_desc *pdf_load_type3_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *obj);
  88. void pdf_load_type3_glyphs(fz_context *ctx, pdf_document *doc, pdf_font_desc *fontdesc, int nestedDepth);
  89. pdf_font_desc *pdf_load_font(fz_context *ctx, pdf_document *doc, pdf_obj *rdb, pdf_obj *obj, int nestedDepth);
  90. pdf_font_desc *pdf_load_hail_mary_font(fz_context *ctx, pdf_document *doc);
  91. pdf_font_desc *pdf_new_font_desc(fz_context *ctx);
  92. pdf_font_desc *pdf_keep_font(fz_context *ctx, pdf_font_desc *fontdesc);
  93. void pdf_drop_font(fz_context *ctx, pdf_font_desc *font);
  94. void pdf_print_font(fz_context *ctx, fz_output *out, pdf_font_desc *fontdesc);
  95. fz_rect *pdf_measure_text(fz_context *ctx, pdf_font_desc *fontdesc, unsigned char *buf, size_t len, fz_rect *rect);
  96. float pdf_text_stride(fz_context *ctx, pdf_font_desc *fontdesc, float fontsize, unsigned char *buf, size_t len, float room, size_t *count);
  97. void pdf_run_glyph(fz_context *ctx, pdf_document *doc, pdf_obj *resources, fz_buffer *contents, fz_device *dev, const fz_matrix *ctm, void *gstate, int nestedDepth);
  98. pdf_obj *pdf_add_simple_font(fz_context *ctx, pdf_document *doc, fz_font *font);
  99. pdf_obj *pdf_add_cid_font(fz_context *ctx, pdf_document *doc, fz_font *font);
  100. int pdf_font_writing_supported(fz_font *font);
  101. #endif