How to escape characters in Pango markup?
Question:
My program has a gtk.TreeView
which displays a gtk.ListStore
. The gtk.ListStore
contains strings like this:
"<span size='medium'><b>"+site_title+"</b></span>"+"n"+URL
Where URL
is (obviously) a URL string. Sometimes there are characters in URL
that cause pango to fail to parse the markup.
Is there a way to escape URL
as a whole so that pango will just ignore it so it will be displayed literally? If not, how should I “escape” special characters in URLs?
Answers:
You need to escape the values. I’m not sure what exact format Pango requires, but it looks like HTML and the cgi.escape function may be all you need.
import cgi
print "<span size='medium'><b>%s</b></span>n%s" %
(cgi.escape(site_title), cgi.escape(URL))
glib.markup_escape_text
may be a more canonical approach when using GTK.
//edit queue is full, so post here
GLib.markup_escape_text
from PyGObject
demo
>>> from gi.repository import GLib
>>> GLib.markup_escape_text('abc b f < & >')
'abc   < & >'
>>>
py api docs
https://lazka.github.io/pgi-docs/#GLib-2.0/functions.html#GLib.markup_escape_text
https://pygobject.readthedocs.io
c api docs
https://docs.gtk.org/glib/func.markup_escape_text.html
My program has a gtk.TreeView
which displays a gtk.ListStore
. The gtk.ListStore
contains strings like this:
"<span size='medium'><b>"+site_title+"</b></span>"+"n"+URL
Where URL
is (obviously) a URL string. Sometimes there are characters in URL
that cause pango to fail to parse the markup.
Is there a way to escape URL
as a whole so that pango will just ignore it so it will be displayed literally? If not, how should I “escape” special characters in URLs?
You need to escape the values. I’m not sure what exact format Pango requires, but it looks like HTML and the cgi.escape function may be all you need.
import cgi
print "<span size='medium'><b>%s</b></span>n%s" %
(cgi.escape(site_title), cgi.escape(URL))
glib.markup_escape_text
may be a more canonical approach when using GTK.
//edit queue is full, so post here
GLib.markup_escape_text
from PyGObject
demo
>>> from gi.repository import GLib
>>> GLib.markup_escape_text('abc b f < & >')
'abc   < & >'
>>>
py api docs
https://lazka.github.io/pgi-docs/#GLib-2.0/functions.html#GLib.markup_escape_text
https://pygobject.readthedocs.io
c api docs
https://docs.gtk.org/glib/func.markup_escape_text.html