~ubuntu-branches/ubuntu/raring/hplip/raring

« back to all changes in this revision

Viewing changes to base/utils.py

  • Committer: Bazaar Package Importer
  • Author(s): Mark Purcell
  • Date: 2009-12-14 20:08:44 UTC
  • mfrom: (2.1.118 lucid)
  • Revision ID: james.westby@ubuntu.com-20091214200844-z8qhqwgppbu3t7ze
Tags: 3.9.10-4
KBSD patch from KiBi (Closes: #560796)

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
import xml.parsers.expat as expat
43
43
import getpass
44
44
import locale
 
45
import htmlentitydefs
45
46
 
46
47
try:
47
48
    import platform
105
106
    return True, lock_file_f
106
107
 
107
108
 
108
 
xml_basename_pat = re.compile(r"""HPLIP-(\d*)_(\d*)_(\d*).xml""", re.IGNORECASE)
 
109
#xml_basename_pat = re.compile(r"""HPLIP-(\d*)_(\d*)_(\d*).xml""", re.IGNORECASE)
109
110
 
110
111
 
111
112
def Translator(frm='', to='', delete='', keep=None):
884
885
 
885
886
    def startElement(self, name, attrs):
886
887
        #print "START:", name, attrs
887
 
        self.stack.append(str(name).lower())
888
 
        self.last_start = str(name).lower()
 
888
        self.stack.append(unicode(name).lower())
 
889
        self.last_start = unicode(name).lower()
889
890
 
890
891
        if len(attrs):
891
892
            for a in attrs:
892
 
                self.stack.append(str(a).lower())
 
893
                self.stack.append(unicode(a).lower())
893
894
                self.addData(attrs[a])
894
895
                self.stack.pop()
895
896
 
901
902
        self.stack.pop()
902
903
 
903
904
    def charData(self, data):
904
 
        data = str(data).strip()
 
905
        data = unicode(data).strip()
905
906
 
906
907
        if data and self.stack:
907
908
            self.addData(data)
912
913
        try:
913
914
            data = int(data)
914
915
        except ValueError:
915
 
            data = str(data)
 
916
            data = unicode(data)
916
917
 
917
918
        stack_str = '-'.join(self.stack)
918
919
        stack_str_0 = '-'.join([stack_str, '0'])
928
929
                j = 2
929
930
                while True:
930
931
                    try:
931
 
                        self.data['-'.join([stack_str, str(j)])]
 
932
                        self.data['-'.join([stack_str, unicode(j)])]
932
933
                    except KeyError:
933
 
                        self.data['-'.join([stack_str, str(j)])] = data
 
934
                        self.data['-'.join([stack_str, unicode(j)])] = data
934
935
                        break
935
936
                    j += 1
936
937
 
945
946
        parser.StartElementHandler = self.startElement
946
947
        parser.EndElementHandler = self.endElement
947
948
        parser.CharacterDataHandler = self.charData
948
 
        parser.Parse(text, True)
 
949
        parser.Parse(text.encode('utf-8'), True)
949
950
        return self.data
950
951
 
951
952
 
1579
1580
        su_sudo_str = 'gksu "%s"'
1580
1581
 
1581
1582
    return su_sudo_str
 
1583
 
 
1584
 
 
1585
#
 
1586
# Removes HTML or XML character references and entities from a text string.
 
1587
#
 
1588
 
 
1589
def unescape(text):
 
1590
    def fixup(m):
 
1591
        text = m.group(0)
 
1592
        if text[:2] == "&#":
 
1593
            # character reference
 
1594
            try:
 
1595
                if text[:3] == "&#x":
 
1596
                    #return unichr(int(text[3:-1], 16))
 
1597
                    return chr(int(text[3:-1], 16))
 
1598
                else:
 
1599
                    #return unichr(int(text[2:-1]))
 
1600
                    return chr(int(text[2:-1]))
 
1601
            except ValueError:
 
1602
                pass
 
1603
        else:
 
1604
            # named entity
 
1605
            try:
 
1606
                #text = unichr(htmlentitydefs.name2codepoint[text[1:-1]])
 
1607
                text = chr(htmlentitydefs.name2codepoint[text[1:-1]])
 
1608
            except KeyError:
 
1609
                pass
 
1610
        return text # leave as is
 
1611
    return re.sub("&#?\w+;", fixup, text)
 
1612
 
 
1613
 
 
1614
# Adds HTML or XML character references and entities from a text string
 
1615
 
 
1616
def escape(s):
 
1617
    if not isinstance(s, unicode):
 
1618
        s = unicode(s) # hmmm...
 
1619
 
 
1620
    s = s.replace(u"&", u"&")
 
1621
 
 
1622
    for c in htmlentitydefs.codepoint2name:
 
1623
        if c != 0x26: # exclude &
 
1624
            s = s.replace(unichr(c), u"&%s;" % htmlentitydefs.codepoint2name[c])
 
1625
 
 
1626
    for c in range(0x20) + range(0x7f, 0xa0):
 
1627
        s = s.replace(unichr(c), u"&#%d;" % c)
 
1628
 
 
1629
    return s