Bug 1045139 - The Arabic text with "MS Sans Serif" font is rendered bad
https://bugzilla.mozilla.org/show_bug.cgi?id=1045139
This is only enabled on Windows platforms, and requires support from
Uniscribe to work. But for clients that do hook up to Uniscribe, this
fixes shaping of Windows-1256-encoded bitmap fonts like "MS Sans Serif".
The code and table together have just less than a 1kb footprint when
enabled.
UNTESTED. I might even have broken regular Arabic fallback shaping.
Not exhaustively tested, but I think I got the intended logic
right.
The logic can perhaps be simplified. Maybe we should disabled
normalization with this shaper. Then again, for now focusing on
correctness.
They've been disabled for a while and no one cared. We're past
the point to need them for testing, and if we ever need to
resurrect them again, well, they're in git graveyard somewhere.
Initial setup of gtk-doc. Straight forward setup following the gtk-doc
instructions. Ignore some troublesome types in src/hb-gobject.h. To
build use "./autogen.sh --enable-gtk-doc" then "make". Docs are in
harfbuzz/docs/reference/html/index.html.
This reverts commit fab7a71f11.
Conflicts:
src/hb-ot-shape-complex-indic-machine.hh
Keeping that generated file in-tree causes problems with processes like
tinderbox that automatically fetch and build harfbuzz. It's harder to
bootstrap harfbuzz now (as was previously), but I'm willing to give this
another chance and see how it goes.
API additions:
hb_segment_properties_t
HB_SEGMENT_PROPERTIES_DEFAULT
hb_segment_properties_equal()
hb_segment_properties_hash()
hb_buffer_set_segment_properties()
hb_buffer_get_segment_properties()
hb_ot_layout_glyph_class_t
hb_shape_plan_t
hb_shape_plan_create()
hb_shape_plan_create_cached()
hb_shape_plan_get_empty()
hb_shape_plan_reference()
hb_shape_plan_destroy()
hb_shape_plan_set_user_data()
hb_shape_plan_get_user_data()
hb_shape_plan_execute()
hb_ot_shape_plan_collect_lookups()
API changes:
Rename hb_ot_layout_feature_get_lookup_indexes() to
hb_ot_layout_feature_get_lookups().
New header file:
hb-shape-plan.h
And a bunch of prototyped but not implemented stuff. Coming soon.
(Tests fail because of the prototypes right now.)
I don't expect ragel to be creating too much noise in its generated
output, and including this in-tree helps users right now. We can
revisit this later if it proved to be too much trouble.
Apparently even that doesn't make check-internal-symbols.sh happy with
mingw32. Going to disable that for DLLs again, but hopefully the
export-file is doing *something*.
Does not attempt to handle clusters in a Uniscribe- or HarfBuzz-compatible way;
just returns the original string indexes that CT maintains. These may even be
out-of-order in the case of reordrant glyphs.
Also remove shaper_options argument to hb_shape_full(). That was
unused and for "future". Let it go.
More shaper API coming in preparation for plan/planned API.
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.
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.
Nothing functional in there yet.
So far, we're parsing IndicSyllabicCategory.txt and IndicMatraCategory.txt
fils from Unicode Character Database and store them in an array to be used
by the shaper. Also hooked up the shaper, but it does not do anything
right now.
2007-10-11 Behdad Esfahbod <behdad@gnome.org>
* pango/opentype/*: Mark internal symbols as HB_INTERNAL and
define that to static in harfbuzz.c.
* pango/opentype/harfbuzz-buffer-internal.h: New file.
2007-10-11 Behdad Esfahbod <behdad@gnome.org>
* pango/opentype/Makefile.am: Build harfbuzz.c instead of individual
source files, to let compiler go wild with optimizations!
2007-10-11 Behdad Esfahbod <behdad@gnome.org>
* pango/opentype/Makefile.am: Don't include harfbuzz-dump.[ch] in
libharfbuzz.a. Those are just used by the harfbuzz-dump tool.
2007-04-30 Behdad Esfahbod <behdad@gnome.org>
* pango/opentype/Makefile.am: Link freetype to harfbuzz-dump, for
those systems that don't track dependencies automatically.
2006-06-22 Behdad Esfahbod <behdad@gnome.org>
Bug 345600 – cvs build error in pango/opentype/Makefile
* pango/opentype/Makefile.am: Rename variable SOURCES to MAINSOURCES.
Some automake versions seem to use it or something.
2006-03-31 Behdad Esfahbod <behdad@gnome.org>
Convert pango/opentype to the new project called HarfBuzz.
* pango/opentype/*: Restructured.
* pango/pango-ot-*: Updated to use HarfBuzz symbol names.
2006-01-25 Behdad Esfahbod <behdad@gnome.org>
* configure.in: If major.minor of required and available glib versions
are the same, add -DG_DISABLE_DEPRECATED to GLIB_CFLAGS. (bug #328617)
* */Makefile.am: Remove hardcoded -DG_DISABLE_DEPRECATED.
2005-07-22 Owen Taylor <otaylor@redhat.com>
Patch from David Turner. Review and testing by Behdad Esfahbod
* pango/opentype/ftglue.[ch] Makefile.am: Glue layer that provides
implementation of the internal functions that the opentype code
expects in terms of publically exported FreeType API.
* pango/opentype/ftxgdef.c pango/opentype/ftxgpos.c
pango/opentype/ftxgsub.c pango/opentype/ftxopen.c
pango/opentype/otlbuffer.c pango/opentype/pango-ot-info.c
pango/opentype/pango-ot-ruleset.c: Remove includes of
internal headers. Small changes to work with ftglue.[ch]
* pango/opentype/fterrcompat.h: Remove: no longer needed.
* pango/opentype/ftxgpos.c: Use FT_IS_SFNT(face) rather
than poking at FT_MODULE_CLASS (face->driver)->module_name.
* pango/opentype/ftxopen.c (Free_FeatureList): Free
fl->ApplyOrder. (Found by Behdad)
2005-04-12 Tor Lillqvist <tml@novell.com>
* pango/opentype/Makefile.am: Rename LDADDS to
libpango_ot_la_LIBADD to actually make libpango-ot.la link with
it.
* pango/pangowin32.def: Rename get_scale_factor to
get_metrics_factor here, too. (#300222, Ivan Wong)
Sun Feb 29 09:25:13 2004 Owen Taylor <otaylor@redhat.com>
Rework opentype interfaces and other changes to make GPOS
work for Arabic. (Most of #117282, #121060)
* pango/opentype/otlbuffer.[ch]: OTL_Buffer that
acts as a replacement for the separate GSUB and
GPOS string structures and hides many of the internal
details.
* pango/opentype/ftxgsub.[ch] pango/opentype/ftxgpos.[ch]:
Adapt to OTL_Buffer.
* pango/opentype/ftxgpos.c: Redo handling of cursive
chains so that it actually works.
* pango/pango-ot.h pango/opentype/pango-ot-buffer.c:
Pango wrapper around OTL_Buffer.
* pango/pango-ot.h pango/pango-ot-ruleset.c pango/pango-ot-buffer.c:
Split pango_ot_ruleset_shape() into pango_ot_ruleset_substitute(),
pango_ot_ruleset_position(), make them act on
PangoOTBuffer, add a separate pango_ot_buffer_output()
which does the default positioning and writes to a
PangoGlyphString.
* modules/arabic/arabic-fc.c modules/indic/indic-fc.c
modules/indic/mprefixups.[ch]: Adapt to new OpenType
interfaces; add GPOS features for Arabic.
* pango/opentype/pango-ot-info.c: Don't derive class information
from Unicode properties for Arabic presentation forms,
let the shaping process derive the properties.
2003-03-11 James Henstridge <james@daa.com.au>
* autogen.sh: make similar changes to the ones on glib head (call
gtk-docize, etc).
* configure.in: move some calculations into M4 macros, rather than
calculating them when configure runs.
Use AC_HELP_STRING where appropriate.
Replace gtk-doc checks with a call to GTK_DOC_CHECK.
Replace AC_OUTPUT_COMMANDS() call with a number of calls to
AC_CONFIG_COMMANDS (once per created file).
Get rid of the "chmod +x pango-config" bit, because there is no
pango-config anymore.
* Makefile.am: get rid of custom distcheck rule, and set
DISTCHECK_CONFIGURE_FLAGS, which is equivalent.
Use += to select which .pc files to install.
* pango/Makefile.am: Add rules to rebuild module-defs* files, and
remove them on clean.
Reorder so that rules related to each individual library are next
to each other.
Use BUILT_SOURCES for built sources.
* pango/opentype/Makefile.am: don't use STRIP_BEGIN/STRIP_END.
* modules/*/Makefile.am: simplify module makefiles through use of
+=, and regularise them a bit (fixed a few bugs in the process).
* docs/Makefile.am: remove common rules, and instead include
gtk-doc.make.
* examples/Makefile.am: add pango.modules to CLEANFILES.
* tests/Makefile.am: remove temporary files on clean.
Mon Feb 17 13:06:39 2003 Owen Taylor <otaylor@redhat.com>
* configure.in **/Makefile.am: Add an --enable-debug
configure argument defaulting to 'yes' for unstable
releases and 'minimum' for stable releases.
For minimum, -DG_DISABLE_CAST_CHECKS.
* pango/pangofc-fontmap.cI pango/pangoft2-fontmap.c
pango/pangoxft-fontmap.c: Add caching of fontsets
(#104495, initial patch and review by Soeren Sandmann)
* pango/pangofc-fontmap.cI pango/pangoft2-fontmap.c
pango/pangoxft-fontmap.c pango/pangoft2-private.h
pango/pangoxft-private.h: Remove cache of recently freed
fonts; not necessary now that we cache fontsets.
* pango/pangofc-fontmap.cI (pango_fc_pattern_set_free):
Rename from pango_fc_font_set_free to reflect
what it actually does.
* pango/pangofc-fontmap.cI pango/pangoft-fontmap.c
pango/pangoxft-fontmap.c: Combine clear-the-cache
functions; we didn't need separate clear-the-font-cache
and clear-the-pattern-cache functions.