mirror of
https://github.com/tromey/gdb-gui.git
synced 2025-07-21 13:01:16 +02:00
This can't easily be done at present, see the new files for some links. Meanwhile I decided to take another route.
132 lines
4.0 KiB
Python
132 lines
4.0 KiB
Python
# From
|
|
# https://bug646788.bugzilla-attachments.gnome.org/attachment.cgi?id=221735
|
|
|
|
from gi.repository import Pango
|
|
|
|
#Pango.AttrList
|
|
class AttrIterator():
|
|
def __init__ (self, attributes=[]):
|
|
self.attributes = attributes
|
|
self.attribute_stack = []
|
|
self.start_index = 0
|
|
self.end_index = 0
|
|
if not self.next():
|
|
self.end_index = 2**32 -1
|
|
|
|
def __next__(self):
|
|
return self.next()
|
|
|
|
def __iter__(self):
|
|
return self
|
|
|
|
def next(self):
|
|
if len(self.attributes) == 0 and len(self.attribute_stack) == 0:
|
|
return False
|
|
self.start_index = self.end_index
|
|
self.end_index = 2**32 - 1
|
|
|
|
to_remove = []
|
|
for attr in self.attribute_stack:
|
|
if attr.end_index == self.start_index:
|
|
to_remove.append(attr)
|
|
else:
|
|
self.end_index = min(self.end_index, attr.end_index)
|
|
|
|
while len(to_remove) > 0:
|
|
attr = to_remove[0]
|
|
self.attribute_stack.remove(to_remove[0])
|
|
try:
|
|
to_remove.remove(attr)
|
|
except:
|
|
pass
|
|
|
|
while len(self.attributes) != 0 and \
|
|
self.attributes[0].start_index == self.start_index:
|
|
if self.attributes[0].end_index > self.start_index:
|
|
self.attribute_stack.append(self.attributes[0])
|
|
self.end_index = min(self.end_index, self.attributes[0].end_index)
|
|
self.attributes = self.attributes[1:]
|
|
if len(self.attributes) > 0:
|
|
self.end_index = min(self.end_index, self.attributes[0].start_index)
|
|
return True
|
|
|
|
def range(self):
|
|
return (self.start_index, self.end_index)
|
|
|
|
#Dont create pango.fontdesc as it should. But half working.
|
|
def get_font(self):
|
|
tmp_list1 = self.attribute_stack
|
|
fontdesc = Pango.FontDescription()
|
|
for attr in self.attribute_stack:
|
|
if attr.klass.type == Pango.ATTR_FONT_DESC:
|
|
tmp_list1.remove(attr)
|
|
attr.__class__ = gi.repository.Pango.AttrFontDesc
|
|
fontdesc = attr.desc
|
|
return (fontdesc, None, self.attribute_stack)
|
|
|
|
|
|
|
|
def get_iterator(self):
|
|
tmplist = []
|
|
def fil(val, data):
|
|
tmplist.append(val)
|
|
return False
|
|
self.filter(fil, None)
|
|
return AttrIterator(tmplist)
|
|
|
|
|
|
setattr(Pango.AttrList, 'get_iterator', get_iterator)
|
|
class AttrFamily(Pango.Attribute):
|
|
pass
|
|
Pango.AttrFamily = AttrFamily
|
|
|
|
class AttrStyle(Pango.Attribute):
|
|
pass
|
|
Pango.AttrStyle = AttrStyle
|
|
|
|
class AttrVariant(Pango.Attribute):
|
|
pass
|
|
Pango.AttrVariant = AttrVariant
|
|
|
|
class AttrWeight(Pango.Attribute):
|
|
pass
|
|
Pango.AttrWeight = AttrWeight
|
|
|
|
class AttrVariant(Pango.Attribute):
|
|
pass
|
|
Pango.AttrVariant = AttrVariant
|
|
|
|
class AttrStretch(Pango.Attribute):
|
|
pass
|
|
Pango.AttrStretch = AttrStretch
|
|
|
|
|
|
# And to access values
|
|
# pango_type_table = {
|
|
# pango.ATTR_SIZE: gi.repository.Pango.AttrInt,
|
|
# pango.ATTR_WEIGHT: gi.repository.Pango.AttrInt,
|
|
# pango.ATTR_UNDERLINE: gi.repository.Pango.AttrInt,
|
|
# pango.ATTR_STRETCH: gi.repository.Pango.AttrInt,
|
|
# pango.ATTR_VARIANT: gi.repository.Pango.AttrInt,
|
|
# pango.ATTR_STYLE: gi.repository.Pango.AttrInt,
|
|
# pango.ATTR_SCALE: gi.repository.Pango.AttrFloat,
|
|
# pango.ATTR_FAMILY: gi.repository.Pango.AttrString,
|
|
# pango.ATTR_FONT_DESC: gi.repository.Pango.AttrFontDesc,
|
|
# pango.ATTR_STRIKETHROUGH: gi.repository.Pango.AttrInt,
|
|
# pango.ATTR_BACKGROUND: gi.repository.Pango.AttrColor,
|
|
# pango.ATTR_FOREGROUND: gi.repository.Pango.AttrColor,
|
|
# pango.ATTR_RISE: gi.repository.Pango.AttrInt}
|
|
|
|
# def make_with_value(a):
|
|
# type_ = a.klass.type
|
|
# klass = a.klass
|
|
# start_index = a.start_index
|
|
# end_index = a.end_index
|
|
# #Nasty workaround, but then python object gets value field.
|
|
# a.__class__ = self.pango_type_table[type_]
|
|
# a.type = type_
|
|
# a.start_index = start_index
|
|
# a.end_index = end_index
|
|
# a.klass = klass
|
|
# return a
|