summaryrefslogtreecommitdiff
path: root/Build/source/libs/xpdf/xpdf-src/xpdf/WebFont.h
blob: 283bdbe914de06c00d29c29601c56c4e19a0a7a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//========================================================================
//
// WebFont.h
//
// Modify/convert embedded PDF fonts to a form usable by web browsers.
//
// Copyright 2019 Glyph & Cog, LLC
//
//========================================================================

#ifndef WEBFONT_H
#define WEBFONT_H

#include <aconf.h>

#ifdef USE_GCC_PRAGMAS
#pragma interface
#endif

#include "gtypes.h"
#include "FoFiBase.h"
#include "GfxFont.h"

class FoFiTrueType;
class FoFiType1C;
class XRef;

//------------------------------------------------------------------------

class WebFont {
public:

  WebFont(GfxFont *gfxFontA, XRef *xref);

  ~WebFont();

  // Returns true if the font is, or can be converted to, a TrueType
  // font.
  GBool canWriteTTF();

  // Returns true if the font is, or can be converted to, an OpenType
  // font.
  GBool canWriteOTF();

  // Write a TrueType (.ttf) file to [fontFilePath].  This can only be
  // called if canWriteTTF() returns true.  Returns true on success.
  GBool writeTTF(const char *fontFilePath);

  // Return the TrueType file as a string.  This can only be called if
  // canWriteTTF() returns true.  Returns null on error.
  GString *getTTFData();

  // Write an OpenType (.otf) file to [fontFilePath].  This can only
  // be called if canWriteOTF() returns true.  Returns true on
  // success.
  GBool writeOTF(const char *fontFilePath);

  // Return the OpenType file as a string.  This can only be called if
  // canWriteOTF() returns true.  Returns null on error.
  GString *getOTFData();

private:

  GBool generateTTF(FoFiOutputFunc outFunc, void *stream);
  GBool generateOTF(FoFiOutputFunc outFunc, void *stream);
  Gushort *makeType1CWidths(int *codeToGID, int nCodes, int *nWidths);
  Gushort *makeCIDType0CWidths(int *codeToGID, int nCodes, int *nWidths);
  Guchar *makeUnicodeCmapTable(int *codeToGID, int nCodes,
			       int *unicodeCmapLength);
  int *makeUnicodeToGID(int *codeToGID, int nCodes, int *unicodeToGIDLength);

  GfxFont *gfxFont;
  char *fontBuf;
  int fontLength;
  FoFiTrueType *ffTrueType;
  FoFiType1C *ffType1C;
  GBool isOpenType;
};

#endif