source: orange/orange/fileutil.py @ 8042:ffcb93bc9028

Revision 8042:ffcb93bc9028, 1.8 KB checked in by markotoplak, 3 years ago (diff)

Hierarchical clustering: also catch RuntimeError when importing matplotlib (or the documentation could not be built on server).

Line 
1import xml.dom.minidom, re
2
3def _zip_open(zipfile, file, mode='r'):
4    if hasattr(zipfile, "open"):
5        return zipfile.open(file, mode)
6    else:
7        from cStringIO import StringIO
8        return StringIO(zipfile.read(file))
9
10def create_text_element(tag_name, value):
11    result = xml.dom.minidom.Element(tag_name)
12    textNode = xml.dom.minidom.Text()
13    textNode.data = value
14    result.appendChild(textNode)
15    return result
16
17def xml_set(parent, node_name, value):
18    child = get_element_nonrecursive(parent, node_name)
19    if not child:
20        if value:
21            parent.appendChild(create_text_element(node_name, value))
22    else:
23        if not value:
24            parent.removeChild(child)
25        else:
26            for text in child.childNodes:
27                child.removeChild(text)
28            textNode = xml.dom.minidom.Text()
29            textNode.data = value
30            child.appendChild(textNode)
31
32def xml_text_of(node, parent=None, multiline=False):
33    if node.__class__ is str:
34        node = get_element_nonrecursive(parent, node)
35    t = ""
36    if node==None:
37        return t
38    for n in node.childNodes:
39        if n.nodeType == n.COMMENT_NODE:
40            continue
41        if n.nodeType != n.TEXT_NODE:
42            break
43        t += n.data
44    if multiline:
45        t = "\n\n".join( map(lambda x: x.strip(), re.split("\n[ \t]*\n", t.strip())) )
46    else:
47        t = re.sub("\s+", " ", t.strip())
48    return t
49
50def get_element_nonrecursive(parent, elementname, create=False):
51    for node in [n for n in parent.childNodes if n.nodeType==n.ELEMENT_NODE]:
52        if node.tagName == elementname:
53            return node
54    if create:
55        node = xml.dom.minidom.Element(elementname)
56        parent.appendChild(node)
57        return node
58    return None
59   
Note: See TracBrowser for help on using the repository browser.