File: globals.py

package info (click to toggle)
libreoffice 1%3A3.5.4%2Bdfsg2-0%2Bdeb7u2
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 2,691,388 kB
  • sloc: cpp: 4,678,853; java: 395,153; xml: 170,215; ansic: 99,333; perl: 60,572; python: 27,776; sh: 17,789; makefile: 8,738; yacc: 8,219; cs: 6,648; asm: 3,257; objc: 2,349; lex: 2,103; pascal: 890; awk: 758; csh: 247; lisp: 115; php: 104; sed: 9
file content (115 lines) | stat: -rw-r--r-- 2,562 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import sys

class ParseError (Exception): 
    pass

def error (msg, exit=0):
    sys.stderr.write (msg)
    if exit:
        sys.exit (exit)

def progress (msg):
    sys.stderr.write(msg)


def removeQuote (text):
    """Remove quotes from a literal.
"""
    if len(text) >= 2 and text[0] == text[len(text)-1] == '"':
        text = text[1:-1]
    return text


class Macro(object):
    def __init__ (self, name):
        self.name = name
        self.tokens = []
        self.vars = {}


class Node(object):
    def __init__ (self):
        self.children = []

    def appendChild (self, childnode):
        self.children.append(childnode)
        childnode.parent = self

    def getChildren (self):
        return self.children


class RootNode(Node):
    def __init__ (self):
        Node.__init__(self)

    def dump (self):
        chars = ''
        for child in self.getChildren():
            chars += child.dump()
        return chars


class Element(Node):

    INDENT = "    "

    def __init__ (self, name, rid = None):
        Node.__init__(self)
        self.name = name
        self.parent = None
#        print "name: " + self.name - stats ...

        # The following attributes are copied when 'clone'ed.
        self.rid = rid
        self.attrs = {}

    def dump (self, level = 0):
        chars = ''
        chars += "\n" + Element.INDENT*level
        chars += '<%s'%self.name

        if self.rid != None:
            self.setAttr("rid", self.rid)

        chars += self.__dumpAttrs()

        if len(self.children) == 0:
            chars += '/>'
        else:
            chars += '>'
            for child in self.getChildren():
                chars += child.dump(level+1)
    
            chars += "\n"+Element.INDENT*level
            chars += "</%s>"%self.name

        return chars

    def hasAttr (self, name):
        return self.attrs.has_key(name)

    def getAttr (self, name):
        return self.attrs[name]

    def setAttr (self, name, value):
        if type(value) == type(0):
            value = "%d"%value
        self.attrs[name] = removeQuote(value)
#        print "attr: " + self.name + "." + name - stats ...
        return

    def clone (self, elem):
        keys = elem.attrs.keys()
        for key in keys:
            self.attrs[key] = elem.attrs[key]
        self.rid = elem.rid

    def __dumpAttrs (self):
        text = ''
        keys = self.attrs.keys()
        keys.sort()
        for key in keys:
            value = self.attrs[key]
            text += ' %s="%s"'%(key, value)
        return text