General fixes:
=============

- Instead of forming clusters immediately, only do it if we are reversing
  the text.  We'd need a separate bit to indicate cluster start then.

- Right now, BTW, for non-native direction runs, we get the cluster wrong...
  Should do min(input-glyphs.cluster)

- Fix TT 'kern' on/off and GPOS interaction (move kerning before GPOS)

- Do proper rounding when scaling from font space?

- Misc features:
  * init/medi/fina/isol for non-cursive scripts
  * vkna,hkna etc for kana, *jmo for hangul, etc


API issues to fix before 1.0:
============================

- Add pkg-config files for glue codes (harfbuzz-glib, etc)

- Figure out how many .so objects, how to link, etc

- Add hb-cairo glue

- Add sanitize API (and a cached version, that saves result on blob user-data)

- hb_shape() currently does a bit more than hb_ot_shape().  Shouldn't.

- Add glib GBoxedType stuff and introspection


API to add (maybe after 1.0):
============================

- BCP 47 language handling / API (language_matches?)

- Add hb_face_get_glyph_count()?

- Add hb_font_create_linear()?

- Add hb_shape_plan()/hb_shape_execute()

- Add query API for aalt-like features?

- SFNT api? get_num_faces? get_table_tags? (there's something in stash)

- Full matrix instead of scale?

- Add segmentation API

- Add hb-fribidi?


hb-view enhancements:
====================

- Add --format
- Add --width, --height, --auto-size, --align, etc?
- Port to GOption, --help
- Add XML and JSON formats


Tests to write:
==============

- ot-layout enumeration API (needs font)

- Finish test-shape.c, grep for TODO

- Finish test-unicode.c, grep for TODO


Optimizations:
=============

- Avoid allocating blob objects internally for for_data() faces?

- Add caching layer to hb-ft
