Commit Graph

1554 Commits

Author SHA1 Message Date
Behdad Esfahbod c4611cb66f Fix test 2011-09-15 00:32:39 -04:00
Behdad Esfahbod bc187e5ac7 Refine Indic scripts, following Martin Hosken's recommendation 2011-09-08 13:35:17 -04:00
Behdad Esfahbod 738d096a06 Pass through unknown ISO 639-3 language tags to OpenType engine
In hb_ot_tag_from_language(), if first component of an unknown
language is three letters long, use it directly as OpenType language
tag (after case conversion and padding).
2011-09-02 13:31:19 -04:00
Behdad Esfahbod ea02cbf03c [graphite] Don't preload glyphs
Doesn't seem to be slower.
2011-09-02 12:39:20 -04:00
Behdad Esfahbod 210a06f3d7 Minor 2011-08-26 13:39:49 +02:00
Behdad Esfahbod 4a8d2e379a [graphite2] Chop a few more lines 2011-08-26 09:40:54 +02:00
Behdad Esfahbod 81ec289da7 Minor 2011-08-26 09:33:06 +02:00
Behdad Esfahbod 3380de5abb [graphite] Use buffer->replace_glyphs() 2011-08-26 09:30:49 +02:00
Behdad Esfahbod 9ebe8c0286 Add buffer->replace_glyphs() 2011-08-26 09:29:42 +02:00
Behdad Esfahbod a5edb1031c Minor 2011-08-26 09:27:13 +02:00
Behdad Esfahbod 290e3ee517 [graphite] Only pass the first part language tag to graphite
Still not sure about:

1) Case.  We pass lowercase for now.  Would be nice if graphite was
uppercase 3letter like OpenType,

2) Padding.  IMO, tag padding is always with spaces, but Martin was
talking about NUL bytes.
2011-08-26 09:25:04 +02:00
Behdad Esfahbod 4c9fe88d30 [API] Make all _from_string() functions take a len parameter
Can be -1 for NUL-terminated string.  This is useful for passing parts
of a larger string to a function without having to copy or modify the
string first.

Affected functions:

	hb_tag_t hb_tag_from_string()
	hb_direction_from_string()
	hb_language_from_string()
	hb_script_from_string()
2011-08-26 09:22:12 +02:00
Behdad Esfahbod a499bdea5c [graphite2] Bail if grface is NULL 2011-08-25 22:46:21 +02:00
Behdad Esfahbod 3007ffa9e5 Reorder combining-class to better suit Arabic shadda mark-mark positioning
As reported by Khaled on the list:

"After the introduction of canonical reordering of combining marks
(commit 34c22f8), I'm no longer able to do mark/mark substitution or
positioning for mark sequences that involve shadda as a first mark (or
most interesting sequences at least).

"After some digging, it turned out that shadda have a ccc=33 while most
Arabic marks that combine with it have a lower ccc value, which results
in the shadda being reordered after the other mark which,
unsurprisingly, breaks my contextual substitution and mkmk anchors."

See:

http://unicode.org/faq/normalization.html#8
http://unicode.org/faq/normalization.html#9
2011-08-25 09:08:53 +02:00
Behdad Esfahbod 74ef81a0b0 Fix make distcheck 2011-08-24 19:36:50 +02:00
Behdad Esfahbod 24bcdbcc06 Add hb-ot-hmtx-table.hh
Oops!
2011-08-24 19:13:15 +02:00
Behdad Esfahbod a3bd8a0e18 [graphite] Rewrite properly 2011-08-24 03:25:57 +02:00
Behdad Esfahbod 5072934c35 Minor 2011-08-24 02:24:27 +02:00
Behdad Esfahbod 71388b3ee7 [uniscribe] Minor 2011-08-24 02:09:04 +02:00
Behdad Esfahbod cd2b901027 [graphite] Minor 2011-08-24 01:48:03 +02:00
Behdad Esfahbod 834af3b48a [graphite] Remove hb_graphite2_feature_check()
I don't see how this function can be useful.
2011-08-24 01:45:47 +02:00
Behdad Esfahbod 1f49cf32c9 Add graphite2 integration from Martin Hosken
To be modified, a lot.
2011-08-24 01:32:41 +02:00
Behdad Esfahbod 0e6d36d8a3 Minor 2011-08-24 01:31:29 +02:00
Behdad Esfahbod efde811325 Add a constructor for hb_prealloced_array_t
Fixes build with MSVC.
2011-08-23 00:04:57 +02:00
Behdad Esfahbod d75333f166 Add gobject enum support, but disabled for now
need to figure out the naming.  The generated code doesn't have the
right name.
2011-08-19 19:59:24 +02:00
Behdad Esfahbod 7d235d272f Flesh out tt funcs a bit 2011-08-19 19:23:28 +02:00
Behdad Esfahbod b9415e76d7 [API] Add hb_font_set_funcs_data() 2011-08-19 19:20:30 +02:00
Behdad Esfahbod e6c09cdf43 Remove the pre_allocate argument from hb_buffer_create()
For two reasons:

1. User can always call hb_buffer_pre_allocate() themselves, and

2. Now we do a pre_alloc in add_utfX anyway, so the total number of
reallocs is limited to a small number (~3) anyway.  This just makes the
API cleaner.
2011-08-19 19:20:26 +02:00
Behdad Esfahbod 187bdeaa6c Do (nothing for) hmtx sanitize 2011-08-17 19:03:06 +02:00
Behdad Esfahbod d6016e4910 Fix name-table sanitize 2011-08-17 15:00:18 +02:00
Behdad Esfahbod ae9877dea6 Add hhea-table support 2011-08-17 15:00:10 +02:00
Behdad Esfahbod 7a750ac33e Rename table files from eg maxp-private.hh to maxp-table.hh 2011-08-17 14:19:59 +02:00
Behdad Esfahbod 0b7e4d9f20 [ft] FT_Get_Advance() for advance-width callbacks
Using graphite2's comparerenderer suggests that this makes hb-ft 15
times faster.  No caching layer needed anymore.
2011-08-15 20:41:59 +02:00
Behdad Esfahbod 4e9ff1dd6e Pre-allocate buffers when adding string
We do a conservative estimate of the number of characters, but still,
this limits the number of buffer reallocs to a small constant.
2011-08-15 16:21:22 +02:00
Behdad Esfahbod 553bc3de82 Minor 2011-08-15 16:21:06 +02:00
Behdad Esfahbod 254142bb67 [ft] FT_Select_Charmap() when we create face 2011-08-15 16:15:44 +02:00
Behdad Esfahbod a4cbd03dd1 Apply 'locl' with 'ccmp' in Arabic shaper
According to Peter Constable this is indeed what Uniscribe has been
doing for years.

Mozilla Bug 667166 - wrong shape of letter when it comes at the end of
word in the arabic version of Firefox 5.0
2011-08-15 09:52:05 +02:00
Behdad Esfahbod c214cff55c Start adding gobject-introspection support 2011-08-14 15:17:51 +02:00
Behdad Esfahbod 9527fb200f Fix missing return 2011-08-13 19:03:48 +02:00
Behdad Esfahbod 77a3287695 Minor 2011-08-13 17:16:45 +02:00
Behdad Esfahbod d6660356dd Add uniscribe font getters 2011-08-10 22:08:36 +02:00
Behdad Esfahbod 01ec13a1d9 Implement hb_ft_font_get_face 2011-08-10 22:00:35 +02:00
Behdad Esfahbod 0501573ded Fix const correctness in the API 2011-08-10 16:25:56 +02:00
Behdad Esfahbod 511a136f0c Move hb-view into util/ 2011-08-09 15:03:00 +02:00
Behdad Esfahbod d753ac78da [uniscribe] Remove zerowidth glyphs from output 2011-08-09 14:03:12 +02:00
Behdad Esfahbod ddd247b0c5 Minor 2011-08-09 11:44:42 +02:00
Behdad Esfahbod 1b8196c986 Add fallback shaper 2011-08-09 11:37:46 +02:00
Behdad Esfahbod 13a601fe99 [FT] Don't make font immutable 2011-08-09 11:36:54 +02:00
Behdad Esfahbod 38b2118724 [API] Add hb_ft_font_set_funcs(), remove hb_ft_get_font_funcs()
Remove hb_ft_get_font_funcs() as it cannot be used by the user anyway.

Add hb_ft_font_set_funcs().  Which will make the font internally use
FreeType.  That is, no need for the font to have created using the
hb-ft API.  Just create using hb_face_create()/hb_font_create() and
then call this on the font (after having set font scale).  This
internally creates an FT_Face and attached to the font.
2011-08-09 11:10:32 +02:00
Behdad Esfahbod 255f176fdc Minor 2011-08-09 08:35:07 +02:00
Behdad Esfahbod a9057eb3f3 [uniscribe] Unbreak 2011-08-09 00:47:55 +02:00
Behdad Esfahbod 33ccc77902 [API] Make set_user_data() functions take a replace parameter
We need this to set data on objects safely without worrying that some
other thread unsets it by setting it at the same time.
2011-08-09 00:43:24 +02:00
Behdad Esfahbod 944b2ba1ce [buffer] Make API take signed int length
Since we already switched to accepting -1 as 'zero-terminated'.
2011-08-09 00:23:58 +02:00
Behdad Esfahbod de1e1cf9bc [FT] Adapt to new face API 2011-08-09 00:19:38 +02:00
Behdad Esfahbod bf3eef540f [uniscribe] Cleanup backend 2011-08-09 00:14:22 +02:00
Behdad Esfahbod 3897335c76 [API] Sort out get_blob API
hb_face_get_blob() renamed to hb_face_reference_blob(), returns a
reference now.

hb_face_[sg]et_index() added.

hb_face_set_upem() added.
2011-08-08 23:37:41 +02:00
Behdad Esfahbod e715784be3 Rename get_table to reference_table in all API 2011-08-08 21:43:06 +02:00
Behdad Esfahbod 670c873499 Fix shaper ordering logic 2011-08-08 21:36:24 +02:00
Behdad Esfahbod cc797e0d53 Minor 2011-08-08 03:50:38 +02:00
Behdad Esfahbod 826e22732d [uniscribe] Fix blob lifecycles 2011-08-07 03:53:42 -04:00
Behdad Esfahbod ff199ba356 Fix shaper_list manipulation, aaaaaaaaaaaaargh 2011-08-07 03:43:46 -04:00
Behdad Esfahbod 577326b86a [uniscribe] Fix cluster calculation 2011-08-07 01:04:40 -04:00
Behdad Esfahbod f6d83b2dcf Minor 2011-08-07 00:59:58 -04:00
Behdad Esfahbod 2eb474afb4 [uniscribe] Fix shaper
It's kinda working finally!
2011-08-07 00:59:38 -04:00
Behdad Esfahbod f22e661147 [glib] Protect against invalid characters 2011-08-07 00:59:12 -04:00
Behdad Esfahbod 144cd49a0e [buffer] Accept -1 for text_length and item_length
A -1 text_length means: zero-terminated string.
A -1 item_length means: to the end of string.
2011-08-07 00:51:50 -04:00
Behdad Esfahbod e9c71fab30 Fix name-table lookup
Oops!
2011-08-07 00:01:04 -04:00
Behdad Esfahbod 3fd2b5bece [uniscribe] Use font size directly 2011-08-06 22:59:54 -04:00
Behdad Esfahbod 892eb2e462 [uniscribe] Make font selection work
Not tested yet.
2011-08-06 22:32:07 -04:00
Behdad Esfahbod b492299eb3 Start implementing the 'name' table 2011-08-05 20:34:50 -04:00
Behdad Esfahbod 4538efacca Skip tests by returning 77
automake test runner understands this.
2011-08-05 20:11:06 -04:00
Behdad Esfahbod 54eb65538d Fix check on OS X sh 2011-08-05 20:09:25 -04:00
Behdad Esfahbod 9da554504e Add hb_shape_list_shapers() 2011-08-05 19:59:02 -04:00
Behdad Esfahbod d7bf473ef2 Minor 2011-08-05 19:59:02 -04:00
Behdad Esfahbod c62a8f10f3 Free all static memory upon exit 2011-08-05 19:59:02 -04:00
Behdad Esfahbod c4d63ef744 Fix env parsing code
Also changed the separator to comma instead of colon.
2011-08-05 19:59:02 -04:00
Behdad Esfahbod 3931837beb Change hb_shape() API back to what it was, add hb_shape_full()
I disliked changing hb_shape() API, and disliked the fact that it was
returning a bool now.  So, reverted.  Added new API for the extra
functionality.
2011-08-05 19:59:02 -04:00
Behdad Esfahbod 3ca6c4ecc2 Change hb_shape() API back to what it was, add hb_shape_full()
I disliked changing hb_shape() API, and disliked the fact that it was
returning a bool now.  So, reverted.  Added new API for the extra
functionality.
2011-08-05 17:22:19 -04:00
Behdad Esfahbod 02aeca985b [API] Changes to main shape API
hb_shape() now accepts a shaper_options and a shaper_list argument.
Both can be set to NULL to emulate previous API.  And in most situations
they are expected to be set to NULL.

hb_shape() also returns a boolean for now.  If shaper_list is NULL, the
return value can be ignored.

shaper_options is ignored for now, but otherwise it should be a
NULL-terminated list of strings.

shaper_list is a NULL-terminated list of strings.  Currently recognized
strings are "ot" for native OpenType Layout implementation, "uniscribe"
for the Uniscribe backend, and "fallback" for the non-complex backend
(that will be implemented shortly).  The fallback backend never fails.

The env var HB_SHAPER_LIST is also parsed and honored.  It's a
colon-separated list of shaper names.  The fallback shaper is invoked if
none of the env-listed shapers succeed.

New API hb_buffer_guess_properties() added.
2011-08-04 22:38:09 -04:00
Behdad Esfahbod 57692adf12 Make test.cc do something more useful
Hardcoded to the uniscribe backend for now.  Will fix soon.
2011-08-04 20:49:16 -04:00
Behdad Esfahbod c605bbbb6d Remove C++ guards from source files
Where causing issues for people with MSVC.
2011-08-04 20:00:53 -04:00
Behdad Esfahbod 8336186a52 Zero map objects 2011-08-04 19:49:05 -04:00
Behdad Esfahbod c747f509bc More out-of-tree build fixes 2011-08-04 01:51:30 -04:00
Behdad Esfahbod 20dde61016 Minor 2011-08-04 01:07:33 -04:00
Behdad Esfahbod 44b4f50d05 Fix typo 2011-08-04 00:52:20 -04:00
Behdad Esfahbod 0fbb2dc831 Add draft experimental Uniscribe backend
Not complete yet, font selection doesn't work.  But hey it shapes!

This is not supposed to be a production backend, more like a testing
backend.
2011-08-03 19:55:04 -04:00
Behdad Esfahbod e62df43649 Add internal hb_buffer_t::get_scratch_buffer() 2011-08-03 17:38:54 -04:00
Behdad Esfahbod bf8c57ba74 [API] Add hb_face_get_blob()
Need to think more about it.
2011-08-03 17:38:04 -04:00
Behdad Esfahbod 2118fdb9f5 Fix fallback shaping
Broke it a few commits ago.
2011-08-02 14:06:51 -04:00
Behdad Esfahbod f60271c0c2 Add mingw32 support
With these changes, on Ubuntu I can do:

./configure --host=i586-mingw32msvc  && make
2011-08-02 10:00:55 -04:00
Behdad Esfahbod f5414cf0a2 Use missing script for calling ragel 2011-08-01 16:34:16 -04:00
Behdad Esfahbod a91c58bf98 [Indic] Disable CJCT-disabling logic
Read comment.
2011-08-01 16:30:11 -04:00
Behdad Esfahbod 5e72071062 [Indic] Stop looking for base upon seeing joiners
Not sure where this is documented, but I remember this being the desired
behavior.

test-shape-complex failures are down from 48 to 46.  Meh.
2011-07-31 17:52:44 -04:00
Behdad Esfahbod 281683995a Cosmetic 2011-07-31 16:00:35 -04:00
Behdad Esfahbod 6b37bc8084 [Indic] Fix ZWJ/ZWNJ application
Not quite working just yet.  False alarm re 10 failures.  It was
crashing.  Ouch!  Back to 48 failures.
2011-07-31 15:57:00 -04:00
Behdad Esfahbod e7be057024 [Indic] Add Final Reordering rules into comments
Not applied yet.
2011-07-31 15:22:46 -04:00
Behdad Esfahbod cfd4382ec1 [Indic] Handle Reph when determining base consonant 2011-07-31 15:08:40 -04:00
Behdad Esfahbod 97158392a5 [Indic] Ra is a consonant too 2011-07-31 15:01:28 -04:00
Behdad Esfahbod 0d8f8a177c [Indic] Fix reph inhibition logic 2011-07-31 14:57:59 -04:00
Behdad Esfahbod 9da0487cd4 [Indic] Support ZWJ/ZWNJ
Brings test-shape-complex failures down from 52 to 10!

I hereby declare harfbuzz-ng supporting Indic!
2011-07-31 13:46:44 -04:00
Behdad Esfahbod 9ee27a928a [Indic] Suppress reph formation upon joiners 2011-07-31 11:10:14 -04:00
Behdad Esfahbod 8354e004e5 Un-Ra U+09F1. According to the test suite this is correct.
But I'm not sure...  Down from 54 failures to 52.
2011-07-31 02:24:51 -04:00
Behdad Esfahbod ba7e85c104 Cosmetic 2011-07-30 21:11:53 -04:00
Behdad Esfahbod f5bc2725cb [Indic] For old-style Indic tables, move Halant around
In old-style Indic OT standards, the post-base Halants are moved after
their base.  Emulate that by moving first post-base Halant to
post-last-consonant.

Brings test-shape-complex failures down from 88 to 54.  Getting there!
2011-07-30 21:08:10 -04:00
Behdad Esfahbod c47a31fb47 [OT] Save chosen script tag 2011-07-30 20:57:01 -04:00
Behdad Esfahbod fd06bf5611 [Indic] Handle initial Ra+Halant in scripts that support Reph
Brings test-shape-complex failures down from 104 to 92.  Way to go!
2011-07-30 20:14:44 -04:00
Behdad Esfahbod ee58f3bc75 Minor 2011-07-30 19:15:53 -04:00
Behdad Esfahbod 352372ae5e [Indic] Categorize Ra in scripts that have Reph
Is the categorization correct?  I don't know.
2011-07-30 19:04:02 -04:00
Behdad Esfahbod 45d6f29f15 [Indic] Reorder matras
Number of failing shape-complex tests goes from 125 down to 94.

Next: Add Ra handling and it's fair to say we kinda support Indic :).
2011-07-30 14:44:30 -04:00
Behdad Esfahbod 911bf32aca Bug 39686 - Add '-no-undefined' to libharfbuzz LDFLAGS 2011-07-30 11:16:00 -04:00
Behdad Esfahbod 8f0b64fb69 Minor 2011-07-29 17:02:48 -04:00
Behdad Esfahbod 743807a3ce [Indic] Apply Indic features
Find the base consonant and apply basic Indic features accordingly.
Nothing complete, but does something for now.  Specifically:
no Ra handling right now, and no ZWJ/ZWNJ.

Number of failing shape-complex tests goes from 174 down to 125.

Next: reorder matras.
2011-07-29 16:46:09 -04:00
Behdad Esfahbod 9f9bcceca6 Register buffer vars in Indic shaper 2011-07-28 17:07:50 -04:00
Behdad Esfahbod be09bf6b79 Oops. This should have gone into the previous commit 2011-07-28 17:03:43 -04:00
Behdad Esfahbod b65c06025d Formalize buffer var allocations 2011-07-28 16:49:29 -04:00
Behdad Esfahbod a9ad3d3460 Move more code around
Buffer var allocation coming into shape
2011-07-28 15:42:18 -04:00
Behdad Esfahbod cc06c243d8 Streamline debugging infrastructure even more 2011-07-25 20:34:17 -04:00
Behdad Esfahbod 43ff203d8e Use variadic macros for debugging
Looks *so* much nicer!
2011-07-25 17:35:24 -04:00
Behdad Esfahbod decd4e3e16 Add sugar syntax for debug messages
Buffer debugging coming soon.
2011-07-25 16:47:02 -04:00
Behdad Esfahbod 3a81b1db89 Minor, fix leak from my previous refactorings 2011-07-25 16:30:32 -04:00
Behdad Esfahbod f4a579bc42 Add internal API for buffer var allocation 2011-07-25 16:26:05 -04:00
Behdad Esfahbod 651e8dd79e Start cleaning up buffer var allocation
I've messed up a lot of stuff recently, different parts of the
shaping process are stumbling on eachother's toes because
manually tracking what's in which buffer var is hard.  I'm
going to add some internal API to track those such that mistakes
are discovered as soon as they are introduced.
2011-07-25 14:54:08 -04:00
Behdad Esfahbod c86f932015 Move code around 2011-07-25 00:44:50 -04:00
Behdad Esfahbod 18c42850c9 Shrink space used for ligature ids
This frees 16bits in the glyph_info struct during the ot_layout process.
We can use the freed space in the shapers now.
2011-07-25 00:43:39 -04:00
Behdad Esfahbod d8787493c9 Minor 2011-07-25 00:36:01 -04:00
Behdad Esfahbod c311d85208 Keep Unicode props updated as we go so we avoid a scan later 2011-07-23 23:43:54 -04:00
Behdad Esfahbod 5389ff4dbc Implement the Unicode Canonical Composition algorithm
Fallback normalization is complete and working now!
2011-07-22 20:22:49 -04:00
Behdad Esfahbod dcdc51cdc0 Handle singleton decompositions 2011-07-22 17:14:46 -04:00
Behdad Esfahbod 34c22f8168 Implement Unicode Canonical Reordering Algorithm 2011-07-22 17:04:20 -04:00
Behdad Esfahbod 4ff0d2d9df Decomposition works now! 2011-07-22 16:15:32 -04:00
Behdad Esfahbod 468e9cb25c Move buffer methods into the object 2011-07-22 14:49:14 -04:00
Behdad Esfahbod 45412523dc More normalization kick 2011-07-22 11:07:05 -04:00
Behdad Esfahbod 63c0ef4a07 Fix decompose() implementations to work with non-starter non-composables
Add tests.
2011-07-21 20:58:42 -04:00
Behdad Esfahbod 5d90a342e3 Document normalization design 2011-07-21 15:25:01 -04:00
Behdad Esfahbod 02cdf743c2 Add prefer_decomposed() complex-shaper callback
This allows the Indic shaper to request decomposed characters.  This will
handle split matra for free.  Other shapers prefer precomposed
characters.
2011-07-21 12:23:12 -04:00
Behdad Esfahbod d6b9c6d200 More kicking 2011-07-21 12:16:45 -04:00
Behdad Esfahbod 192445aef2 Remove intermittent_glyph()
Lets not worry about performance for now...
2011-07-21 12:13:04 -04:00
Behdad Esfahbod d63adfc7d0 No need to handle variation-selectors seperately, they are GC=Mn 2011-07-21 11:48:57 -04:00
Behdad Esfahbod aa7264123a Only form clusters if we are reversing
This produces more accurate cluster mappings.  Cluster mappings are
minimal now.  Combining marks get their own cluster value most of
the time.
2011-07-21 11:34:59 -04:00
Behdad Esfahbod 5c6f5982d7 Towards normalization 2011-07-21 11:31:08 -04:00
Behdad Esfahbod cf7f43ec33 Remove stale comment 2011-07-21 01:12:26 -04:00
Behdad Esfahbod 54d1a0d2b2 Form clusters before ensuring native direciton
This is essential as ensure_native_direction uses cluster info that
is set by form_clusters().
2011-07-21 01:11:09 -04:00
Behdad Esfahbod 9111b21ef9 Add _hb_buffer_output_glyph() and _hb_buffer_skip_glyph() 2011-07-21 00:59:15 -04:00
Behdad Esfahbod 655586fe5e Towards normalization 2011-07-21 00:52:42 -04:00
Behdad Esfahbod 49741c8633 Include variation-selectors in cluster calculation 2011-07-21 00:35:37 -04:00
Behdad Esfahbod dd89d958c1 Fix cluster calculation for non-LTR text 2011-07-21 00:28:57 -04:00
Behdad Esfahbod 4a68684654 When forming clusters, participate all mark types 2011-07-21 00:14:01 -04:00
Behdad Esfahbod 5157e12a55 Rename HB_UNICODE_GENERAL_CATEGORY_COMBINING_MARK to HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK
Spacing_Mark is the current Unicode long-name for this property value.
The previous name was wrongly carried from glib.
2011-07-21 00:12:33 -04:00
Behdad Esfahbod 7b08b0a7f2 Minor 2011-07-20 23:59:07 -04:00
Behdad Esfahbod 498e1a9be6 [icu] Implement compose()/decompose() 2011-07-20 23:19:49 -04:00