Browse code

Use pango markup.

Jose Fonseca authored on 14/07/2015 21:16:32
Showing 1 changed files

  • xdot.py index df9e61d..e5cab56 100755
... ...
@@ -137,32 +137,31 @@ class TextShape(Shape):
137 137
 
138 138
             # set font
139 139
             font = pango.FontDescription()
140
-            attrs = pango.AttrList()
141 140
 
142
-            # set font attributes
141
+            # https://developer.gnome.org/pango/stable/PangoMarkupFormat.html
142
+            markup = gobject.markup_escape_text(self.t)
143 143
             if self.pen.bold:
144
-                font.set_weight(pango.WEIGHT_BOLD)
144
+                markup = '<b>' + markup + '</b>'
145 145
             if self.pen.italic:
146
-                font.set_style(pango.STYLE_ITALIC)
146
+                markup = '<i>' + markup + '</i>'
147 147
             if self.pen.underline:
148
-                underline = pango.AttrUnderline(pango.UNDERLINE_SINGLE, 0, len(self.t))
149
-                attrs.insert(underline)
148
+                markup = '<span underline="single">' + markup + '</span>'
150 149
             if self.pen.strikethrough:
151
-                st =  pango.AttrStrikethrough(True, 0, len(self.t))
152
-                attrs.insert(st)
150
+                markup = '<s>' + markup + '</s>'
151
+            if self.pen.superscript:
152
+                markup = '<sup><small>' + markup + '</small></sup>'
153
+            if self.pen.subscript:
154
+                markup = '<sub><small>' + markup + '</small></sub>'
153 155
 
156
+            attrs, text, accel_char = pango.parse_markup(markup, u'\x00')
154 157
             layout.set_attributes(attrs)
155 158
 
156
-            fontsize = self.pen.fontsize
157
-            if self.pen.superscript or self.pen.subscript:
158
-                fontsize /= 1.5
159
-
160 159
             font.set_family(self.pen.fontname)
161
-            font.set_absolute_size(fontsize*pango.SCALE)
160
+            font.set_absolute_size(self.pen.fontsize*pango.SCALE)
162 161
             layout.set_font_description(font)
163 162
 
164 163
             # set text
165
-            layout.set_text(self.t)
164
+            layout.set_text(text)
166 165
 
167 166
             # cache it
168 167
             self.layout = layout
... ...
@@ -195,10 +194,7 @@ class TextShape(Shape):
195 194
         else:
196 195
             assert 0
197 196
 
198
-        if self.pen.superscript:
199
-            y = self.y - 1.5*height
200
-        else:
201
-            y = self.y - height + descent
197
+        y = self.y - height + descent
202 198
 
203 199
         cr.move_to(x, y)
204 200