Metadata-Version: 1.0
Name: Js2Py
Version: 0.27
Summary: JavaScript to Python Translator & JavaScript interpreter written in 100% pure Python.
Home-page: https://github.com/PiotrDabkowski/Js2Py
Author: Piotr Dabkowski
Author-email: piotr.dabkowski@balliol.ox.ac.uk
License: GPL
Description: Pure Python JavaScript Translator/Interpreter
        =============================================
        
        Translates any valid JavaScript (ECMA Script 5.1) to Python. Translation
        is fully automatic. Does not have any dependencies - uses only standard
        python library.
        
        .. raw:: html
        
           <hr>
        
        Managed to fully automatically translate esprima to Python! - Available
        Here
        
        .. raw:: html
        
           <hr>
        
        Functionality
        =============
        
        .. raw:: html
        
           <ul>
        
        .. raw:: html
        
           <li>
        
        Automatically translates JavaScript to Python - Supports virtually
        everything (see limitations)
        
        .. raw:: html
        
           </li>
        
        .. raw:: html
        
           <li>
        
        Supports importing Python libraries from JavaScript code using pyimport
        statement
        
        .. raw:: html
        
           </li>
        
        .. raw:: html
        
           <li>
        
        Very fast JavaScript Parsing - can be used as standalone JS parser,
        syntax tree is just like in esprima.js (use js2py.parse\_js)
        
        .. raw:: html
        
           </li>
        
        .. raw:: html
        
           <li>
        
        Provides friendly JS execution features - js2py.eval\_js for single
        execution and js2py.EvalJs for continuous
        
        .. raw:: html
        
           </li>
        
        .. raw:: html
        
           </ul>
        
        Simple Example:
        
        ::
        
            >>> import js2py
            >>> add = js2py.eval_js('function add(a, b) {return a + b}')
            >>> add(1, 2) + 3
            6
            >>> add('1', 2, 3)
            u'12'
            >>> add.constructor
            function Function() { [python code] }
        
        More advanced usage example:
        
        ::
        
            # Execute javascript in context:
            >>> context = EvalJs()
            >>> context.execute('var a = 10; function f(x) {return x*x};')
            # Get value of variable a:
            >>> context.a
            10
            # context.f behaves just like js function so you can supply more than 1 argument. '9'*'9' in javascript is 81.
            >>> context.f('9', 0)
            81
            # context.f has all attributes of normal javascript object (including __proto__ )
            >>> context.f.toString()
            u'function f(x) { [python code] }'
            >>> context.f.constructor
            function Function() { [python code] }
        
            # You can also set variables inside context:
            >>> context.foo = [1,2,3]  # context.foo is now Js Array object and behaves just like javascript array!
            >>> context.foo.push(4)
            4
            >>> context.foo.to_list() # convert to python list
            [1, 2, 3, 4]
        
        .. raw:: html
        
           <hr>
        
        Limitations
        ===========
        
        It has only 3 known limitations:
        
        .. raw:: html
        
           <ul>
        
        .. raw:: html
        
           <li>
        
        “strict mode” is ignored
        
        .. raw:: html
        
           </li>
        
        .. raw:: html
        
           <li>
        
        with statement is not supported
        
        .. raw:: html
        
           </li>
        
        .. raw:: html
        
           <li>
        
        Indirect call to eval will is treated as direct call to eval (hence
        always evals in local scope)
        
        .. raw:: html
        
           </li>
        
        .. raw:: html
        
           </ul>
        
        Please let me know if you find any bugs - they will be fixed within 48
        hours.
        
        .. raw:: html
        
           <hr>
        
        Installation
        ============
        
        ::
        
            pip install js2py
        
        .. raw:: html
        
           <hr>
        
        Other Examples
        ==============
        
        In Js2Py all JavaScript objects are a subclass of PyJs object. For
        example JS Number is represented by PyJsNumber class. js2py.eval\_js and
        js2py.EvalJs automatically tries to convert PyJs type to builtin python
        type. So for example if you execute:
        
        ::
        
            >>> js2py.eval_js('var a = "hello"; a')
        
        eval\_js will return unicode type (u“hello”). However for complex types
        such conversion is impossible and JsObjectWrapper is returned. See the
        conversion table JsType -> PyType:
        
        ::
        
            Boolean -> bool
            String -> unicode
            Number -> float (or int/long if whole number)
            undefined -> None
            null
Platform: UNKNOWN
