11import os
22import re
33
4- from pyvba .browser import Browser , CollectionBrowser
4+ from pyvba .browser import Browser
55from pyvba .viewer import FunctionViewer
66
77
@@ -98,7 +98,6 @@ def __init__(self, browser: Browser, version=1.0, encoding: str = "UTF-8", skip_
9898 super ().__init__ (browser , skip_func , skip_err )
9999
100100 self ._xml_head = f'<?xml version="{ str (version )} " encoding="{ encoding } "?>\n '
101- self ._attrs = ['Name' , 'Count' ]
102101
103102 @staticmethod
104103 def xml_encode (text : str ) -> str :
@@ -153,7 +152,7 @@ def _generate_tag(self, elem, tabs: int = 0, **kwargs) -> str:
153152 xml += '\t ' * (tabs + 1 ) + item_tag .close_tag + '\n '
154153
155154 elif item not in attrs :
156- # NOTE: this is here
155+ # overlook objects that call itself
157156 if item == elem .name :
158157 continue
159158 else :
@@ -272,7 +271,7 @@ def json_encode(text: str) -> str:
272271 def _check (self ):
273272 """Check if the JSON string needs to be generated."""
274273 if self ._data is None :
275- self ._data = "{ \n " + self ._generate (self ._browser , 1 ) + "} \n "
274+ self ._data = self ._generate (self ._browser )
276275 self ._data = re .sub (r',(?!\s*?[{\[\"\'\w])' , '' , self ._data )
277276
278277 def _generate (self , elem , tabs : int = 0 , ** kwargs ) -> str :
@@ -294,46 +293,38 @@ def _generate(self, elem, tabs: int = 0, **kwargs) -> str:
294293 json = ''
295294 if isinstance (elem , Browser ):
296295 # display the browser and its children
297- json += "\t " * tabs + f"\" { self .json_encode (elem .name )} \" : {{ \n "
296+ json += "\t " * tabs + f"{{ \" { self .json_encode (elem .name )} \" : [ \n "
298297
299298 for item , value in elem .all .items ():
300- json += self ._generate (value , tabs + 1 , name = item )
301-
302- json += "\t " * tabs + "},\n "
303- # elif isinstance(elem, IterableFunctionBrowser):
304- # # display the function browser and its children
305- # json += "\t" * tabs + f"\"{elem.name}\": {{\n"
306- # json += "\t" * (tabs + 1) + f"\"Name\": \"{self.json_encode(elem.name)}\",\n"
307- # json += "\t" * (tabs + 1) + f"\"Count\": {elem.count},\n"
308- # json += "\t" * (tabs + 1) + f"\"Items\": [\n"
309- #
310- # for item, value in elem.all.items():
311- # json += "\t" * (tabs + 2) + "{\n"
312- # json += self._generate(value, tabs + 3, name=item)
313- # json += "\t" * (tabs + 2) + "},\n"
314- #
315- # json += "\t" * (tabs + 1) + "]\n"
316- # json += "\t" * tabs + "},\n"
299+ if type (value ) is list and len (value ) > 0 :
300+ json += "\t " * (tabs + 1 ) + "{ \" Item\" : [\n "
301+ for i in value :
302+ json += self ._generate (i , tabs + 2 )
303+ json += "\t " * (tabs + 1 ) + "]},\n "
304+ else :
305+ json += self ._generate (value , tabs + 1 , name = item )
306+
307+ json += "\t " * tabs + "]},\n "
317308 elif isinstance (elem , FunctionViewer ):
318309 if not self ._skip_func :
319310 # display the function and its properties
320- json += "\t " * tabs + f"\" { self .json_encode (elem .name )} \" : {{ \n "
321- json += "\t " * (tabs + 1 ) + f"\" Name\" : \" { self .json_encode (elem .name )} \" ,\n "
322- json += "\t " * (tabs + 1 ) + f"\" args\" : { self .json_encode (str (len (elem .args )))} ,\n "
323- json += "\t " * (tabs + 1 ) + f"\" use\" : \" { self .json_encode (str (elem )[26 :])} \" \n "
324- json += "\t " * tabs + "},\n "
311+ json += "\t " * tabs + f"{{ \" { self .json_encode (elem .name )} \" : [ \n "
312+ json += "\t " * (tabs + 1 ) + f"{{ \" Name\" : \" { self .json_encode (elem .name )} \" }} ,\n "
313+ json += "\t " * (tabs + 1 ) + f"{{ \" args\" : { self .json_encode (str (len (elem .args )))} } },\n "
314+ json += "\t " * (tabs + 1 ) + f"{{ \" use\" : \" { self .json_encode (str (elem )[26 :])} \" }} \n "
315+ json += "\t " * tabs + "] },\n "
325316 elif isinstance (elem , BaseException ):
326317 # display the error location and method
327318 if not self ._skip_err :
328- json += "\t " * tabs + "\" Error\" : { \n "
319+ json += "\t " * tabs + "{ \" Error\" : [ \n "
329320 try :
330- json += "\t " * (tabs + 1 ) + f"\" on\" : \" { self .json_encode (str (elem .args [2 ][1 ]))} \" ,\n "
331- json += "\t " * (tabs + 1 ) + f"\" message\" : \" { self .json_encode (str (elem .args [2 ][2 ]))} \" \n "
321+ json += "\t " * (tabs + 1 ) + f"{{ \" on\" : \" { self .json_encode (str (elem .args [2 ][1 ]))} \" }} ,\n "
322+ json += "\t " * (tabs + 1 ) + f"{{ \" message\" : \" { self .json_encode (str (elem .args [2 ][2 ]))} \" }} \n "
332323 except TypeError :
333- json += "\t " * (tabs + 1 ) + f"\" message\" : \" { self .json_encode (str (elem .args [2 ]))} \" \n "
324+ json += "\t " * (tabs + 1 ) + f"{{ \" message\" : \" { self .json_encode (str (elem .args [2 ]))} \" }} \n "
334325 except IndexError :
335- json += "\t " * (tabs + 1 ) + f"\" message\" : \" { self .json_encode (str (elem ))} \" \n "
336- json += "\t " * tabs + "},\n "
326+ json += "\t " * (tabs + 1 ) + f"{{ \" message\" : \" { self .json_encode (str (elem ))} \" }} \n "
327+ json += "\t " * tabs + "] },\n "
337328 else :
338329 # display the variable and value
339330 name = self .json_encode (kwargs .get ('name' , 'Unknown' ))
@@ -343,5 +334,5 @@ def _generate(self, elem, tabs: int = 0, **kwargs) -> str:
343334 elif not isinstance (elem , (int , float , complex )):
344335 elem = f"\" { self .json_encode (str (elem ))} \" "
345336
346- json += "\t " * tabs + f"\" { name } \" : { elem } ,\n "
337+ json += "\t " * tabs + f"{{ \" { name } \" : { elem } } },\n "
347338 return json
0 commit comments