/** * pango_bidi_type_for_unichar: * @ch: a Unicode character * * Determines the normative bidirectional character type of a * character, as specified in the Unicode Character Database. * * A simplified version of this function is available as * pango_unichar_get_direction(). * * Return value: the bidirectional character type, as used in the * Unicode bidirectional algorithm. * * Since: 1.22 */ PangoBidiType pango_bidi_type_for_unichar (gunichar ch) { FriBidiCharType fribidi_ch_type = fribidi_get_type (ch); switch (fribidi_ch_type) { case FRIBIDI_TYPE_LTR: return PANGO_BIDI_TYPE_L; case FRIBIDI_TYPE_LRE: return PANGO_BIDI_TYPE_LRE; case FRIBIDI_TYPE_LRO: return PANGO_BIDI_TYPE_LRO; case FRIBIDI_TYPE_RTL: return PANGO_BIDI_TYPE_R; case FRIBIDI_TYPE_AL: return PANGO_BIDI_TYPE_AL; case FRIBIDI_TYPE_RLE: return PANGO_BIDI_TYPE_RLE; case FRIBIDI_TYPE_RLO: return PANGO_BIDI_TYPE_RLO; case FRIBIDI_TYPE_PDF: return PANGO_BIDI_TYPE_PDF; case FRIBIDI_TYPE_EN: return PANGO_BIDI_TYPE_EN; case FRIBIDI_TYPE_ES: return PANGO_BIDI_TYPE_ES; case FRIBIDI_TYPE_ET: return PANGO_BIDI_TYPE_ET; case FRIBIDI_TYPE_AN: return PANGO_BIDI_TYPE_AN; case FRIBIDI_TYPE_CS: return PANGO_BIDI_TYPE_CS; case FRIBIDI_TYPE_NSM: return PANGO_BIDI_TYPE_NSM; case FRIBIDI_TYPE_BN: return PANGO_BIDI_TYPE_BN; case FRIBIDI_TYPE_BS: return PANGO_BIDI_TYPE_B; case FRIBIDI_TYPE_SS: return PANGO_BIDI_TYPE_S; case FRIBIDI_TYPE_WS: return PANGO_BIDI_TYPE_WS; case FRIBIDI_TYPE_ON: return PANGO_BIDI_TYPE_ON; default: g_assert_not_reached (); return PANGO_BIDI_TYPE_ON; } }
FRIBIDI_API void fribidi_get_types ( /* input */ FriBidiChar *str, FriBidiStrIndex len, /* output */ FriBidiCharType *type) { FriBidiStrIndex i; for (i = 0; i < len; i++) type[i] = fribidi_get_type (str[i]); }
/** * pango_unichar_direction: * @ch: a Unicode character * * Determines the inherent direction of a character; either * %PANGO_DIRECTION_LTR, %PANGO_DIRECTION_RTL, or * %PANGO_DIRECTION_NEUTRAL. * * This function is useful to categorize characters into left-to-right * letters, right-to-left letters, and everything else. If full * Unicode bidirectional type of a character is needed, * pango_bidi_type_for_gunichar() can be used instead. * * Return value: the direction of the character. */ PangoDirection pango_unichar_direction (gunichar ch) { FriBidiCharType fribidi_ch_type = fribidi_get_type (ch); if (!FRIBIDI_IS_STRONG (fribidi_ch_type)) return PANGO_DIRECTION_NEUTRAL; else if (FRIBIDI_IS_RTL (fribidi_ch_type)) return PANGO_DIRECTION_RTL; else return PANGO_DIRECTION_LTR; }