rapydscript-ns 0.8.2 → 0.8.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.agignore +1 -1
- package/.github/workflows/ci.yml +38 -38
- package/=template.pyj +5 -5
- package/CHANGELOG.md +39 -0
- package/HACKING.md +103 -103
- package/LICENSE +24 -24
- package/PYTHON_DIFFERENCES_REPORT.md +291 -0
- package/PYTHON_FEATURE_COVERAGE.md +106 -15
- package/README.md +831 -52
- package/TODO.md +4 -286
- package/add-toc-to-readme +2 -2
- package/bin/export +75 -75
- package/bin/rapydscript +70 -70
- package/bin/web-repl-export +102 -102
- package/build +2 -2
- package/language-service/index.js +4623 -0
- package/language-service/language-service.d.ts +40 -0
- package/package.json +9 -7
- package/publish.py +37 -37
- package/release/baselib-plain-pretty.js +2006 -229
- package/release/baselib-plain-ugly.js +70 -3
- package/release/compiler.js +11554 -3870
- package/release/signatures.json +31 -29
- package/session.vim +4 -4
- package/setup.cfg +2 -2
- package/src/ast.pyj +93 -1
- package/src/baselib-builtins.pyj +99 -2
- package/src/baselib-containers.pyj +107 -4
- package/src/baselib-errors.pyj +44 -0
- package/src/baselib-internal.pyj +124 -5
- package/src/baselib-itertools.pyj +97 -97
- package/src/baselib-str.pyj +32 -1
- package/src/compiler.pyj +36 -36
- package/src/errors.pyj +30 -30
- package/src/lib/aes.pyj +646 -646
- package/src/lib/collections.pyj +1 -1
- package/src/lib/copy.pyj +120 -0
- package/src/lib/elementmaker.pyj +83 -83
- package/src/lib/encodings.pyj +126 -126
- package/src/lib/gettext.pyj +569 -569
- package/src/lib/itertools.pyj +580 -580
- package/src/lib/math.pyj +193 -193
- package/src/lib/numpy.pyj +10 -10
- package/src/lib/operator.pyj +11 -11
- package/src/lib/pythonize.pyj +20 -20
- package/src/lib/random.pyj +118 -118
- package/src/lib/re.pyj +470 -470
- package/src/lib/react.pyj +74 -0
- package/src/lib/traceback.pyj +63 -63
- package/src/lib/uuid.pyj +77 -77
- package/src/monaco-language-service/analyzer.js +131 -9
- package/src/monaco-language-service/builtins.js +17 -2
- package/src/monaco-language-service/completions.js +170 -1
- package/src/monaco-language-service/diagnostics.js +25 -3
- package/src/monaco-language-service/dts.js +550 -550
- package/src/monaco-language-service/index.js +17 -0
- package/src/monaco-language-service/scope.js +3 -0
- package/src/output/classes.pyj +128 -11
- package/src/output/codegen.pyj +17 -3
- package/src/output/comments.pyj +45 -45
- package/src/output/exceptions.pyj +201 -105
- package/src/output/functions.pyj +13 -16
- package/src/output/jsx.pyj +164 -0
- package/src/output/literals.pyj +28 -2
- package/src/output/loops.pyj +0 -9
- package/src/output/modules.pyj +2 -5
- package/src/output/operators.pyj +22 -2
- package/src/output/statements.pyj +2 -2
- package/src/output/stream.pyj +1 -13
- package/src/output/treeshake.pyj +182 -182
- package/src/output/utils.pyj +72 -72
- package/src/parse.pyj +434 -114
- package/src/string_interpolation.pyj +72 -72
- package/src/tokenizer.pyj +29 -0
- package/src/unicode_aliases.pyj +576 -576
- package/src/utils.pyj +192 -192
- package/test/_import_one.pyj +37 -37
- package/test/_import_two/__init__.pyj +11 -11
- package/test/_import_two/level2/deep.pyj +4 -4
- package/test/_import_two/other.pyj +6 -6
- package/test/_import_two/sub.pyj +13 -13
- package/test/aes_vectors.pyj +421 -421
- package/test/annotations.pyj +80 -80
- package/test/baselib.pyj +4 -4
- package/test/classes.pyj +56 -17
- package/test/collections.pyj +5 -5
- package/test/decorators.pyj +77 -77
- package/test/docstrings.pyj +39 -39
- package/test/elementmaker_test.pyj +45 -45
- package/test/functions.pyj +151 -151
- package/test/generators.pyj +41 -41
- package/test/generic.pyj +370 -370
- package/test/imports.pyj +72 -72
- package/test/internationalization.pyj +73 -73
- package/test/lint.pyj +164 -164
- package/test/loops.pyj +85 -85
- package/test/numpy.pyj +734 -734
- package/test/omit_function_metadata.pyj +20 -20
- package/test/python_compat.pyj +326 -0
- package/test/python_features.pyj +129 -29
- package/test/regexp.pyj +55 -55
- package/test/repl.pyj +121 -121
- package/test/scoped_flags.pyj +76 -76
- package/test/slice.pyj +105 -0
- package/test/str.pyj +25 -0
- package/test/unit/fixtures/fibonacci_expected.js +1 -1
- package/test/unit/index.js +2296 -71
- package/test/unit/language-service-builtins.js +70 -0
- package/test/unit/language-service-bundle.js +5 -5
- package/test/unit/language-service-completions.js +180 -0
- package/test/unit/language-service-dts.js +543 -543
- package/test/unit/language-service-hover.js +455 -455
- package/test/unit/language-service-index.js +350 -0
- package/test/unit/language-service-scope.js +255 -0
- package/test/unit/language-service.js +625 -4
- package/test/unit/run-language-service.js +1 -0
- package/test/unit/web-repl.js +437 -0
- package/tools/build-language-service.js +2 -2
- package/tools/cli.js +547 -547
- package/tools/compile.js +219 -219
- package/tools/compiler.js +0 -24
- package/tools/completer.js +131 -131
- package/tools/embedded_compiler.js +251 -251
- package/tools/export.js +3 -37
- package/tools/gettext.js +185 -185
- package/tools/ini.js +65 -65
- package/tools/msgfmt.js +187 -187
- package/tools/repl.js +223 -223
- package/tools/test.js +118 -118
- package/tools/utils.js +128 -128
- package/tools/web_repl.js +95 -95
- package/try +41 -41
- package/web-repl/env.js +196 -74
- package/web-repl/index.html +163 -163
- package/web-repl/main.js +252 -254
- package/web-repl/prism.css +139 -139
- package/web-repl/prism.js +113 -113
- package/web-repl/rapydscript.js +227 -139
- package/web-repl/sha1.js +25 -25
- package/hack_demo.pyj +0 -112
- package/web-repl/language-service.js +0 -4187
package/.agignore
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
lib/*
|
|
1
|
+
lib/*
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -1,38 +1,38 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
on: [push, pull_request]
|
|
3
|
-
env:
|
|
4
|
-
CI: 'true'
|
|
5
|
-
|
|
6
|
-
jobs:
|
|
7
|
-
test:
|
|
8
|
-
name: Test on ${{ matrix.os }} LANG ${{ matrix.lang }}
|
|
9
|
-
runs-on: ${{ matrix.os }}
|
|
10
|
-
env:
|
|
11
|
-
LANG: ${{ matrix.lang }}
|
|
12
|
-
LC_ALL: ${{ matrix.lang }}
|
|
13
|
-
strategy:
|
|
14
|
-
matrix:
|
|
15
|
-
include:
|
|
16
|
-
- { os: ubuntu-latest, lang: en_US.UTF-8 }
|
|
17
|
-
- { os: ubuntu-latest, lang: de_DE.UTF-8}
|
|
18
|
-
- { os: ubuntu-latest, lang: hi_IN.UTF-8 }
|
|
19
|
-
|
|
20
|
-
- { os: macos-latest, lang: en_US.UTF-8 }
|
|
21
|
-
- { os: windows-latest, lang: en_US.UTF-8 }
|
|
22
|
-
|
|
23
|
-
steps:
|
|
24
|
-
- name: Checkout source code
|
|
25
|
-
uses: actions/checkout@master
|
|
26
|
-
with:
|
|
27
|
-
fetch-depth: 10
|
|
28
|
-
|
|
29
|
-
- name: Set up Node ${{ matrix.node }}
|
|
30
|
-
uses: actions/setup-node@master
|
|
31
|
-
|
|
32
|
-
- name: Install deps
|
|
33
|
-
run:
|
|
34
|
-
npm install --no-optional
|
|
35
|
-
|
|
36
|
-
- name: Test
|
|
37
|
-
run:
|
|
38
|
-
npm test
|
|
1
|
+
name: CI
|
|
2
|
+
on: [push, pull_request]
|
|
3
|
+
env:
|
|
4
|
+
CI: 'true'
|
|
5
|
+
|
|
6
|
+
jobs:
|
|
7
|
+
test:
|
|
8
|
+
name: Test on ${{ matrix.os }} LANG ${{ matrix.lang }}
|
|
9
|
+
runs-on: ${{ matrix.os }}
|
|
10
|
+
env:
|
|
11
|
+
LANG: ${{ matrix.lang }}
|
|
12
|
+
LC_ALL: ${{ matrix.lang }}
|
|
13
|
+
strategy:
|
|
14
|
+
matrix:
|
|
15
|
+
include:
|
|
16
|
+
- { os: ubuntu-latest, lang: en_US.UTF-8 }
|
|
17
|
+
- { os: ubuntu-latest, lang: de_DE.UTF-8}
|
|
18
|
+
- { os: ubuntu-latest, lang: hi_IN.UTF-8 }
|
|
19
|
+
|
|
20
|
+
- { os: macos-latest, lang: en_US.UTF-8 }
|
|
21
|
+
- { os: windows-latest, lang: en_US.UTF-8 }
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: Checkout source code
|
|
25
|
+
uses: actions/checkout@master
|
|
26
|
+
with:
|
|
27
|
+
fetch-depth: 10
|
|
28
|
+
|
|
29
|
+
- name: Set up Node ${{ matrix.node }}
|
|
30
|
+
uses: actions/setup-node@master
|
|
31
|
+
|
|
32
|
+
- name: Install deps
|
|
33
|
+
run:
|
|
34
|
+
npm install --no-optional
|
|
35
|
+
|
|
36
|
+
- name: Test
|
|
37
|
+
run:
|
|
38
|
+
npm test
|
package/=template.pyj
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# vim:fileencoding=utf-8
|
|
2
|
-
# License: BSD Copyright: %YEAR%, %USER% <%MAIL%>
|
|
3
|
-
from __python__ import hash_literals
|
|
4
|
-
|
|
5
|
-
%HERE%
|
|
1
|
+
# vim:fileencoding=utf-8
|
|
2
|
+
# License: BSD Copyright: %YEAR%, %USER% <%MAIL%>
|
|
3
|
+
from __python__ import hash_literals
|
|
4
|
+
|
|
5
|
+
%HERE%
|
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,42 @@
|
|
|
1
|
+
version 0.8.4
|
|
2
|
+
=======================
|
|
3
|
+
* Added support for jsx
|
|
4
|
+
* Added support for basic React components
|
|
5
|
+
* support for __new__, __getattr__, __setattr__, __delattr__, __class_getitem__, __init_subclass__
|
|
6
|
+
* added `copy` standard library
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
version 0.8.0 - 0.8.3
|
|
10
|
+
=======================
|
|
11
|
+
|
|
12
|
+
* Add language service with tab-completion, return type inference, hover tips, and typing exports
|
|
13
|
+
* Add source maps support for the transpiled js
|
|
14
|
+
* Add `itertools` standard library module
|
|
15
|
+
* Add `collections` standard library module
|
|
16
|
+
* Add `functools` standard library module
|
|
17
|
+
* Add `numpy` standard library module
|
|
18
|
+
* Add `async`/`await` support
|
|
19
|
+
* Add lambda expression support
|
|
20
|
+
* Add structural pattern matching (`match`/`case`) support
|
|
21
|
+
* Add starred assignment support (e.g. `a, *b = [1, 2, 3]`)
|
|
22
|
+
* Add ellipsis operator and subscript tuple support
|
|
23
|
+
* Add walrus operator (`:=`) support
|
|
24
|
+
* Add dict merge literal support (`{**a, **b}`)
|
|
25
|
+
* Add positional-only (`/`) and keyword-only (`*`) parameter separators
|
|
26
|
+
* Add `@classmethod` decorator support with improved class property access
|
|
27
|
+
* Add nested comprehension support
|
|
28
|
+
* Add overloaded operator support
|
|
29
|
+
* Add Python-style truthiness for empty lists and dicts
|
|
30
|
+
* Add `super()` support
|
|
31
|
+
* Add compiler flags to enable optional pythonic behaviors
|
|
32
|
+
* Add `any()` and `all()` builtins
|
|
33
|
+
* Add tree shaking support for reduced output size
|
|
34
|
+
* Add module mode for exporting root-level functions
|
|
35
|
+
* Add support for virtual imports
|
|
36
|
+
* Add support for bundling pythonized strings into compiled output
|
|
37
|
+
* `print` now maps to `console.log`; `window.print` maps to the JS printer dialog
|
|
38
|
+
* Add custom class mapping support in `dict()`
|
|
39
|
+
|
|
1
40
|
version 0.7.22
|
|
2
41
|
=======================
|
|
3
42
|
|
package/HACKING.md
CHANGED
|
@@ -1,103 +1,103 @@
|
|
|
1
|
-
Hacking the RapydScript compiler
|
|
2
|
-
=================================
|
|
3
|
-
|
|
4
|
-
The RapydScript compiler is written in RapydScript itself and uses the
|
|
5
|
-
RapydScript import system to modularize its code. The compiler source code is
|
|
6
|
-
in the `src` directory. The compiled compiler is by default in the `release`
|
|
7
|
-
directory.
|
|
8
|
-
|
|
9
|
-
In order to start hacking on the compiler, run the command
|
|
10
|
-
|
|
11
|
-
```
|
|
12
|
-
bin/rapydscript self --complete --test
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
This will generate a build of the compiler in the `dev` directory. Now, the
|
|
16
|
-
rapydscript command will automatically use this build, rather than the one in
|
|
17
|
-
release. If you want to go back to the release build, simply delete the `dev`
|
|
18
|
-
directory.
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
Code organization
|
|
22
|
-
-------------------
|
|
23
|
-
|
|
24
|
-
The way the compiler works, given some RapydScript source code:
|
|
25
|
-
|
|
26
|
-
* The source code is lexed into a stream of tokens (`src/tokenzier.pyj`)
|
|
27
|
-
|
|
28
|
-
* The tokens are parsed into a Abstract Syntax Tree (`src/parse.pyj and src/ast.pyj`)
|
|
29
|
-
|
|
30
|
-
* During parsing any import statement are resolved (this is different from
|
|
31
|
-
python, where imports happen at run-time, not compile time).
|
|
32
|
-
|
|
33
|
-
* The Abstract Syntax Tree is transformed into the output JavaScript (`src/output/*.pyj`)
|
|
34
|
-
|
|
35
|
-
* Various bits of functionality in RapydScript depend upon the *Base Library*
|
|
36
|
-
(`src/baselib*.pyj`). This includes things like the basic container types
|
|
37
|
-
(list/set/dict) string functions such as `str.format()`, etc. The baselib
|
|
38
|
-
is automatically inserted into the start of the output JavaScript.
|
|
39
|
-
|
|
40
|
-
The RapydScript standard library can be found in `src/lib`. The various tools,
|
|
41
|
-
such as the linter, gettext support, the REPL, etc. are in the `tools`
|
|
42
|
-
directory.
|
|
43
|
-
|
|
44
|
-
Tests
|
|
45
|
-
--------
|
|
46
|
-
|
|
47
|
-
The tests are in the test directory and can be run using the command:
|
|
48
|
-
```
|
|
49
|
-
rapydscript test
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
You can run individual test files by providing the name of the file, as
|
|
53
|
-
|
|
54
|
-
```
|
|
55
|
-
rapydscript test classes
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Modifying the compiler
|
|
59
|
-
-------------------------
|
|
60
|
-
|
|
61
|
-
Edit the files in the `src` directory to make your changes, then use the
|
|
62
|
-
`./try` script to test them. This script will compile an updated version of
|
|
63
|
-
the compiler with your changes, if any, and use it to run the snippet of code
|
|
64
|
-
you pass to it.
|
|
65
|
-
|
|
66
|
-
For example:
|
|
67
|
-
|
|
68
|
-
```
|
|
69
|
-
./try 'print("Hello world")'
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
will compile `print ("Hello world")` and show you the output on stdout. You can
|
|
73
|
-
tell it to omit the baselib, so you can focus on the output, with the `-m`
|
|
74
|
-
switch, like this:
|
|
75
|
-
|
|
76
|
-
```
|
|
77
|
-
./try -m 'print("Hello world")'
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
You can also have it not print out the JavaScript, instead directly executing the output
|
|
81
|
-
JavaScript with the `-x` switch, like this
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
./try -x 'print("Hello world")'
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
If you want to test longer sections of code, you can use the `-f` switch to
|
|
88
|
-
pass in the path to a RapydScript file to compile, like this:
|
|
89
|
-
|
|
90
|
-
```
|
|
91
|
-
./try -f myfile.pyj
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
Once you are happy with your changes, you can build the compiler and run the
|
|
95
|
-
test suite, all with a single command:
|
|
96
|
-
|
|
97
|
-
```
|
|
98
|
-
./build
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
This will build the compiler with the updated version of itself and then run
|
|
102
|
-
the test suite. If all test pass you can commit your changes and send a pull
|
|
103
|
-
request :)
|
|
1
|
+
Hacking the RapydScript compiler
|
|
2
|
+
=================================
|
|
3
|
+
|
|
4
|
+
The RapydScript compiler is written in RapydScript itself and uses the
|
|
5
|
+
RapydScript import system to modularize its code. The compiler source code is
|
|
6
|
+
in the `src` directory. The compiled compiler is by default in the `release`
|
|
7
|
+
directory.
|
|
8
|
+
|
|
9
|
+
In order to start hacking on the compiler, run the command
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
bin/rapydscript self --complete --test
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
This will generate a build of the compiler in the `dev` directory. Now, the
|
|
16
|
+
rapydscript command will automatically use this build, rather than the one in
|
|
17
|
+
release. If you want to go back to the release build, simply delete the `dev`
|
|
18
|
+
directory.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
Code organization
|
|
22
|
+
-------------------
|
|
23
|
+
|
|
24
|
+
The way the compiler works, given some RapydScript source code:
|
|
25
|
+
|
|
26
|
+
* The source code is lexed into a stream of tokens (`src/tokenzier.pyj`)
|
|
27
|
+
|
|
28
|
+
* The tokens are parsed into a Abstract Syntax Tree (`src/parse.pyj and src/ast.pyj`)
|
|
29
|
+
|
|
30
|
+
* During parsing any import statement are resolved (this is different from
|
|
31
|
+
python, where imports happen at run-time, not compile time).
|
|
32
|
+
|
|
33
|
+
* The Abstract Syntax Tree is transformed into the output JavaScript (`src/output/*.pyj`)
|
|
34
|
+
|
|
35
|
+
* Various bits of functionality in RapydScript depend upon the *Base Library*
|
|
36
|
+
(`src/baselib*.pyj`). This includes things like the basic container types
|
|
37
|
+
(list/set/dict) string functions such as `str.format()`, etc. The baselib
|
|
38
|
+
is automatically inserted into the start of the output JavaScript.
|
|
39
|
+
|
|
40
|
+
The RapydScript standard library can be found in `src/lib`. The various tools,
|
|
41
|
+
such as the linter, gettext support, the REPL, etc. are in the `tools`
|
|
42
|
+
directory.
|
|
43
|
+
|
|
44
|
+
Tests
|
|
45
|
+
--------
|
|
46
|
+
|
|
47
|
+
The tests are in the test directory and can be run using the command:
|
|
48
|
+
```
|
|
49
|
+
rapydscript test
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
You can run individual test files by providing the name of the file, as
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
rapydscript test classes
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Modifying the compiler
|
|
59
|
+
-------------------------
|
|
60
|
+
|
|
61
|
+
Edit the files in the `src` directory to make your changes, then use the
|
|
62
|
+
`./try` script to test them. This script will compile an updated version of
|
|
63
|
+
the compiler with your changes, if any, and use it to run the snippet of code
|
|
64
|
+
you pass to it.
|
|
65
|
+
|
|
66
|
+
For example:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
./try 'print("Hello world")'
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
will compile `print ("Hello world")` and show you the output on stdout. You can
|
|
73
|
+
tell it to omit the baselib, so you can focus on the output, with the `-m`
|
|
74
|
+
switch, like this:
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
./try -m 'print("Hello world")'
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
You can also have it not print out the JavaScript, instead directly executing the output
|
|
81
|
+
JavaScript with the `-x` switch, like this
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
./try -x 'print("Hello world")'
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
If you want to test longer sections of code, you can use the `-f` switch to
|
|
88
|
+
pass in the path to a RapydScript file to compile, like this:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
./try -f myfile.pyj
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Once you are happy with your changes, you can build the compiler and run the
|
|
95
|
+
test suite, all with a single command:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
./build
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
This will build the compiler with the updated version of itself and then run
|
|
102
|
+
the test suite. If all test pass you can commit your changes and send a pull
|
|
103
|
+
request :)
|
package/LICENSE
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
Copyright (c) 2015-, Kovid Goyal <kovid@kovidgoyal.net>
|
|
2
|
-
Copyright (c) 2013-2014, Alexander Tsepkov <atsepkov@pyjeon.com>
|
|
3
|
-
All rights reserved.
|
|
4
|
-
|
|
5
|
-
Redistribution and use in source and binary forms, with or without
|
|
6
|
-
modification, are permitted provided that the following conditions are met:
|
|
7
|
-
|
|
8
|
-
* Redistributions of source code must retain the above copyright notice, this
|
|
9
|
-
list of conditions and the following disclaimer.
|
|
10
|
-
|
|
11
|
-
* Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
-
this list of conditions and the following disclaimer in the documentation
|
|
13
|
-
and/or other materials provided with the distribution.
|
|
14
|
-
|
|
15
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
16
|
-
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
17
|
-
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
-
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
19
|
-
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
20
|
-
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
21
|
-
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
22
|
-
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
23
|
-
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
24
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
1
|
+
Copyright (c) 2015-, Kovid Goyal <kovid@kovidgoyal.net>
|
|
2
|
+
Copyright (c) 2013-2014, Alexander Tsepkov <atsepkov@pyjeon.com>
|
|
3
|
+
All rights reserved.
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
* Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
* Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
16
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
17
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
18
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
19
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
20
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
21
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
22
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
23
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
24
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|