Behdad Esfahbod [Sat, 21 Feb 2015 13:29:08 +0000 (16:29 +0300)]
Minor
Behdad Esfahbod [Sat, 21 Feb 2015 09:50:01 +0000 (12:50 +0300)]
[layout] Fix comparison of GlyphID and hb_codepoint_t
Before, the IntType::cmp functions providing this and was truncating
the hb_codepoint_t to 16bits before comparison. I have no idea how
this was never discovered, and I'm too lazy to try to reproduce this
with Pango (which uses non-16bit codepoint numbers for missing glyphs).
Behdad Esfahbod [Sat, 21 Feb 2015 09:41:08 +0000 (12:41 +0300)]
Remove unused (and wrong as of a few commits ago) cmp() function
Behdad Esfahbod [Sat, 21 Feb 2015 09:31:59 +0000 (12:31 +0300)]
Minor
Behdad Esfahbod [Sat, 21 Feb 2015 08:45:22 +0000 (11:45 +0300)]
Minor
Behdad Esfahbod [Thu, 19 Feb 2015 14:30:05 +0000 (17:30 +0300)]
[layout] If lookup has only one subtable, move the forward loop down to subtable
I was hoping to see a nice speedup, but it resulted in a very minor one.
Behdad Esfahbod [Thu, 19 Feb 2015 14:15:05 +0000 (17:15 +0300)]
[layout] Add apply_forward / apply_backward
Behdad Esfahbod [Thu, 19 Feb 2015 08:33:30 +0000 (11:33 +0300)]
[layout] Remove unneeded return value from apply()
Behdad Esfahbod [Thu, 19 Feb 2015 14:03:02 +0000 (17:03 +0300)]
Minor simpilfy BEInt
Behdad Esfahbod [Thu, 19 Feb 2015 13:57:12 +0000 (16:57 +0300)]
Optimize IntType comparison to avoid branches for 16bit numbers
Behdad Esfahbod [Thu, 19 Feb 2015 13:55:51 +0000 (16:55 +0300)]
Minor simplify IntType
Behdad Esfahbod [Thu, 19 Feb 2015 07:47:18 +0000 (10:47 +0300)]
[layout] Minor
Behdad Esfahbod [Thu, 19 Feb 2015 07:42:41 +0000 (10:42 +0300)]
[layout] Minor
Behdad Esfahbod [Thu, 19 Feb 2015 07:40:23 +0000 (10:40 +0300)]
[layout] Don't check glyph props against lookup flags when recursing
Shouldn't be needed. I have a hard time imagining this breaking any
legitimate use case.
Behdad Esfahbod [Thu, 19 Feb 2015 07:29:41 +0000 (10:29 +0300)]
[layout] Port sanitize() to use dispatch()
Needed some rework of Extension table. Hopefully I got it right, and
the new template usage doesn't break any compilers...
Behdad Esfahbod [Wed, 18 Feb 2015 10:45:03 +0000 (13:45 +0300)]
Remove unused macro
Behdad Esfahbod [Wed, 18 Feb 2015 10:18:46 +0000 (13:18 +0300)]
[layout] Refactor Lookup::dispatch()
Behdad Esfahbod [Wed, 18 Feb 2015 10:09:54 +0000 (13:09 +0300)]
[layout] Refactor get_subtable()
Behdad Esfahbod [Tue, 17 Feb 2015 16:18:07 +0000 (19:18 +0300)]
Minor
Behdad Esfahbod [Tue, 17 Feb 2015 16:15:34 +0000 (19:15 +0300)]
[layout] Use dispatch() for add_coverage()
Behdad Esfahbod [Tue, 17 Feb 2015 15:14:17 +0000 (18:14 +0300)]
[layout] Add may_dispatch()
No functional change right now.
Behdad Esfahbod [Tue, 17 Feb 2015 14:27:44 +0000 (17:27 +0300)]
Make sanitize() a const method
This makes a lot of code safer. We only try modifying the object in one
place, after making sure it's safe to do so. So, do a const_cast<> in
that one place...
Behdad Esfahbod [Tue, 17 Feb 2015 13:05:30 +0000 (16:05 +0300)]
Minor
Behdad Esfahbod [Tue, 17 Feb 2015 13:04:07 +0000 (16:04 +0300)]
Remove unnecessary check in sanitize
Behdad Esfahbod [Thu, 29 Jan 2015 12:59:42 +0000 (13:59 +0100)]
[layout] Allocate iters in the context
Can be further optimized, but I think I didn't break anything.
Saves another 3% off Roboto shaping.
Behdad Esfahbod [Thu, 29 Jan 2015 12:48:48 +0000 (13:48 +0100)]
[layout] Move skippy_iter setup from constructor into init()
Behdad Esfahbod [Thu, 29 Jan 2015 12:40:39 +0000 (13:40 +0100)]
[lookup] Add skippy_iter.reset()
Towards reducing the cost of initializing skippy_iter()
Behdad Esfahbod [Thu, 29 Jan 2015 12:32:05 +0000 (13:32 +0100)]
[layout] Shuffle code around
Behdad Esfahbod [Thu, 29 Jan 2015 12:08:41 +0000 (13:08 +0100)]
[layout] Merge forward and backward iterators
Behdad Esfahbod [Thu, 29 Jan 2015 12:05:25 +0000 (13:05 +0100)]
[layout] Fix backward reject()
Has no functional effect since reject was never used with
match_glyph_data.
Behdad Esfahbod [Thu, 29 Jan 2015 10:38:01 +0000 (11:38 +0100)]
[layout] Remove some unnecessary checks in skippy
Behdad Esfahbod [Thu, 29 Jan 2015 10:08:43 +0000 (11:08 +0100)]
[lookup] Don't initialize skippy if coverage match fails
Currently:
- Initializing skippy is very expensive,
- Our lookup accelerator (using set-digests) can be very ineffecite,
As such, we end up many times initializing skippy but then failing
coverage check. Reordering fixes that.
When, later, we fix our accelerator to have truly small false-positive
rate (for example by using the frozen-sets), then we might want to
reorder these checks such that we wouldn't calculate coverage number
if skippy is going to fail.
This shows a 5% speedup with Roboto already.
Behdad Esfahbod [Thu, 29 Jan 2015 07:01:12 +0000 (23:01 -0800)]
[layout] Use setter method to set c->lookup_props
Behdad Esfahbod [Thu, 29 Jan 2015 06:53:54 +0000 (22:53 -0800)]
[layout] Remove unused wrapper method
Behdad Esfahbod [Thu, 29 Jan 2015 05:46:07 +0000 (21:46 -0800)]
Add hb_frozen_set_t
I experimented with replacing use of hb_set_digest_t with this new
hb_frozen_set_t, hoping to get a huge speedup for busy lookups
(like kern lookup in Roboto), but I only got 6% speendup in Roboto
and 4% in NotoNastaliqUrduDraft :(.
Behdad Esfahbod [Thu, 29 Jan 2015 04:55:42 +0000 (20:55 -0800)]
Hide internals of lookup accelerators
Behdad Esfahbod [Thu, 29 Jan 2015 04:29:48 +0000 (20:29 -0800)]
[util] Add convenience "make lib" target
Behdad Esfahbod [Wed, 25 Feb 2015 23:34:34 +0000 (15:34 -0800)]
Merge pull request #85 from KonstantinRitt/define_inline
Fix build with MSVC on CE
Konstantin Ritt [Fri, 13 Feb 2015 20:58:51 +0000 (00:58 +0400)]
Fix build with MSVC on CE
This code is C++ only. There isn't a single C++ compiler that fails to
understand the "inline" keyword, since it's required by C++98. Any
compiler older than C++98 is likely to choke on the template usage
further down, so this isn't necessary.
Moreover, the C++ standard says you cannot define macros.
[lib.macro.names] says "Nor shall such a translation unit define macros
for names lexically identical to keywords." -- technically, it's a
promise that the Standard Library headers won't do it, the wording means
that the entire translation unit won't do it, which implies no source
can do it.
MSVC complains about it:
fatal error C1189: #error : The C++ Standard Library forbids macroizing
keywords. Enable warning C4005 to find the forbidden macro.
Author: Thiago Macieira <thiago.macieira@intel.com>
Behdad Esfahbod [Wed, 28 Jan 2015 20:40:40 +0000 (12:40 -0800)]
[ft] Handle negative scales with vertical writing
Behdad Esfahbod [Wed, 28 Jan 2015 18:51:33 +0000 (10:51 -0800)]
[coretext] Don't generate notdef glyph for default-ignorables
As discovered on Chrome Mac:
https://code.google.com/p/chromium/issues/detail?id=452326
Behdad Esfahbod [Wed, 28 Jan 2015 18:43:32 +0000 (10:43 -0800)]
[coretext] Unbreak glyph positioning in presence of notdef runs
As discovered on Chrome Mac:
https://code.google.com/p/chromium/issues/detail?id=452326
This was originally broken in:
commit
5a0eed3b50629be4826e4e9428f2c3255195395d
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Mon Aug 11 23:47:16 2014 -0400
[coretext] Implement vertical shaping
Behdad Esfahbod [Tue, 27 Jan 2015 20:26:04 +0000 (12:26 -0800)]
Minor optimization
Konstantin Ritt [Tue, 27 Jan 2015 07:23:07 +0000 (11:23 +0400)]
Do not leak hb_language_t on hb_language_item_t destruction
Konstantin Ritt [Tue, 27 Jan 2015 16:08:41 +0000 (20:08 +0400)]
Minor improvement to HB_SHAPER_DATA_DESTROY
Behdad Esfahbod [Mon, 26 Jan 2015 22:25:52 +0000 (14:25 -0800)]
[API] Add hb_buffer_add_latin1()
This is by no ways to promote non-Unicode encodings. This is an entry
point that takes Unicode codepoints that happen to all be the first
256 characters and hence fit in 8bit strings. This is useful eg in Chrome
where strings that can fit in 8bit are implemented that way, and this
avoids copying into UTF-8 or UTF-16.
Perhaps we should rename this to hb_buffer_add_codepoints8(). I'm also
curious if anyone would be really interested in hb_buffer_add_codepoints16().
Please discuss!
Behdad Esfahbod [Mon, 26 Jan 2015 22:08:36 +0000 (14:08 -0800)]
Fix hb_buffer_add_codepoints to actually NOT validate
Behdad Esfahbod [Sun, 25 Jan 2015 21:06:03 +0000 (13:06 -0800)]
Merge pull request #81 from KonstantinRitt/fixes/build/win8phone
winrt_buildfixes
Konstantin Ritt [Sun, 25 Jan 2015 05:50:51 +0000 (09:50 +0400)]
Move some code around
Just to keep Windows specific workarounds in a single place.
Konstantin Ritt [Sun, 25 Jan 2015 04:16:26 +0000 (08:16 +0400)]
Do not define MemoryBarrier on WinCE
There is a _HBMemoryBarrier() wrapper function that emulates
MemoryBarrier() behavior when it is not defined.
Konstantin Ritt [Sun, 25 Jan 2015 04:13:24 +0000 (08:13 +0400)]
Fix build on WinRT
There is no environment (like WinCE) and the basic version
of InitializeCriticalSection is unsupported.
https://codereview.qt-project.org/#/c/92496/
Behdad Esfahbod [Fri, 23 Jan 2015 20:45:35 +0000 (12:45 -0800)]
0.9.38
Behdad Esfahbod [Fri, 23 Jan 2015 20:44:24 +0000 (12:44 -0800)]
[ft] Handle negative x_scale / y_scale
Behdad Esfahbod [Thu, 22 Jan 2015 03:19:33 +0000 (19:19 -0800)]
[coretext] Fix positioning of notdef
Behdad Esfahbod [Thu, 22 Jan 2015 02:50:57 +0000 (18:50 -0800)]
[coretext] Fix scaling
Before we were not accounting for possible differences in x_scale and
y_scale, as well as the signs of those. All should be in good shape
now.
Behdad Esfahbod [Thu, 22 Jan 2015 00:42:09 +0000 (16:42 -0800)]
[coretext] Use vertical advance for notdef in vertical direction
Behdad Esfahbod [Thu, 22 Jan 2015 02:33:50 +0000 (18:33 -0800)]
Add convenience make target "make lib" in src/
Behdad Esfahbod [Wed, 21 Jan 2015 09:57:44 +0000 (01:57 -0800)]
Add README.python
Behdad Esfahbod [Wed, 21 Jan 2015 09:51:48 +0000 (01:51 -0800)]
[bindings] Add README.python
Behdad Esfahbod [Tue, 20 Jan 2015 20:30:45 +0000 (12:30 -0800)]
[util] Add --font-size to hb-shape
Also makes hb-view to use 8 bits of subpixel precision and shape at
requested size, instead of always shaping at upem and scaling results.
Behdad Esfahbod [Fri, 9 Jan 2015 22:22:01 +0000 (14:22 -0800)]
[util] Minor
Behdad Esfahbod [Tue, 20 Jan 2015 01:00:31 +0000 (17:00 -0800)]
When matching second glyph of kerning pairs, use bsearch
Roboto has glyphs (like 'F') that have 200 kerning pairs.
Add a handcoded bsearch instead of previous linear search.
This doesn't show much speedup though, apparently we spend the
bulk of the time somewhere before here.
Behdad Esfahbod [Mon, 19 Jan 2015 22:42:11 +0000 (14:42 -0800)]
[bindings] Minor
Behdad Esfahbod [Tue, 20 Jan 2015 00:15:00 +0000 (16:15 -0800)]
Merge pull request #77 from roozbehp/master
Change New Tai Lue shaping engine from SEA to default
Roozbeh Pournader [Sun, 18 Jan 2015 22:30:08 +0000 (14:30 -0800)]
Change New Tai Lue shaping engine from SEA to default
This is to reflect the UTC decision to change the encoding model of
New Tai Lue from logical to visual to be similar to Thai, Lao, and
Tai Viet: http://www.unicode.org/L2/L2014/14250.htm#141-C26
The visual encoding is already the current practice of encoding New
Tai Lue on the web anyway:
http://www.unicode.org/L2/L2014/14195-newtailue.txt
Fixes behdad/harfbuzz#66.
Behdad Esfahbod [Sun, 18 Jan 2015 04:16:56 +0000 (20:16 -0800)]
[indic] Fix out-of-bounds access
Behdad Esfahbod [Wed, 7 Jan 2015 18:51:44 +0000 (10:51 -0800)]
[bindings] Update sample.py
Behdad Esfahbod [Wed, 7 Jan 2015 03:16:38 +0000 (19:16 -0800)]
[bindings] Use hb_glib_blob_create() in sample
hb_blob_create() is considered C-only API.
Behdad Esfahbod [Wed, 7 Jan 2015 00:58:33 +0000 (16:58 -0800)]
[glib] Add hb_glib_blob_create() that takes GBytes
Behdad Esfahbod [Tue, 6 Jan 2015 23:43:14 +0000 (15:43 -0800)]
[bindings] Replace deprecated allow-none with optional and nullable
Behdad Esfahbod [Tue, 6 Jan 2015 23:37:31 +0000 (15:37 -0800)]
[bindings] Make sample Python 2/3 compatible
Behdad Esfahbod [Tue, 6 Jan 2015 22:05:26 +0000 (14:05 -0800)]
Fix up gobject-introspection a bit
Minimal shaping works now!
Behdad Esfahbod [Mon, 5 Jan 2015 22:43:13 +0000 (14:43 -0800)]
Remove hardcoded ICU include paths.
ICU exports them using LOCAL_EXPORT_C_INCLUDE_DIRS.
https://android-review.googlesource.com/#/c/121311/
Behdad Esfahbod [Mon, 5 Jan 2015 04:32:18 +0000 (20:32 -0800)]
Merge pull request #76 from cpeterso/cpeterso/Wunused-function
Add #ifdef HB_USE_ATEXIT to fix -Wunused-function warnings
Chris Peterson [Mon, 5 Jan 2015 03:31:10 +0000 (19:31 -0800)]
Add #ifdef HB_USE_ATEXIT to fix -Wunused-function warnings
Behdad Esfahbod [Sun, 4 Jan 2015 05:55:30 +0000 (21:55 -0800)]
Merge pull request #75 from cpeterso/cpeterso/Wunused-value
Fix hb_atomic_ptr_cmpexch -Wunused-value warnings
Chris Peterson [Sun, 4 Jan 2015 03:46:19 +0000 (19:46 -0800)]
Fix hb_atomic_ptr_cmpexch -Wunused-value warnings
Behdad Esfahbod [Fri, 2 Jan 2015 22:09:23 +0000 (14:09 -0800)]
Add missing va_end()
Fixes https://github.com/behdad/harfbuzz/pull/74
Behdad Esfahbod [Mon, 29 Dec 2014 02:56:15 +0000 (18:56 -0800)]
[ft] Don't set font ppem
For discussion see:
http://lists.freedesktop.org/archives/harfbuzz/2012-April/001905.html
Over time we have had added NO_HINTING all over the place in hb-ft. Finish it off.
Not setting ppem on hb-font disables get_contour_point() calls which is good anyway.
See comments in the commit.
Behdad Esfahbod [Mon, 29 Dec 2014 01:44:26 +0000 (17:44 -0800)]
[ft] Add hb_ft_face_create_referenced() and hb_ft_font_create_referenced()
When I originally wrote hb-ft, FreeType objects did not support reference
counting. As such, hb_ft_face_create() and hb_ft_font_create() had a
"destroy" callback and client was responsible for making sure FT_Face is
kept around as long as the hb-font/face are alive.
However, since this was not clearly documented, some clienets didn't
correctly did that. In particular, some clients assumed that it's safe
to destroy FT_Face and then hb_face_t. This, indeed, used to work, until
45fd9424c723f115ca98995b8f8a25185a6fc71d, which make face destroy access
font tables.
Now, I fixed that issue in
395b35903e052aecc97d0807e4f813c64c0d2b0b since
the access was not needed, but the problem remains that not all clients
handle this correctly. See:
https://bugs.freedesktop.org/show_bug.cgi?id=86300
Fortunately, FT_Reference_Face() was added to FreeType in 2010, and so we
can use it now. Originally I wanted to change hb_ft_face_create() and
hb_ft_font_create() to reference the face if destroy==NULL was passed in.
That would improve pretty much all clients, with little undesired effects.
Except that FreeType itself, when compiled with HarfBuzz support, calls
hb_ft_font_create() with destroy==NULL and saves the resulting hb-font on
the ft-face (why does it not free it immediately?). Making hb-face
reference ft-face causes a cycling reference there. At least, that's my
current understanding.
At any rate, a cleaner approach, even if it means all clients will need a
change, is to introduce brand new API. Which this commit does.
Some comments added to hb-ft.h, hoping to make future clients make better
choices.
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=75299
Behdad Esfahbod [Mon, 29 Dec 2014 01:27:39 +0000 (17:27 -0800)]
Remove redundant check for FT_Face_GetCharVariantIndex
We require FreeType >= 2.8.3. This symbol was introduced earlier
than that.
Behdad Esfahbod [Mon, 29 Dec 2014 01:04:23 +0000 (17:04 -0800)]
Fix FreeType version check
Behdad Esfahbod [Mon, 29 Dec 2014 00:20:31 +0000 (16:20 -0800)]
[ft] Open blob in READONLY mode
HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE is deprecated and fairly
useless now.
Behdad Esfahbod [Mon, 29 Dec 2014 00:03:26 +0000 (16:03 -0800)]
Avoid accessing layout tables at face destruction
"Fixes" https://bugs.freedesktop.org/show_bug.cgi?id=86300
Based on discussion someone else who had a similar issue, most probably
the user is releasing FT_Face before destructing hb_face_t / hb_font_t.
While that's a client bug, and while we can (and should) use FreeType
refcounting to help avoid that, it happens that we were accessing
the table when we didn't really have to. Avoid that.
Behdad Esfahbod [Fri, 19 Dec 2014 02:22:21 +0000 (18:22 -0800)]
Fail blob creation if length overflows or is too large
Fail if blob start plus length overflows; or if blob length
is greater than 2GB. It takes a while for fonts to get to that
size. In the mean time, it protects against bugs like this:
http://www.icu-project.org/trac/ticket/11450
Also avoids some weird issues with 32bit vs 64bit systems
as we accept length as unsigned int. As such, a length of
-1 will cause overflow on 32bit machines, but happily
accepted on a 64bit machine. Avoid that.
Behdad Esfahbod [Fri, 19 Dec 2014 02:09:41 +0000 (18:09 -0800)]
Assert that blob length doesn't overflow address.
This will crash now, if blob was created with wrong length.
Check for that coming next commit.
Behdad Esfahbod [Wed, 17 Dec 2014 20:09:17 +0000 (12:09 -0800)]
0.9.37
Behdad Esfahbod [Sat, 13 Dec 2014 05:07:53 +0000 (21:07 -0800)]
[otlayout] Mark variables that are C arrays as opposed to OT::ArrayOf
Behdad Esfahbod [Sat, 13 Dec 2014 04:54:28 +0000 (20:54 -0800)]
[otlayout] Avoid invalid access with Context format 3
Behdad Esfahbod [Sat, 13 Dec 2014 04:43:18 +0000 (20:43 -0800)]
[ot] Debug get_coverage
Behdad Esfahbod [Sat, 13 Dec 2014 04:36:49 +0000 (20:36 -0800)]
[ot] Print format in dispatch trace
Behdad Esfahbod [Sat, 13 Dec 2014 04:28:49 +0000 (20:28 -0800)]
Minor
Behdad Esfahbod [Sat, 13 Dec 2014 03:46:09 +0000 (19:46 -0800)]
[ot] Make sure all toplevel tables have tableTag
Behdad Esfahbod [Sat, 13 Dec 2014 03:32:46 +0000 (19:32 -0800)]
[sanitize] Improve debug output some more
Behdad Esfahbod [Sat, 13 Dec 2014 02:23:20 +0000 (18:23 -0800)]
[sanitize] Improve debug output
Behdad Esfahbod [Wed, 10 Dec 2014 20:05:24 +0000 (12:05 -0800)]
[indic] Allow ZWJ/ZWNJ before SM
In Oriya, a ZWJ/ZWNJ might be added before candrabindu to encourage
or stop ligation of the candrabindu. This is clearly specified in
the Unicode section on Oriya. Allow it there. Note that Uniscribe
doesn't allow this.
Micro tests added using Noto Sans Oriya draft.
No changes in numbers. Currently at:
BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%)
DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%)
GUJARATI: 366349 out of 366457 tests passed. 108 failed (0.0294714%)
GURMUKHI: 60732 out of 60747 tests passed. 15 failed (0.0246926%)
KANNADA: 951190 out of 951913 tests passed. 723 failed (0.0759523%)
KHMER: 299070 out of 299124 tests passed. 54 failed (0.0180527%)
MALAYALAM: 1048147 out of 1048334 tests passed. 187 failed (0.0178378%)
ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%)
TAMIL: 1091753 out of 1091754 tests passed. 1 failed (9.15957e-05%)
TELUGU: 970555 out of 970573 tests passed. 18 failed (0.
00185457%)
Behdad Esfahbod [Thu, 20 Nov 2014 22:42:24 +0000 (14:42 -0800)]
0.9.36
Behdad Esfahbod [Wed, 29 Oct 2014 18:23:08 +0000 (11:23 -0700)]
In hb_ot_collect_glyphs(), don't recurse to a lookup more than once
Otherwise, we might process a lookup thousands of times, with no
benefit. This pathological case was hit by Noto Nastaliq Urdu Draft
in Firefox's code to determine whether space glyph is involved in
any GSUB/GPOS rules. A test page is at http://behdad.org/urdu
See:
https://bugzilla.mozilla.org/show_bug.cgi?id=1090869
Behdad Esfahbod [Wed, 15 Oct 2014 04:26:13 +0000 (21:26 -0700)]
Move code around
Behdad Esfahbod [Wed, 15 Oct 2014 04:24:59 +0000 (21:24 -0700)]
Move macros around
Fixes https://bugs.freedesktop.org/show_bug.cgi?id=84491