ThirdParty/Jasy/jasy/js/parse/Node.py

Fri, 11 Aug 2017 14:40:54 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Fri, 11 Aug 2017 14:40:54 +0200
changeset 5843
76eee727ccd9
parent 3145
a9de05d4a22f
permissions
-rw-r--r--

Updated jasy to 1.5-beta5 (latest release available).

2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 #
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2 # Jasy - Web Tooling Framework
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
3 # Copyright 2010-2012 Zynga Inc.
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 #
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 # License: MPL 1.1/GPL 2.0/LGPL 2.1
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 # Authors:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9 # - Brendan Eich <brendan@mozilla.org> (Original JavaScript) (2004)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
10 # - Sebastian Werner <info@sebastian-werner.net> (Refactoring Python) (2010)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 #
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12
3145
a9de05d4a22f # __IGNORE_WARNING__ added/ removed.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2847
diff changeset
13 from __future__ import unicode_literals
2847
1843ef6e2656 Merge with default branch.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 2779
diff changeset
14
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
15 import json
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
16 import copy
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
17
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 class Node(list):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 __slots__ = [
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 # core data
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 "line", "type", "tokenizer", "start", "end", "rel", "parent",
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 # dynamic added data by other modules
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 "comments", "scope",
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 # node type specific
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
28 "value", "expression", "body", "functionForm", "parenthesized",
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
29 "fileId", "params", "name", "readOnly", "initializer", "condition",
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
30 "isLoop", "isEach", "object", "assignOp", "iterator", "thenPart",
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
31 "exception", "elsePart", "setup", "postfix", "update", "tryBlock",
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
32 "block", "defaultIndex", "discriminant", "label", "statements",
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
33 "finallyBlock", "statement", "variables", "names", "guard", "for",
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 "tail", "expressionClosure"
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 ]
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
37
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 def __init__(self, tokenizer=None, type=None, args=[]):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 list.__init__(self)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.start = 0
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 self.end = 0
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.line = None
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 if tokenizer:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 token = getattr(tokenizer, "token", None)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 if token:
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
48 # We may define a custom type but use the same positioning as another token
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
49 # e.g. transform curlys in block nodes, etc.
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 self.type = type if type else getattr(token, "type", None)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.line = token.line
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53 # Start & end are file positions for error handling.
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 self.start = token.start
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 self.end = token.end
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57 else:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 self.type = type
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 self.line = tokenizer.line
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 self.start = None
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 self.end = None
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63 self.tokenizer = tokenizer
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 elif type:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 self.type = type
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 for arg in args:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 self.append(arg)
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
70
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
71
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 def getUnrelatedChildren(self):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 """Collects all unrelated children"""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 collection = []
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 for child in self:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 if not hasattr(child, "rel"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 collection.append(child)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 return collection
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
81
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
82
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 def getChildrenLength(self, filter=True):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 """Number of (per default unrelated) children"""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 count = 0
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 for child in self:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 if not filter or not hasattr(child, "rel"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 count += 1
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 return count
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
91
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 def remove(self, kid):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94 """Removes the given kid"""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 if not kid in self:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 raise Exception("Given node is no child!")
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99 if hasattr(kid, "rel"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
100 delattr(self, kid.rel)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 del kid.rel
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 del kid.parent
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
104 list.remove(self, kid)
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
105
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
106
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 def insert(self, index, kid):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 """Inserts the given kid at the given index"""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 if index is None:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
111 return self.append(kid)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
113 if hasattr(kid, "parent"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 kid.parent.remove(kid)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
115
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 kid.parent = self
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
117
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 return list.insert(self, index, kid)
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
119
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
120
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 def append(self, kid, rel=None):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 """Appends the given kid with an optional relation hint"""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 # kid can be null e.g. [1, , 2].
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 if kid:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 if hasattr(kid, "parent"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
127 kid.parent.remove(kid)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
129 # Debug
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 if not isinstance(kid, Node):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
131 raise Exception("Invalid kid: %s" % kid)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
132
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
133 if hasattr(kid, "tokenizer"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
134 if hasattr(kid, "start"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 if not hasattr(self, "start") or \
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
136 self.start == None or \
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
137 kid.start < self.start:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
138 self.start = kid.start
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
139
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
140 if hasattr(kid, "end"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
141 if not hasattr(self, "end") or \
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
142 self.end == None or \
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
143 self.end < kid.end:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
144 self.end = kid.end
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
145
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
146 kid.parent = self
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
147
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
148 # alias for function
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
149 if rel != None:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
150 setattr(self, rel, kid)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
151 setattr(kid, "rel", rel)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
152
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
153 # Block None kids when they should be related
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
154 if not kid and rel:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
155 return
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
156
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
157 return list.append(self, kid)
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
158
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
159
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
160 def replace(self, kid, repl):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
161 """Replaces the given kid with a replacement kid"""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
162
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
163 if repl in self:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
164 self.remove(repl)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
165
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
166 self[self.index(kid)] = repl
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
167
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
168 if hasattr(kid, "rel"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
169 repl.rel = kid.rel
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
170 setattr(self, kid.rel, repl)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
171
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
172 # cleanup old kid
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
173 delattr(kid, "rel")
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
174
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
175
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
176 elif hasattr(repl, "rel"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
177 # delete old relation on new child
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
178 delattr(repl, "rel")
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
179
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
180 delattr(kid, "parent")
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
181 repl.parent = self
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
182
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
183 return kid
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
184
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
185
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
186 def toXml(self, format=True, indent=0, tab=" "):
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
187 """Converts the node to XML"""
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
188
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
189 lead = tab * indent if format else ""
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
190 innerLead = tab * (indent+1) if format else ""
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
191 lineBreak = "\n" if format else ""
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
192
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
193 relatedChildren = []
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
194 attrsCollection = []
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
195
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
196 for name in self.__slots__:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
197 # "type" is used as node name - no need to repeat it as an attribute
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
198 # "parent" is a relation to the parent node - for serialization we ignore these at the moment
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
199 # "rel" is used internally to keep the relation to the parent - used by nodes which need to keep track of specific children
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
200 # "start" and "end" are for debugging only
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
201 if hasattr(self, name) and name not in ("type", "parent", "comments", "rel", "start", "end") and name[0] != "_":
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
202 value = getattr(self, name)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
203 if isinstance(value, Node):
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
204 if hasattr(value, "rel"):
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
205 relatedChildren.append(value)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
206
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
207 elif type(value) in (bool, int, float, str, list, set, dict):
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
208 if type(value) == bool:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
209 value = "true" if value else "false"
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
210 elif type(value) in (int, float):
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
211 value = str(value)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
212 elif type(value) in (list, set, dict):
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
213 if type(value) == dict:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
214 value = value.keys()
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
215 if len(value) == 0:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
216 continue
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
217 try:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
218 value = ",".join(value)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
219 except TypeError:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
220 raise Exception("Invalid attribute list child at: %s" % name)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
221
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
222 attrsCollection.append('%s=%s' % (name, json.dumps(value)))
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
223
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
224 attrs = (" " + " ".join(attrsCollection)) if len(attrsCollection) > 0 else ""
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
225
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
226 comments = getattr(self, "comments", None)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
227 scope = getattr(self, "scope", None)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
228
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
229 if len(self) == 0 and len(relatedChildren) == 0 and (not comments or len(comments) == 0) and not scope:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
230 result = "%s<%s%s/>%s" % (lead, self.type, attrs, lineBreak)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
231
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
232 else:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
233 result = "%s<%s%s>%s" % (lead, self.type, attrs, lineBreak)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
234
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
235 if comments:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
236 for comment in comments:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
237 result += '%s<comment context="%s" variant="%s">%s</comment>%s' % (innerLead, comment.context, comment.variant, comment.text, lineBreak)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
238
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
239 if scope:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
240 for statKey in scope:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
241 statValue = scope[statKey]
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
242 if statValue != None and len(statValue) > 0:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
243 if type(statValue) is set:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
244 statValue = ",".join(statValue)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
245 elif type(statValue) is dict:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
246 statValue = ",".join(statValue.keys())
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
247
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
248 result += '%s<stat name="%s">%s</stat>%s' % (innerLead, statKey, statValue, lineBreak)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
249
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
250 for child in self:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
251 if not child:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
252 result += "%s<none/>%s" % (innerLead, lineBreak)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
253 elif not hasattr(child, "rel"):
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
254 result += child.toXml(format, indent+1)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
255 elif not child in relatedChildren:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
256 raise Exception("Oops, irritated by non related: %s in %s - child says it is related as %s" % (child.type, self.type, child.rel))
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
257
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
258 for child in relatedChildren:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
259 result += "%s<%s>%s" % (innerLead, child.rel, lineBreak)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
260 result += child.toXml(format, indent+2)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
261 result += "%s</%s>%s" % (innerLead, child.rel, lineBreak)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
262
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
263 result += "%s</%s>%s" % (lead, self.type, lineBreak)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
264
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
265 return result
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
266
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
267
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
268 def __deepcopy__(self, memo):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
269 """Used by deepcopy function to clone Node instances"""
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
270
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
271 # Create copy
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
272 if hasattr(self, "tokenizer"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
273 result = Node(tokenizer=self.tokenizer)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
274 else:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
275 result = Node(type=self.type)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
276
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
277 # Copy children
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
278 for child in self:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
279 if child is None:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
280 list.append(result, None)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
281 else:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
282 # Using simple list appends for better performance
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
283 childCopy = copy.deepcopy(child, memo)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
284 childCopy.parent = result
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
285 list.append(result, childCopy)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
286
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
287 # Sync attributes
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
288 # Note: "parent" attribute is handled by append() already
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
289 for name in self.__slots__:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
290 if hasattr(self, name) and not name in ("parent", "tokenizer"):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
291 value = getattr(self, name)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
292 if value is None:
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
293 pass
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
294 elif type(value) in (bool, int, float, str):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
295 setattr(result, name, value)
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
296 elif type(value) in (list, set, dict, Node):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
297 setattr(result, name, copy.deepcopy(value, memo))
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
298 # Scope can be assigned (will be re-created when needed for the copied node)
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
299 elif name == "scope":
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
300 result.scope = self.scope
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
301
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
302 return result
5843
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
303
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
304
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
305 def getSource(self):
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
306 """Returns the source code of the node"""
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
307
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
308 if not self.tokenizer:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
309 raise Exception("Could not find source for node '%s'" % node.type)
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
310
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
311 if getattr(self, "start", None) is not None:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
312 if getattr(self, "end", None) is not None:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
313 return self.tokenizer.source[self.start:self.end]
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
314 return self.tokenizer.source[self.start:]
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
315
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
316 if getattr(self, "end", None) is not None:
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
317 return self.tokenizer.source[:self.end]
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
318
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
319 return self.tokenizer.source[:]
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
320
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
321
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
322 # Map Python built-ins
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
323 __repr__ = toXml
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
324 __str__ = toXml
76eee727ccd9 Updated jasy to 1.5-beta5 (latest release available).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 3145
diff changeset
325
2779
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
326
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
327 def __eq__(self, other):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
328 return self is other
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
329
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
330 def __bool__(self):
4d433896b6d6 Added a JavaScript parser to the file browser in order to show the structure of JavaScript files
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
331 return True

eric ide

mercurial