annotate orpg/tools/InterParse.py @ 212:13054be69834 beta

Traipse Beta 'OpenRPG' {100428-00} Traipse is a distribution of OpenRPG that is designed to be easy to setup and go. Traipse also makes it easy for developers to work on code without fear of sacrifice. 'Ornery-Orc' continues the trend of 'Grumpy' and adds fixes to the code. 'Ornery-Orc's main goal is to offer more advanced features and enhance the productivity of the user. Update Summary (Patch-2) New Features: New Namespace method with two new syntaxes New Namespace Internal is context sensitive, always! New Namespace External is 'as narrow as you make it' New Namespace FutureCheck helps ensure you don't receive an incorrect node New PluginDB access for URL2Link plugin New to Forms, they now show their content in Design Mode New to Update Manager, checks Repo for updates on software start Fixes: Fix to Server GUI startup errors Fix to Server GUI Rooms tab updating Fix to Chat and Settings if non existant die roller is picked Fix to Dieroller and .open() used with .vs(). Successes are correctly calculated Fix to Alias Lib's Export to Tree, Open, Save features Fix to alias node, now works properly Fix to Splitter node, minor GUI cleanup Fix to Backgrounds not loading through remote loader Fix to Node name errors Fix to rolling dice in chat Whispers Fix to Splitters Sizing issues Fix to URL2Link plugin, modified regex compilation should remove memory leak Fix to mapy.py, a roll back due to zoomed grid issues Fix to whiteboard_handler, Circles work by you clicking the center of the circle Fix to Servers parse_incoming_dom which was outdated and did not respect XML Fix to a broken link in the server welcome message Fix to InterParse and logger requiring traceback Fix to Update Manager Status Bar Fix to failed image and erroneous pop up
author sirebral
date Wed, 28 Apr 2010 08:08:09 -0500
parents 44ef45e77880
children bb7b9648792c
rev   line source
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
1 #!/usr/bin/env python
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
2 # Copyright (C) 2000-2010 The OpenRPG Project
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
3 #
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
4 # openrpg-dev@lists.sourceforge.net
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
5 #
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
6 # This program is free software; you can redistribute it and/or modify
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
7 # it under the terms of the GNU General Public License as published by
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
8 # the Free Software Foundation; either version 2 of the License, or
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
9 # (at your option) any later version.
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
10 #
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
11 # This program is distributed in the hope that it will be useful,
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
14 # GNU General Public License for more details.
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
15 #
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
16 # You should have received a copy of the GNU General Public License
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
17 # along with this program; if not, write to the Free Software
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
18 # Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
19 # --
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
20 #
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
21 # File: InterParse.py
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
22 # Author:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
23 # Maintainer: Tyler Starke (Traipse)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
24 # Version:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
25 # $Id: InterParse.py,v Traipse 'Ornery-Orc' prof.ebral Exp $
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
26 #
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
27 # Description: InterParse = Interpretor Parser. This class parses all of the node referencing.
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
28 #
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
29
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
30 from orpg.orpgCore import component
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
31 import re
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
32 from orpg.tools.orpg_log import logger
194
44ef45e77880 Traipse Beta 'OpenRPG' {100201-03}
sirebral
parents: 192
diff changeset
33 from wx import TextEntryDialog, ID_OK
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
34 from xml.etree.ElementTree import iselement
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
35
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
36 class InterParse():
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
37
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
38 def __init__(self):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
39 pass
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
40
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
41 def Post(self, s, tab=False, send=False, myself=False):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
42 if not tab: tab = component.get('chat')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
43 s = self.Normalize(s, tab)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
44 tab.set_colors()
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
45 tab.Post(s, send, myself)
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
46
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
47 def ParseLogic(self, s, node):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
48 'Nodes now parse through ParsLogic. Easily add new parse rules right here!!'
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
49 s = self.NameSpaceE(s)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
50 s = self.NameSpaceI(s, node)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
51 s = self.NodeMap(s, node)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
52 s = self.NodeParent(s, node.get('map'))
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
53 return s
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
54
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
55 def Normalize(self, s, tab):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
56 for plugin_fname in tab.activeplugins.keys():
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
57 plugin = tab.activeplugins[plugin_fname]
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
58 try: s = plugin.pre_parse(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
59 except Exception, e:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
60 if str(e) != "'module' object has no attribute 'post_msg'":
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
61 #logger.general(traceback.format_exc())
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
62 logger.general("EXCEPTION: " + str(e))
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
63 if tab.parsed == 0:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
64 s = self.NameSpaceE(s)
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
65 s = self.Node(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
66 s = self.Dice(s)
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
67 s = self.Filter(s, tab)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
68 tab.parsed = 1
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
69 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
70
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
71 def Filter(self, s, tab):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
72 s = tab.GetFilteredText(s)
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
73 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
74
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
75 def Node(self, s):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
76 """Parses player input for embedded nodes rolls"""
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
77 cur_loc = 0
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
78 #[a-zA-Z0-9 _\-\.]
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
79 reg = re.compile("(!@(.*?)@!)")
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
80 matches = reg.findall(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
81 for i in xrange(0,len(matches)):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
82 newstr = self.Node(self.resolve_nodes(matches[i][1]))
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
83 s = s.replace(matches[i][0], newstr, 1)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
84 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
85
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
86 def Dice(self, s):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
87 """Parses player input for embedded dice rolls"""
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
88 reg = re.compile("\[([^]]*?)\]")
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
89 matches = reg.findall(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
90 for i in xrange(0,len(matches)):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
91 newstr = self.Unknown(matches[i])
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
92 qmode = 0
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
93 newstr1 = newstr
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
94 if newstr[0].lower() == 'q':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
95 newstr = newstr[1:]
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
96 qmode = 1
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
97 if newstr[0].lower() == '#':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
98 newstr = newstr[1:]
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
99 qmode = 2
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
100 try: newstr = component.get('DiceManager').proccessRoll(newstr)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
101 except: pass
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
102 if qmode == 1:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
103 s = s.replace("[" + matches[i] + "]",
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
104 "<!-- Official Roll [" + newstr1 + "] => " + newstr + "-->" + newstr, 1)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
105 elif qmode == 2:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
106 s = s.replace("[" + matches[i] + "]", newstr[len(newstr)-2:-1], 1)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
107 else: s = s.replace("[" + matches[i] + "]",
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
108 "[" + newstr1 + "<!-- Official Roll -->] => " + newstr, 1)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
109 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
110
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
111 def Unknown(self, s):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
112 # Uses a tuple. Usage: ?Label}dY. If no Label is assigned then use ?}DY
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
113 newstr = "0"
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
114 reg = re.compile("(\?\{*)([a-zA-Z ]*)(\}*)")
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
115 matches = reg.findall(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
116 for i in xrange(0,len(matches)):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
117 lb = "Replace '?' with: "
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
118 if len(matches[i][0]):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
119 lb = matches[i][1] + "?: "
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
120 dlg = TextEntryDialog(component.get('chat'), lb, "Missing Value?")
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
121 dlg.SetValue('')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
122 if matches[i][0] != '':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
123 dlg.SetTitle("Enter Value for " + matches[i][1])
194
44ef45e77880 Traipse Beta 'OpenRPG' {100201-03}
sirebral
parents: 192
diff changeset
124 if dlg.ShowModal() == ID_OK: newstr = dlg.GetValue()
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
125 if newstr == '': newstr = '0'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
126 s = s.replace(matches[i][0], newstr, 1).replace(matches[i][1], '', 1).replace(matches[i][2], '', 1)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
127 dlg.Destroy()
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
128 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
129
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
130 def LocationCheck(self, node, tree_map, new_map, find):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
131 if node == 'Invalid Reference!': return node
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
132 namespace = node.getiterator('nodehandler'); tr = tree_map.split('::')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
133 newstr = ''
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
134 for name in namespace:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
135 try: t = new_map.index(name.get('name'))-1
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
136 except: t = 0
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
137 if find[0] == name.get('name'):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
138 s = '::'.join(new_map[:len(tr)-t])+'::'+'::'.join(find)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
139 newstr = self.NameSpaceE('!&' +s+ '&!')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
140 break
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
141 if newstr != '': return newstr
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
142 else:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
143 del new_map[len(new_map)-1]
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
144 node = self.get_node(new_map)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
145 newstr = self.LocationCheck(node, tree_map, new_map, find)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
146 return newstr
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
147
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
148 def FutureCheck(self, node, next):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
149 future = node.getiterator('nodehandler')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
150 for advance in future:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
151 if next == advance.get('name'): return True
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
152 return False
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
153
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
154 def NameSpaceI(self, s, node):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
155 reg = re.compile("(!=(.*?)=!)")
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
156 matches = reg.findall(s)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
157 tree_map = node.get('map')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
158 for i in xrange(0,len(matches)):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
159 ## Build the new tree_map
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
160 new_map = tree_map.split('::')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
161 find = matches[i][1].split('::')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
162 ## Backwards Reference the Parent Children
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
163 node = self.get_node(new_map)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
164 newstr = self.LocationCheck(node, tree_map, new_map, find)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
165 s = s.replace(matches[i][0], newstr, 1)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
166 return s
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
167
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
168 def NameSpaceE(self, s):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
169 reg = re.compile("(!&(.*?)&!)")
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
170 matches = reg.findall(s)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
171 newstr = False
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
172 nodeable = ['rpg_grid_handler', 'container_handler',
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
173 'group_handler', 'tabber_handler',
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
174 'splitter_handler', 'form_handler', 'textctrl_handler']
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
175 for i in xrange(0,len(matches)):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
176 find = matches[i][1].split('::')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
177 node = component.get('tree').xml_root
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
178 if not iselement(node):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
179 s = s.replace(matches[i][0], 'Invalid Reference!', 1);
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
180 s = self.NameSpaceE(s)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
181 return s
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
182 for x in xrange(0, len(find)):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
183 namespace = node.getiterator('nodehandler')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
184 for node in namespace:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
185 if find[x] == node.get('name'):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
186 if node.get('class') not in nodeable: continue
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
187 if node.get('class') == 'rpg_grid_handler':
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
188 try: newstr = self.NameSpaceGrid(find[x+1], node); break
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
189 except: newstr = 'Invalid Grid Reference!'
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
190 try:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
191 if self.FutureCheck(node, find[x+1]): break
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
192 else: continue
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
193 except:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
194 if x == len(find)-1:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
195 if node.find('text') != None: newstr = str(node.find('text').text)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
196 else: newstr = 'Invalid Reference!'
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
197 break
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
198 else: break
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
199 if not newstr: newstr = 'Invalid Reference!'
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
200 s = s.replace(matches[i][0], newstr, 1)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
201 s = self.ParseLogic(s, node)
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
202 return s
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
203
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
204 def NameSpaceGrid(self, s, node):
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
205 cell = tuple(s.strip('(').strip(')').split(','))
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
206 grid = node.find('grid')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
207 rows = grid.findall('row')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
208 try:
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
209 col = rows[int(self.Dice(cell[0]))-1].findall('cell')
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
210 s = self.ParseLogic(col[int(self.Dice(cell[1]))-1].text, node) or 'No Cell Data'
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
211 except: s = 'Invalid Grid Reference!'
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
212 return s
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
213
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
214 def NodeMap(self, s, node):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
215 """Parses player input for embedded nodes rolls"""
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
216 cur_loc = 0
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
217 reg = re.compile("(!!(.*?)!!)")
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
218 matches = reg.findall(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
219 for i in xrange(0,len(matches)):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
220 tree_map = node.get('map')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
221 tree_map = tree_map + '::' + matches[i][1]
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
222 newstr = '!@'+ tree_map +'@!'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
223 s = s.replace(matches[i][0], newstr, 1)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
224 s = self.Node(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
225 s = self.NodeParent(s, tree_map)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
226 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
227
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
228 def NodeParent(self, s, tree_map):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
229 """Parses player input for embedded nodes rolls"""
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
230 cur_loc = 0
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
231 reg = re.compile("(!#(.*?)#!)")
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
232 matches = reg.findall(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
233 for i in xrange(0,len(matches)):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
234 ## Build the new tree_map
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
235 new_map = tree_map.split('::')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
236 del new_map[len(new_map)-1]
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
237 parent_map = matches[i][1].split('::')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
238 ## Backwards Reference the Parent Children
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
239 child_node = self.get_node(new_map)
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
240 newstr = self.get_root(child_node, tree_map, new_map, parent_map)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
241 s = s.replace(matches[i][0], newstr, 1)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
242 s = self.Node(s)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
243 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
244
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
245 def get_root(self, child_node, tree_map, new_map, parent_map):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
246 if child_node == 'Invalid Reference!': return child_node
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
247 roots = child_node.getchildren(); tr = tree_map.split('::')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
248 newstr = ''
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
249 for root in roots:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
250 try: t = new_map.index(root.get('name'))
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
251 except: t = 1
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
252 if parent_map[0] == root.get('name'):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
253 newstr = '!@' + '::'.join(new_map[:len(tr)-t]) + '::' + '::'.join(parent_map) + '@!'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
254 if newstr != '': return newstr
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
255 else:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
256 del new_map[len(new_map)-1]
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
257 child_node = self.get_node(new_map)
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
258 newstr = self.get_root(child_node, tree_map, new_map, parent_map)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
259 return newstr
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
260
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
261 def get_node(self, path):
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
262 return_node = 'Invalid Reference!'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
263 value = ""
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
264 depth = len(path)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
265 try: node = component.get('tree').tree_map[path[0]]['node']
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
266 except Exception, e: return return_node
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
267 return_node = self.resolve_get_loop(node, path, 1, depth)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
268 return return_node
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
269
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
270 def resolve_get_loop(self, node, path, step, depth):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
271 if step == depth: return node
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
272 else:
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
273 child_list = node.getchildren()
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
274 for child in child_list:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
275 if step == depth: break
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
276 if child.get('name') == path[step]:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
277 node = self.resolve_get_loop(child, path, step+1, depth)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
278 return node
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
279
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
280 def resolve_nodes(self, s):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
281 self.passed = False
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
282 string = 'Invalid Reference!'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
283 value = ""
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
284 path = s.split('::')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
285 depth = len(path)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
286 try: node = component.get('tree').tree_map[path[0]]['node']
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
287 except Exception, e: return string
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
288 if node.get('class') in ('dnd35char_handler',
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
289 "SWd20char_handler",
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
290 "d20char_handler",
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
291 "dnd3echar_handler"): string = self.resolve_cust_loop(node, path, 1, depth)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
292 elif node.get('class') == 'rpg_grid_handler': self.resolve_grid(node, path, 1, depth)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
293 else: string = self.resolve_loop(node, path, 1, depth)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
294 return string
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
295
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
296 def resolve_loop(self, node, path, step, depth):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
297 if step == depth: return self.resolution(node)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
298 else:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
299 child_list = node.findall('nodehandler')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
300 for child in child_list:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
301 if step == depth: break
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
302 if child.get('name') == path[step]:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
303 node = child
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
304 step += 1
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
305 if node.get('class') in ('dnd35char_handler',
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
306 "SWd20char_handler",
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
307 "d20char_handler",
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
308 "dnd3echar_handler"):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
309 string = self.resolve_cust_loop(node, path, step, depth)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
310 elif node.get('class') == 'rpg_grid_handler':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
311 string = self.resolve_grid(node, path, step, depth)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
312 else: string = self.resolve_loop(node, path, step, depth)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
313 return string
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
314
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
315 def resolution(self, node):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
316 if self.passed == False:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
317 self.passed = True
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
318 if node.get('class') == 'textctrl_handler':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
319 s = str(node.find('text').text)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
320 else: s = 'Nodehandler for '+ node.get('class') + ' not done!' or 'Invalid Reference!'
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
321 else: s = ''
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
322 s = self.ParseLogic(s, node)
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
323 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
324
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
325 def resolve_grid(self, node, path, step, depth):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
326 if step == depth:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
327 return 'Invalid Grid Reference!'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
328 cell = tuple(path[step].strip('(').strip(')').split(','))
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
329 grid = node.find('grid')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
330 rows = grid.findall('row')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
331 col = rows[int(self.Dice(cell[0]))-1].findall('cell')
212
13054be69834 Traipse Beta 'OpenRPG' {100428-00}
sirebral
parents: 194
diff changeset
332 try: s = self.ParseLogic(col[int(self.Dice(cell[1]))-1].text, node) or 'No Cell Data'
191
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
333 except: s = 'Invalid Grid Reference!'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
334 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
335
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
336 def resolve_cust_loop(self, node, path, step, depth):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
337 s = 'Invalid Reference!'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
338 node_class = node.get('class')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
339 ## Code needs clean up. Either choose .lower() or .title(), then reset the path list's content ##
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
340 if step == depth: self.resolution(node)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
341 ##Build Abilities dictionary##
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
342 if node_class not in ('d20char_handler', "SWd20char_handler"): ab = node.find('character').find('abilities')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
343 else: ab = node.find('abilities')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
344 ab_list = ab.findall('stat'); pc_stats = {}
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
345
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
346 for ability in ab_list:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
347 pc_stats[ability.get('name')] = (
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
348 str(ability.get('base')),
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
349 str((int(ability.get('base'))-10)/2) )
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
350 pc_stats[ability.get('abbr')] = (
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
351 str(ability.get('base')),
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
352 str((int(ability.get('base'))-10)/2) )
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
353
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
354 if node_class not in ('d20char_handler', "SWd20char_handler"): ab = node.find('character').find('saves')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
355 else: ab = node.find('saves')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
356 ab_list = ab.findall('save')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
357 for save in ab_list:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
358 pc_stats[save.get('name')] = (str(save.get('base')), str(int(save.get('magmod')) + int(save.get('miscmod')) + int(pc_stats[save.get('stat')][1]) ) )
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
359 if save.get('name') == 'Fortitude': abbr = 'Fort'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
360 if save.get('name') == 'Reflex': abbr = 'Ref'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
361 if save.get('name') == 'Will': abbr = 'Will'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
362 pc_stats[abbr] = ( str(save.get('base')), str(int(save.get('magmod')) + int(save.get('miscmod')) + int(pc_stats[save.get('stat')][1]) ) )
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
363
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
364 if path[step].lower() == 'skill':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
365 if node_class not in ('d20char_handler', "SWd20char_handler"): node = node.find('snf')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
366 node = node.find('skills')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
367 child_list = node.findall('skill')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
368 for child in child_list:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
369 if path[step+1].lower() == child.get('name').lower():
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
370 if step+2 == depth: s = child.get('rank')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
371 elif path[step+2].lower() == 'check':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
372 s = '<b>Skill Check:</b> ' + child.get('name') + ' [1d20+'+str( int(child.get('rank')) + int(pc_stats[child.get('stat')][1]) )+']'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
373 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
374
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
375 if path[step].lower() == 'feat':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
376 if node_class not in ('d20char_handler', "SWd20char_handler"): node = node.find('snf')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
377 node = node.find('feats')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
378 child_list = node.findall('feat')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
379 for child in child_list:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
380 if path[step+1].lower() == child.get('name').lower():
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
381 if step+2 == depth: s = '<b>'+child.get('name')+'</b>'+': '+child.get('desc')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
382 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
383 if path[step].lower() == 'cast':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
384 if node_class not in ('d20char_handler', "SWd20char_handler"): node = node.find('snp')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
385 node = node.find('spells')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
386 child_list = node.findall('spell')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
387 for child in child_list:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
388 if path[step+1].lower() == child.get('name').lower():
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
389 if step+2 == depth: s = '<b>'+child.get('name')+'</b>'+': '+child.get('desc')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
390 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
391 if path[step].lower() == 'attack':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
392 if node_class not in ('d20char_handler', "SWd20char_handler"): node = node.find('combat')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
393 if path[step+1].lower() == 'melee' or path[step+1].lower() == 'm':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
394 bonus_text = '(Melee)'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
395 bonus = node.find('attacks')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
396 bonus = bonus.find('melee')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
397 bonus = bonus.attrib; d = int(pc_stats['Str'][1])
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
398 elif path[step+1].lower() == 'ranged' or path[step+1].lower() == 'r':
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
399 bonus_text = '(Ranged)'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
400 bonus = node.find('attacks')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
401 bonus = bonus.find('ranged')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
402 bonus = bonus.attrib; d = int(pc_stats['Dex'][1])
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
403 for b in bonus:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
404 d += int(bonus[b])
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
405 bonus = str(d)
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
406 if path[step+2] == None: s= bonus
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
407 else:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
408 weapons = node.find('attacks')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
409 weapons = weapons.findall('weapon')
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
410 for child in weapons:
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
411 if path[step+2].lower() == child.get('name').lower():
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
412 s = '<b>Attack: '+bonus_text+'</b> '+child.get('name')+' [1d20+'+bonus+'] ' + 'Damage: ['+child.get('damage')+']'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
413 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
414 elif pc_stats.has_key(path[step].title()):
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
415 if step+1 == depth: s = pc_stats[path[step].title()][0] + ' +('+pc_stats[path[step].title()][1]+')'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
416 elif path[step+1].title() == 'Mod': s = pc_stats[path[step].title()][1]
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
417 elif path[step+1].title() == 'Check': s = '<b>'+path[step].title()+' Check:</b> [1d20+'+str(pc_stats[path[step].title()][1])+']'
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
418 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
419 return s
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
420
a3d7e05085da Traipse Beta 'OpenRPG' {100201-00}
sirebral
parents:
diff changeset
421 Parse = InterParse()