summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBehdad Esfahbod <behdad@behdad.org>2009-07-25 19:08:41 -0400
committerBehdad Esfahbod <behdad@behdad.org>2009-07-25 19:08:41 -0400
commita1fb36307d0e7fe9f1b282da831ec7c551f37296 (patch)
treeaa5ece7c05042462c688498aa560f7860a7c25e2
parentc939f6aff405ca7b10b1f1538f46148bff719fcb (diff)
parent72800869fb784189bac1066265d95a1226bcf212 (diff)
downloadpango-a1fb36307d0e7fe9f1b282da831ec7c551f37296.tar.gz
Merge branch 'master' into harfbuzz-ng
-rw-r--r--NEWS24
-rw-r--r--configure.in12
-rw-r--r--docs/pango-docs.sgml6
-rw-r--r--docs/pango-sections.txt1
-rw-r--r--docs/tmpl/vertical.sgml12
-rw-r--r--pango-view/test-mixed.markup2
-rw-r--r--pango-view/test-mixed.txt2
-rw-r--r--pango/Makefile.am70
-rw-r--r--pango/break.c3
-rw-r--r--pango/ellipsize.c5
-rw-r--r--pango/glyphstring.c6
-rw-r--r--pango/pango-context.c101
-rw-r--r--pango/pango-engine.c2
-rw-r--r--pango/pango-glyph-item.c8
-rw-r--r--pango/pango-gravity.c58
-rw-r--r--pango/pango-gravity.h5
-rw-r--r--pango/pango-impl-utils.h27
-rw-r--r--pango/pango-language-sample-table.h2
-rw-r--r--pango/pango-layout.c18
-rw-r--r--pango/pango-utils.c4
-rw-r--r--pango/pango.def1
-rw-r--r--pango/pangofc-font.c20
-rw-r--r--pango/pangofc-fontmap.c9
-rw-r--r--pango/pangox.def35
-rw-r--r--pango/pangox.rc.in30
-rw-r--r--pango/pangoxft.def24
-rw-r--r--pango/pangoxft.rc.in30
27 files changed, 426 insertions, 91 deletions
diff --git a/NEWS b/NEWS
index 2672a484..006e813f 100644
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,27 @@
+Overview of changes between 1.24.4 and 1.24.5
+=============================================
+- Build introspection again
+- Misc bug fixes
+ Bug 589133 – Firefox 3.5 complains about invalid weak references
+ Bug 585806 – crash during pango_fc_font_map_shutdown
+ Bug 588678 – pango crash: install a new theme from
+
+Overview of changes between 1.24.3 and 1.24.4
+=============================================
+- Misc bug fixes
+ Bug 586814 – Crashes related to fontmap destruction after upgrade
+
+Overview of changes between 1.24.2 and 1.24.3
+=============================================
+- Fix build with new automake
+- Misc bug fixes
+ Bug 585337 – Fails to install: install: will not overwrite
+ just-created
+ Bug 585164 – 'man preload' shows man page for pango-view
+ Bug 584328 – Persian sample text is not good
+ Bug 583250 – pango_font_metrics_get_approximate_char_width is
+ wrong when LANG=fa_IR
+
Overview of changes between 1.24.1 and 1.24.2
=============================================
- Misc bug fixes
diff --git a/configure.in b/configure.in
index 056dd146..5c1b2838 100644
--- a/configure.in
+++ b/configure.in
@@ -21,15 +21,15 @@ dnl
dnl The triplet
m4_define([pango_version_major], [1])
-m4_define([pango_version_minor], [24])
-m4_define([pango_version_micro], [2])
+m4_define([pango_version_minor], [25])
+m4_define([pango_version_micro], [0])
m4_define([pango_version],
[pango_version_major.pango_version_minor.pango_version_micro])
dnl The X.Y in -lpango-X.Y line. This is expected to stay 1.0 until Pango 2.
m4_define([pango_api_version], [1.0])
dnl Number of releases since we've added interfaces
dnl XXX For 1.25 release simply remove it and make it automatic.
-m4_define([pango_interface_age], [2])
+m4_define([pango_interface_age], [0])
dnl Number of releases since we've broken binary compatibility.
m4_define([pango_binary_age],
[m4_eval(100 * pango_version_minor + pango_version_micro)])
@@ -153,7 +153,7 @@ esac
AC_MSG_RESULT([$pango_platform_win32])
AM_CONDITIONAL(PLATFORM_WIN32, test "$pango_platform_win32" = "yes")
-if test "$pango_os_win32" = "yes"; then
+if test "$pango_platform_win32" = "yes"; then
AC_CHECK_TOOL(WINDRES, windres, no)
if test "$WINDRES" = no; then
AC_MSG_ERROR([*** Could not find an implementation of windres in your PATH.])
@@ -675,7 +675,7 @@ dnl ********************************************************
#
LIBRARY_LIBTOOL_OPTIONS="-version-info $VERSION_INFO"
MODULE_LIBTOOL_OPTIONS="-export-dynamic -avoid-version"
-if test "$pango_os_win32" = yes; then
+if test "$pango_platform_win32" = yes; then
# We currently use .def files on Windows
true
LIBRARY_LIBTOOL_OPTIONS="$LIBRARY_LIBTOOL_OPTIONS -no-undefined"
@@ -968,6 +968,8 @@ pango/opentype/Makefile
pango/pango.rc
pango/pangoft2.rc
pango/pangowin32.rc
+pango/pangox.rc
+pango/pangoxft.rc
pango-view/Makefile
modules/Makefile
modules/arabic/Makefile
diff --git a/docs/pango-docs.sgml b/docs/pango-docs.sgml
index 0517ba6e..a3b47612 100644
--- a/docs/pango-docs.sgml
+++ b/docs/pango-docs.sgml
@@ -129,4 +129,10 @@
<index id="index-1.22" role="1.22">
<title>Index of new symbols in 1.22</title>
</index>
+ <index id="index-1.24" role="1.24">
+ <title>Index of new symbols in 1.24</title>
+ </index>
+ <index id="index-1.26" role="1.26">
+ <title>Index of new symbols in 1.26</title>
+ </index>
</book>
diff --git a/docs/pango-sections.txt b/docs/pango-sections.txt
index 0fbdc22e..50abd19a 100644
--- a/docs/pango-sections.txt
+++ b/docs/pango-sections.txt
@@ -1104,6 +1104,7 @@ PangoGravityHint
PANGO_GRAVITY_IS_VERTICAL
pango_gravity_get_for_matrix
pango_gravity_get_for_script
+pango_gravity_get_for_script_and_width
pango_gravity_to_rotation
<SUBSECTION Standard>
PANGO_TYPE_GRAVITY
diff --git a/docs/tmpl/vertical.sgml b/docs/tmpl/vertical.sgml
index 5a75d991..83e33a1e 100644
--- a/docs/tmpl/vertical.sgml
+++ b/docs/tmpl/vertical.sgml
@@ -121,6 +121,18 @@ pango_attr_gravity_hint_new()
@Returns:
+<!-- ##### FUNCTION pango_gravity_get_for_script_and_width ##### -->
+<para>
+
+</para>
+
+@script:
+@wide:
+@base_gravity:
+@hint:
+@Returns:
+
+
<!-- ##### FUNCTION pango_gravity_to_rotation ##### -->
<para>
diff --git a/pango-view/test-mixed.markup b/pango-view/test-mixed.markup
index daac071d..894a1b81 100644
--- a/pango-view/test-mixed.markup
+++ b/pango-view/test-mixed.markup
@@ -5,5 +5,5 @@
Grass is Green. 2006</span>
<span lang="fa">Arabic is گل‌ها قرمزند،‏
چمن سبز. ۲۰۰۶</span>
-<span lang="zh-cn">白日依山尽, 2006</span>
+<span lang="zh-cn">ABC 白日依山尽, 2006</span>
<span lang="ja">「ノートを買った。」</span>
diff --git a/pango-view/test-mixed.txt b/pango-view/test-mixed.txt
index c04a91b5..e23f0314 100644
--- a/pango-view/test-mixed.txt
+++ b/pango-view/test-mixed.txt
@@ -5,5 +5,5 @@ Roses are Red,
Grass is Green. 2006
Arabic is گل‌ها قرمزند،‏
چمن سبز. ۲۰۰۶
-白日依山尽, 2006
+ABC 白日依山尽, 2006
「ノートを買った。」
diff --git a/pango/Makefile.am b/pango/Makefile.am
index a49a18fa..82ca29bd 100644
--- a/pango/Makefile.am
+++ b/pango/Makefile.am
@@ -56,7 +56,7 @@ libpango_1_0_la_DEPENDENCIES = \
libpango_1_0_la_LIBADD += mini-fribidi/libmini-fribidi.la
libpango_1_0_la_DEPENDENCIES += mini-fribidi/libmini-fribidi.la
-if OS_WIN32
+if PLATFORM_WIN32
libpango_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pango.def -Wl,pango-win32-res.o
libpango_1_0_la_DEPENDENCIES += pango-win32-res.o pango.def
endif
@@ -203,6 +203,15 @@ libpangox_1_0_la_LIBADD = \
libpangox_1_0_la_DEPENDENCIES = \
libpango-$(PANGO_API_VERSION).la \
$(INCLUDED_X_MODULES)
+
+if PLATFORM_WIN32
+libpangox_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangox.def -Wl,pangox-win32-res.o
+libpangox_1_0_la_DEPENDENCIES += pangox-win32-res.o pangox.def
+endif
+
+pangox-win32-res.o: pangox.rc
+ $(WINDRES) $< $@
+
libpangox_1_0_la_SOURCES = \
$(pangox_public_sources) \
modules.h \
@@ -279,7 +288,7 @@ libpangoft2_1_0_la_SOURCES = \
pango-ot-tag.c
-if OS_WIN32
+if PLATFORM_WIN32
libpangoft2_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangoft2.def -Wl,pangoft2-win32-res.o
libpangoft2_1_0_la_DEPENDENCIES += pangoft2-win32-res.o pangoft2.def
endif
@@ -314,7 +323,7 @@ lib_LTLIBRARIES += libpangoxft-1.0.la
BUILT_GIRSOURCES += PangoXft-1.0.gir
endif
-pangoxft_headers = pangoxft.h pangoxft-render.h pango-ot.h
+pangoxft_headers = pangoxft.h pangoxft-render.h
libpangoxft_1_0_la_LDFLAGS = $(LIBRARY_LIBTOOL_OPTIONS)
libpangoxft_1_0_la_LIBADD = \
@@ -328,6 +337,14 @@ libpangoxft_1_0_la_LIBADD = \
libpangoxft_1_0_la_DEPENDENCIES = \
libpangoft2-$(PANGO_API_VERSION).la \
libpango-$(PANGO_API_VERSION).la
+
+if PLATFORM_WIN32
+libpangoxft_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangoxft.def -Wl,pangoxft-win32-res.o
+libpangoxft_1_0_la_DEPENDENCIES += pangoxft-win32-res.o pangoxft.def
+endif
+pangoxft-win32-res.o: pangoxft.rc
+ $(WINDRES) $< $@
+
libpangoxft_1_0_la_SOURCES = \
pangoxft-font.c \
pangoxft-fontmap.c \
@@ -381,7 +398,7 @@ libpangocairo_1_0_la_SOURCES = \
pangocairo-private.h
if HAVE_CAIRO_WIN32
-if OS_WIN32
+if PLATFORM_WIN32
libpangocairo_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangocairo.def
libpangocairo_1_0_la_DEPENDENCIES += pangocairo.def
endif
@@ -424,7 +441,7 @@ endif
PangoCairo-1.0.gir: $(libpangocairo_1_0_la_SOURCES)
PangoCairo-1.0.gir: $(pangocairo_headers)
PangoCairo-1.0.gir: libpangocairo-1.0.la
-PangoCairo-1.0.gir: Pango-1.0.gir $(G_IR_SCANNER)
+PangoCairo-1.0.gir: Pango-1.0.gir $(G_IR_SCANNER) Makefile
$(G_IR_SCANNER) -v --namespace PangoCairo --nsversion=1.0 \
--add-include-path=$(srcdir) --add-include-path=. \
--include=GObject-2.0 \
@@ -437,7 +454,6 @@ PangoCairo-1.0.gir: Pango-1.0.gir $(G_IR_SCANNER)
--pkg cairo \
-I$(top_srcdir) \
$(PANGO_CFLAGS) \
- $(libpangocairo_1_0_la_SOURCES) \
$(pangocairo_headers)
# ------------------- libpangowin32 -------------------
@@ -465,7 +481,7 @@ libpangowin32_1_0_la_SOURCES = \
pangowin32-fontcache.c \
pangowin32-fontmap.c
-if OS_WIN32
+if PLATFORM_WIN32
libpangowin32_1_0_la_LDFLAGS += -export-symbols $(srcdir)/pangowin32.def -Wl,pangowin32-win32-res.o
libpangowin32_1_0_la_DEPENDENCIES += pangowin32-win32-res.o pangowin32.def
endif
@@ -484,6 +500,10 @@ if HAVE_FREETYPE
endif
$(INSTALL) $(srcdir)/pangowin32.def $(DESTDIR)$(libdir)/pangowin32-$(PANGO_API_VERSION).def
$(INSTALL) $(srcdir)/pangocairo.def $(DESTDIR)$(libdir)/pangocairo-$(PANGO_API_VERSION).def
+if HAVE_X
+ $(INSTALL) $(srcdir)/pangox.def $(DESTDIR)$(libdir)/pangox-$(PANGO_API_VERSION).def
+ $(INSTALL) $(srcdir)/pangoxft.def $(DESTDIR)$(libdir)/pangoxft-$(PANGO_API_VERSION).def
+endif
uninstall-def-files:
-rm $(DESTDIR)$(libdir)/pango$(PANGO_API_VERSION).def
if HAVE_FREETYPE
@@ -491,6 +511,10 @@ if HAVE_FREETYPE
endif
-rm $(DESTDIR)$(libdir)/pangowin32-$(PANGO_API_VERSION).def
-rm $(DESTDIR)$(libdir)/pangocairo-$(PANGO_API_VERSION).def
+if HAVE_X
+ -rm $(DESTDIR)$(libdir)/pangox-$(PANGO_API_VERSION).def
+ -rm $(DESTDIR)$(libdir)/pangoxft-$(PANGO_API_VERSION).def
+endif
else
install-def-files:
uninstall-def-files:
@@ -539,20 +563,20 @@ pangocairo-$(PANGO_API_VERSION).lib: libpangocairo-$(PANGO_API_VERSION).la $(src
# ------------------- introspection -------------------
-#if HAVE_INTROSPECTION
-#
-#girdir = $(GIRDIR)
-#dist_gir_DATA = $(BUILT_GIRSOURCES)
-#
-#EXTRA_DIST += $(BUILT_GIRSOURCES)
-#
-#typelibsdir = $(TYPELIBDIR)
-#typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
-#
-#%.typelib: %.gir $(G_IR_COMPILER)
-# LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) --includedir=$(srcdir) --includedir=. $(G_IR_COMPILER_OPTS) $< -o $(builddir)/$(@F)
-#
-#endif # HAVE_INTROSPECTION
+if HAVE_INTROSPECTION
+
+girdir = $(GIRDIR)
+dist_gir_DATA = $(BUILT_GIRSOURCES)
+
+EXTRA_DIST += $(BUILT_GIRSOURCES)
+
+typelibsdir = $(TYPELIBDIR)
+typelibs_DATA = $(BUILT_GIRSOURCES:.gir=.typelib)
+
+%.typelib: %.gir $(G_IR_COMPILER)
+ LD_LIBRARY_PATH=$${LD_LIBRARY_PATH:+$$LD_LIBRARY_PATH:}. $(G_IR_COMPILER) --includedir=$(srcdir) --includedir=. $(G_IR_COMPILER_OPTS) $< -o $(builddir)/$(@F)
+
+endif # HAVE_INTROSPECTION
# ------------------- pango-querymodules -------------------
@@ -596,6 +620,10 @@ EXTRA_DIST += \
pangoft2.rc.in \
pangowin32.rc \
pangowin32.rc.in \
+ pangox.rc \
+ pangox.rc.in \
+ pangoxft.rc \
+ pangoxft.rc.in \
check.defs
diff --git a/pango/break.c b/pango/break.c
index c1707456..b17dc606 100644
--- a/pango/break.c
+++ b/pango/break.c
@@ -24,6 +24,7 @@
#include "pango-break.h"
#include "pango-modules.h"
#include "pango-script-private.h"
+#include "pango-impl-utils.h"
#include <string.h>
#define PARAGRAPH_SEPARATOR 0x2029
@@ -1809,7 +1810,7 @@ tailor_segment (const char *range_start,
PangoLogAttr attr_before = log_attrs[0];
analysis->lang_engine = range_engine;
- chars_in_range = g_utf8_strlen (range_start, range_end - range_start);
+ chars_in_range = pango_utf8_strlen (range_start, range_end - range_start);
if (tailor_break (range_start,
diff --git a/pango/ellipsize.c b/pango/ellipsize.c
index 3a39a789..1c8aa241 100644
--- a/pango/ellipsize.c
+++ b/pango/ellipsize.c
@@ -25,6 +25,7 @@
#include "pango-glyph-item.h"
#include "pango-layout-private.h"
#include "pango-engine-private.h"
+#include "pango-impl-utils.h"
typedef struct _EllipsizeState EllipsizeState;
typedef struct _RunInfo RunInfo;
@@ -123,7 +124,7 @@ init_state (EllipsizeState *state,
state->n_runs = g_slist_length (line->runs);
state->run_info = g_new (RunInfo, state->n_runs);
- start_offset = g_utf8_strlen (line->layout->text,
+ start_offset = pango_utf8_strlen (line->layout->text,
line->start_index);
state->total_width = 0;
@@ -636,7 +637,7 @@ fixup_ellipsis_run (EllipsizeState *state)
/* Fix up the item to point to the entire elided text */
item->offset = state->gap_start_iter.run_iter.start_index;
item->length = state->gap_end_iter.run_iter.end_index - item->offset;
- item->num_chars = g_utf8_strlen (state->layout->text + item->offset, item->length);
+ item->num_chars = pango_utf8_strlen (state->layout->text + item->offset, item->length);
/* The level for the item is the minimum level of the elided text */
level = G_MAXINT;
diff --git a/pango/glyphstring.c b/pango/glyphstring.c
index 2e3a9f80..9e7c5f85 100644
--- a/pango/glyphstring.c
+++ b/pango/glyphstring.c
@@ -320,7 +320,9 @@ pango_glyph_string_get_width (PangoGlyphString *glyphs)
* @text: the text corresponding to the glyphs
* @length: the length of @text, in bytes
* @embedding_level: the embedding level of the string
- * @logical_widths: an array whose length is g_utf8_strlen (text, length)
+ * @logical_widths: an array whose length is the number of characters in
+ * text (equal to g_utf8_strlen (text, length) unless
+ * text has NUL bytes)
* to be filled in with the resulting character widths.
*
* Given a #PangoGlyphString resulting from pango_shape() and the corresponding
@@ -337,7 +339,7 @@ pango_glyph_string_get_logical_widths (PangoGlyphString *glyphs,
{
/* Build a PangoGlyphItem so we can use PangoGlyphItemIter.
* This API should have been made to take a PangoGlyphItem... */
- PangoItem item = {0, length, g_utf8_strlen (text, length),
+ PangoItem item = {0, length, pango_utf8_strlen (text, length),
{NULL, NULL, NULL,
embedding_level, PANGO_GRAVITY_AUTO, 0,
PANGO_SCRIPT_UNKNOWN, NULL,
diff --git a/pango/pango-context.c b/pango/pango-context.c
index 0b70f596..6ec0b56f 100644
--- a/pango/pango-context.c
+++ b/pango/pango-context.c
@@ -645,11 +645,27 @@ typedef enum {
SCRIPT_CHANGED = 1 << 1,
LANG_CHANGED = 1 << 2,
FONT_CHANGED = 1 << 3,
- DERIVED_LANG_CHANGED = 1 << 4
+ DERIVED_LANG_CHANGED = 1 << 4,
+ WIDTH_CHANGED = 1 << 5
} ChangedFlags;
+
+
+typedef struct _PangoWidthIter PangoWidthIter;
+
+struct _PangoWidthIter
+{
+ const gchar *text_start;
+ const gchar *text_end;
+ const gchar *start;
+ const gchar *end;
+ gboolean wide;
+};
+
typedef struct _ItemizeState ItemizeState;
+
+
struct _ItemizeState
{
PangoContext *context;
@@ -687,6 +703,8 @@ struct _ItemizeState
const char *script_end;
PangoScript script;
+ PangoWidthIter width_iter;
+
PangoLanguage *derived_lang;
PangoEngineLang *lang_engine;
@@ -777,6 +795,38 @@ update_end (ItemizeState *state)
state->run_end = state->attr_end;
if (state->script_end < state->run_end)
state->run_end = state->script_end;
+ if (state->width_iter.end < state->run_end)
+ state->run_end = state->width_iter.end;
+}
+
+static void
+width_iter_next(PangoWidthIter* iter)
+{
+ iter->start = iter->end;
+
+ if (iter->end < iter->text_end)
+ {
+ gunichar ch = g_utf8_get_char (iter->end);
+ iter->wide = g_unichar_iswide (ch);
+ }
+
+ while (iter->end < iter->text_end)
+ {
+ gunichar ch = g_utf8_get_char (iter->end);
+ if (g_unichar_iswide (ch) != iter->wide)
+ break;
+ iter->end = g_utf8_next_char (iter->end);
+ }
+}
+
+static void
+width_iter_init (PangoWidthIter* iter, const char* text, int length)
+{
+ iter->text_start = text;
+ iter->text_end = text + length;
+ iter->start = iter->end = text;
+
+ width_iter_next (iter);
}
static void
@@ -852,6 +902,9 @@ itemize_state_init (ItemizeState *state,
pango_script_iter_get_range (&state->script_iter, NULL,
&state->script_end, &state->script);
+ /* Initialize the width iterator */
+ width_iter_init (&state->width_iter, text + start_index, length);
+
update_end (state);
if (pango_font_description_get_set_fields (state->font_desc) & PANGO_FONT_MASK_GRAVITY)
@@ -871,7 +924,7 @@ itemize_state_init (ItemizeState *state,
state->fallback_engines = NULL;
state->base_font = NULL;
- state->changed = EMBEDDING_CHANGED | SCRIPT_CHANGED | LANG_CHANGED | FONT_CHANGED;
+ state->changed = EMBEDDING_CHANGED | SCRIPT_CHANGED | LANG_CHANGED | FONT_CHANGED | WIDTH_CHANGED;
}
static gboolean
@@ -902,6 +955,11 @@ itemize_state_next (ItemizeState *state)
&state->script_end, &state->script);
state->changed |= SCRIPT_CHANGED;
}
+ if (state->run_end == state->width_iter.end)
+ {
+ width_iter_next (&state->width_iter);
+ state->changed |= WIDTH_CHANGED;
+ }
update_end (state);
@@ -1231,10 +1289,11 @@ itemize_state_update_for_new_run (ItemizeState *state)
{
/* This block should be moved to update_attr_iterator, but I'm too lazy to
* do it right now */
- if (state->changed & (FONT_CHANGED | SCRIPT_CHANGED))
+ if (state->changed & (FONT_CHANGED | SCRIPT_CHANGED | WIDTH_CHANGED))
{
PangoGravity old_gravity = state->resolved_gravity;
+ /* Font-desc gravity overrides everything */
if (state->font_desc_gravity != PANGO_GRAVITY_AUTO)
{
state->resolved_gravity = state->font_desc_gravity;
@@ -1247,9 +1306,10 @@ itemize_state_update_for_new_run (ItemizeState *state)
if (G_LIKELY (gravity == PANGO_GRAVITY_AUTO))
gravity = state->context->resolved_gravity;
- state->resolved_gravity = pango_gravity_get_for_script (state->script,
- gravity,
- gravity_hint);
+ state->resolved_gravity = pango_gravity_get_for_script_and_width (state->script,
+ state->width_iter.wide,
+ gravity,
+ gravity_hint);
}
if (old_gravity != state->resolved_gravity)
@@ -1575,13 +1635,16 @@ get_base_metrics (PangoFontset *fontset)
static void
update_metrics_from_items (PangoFontMetrics *metrics,
PangoLanguage *language,
+ const char *text,
GList *items)
{
GHashTable *fonts_seen = g_hash_table_new (NULL, NULL);
- int count = 0;
+ PangoGlyphString *glyphs = pango_glyph_string_new ();
GList *l;
+ metrics->approximate_char_width = 0;
+
for (l = items; l; l = l->next)
{
PangoItem *item = l->data;
@@ -1595,29 +1658,17 @@ update_metrics_from_items (PangoFontMetrics *metrics,
/* metrics will already be initialized from the first font in the fontset */
metrics->ascent = MAX (metrics->ascent, raw_metrics->ascent);
metrics->descent = MAX (metrics->descent, raw_metrics->descent);
-
- if (count == 0)
- {
- metrics->approximate_char_width = raw_metrics->approximate_char_width;
- metrics->approximate_digit_width = raw_metrics->approximate_digit_width;
- }
- else
- {
- metrics->approximate_char_width += raw_metrics->approximate_char_width;
- metrics->approximate_digit_width += raw_metrics->approximate_digit_width;
- }
- count++;
pango_font_metrics_unref (raw_metrics);
}
+
+ pango_shape (text + item->offset, item->length, &item->analysis, glyphs);
+ metrics->approximate_char_width += pango_glyph_string_get_width (glyphs);
}
+ pango_glyph_string_free (glyphs);
g_hash_table_destroy (fonts_seen);
- if (count)
- {
- metrics->approximate_char_width /= count;
- metrics->approximate_digit_width /= count;
- }
+ metrics->approximate_char_width /= pango_utf8_strwidth (text);
}
/**
@@ -1671,7 +1722,7 @@ pango_context_get_metrics (PangoContext *context,
sample_str = pango_language_get_sample_string (language);
items = itemize_with_font (context, sample_str, 0, strlen (sample_str), desc);
- update_metrics_from_items (metrics, language, items);
+ update_metrics_from_items (metrics, language, sample_str, items);
g_list_foreach (items, (GFunc)pango_item_free, NULL);
g_list_free (items);
diff --git a/pango/pango-engine.c b/pango/pango-engine.c
index 2891762a..974e2d5a 100644
--- a/pango/pango-engine.c
+++ b/pango/pango-engine.c
@@ -107,7 +107,7 @@ fallback_engine_shape (PangoEngineShape *engine G_GNUC_UNUSED,
int cluster = 0;
int i;
- n_chars = text ? g_utf8_strlen (text, length) : 0;
+ n_chars = text ? pango_utf8_strlen (text, length) : 0;
pango_glyph_string_set_size (glyphs, n_chars);
diff --git a/pango/pango-glyph-item.c b/pango/pango-glyph-item.c
index 9a90a4ca..8d19d94a 100644
--- a/pango/pango-glyph-item.c
+++ b/pango/pango-glyph-item.c
@@ -300,7 +300,7 @@ pango_glyph_item_iter_next_cluster (PangoGlyphItemIter *iter)
if (glyphs->log_clusters[glyph_index] != cluster)
{
iter->end_index = item->offset + glyphs->log_clusters[glyph_index];
- iter->end_char += g_utf8_strlen (iter->text + iter->start_index,
+ iter->end_char += pango_utf8_strlen (iter->text + iter->start_index,
iter->end_index - iter->start_index);
break;
}
@@ -323,7 +323,7 @@ pango_glyph_item_iter_next_cluster (PangoGlyphItemIter *iter)
if (glyphs->log_clusters[glyph_index] != cluster)
{
iter->end_index = item->offset + glyphs->log_clusters[glyph_index];
- iter->end_char += g_utf8_strlen (iter->text + iter->start_index,
+ iter->end_char += pango_utf8_strlen (iter->text + iter->start_index,
iter->end_index - iter->start_index);
break;
}
@@ -388,7 +388,7 @@ pango_glyph_item_iter_prev_cluster (PangoGlyphItemIter *iter)
{
glyph_index++;
iter->start_index = item->offset + glyphs->log_clusters[glyph_index];
- iter->start_char -= g_utf8_strlen (iter->text + iter->start_index,
+ iter->start_char -= pango_utf8_strlen (iter->text + iter->start_index,
iter->end_index - iter->start_index);
break;
}
@@ -412,7 +412,7 @@ pango_glyph_item_iter_prev_cluster (PangoGlyphItemIter *iter)
{
glyph_index--;
iter->start_index = item->offset + glyphs->log_clusters[glyph_index];
- iter->start_char -= g_utf8_strlen (iter->text + iter->start_index,
+ iter->start_char -= pango_utf8_strlen (iter->text + iter->start_index,
iter->end_index - iter->start_index);
break;
}
diff --git a/pango/pango-gravity.c b/pango/pango-gravity.c
index b58ae85d..297199a5 100644
--- a/pango/pango-gravity.c
+++ b/pango/pango-gravity.c
@@ -113,8 +113,9 @@ typedef struct {
guint8 preferred_gravity; /* Preferred context gravity */
/* gboolean */
- guint8 upright; /* Whether glyphs are upright or
- * rotated in foreign context */
+ guint8 wide; /* Whether script is mostly wide.
+ * Wide characters are upright (ie.
+ * not rotated) in foreign context */
} PangoScriptProperties;
#define NONE PANGO_VERTICAL_DIRECTION_NONE
@@ -245,6 +246,7 @@ get_script_properties (PangoScript script)
* pass %PANGO_GRAVITY_AUTO and %PANGO_GRAVITY_HINT_STRONG in.
*
* Return value: resolved gravity suitable to use for a run of text
+ * with @script.
*
* Since: 1.16
*/
@@ -262,17 +264,61 @@ pango_gravity_get_for_script (PangoScript script,
vertical = PANGO_GRAVITY_IS_VERTICAL (base_gravity);
+ return pango_gravity_get_for_script_and_width (script, props.wide,
+ base_gravity, hint);
+}
+
+/**
+ * pango_gravity_get_for_script_and_width:
+ * @script: #PangoScript to query
+ * @wide: %TRUE for wide characters as returned by g_unichar_iswide()
+ * @base_gravity: base gravity of the paragraph
+ * @hint: orientation hint
+ *
+ * Based on the script, East Asian width, base gravity, and hint,
+ * returns actual gravity to use in laying out a single character
+ * or #PangoItem.
+ *
+ * This function is similar to pango_gravity_get_for_script() except
+ * that this function makes a distinction between narrow/half-width and
+ * wide/full-width characters also. Wide/full-width characters always
+ * stand <emph>upright</emph>, that is, they always take the base gravity,
+ * whereas narrow/full-width characters are always rotated in vertical
+ * context.
+ *
+ * If @base_gravity is %PANGO_GRAVITY_AUTO, it is first replaced with the
+ * preferred gravity of @script.
+ *
+ * Return value: resolved gravity suitable to use for a run of text
+ * with @script and @wide.
+ *
+ * Since: 1.26
+ */
+PangoGravity
+pango_gravity_get_for_script_and_width (PangoScript script,
+ gboolean wide,
+ PangoGravity base_gravity,
+ PangoGravityHint hint)
+{
+ PangoScriptProperties props = get_script_properties (script);
+ gboolean vertical;
+
+
+ if (G_UNLIKELY (base_gravity == PANGO_GRAVITY_AUTO))
+ base_gravity = props.preferred_gravity;
+
+ vertical = PANGO_GRAVITY_IS_VERTICAL (base_gravity);
+
/* Everything is designed such that a system with no vertical support
* renders everything correctly horizontally. So, if not in a vertical
* gravity, base and resolved gravities are always the same.
*
- * If the script should be upright all the time, like Chinese and Japenese,
- * any base gravity should resolve to itself.
+ * Wide characters are always upright.
*/
- if (G_LIKELY (!vertical || props.upright))
+ if (G_LIKELY (!vertical || wide))
return base_gravity;
- /* If here, we have a non-upright script in a vertical gravity setting.
+ /* If here, we have a narrow character in a vertical gravity setting.
* Resolve depending on the hint.
*/
switch (hint)
diff --git a/pango/pango-gravity.h b/pango/pango-gravity.h
index 2e42ebd8..d2fa9647 100644
--- a/pango/pango-gravity.h
+++ b/pango/pango-gravity.h
@@ -102,6 +102,11 @@ PangoGravity pango_gravity_get_for_matrix (const PangoMatrix *matrix) G_GNUC_PUR
PangoGravity pango_gravity_get_for_script (PangoScript script,
PangoGravity base_gravity,
PangoGravityHint hint) G_GNUC_CONST;
+PangoGravity pango_gravity_get_for_script_and_width
+ (PangoScript script,
+ gboolean wide,
+ PangoGravity base_gravity,
+ PangoGravityHint hint) G_GNUC_CONST;
G_END_DECLS
diff --git a/pango/pango-impl-utils.h b/pango/pango-impl-utils.h
index a04d4241..3ef3a0c4 100644
--- a/pango/pango-impl-utils.h
+++ b/pango/pango-impl-utils.h
@@ -122,6 +122,33 @@ pango_utf8_strwidth (const gchar *p)
return len;
}
+/* Glib's g_utf8_strlen() is broken and stops at embedded NUL's.
+ * Wrap it here. */
+static G_GNUC_UNUSED glong
+pango_utf8_strlen (const gchar *p, gssize max)
+{
+ glong len = 0;
+ const gchar *start = p;
+ g_return_val_if_fail (p != NULL || max == 0, 0);
+
+ if (max <= 0)
+ return g_utf8_strlen (p, max);
+
+ p = g_utf8_next_char (p);
+ while (p - start < max)
+ {
+ ++len;
+ p = g_utf8_next_char (p);
+ }
+
+ /* only do the last len increment if we got a complete
+ * char (don't count partial chars)
+ */
+ if (p - start <= max)
+ ++len;
+
+ return len;
+}
G_END_DECLS
diff --git a/pango/pango-language-sample-table.h b/pango/pango-language-sample-table.h
index a5f3271b..2cd5e6b9 100644
--- a/pango/pango-language-sample-table.h
+++ b/pango/pango-language-sample-table.h
@@ -183,7 +183,7 @@ LANGUAGE(
LANGUAGE(
fa /* Persian */,
MISC /* Behdad Esfahbod (#548730) */,
- "«الا یا اَیُّها السّاقی! اَدِرْ کَأساً وَ ناوِلْهٰا!» که عشق آسان نمود اوّل، ولی افتاد مشکل‌ها!"
+ "«الا یا اَیُّها السّاقی! اَدِرْ کَأساً وَ ناوِلْها!» که عشق آسان نمود اوّل، ولی افتاد مشکل‌ها!"
)
LANGUAGE(
fi /* Finnish */,
diff --git a/pango/pango-layout.c b/pango/pango-layout.c
index 4326eb47..52ae9851 100644
--- a/pango/pango-layout.c
+++ b/pango/pango-layout.c
@@ -1084,7 +1084,7 @@ pango_layout_set_text (PangoLayout *layout,
/* TODO: Write out the beginning excerpt of text? */
g_warning ("Invalid UTF-8 string passed to pango_layout_set_text()");
- layout->n_chars = g_utf8_strlen (layout->text, -1);
+ layout->n_chars = pango_utf8_strlen (layout->text, -1);
pango_layout_clear_lines (layout);
@@ -1737,7 +1737,7 @@ pango_layout_move_cursor_visually (PangoLayout *layout,
old_index = g_utf8_next_char (layout->text + old_index) - layout->text;
log2vis_map = pango_layout_line_get_log2vis_map (line, strong);
- n_vis = g_utf8_strlen (layout->text + line->start_index, line->length);
+ n_vis = pango_utf8_strlen (layout->text + line->start_index, line->length);
/* Clamp old_index to fit on the line */
if (old_index > (line->start_index + line->length))
@@ -1793,7 +1793,7 @@ pango_layout_move_cursor_visually (PangoLayout *layout,
paragraph_boundary = (line->start_index != old_index);
}
- n_vis = g_utf8_strlen (layout->text + line->start_index, line->length);
+ n_vis = pango_utf8_strlen (layout->text + line->start_index, line->length);
start_offset = g_utf8_pointer_to_offset (layout->text, layout->text + line->start_index);
if (vis_pos == 0 && direction < 0)
@@ -2052,7 +2052,7 @@ pango_layout_line_get_vis2log_map (PangoLayoutLine *line,
int n_chars;
pango_layout_line_get_range (line, &start, &end);
- n_chars = g_utf8_strlen (start, end - start);
+ n_chars = pango_utf8_strlen (start, end - start);
result = g_new (int, n_chars + 1);
@@ -2139,7 +2139,7 @@ pango_layout_line_get_log2vis_map (PangoLayoutLine *line,
int n_chars;
pango_layout_line_get_range (line, &start, &end);
- n_chars = g_utf8_strlen (start, end - start);
+ n_chars = pango_utf8_strlen (start, end - start);
result = g_new0 (int, end - start + 1);
reverse_map = pango_layout_line_get_vis2log_map (line, strong);
@@ -3635,7 +3635,7 @@ get_items_log_attrs (const char *text,
/* Break the paragraph delimiters with the last item */
if (items->next == NULL)
{
- tmp_item.num_chars += g_utf8_strlen (text + index + tmp_item.length, para_delimiter_len);
+ tmp_item.num_chars += pango_utf8_strlen (text + index + tmp_item.length, para_delimiter_len);
tmp_item.length += para_delimiter_len;
}
@@ -3848,7 +3848,7 @@ pango_layout_check_lines (PangoLayout *layout)
state.glyphs = NULL;
state.log_widths = NULL;
- /* for deterministic bug haunting's sake set everything! */
+ /* for deterministic bug hunting's sake set everything! */
state.line_width = -1;
state.remaining_width = -1;
state.log_widths_offset = 0;
@@ -3874,7 +3874,7 @@ pango_layout_check_lines (PangoLayout *layout)
done = TRUE;
if (!done)
- start_offset += g_utf8_strlen (start, (end - start) + delim_len);
+ start_offset += pango_utf8_strlen (start, (end - start) + delim_len);
start = end + delim_len;
}
@@ -5362,7 +5362,7 @@ update_cluster (PangoLayoutIter *iter,
}
cluster_text = iter->layout->text + iter->run->item->offset + cluster_start_index;
- iter->cluster_num_chars = g_utf8_strlen (cluster_text, cluster_length);
+ iter->cluster_num_chars = pango_utf8_strlen (cluster_text, cluster_length);
if (iter->ltr)
iter->index = cluster_text - iter->layout->text;
diff --git a/pango/pango-utils.c b/pango/pango-utils.c
index 9801a305..100dbc7a 100644
--- a/pango/pango-utils.c
+++ b/pango/pango-utils.c
@@ -967,7 +967,7 @@ handle_alias_line (GString *line_buffer,
g_string_free (tmp_buffer2, TRUE);
}
-#ifdef G_OS_WIN32
+#ifdef HAVE_CAIRO_WIN32
static const char *builtin_aliases[] = {
"courier = \"courier new\"",
@@ -1061,7 +1061,7 @@ pango_load_aliases (void)
(GDestroyNotify)alias_free,
NULL);
-#ifdef G_OS_WIN32
+#ifdef HAVE_CAIRO_WIN32
read_builtin_aliases ();
#endif
diff --git a/pango/pango.def b/pango/pango.def
index 39ab42bc..d941ebe8 100644
--- a/pango/pango.def
+++ b/pango/pango.def
@@ -205,6 +205,7 @@ EXPORTS
pango_glyph_string_x_to_index
pango_gravity_get_for_matrix
pango_gravity_get_for_script
+ pango_gravity_get_for_script_and_width
pango_gravity_get_type
pango_gravity_hint_get_type
pango_gravity_to_rotation
diff --git a/pango/pangofc-font.c b/pango/pangofc-font.c
index e5df33d2..8fc5a579 100644
--- a/pango/pangofc-font.c
+++ b/pango/pangofc-font.c
@@ -45,6 +45,7 @@ struct _PangoFcFontPrivate
PangoFcDecoder *decoder;
PangoFcFontKey *key;
PangoFcCmapCache *cmap_cache;
+ gboolean has_weak_pointer; /* have set a weak_pointer from fontmap to us */
};
static gboolean pango_fc_font_real_has_char (PangoFcFont *font,
@@ -140,7 +141,15 @@ pango_fc_font_finalize (GObject *object)
g_slist_free (fcfont->metrics_by_lang);
if (fcfont->fontmap)
- _pango_fc_font_map_remove (PANGO_FC_FONT_MAP (fcfont->fontmap), fcfont);
+ {
+ _pango_fc_font_map_remove (PANGO_FC_FONT_MAP (fcfont->fontmap), fcfont);
+ if (priv->has_weak_pointer)
+ {
+ priv->has_weak_pointer = FALSE;
+ g_object_remove_weak_pointer (G_OBJECT (fcfont->fontmap), (gpointer *) (gpointer) &fcfont->fontmap);
+ }
+ fcfont->fontmap = NULL;
+ }
FcPatternDestroy (fcfont->font_pattern);
pango_font_description_free (fcfont->description);
@@ -220,7 +229,11 @@ pango_fc_font_set_property (GObject *object,
g_return_if_fail (fcfont->fontmap == NULL);
fcfont->fontmap = (PangoFontMap *) fcfontmap;
if (fcfont->fontmap)
- g_object_add_weak_pointer (G_OBJECT (fcfont->fontmap), (gpointer *) (gpointer) &fcfont->fontmap);
+ {
+ PangoFcFontPrivate *priv = fcfont->priv;
+ priv->has_weak_pointer = TRUE;
+ g_object_add_weak_pointer (G_OBJECT (fcfont->fontmap), (gpointer *) (gpointer) &fcfont->fontmap);
+ }
}
goto set_decoder;
@@ -773,9 +786,6 @@ _pango_fc_font_shutdown (PangoFcFont *font)
if (PANGO_FC_FONT_GET_CLASS (font)->shutdown)
PANGO_FC_FONT_GET_CLASS (font)->shutdown (font);
-
- if (font->fontmap)
- _pango_fc_font_map_remove (PANGO_FC_FONT_MAP (font->fontmap), font);
}
/**
diff --git a/pango/pangofc-fontmap.c b/pango/pangofc-fontmap.c
index 4db62159..adbafaa4 100644
--- a/pango/pangofc-fontmap.c
+++ b/pango/pangofc-fontmap.c
@@ -1209,6 +1209,7 @@ pango_fc_font_map_add (PangoFcFontMap *fcfontmap,
}
/* Remove mapping from fcfont->key to fcfont */
+/* Closely related to shutdown_font() */
void
_pango_fc_font_map_remove (PangoFcFontMap *fcfontmap,
PangoFcFont *fcfont)
@@ -1974,16 +1975,14 @@ pango_fc_font_map_create_context (PangoFcFontMap *fcfontmap)
}
static void
-shutdown_font (gpointer key G_GNUC_UNUSED,
+shutdown_font (gpointer key,
PangoFcFont *fcfont,
PangoFcFontMap *fcfontmap)
{
_pango_fc_font_shutdown (fcfont);
- /* While _pango_fc_font_shutdown() tries to call the following
- * function, it's too late as the fontmap weakref has already
- * NULL'ed fcfont->fontmap, so we do it ourselves. */
- _pango_fc_font_map_remove (fcfontmap, fcfont);
+ _pango_fc_font_set_font_key (fcfont, NULL);
+ pango_fc_font_key_free (key);
}
/**
diff --git a/pango/pangox.def b/pango/pangox.def
new file mode 100644
index 00000000..e70ca70c
--- /dev/null
+++ b/pango/pangox.def
@@ -0,0 +1,35 @@
+EXPORTS
+pango_x_apply_ligatures
+pango_x_context_set_funcs
+pango_x_face_get_coverage
+pango_x_face_get_type
+pango_x_face_remove
+pango_x_fallback_shape
+pango_x_family_get_type
+pango_x_find_first_subfont
+pango_x_font_cache_free
+pango_x_font_cache_load
+pango_x_font_cache_new
+pango_x_font_cache_unload
+pango_x_font_get_unknown_glyph
+pango_x_font_map_for_display
+pango_x_font_map_get_font_cache
+pango_x_font_map_get_type
+pango_x_font_new
+pango_x_font_subfont_xlfd
+pango_x_fontmap_atom_from_name
+pango_x_fontmap_cache_add
+pango_x_fontmap_cache_remove
+pango_x_fontmap_get_display
+pango_x_fontmap_name_from_atom
+pango_x_get_context
+pango_x_get_shaper_map
+pango_x_get_unknown_glyph
+pango_x_has_glyph
+pango_x_list_subfonts
+pango_x_load_font
+pango_x_make_matching_xlfd
+pango_x_render
+pango_x_render_layout
+pango_x_render_layout_line
+pango_x_shutdown_display
diff --git a/pango/pangox.rc.in b/pango/pangox.rc.in
new file mode 100644
index 00000000..c259393c
--- /dev/null
+++ b/pango/pangox.rc.in
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+ PRODUCTVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+ FILEFLAGSMASK 0
+ FILEFLAGS 0
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE VFT2_UNKNOWN
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904B0"
+ BEGIN
+ VALUE "CompanyName", "Red Hat Software"
+ VALUE "FileDescription", "Pangox"
+ VALUE "FileVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@.0"
+ VALUE "InternalName", "pangox-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@"
+ VALUE "LegalCopyright", "Copyright 1999 Red Hat Software."
+ VALUE "OriginalFilename", "pangox-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll"
+ VALUE "ProductName", "Pangox"
+ VALUE "ProductVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+ END
diff --git a/pango/pangoxft.def b/pango/pangoxft.def
new file mode 100644
index 00000000..484d83e1
--- /dev/null
+++ b/pango/pangoxft.def
@@ -0,0 +1,24 @@
+EXPORTS
+pango_xft_font_get_display
+pango_xft_font_get_font
+pango_xft_font_get_glyph
+pango_xft_font_get_type
+pango_xft_font_get_unknown_glyph
+pango_xft_font_has_char
+pango_xft_font_lock_face
+pango_xft_font_map_get_type
+pango_xft_font_unlock_face
+pango_xft_get_context
+pango_xft_get_font_map
+pango_xft_picture_render
+pango_xft_render
+pango_xft_render_layout
+pango_xft_render_layout_line
+pango_xft_render_transformed
+pango_xft_renderer_get_type
+pango_xft_renderer_new
+pango_xft_renderer_set_default_color
+pango_xft_renderer_set_draw
+pango_xft_set_default_substitute
+pango_xft_shutdown_display
+pango_xft_substitute_changed
diff --git a/pango/pangoxft.rc.in b/pango/pangoxft.rc.in
new file mode 100644
index 00000000..1f39685b
--- /dev/null
+++ b/pango/pangoxft.rc.in
@@ -0,0 +1,30 @@
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+ PRODUCTVERSION @PANGO_VERSION_MAJOR@,@PANGO_VERSION_MINOR@,@PANGO_VERSION_MICRO@,0
+ FILEFLAGSMASK 0
+ FILEFLAGS 0
+ FILEOS VOS__WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE VFT2_UNKNOWN
+ BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904B0"
+ BEGIN
+ VALUE "CompanyName", "Red Hat Software"
+ VALUE "FileDescription", "Pangoxft"
+ VALUE "FileVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@.0"
+ VALUE "InternalName", "pangoxft-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@"
+ VALUE "LegalCopyright", "Copyright 1999 Red Hat Software."
+ VALUE "OriginalFilename", "pangoxft-@PANGO_API_VERSION@-@PANGO_CURRENT_MINUS_AGE@.dll"
+ VALUE "ProductName", "Pangoxft"
+ VALUE "ProductVersion", "@PANGO_VERSION_MAJOR@.@PANGO_VERSION_MINOR@.@PANGO_VERSION_MICRO@"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+ END