cdef extern from "glib.h" nogil: ctypedef void *gpointer ctypedef char gchar ctypedef int gint ctypedef unsigned int guint ctypedef unsigned long gsize ctypedef gint gboolean gboolean TRUE gboolean FALSE void *g_malloc(gsize n_bytes) void *g_malloc0(gsize n_bytes) void g_free(gpointer mem) void g_object_unref(gpointer obj) # gpointer GUINT_TO_POINTER(guint u) # guint GPOINTER_TO_UINT(gpointer p) # https://www.freetype.org/freetype2/docs/reference/ft2-index.html cdef extern from "../../lib/pango/freetype2.h" nogil: int FREETYPE_MAJOR int FREETYPE_MINOR int FREETYPE_PATCH ctypedef void *FT_Library ctypedef void *FT_Face ctypedef int FT_Error ctypedef unsigned char *FT_Byte ctypedef unsigned int FT_UInt ctypedef unsigned short FT_UShort ctypedef enum FT_Pixel_Mode: FT_PIXEL_MODE_NONE = 0 FT_PIXEL_MODE_MONO FT_PIXEL_MODE_GRAY FT_PIXEL_MODE_GRAY2 FT_PIXEL_MODE_GRAY4 FT_PIXEL_MODE_LCD FT_PIXEL_MODE_LCD_V FT_PIXEL_MODE_BGRA FT_PIXEL_MODE_MAX ctypedef struct FT_Bitmap: unsigned int rows unsigned int width int pitch unsigned char* buffer unsigned short num_grays unsigned char pixel_mode unsigned char palette_mode void* palette void FT_Bitmap_New(FT_Bitmap *bitmap) # <= v2.5 void FT_Bitmap_Init(FT_Bitmap *bitmap) # >= v2.6 void FT_Bitmap_Done(FT_Library library, FT_Bitmap *bitmap) # For font face detection FT_Error FT_Init_FreeType(FT_Library *library) FT_Error FT_New_Face(FT_Library library, const char *pathname, long face_index, FT_Face *aface) FT_Error FT_Done_Face(FT_Face face) const char *FT_Get_Postscript_Name(FT_Face face) # FT_Error FT_Get_Sfnt_Name(FT_Face face, FT_UInt idx, FT_SfntName *aname) # FT_Error FT_Get_Sfnt_Name_Count(FT_Face face) # https://www.freedesktop.org/software/fontconfig/fontconfig-devel/t1.html cdef extern from "fontconfig/fontconfig.h" nogil: ctypedef struct FcConfig: pass ctypedef struct FcPattern: pass ctypedef struct FcValue: pass ctypedef enum FcResult: FcResultMatch FcResultNoMatch FcResultTypeMismatch FcResultNoId ctypedef bint FcBool ctypedef unsigned char FcChar8 bint FcTrue bint FcFalse const char *FC_FAMILY const char *FC_ANTIALIAS const char *FC_HINTING const char *FC_HINT_STYLE int FC_HINT_NONE int FC_HINT_SLIGHT int FC_HINT_MEDIUM int FC_HINT_FULL FcConfig *FcConfigCreate() FcConfig *FcInitLoadConfig() FcConfig *FcInitLoadConfigAndFonts() void FcConfigDestroy(FcConfig *config) FcConfig *FcConfigGetCurrent() FcBool FcConfigSetCurrent(FcConfig *config) FcBool FcConfigAppFontAddFile(FcConfig *config, const FcChar8 *file) FcBool FcConfigAppFontAddDir(FcConfig *config, const FcChar8 *dir) void FcConfigAppFontClear(FcConfig *config) FcBool FcConfigParseAndLoad(FcConfig *config, const FcChar8 *file, FcBool complain) FcBool FcConfigSetRescanInterval(FcConfig *config, int rescaninterval) int FcConfigGetRescanInterval(FcConfig *config) FcResult FcPatternGetString(FcPattern *p, const char *object, int id, FcChar8 **s) void FcPatternDestroy(FcPattern *p) FcBool FcPatternDel(FcPattern *p, const char *object) FcBool FcPatternAddInteger (FcPattern *p, const char *object, int i) FcBool FcPatternAddBool (FcPattern *p, const char *object, FcBool b) # FcPattern *FcPatternCreate() # FcBool FcPatternAddDouble (FcPattern *p, const char *object, double d) # FcBool FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s) # FcBool FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *m) # FcBool FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c) # FcBool FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Facef) # FcBool FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *l) # FcBool FcPatternAddRange (FcPattern *p, const char *object, const FcRange *r) # https://www.freedesktop.org/software/fontconfig/fontconfig-devel/fcfreetypequeryface.html cdef extern from "fontconfig/fcfreetype.h" nogil: FcPattern *FcFreeTypeQueryFace(const FT_Face face, const FcChar8 *file, unsigned int id, void *) # https://developer.gnome.org/pango/stable/pango-Version-Checking.html cdef extern from "pango/pango-utils.h": int PANGO_VERSION_CHECK(int major, int minor, int micro) # https://developer.gnome.org/pango/stable/pango-Glyph-Storage.html cdef extern from "pango/pango-types.h" nogil: unsigned int PANGO_SCALE # https://developer.gnome.org/pango/stable/pango-Text-Attributes.html cdef extern from "pango/pango-attributes.h" nogil: guint PANGO_ATTR_INDEX_FROM_TEXT_BEGINNING guint PANGO_ATTR_INDEX_TO_TEXT_END ctypedef struct PangoAttrList: pass ctypedef struct PangoAttrIterator: pass ctypedef struct PangoAttribute: pass ctypedef struct PangoAttrClass: pass ctypedef struct PangoAttrString: pass ctypedef struct PangoAttrLanguage: pass ctypedef struct PangoAttrInt: pass ctypedef struct PangoAttrSize: pass ctypedef struct PangoAttrFloat: pass ctypedef struct PangoAttrColor: pass ctypedef struct PangoAttrFontDesc: pass ctypedef struct PangoAttrShape: pass ctypedef struct PangoAttrFontFeatures: pass ctypedef enum PangoStyle: PANGO_STYLE_NORMAL PANGO_STYLE_OBLIQUE PANGO_STYLE_ITALIC # FIXME: investigate need to handle this for different pango versions ctypedef enum PangoWeight: PANGO_WEIGHT_THIN PANGO_WEIGHT_ULTRALIGHT PANGO_WEIGHT_LIGHT PANGO_WEIGHT_SEMILIGHT PANGO_WEIGHT_BOOK PANGO_WEIGHT_NORMAL PANGO_WEIGHT_MEDIUM PANGO_WEIGHT_SEMIBOLD PANGO_WEIGHT_BOLD PANGO_WEIGHT_ULTRABOLD PANGO_WEIGHT_HEAVY PANGO_WEIGHT_ULTRAHEAVY ctypedef enum PangoUnderline: PANGO_UNDERLINE_NONE PANGO_UNDERLINE_SINGLE PANGO_UNDERLINE_DOUBLE PANGO_UNDERLINE_LOW PANGO_UNDERLINE_ERROR PangoAttrList *pango_attr_list_new() PangoAttrList *pango_attr_list_ref(PangoAttrList *list) void pango_attr_list_unref(PangoAttrList *list) void pango_attr_list_insert(PangoAttrList *list, PangoAttribute *attr) void pango_attr_list_insert_before(PangoAttrList *list, PangoAttribute *attr) PangoAttribute *pango_attr_language_new(PangoLanguage *language) PangoAttribute *pango_attr_family_new(const char *family) PangoAttribute *pango_attr_size_new(int size) PangoAttribute *pango_attr_size_new_absolute(int size) # v1.8+ PangoAttribute *pango_attr_style_new(PangoStyle style) PangoAttribute *pango_attr_weight_new(PangoWeight weight) # PangoAttribute *pango_attr_variant_new(PangoVariant variant) # PangoAttribute *pango_attr_stretch_new(PangoStretch stretch) PangoAttribute *pango_attr_font_desc_new(const PangoFontDescription *desc) PangoAttribute *pango_attr_underline_new(PangoUnderline underline) PangoAttribute *pango_attr_strikethrough_new(gboolean strikethrough) PangoAttribute *pango_attr_font_features_new(const gchar *features) # v1.38+ # https://developer.gnome.org/pango/stable/pango-Scripts-and-Languages.html cdef extern from "pango/pango-language.h" nogil: ctypedef struct PangoLanguage: pass PangoLanguage *pango_language_get_default() PangoLanguage *pango_language_from_string(const char *language) const char *pango_language_to_string(PangoLanguage *language) # https://developer.gnome.org/pango/stable/pango-FreeType-Fonts-and-Rendering.html cdef extern from "pango/pangoft2.h" nogil: ctypedef struct PangoFT2FontMap: pass ctypedef void *PangoFT2SubstituteFunc ctypedef void *GDestroyNotify PangoFT2FontMap *PANGO_FT2_FONT_MAP(PangoFontMap *fontmap) void pango_ft2_render_layout(FT_Bitmap *bitmap, PangoLayout *layout, int x, int y) void pango_ft2_render_layout_subpixel(FT_Bitmap *bitmap, PangoLayout *layout, int x, int y) void pango_ft2_font_map_set_default_substitute(PangoFT2FontMap *fontmap, PangoFT2SubstituteFunc func, gpointer data, GDestroyNotify notify) void pango_ft2_font_map_substitute_changed(PangoFT2FontMap *fontmap) # https://developer.gnome.org/pango/stable/pango-Text-Processing.html cdef extern from "pango/pango-context.h" nogil: ctypedef struct PangoContext: pass void pango_context_set_base_dir(PangoContext *context, PangoDirection direction) void pango_context_set_font_description(PangoContext *context, const PangoFontDescription *desc) PangoDirection pango_context_get_base_dir(PangoContext *context) PangoFontMetrics *pango_context_get_metrics(PangoContext *context, const PangoFontDescription *desc, PangoLanguage *language) # https://developer.gnome.org/pango/stable/pango-Bidirectional-Text.html cdef extern from "pango/pango-bidi-type.h" nogil: ctypedef enum PangoDirection: PANGO_DIRECTION_LTR PANGO_DIRECTION_RTL PANGO_DIRECTION_TTB_LTR # deprecated PANGO_DIRECTION_TTB_RTL # deprecated PANGO_DIRECTION_WEAK_LTR PANGO_DIRECTION_WEAK_RTL PANGO_DIRECTION_NEUTRAL PangoDirection pango_find_base_dir(const gchar *text, gint length) # https://developer.gnome.org/pango/stable/pango-Fonts.html cdef extern from "pango/pango-font.h" nogil: ctypedef struct PangoFontMap: pass ctypedef struct PangoFontDescription: pass ctypedef struct PangoFontMetrics: pass ctypedef struct PangoFontFamily: pass PangoFontMap *pango_ft2_font_map_new() PangoFontDescription* pango_font_description_new() PangoFontDescription* pango_font_description_from_string(const char *string) void pango_font_description_free(PangoFontDescription *desc) int pango_font_metrics_get_ascent(PangoFontMetrics *metrics) int pango_font_metrics_get_descent(PangoFontMetrics *metrics) void pango_font_metrics_unref(PangoFontMetrics *metrics) const char *pango_font_family_get_name(PangoFontFamily *family) # Font descriptions: void pango_font_description_set_family(PangoFontDescription *desc, const char *family) const char *pango_font_description_get_family(PangoFontDescription *desc) void pango_font_description_set_size(PangoFontDescription *desc, gint size) void pango_font_description_set_absolute_size(PangoFontDescription *desc, gint size) # v1.8+ gint pango_font_description_get_size(PangoFontDescription *desc) void pango_font_description_set_weight(PangoFontDescription *desc, PangoWeight weight) PangoWeight pango_font_description_get_weight(PangoFontDescription *desc) void pango_font_description_set_style(PangoFontDescription *desc, PangoStyle style) PangoStyle pango_font_description_get_style(PangoFontDescription *desc) # https://developer.gnome.org/pango/stable/pango-Fonts.html cdef extern from "pango/pango-fontmap.h" nogil: void pango_font_map_list_families(PangoFontMap *fontmap, PangoFontFamily ***families, int *n_families) # https://developer.gnome.org/pango/stable/PangoFcFontMap.html cdef extern from "pango/pangofc-fontmap.h" nogil: ctypedef struct PangoFcFontMap: pass PangoFcFontMap *PANGO_FC_FONT_MAP(PangoFontMap *fontmap) void pango_fc_font_map_set_config(PangoFcFontMap *fontmap, FcConfig *config) void pango_fc_font_map_config_changed(PangoFcFontMap *fontmap) # https://developer.gnome.org/pango/stable/pango-Layout-Objects.html cdef extern from "pango/pango-layout.h" nogil: ctypedef struct PangoLayout: pass ctypedef enum PangoAlignment: PANGO_ALIGN_LEFT PANGO_ALIGN_CENTER PANGO_ALIGN_RIGHT ctypedef enum PangoWrapMode: PANGO_WRAP_WORD PANGO_WRAP_CHAR PANGO_WRAP_WORD_CHAR ctypedef enum PangoEllipsizeMode: PANGO_ELLIPSIZE_NONE PANGO_ELLIPSIZE_START PANGO_ELLIPSIZE_MIDDLE PANGO_ELLIPSIZE_END PangoLayout *pango_layout_new(PangoContext *context) void pango_layout_context_changed(PangoLayout *layout) void pango_layout_set_attributes(PangoLayout *layout, PangoAttrList *attrs) void pango_layout_set_text(PangoLayout *layout, const char *text, int length) void pango_layout_set_markup(PangoLayout *layout, const char *markup, int length) void pango_layout_set_font_description(PangoLayout *layout, const PangoFontDescription *desc) void pango_layout_get_pixel_size(PangoLayout *layout, int *width, int *height) void pango_layout_get_size(PangoLayout *layout, int *width, int *height) int pango_layout_get_baseline(PangoLayout *layout) int pango_layout_get_line_count(PangoLayout *layout) int pango_layout_get_unknown_glyphs_count(PangoLayout *layout) gboolean pango_layout_xy_to_index(PangoLayout *layout, int x, int y, int *index, int *trailing) void pango_layout_set_ellipsize(PangoLayout *layout, PangoEllipsizeMode ellipsize) PangoEllipsizeMode pango_layout_get_ellipsize(PangoLayout *layout) gboolean pango_layout_is_ellipsized(PangoLayout *layout) void pango_layout_set_wrap(PangoLayout *layout, PangoWrapMode wrap) PangoWrapMode pango_layout_get_wrap(PangoLayout *layout) gboolean pango_layout_is_wrapped(PangoLayout *layout) void pango_layout_set_alignment(PangoLayout *layout, PangoAlignment alignment) PangoAlignment pango_layout_get_alignment(PangoLayout *layout) void pango_layout_set_auto_dir(PangoLayout *layout, gboolean auto_dir) gboolean pango_layout_get_auto_dir(PangoLayout *layout) void pango_layout_set_width(PangoLayout *layout, int width) int pango_layout_get_width(PangoLayout *layout) void pango_layout_set_height(PangoLayout *layout, int height) int pango_layout_get_height(PangoLayout *layout) void pango_layout_set_spacing(PangoLayout *layout, int spacing) int pango_layout_get_spacing(PangoLayout *layout) void pango_layout_set_indent(PangoLayout *layout, int indent) int pango_layout_get_indent(PangoLayout *layout) void pango_layout_set_justify(PangoLayout *layout, gboolean justify) gboolean pango_layout_get_justify(PangoLayout *layout) void pango_layout_set_single_paragraph_mode(PangoLayout *layout, gboolean setting) gboolean pango_layout_get_single_paragraph_mode(PangoLayout *layout) cdef extern from "../../lib/pango/pangoft2.h" nogil: PangoContext *_pango_font_map_create_context(PangoFontMap *fontmap)