summaryrefslogtreecommitdiff
path: root/Build/source/texk/lcdf-typetools/lcdf-typetools-src/include/efont/otf.hh
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/lcdf-typetools/lcdf-typetools-src/include/efont/otf.hh')
-rw-r--r--Build/source/texk/lcdf-typetools/lcdf-typetools-src/include/efont/otf.hh371
1 files changed, 0 insertions, 371 deletions
diff --git a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/include/efont/otf.hh b/Build/source/texk/lcdf-typetools/lcdf-typetools-src/include/efont/otf.hh
deleted file mode 100644
index cdf7a58daca..00000000000
--- a/Build/source/texk/lcdf-typetools/lcdf-typetools-src/include/efont/otf.hh
+++ /dev/null
@@ -1,371 +0,0 @@
-// -*- related-file-name: "../../libefont/otf.cc" -*-
-#ifndef EFONT_OTF_HH
-#define EFONT_OTF_HH
-#include <efont/otfdata.hh>
-#include <lcdf/hashcode.hh>
-class ErrorHandler;
-namespace Efont { namespace OpenType {
-class Post;
-class Name;
-
-typedef int Glyph; // 16-bit integer
-
-class Tag {
- public:
- Tag() : _tag(0U) { }
- explicit Tag(uint32_t tag) : _tag(tag) { }
- Tag(const char *name);
- Tag(const String &name);
- // default destructor
-
- static Tag head_tag() { return Tag(0x68656164U); }
-
- typedef bool (Tag::*unspecified_bool_type)() const;
- bool null() const { return _tag == 0; }
- operator unspecified_bool_type() const {
- return _tag != 0 ? &Tag::null : 0;
- }
- bool valid() const;
-
- uint32_t value() const { return _tag; }
-
- String text() const;
- static String langsys_text(Tag script, Tag langsys = Tag());
-
- const uint8_t* table_entry(const uint8_t* table, int n, int entry_size) const;
-
- const char* script_description() const;
- const char* language_description() const;
- const char* feature_description() const;
-
- private:
- uint32_t _tag;
-};
-
-inline hashcode_t hashcode(const Tag& t) {
- return t.value();
-}
-
-class Font {
- public:
- Font(const String& str, ErrorHandler* errh = 0);
- // default destructor
-
- bool ok() const { return _error >= 0; }
- bool check_checksums(ErrorHandler* errh = 0) const;
- int error() const { return _error; }
-
- const String& data_string() const { return _str; }
- const uint8_t* data() const { return _str.udata(); }
- int length() const { return _str.length(); }
-
- unsigned units_per_em() const { return _units_per_em; }
-
- int ntables() const;
- bool has_table(Tag tag) const;
- String table(Tag tag) const;
- uint32_t table_checksum(Tag tag) const;
- Tag table_tag(int i) const;
-
- static uint32_t checksum(const uint8_t *, const uint8_t *);
- static uint32_t checksum(const String &);
- static Font make(bool truetype, const Vector<Tag>& tags, const Vector<String>& data);
-
- enum { HEADER_SIZE = 12, TABLE_DIR_ENTRY_SIZE = 16 };
-
- private:
- String _str;
- int _error;
- unsigned _units_per_em;
-
- int parse_header(ErrorHandler*);
-};
-
-class ScriptList {
- public:
- ScriptList() { }
- inline ScriptList(const String&, ErrorHandler* = 0);
- int assign(const String&, ErrorHandler* = 0);
- // default destructor
-
- bool ok() const { return _str.length() > 0; }
-
- int language_systems(Vector<Tag>& scripts, Vector<Tag>& langsys, ErrorHandler* = 0) const;
- int features(Tag script, Tag langsys, int& required_fid, Vector<int>& fids, ErrorHandler* = 0, bool clear_fids = true) const;
-
- private:
- enum { SCRIPTLIST_HEADERSIZE = 2, SCRIPT_RECSIZE = 6,
- SCRIPT_HEADERSIZE = 4, LANGSYS_RECSIZE = 6,
- LANGSYS_HEADERSIZE = 6, FEATURE_RECSIZE = 2 };
-
- String _str;
-
- int check_header(ErrorHandler*);
- int script_offset(Tag) const;
- int check_script(Tag, int, ErrorHandler*) const;
- int langsys_offset(Tag, Tag, ErrorHandler* = 0) const;
-};
-
-class FeatureList {
- public:
- FeatureList() { }
- inline FeatureList(const String&, ErrorHandler* = 0);
- int assign(const String&, ErrorHandler* = 0);
- // default destructor
-
- bool ok() const { return _str.length() > 0; }
-
- Tag tag(int fid) const;
- String params(int fid, int length, ErrorHandler* = 0, bool old_style_offset = false) const;
- String size_params(int fid, const Name& name, ErrorHandler* = 0) const;
- int lookups(int fid, Vector<int>& results, ErrorHandler* = 0, bool clear_results = true) const;
-
- int find(Tag, const Vector<int>& fids) const;
- void filter(Vector<int>& fids, const Vector<Tag>& sorted_ftags) const;
- inline void filter(Vector<int>& fids, Tag ftag) const;
-
- int lookups(const Vector<int>& fids, Vector<int>& results, ErrorHandler* = 0) const;
- int lookups(const Vector<int>& required_fids, const Vector<int>& fids, const Vector<Tag>& sorted_ftags, Vector<int>& results, ErrorHandler* = 0) const;
- int lookups(int required_fid, const Vector<int>& fids, const Vector<Tag>& sorted_ftags, Vector<int>& results, ErrorHandler* = 0) const;
- int lookups(const ScriptList&, Tag script, Tag langsys, const Vector<Tag>& sorted_ftags, Vector<int>& results, ErrorHandler* = 0) const;
-
- private:
- enum { FEATURELIST_HEADERSIZE = 2, FEATURE_RECSIZE = 6,
- FEATURE_HEADERSIZE = 4, LOOKUPLIST_RECSIZE = 2 };
-
- String _str;
-
- int check_header(ErrorHandler*);
- int script_offset(Tag) const;
- int langsys_offset(Tag, Tag, ErrorHandler* = 0) const;
-};
-
-class Coverage {
- public:
- Coverage() noexcept; // empty coverage
- Coverage(Glyph first, Glyph last) noexcept; // range coverage
- Coverage(const Vector<bool> &gmap) noexcept; // used-bytemap coverage
- Coverage(const String &str, ErrorHandler *errh = 0, bool check = true) noexcept;
- // default destructor
-
- bool ok() const noexcept { return _str.length() > 0; }
- int size() const noexcept;
- bool has_fast_covers() const noexcept {
- return _str.length() > 0 && _str.data()[1] == T_X_BYTEMAP;
- }
-
- int coverage_index(Glyph) const noexcept;
- bool covers(Glyph g) const noexcept { return coverage_index(g) >= 0; }
-
- void unparse(StringAccum&) const noexcept;
- String unparse() const noexcept;
-
- class iterator { public:
- iterator() : _pos(0), _value(0) { }
- // private constructor
- // default destructor
-
- bool ok() const { return _pos < _str.length(); }
- operator bool() const { return ok(); }
-
- Glyph operator*() const { return _value; }
- Glyph value() const { return _value; }
- int coverage_index() const;
-
- void operator++(int);
- void operator++() { (*this)++; }
- bool forward_to(Glyph);
-
- // XXX should check iterators are of same type
- bool operator<(const iterator& o) { return _value < o._value; }
- bool operator<=(const iterator& o) { return _value <= o._value; }
- bool operator>=(const iterator& o) { return _value >= o._value; }
- bool operator>(const iterator& o) { return _value > o._value; }
- bool operator==(const iterator& o) { return _value == o._value; }
- bool operator!=(const iterator& o) { return _value != o._value; }
-
- private:
- String _str;
- int _pos;
- Glyph _value;
- friend class Coverage;
- iterator(const String &str, bool is_end);
- };
-
- iterator begin() const { return iterator(_str, false); }
- iterator end() const { return iterator(_str, true); }
- Glyph operator[](int) const noexcept;
-
- enum { T_LIST = 1, T_RANGES = 2, T_X_BYTEMAP = 3,
- HEADERSIZE = 4, LIST_RECSIZE = 2, RANGES_RECSIZE = 6 };
-
- private:
- String _str;
-
- int check(ErrorHandler*);
-};
-
-Coverage operator&(const Coverage&, const Coverage&);
-bool operator<=(const Coverage&, const Coverage&);
-
-inline bool operator>=(const Coverage& a, const Coverage& b) {
- return b <= a;
-}
-
-class GlyphSet {
- public:
- GlyphSet();
- GlyphSet(const GlyphSet&);
- ~GlyphSet();
-
- inline bool covers(Glyph g) const;
- inline bool operator[](Glyph g) const;
- int change(Glyph, bool);
- void insert(Glyph g) { change(g, true); }
- void remove(Glyph g) { change(g, false); }
-
- GlyphSet& operator=(const GlyphSet&);
-
- private:
- enum { GLYPHBITS = 16, SHIFT = 8,
- MAXGLYPH = (1 << GLYPHBITS) - 1, UNSHIFT = GLYPHBITS - SHIFT,
- MASK = (1 << UNSHIFT) - 1, VLEN = (1 << SHIFT),
- VULEN = (1 << UNSHIFT) >> 5
- };
-
- uint32_t* _v[VLEN];
-};
-
-class ClassDef {
- public:
- ClassDef(const String&, ErrorHandler* = 0) noexcept;
- // default destructor
-
- bool ok() const { return _str.length() > 0; }
- int nclass() const noexcept;
-
- int lookup(Glyph) const noexcept;
- int operator[](Glyph g) const noexcept { return lookup(g); }
-
- void unparse(StringAccum&) const noexcept;
- String unparse() const noexcept;
-
- class class_iterator {
- public:
- // private constructor
- // default destructor
-
- bool ok() const { return _pos < _str.length(); }
- operator bool() const { return ok(); }
-
- Glyph operator*() const { return *_coviter; }
- Glyph value() const { return *_coviter; }
- int class_value() const { return _class; }
-
- void operator++(int);
- void operator++() { (*this)++; }
-
- // XXX should check iterators are of same type
- bool operator<(const class_iterator& o) { return _coviter < o._coviter; }
- bool operator<=(const class_iterator& o) { return _coviter <= o._coviter; }
- bool operator>=(const class_iterator& o) { return _coviter >= o._coviter; }
- bool operator>(const class_iterator& o) { return _coviter > o._coviter; }
- bool operator==(const class_iterator& o) { return _coviter == o._coviter; }
- bool operator!=(const class_iterator& o) { return _coviter != o._coviter; }
-
- private:
- String _str;
- int _pos;
- int _class;
- Coverage::iterator _coviter;
- friend class ClassDef;
- class_iterator(const String&, int, int, const Coverage::iterator&);
- void increment_class0();
- enum { FIRST_POS = -1, LAST_POS = -2 };
- };
-
- // XXX does not work correctly for class 0
- class_iterator begin(int c) const { return class_iterator(_str, 0, c, Coverage::iterator()); }
- class_iterator begin(int c, const Coverage& coverage) const { return class_iterator(_str, 0, c, coverage.begin()); }
- class_iterator end(int c) const { return class_iterator(_str, _str.length(), c, Coverage::iterator()); }
-
- enum { T_LIST = 1, T_RANGES = 2,
- LIST_HEADERSIZE = 6, LIST_RECSIZE = 2,
- RANGES_HEADERSIZE = 4, RANGES_RECSIZE = 6 };
-
- private:
- String _str;
-
- int check(ErrorHandler*);
-};
-
-extern Vector<PermString> debug_glyph_names;
-
-
-inline bool operator==(Tag t1, uint32_t t2) {
- return t1.value() == t2;
-}
-
-inline bool operator!=(Tag t1, uint32_t t2) {
- return t1.value() != t2;
-}
-
-inline bool operator<(Tag t1, uint32_t t2) {
- return t1.value() < t2;
-}
-
-inline bool operator>(Tag t1, uint32_t t2) {
- return t1.value() > t2;
-}
-
-inline bool operator<=(Tag t1, uint32_t t2) {
- return t1.value() <= t2;
-}
-
-inline bool operator>=(Tag t1, uint32_t t2) {
- return t1.value() >= t2;
-}
-
-inline bool operator==(Tag t1, Tag t2) {
- return t1.value() == t2.value();
-}
-
-inline bool operator!=(Tag t1, Tag t2) {
- return t1.value() != t2.value();
-}
-
-inline bool operator<(Tag t1, Tag t2) {
- return t1.value() < t2.value();
-}
-
-inline ScriptList::ScriptList(const String& str, ErrorHandler* errh) {
- assign(str, errh);
-}
-
-inline FeatureList::FeatureList(const String& str, ErrorHandler* errh) {
- assign(str, errh);
-}
-
-inline void FeatureList::filter(Vector<int>& fids, Tag ftag) const {
- Vector<Tag> tags;
- tags.push_back(ftag);
- filter(fids, tags);
-}
-
-inline bool GlyphSet::covers(Glyph g) const {
- if ((unsigned)g > MAXGLYPH)
- return false;
- else if (const uint32_t* u = _v[g >> SHIFT])
- return (u[(g & MASK) >> 5] & (1 << (g & 0x1F))) != 0;
- else
- return false;
-}
-
-inline bool GlyphSet::operator[](Glyph g) const {
- return covers(g);
-}
-
-} // namespace Efont::OpenType
-} // namespace Efont
-
-#endif