| Index: src/ots.h
|
| diff --git a/src/ots.h b/src/ots.h
|
| old mode 100644
|
| new mode 100755
|
| index 1db48d51736bcd114ed2bcb5f49210f15eb16b64..13999d56e602f0a557131ae017708bdae402afc0
|
| --- a/src/ots.h
|
| +++ b/src/ots.h
|
| @@ -29,30 +29,37 @@ namespace ots {
|
| bool Failure(const char *f, int l, const char *fn);
|
| #endif
|
|
|
| -#if defined(_MSC_VER)
|
| -// MSVC supports C99 style variadic macros.
|
| -#define OTS_WARNING(format, ...)
|
| -#else
|
| -// GCC
|
| -#if defined(OTS_DEBUG)
|
| -#define OTS_WARNING(format, args...) \
|
| - ots::Warning(__FILE__, __LINE__, format, ##args)
|
| -void Warning(const char *f, int l, const char *format, ...)
|
| - __attribute__((format(printf, 3, 4)));
|
| -#else
|
| -#define OTS_WARNING(format, args...)
|
| -#endif
|
| -#endif
|
| +// All OTS_FAILURE_* macros ultimately evaluate to 'false', just like the original
|
| +// message-less OTS_FAILURE(), so that the current parser will return 'false' as
|
| +// its result (indicating a failure).
|
|
|
| -// Define OTS_NO_TRANSCODE_HINTS (i.e., g++ -DOTS_NO_TRANSCODE_HINTS) if you
|
| -// want to omit TrueType hinting instructions and variables in glyf, fpgm, prep,
|
| -// and cvt tables.
|
| -#if defined(OTS_NO_TRANSCODE_HINTS)
|
| -const bool g_transcode_hints = false;
|
| +#if defined(_MSC_VER) || !defined(OTS_DEBUG)
|
| +#define OTS_MESSAGE_(level,otf_,...) \
|
| + (otf_)->context->Message(level,__VA_ARGS__)
|
| #else
|
| -const bool g_transcode_hints = true;
|
| +#define OTS_MESSAGE_(level,otf_,...) \
|
| + OTS_FAILURE(), \
|
| + (otf_)->context->Message(level,__VA_ARGS__)
|
| #endif
|
|
|
| +// Generate a simple message
|
| +#define OTS_FAILURE_MSG_(otf_,...) \
|
| + (OTS_MESSAGE_(0,otf_,__VA_ARGS__), false)
|
| +
|
| +#define OTS_WARNING_MSG_(otf_,...) \
|
| + OTS_MESSAGE_(1,otf_,__VA_ARGS__)
|
| +
|
| +// Generate a message with an associated table tag
|
| +#define OTS_FAILURE_MSG_TAG_(otf_,msg_,tag_) \
|
| + (OTS_MESSAGE_(0,otf_,"%4.4s: %s", tag_, msg_), false)
|
| +
|
| +// Convenience macros for use in files that only handle a single table tag,
|
| +// defined as TABLE_NAME at the top of the file; the 'file' variable is
|
| +// expected to be the current OpenTypeFile pointer.
|
| +#define OTS_FAILURE_MSG(...) OTS_FAILURE_MSG_(file, TABLE_NAME ": " __VA_ARGS__)
|
| +
|
| +#define OTS_WARNING(...) OTS_WARNING_MSG_(file, TABLE_NAME ": " __VA_ARGS__)
|
| +
|
| // -----------------------------------------------------------------------------
|
| // Buffer helper class
|
| //
|
| @@ -62,8 +69,8 @@ const bool g_transcode_hints = true;
|
| // -----------------------------------------------------------------------------
|
| class Buffer {
|
| public:
|
| - Buffer(const uint8_t *buffer, size_t len)
|
| - : buffer_(buffer),
|
| + Buffer(const uint8_t *buf, size_t len)
|
| + : buffer_(buf),
|
| length_(len),
|
| offset_(0) { }
|
|
|
| @@ -71,7 +78,7 @@ class Buffer {
|
| return Read(NULL, n_bytes);
|
| }
|
|
|
| - bool Read(uint8_t *buffer, size_t n_bytes) {
|
| + bool Read(uint8_t *buf, size_t n_bytes) {
|
| if (n_bytes > 1024 * 1024 * 1024) {
|
| return OTS_FAILURE();
|
| }
|
| @@ -79,8 +86,8 @@ class Buffer {
|
| (offset_ > length_ - n_bytes)) {
|
| return OTS_FAILURE();
|
| }
|
| - if (buffer) {
|
| - std::memcpy(buffer, buffer_ + offset_, n_bytes);
|
| + if (buf) {
|
| + std::memcpy(buf, buffer_ + offset_, n_bytes);
|
| }
|
| offset_ += n_bytes;
|
| return true;
|
| @@ -183,8 +190,6 @@ template<typename T> T Round2(T value) {
|
| bool IsValidVersionTag(uint32_t tag);
|
|
|
| #define FOR_EACH_TABLE_TYPE \
|
| - F(cbdt, CBDT) \
|
| - F(cblc, CBLC) \
|
| F(cff, CFF) \
|
| F(cmap, CMAP) \
|
| F(cvt, CVT) \
|
| @@ -229,6 +234,8 @@ struct OpenTypeFile {
|
| uint16_t entry_selector;
|
| uint16_t range_shift;
|
|
|
| + OTSContext *context;
|
| +
|
| #define F(name, capname) OpenType##capname *name;
|
| FOR_EACH_TABLE_TYPE
|
| #undef F
|
|
|