Merge pull request #37 from wm4/minor

Minor cosmetics
shaper: rewrite and simplify harfbuzz shaping

Rewrite the core of the harfbuzz shaping function. Gets rid of the
MAX_RUNS limit of runs per line and reuses a single hb_buffer_t,
which should be more efficient.
shaper: use global features correctly

start/end of feature tags is unsigned, so use the proper constant
to signal to HarfBuzz that these features are global. This allows
HarfBuzz to cache shape plans, and that can considerably speed up
shaping, especially if many small runs need to be shaped.
Unroll FNV-1A hash function

Unroll the hash function with Duff's device for improved performance.
Fixed incorrect spelling in copyright notice
Merge pull request #39 from grigorig/shaper-hash-opt

Shaper and hash function optimizations
Fix subpixel jumping of rotated glyph runs

Rotation origin was not taken into account
when caching glyph run bitmaps.
Use a function for aligned memory allocations

...instead of doing this manually.
Use cluster advance in compute_string_bbox to account for \fsp

Fixes libass#16 (the remaining sub-issue).
Font metrics: FreeType falls back to sTypoAscender/Descender

Fixes libass#8.
Don't reset wrap_style on \r

This isn't part of a style. Fixes libass#45, GC#116.
Optimize tag matching

Instead of calling mystrcmp for each tag (which tries to match the tag
with strncmp), introduce a state machine (corresponds to a DFA) to match
tags.

This is pretty naive, and uses a full-sized (96 entries for the range of
valid characters, 32-128) table for each state, requiring a total of 51
states for 45 tokens, amounting to 11KB of state tables.

Make state tables smaller

Why not. Not sure about impact on speed, but it's minor.