#ifndef HB_OT_LAYOUT_OPEN_PRIVATE_H
#define HB_OT_LAYOUT_OPEN_PRIVATE_H
+#ifndef HB_OT_LAYOUT_CC
+#error "This file should only be included from hb-ot-layout.c"
+#endif
+
#include "hb-ot-layout-private.h"
return &(*this)[i]; \
return NULL; \
} \
- inline const Type& get_##name_by_tag (hb_tag_t tag) const { \
+ inline const Type& get_##name##_by_tag (hb_tag_t tag) const { \
for (unsigned int i = 0; i < this->get_len (); i++) \
if (tag == (*this)[i].tag) \
return (*this)[i]; \
private: inline Type() {} /* cannot be instantiated */ \
public:
+/* TODO use a global nul-array for most Null's */
/* defines Null##Type as a safe nil instance of Type */
#define DEFINE_NULL_DATA(Type, size, data) \
static const unsigned char Null##Type##Data[size] = data; \
ASSERT_SIZE (Type, size); \
DEFINE_NULL_DATA (Type, size, data)
#define DEFINE_NULL_ALIAS(NewType, OldType) \
- static const NewType &Null##NewType = *(NewType *)Null##OldType##Data
+ /* XXX static */ const NewType &Null##NewType = *(NewType *)Null##OldType##Data
/* get_for_data() is a static class method returning a reference to an
* instance of Type located at the input data location. It's just a
- * fancy cast! */
+ * fancy, NULL-safe, cast! */
#define STATIC_DEFINE_GET_FOR_DATA(Type) \
static inline const Type& get_for_data (const char *data) { \
extern const Type &Null##Type; \
#ifndef HB_OT_LAYOUT_PRIVATE_H
#define HB_OT_LAYOUT_PRIVATE_H
-#ifndef HB_OT_LAYOUT_CC
-#error "This file should only be included from hb-ot-layout.c"
-#endif
-
#include "hb-private.h"
#include "hb-ot-layout.h"
typedef uint16_t hb_ot_layout_lookup_flags_t;
typedef int hb_ot_layout_coverage_t; /* -1 is not covered, >= 0 otherwise */
+/* XXX #define HB_OT_LAYOUT_INTERNAL static */
+#define HB_OT_LAYOUT_INTERNAL
HB_BEGIN_DECLS();
-static hb_bool_t
+/*
+ * GDEF
+ */
+
+HB_OT_LAYOUT_INTERNAL hb_bool_t
_hb_ot_layout_has_new_glyph_classes (HB_OT_Layout *layout);
-static hb_ot_layout_glyph_properties_t
+HB_OT_LAYOUT_INTERNAL hb_ot_layout_glyph_properties_t
_hb_ot_layout_get_glyph_properties (HB_OT_Layout *layout,
hb_glyph_t glyph);
-static bool
+HB_OT_LAYOUT_INTERNAL hb_bool_t
_hb_ot_layout_check_glyph_properties (HB_OT_Layout *layout,
HB_GlyphItem gitem,
hb_ot_layout_lookup_flags_t lookup_flags,
const OpenTypeFontFile &font = OpenTypeFontFile::get_for_data (font_data);
const OpenTypeFontFace &face = font.get_face (face_index);
- layout->gdef = &GDEF::get_for_data (font.get_table_data (face.get_table (GDEF::Tag)));
- layout->gsub = &GSUB::get_for_data (font.get_table_data (face.get_table (GSUB::Tag)));
-//layout->gpos = &GPOS::get_for_data (font.get_table_data (face.get_table (GPOS::Tag)));
+ layout->gdef = &GDEF::get_for_data (font.get_table_data (face.get_table_by_tag (GDEF::Tag)));
+ layout->gsub = &GSUB::get_for_data (font.get_table_data (face.get_table_by_tag (GSUB::Tag)));
+//layout->gpos = &GPOS::get_for_data (font.get_table_data (face.get_table_by_tag (GPOS::Tag)));
return layout;
}
return layout->gdef->has_glyph_classes ();
}
-static hb_bool_t
+HB_OT_LAYOUT_INTERNAL hb_bool_t
_hb_ot_layout_has_new_glyph_classes (HB_OT_Layout *layout)
{
return layout->new_gdef.len > 0;
}
-static hb_ot_layout_glyph_properties_t
+HB_OT_LAYOUT_INTERNAL hb_ot_layout_glyph_properties_t
_hb_ot_layout_get_glyph_properties (HB_OT_Layout *layout,
hb_glyph_t glyph)
{
}
}
-static bool
+HB_OT_LAYOUT_INTERNAL hb_bool_t
_hb_ot_layout_check_glyph_properties (HB_OT_Layout *layout,
HB_GlyphItem gitem,
hb_ot_layout_lookup_flags_t lookup_flags,
hb_ot_layout_glyph_properties_t *property)
{
- /* TODO ugh, clean this mess up */
hb_ot_layout_glyph_class_t basic_glyph_class;
hb_ot_layout_glyph_properties_t desired_attachment_class;
- if (gitem->gproperties == HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED)
+ if (gitem->gproperties == HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN)
{
- gitem->gproperties = _hb_ot_layout_get_glyph_properties (layout, gitem->gindex);
+ gitem->gproperties = *property = _hb_ot_layout_get_glyph_properties (layout, gitem->gindex);
if (gitem->gproperties == HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED)
return false;
}
properties = _hb_ot_layout_get_glyph_properties (layout, glyph);
- if (properties & 0xFF)
+ if (properties & 0xFF00)
return HB_OT_LAYOUT_GLYPH_CLASS_MARK;
return (hb_ot_layout_glyph_class_t) properties;
#define ASSERT_SIZE(_type, _size) ASSERT_STATIC (sizeof (_type) == (_size))
+/*
+ * buffer
+ */
+
+/* XXX */
+#define HB_BUFFER_GLYPH_PROPERTIES_UNKNOWN 0xFFFF
+
#endif /* HB_PRIVATE_H */
break;
}
- int num_fonts = ot.get_len ();
+ int num_fonts = ot.get_face_count ();
printf ("%d font(s) found in file\n", num_fonts);
for (int n_font = 0; n_font < num_fonts; n_font++) {
- const OpenTypeFontFace &font = ot[n_font];
+ const OpenTypeFontFace &font = ot.get_face (n_font);
printf ("Font %d of %d:\n", n_font+1, num_fonts);
- int num_tables = font.get_len ();
+ int num_tables = font.get_table_count ();
printf (" %d table(s) found in font\n", num_tables);
for (int n_table = 0; n_table < num_tables; n_table++) {
- const OpenTypeTable &table = font[n_table];
+ const OpenTypeTable &table = font.get_table (n_table);
printf (" Table %2d of %2d: %.4s (0x%08lx+0x%08lx)\n", n_table+1, num_tables,
(const char *)table.get_tag(), table.get_offset(), table.get_length());
- if (table.get_tag() == "GSUB" || table.get_tag() == "GPOS") {
- const GSUBGPOS &g = GSUBGPOS::get_for_data (ot[table]);
+ if (table.get_tag() == GSUBGPOS::GSUBTag || table.get_tag() == GSUBGPOS::GPOSTag) {
+ const GSUBGPOS &g = GSUBGPOS::get_for_data (ot.get_table_data (table));
const ScriptList &scripts = g.get_script_list();
int num_scripts = scripts.get_len ();