Convert Javascript code to an XML document.
This makes it easy to extract data embedded in JavaScript code using XPath in a way more robust than just using regular expressions.
You can install js2xml via PyPI:
pip install js2xml
>>> import js2xml
>>>
>>> jscode = """function factorial(n) {
... if (n === 0) {
... return 1;
... }
... return n * factorial(n - 1);
... }"""
>>> parsed = js2xml.parse(jscode)
>>>
>>> parsed.xpath("//funcdecl/@name") # extracts function name
['factorial']
>>>
>>> print js2xml.pretty_print(parsed) # pretty-print generated XML
<program>
<funcdecl name="factorial">
<parameters>
<identifier name="n"/>
</parameters>
<body>
<if>
<predicate>
<binaryoperation operation="===">
<left>
<identifier name="n"/>
</left>
<right>
<number value="0"/>
</right>
</binaryoperation>
</predicate>
<then>
<block>
<return>
<number value="1"/>
</return>
</block>
</then>
</if>
<return>
<binaryoperation operation="*">
<left>
<identifier name="n"/>
</left>
<right>
<functioncall>
<function>
<identifier name="factorial"/>
</function>
<arguments>
<binaryoperation operation="-">
<left>
<identifier name="n"/>
</left>
<right>
<number value="1"/>
</right>
</binaryoperation>
</arguments>
</functioncall>
</right>
</binaryoperation>
</return>
</body>
</funcdecl>
</program>
>>>
- Fix packaging
-
Add Python 3.6 support
-
Deprecate
js2xml.jsonlike
-
Introduce
js2xml.utils.objects
module:js2xml.utils.objects.make(node)
: takes a node in the js2xml-parsed tree and converts to a suitable Python objectjs2xml.utils.objects.findall(tree, types)
: used to find the top-most nodes in the js2xml-parsed tree that can be converted to adict
,list
,str
,bool
,int
orfloat
js2xml.utils.objects.getall(tree, types)
: same as.findall()
except that it converts what was found to the corresponding Python object, usingjs2xml.utils.objects.make()
-
Introduce
js2xml.utils.vars
module:js2xml.utils.vars.get_vars(tree)
can be used to turn a JS snippet into a python object where you can access JavaScript variables by name and get the parsed values
- Regenerate lextab.py and yacctab.py files with PLY 3.10
- Properly set logger level to ERROR
- Include lextab.py and yacctab.py files to (hopefully) remove write permission warnings (see issue #16)
- Run tests with tox (locally and on Travis CI)
- Add code coverage reports (+ codecov.io for Travis CI builds)
- Run tests with Python 3.6
- Automatic PyPI deploys from Travis CI
- Distribute as universal wheel
- Python 3 support (tested with 3.4 and 3.5)
- Use logger to suppress Yacc warnings
- require PLY > 3.6
- Use bumpversion for versioning
- Pretty-print output is now a Unicode string
- Profiling scripts added
- Updated notes with use-case, installing via pip
- Force PLY 3.4 (3.6 has issues with slimit)
- Fix parsing of objects with integer keys
- Fix try/catch/finally and named function expressions
- Add download URL in setup file (for PyPI)
Initial release