summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pango/meson.build20
-rw-r--r--pango/pango-attributes.c15
-rw-r--r--pango/pango-context.c2
-rw-r--r--pango/pango-ot.h23
-rw-r--r--pango/pangocairo-fc.h6
-rw-r--r--pango/pangocairo.h24
-rw-r--r--pango/pangofc-decoder.h22
-rw-r--r--pango/pangofc-font.h6
-rw-r--r--pango/pangofc-fontmap.h6
-rw-r--r--pango/pangoft2.h12
-rw-r--r--pango/pangoxft-font.c12
-rw-r--r--pango/pangoxft-render.h9
-rw-r--r--pango/pangoxft.h31
-rw-r--r--tests/layouts/valid-4.expected2
-rw-r--r--tests/layouts/valid-4.markup2
-rw-r--r--tests/testattributes.c144
-rw-r--r--tests/testmisc.c14
17 files changed, 311 insertions, 39 deletions
diff --git a/pango/meson.build b/pango/meson.build
index ad7fb798..41158141 100644
--- a/pango/meson.build
+++ b/pango/meson.build
@@ -238,8 +238,8 @@ if build_pangoft2
dependencies: [ libpango_dep, pango_gir_dep ],
namespace: 'PangoFc',
nsversion: pango_api_version,
- identifier_prefix: 'Pango',
- symbol_prefix: 'pango',
+ identifier_prefix: 'PangoFc',
+ symbol_prefix: 'pango_fc',
export_packages: 'pangofc',
includes: [ pango_gir[0], 'fontconfig-2.0', ],
header: 'pango/pangofc-fontmap.h',
@@ -256,8 +256,8 @@ if build_pangoft2
dependencies: [ libpango_dep, pango_gir_dep, pangofc_gir_dep ],
namespace: 'PangoOT',
nsversion: pango_api_version,
- identifier_prefix: 'Pango',
- symbol_prefix: 'pango',
+ identifier_prefix: 'PangoOT',
+ symbol_prefix: 'pango_ot',
export_packages: 'pangoot',
includes: [ pangofc_gir[0], 'freetype2-2.0', ],
header: 'pango/pango-ot.h',
@@ -273,8 +273,8 @@ if build_pangoft2
dependencies: [ libpango_dep, pango_gir_dep, pangofc_gir_dep, pangoot_gir_dep ],
namespace: 'PangoFT2',
nsversion: pango_api_version,
- identifier_prefix: 'Pango',
- symbol_prefix: 'pango',
+ identifier_prefix: 'PangoFT2',
+ symbol_prefix: 'pango_ft2',
export_packages: 'pangoft2',
includes: [ pangofc_gir[0], 'freetype2-2.0', ],
header: 'pango/pangoft2.h',
@@ -363,8 +363,8 @@ if xft_dep.found() and fontconfig_dep.found()
dependencies: [ libpango_dep, libpangoft2_dep, pango_gir_dep, pangoot_gir_dep, pangoft2_gir_dep ],
namespace: 'PangoXft',
nsversion: pango_api_version,
- identifier_prefix: 'Pango',
- symbol_prefix: 'pango',
+ identifier_prefix: 'PangoXft',
+ symbol_prefix: 'pango_xft',
export_packages: 'pangoxft',
includes: [ pango_gir[0], pangoot_gir[0], pangoft2_gir[0], 'GObject-2.0', 'xft-2.0', 'xlib-2.0' ],
header: 'pango/pangoxft.h',
@@ -528,8 +528,8 @@ if cairo_dep.found()
dependencies: [ pangocairo_deps, pango_gir_dep ],
namespace: 'PangoCairo',
nsversion: pango_api_version,
- identifier_prefix: 'Pango',
- symbol_prefix: 'pango',
+ identifier_prefix: 'PangoCairo',
+ symbol_prefix: 'pango_cairo',
export_packages: 'pangocairo',
includes: [ pango_gir[0], 'GObject-2.0', 'cairo-1.0' ],
header: 'pango/pangocairo.h',
diff --git a/pango/pango-attributes.c b/pango/pango-attributes.c
index 239fc935..1fa8c399 100644
--- a/pango/pango-attributes.c
+++ b/pango/pango-attributes.c
@@ -1531,7 +1531,7 @@ pango_attr_list_change (PangoAttrList *list,
g_return_if_fail (list != NULL);
- if (start_index == end_index) /* empty, nothing to do */
+ if (start_index == end_index) /* empty, nothing to do */
{
pango_attribute_destroy (attr);
return;
@@ -1560,7 +1560,7 @@ pango_attr_list_change (PangoAttrList *list,
continue; /* This attr does not overlap with the new one */
g_assert (tmp_attr->end_index >= start_index);
- g_assert (start_index < tmp_attr->end_index);
+ g_assert (start_index <= tmp_attr->end_index);
if (pango_attribute_equal (tmp_attr, attr))
{
@@ -1571,7 +1571,6 @@ pango_attr_list_change (PangoAttrList *list,
/* We are totally overlapping the previous attribute.
* No action is needed.
*/
- g_ptr_array_remove_index (list->attributes, i);
pango_attribute_destroy (attr);
return;
}
@@ -1607,6 +1606,13 @@ pango_attr_list_change (PangoAttrList *list,
}
}
+ if (i == p)
+ {
+ /* we didn't insert attr yet */
+ pango_attr_list_insert (list, attr);
+ return;
+ }
+
/* We now have the range inserted into the list one way or the
* other. Fix up the remainder */
/* Attention: No i = 0 here. */
@@ -1863,6 +1869,9 @@ pango_attr_list_equal (PangoAttrList *list,
if (list == NULL || other_list == NULL)
return FALSE;
+ if (list->attributes == NULL || other_list->attributes == NULL)
+ return list->attributes == other_list->attributes;
+
attrs = list->attributes;
other_attrs = other_list->attributes;
diff --git a/pango/pango-context.c b/pango/pango-context.c
index 7772878f..bebe804a 100644
--- a/pango/pango-context.c
+++ b/pango/pango-context.c
@@ -1566,7 +1566,7 @@ pango_itemize_with_base_dir (PangoContext *context,
g_return_val_if_fail (length >= 0, NULL);
g_return_val_if_fail (length == 0 || text != NULL, NULL);
- if (length == 0)
+ if (length == 0 || g_utf8_strlen (text, length) == 0)
return NULL;
itemize_state_init (&state, context, text, base_dir, start_index, length,
diff --git a/pango/pango-ot.h b/pango/pango-ot.h
index 2c9f42d5..b8c6acc8 100644
--- a/pango/pango-ot.h
+++ b/pango/pango-ot.h
@@ -247,16 +247,29 @@ struct _PangoOTRulesetDescription {
guint n_other_features;
};
-
+#ifdef __GI_SCANNER__
+#define PANGO_OT_TYPE_INFO (pango_ot_info_get_type ())
+#define PANGO_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_OT_TYPE_INFO, PangoOTInfo))
+#define PANGO_OT_IS_INFO(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_OT_TYPE_INFO))
+#else
#define PANGO_TYPE_OT_INFO (pango_ot_info_get_type ())
#define PANGO_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_OT_INFO, PangoOTInfo))
#define PANGO_IS_OT_INFO(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_OT_INFO))
+#endif
+
PANGO_DEPRECATED
GType pango_ot_info_get_type (void) G_GNUC_CONST;
+#ifdef __GI_SCANNER__
+#define PANGO_OT_TYPE_RULESET (pango_ot_ruleset_get_type ())
+#define PANGO_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_OT_TYPE_RULESET, PangoOTRuleset))
+#define PANGO_OT_IS_RULESET(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_OT_TYPE_RULESET))
+#else
#define PANGO_TYPE_OT_RULESET (pango_ot_ruleset_get_type ())
#define PANGO_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_OT_RULESET, PangoOTRuleset))
#define PANGO_IS_OT_RULESET(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_OT_RULESET))
+#endif
+
PANGO_DEPRECATED
GType pango_ot_ruleset_get_type (void) G_GNUC_CONST;
@@ -300,7 +313,11 @@ PangoOTTag *pango_ot_info_list_features (PangoOTInfo *info,
guint script_index,
guint language_index);
+#ifdef __GI_SCANNER__
+#define PANGO_OT_TYPE_BUFFER (pango_ot_buffer_get_type())
+#else
#define PANGO_TYPE_OT_BUFFER (pango_ot_buffer_get_type())
+#endif
PANGO_DEPRECATED
GType pango_ot_buffer_get_type (void) G_GNUC_CONST;
@@ -383,7 +400,11 @@ PangoLanguage *pango_ot_tag_to_language (PangoOTTag language_tag) G_GNUC_
PANGO_DEPRECATED
PangoOTTag pango_ot_tag_from_language (PangoLanguage *language) G_GNUC_CONST;
+#ifdef __GI_SCANNER__
+#define PANGO_OT_TYPE_RULESET_DESCRIPTION (pango_ot_ruleset_description_get_type())
+#else
#define PANGO_TYPE_OT_RULESET_DESCRIPTION (pango_ot_ruleset_description_get_type())
+#endif
PANGO_DEPRECATED
GType pango_ot_ruleset_description_get_type (void) G_GNUC_CONST;
diff --git a/pango/pangocairo-fc.h b/pango/pangocairo-fc.h
index 0d9d04b4..36529569 100644
--- a/pango/pangocairo-fc.h
+++ b/pango/pangocairo-fc.h
@@ -27,9 +27,15 @@
G_BEGIN_DECLS
+#ifdef __GI_SCANNER__
+#define PANGO_CAIRO_TYPE_FC_FONT_MAP (pango_cairo_fc_font_map_get_type())
+#define PANGO_CAIRO_FC_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANGO_CAIRO_TYPE_FC_FONT_MAP, PangoCairoFcFontMap))
+#define PANGO_CAIRO_IS_FC_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANGO_CAIRO_TYPE_FC_FONT_MAP))
+#else
#define PANGO_TYPE_CAIRO_FC_FONT_MAP (pango_cairo_fc_font_map_get_type ())
#define PANGO_CAIRO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FC_FONT_MAP, PangoCairoFcFontMap))
#define PANGO_IS_CAIRO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FC_FONT_MAP))
+#endif
typedef struct _PangoCairoFcFontMap PangoCairoFcFontMap;
diff --git a/pango/pangocairo.h b/pango/pangocairo.h
index cd368f8f..633ccf9d 100644
--- a/pango/pangocairo.h
+++ b/pango/pangocairo.h
@@ -37,9 +37,20 @@ G_BEGIN_DECLS
* Since: 1.18
**/
typedef struct _PangoCairoFont PangoCairoFont;
-#define PANGO_TYPE_CAIRO_FONT (pango_cairo_font_get_type ())
-#define PANGO_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FONT, PangoCairoFont))
-#define PANGO_IS_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FONT))
+
+/* This is a hack because PangoCairo is hijacking the Pango namespace, but
+ * consumers of the PangoCairo API expect these symbols to live under the
+ * PangoCairo namespace.
+ */
+#ifdef __GI_SCANNER__
+#define PANGO_CAIRO_TYPE_FONT (pango_cairo_font_get_type())
+#define PANGO_CAIRO_FONT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANGO_CAIRO_TYPE_FONT, PangoCairoFont))
+#define PANGO_CAIRO_IS_FONT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANGO_CAIRO_TYPE_FONT))
+#else
+#define PANGO_TYPE_CAIRO_FONT (pango_cairo_font_get_type ())
+#define PANGO_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FONT, PangoCairoFont))
+#define PANGO_IS_CAIRO_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FONT))
+#endif
/**
* PangoCairoFontMap:
@@ -51,9 +62,16 @@ typedef struct _PangoCairoFont PangoCairoFont;
* Since: 1.10
**/
typedef struct _PangoCairoFontMap PangoCairoFontMap;
+
+#ifdef __GI_SCANNER__
+#define PANGO_CAIRO_TYPE_FONT_MAP (pango_cairo_font_map_get_type())
+#define PANGO_CAIRO_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANGO_CAIRO_TYPE_FONT_MAP, PangoCairoFontMap))
+#define PANGO_CAIRO_IS_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANGO_CAIRO_TYPE_FONT_MAP))
+#else
#define PANGO_TYPE_CAIRO_FONT_MAP (pango_cairo_font_map_get_type ())
#define PANGO_CAIRO_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_CAIRO_FONT_MAP, PangoCairoFontMap))
#define PANGO_IS_CAIRO_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_CAIRO_FONT_MAP))
+#endif
/**
* PangoCairoShapeRendererFunc:
diff --git a/pango/pangofc-decoder.h b/pango/pangofc-decoder.h
index f4b8cc86..7c78958c 100644
--- a/pango/pangofc-decoder.h
+++ b/pango/pangofc-decoder.h
@@ -26,17 +26,25 @@
G_BEGIN_DECLS
-#define PANGO_TYPE_FC_DECODER (pango_fc_decoder_get_type())
-#define PANGO_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_DECODER, PangoFcDecoder))
-#define PANGO_IS_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_DECODER))
+#ifdef __GI_SCANNER__
+#define PANGO_FC_TYPE_DECODER (pango_fc_decoder_get_type())
+#define PANGO_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_DECODER, PangoFcDecoder))
+#define PANGO_FC_IS_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_DECODER))
+#define PANGO_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_FC_TYPE_DECODER, PangoFcDecoderClass))
+#define PANGO_FC_IS_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_FC_TYPE_DECODER))
+#define PANGO_FC_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_FC_TYPE_DECODER, PangoFcDecoderClass))
+#else
+#define PANGO_TYPE_FC_DECODER (pango_fc_decoder_get_type())
+#define PANGO_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_DECODER, PangoFcDecoder))
+#define PANGO_IS_FC_DECODER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_DECODER))
+#define PANGO_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass))
+#define PANGO_IS_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FC_DECODER))
+#define PANGO_FC_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass))
+#endif
typedef struct _PangoFcDecoder PangoFcDecoder;
typedef struct _PangoFcDecoderClass PangoFcDecoderClass;
-#define PANGO_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass))
-#define PANGO_IS_FC_DECODER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_FC_DECODER))
-#define PANGO_FC_DECODER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_FC_DECODER, PangoFcDecoderClass))
-
/**
* PangoFcDecoder:
*
diff --git a/pango/pangofc-font.h b/pango/pangofc-font.h
index 641f5947..25a0277c 100644
--- a/pango/pangofc-font.h
+++ b/pango/pangofc-font.h
@@ -42,9 +42,15 @@
G_BEGIN_DECLS
+#ifdef __GI_SCANNER__
+#define PANGO_FC_TYPE_FONT (pango_fc_font_get_type ())
+#define PANGO_FC_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_FONT, PangoFcFont))
+#define PANGO_FC_IS_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_FONT))
+#else
#define PANGO_TYPE_FC_FONT (pango_fc_font_get_type ())
#define PANGO_FC_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_FONT, PangoFcFont))
#define PANGO_IS_FC_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_FONT))
+#endif
typedef struct _PangoFcFont PangoFcFont;
typedef struct _PangoFcFontClass PangoFcFontClass;
diff --git a/pango/pangofc-fontmap.h b/pango/pangofc-fontmap.h
index ae11ec31..a41ae1d9 100644
--- a/pango/pangofc-fontmap.h
+++ b/pango/pangofc-fontmap.h
@@ -35,9 +35,15 @@ G_BEGIN_DECLS
* PangoFcFontMap
*/
+#ifdef __GI_SCANNER__
+#define PANGO_FC_TYPE_FONT_MAP (pango_fc_font_map_get_type ())
+#define PANGO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FC_TYPE_FONT_MAP, PangoFcFontMap))
+#define PANGO_FC_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FC_TYPE_FONT_MAP))
+#else
#define PANGO_TYPE_FC_FONT_MAP (pango_fc_font_map_get_type ())
#define PANGO_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FC_FONT_MAP, PangoFcFontMap))
#define PANGO_IS_FC_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FC_FONT_MAP))
+#endif
typedef struct _PangoFcFontMap PangoFcFontMap;
typedef struct _PangoFcFontMapClass PangoFcFontMapClass;
diff --git a/pango/pangoft2.h b/pango/pangoft2.h
index 87d0ae2d..483bc366 100644
--- a/pango/pangoft2.h
+++ b/pango/pangoft2.h
@@ -33,9 +33,11 @@
G_BEGIN_DECLS
+#ifndef __GI_SCANNER__
+
#ifndef PANGO_DISABLE_DEPRECATED
/**
- * PANGO_RENDER_TYPE_FT2:
+ * PANGO_RENDER_TYPE_FT2: (skip)
*
* A string constant that was used to identify shape engines that work
* with the FreeType backend. See %PANGO_RENDER_TYPE_FC for the replacement.
@@ -43,9 +45,17 @@ G_BEGIN_DECLS
#define PANGO_RENDER_TYPE_FT2 "PangoRenderFT2"
#endif
+#endif /* __GI_SCANNER__ */
+
+#ifdef __GI_SCANNER__
+#define PANGO_FT2_TYPE_FONT_MAP (pango_ft2_font_map_get_type ())
+#define PANGO_FT2_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_FT2_TYPE_FONT_MAP, PangoFT2FontMap))
+#define PANGO_FT2_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_FT2_TYPE_FONT_MAP))
+#else
#define PANGO_TYPE_FT2_FONT_MAP (pango_ft2_font_map_get_type ())
#define PANGO_FT2_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_FT2_FONT_MAP, PangoFT2FontMap))
#define PANGO_FT2_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_FT2_FONT_MAP))
+#endif
typedef struct _PangoFT2FontMap PangoFT2FontMap;
diff --git a/pango/pangoxft-font.c b/pango/pangoxft-font.c
index 45418c15..38198bc0 100644
--- a/pango/pangoxft-font.c
+++ b/pango/pangoxft-font.c
@@ -518,7 +518,7 @@ pango_xft_font_get_font (PangoFont *font)
/**
* pango_xft_font_get_display: (skip)
- * @font: a #PangoFont.
+ * @font: (type PangoXftFont): a #PangoFont.
*
* Returns the X display of the `XftFont` of a font.
*
@@ -540,7 +540,7 @@ pango_xft_font_get_display (PangoFont *font)
/**
* pango_xft_font_get_unknown_glyph:
- * @font: a #PangoFont.
+ * @font: (type PangoXftFont): a #PangoFont.
* @wc: the Unicode character for which a glyph is needed.
*
* Returns the index of a glyph suitable for drawing @wc as an
@@ -561,7 +561,7 @@ pango_xft_font_get_unknown_glyph (PangoFont *font,
/**
* pango_xft_font_lock_face: (skip)
- * @font: a #PangoFont.
+ * @font: (type PangoXftFont): a #PangoFont.
*
* Gets the FreeType `FT_Face` associated with a font.
*
@@ -583,7 +583,7 @@ pango_xft_font_lock_face (PangoFont *font)
/**
* pango_xft_font_unlock_face: (skip)
- * @font: a #PangoFont.
+ * @font: (type PangoXftFont): a #PangoFont.
*
* Releases a font previously obtained with
* pango_xft_font_lock_face().
@@ -602,7 +602,7 @@ pango_xft_font_unlock_face (PangoFont *font)
/**
* pango_xft_font_get_glyph:
- * @font: a #PangoFont for the Xft backend
+ * @font: (type PangoXftFont): a #PangoFont for the Xft backend
* @wc: Unicode codepoint to look up
*
* Gets the glyph index for a given Unicode character
@@ -627,7 +627,7 @@ pango_xft_font_get_glyph (PangoFont *font,
/**
* pango_xft_font_has_char:
- * @font: a #PangoFont for the Xft backend
+ * @font: (type PangoXftFont): a #PangoFont for the Xft backend
* @wc: Unicode codepoint to look up
*
* Determines whether @font has a glyph for the codepoint @wc.
diff --git a/pango/pangoxft-render.h b/pango/pangoxft-render.h
index 5893574b..77684728 100644
--- a/pango/pangoxft-render.h
+++ b/pango/pangoxft-render.h
@@ -38,12 +38,21 @@ typedef struct _PangoXftRenderer PangoXftRenderer;
typedef struct _PangoXftRendererClass PangoXftRendererClass;
typedef struct _PangoXftRendererPrivate PangoXftRendererPrivate;
+#ifdef __GI_SCANNER__
+#define PANGO_XFT_TYPE_RENDERER (pango_xft_renderer_get_type())
+#define PANGO_XFT_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_XFT_TYPE_RENDERER, PangoXftRenderer))
+#define PANGO_XFT_IS_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_XFT_TYPE_RENDERER))
+#define PANGO_XFT_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_XFT_TYPE_RENDERER, PangoXftRendererClass))
+#define PANGO_XFT_IS_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_XFT_TYPE_RENDERER))
+#define PANGO_XFT_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_XFT_TYPE_RENDERER, PangoXftRendererClass))
+#else
#define PANGO_TYPE_XFT_RENDERER (pango_xft_renderer_get_type())
#define PANGO_XFT_RENDERER(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_RENDERER, PangoXftRenderer))
#define PANGO_IS_XFT_RENDERER(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_RENDERER))
#define PANGO_XFT_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PANGO_TYPE_XFT_RENDERER, PangoXftRendererClass))
#define PANGO_IS_XFT_RENDERER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PANGO_TYPE_XFT_RENDERER))
#define PANGO_XFT_RENDERER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PANGO_TYPE_XFT_RENDERER, PangoXftRendererClass))
+#endif
/**
* PangoXftRenderer:
diff --git a/pango/pangoxft.h b/pango/pangoxft.h
index d02624f3..f14b89c9 100644
--- a/pango/pangoxft.h
+++ b/pango/pangoxft.h
@@ -31,8 +31,10 @@
G_BEGIN_DECLS
+#ifndef __GI_SCANNER__
+
/**
- * PANGO_RENDER_TYPE_XFT:
+ * PANGO_RENDER_TYPE_XFT: (skip)
*
* A string constant that was used to identify shape engines that work
* with the Xft backend. See %PANGO_RENDER_TYPE_FC for the replacement.
@@ -41,6 +43,8 @@ G_BEGIN_DECLS
#define PANGO_RENDER_TYPE_XFT "PangoRenderXft"
#endif
+#endif /* __GI_SCANNER__ */
+
/**
* PangoXftFontMap:
*
@@ -48,9 +52,20 @@ G_BEGIN_DECLS
* the Xft library as the renderer. It is used in to create fonts of
* type #PangoXftFont.
*/
-#define PANGO_TYPE_XFT_FONT_MAP (pango_xft_font_map_get_type ())
-#define PANGO_XFT_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT_MAP, PangoXftFontMap))
-#define PANGO_XFT_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT_MAP))
+
+/* This is a hack needed because PangoXft hijacks the Pango namespace
+ * for the identifiers, but consumers expect these symbols to be under
+ * the PangoXft namespace.
+ */
+#ifdef __GI_SCANNER__
+#define PANGO_XFT_TYPE_FONT_MAP (pango_xft_font_map_get_type())
+#define PANGO_XFT_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PANGO_XFT_TYPE_FONT_MAP, PangoXftFontMap))
+#define PANGO_XFT_IS_FONT_MAP(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), PANGO_XFT_TYPE_FONT_MAP))
+#else
+#define PANGO_TYPE_XFT_FONT_MAP (pango_xft_font_map_get_type ())
+#define PANGO_XFT_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT_MAP, PangoXftFontMap))
+#define PANGO_XFT_IS_FONT_MAP(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT_MAP))
+#endif
typedef struct _PangoXftFontMap PangoXftFontMap;
@@ -99,9 +114,15 @@ void pango_xft_substitute_changed (Display *display,
PANGO_AVAILABLE_IN_ALL
GType pango_xft_font_map_get_type (void) G_GNUC_CONST;
-#define PANGO_XFT_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT, PangoXftFont))
+#ifdef __GI_SCANNER__
+#define PANGO_XFT_TYPE_FONT (pango_xft_font_get_type ())
+#define PANGO_XFT_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_XFT_TYPE_FONT, PangoXftFont))
+#define PANGO_XFT_IS_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_XFT_TYPE_FONT))
+#else
#define PANGO_TYPE_XFT_FONT (pango_xft_font_get_type ())
+#define PANGO_XFT_FONT(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PANGO_TYPE_XFT_FONT, PangoXftFont))
#define PANGO_XFT_IS_FONT(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PANGO_TYPE_XFT_FONT))
+#endif
PANGO_AVAILABLE_IN_ALL
GType pango_xft_font_get_type (void) G_GNUC_CONST;
diff --git a/tests/layouts/valid-4.expected b/tests/layouts/valid-4.expected
index 09f143f3..66796cb5 100644
--- a/tests/layouts/valid-4.expected
+++ b/tests/layouts/valid-4.expected
@@ -5,7 +5,7 @@ This paragraph should ac­tual­ly have multiple lines, unlike all the other wan
wrapped: 1
ellipsized: 0
lines: 6
-width: 194560
+width: 192512
--- attributes
diff --git a/tests/layouts/valid-4.markup b/tests/layouts/valid-4.markup
index 16111976..0b2bb51a 100644
--- a/tests/layouts/valid-4.markup
+++ b/tests/layouts/valid-4.markup
@@ -1,2 +1,2 @@
-width=190
+width=188
This paragraph should ac­tual­ly have multiple lines, unlike all the other wannabe äöü pa­ra­graph tests in this ugh test-case. Grow some lines!
diff --git a/tests/testattributes.c b/tests/testattributes.c
index 4eea97da..d6c8c87c 100644
--- a/tests/testattributes.c
+++ b/tests/testattributes.c
@@ -627,6 +627,12 @@ test_list_equal (void)
list1 = pango_attr_list_new ();
list2 = pango_attr_list_new ();
+ g_assert_true (pango_attr_list_equal (NULL, NULL));
+ g_assert_false (pango_attr_list_equal (list1, NULL));
+ g_assert_false (pango_attr_list_equal (NULL, list1));
+ g_assert_true (pango_attr_list_equal (list1, list1));
+ g_assert_true (pango_attr_list_equal (list1, list2));
+
attr = pango_attr_size_new (10 * PANGO_SCALE);
attr->start_index = 0;
attr->end_index = 7;
@@ -688,6 +694,142 @@ test_list_equal (void)
}
}
+static void
+test_insert (void)
+{
+ PangoAttrList *list;
+ PangoAttribute *attr;
+
+ list = pango_attr_list_new ();
+ attr = pango_attr_size_new (10 * PANGO_SCALE);
+ attr->start_index = 10;
+ attr->end_index = 11;
+ pango_attr_list_insert (list, attr);
+ attr = pango_attr_rise_new (100);
+ attr->start_index = 0;
+ attr->end_index = 200;
+ pango_attr_list_insert (list, attr);
+ attr = pango_attr_family_new ("Times");
+ attr->start_index = 5;
+ attr->end_index = 15;
+ pango_attr_list_insert (list, attr);
+ attr = pango_attr_fallback_new (FALSE);
+ attr->start_index = 11;
+ attr->end_index = 100;
+ pango_attr_list_insert (list, attr);
+ attr = pango_attr_stretch_new (PANGO_STRETCH_CONDENSED);
+ attr->start_index = 30;
+ attr->end_index = 60;
+ pango_attr_list_insert (list, attr);
+
+ assert_attr_list (list, "[0,200]rise=100\n"
+ "[5,15]family=Times\n"
+ "[10,11]size=10240\n"
+ "[11,100]fallback=0\n"
+ "[30,60]stretch=2\n");
+
+ attr = pango_attr_family_new ("Times");
+ attr->start_index = 10;
+ attr->end_index = 25;
+ pango_attr_list_change (list, attr);
+
+ assert_attr_list (list, "[0,200]rise=100\n"
+ "[5,25]family=Times\n"
+ "[10,11]size=10240\n"
+ "[11,100]fallback=0\n"
+ "[30,60]stretch=2\n");
+
+ attr = pango_attr_family_new ("Futura");
+ attr->start_index = 11;
+ attr->end_index = 25;
+ pango_attr_list_insert (list, attr);
+
+ assert_attr_list (list, "[0,200]rise=100\n"
+ "[5,25]family=Times\n"
+ "[10,11]size=10240\n"
+ "[11,100]fallback=0\n"
+ "[11,25]family=Futura\n"
+ "[30,60]stretch=2\n");
+
+ pango_attr_list_unref (list);
+}
+
+static gboolean
+attr_list_merge_filter (PangoAttribute *attribute,
+ gpointer list)
+{
+ pango_attr_list_change (list, pango_attribute_copy (attribute));
+ return FALSE;
+}
+
+/* test something that gtk does */
+static void
+test_merge (void)
+{
+ PangoAttrList *list;
+ PangoAttrList *list2;
+ PangoAttribute *attr;
+
+ list = pango_attr_list_new ();
+ attr = pango_attr_size_new (10 * PANGO_SCALE);
+ attr->start_index = 10;
+ attr->end_index = 11;
+ pango_attr_list_insert (list, attr);
+ attr = pango_attr_rise_new (100);
+ attr->start_index = 0;
+ attr->end_index = 200;
+ pango_attr_list_insert (list, attr);
+ attr = pango_attr_family_new ("Times");
+ attr->start_index = 5;
+ attr->end_index = 15;
+ pango_attr_list_insert (list, attr);
+ attr = pango_attr_fallback_new (FALSE);
+ attr->start_index = 11;
+ attr->end_index = 100;
+ pango_attr_list_insert (list, attr);
+ attr = pango_attr_stretch_new (PANGO_STRETCH_CONDENSED);
+ attr->start_index = 30;
+ attr->end_index = 60;
+ pango_attr_list_insert (list, attr);
+
+ assert_attr_list (list, "[0,200]rise=100\n"
+ "[5,15]family=Times\n"
+ "[10,11]size=10240\n"
+ "[11,100]fallback=0\n"
+ "[30,60]stretch=2\n");
+
+ list2 = pango_attr_list_new ();
+ attr = pango_attr_size_new (10 * PANGO_SCALE);
+ attr->start_index = 11;
+ attr->end_index = 13;
+ pango_attr_list_insert (list2, attr);
+ attr = pango_attr_size_new (11 * PANGO_SCALE);
+ attr->start_index = 13;
+ attr->end_index = 15;
+ pango_attr_list_insert (list2, attr);
+ attr = pango_attr_size_new (12 * PANGO_SCALE);
+ attr->start_index = 40;
+ attr->end_index = 50;
+ pango_attr_list_insert (list2, attr);
+
+ assert_attr_list (list2, "[11,13]size=10240\n"
+ "[13,15]size=11264\n"
+ "[40,50]size=12288\n");
+
+ pango_attr_list_filter (list2, attr_list_merge_filter, list);
+
+ assert_attr_list (list, "[0,200]rise=100\n"
+ "[5,15]family=Times\n"
+ "[10,13]size=10240\n"
+ "[11,100]fallback=0\n"
+ "[13,15]size=11264\n"
+ "[30,60]stretch=2\n"
+ "[40,50]size=12288\n");
+
+ pango_attr_list_unref (list);
+ pango_attr_list_unref (list2);
+}
+
int
main (int argc, char *argv[])
{
@@ -701,6 +843,8 @@ main (int argc, char *argv[])
g_test_add_func ("/attributes/list/filter", test_list_filter);
g_test_add_func ("/attributes/list/update", test_list_update);
g_test_add_func ("/attributes/list/equal", test_list_equal);
+ g_test_add_func ("/attributes/list/insert", test_insert);
+ g_test_add_func ("/attributes/list/merge", test_merge);
g_test_add_func ("/attributes/iter/basic", test_iter);
g_test_add_func ("/attributes/iter/get", test_iter_get);
g_test_add_func ("/attributes/iter/get_font", test_iter_get_font);
diff --git a/tests/testmisc.c b/tests/testmisc.c
index a078944d..f5583cab 100644
--- a/tests/testmisc.c
+++ b/tests/testmisc.c
@@ -41,12 +41,26 @@ test_shape_tab_crash (void)
g_object_unref (context);
}
+/* Test that itemizing a string with 0 characters works
+ */
+static void
+test_itemize_empty_crash (void)
+{
+ PangoContext *context;
+
+ context = pango_font_map_create_context (pango_cairo_font_map_get_default ());
+ pango_itemize_with_base_dir (context, PANGO_DIRECTION_LTR, "", 0, 1, NULL, NULL);
+
+ g_object_unref (context);
+}
+
int
main (int argc, char *argv[])
{
g_test_init (&argc, &argv, NULL);
g_test_add_func ("/layout/shape-tab-crash", test_shape_tab_crash);
+ g_test_add_func ("/layout/itemize-empty-crash", test_itemize_empty_crash);
return g_test_run ();
}