1/* 2 * Copyright (c) 2015- terrak <terrak1975@gmail.com> 3 * 4 * This file originated from: http://www.terrak.net/ 5 * 6 * Permission to use, copy, modify, and distribute this software for any 7 * purpose with or without fee is hereby granted, provided that the above 8 * copyright notice and this permission notice appear in all copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 */ 18 19package pango 20 21// #include <pango/pango.h> 22// #include "pango.go.h" 23import "C" 24import ( 25 "unsafe" 26 27 "github.com/gotk3/gotk3/glib" 28) 29 30func init() { 31 tm := []glib.TypeMarshaler{ 32 // Enums 33 {glib.Type(C.pango_attr_type_get_type()), marshalAttrType}, 34 {glib.Type(C.pango_underline_get_type()), marshalUnderline}, 35 } 36 glib.RegisterGValueMarshalers(tm) 37} 38 39/* PangoColor */ 40 41// Color is a representation of PangoColor. 42type Color struct { 43 pangoColor *C.PangoColor 44} 45 46// Native returns a pointer to the underlying PangoColor. 47func (v *Color) Native() uintptr { 48 return uintptr(unsafe.Pointer(v.native())) 49} 50 51func (v *Color) native() *C.PangoColor { 52 return (*C.PangoColor)(unsafe.Pointer(v.pangoColor)) 53} 54 55func (v *Color) Set(red, green, blue uint16) { 56 v.native().red = C.guint16(red) 57 v.native().green = C.guint16(green) 58 v.native().blue = C.guint16(blue) 59} 60 61func (v *Color) Get() (red, green, blue uint16) { 62 return uint16(v.native().red), uint16(v.native().green), uint16(v.native().blue) 63} 64 65//PangoColor *pango_color_copy (const PangoColor *src); 66func (v *Color) Copy(c *Color) *Color { 67 w := new(Color) 68 w.pangoColor = C.pango_color_copy(v.native()) 69 return w 70} 71 72//void pango_color_free (PangoColor *color); 73func (v *Color) Free() { 74 C.pango_color_free(v.native()) 75} 76 77//gboolean pango_color_parse (PangoColor *color, 78// const char *spec); 79func (v *Color) Parse(spec string) bool { 80 cstr := C.CString(spec) 81 defer C.free(unsafe.Pointer(cstr)) 82 c := C.pango_color_parse(v.native(), (*C.char)(cstr)) 83 return gobool(c) 84} 85 86//gchar *pango_color_to_string(const PangoColor *color); 87func (v *Color) ToString() string { 88 c := C.pango_color_to_string(v.native()) 89 return C.GoString((*C.char)(c)) 90} 91 92/* --- --- --- Attributes --- --- --- */ 93 94// AttrList is a representation of PangoAttrList. 95type AttrList struct { 96 pangoAttrList *C.PangoAttrList 97} 98 99// Native returns a pointer to the underlying PangoLayout. 100func (v *AttrList) Native() uintptr { 101 return uintptr(unsafe.Pointer(v.native())) 102} 103 104func (v *AttrList) native() *C.PangoAttrList { 105 return (*C.PangoAttrList)(unsafe.Pointer(v.pangoAttrList)) 106} 107 108func (v *AttrList) Insert(attribute *Attribute) { 109 C.pango_attr_list_insert(v.pangoAttrList, attribute.native()) 110} 111 112func AttrListNew() *AttrList { 113 c := C.pango_attr_list_new() 114 attrList := new(AttrList) 115 attrList.pangoAttrList = c 116 return attrList 117} 118 119// AttrType is a representation of Pango's PangoAttrType. 120type AttrType int 121 122const ( 123 ATTR_INVALID AttrType = C.PANGO_ATTR_INVALID /* 0 is an invalid attribute type */ 124 ATTR_LANGUAGE AttrType = C.PANGO_ATTR_LANGUAGE /* PangoAttrLanguage */ 125 ATTR_FAMILY AttrType = C.PANGO_ATTR_FAMILY /* PangoAttrString */ 126 ATTR_STYLE AttrType = C.PANGO_ATTR_STYLE /* PangoAttrInt */ 127 ATTR_WEIGHT AttrType = C.PANGO_ATTR_WEIGHT /* PangoAttrInt */ 128 ATTR_VARIANT AttrType = C.PANGO_ATTR_VARIANT /* PangoAttrInt */ 129 ATTR_STRETCH AttrType = C.PANGO_ATTR_STRETCH /* PangoAttrInt */ 130 ATTR_SIZE AttrType = C.PANGO_ATTR_SIZE /* PangoAttrSize */ 131 ATTR_FONT_DESC AttrType = C.PANGO_ATTR_FONT_DESC /* PangoAttrFontDesc */ 132 ATTR_FOREGROUND AttrType = C.PANGO_ATTR_FOREGROUND /* PangoAttrColor */ 133 ATTR_BACKGROUND AttrType = C.PANGO_ATTR_BACKGROUND /* PangoAttrColor */ 134 ATTR_UNDERLINE AttrType = C.PANGO_ATTR_UNDERLINE /* PangoAttrInt */ 135 ATTR_STRIKETHROUGH AttrType = C.PANGO_ATTR_STRIKETHROUGH /* PangoAttrInt */ 136 ATTR_RISE AttrType = C.PANGO_ATTR_RISE /* PangoAttrInt */ 137 ATTR_SHAPE AttrType = C.PANGO_ATTR_SHAPE /* PangoAttrShape */ 138 ATTR_SCALE AttrType = C.PANGO_ATTR_SCALE /* PangoAttrFloat */ 139 ATTR_FALLBACK AttrType = C.PANGO_ATTR_FALLBACK /* PangoAttrInt */ 140 ATTR_LETTER_SPACING AttrType = C.PANGO_ATTR_LETTER_SPACING /* PangoAttrInt */ 141 ATTR_UNDERLINE_COLOR AttrType = C.PANGO_ATTR_UNDERLINE_COLOR /* PangoAttrColor */ 142 ATTR_STRIKETHROUGH_COLOR AttrType = C.PANGO_ATTR_STRIKETHROUGH_COLOR /* PangoAttrColor */ 143 ATTR_ABSOLUTE_SIZE AttrType = C.PANGO_ATTR_ABSOLUTE_SIZE /* PangoAttrSize */ 144 ATTR_GRAVITY AttrType = C.PANGO_ATTR_GRAVITY /* PangoAttrInt */ 145 ATTR_GRAVITY_HINT AttrType = C.PANGO_ATTR_GRAVITY_HINT /* PangoAttrInt */ 146 147) 148 149func marshalAttrType(p uintptr) (interface{}, error) { 150 c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p))) 151 return AttrType(c), nil 152} 153 154// Underline is a representation of Pango's PangoUnderline. 155type Underline int 156 157const ( 158 UNDERLINE_NONE Underline = C.PANGO_UNDERLINE_NONE 159 UNDERLINE_SINGLE Underline = C.PANGO_UNDERLINE_SINGLE 160 UNDERLINE_DOUBLE Underline = C.PANGO_UNDERLINE_DOUBLE 161 UNDERLINE_LOW Underline = C.PANGO_UNDERLINE_LOW 162 UNDERLINE_ERROR Underline = C.PANGO_UNDERLINE_ERROR 163) 164 165func marshalUnderline(p uintptr) (interface{}, error) { 166 c := C.g_value_get_enum((*C.GValue)(unsafe.Pointer(p))) 167 return Underline(c), nil 168} 169 170const ( 171 ATTR_INDEX_FROM_TEXT_BEGINNING uint = 0 172 ATTR_INDEX_TO_TEXT_END uint = C.G_MAXUINT 173) 174 175// Attribute is a representation of Pango's PangoAttribute. 176type Attribute struct { 177 pangoAttribute *C.PangoAttribute 178 //start_index, end_index uint 179} 180 181// Native returns a pointer to the underlying PangoColor. 182func (v *Attribute) Native() uintptr { 183 return uintptr(unsafe.Pointer(v.native())) 184} 185 186func (v *Attribute) native() *C.PangoAttribute { 187 return (*C.PangoAttribute)(unsafe.Pointer(v.pangoAttribute)) 188} 189 190/* 191//typedef gboolean (*PangoAttrFilterFunc) (PangoAttribute *attribute, 192// gpointer user_data); 193func (v *Attribute) AttrFilterFunc(user_data uintptr) bool { 194 c := C.PangoAttrFilterFunc(Attribute.native(), C.gpointer(user_data)) 195 return gobool(c) 196} 197 198//typedef gpointer (*PangoAttrDataCopyFunc) (gconstpointer user_data); 199func AttrDataCopyFunc(user_data uintptr) uintptr { 200 c := C.PangoAttrDataCopyFunc(C.gpointer(user_data)) 201 return uintptr(c) 202} 203*/ 204 205// AttrClass is a representation of Pango's PangoAttrClass. 206type AttrClass struct { 207 //PangoAttrType type; 208} 209 210// AttrString is a representation of Pango's PangoAttrString. 211type AttrString struct { 212 Attribute 213 //char *value; 214} 215 216// AttrLanguage is a representation of Pango's PangoAttrLanguage. 217type AttrLanguage struct { 218 Attribute 219 //PangoLanguage *value; 220} 221 222// AttrInt is a representation of Pango's PangoAttrInt. 223type AttrInt struct { 224 Attribute 225 //int value; 226} 227 228// AttrFloat is a representation of Pango's PangoAttrFloat. 229type AttrFloat struct { 230 Attribute 231 //double value; 232} 233 234// AttrColor is a representation of Pango's AttrColor. 235type AttrColor struct { 236 Attribute 237 Color 238} 239 240// AttrSize is a representation of Pango's PangoAttrSize. 241type AttrSize struct { 242 Attribute 243 //int size; 244 //guint absolute : 1; 245} 246 247// AttrShape is a representation of Pango's PangoAttrShape. 248type AttrShape struct { 249 Attribute 250 //PangoRectangle ink_rect; 251 //PangoRectangle logical_rect; 252 253 //gpointer data; 254 //PangoAttrDataCopyFunc copy_func; 255 //GDestroyNotify destroy_func; 256} 257 258// AttrFontDesc is a representation of Pango's PangoAttrFontDesc. 259type AttrFontDesc struct { 260 Attribute 261 //PangoFontDescription *desc; 262} 263 264/* 265PangoAttrType pango_attr_type_register (const gchar *name); 266const char * pango_attr_type_get_name (PangoAttrType type) G_GNUC_CONST; 267 268void pango_attribute_init (PangoAttribute *attr, 269 const PangoAttrClass *klass); 270PangoAttribute * pango_attribute_copy (const PangoAttribute *attr); 271void pango_attribute_destroy (PangoAttribute *attr); 272gboolean pango_attribute_equal (const PangoAttribute *attr1, 273 const PangoAttribute *attr2) G_GNUC_PURE; 274 275PangoAttribute *pango_attr_language_new (PangoLanguage *language); 276PangoAttribute *pango_attr_family_new (const char *family); 277PangoAttribute *pango_attr_foreground_new (guint16 red, 278 guint16 green, 279 guint16 blue); 280PangoAttribute *pango_attr_background_new (guint16 red, 281 guint16 green, 282 guint16 blue); 283PangoAttribute *pango_attr_size_new (int size); 284PangoAttribute *pango_attr_size_new_absolute (int size); 285PangoAttribute *pango_attr_style_new (PangoStyle style); 286PangoAttribute *pango_attr_weight_new (PangoWeight weight); 287PangoAttribute *pango_attr_variant_new (PangoVariant variant); 288PangoAttribute *pango_attr_stretch_new (PangoStretch stretch); 289PangoAttribute *pango_attr_font_desc_new (const PangoFontDescription *desc); 290 291PangoAttribute *pango_attr_underline_new (PangoUnderline underline); 292PangoAttribute *pango_attr_underline_color_new (guint16 red, 293 guint16 green, 294 guint16 blue); 295PangoAttribute *pango_attr_strikethrough_new (gboolean strikethrough); 296PangoAttribute *pango_attr_strikethrough_color_new (guint16 red, 297 guint16 green, 298 guint16 blue); 299 300PangoAttribute *pango_attr_rise_new (int rise); 301PangoAttribute *pango_attr_scale_new (double scale_factor); 302PangoAttribute *pango_attr_fallback_new (gboolean enable_fallback); 303PangoAttribute *pango_attr_letter_spacing_new (int letter_spacing); 304 305PangoAttribute *pango_attr_shape_new (const PangoRectangle *ink_rect, 306 const PangoRectangle *logical_rect); 307PangoAttribute *pango_attr_shape_new_with_data (const PangoRectangle *ink_rect, 308 const PangoRectangle *logical_rect, 309 gpointer data, 310 PangoAttrDataCopyFunc copy_func, 311 GDestroyNotify destroy_func); 312 313PangoAttribute *pango_attr_gravity_new (PangoGravity gravity); 314PangoAttribute *pango_attr_gravity_hint_new (PangoGravityHint hint); 315 316GType pango_attr_list_get_type (void) G_GNUC_CONST; 317PangoAttrList * pango_attr_list_new (void); 318PangoAttrList * pango_attr_list_ref (PangoAttrList *list); 319void pango_attr_list_unref (PangoAttrList *list); 320PangoAttrList * pango_attr_list_copy (PangoAttrList *list); 321void pango_attr_list_insert (PangoAttrList *list, 322 PangoAttribute *attr); 323void pango_attr_list_insert_before (PangoAttrList *list, 324 PangoAttribute *attr); 325void pango_attr_list_change (PangoAttrList *list, 326 PangoAttribute *attr); 327void pango_attr_list_splice (PangoAttrList *list, 328 PangoAttrList *other, 329 gint pos, 330 gint len); 331 332PangoAttrList *pango_attr_list_filter (PangoAttrList *list, 333 PangoAttrFilterFunc func, 334 gpointer data); 335 336PangoAttrIterator *pango_attr_list_get_iterator (PangoAttrList *list); 337 338void pango_attr_iterator_range (PangoAttrIterator *iterator, 339 gint *start, 340 gint *end); 341gboolean pango_attr_iterator_next (PangoAttrIterator *iterator); 342PangoAttrIterator *pango_attr_iterator_copy (PangoAttrIterator *iterator); 343void pango_attr_iterator_destroy (PangoAttrIterator *iterator); 344PangoAttribute * pango_attr_iterator_get (PangoAttrIterator *iterator, 345 PangoAttrType type); 346void pango_attr_iterator_get_font (PangoAttrIterator *iterator, 347 PangoFontDescription *desc, 348 PangoLanguage **language, 349 GSList **extra_attrs); 350GSList * pango_attr_iterator_get_attrs (PangoAttrIterator *iterator); 351 352 353gboolean pango_parse_markup (const char *markup_text, 354 int length, 355 gunichar accel_marker, 356 PangoAttrList **attr_list, 357 char **text, 358 gunichar *accel_char, 359 GError **error); 360 361GMarkupParseContext * pango_markup_parser_new (gunichar accel_marker); 362gboolean pango_markup_parser_finish (GMarkupParseContext *context, 363 PangoAttrList **attr_list, 364 char **text, 365 gunichar *accel_char, 366 GError **error); 367*/ 368