/* pango.c generated by valac 0.40.8, the Vala compiler * generated from pango.vala, do not modify */ /* vim:set et sts=4 sw=4: * * ibus - The Input Bus * * Copyright(c) 2011 Peng Huang * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA */ #include #include #include #include #include #include #define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) #define _pango_attribute_destroy0(var) ((var == NULL) ? NULL : (var = (pango_attribute_destroy (var), NULL))) #define _pango_attr_list_unref0(var) ((var == NULL) ? NULL : (var = (pango_attr_list_unref (var), NULL))) PangoAttrList* get_pango_attr_list_from_ibus_text (IBusText* text); static gint string_index_of_nth_char (const gchar* self, glong c) { gint result = 0; gchar* _tmp0_; g_return_val_if_fail (self != NULL, 0); _tmp0_ = g_utf8_offset_to_pointer (self, c); result = (gint) (_tmp0_ - ((gchar*) self)); return result; } static gpointer _g_object_ref0 (gpointer self) { return self ? g_object_ref (self) : NULL; } PangoAttrList* get_pango_attr_list_from_ibus_text (IBusText* text) { PangoAttrList* result = NULL; PangoAttrList* pango_attrs = NULL; PangoAttrList* _tmp0_; IBusAttrList* attrs = NULL; IBusAttrList* _tmp1_; IBusAttrList* _tmp2_; const gchar* str = NULL; const gchar* _tmp3_; glong nchars = 0L; const gchar* _tmp4_; glong* offsets = NULL; glong _tmp5_; glong* _tmp6_; gint offsets_length1; gint _offsets_size_; IBusAttribute* attr = NULL; gint i = 0; g_return_val_if_fail (text != NULL, NULL); _tmp0_ = pango_attr_list_new (); pango_attrs = _tmp0_; _tmp1_ = ibus_text_get_attributes (text); attrs = _tmp1_; _tmp2_ = attrs; if (_tmp2_ == NULL) { result = pango_attrs; return result; } _tmp3_ = ibus_text_get_text (text); str = _tmp3_; _tmp4_ = str; nchars = (glong) g_utf8_strlen (_tmp4_, (gssize) -1); _tmp5_ = nchars; _tmp6_ = g_new0 (glong, _tmp5_ + 1); offsets = _tmp6_; offsets_length1 = _tmp5_ + 1; _offsets_size_ = offsets_length1; { gint i = 0; i = 0; { gboolean _tmp7_ = FALSE; _tmp7_ = TRUE; while (TRUE) { gint _tmp9_; glong _tmp10_; glong* _tmp11_; gint _tmp11__length1; gint _tmp12_; const gchar* _tmp13_; gint _tmp14_; glong _tmp15_; if (!_tmp7_) { gint _tmp8_; _tmp8_ = i; i = _tmp8_ + 1; } _tmp7_ = FALSE; _tmp9_ = i; _tmp10_ = nchars; if (!(((glong) _tmp9_) <= _tmp10_)) { break; } _tmp11_ = offsets; _tmp11__length1 = offsets_length1; _tmp12_ = i; _tmp13_ = str; _tmp14_ = i; _tmp11_[_tmp12_] = (glong) string_index_of_nth_char (_tmp13_, (glong) _tmp14_); _tmp15_ = _tmp11_[_tmp12_]; } } } i = 0; while (TRUE) { IBusAttrList* _tmp16_; gint _tmp17_; IBusAttribute* _tmp18_; IBusAttribute* _tmp19_; IBusAttribute* _tmp20_; glong start_index = 0L; IBusAttribute* _tmp21_; guint _tmp22_; glong _tmp23_; glong _tmp24_ = 0L; glong _tmp25_; glong _tmp26_; glong end_index = 0L; IBusAttribute* _tmp32_; guint _tmp33_; glong _tmp34_; glong _tmp35_ = 0L; glong _tmp36_; glong _tmp37_; PangoAttribute* pango_attr = NULL; IBusAttribute* _tmp43_; guint _tmp44_; PangoAttribute* _tmp68_; glong _tmp69_; PangoAttribute* _tmp70_; glong _tmp71_; PangoAttrList* _tmp72_; PangoAttribute* _tmp73_; _tmp16_ = attrs; _tmp17_ = i; i = _tmp17_ + 1; _tmp18_ = ibus_attr_list_get (_tmp16_, (guint) _tmp17_); _tmp19_ = _g_object_ref0 (_tmp18_); _g_object_unref0 (attr); attr = _tmp19_; _tmp20_ = attr; if (_tmp20_ == NULL) { break; } _tmp21_ = attr; _tmp22_ = _tmp21_->start_index; start_index = (glong) _tmp22_; _tmp23_ = start_index; if (_tmp23_ <= ((glong) 0)) { start_index = (glong) 0; } _tmp25_ = start_index; _tmp26_ = nchars; if (_tmp25_ <= _tmp26_) { glong* _tmp27_; gint _tmp27__length1; glong _tmp28_; glong _tmp29_; _tmp27_ = offsets; _tmp27__length1 = offsets_length1; _tmp28_ = start_index; _tmp29_ = _tmp27_[_tmp28_]; _tmp24_ = _tmp29_; } else { glong* _tmp30_; gint _tmp30__length1; glong _tmp31_; _tmp30_ = offsets; _tmp30__length1 = offsets_length1; _tmp31_ = _tmp30_[-1]; _tmp24_ = _tmp31_; } start_index = _tmp24_; _tmp32_ = attr; _tmp33_ = _tmp32_->end_index; end_index = (glong) _tmp33_; _tmp34_ = end_index; if (_tmp34_ <= ((glong) 0)) { end_index = (glong) 0; } _tmp36_ = end_index; _tmp37_ = nchars; if (_tmp36_ <= _tmp37_) { glong* _tmp38_; gint _tmp38__length1; glong _tmp39_; glong _tmp40_; _tmp38_ = offsets; _tmp38__length1 = offsets_length1; _tmp39_ = end_index; _tmp40_ = _tmp38_[_tmp39_]; _tmp35_ = _tmp40_; } else { glong* _tmp41_; gint _tmp41__length1; glong _tmp42_; _tmp41_ = offsets; _tmp41__length1 = offsets_length1; _tmp42_ = _tmp41_[-1]; _tmp35_ = _tmp42_; } end_index = _tmp35_; pango_attr = NULL; _tmp43_ = attr; _tmp44_ = _tmp43_->type; switch (_tmp44_) { case IBUS_ATTR_TYPE_FOREGROUND: { { guint16 r = 0U; IBusAttribute* _tmp45_; guint _tmp46_; guint16 g = 0U; IBusAttribute* _tmp47_; guint _tmp48_; guint16 b = 0U; IBusAttribute* _tmp49_; guint _tmp50_; guint16 _tmp51_; guint16 _tmp52_; guint16 _tmp53_; PangoAttribute* _tmp54_; _tmp45_ = attr; _tmp46_ = _tmp45_->value; r = (guint16) ((_tmp46_ & 0x00ff0000) >> 8); _tmp47_ = attr; _tmp48_ = _tmp47_->value; g = (guint16) (_tmp48_ & 0x0000ff00); _tmp49_ = attr; _tmp50_ = _tmp49_->value; b = (guint16) ((_tmp50_ & 0x000000ff) << 8); _tmp51_ = r; _tmp52_ = g; _tmp53_ = b; _tmp54_ = pango_attr_foreground_new (_tmp51_, _tmp52_, _tmp53_); _pango_attribute_destroy0 (pango_attr); pango_attr = _tmp54_; break; } } case IBUS_ATTR_TYPE_BACKGROUND: { { guint16 r = 0U; IBusAttribute* _tmp55_; guint _tmp56_; guint16 g = 0U; IBusAttribute* _tmp57_; guint _tmp58_; guint16 b = 0U; IBusAttribute* _tmp59_; guint _tmp60_; guint16 _tmp61_; guint16 _tmp62_; guint16 _tmp63_; PangoAttribute* _tmp64_; _tmp55_ = attr; _tmp56_ = _tmp55_->value; r = (guint16) ((_tmp56_ & 0x00ff0000) >> 8); _tmp57_ = attr; _tmp58_ = _tmp57_->value; g = (guint16) (_tmp58_ & 0x0000ff00); _tmp59_ = attr; _tmp60_ = _tmp59_->value; b = (guint16) ((_tmp60_ & 0x000000ff) << 8); _tmp61_ = r; _tmp62_ = g; _tmp63_ = b; _tmp64_ = pango_attr_background_new (_tmp61_, _tmp62_, _tmp63_); _pango_attribute_destroy0 (pango_attr); pango_attr = _tmp64_; break; } } case IBUS_ATTR_TYPE_UNDERLINE: { { IBusAttribute* _tmp65_; guint _tmp66_; PangoAttribute* _tmp67_; _tmp65_ = attr; _tmp66_ = _tmp65_->value; _tmp67_ = pango_attr_underline_new ((PangoUnderline) _tmp66_); _pango_attribute_destroy0 (pango_attr); pango_attr = _tmp67_; break; } } default: { continue; } } _tmp68_ = pango_attr; _tmp69_ = start_index; _tmp68_->start_index = (guint) _tmp69_; _tmp70_ = pango_attr; _tmp71_ = end_index; _tmp70_->end_index = (guint) _tmp71_; _tmp72_ = pango_attrs; _tmp73_ = pango_attr; pango_attr = NULL; pango_attr_list_insert (_tmp72_, _tmp73_); _pango_attribute_destroy0 (pango_attr); } result = pango_attrs; _g_object_unref0 (attr); offsets = (g_free (offsets), NULL); return result; }