.editorconfig | 3 CMakeLists.txt | 6 - configure.ac | 2 src/Makefile.sources | 2 src/hb-aat-gcid-table.hh | 73 ++++++++++++++++++ src/hb-aat-layout-bsln-table.hh | 156 ++++++++++++++++++++++++++++++++++++++++ src/hb-aat-layout.cc | 4 - 7 files changed, 241 insertions(+), 5 deletions(-)
New commits: commit eff36cd8f06ee992218ed3f198f6a4ea19d7089c Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Fri Mar 30 22:25:35 2018 +0430 Minor build related changes diff --git a/.editorconfig b/.editorconfig index 708188ad..bd981d12 100644 --- a/.editorconfig +++ b/.editorconfig @@ -14,5 +14,8 @@ tab_width = 8 [*.{py,sh}] indent_style = tab +[{Makefile.am,Makefile.sources,configure.ac}] +tab_width = 8 + [{CMakeLists.txt,*.cmake}] indent_size = 2 diff --git a/CMakeLists.txt b/CMakeLists.txt index da6ae8b3..55366c06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -539,11 +539,11 @@ target_link_libraries(harfbuzz-subset harfbuzz ${THIRD_PARTY_LIBS}) if (UNIX OR MINGW) # Make symbols link locally - include(CheckCXXCompilerFlag) + include (CheckCXXCompilerFlag) check_cxx_compiler_flag(-Bsymbolic-functions CXX_SUPPORTS_FLAG_BSYMB_FUNCS) - if(CXX_SUPPORTS_FLAG_BSYMB_FUNCS) + if (CXX_SUPPORTS_FLAG_BSYMB_FUNCS) link_libraries(-Bsymbolic-functions) - endif() + endif () if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU") # Make sure we don't link to libstdc++ diff --git a/configure.ac b/configure.ac index 9e3bf081..aca03bfa 100644 --- a/configure.ac +++ b/configure.ac @@ -539,8 +539,8 @@ Additional shapers (the more the merrier): Platform shapers (not normally needed): CoreText: ${have_coretext} - Uniscribe: ${have_uniscribe} DirectWrite: ${have_directwrite} + Uniscribe: ${have_uniscribe} Other features: Documentation: ${enable_gtk_doc} commit 9d68f73d5cf3f3df6bc5516ada987d9019d3fe3d Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Fri Mar 30 21:57:10 2018 +0430 [aat] Implement gcid table parsing (#944) diff --git a/src/Makefile.sources b/src/Makefile.sources index 4917cf16..8a7e8204 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -87,6 +87,7 @@ HB_OT_sources = \ hb-aat-layout-morx-table.hh \ hb-aat-layout-trak-table.hh \ hb-aat-fmtx-table.hh \ + hb-aat-gcid-table.hh \ hb-aat-ltag-table.hh \ hb-aat-layout-private.hh \ hb-ot-font.cc \ diff --git a/src/hb-aat-gcid-table.hh b/src/hb-aat-gcid-table.hh new file mode 100644 index 00000000..57fbbad4 --- /dev/null +++ b/src/hb-aat-gcid-table.hh @@ -0,0 +1,73 @@ +/* + * Copyright © 2018 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_AAT_GCID_TABLE_HH +#define HB_AAT_GCID_TABLE_HH + +#include "hb-aat-layout-common-private.hh" + +#define HB_AAT_TAG_gcid HB_TAG('g','c','i','d') + + +namespace AAT { + +/* + * gcid -- Glyphs CIDs + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6gcid.html + */ + +struct gcid +{ + static const hb_tag_t tableTag = HB_AAT_TAG_gcid; + + inline bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && CIDs.sanitize (c)); + } + + protected: + HBUINT16 version; /* Version number (set to 0) */ + HBUINT16 format; /* Data format (set to 0) */ + HBUINT32 size; /* Size of the table, including header */ + HBUINT16 registry; /* The registry ID */ + uint8_t registryName[64]; + /* The registry name in ASCII */ + HBUINT16 order; /* The order ID */ + uint8_t orderName[64]; /* The order name in ASCII */ + HBUINT16 supplementVersion; + /* The supplement version */ + ArrayOf<HBUINT16> + CIDs; /* The CIDs for the glyphs in the font, + * starting with glyph 0. If a glyph does not correspond + * to a CID in the identified collection, 0xFFFF is used. + * This should not exceed the number of glyphs in the font. */ + public: + DEFINE_SIZE_ARRAY (144, CIDs); +}; + +} /* namespace AAT */ + + +#endif /* HB_AAT_GCID_TABLE_HH */ diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc index 88625ac2..9c302750 100644 --- a/src/hb-aat-layout.cc +++ b/src/hb-aat-layout.cc @@ -36,6 +36,7 @@ #include "hb-aat-layout-morx-table.hh" #include "hb-aat-layout-trak-table.hh" #include "hb-aat-fmtx-table.hh" // Just so we compile it; unused otherwise. +#include "hb-aat-gcid-table.hh" // Just so we compile it; unused otherwise. #include "hb-aat-ltag-table.hh" // Just so we compile it; unused otherwise. /* commit 0e230a83ae8a2c5fbe40dc0e74e5e7ead106e45e Author: Ebrahim Byagowi <ebra...@gnu.org> Date: Fri Mar 30 19:36:00 2018 +0430 [aat] Implement bsln table parsing (#943) diff --git a/src/Makefile.sources b/src/Makefile.sources index ec5eb655..4917cf16 100644 --- a/src/Makefile.sources +++ b/src/Makefile.sources @@ -82,6 +82,7 @@ HB_OT_sources = \ hb-aat-layout.cc \ hb-aat-layout-common-private.hh \ hb-aat-layout-ankr-table.hh \ + hb-aat-layout-bsln-table.hh \ hb-aat-layout-kerx-table.hh \ hb-aat-layout-morx-table.hh \ hb-aat-layout-trak-table.hh \ diff --git a/src/hb-aat-layout-bsln-table.hh b/src/hb-aat-layout-bsln-table.hh new file mode 100644 index 00000000..3b9e4fea --- /dev/null +++ b/src/hb-aat-layout-bsln-table.hh @@ -0,0 +1,156 @@ +/* + * Copyright © 2018 Ebrahim Byagowi + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + */ + +#ifndef HB_AAT_LAYOUT_BSLN_TABLE_HH +#define HB_AAT_LAYOUT_BSLN_TABLE_HH + +#include "hb-aat-layout-common-private.hh" + +#define HB_AAT_TAG_bsln HB_TAG('b','s','l','n') + + +namespace AAT { + +struct BaselineTableFormat0Part +{ + inline bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + protected: + // Roman, Ideographic centered, Ideographic low, Hanging and Math + // are the default defined ones, but any other maybe accessed also. + HBINT16 deltas[32]; /* These are the FUnit distance deltas from + * the font's natural baseline to the other + * baselines used in the font. */ + public: + DEFINE_SIZE_STATIC (64); +}; + +struct BaselineTableFormat1Part +{ + inline bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && lookupTable.sanitize (c)); + } + + protected: + HBINT16 deltas[32]; /* ditto */ + Lookup<HBUINT16> + lookupTable; /* Lookup table that maps glyphs to their + * baseline values. */ + public: + DEFINE_SIZE_MIN (66); +}; + +struct BaselineTableFormat2Part +{ + inline bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this)); + } + + protected: + GlyphID stdGlyph; /* The specific glyph index number in this + * font that is used to set the baseline values. + * This is the standard glyph. + * This glyph must contain a set of control points + * (whose numbers are contained in the ctlPoints field) + * that are used to determine baseline distances. */ + HBUINT16 ctlPoints[32]; /* Set of control point numbers, + * associated with the standard glyph. + * A value of 0xFFFF means there is no corresponding + * control point in the standard glyph. */ + public: + DEFINE_SIZE_STATIC (66); +}; + +struct BaselineTableFormat3Part +{ + inline bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + return_trace (c->check_struct (this) && lookupTable.sanitize (c)); + } + + protected: + GlyphID stdGlyph; /* ditto */ + HBUINT16 ctlPoints[32]; /* ditto */ + Lookup<HBUINT16> + lookupTable; /* Lookup table that maps glyphs to their + * baseline values. */ + public: + DEFINE_SIZE_MIN (68); +}; + +/* + * bsln -- Baseline table + * https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6bsln.html + */ + +struct bsln +{ + static const hb_tag_t tableTag = HB_AAT_TAG_bsln; + + inline bool sanitize (hb_sanitize_context_t *c) const + { + TRACE_SANITIZE (this); + if (!(c->check_struct (this) && defaultBaseline < 32)) + return_trace (false); + + switch (format) { + case 0: return_trace (parts.format0.sanitize (c)); + case 1: return_trace (parts.format1.sanitize (c)); + case 2: return_trace (parts.format2.sanitize (c)); + case 3: return_trace (parts.format3.sanitize (c)); + default:return_trace (true); + } + } + + protected: + FixedVersion<>version; /* Version number of the Baseline table. */ + HBUINT16 format; /* Format of the baseline table. Only one baseline + * format may be selected for the font. */ + HBUINT16 defaultBaseline;/* Default baseline value for all glyphs. + * This value can be from 0 through 31. */ + union { + // Distance-Based Formats + BaselineTableFormat0Part format0; + BaselineTableFormat1Part format1; + // Control Point-based Formats + BaselineTableFormat2Part format2; + BaselineTableFormat3Part format3; + } parts; + public: + DEFINE_SIZE_MIN (8); +}; + +} /* namespace AAT */ + + +#endif /* HB_AAT_LAYOUT_BSLN_TABLE_HH */ diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc index a9b4328d..88625ac2 100644 --- a/src/hb-aat-layout.cc +++ b/src/hb-aat-layout.cc @@ -31,10 +31,11 @@ #include "hb-aat-layout-private.hh" #include "hb-aat-layout-ankr-table.hh" +#include "hb-aat-layout-bsln-table.hh" // Just so we compile it; unused otherwise. #include "hb-aat-layout-kerx-table.hh" #include "hb-aat-layout-morx-table.hh" #include "hb-aat-layout-trak-table.hh" -#include "hb-aat-fmtx-table.hh" // Just so we compile it; unused otherwise +#include "hb-aat-fmtx-table.hh" // Just so we compile it; unused otherwise. #include "hb-aat-ltag-table.hh" // Just so we compile it; unused otherwise. /* _______________________________________________ HarfBuzz mailing list HarfBuzz@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/harfbuzz