Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Propose v6.3.0 #7441

Merged
merged 131 commits into from
Jul 5, 2016
Merged
Changes from all commits
Commits
Show all changes
131 commits
Select commit Hold shift + click to select a range
929b6c2
src: refactor require('constants')
jasnell May 2, 2016
2a8bd35
src: add node::FreeEnvironment public API
zcbenz Sep 28, 2015
6210528
deps: import v8_inspector
ofrobots May 29, 2016
7d4f038
src,lib: v8-inspector support
pavelfeldman Feb 7, 2016
c1bd3fe
cluster: work with v8_inspector
cjihrig May 20, 2016
ea2d661
src: fix --without-inspector build
addaleax May 31, 2016
643b33b
src: add linebreak to inspector message
nicolasromer May 30, 2016
f4777c7
deps: update v8_inspector
ofrobots Jun 2, 2016
2fd140b
src: fix json payload from inspector
Jun 8, 2016
ec90a7a
inspector: change default port
ofrobots Jun 8, 2016
7da8a41
inspector: reduce implementation in header
Jun 7, 2016
38d36e3
src: fix --without-inspector build
addaleax May 31, 2016
88b2aa3
inspector: process.exit should wait for inspector
Jun 8, 2016
3d69ad1
src: make Sec-WebSocket-Key check case-insensitive
MylesBorins Jun 9, 2016
e1d6bd9
stream: improve Readable.read() performance
mscdex May 31, 2016
fb39025
punycode: update to v2.0.0
mathiasbynens Jun 10, 2016
cbe5747
deps: switch to upstream v8_inspector
ofrobots Jun 14, 2016
09ecd1f
inspector: fix coverity scan errors
Jun 16, 2016
8dd48c9
inspector: fix inspector connection cleanup
Jun 1, 2016
d049919
vm: add ability to break on sigint/ctrl+c
addaleax May 8, 2016
72d659a
readline: return old status from _setRawMode
addaleax May 8, 2016
da8e510
repl: break on sigint/ctrl+c
addaleax May 8, 2016
0593351
src: use RAII for mutexes and condition variables
bnoordhuis Jun 17, 2016
2c7804a
crypto,tls: perf improvements for crypto and tls getCiphers
jasnell Jun 8, 2016
77331a7
tls: avoid calling Buffer.byteLength multiple times
jasnell Jun 8, 2016
9e9d7b8
doc: general improvements to os.md copy
jasnell Jun 3, 2016
7aa2125
doc: add argument information for socket.destroy()
Trott Jun 8, 2016
580e110
test: refresh the tmpdir before using
Trott Jun 16, 2016
c236a13
test: mark test-vm-timeout flaky on windows
Trott Jun 22, 2016
0f434fe
doc: add RReverser to collaborators
RReverser Jun 22, 2016
ec515c5
doc: mention http request "aborted" events
kemitchell Jun 10, 2016
7a0718b
doc: add `added:` information for tls
italoacasas May 27, 2016
32e068a
tools: update certdata.txt
bnoordhuis Jun 22, 2016
3eb02b6
tools: output include guards in mk-ca-bundle.pl
bnoordhuis Jun 22, 2016
ef41c8b
crypto: update root certificates
bnoordhuis Jun 22, 2016
009858b
test: remove internet/test-tls-connnect-cnnic
bnoordhuis Jun 23, 2016
029af2c
doc: update build instructions for Windows
joaocgreis Jun 13, 2016
a04cd85
doc: fix repl defineCommand example
akki Jun 23, 2016
eed6597
doc: fix link in the stream doc
italoacasas Jun 21, 2016
0bbf2ef
test: fix flaky test-fs-watch-encoding on OS X
Trott Jun 22, 2016
962ac37
string_decoder: fix bad utf8 character handling
mscdex Jun 15, 2016
8f1733c
test: add more UTF-8 StringDecoder tests
gagern Jun 16, 2016
09a7c91
doc: update "who to cc in issues" chart
Fishrock123 May 11, 2016
4486ba9
doc: add lance to collaborators
lance Jun 24, 2016
16aff79
test: add test for exec() known issue
Trott Jun 22, 2016
457d244
test: fix flaky test-vm-timeout
addaleax Jun 22, 2016
55b87c0
vm: test for abort condition of current invocation
addaleax Jun 22, 2016
e30f32f
Revert "test: mark test-vm-timeout flaky on windows"
addaleax Jun 22, 2016
6b1fc63
readline: allow passing prompt to constructor
evanlucas Jun 3, 2016
b725437
doc: minor rewording to the GitHub issue/pr templates
Fishrock123 Jun 24, 2016
efce335
doc: add CTC meeting minutes 2016-06-15
joshgav Jun 16, 2016
ca95a84
repl: fix tab completion for defined commands
princejwesley Jun 22, 2016
44bc638
doc: clarify child_process stdout/stderr types
sartrey Jun 22, 2016
e7b8400
http: replace finish() callback with arrow function
originalfoo Jun 22, 2016
35c70b5
benchmark: `util._extend` vs `object.assign`
suryagh Jun 10, 2016
3475591
doc: fix "sign.verify" typo in crypto doc.
rus0000 Jun 24, 2016
5f766ad
doc: fix typographic error in process doc
Trott Jun 26, 2016
a4880b5
deps: `MASM.UseSafeExceptionHandlers` for OpenSSL
indutny Jun 26, 2016
fa9e6f7
crypto: Allow GCM ciphers to have a longer IV length
mwain Apr 25, 2016
84dd526
src: renaming ares_task struct to node_ares_task
danbev Jun 20, 2016
c39f6c0
repl: Enable tab completion for global properties
lance Jun 22, 2016
40211e8
assert: remove unneeded arguments special handling
Trott Jun 24, 2016
225f3b9
deps: update v8_inspector
targos Jun 23, 2016
fe580eb
inspector: print warning when used
evanlucas Jun 23, 2016
bc37e6a
doc: general improvements to timers.md
jasnell May 23, 2016
91744aa
build: configure --shared
stefanmb Mar 27, 2016
1c7b622
doc: add `added:` information for http
addaleax Jun 23, 2016
f269c00
doc: add `added:` information for https
addaleax Jun 23, 2016
58ae35c
doc: fix broken refs to url.parse() in http docs
addaleax Jun 23, 2016
365f520
test: test isFullWidthCodePoint with invalid input
Trott Jun 25, 2016
5830ec5
tools: update cpplint to r456
bnoordhuis Jun 28, 2016
e3662a4
tools: disable unwanted cpplint rules again
bnoordhuis Jun 28, 2016
01b7b9a
tools: add back --mode=tap to cpplint
bnoordhuis Jun 28, 2016
9d0641e
tools: allow cpplint to run outside git repo
bnoordhuis Jun 28, 2016
5dfa234
src: fix build/c++tr1 cpplint warnings
bnoordhuis Jun 28, 2016
6280ccd
src: fix build/header_guard cpplint warnings
bnoordhuis Jun 28, 2016
7fe758d
src: fix readability/braces cpplint warnings
bnoordhuis Jun 28, 2016
b7e006b
src: fix readability/constructors cpplint warnings
bnoordhuis Jun 28, 2016
5fd1585
src: fix readability/inheritance cpplint warnings
bnoordhuis Jun 28, 2016
43e8357
src: fix readability/namespace cpplint warnings
bnoordhuis Jun 28, 2016
1fa6dba
src: fix readability/nolint cpplint warnings
bnoordhuis Jun 28, 2016
88c5183
src: fix runtime/indentation_namespace warnings
bnoordhuis Jun 28, 2016
be0c575
src: fix runtime/int cpplint warnings
bnoordhuis Jun 28, 2016
1b3c1b0
src: fix runtime/references cpplint warnings
bnoordhuis Jun 28, 2016
f72259a
src: fix whitespace/blank_line cpplint warnings
bnoordhuis Jun 28, 2016
3fa643b
src: fix whitespace/indent cpplint warnings
bnoordhuis Jun 28, 2016
8a31b23
build: remove unused files from CPPLINT_FILES
bnoordhuis Jun 28, 2016
da0ebf6
src: lint node_win32_perfctr_provider.cc
bnoordhuis Jun 28, 2016
ca4fb08
src: lint node_lttng_tp.h
bnoordhuis Jun 28, 2016
001aa06
src: lint v8abbr.h
bnoordhuis Jun 28, 2016
e727cb5
tools: fix -Wunused-variable warning
bnoordhuis Jun 28, 2016
a5d8945
timers: optimize linkedlist
Apr 26, 2016
efb7a90
timers: optimize `setImmediate()`
Apr 28, 2016
44f0f94
benchmark: add `setImmediate()` benchmarks
Apr 27, 2016
c795d1e
src: check uv_async_init() return value
bnoordhuis Jun 22, 2016
3b1c19f
src: initialize encoding_ data member
bnoordhuis Jun 22, 2016
9945b4e
src: guard against starting fs watcher twice
bnoordhuis Jun 22, 2016
2228a65
src: remove unused data member write_queue_size_
bnoordhuis Jun 22, 2016
25bc7fe
src: remove unused md_ data members
bnoordhuis Jun 22, 2016
b7e661b
src: remove duplicate HMAC_Init calls
bnoordhuis Jun 22, 2016
2816418
src: remove deprecated HMAC_Init, use HMAC_Init_ex
bnoordhuis Jun 22, 2016
ce039c3
src: fix use-after-return in zlib bindings
bnoordhuis Jun 22, 2016
6fa560d
src: fix memory leak in WriteBuffers() error path
bnoordhuis Jun 22, 2016
8f7baff
src: fix bad logic in uid/gid checks
bnoordhuis Jun 22, 2016
4b0ab5b
test: add testcfg.py to test/abort/
bnoordhuis Jun 19, 2016
c7ab7a3
test: fix abort/test-abort-uncaught-exception
bnoordhuis Jun 19, 2016
6de80fc
test: don't use internal headers in add-on tests
bnoordhuis Jun 20, 2016
6cec90a
src: print backtrace on fatal error
bnoordhuis May 13, 2016
c96d701
src: print backtrace on abort/unreachable code
bnoordhuis May 13, 2016
517e715
test: add abort test for backtrace validation
cjihrig May 16, 2016
b8919b1
src: move ABORT() logic into node::Abort()
bnoordhuis Jun 19, 2016
57cc4e3
src: print backtrace on failed CHECK/ASSERT
bnoordhuis Jun 19, 2016
658ab3d
test: check types for http request and response
bnoordhuis May 26, 2016
d857e9a
tools: explicit path for V8 test tap output
Jun 28, 2016
c4aaf47
inspector: Do cleanups before notifying callback
Jun 27, 2016
12b1993
deps: update icu-small to include punycode datafiles
jasnell Jun 28, 2016
d0e2492
net: use icu's punycode implementation
jasnell Jun 21, 2016
8d18aed
doc: fixing minor typo in AtExit hooks section
danbev Jun 29, 2016
6151544
vm: don't print out arrow message for custom error
addaleax Jun 24, 2016
1bd6a62
build: drop unconditional openssl dep from cctest
bnoordhuis Jun 29, 2016
4891001
debugger: make listen address configurable
bnoordhuis Oct 10, 2015
7a7b8f7
repl: Default `useGlobal` to false in CLI REPL.
lance Mar 14, 2016
4a0fb6f
Revert "child_process: measure buffer length in bytes"
Trott Jun 22, 2016
2aa06b9
child_process: preserve argument type
Trott Jun 23, 2016
7d07a0b
doc: improve usage of `zero`/`0`
Trott Jun 28, 2016
b383fdd
test: remove common.PORT from http tests
Trott Jun 29, 2016
45f83e5
doc: add guide for Node.js Timers
ryanmurakami May 18, 2016
9b5be44
build: split CI rules in Makefile
joaocgreis Jun 15, 2016
6da49ac
test: handle SmartOS bug in test-tls-session-cache
Trott Jun 30, 2016
c132e9c
test: listen on and connect to 127.0.0.1
bnoordhuis Jul 2, 2016
63d361b
doc: fix documentation of process.argv
tarungarg546 Jun 27, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
8 changes: 4 additions & 4 deletions .github/ISSUE_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<!--
Thank you for reporting an issue. Please fill in the template below. If unsure
about something, just do as best as you're able.
Thank you for reporting an issue.
Please fill in as much of the template below as you're able.
Version: usually output of `node -v`
Platform: either `uname -a` output, or if Windows, version and 32 or 64-bit
Version: output of `node -v`
Platform: output of `uname -a` (UNIX), or version and 32 or 64-bit (Windows)
Subsystem: if known, please specify affected core module name
If possible, please provide code that demonstrates the problem, keeping it as
13 changes: 6 additions & 7 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,23 +1,22 @@
<!--
Thank you for your pull request. Please review below requirements.
Bug fixes and new features should include tests and possibly a benchmark.
Bug fixes and new features should include tests and possibly benchmarks.
Contributors guide: https://github.com/nodejs/node/blob/master/CONTRIBUTING.md
-->

##### Checklist
<!-- Remove items that do not apply. For completed items, change [ ] to [x]. -->

- [ ] `make -j4 test` (UNIX) or `vcbuild test nosign` (Windows) passes
- [ ] a test and/or benchmark is included
- [ ] `make -j4 test` (UNIX), or `vcbuild test nosign` (Windows) passes
- [ ] tests and/or benchmarks are included
- [ ] documentation is changed or added
- [ ] the commit message follows commit guidelines

- [ ] commit message follows commit guidelines

##### Affected core subsystem(s)
<!-- provide affected core subsystem(s) (like doc, cluster, crypto, etc) -->
<!-- Provide affected core subsystem(s) (like doc, cluster, crypto, etc). -->


##### Description of change
<!-- provide a description of the change below this comment -->
<!-- Provide a description of the change below this comment. -->
10 changes: 6 additions & 4 deletions BUILDING.md
Original file line number Diff line number Diff line change
@@ -99,8 +99,10 @@ $ node -e "console.log('Hello from Node.js ' + process.version)"
Prerequisites:

* [Python 2.6 or 2.7](https://www.python.org/downloads/)
* Visual Studio 2013 / 2015, all editions including the Community edition, or
* Visual Studio Express 2013 / 2015 for Desktop
* One of:
* [Visual C++ Build Tools](http://landinghub.visualstudio.com/visual-cpp-build-tools)
* [Visual Studio](https://www.visualstudio.com/) 2013 / 2015, all editions including the Community edition
* [Visual Studio](https://www.visualstudio.com/) Express 2013 / 2015 for Desktop
* Basic Unix tools required for some tests,
[Git for Windows](http://git-scm.com/download/win) includes Git Bash
and tools which can be included in the global `PATH`.
@@ -117,8 +119,8 @@ To run the tests:

To test if Node.js was built correctly:

```
$ node -e "console.log('Hello from Node.js ' + process.version)"
```text
> Release\node -e "console.log('Hello from Node.js', process.version)"
```

### Android / Android-based devices (e.g., Firefox OS)
36 changes: 23 additions & 13 deletions Makefile
Original file line number Diff line number Diff line change
@@ -19,9 +19,9 @@ ifdef QUICKCHECK
endif

ifdef ENABLE_V8_TAP
TAP_V8 := --junitout v8-tap.xml
TAP_V8_INTL := --junitout v8-intl-tap.xml
TAP_V8_BENCHMARKS := --junitout v8-benchmarks-tap.xml
TAP_V8 := --junitout $(PWD)/v8-tap.xml
TAP_V8_INTL := --junitout $(PWD)/v8-intl-tap.xml
TAP_V8_BENCHMARKS := --junitout $(PWD)/v8-benchmarks-tap.xml
endif

V8_TEST_OPTIONS = $(V8_EXTRA_TEST_OPTIONS)
@@ -184,11 +184,25 @@ test-all: test-build test/gc/node_modules/weak/build/Release/weakref.node
test-all-valgrind: test-build
$(PYTHON) tools/test.py --mode=debug,release --valgrind

CI_NATIVE_SUITES := addons
CI_JS_SUITES := doctool known_issues message parallel pseudo-tty sequential

# Build and test addons without building anything else
test-ci-native: | test/addons/.buildstamp
$(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
--mode=release --flaky-tests=$(FLAKY_TESTS) \
$(TEST_CI_ARGS) $(CI_NATIVE_SUITES)

# This target should not use a native compiler at all
test-ci-js:
$(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
--mode=release --flaky-tests=$(FLAKY_TESTS) \
$(TEST_CI_ARGS) $(CI_JS_SUITES)

test-ci: | build-addons
$(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
--mode=release --flaky-tests=$(FLAKY_TESTS) \
$(TEST_CI_ARGS) addons doctool known_issues message pseudo-tty parallel \
sequential
$(TEST_CI_ARGS) $(CI_NATIVE_SUITES) $(CI_JS_SUITES)

test-release: test-build
$(PYTHON) tools/test.py --mode=release
@@ -299,9 +313,11 @@ docopen: out/doc/api/all.html
docclean:
-rm -rf out/doc

run-ci:
build-ci:
$(PYTHON) ./configure $(CONFIG_FLAGS)
$(MAKE)

run-ci: build-ci
$(MAKE) test-ci

RAWVER=$(shell $(PYTHON) tools/getnodeversion.py)
@@ -671,18 +687,12 @@ jslint-ci:
tools/eslint-rules tools/jslint.js

CPPLINT_EXCLUDE ?=
CPPLINT_EXCLUDE += src/node_lttng.cc
CPPLINT_EXCLUDE += src/node_root_certs.h
CPPLINT_EXCLUDE += src/node_lttng_tp.h
CPPLINT_EXCLUDE += src/node_win32_perfctr_provider.cc
CPPLINT_EXCLUDE += src/queue.h
CPPLINT_EXCLUDE += src/tree.h
CPPLINT_EXCLUDE += src/v8abbr.h
CPPLINT_EXCLUDE += $(wildcard test/addons/??_*/*.cc test/addons/??_*/*.h)

CPPLINT_FILES = $(filter-out $(CPPLINT_EXCLUDE), $(wildcard \
deps/debugger-agent/include/* \
deps/debugger-agent/src/* \
src/*.c \
src/*.cc \
src/*.h \
@@ -715,4 +725,4 @@ endif
bench-all bench bench-misc bench-array bench-buffer bench-net \
bench-http bench-fs bench-tls cctest run-ci test-v8 test-v8-intl \
test-v8-benchmarks test-v8-all v8 lint-ci bench-ci jslint-ci doc-only \
$(TARBALL)-headers
$(TARBALL)-headers test-ci test-ci-native test-ci-js build-ci
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -186,6 +186,7 @@ information about the governance of the Node.js project, see
* [joaocgreis](https://github.com/joaocgreis) - **João Reis** &lt;[email protected]&gt;
* [julianduque](https://github.com/julianduque) - **Julian Duque** &lt;[email protected]&gt;
* [JungMinu](https://github.com/JungMinu) - **Minwoo Jung** &lt;[email protected]&gt;
* [lance](https://github.com/lance) - **Lance Ball** &lt;[email protected]&gt;
* [lxe](https://github.com/lxe) - **Aleksey Smolenchuk** &lt;[email protected]&gt;
* [matthewloring](https://github.com/matthewloring) - **Matthew Loring** &lt;[email protected]&gt;
* [mcollina](https://github.com/mcollina) - **Matteo Collina** &lt;[email protected]&gt;
@@ -203,6 +204,7 @@ information about the governance of the Node.js project, see
* [robertkowalski](https://github.com/robertkowalski) - **Robert Kowalski** &lt;[email protected]&gt;
* [romankl](https://github.com/romankl) - **Roman Klauke** &lt;[email protected]&gt;
* [ronkorving](https://github.com/ronkorving) - **Ron Korving** &lt;[email protected]&gt;
* [RReverser](https://github.com/RReverser) - **Ingvar Stepanyan** &lt;[email protected]&gt;
* [saghul](https://github.com/saghul) - **Saúl Ibarra Corretgé** &lt;[email protected]&gt;
* [sam-github](https://github.com/sam-github) - **Sam Roberts** &lt;[email protected]&gt;
* [santigimeno](https://github.com/santigimeno) - **Santiago Gimeno** &lt;[email protected]&gt;
20 changes: 20 additions & 0 deletions benchmark/crypto/get-ciphers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'use strict';

const common = require('../common.js');

const bench = common.createBenchmark(main, {
n: [1, 5000],
v: ['crypto', 'tls']
});

function main(conf) {
const n = +conf.n;
const v = conf.v;
const method = require(v).getCiphers;
var i = 0;

common.v8ForceOptimization(method);
bench.start();
for (; i < n; i++) method();
bench.end(n);
}
40 changes: 40 additions & 0 deletions benchmark/misc/util-extend-vs-object-assign.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
'use strict';

const common = require('../common.js');
const util = require('util');
const v8 = require('v8');

const bench = common.createBenchmark(main, {
type: ['extend', 'assign'],
n: [10e4]
});

function main(conf) {
let fn;
const n = conf.n | 0;
let v8command;

if (conf.type === 'extend') {
fn = util._extend;
v8command = '%OptimizeFunctionOnNextCall(util._extend)';
} else if (conf.type === 'assign') {
fn = Object.assign;
// Object.assign is built-in, cannot be optimized
v8command = '';
}

// Force-optimize the method to test so that the benchmark doesn't
// get disrupted by the optimizer kicking in halfway through.
for (var i = 0; i < conf.type.length * 10; i += 1)
fn({}, process.env);

v8.setFlagsFromString('--allow_natives_syntax');
eval(v8command);

var obj = new Proxy({}, { set: function(a, b, c) { return true; } });

bench.start();
for (var j = 0; j < n; j += 1)
fn(obj, process.env);
bench.end(n);
}
75 changes: 75 additions & 0 deletions benchmark/net/punycode.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
'use strict';

const common = require('../common.js');
const icu = process.binding('icu');
const punycode = require('punycode');

const bench = common.createBenchmark(main, {
method: ['punycode', 'icu'],
n: [1024],
val: [
'افغانستا.icom.museum',
'الجزائر.icom.museum',
'österreich.icom.museum',
'বাংলাদেশ.icom.museum',
'беларусь.icom.museum',
'belgië.icom.museum',
'българия.icom.museum',
'تشادر.icom.museum',
'中国.icom.museum',
'القمر.icom.museum',
'κυπρος.icom.museum',
'českárepublika.icom.museum',
'مصر.icom.museum',
'ελλάδα.icom.museum',
'magyarország.icom.museum',
'ísland.icom.museum',
'भारत.icom.museum',
'ايران.icom.museum',
'éire.icom.museum',
'איקו״ם.ישראל.museum',
'日本.icom.museum',
'الأردن.icom.museum'
]
});

function usingPunycode(val) {
punycode.toUnicode(punycode.toASCII(val));
}

function usingICU(val) {
icu.toUnicode(icu.toASCII(val));
}

function runPunycode(n, val) {
common.v8ForceOptimization(usingPunycode, val);
var i = 0;
bench.start();
for (; i < n; i++)
usingPunycode(val);
bench.end(n);
}

function runICU(n, val) {
common.v8ForceOptimization(usingICU, val);
var i = 0;
bench.start();
for (; i < n; i++)
usingICU(val);
bench.end(n);
}

function main(conf) {
const n = +conf.n;
const val = conf.val;
switch (conf.method) {
case 'punycode':
runPunycode(n, val);
break;
case 'icu':
runICU(n, val);
break;
default:
throw new Error('Unexpected method');
}
}
32 changes: 32 additions & 0 deletions benchmark/streams/readable-bigread.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'use strict';

const common = require('../common');
const v8 = require('v8');
const Readable = require('stream').Readable;

const bench = common.createBenchmark(main, {
n: [100e1]
});

function main(conf) {
const n = +conf.n;
const b = new Buffer(32);
const s = new Readable();
function noop() {}
s._read = noop;

// Force optimization before starting the benchmark
s.push(b);
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(s.read)');
s.push(b);
while (s.read(128));

bench.start();
for (var k = 0; k < n; ++k) {
for (var i = 0; i < 1e4; ++i)
s.push(b);
while (s.read(128));
}
bench.end(n);
}
32 changes: 32 additions & 0 deletions benchmark/streams/readable-bigunevenread.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'use strict';

const common = require('../common');
const v8 = require('v8');
const Readable = require('stream').Readable;

const bench = common.createBenchmark(main, {
n: [100e1]
});

function main(conf) {
const n = +conf.n;
const b = new Buffer(32);
const s = new Readable();
function noop() {}
s._read = noop;

// Force optimization before starting the benchmark
s.push(b);
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(s.read)');
s.push(b);
while (s.read(106));

bench.start();
for (var k = 0; k < n; ++k) {
for (var i = 0; i < 1e4; ++i)
s.push(b);
while (s.read(106));
}
bench.end(n);
}
33 changes: 33 additions & 0 deletions benchmark/streams/readable-boundaryread.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
'use strict';

const common = require('../common');
const v8 = require('v8');
const Readable = require('stream').Readable;

const bench = common.createBenchmark(main, {
n: [200e1]
});

function main(conf) {
const n = +conf.n;
const b = new Buffer(32);
const s = new Readable();
function noop() {}
s._read = noop;

// Force optimization before starting the benchmark
s.push(b);
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(s.push)');
eval('%OptimizeFunctionOnNextCall(s.read)');
s.push(b);
while (s.read(32));

bench.start();
for (var k = 0; k < n; ++k) {
for (var i = 0; i < 1e4; ++i)
s.push(b);
while (s.read(32));
}
bench.end(n);
}
32 changes: 32 additions & 0 deletions benchmark/streams/readable-readall.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'use strict';

const common = require('../common');
const v8 = require('v8');
const Readable = require('stream').Readable;

const bench = common.createBenchmark(main, {
n: [50e2]
});

function main(conf) {
const n = +conf.n;
const b = new Buffer(32);
const s = new Readable();
function noop() {}
s._read = noop;

// Force optimization before starting the benchmark
s.push(b);
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(s.read)');
s.push(b);
while (s.read());

bench.start();
for (var k = 0; k < n; ++k) {
for (var i = 0; i < 1e4; ++i)
s.push(b);
while (s.read());
}
bench.end(n);
}
32 changes: 32 additions & 0 deletions benchmark/streams/readable-unevenread.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
'use strict';

const common = require('../common');
const v8 = require('v8');
const Readable = require('stream').Readable;

const bench = common.createBenchmark(main, {
n: [100e1]
});

function main(conf) {
const n = +conf.n;
const b = new Buffer(32);
const s = new Readable();
function noop() {}
s._read = noop;

// Force optimization before starting the benchmark
s.push(b);
v8.setFlagsFromString('--allow_natives_syntax');
eval('%OptimizeFunctionOnNextCall(s.read)');
s.push(b);
while (s.read(12));

bench.start();
for (var k = 0; k < n; ++k) {
for (var i = 0; i < 1e4; ++i)
s.push(b);
while (s.read(12));
}
bench.end(n);
}
113 changes: 113 additions & 0 deletions benchmark/timers/immediate.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
'use strict';
var common = require('../common.js');

var bench = common.createBenchmark(main, {
thousands: [2000],
type: ['depth', 'depth1', 'breadth', 'breadth1', 'breadth4', 'clear']
});

function main(conf) {
var N = +conf.thousands * 1e3;
switch (conf.type) {
case 'depth':
depth(N);
break;
case 'depth1':
depth1(N);
break;
case 'breadth':
breadth(N);
break;
case 'breadth1':
breadth1(N);
break;
case 'breadth4':
breadth4(N);
break;
case 'clear':
clear(N);
break;
}
}

// setImmediate tail recursion, 0 arguments
function depth(N) {
var n = 0;
bench.start();
setImmediate(cb);
function cb() {
n++;
if (n === N)
bench.end(N / 1e3);
else
setImmediate(cb);
}
}

// setImmediate tail recursion, 1 argument
function depth1(N) {
var n = 0;
bench.start();
setImmediate(cb, 1);
function cb(a1) {
n++;
if (n === N)
bench.end(N / 1e3);
else
setImmediate(cb, 1);
}
}

// concurrent setImmediate, 0 arguments
function breadth(N) {
var n = 0;
bench.start();
function cb() {
n++;
if (n === N)
bench.end(N / 1e3);
}
for (var i = 0; i < N; i++) {
setImmediate(cb);
}
}

// concurrent setImmediate, 1 argument
function breadth1(N) {
var n = 0;
bench.start();
function cb(a1) {
n++;
if (n === N)
bench.end(N / 1e3);
}
for (var i = 0; i < N; i++) {
setImmediate(cb, 1);
}
}

// concurrent setImmediate, 4 arguments
function breadth4(N) {
var n = 0;
bench.start();
function cb(a1, a2, a3, a4) {
n++;
if (n === N)
bench.end(N / 1e3);
}
for (var i = 0; i < N; i++) {
setImmediate(cb, 1, 2, 3, 4);
}
}

function clear(N) {
bench.start();
function cb(a1) {
if (a1 === 2)
bench.end(N / 1e3);
}
for (var i = 0; i < N; i++) {
clearImmediate(setImmediate(cb, 1));
}
setImmediate(cb, 2);
}
20 changes: 20 additions & 0 deletions benchmark/tls/convertprotocols.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
'use strict';

const common = require('../common.js');
const tls = require('tls');

const bench = common.createBenchmark(main, {
n: [1, 50000]
});

function main(conf) {
const n = +conf.n;

var i = 0;
var m = {};
common.v8ForceOptimization(
tls.convertNPNProtocols, ['ABC', 'XYZ123', 'FOO'], m);
bench.start();
for (; i < n; i++) tls.convertNPNProtocols(['ABC', 'XYZ123', 'FOO'], m);
bench.end(n);
}
8 changes: 8 additions & 0 deletions common.gypi
Original file line number Diff line number Diff line change
@@ -11,6 +11,11 @@
'msvs_multi_core_compile': '0', # we do enable multicore compiles, but not using the V8 way
'python%': 'python',

'node_shared%': 'false',
'node_use_v8_platform%': 'true',
'node_use_bundled_v8%': 'true',
'node_module_version%': '',

'node_tag%': '',
'uv_library%': 'static_library',

@@ -290,6 +295,9 @@
],
'ldflags!': [ '-rdynamic' ],
}],
[ 'node_shared=="true"', {
'cflags': [ '-fPIC' ],
}],
],
}],
[ 'OS=="android"', {
35 changes: 35 additions & 0 deletions configure
Original file line number Diff line number Diff line change
@@ -24,6 +24,10 @@ from gyp.common import GetFlavor
sys.path.insert(0, os.path.join(root_dir, 'tools', 'configure.d'))
import nodedownload

# imports in tools/
sys.path.insert(0, os.path.join(root_dir, 'tools'))
import getmoduleversion

# parse our options
parser = optparse.OptionParser()

@@ -415,6 +419,31 @@ parser.add_option('--no-browser-globals',
help='do not export browser globals like setTimeout, console, etc. ' +
'(This mode is not officially supported for regular applications)')

parser.add_option('--without-inspector',
action='store_true',
dest='without_inspector',
help='disable experimental V8 inspector support')

parser.add_option('--shared',
action='store_true',
dest='shared',
help='compile shared library for embedding node in another project. ' +
'(This mode is not officially supported for regular applications)')

parser.add_option('--without-v8-platform',
action='store_true',
dest='without_v8_platform',
default=False,
help='do not initialize v8 platform during node.js startup. ' +
'(This mode is not officially supported for regular applications)')

parser.add_option('--without-bundled-v8',
action='store_true',
dest='without_bundled_v8',
default=False,
help='do not use V8 includes from the bundled deps folder. ' +
'(This mode is not officially supported for regular applications)')

(options, args) = parser.parse_args()

# Expand ~ in the install prefix now, it gets written to multiple files.
@@ -805,11 +834,17 @@ def configure_node(o):
o['variables']['node_target_type'] = 'static_library'

o['variables']['node_no_browser_globals'] = b(options.no_browser_globals)
o['variables']['node_shared'] = b(options.shared)
o['variables']['node_use_v8_platform'] = b(not options.without_v8_platform)
o['variables']['node_use_bundled_v8'] = b(not options.without_bundled_v8)
o['variables']['node_module_version'] = int(getmoduleversion.get_version())

if options.linked_module:
o['variables']['library_files'] = options.linked_module

o['variables']['asan'] = int(options.enable_asan or 0)
o['variables']['v8_inspector'] = b(not options.without_inspector)
o['variables']['debug_devtools'] = 'node'

if options.use_xcode and options.use_ninja:
raise Exception('--xcode and --ninja cannot be used together.')
Binary file modified deps/icu-small/source/data/in/icudt57l.dat
Binary file not shown.
44 changes: 0 additions & 44 deletions deps/openssl/masm_compile.gypi

This file was deleted.

7 changes: 6 additions & 1 deletion deps/openssl/openssl.gyp
Original file line number Diff line number Diff line change
@@ -121,7 +121,12 @@
}], # end of conditions of openssl_no_asm
['OS=="win"', {
'defines' : ['<@(openssl_defines_all_win)'],
'includes': ['masm_compile.gypi',],
'msvs_settings': {
'MASM': {
# Use /safeseh, see commit: 01fa5ee
'UseSafeExceptionHandlers': 'true',
},
},
}, {
'defines' : ['<@(openssl_defines_all_non_win)']
}]
1 change: 1 addition & 0 deletions deps/v8_inspector/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
platform/v8_inspector/build/rjsmin.pyc
Empty file added deps/v8_inspector/.gitmodules
Empty file.
10 changes: 10 additions & 0 deletions deps/v8_inspector/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
V8 Inspector support for Node.js
================================

This directory is a gathering of dependencies for Node.js support for the
[Chrome Debug Protocol][https://developer.chrome.com/devtools/docs/debugger-protocol].

* platform/v8_inspector: vendored from https://chromium.googlesource.com/chromium/src/third_party/WebKit/Source/platform/v8_inspector
* platform/inspector_protocol: vendored from https://chromium.googlesource.com/chromium/src/third_party/WebKit/Source/platform/inspector_protocol
* deps/jinja2: vendored from https://github.com/mitsuhiko/jinja2
* deps/markupsafe: vendored from https://github.com/mitsuhiko/markupsafe
10 changes: 10 additions & 0 deletions deps/v8_inspector/deps/jinja2/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
*.so
docs/_build
*.pyc
*.pyo
*.egg-info
*.egg
build
dist
.DS_Store
.tox
24 changes: 24 additions & 0 deletions deps/v8_inspector/deps/jinja2/.travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
language: python
python:
- "2.6"
- "2.7"
- "3.3"
- "3.4"
- "3.5"
- "pypy"

install:
- pip install tox
script:
- tox -e \
$(echo $TRAVIS_PYTHON_VERSION | sed 's/^\([0-9]\)\.\([0-9]\).*/py\1\2/')

notifications:
email: false
irc:
channels:
- "chat.freenode.net#pocoo"
on_success: change
on_failure: always
use_notice: true
skip_join: true
33 changes: 33 additions & 0 deletions deps/v8_inspector/deps/jinja2/AUTHORS
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
Jinja is written and maintained by the Jinja Team and various
contributors:

Lead Developer:

- Armin Ronacher <armin.ronacher@active-4.com>

Developers:

- Christoph Hack
- Georg Brandl

Contributors:

- Bryan McLemore
- Mickaël Guérin <kael@crocobox.org>
- Cameron Knight
- Lawrence Journal-World.
- David Cramer

Patches and suggestions:

- Ronny Pfannschmidt
- Axel Böhm
- Alexey Melchakov
- Bryan McLemore
- Clovis Fabricio (nosklo)
- Cameron Knight
- Peter van Dijk (Habbie)
- Stefan Ebner
- Rene Leonhardt
- Thomas Waldmann
- Cory Benfield (Lukasa)
375 changes: 375 additions & 0 deletions deps/v8_inspector/deps/jinja2/CHANGES
Original file line number Diff line number Diff line change
@@ -0,0 +1,375 @@
Jinja2 Changelog
================

Version 2.8.1
-------------

(unreleased bugfix release)

- Fixed the `for_qs` flag for `urlencode`.

Version 2.8
-----------
(codename Replacement, released on July 26th 2015)

- Added `target` parameter to urlize function.
- Added support for `followsymlinks` to the file system loader.
- The truncate filter now counts the length.
- Added equalto filter that helps with select filters.
- Changed cache keys to use absolute file names if available
instead of load names.
- Fixed loop length calculation for some iterators.
- Changed how Jinja2 enforces strings to be native strings in
Python 2 to work when people break their default encoding.
- Added :func:`make_logging_undefined` which returns an undefined
object that logs failures into a logger.
- If unmarshalling of cached data fails the template will be
reloaded now.
- Implemented a block ``set`` tag.
- Default cache size was incrased to 400 from a low 50.
- Fixed ``is number`` test to accept long integers in all Python versions.
- Changed ``is number`` to accept Decimal as a number.
- Added a check for default arguments followed by non-default arguments. This
change makes ``{% macro m(x, y=1, z) %}...{% endmacro %}`` a syntax error. The
previous behavior for this code was broken anyway (resulting in the default
value being applied to `y`).
- Add ability to use custom subclasses of ``jinja2.compiler.CodeGenerator`` and
``jinja2.runtime.Context`` by adding two new attributes to the environment
(`code_generator_class` and `context_class`) (pull request ``#404``).
- added support for context/environment/evalctx decorator functions on
the finalize callback of the environment.
- escape query strings for urlencode properly. Previously slashes were not
escaped in that place.
- Add 'base' parameter to 'int' filter.

Version 2.7.3
-------------
(bugfix release, released on June 6th 2014)

- Security issue: Corrected the security fix for the cache folder. This
fix was provided by RedHat.

Version 2.7.2
-------------
(bugfix release, released on January 10th 2014)

- Prefix loader was not forwarding the locals properly to
inner loaders. This is now fixed.
- Security issue: Changed the default folder for the filesystem cache to be
user specific and read and write protected on UNIX systems. See `Debian bug
734747`_ for more information.

.. _Debian bug 734747: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=734747

Version 2.7.1
-------------
(bugfix release, released on August 7th 2013)

- Fixed a bug with ``call_filter`` not working properly on environment
and context filters.
- Fixed lack of Python 3 support for bytecode caches.
- Reverted support for defining blocks in included templates as this
broke existing templates for users.
- Fixed some warnings with hashing of undefineds and nodes if Python
is run with warnings for Python 3.
- Added support for properly hashing undefined objects.
- Fixed a bug with the title filter not working on already uppercase
strings.

Version 2.7
-----------
(codename Translation, released on May 20th 2013)

- Choice and prefix loaders now dispatch source and template lookup
separately in order to work in combination with module loaders as
advertised.
- Fixed filesizeformat.
- Added a non-silent option for babel extraction.
- Added `urlencode` filter that automatically quotes values for
URL safe usage with utf-8 as only supported encoding. If applications
want to change this encoding they can override the filter.
- Added `keep-trailing-newline` configuration to environments and
templates to optionally preserve the final trailing newline.
- Accessing `last` on the loop context no longer causes the iterator
to be consumed into a list.
- Python requirement changed: 2.6, 2.7 or >= 3.3 are required now,
supported by same source code, using the "six" compatibility library.
- Allow `contextfunction` and other decorators to be applied to `__call__`.
- Added support for changing from newline to different signs in the `wordwrap`
filter.
- Added support for ignoring memcache errors silently.
- Added support for keeping the trailing newline in templates.
- Added finer grained support for stripping whitespace on the left side
of blocks.
- Added `map`, `select`, `reject`, `selectattr` and `rejectattr`
filters.
- Added support for `loop.depth` to figure out how deep inside a recursive
loop the code is.
- Disabled py_compile for pypy and python 3.

Version 2.6
-----------
(codename Convolution, released on July 24th 2011)

- internal attributes now raise an internal attribute error now instead
of returning an undefined. This fixes problems when passing undefined
objects to Python semantics expecting APIs.
- traceback support now works properly for PyPy. (Tested with 1.4)
- implemented operator intercepting for sandboxed environments. This
allows application developers to disable builtin operators for better
security. (For instance limit the mathematical operators to actual
integers instead of longs)
- groupby filter now supports dotted notation for grouping by attributes
of attributes.
- scoped blocks now properly treat toplevel assignments and imports.
Previously an import suddenly "disappeared" in a scoped block.
- automatically detect newer Python interpreter versions before loading code
from bytecode caches to prevent segfaults on invalid opcodes. The segfault
in earlier Jinja2 versions here was not a Jinja2 bug but a limitation in
the underlying Python interpreter. If you notice Jinja2 segfaulting in
earlier versions after an upgrade of the Python interpreter you don't have
to upgrade, it's enough to flush the bytecode cache. This just no longer
makes this necessary, Jinja2 will automatically detect these cases now.
- the sum filter can now sum up values by attribute. This is a backwards
incompatible change. The argument to the filter previously was the
optional starting index which defaultes to zero. This now became the
second argument to the function because it's rarely used.
- like sum, sort now also makes it possible to order items by attribute.
- like sum and sort, join now also is able to join attributes of objects
as string.
- the internal eval context now has a reference to the environment.
- added a mapping test to see if an object is a dict or an object with
a similar interface.

Version 2.5.5
-------------
(re-release of 2.5.4 with built documentation removed for filesize.
Released on October 18th 2010)

- built documentation is no longer part of release.

Version 2.5.4
-------------
(bugfix release, released on October 17th 2010)

- Fixed extensions not loading properly with overlays.
- Work around a bug in cpython for the debugger that causes segfaults
on 64bit big-endian architectures.

Version 2.5.3
-------------
(bugfix release, released on October 17th 2010)

- fixed an operator precedence error introduced in 2.5.2. Statements
like "-foo.bar" had their implicit parentheses applied around the
first part of the expression ("(-foo).bar") instead of the more
correct "-(foo.bar)".

Version 2.5.2
-------------
(bugfix release, released on August 18th 2010)

- improved setup.py script to better work with assumptions people
might still have from it (``--with-speedups``).
- fixed a packaging error that excluded the new debug support.

Version 2.5.1
-------------
(bugfix release, released on August 17th 2010)

- StopIteration exceptions raised by functions called from templates
are now intercepted and converted to undefineds. This solves a
lot of debugging grief. (StopIteration is used internally to
abort template execution)
- improved performance of macro calls slightly.
- babel extraction can now properly extract newstyle gettext calls.
- using the variable `num` in newstyle gettext for something else
than the pluralize count will no longer raise a :exc:`KeyError`.
- removed builtin markup class and switched to markupsafe. For backwards
compatibility the pure Python implementation still exists but is
pulled from markupsafe by the Jinja2 developers. The debug support
went into a separate feature called "debugsupport" and is disabled
by default because it is only relevant for Python 2.4
- fixed an issue with unary operators having the wrong precendence.

Version 2.5
-----------
(codename Incoherence, relased on May 29th 2010)

- improved the sort filter (should have worked like this for a
long time) by adding support for case insensitive searches.
- fixed a bug for getattribute constant folding.
- support for newstyle gettext translations which result in a
nicer in-template user interface and more consistent
catalogs. (:ref:`newstyle-gettext`)
- it's now possible to register extensions after an environment
was created.

Version 2.4.1
-------------
(bugfix release, released on April 20th 2010)

- fixed an error reporting bug for undefineds.

Version 2.4
-----------
(codename Correlation, released on April 13th 2010)

- the environment template loading functions now transparently
pass through a template object if it was passed to it. This
makes it possible to import or extend from a template object
that was passed to the template.
- added a :class:`ModuleLoader` that can load templates from
precompiled sources. The environment now features a method
to compile the templates from a configured loader into a zip
file or folder.
- the _speedups C extension now supports Python 3.
- added support for autoescaping toggling sections and support
for evaluation contexts (:ref:`eval-context`).
- extensions have a priority now.

Version 2.3.1
-------------
(bugfix release, released on February 19th 2010)

- fixed an error reporting bug on all python versions
- fixed an error reporting bug on Python 2.4

Version 2.3
-----------
(3000 Pythons, released on February 10th 2010)

- fixes issue with code generator that causes unbound variables
to be generated if set was used in if-blocks and other small
identifier problems.
- include tags are now able to select between multiple templates
and take the first that exists, if a list of templates is
given.
- fixed a problem with having call blocks in outer scopes that
have an argument that is also used as local variable in an
inner frame (#360).
- greatly improved error message reporting (#339)
- implicit tuple expressions can no longer be totally empty.
This change makes ``{% if %}...{% endif %}`` a syntax error
now. (#364)
- added support for translator comments if extracted via babel.
- added with-statement extension.
- experimental Python 3 support.

Version 2.2.1
-------------
(bugfix release, released on September 14th 2009)

- fixes some smaller problems for Jinja2 on Jython.

Version 2.2
-----------
(codename Kong, released on September 13th 2009)

- Include statements can now be marked with ``ignore missing`` to skip
non existing templates.
- Priority of `not` raised. It's now possible to write `not foo in bar`
as an alias to `foo not in bar` like in python. Previously the grammar
required parentheses (`not (foo in bar)`) which was odd.
- Fixed a bug that caused syntax errors when defining macros or using the
`{% call %}` tag inside loops.
- Fixed a bug in the parser that made ``{{ foo[1, 2] }}`` impossible.
- Made it possible to refer to names from outer scopes in included templates
that were unused in the callers frame (#327)
- Fixed a bug that caused internal errors if names where used as iteration
variable and regular variable *after* the loop if that variable was unused
*before* the loop. (#331)
- Added support for optional `scoped` modifier to blocks.
- Added support for line-comments.
- Added the `meta` module.
- Renamed (undocumented) attribute "overlay" to "overlayed" on the
environment because it was clashing with a method of the same name.
- speedup extension is now disabled by default.

Version 2.1.1
-------------
(Bugfix release)

- Fixed a translation error caused by looping over empty recursive loops.

Version 2.1
-----------
(codename Yasuzō, released on November 23rd 2008)

- fixed a bug with nested loops and the special loop variable. Before the
change an inner loop overwrote the loop variable from the outer one after
iteration.

- fixed a bug with the i18n extension that caused the explicit pluralization
block to look up the wrong variable.

- fixed a limitation in the lexer that made ``{{ foo.0.0 }}`` impossible.

- index based subscribing of variables with a constant value returns an
undefined object now instead of raising an index error. This was a bug
caused by eager optimizing.

- the i18n extension looks up `foo.ugettext` now followed by `foo.gettext`
if an translations object is installed. This makes dealing with custom
translations classes easier.

- fixed a confusing behavior with conditional extending. loops were partially
executed under some conditions even though they were not part of a visible
area.

- added `sort` filter that works like `dictsort` but for arbitrary sequences.

- fixed a bug with empty statements in macros.

- implemented a bytecode cache system. (:ref:`bytecode-cache`)

- the template context is now weakref-able

- inclusions and imports "with context" forward all variables now, not only
the initial context.

- added a cycle helper called `cycler`.

- added a joining helper called `joiner`.

- added a `compile_expression` method to the environment that allows compiling
of Jinja expressions into callable Python objects.

- fixed an escaping bug in urlize

Version 2.0
-----------
(codename jinjavitus, released on July 17th 2008)

- the subscribing of objects (looking up attributes and items) changed from
slightly. It's now possible to give attributes or items a higher priority
by either using dot-notation lookup or the bracket syntax. This also
changed the AST slightly. `Subscript` is gone and was replaced with
:class:`~jinja2.nodes.Getitem` and :class:`~jinja2.nodes.Getattr`.

For more information see :ref:`the implementation details <notes-on-subscriptions>`.

- added support for preprocessing and token stream filtering for extensions.
This would allow extensions to allow simplified gettext calls in template
data and something similar.

- added :meth:`jinja2.environment.TemplateStream.dump`.

- added missing support for implicit string literal concatenation.
``{{ "foo" "bar" }}`` is equivalent to ``{{ "foobar" }}``

- `else` is optional for conditional expressions. If not given it evaluates
to `false`.

- improved error reporting for undefined values by providing a position.

- `filesizeformat` filter uses decimal prefixes now per default and can be
set to binary mode with the second parameter.

- fixed bug in finalizer

Version 2.0rc1
--------------
(no codename, released on June 9th 2008)

- first release of Jinja2
31 changes: 31 additions & 0 deletions deps/v8_inspector/deps/jinja2/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details.

Some rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.

* The names of the contributors may not be used to endorse or
promote products derived from this software without specific
prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
12 changes: 12 additions & 0 deletions deps/v8_inspector/deps/jinja2/MANIFEST.in
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
include MANIFEST.in Makefile CHANGES LICENSE AUTHORS run-tests.py
recursive-include docs *
recursive-include custom_fixers *
recursive-include ext *
recursive-include artwork *
recursive-include examples *
recursive-include jinja2/testsuite/res *
recursive-exclude docs/_build *
recursive-exclude jinja2 *.pyc
recursive-exclude docs *.pyc
recursive-exclude jinja2 *.pyo
recursive-exclude docs *.pyo
21 changes: 21 additions & 0 deletions deps/v8_inspector/deps/jinja2/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
test:
py.test

develop:
pip install --editable .

tox-test:
@tox

release:
python scripts/make-release.py

upload-docs:
$(MAKE) -C docs html dirhtml latex
$(MAKE) -C docs/_build/latex all-pdf
cd docs/_build/; mv html jinja-docs; zip -r jinja-docs.zip jinja-docs; mv jinja-docs html
scp -r docs/_build/dirhtml/* flow.srv.pocoo.org:/srv/websites/jinja.pocoo.org/docs/
scp -r docs/_build/latex/Jinja2.pdf flow.srv.pocoo.org:/srv/websites/jinja.pocoo.org/docs/jinja-docs.pdf
scp -r docs/_build/jinja-docs.zip flow.srv.pocoo.org:/srv/websites/jinja.pocoo.org/docs/

.PHONY: test
49 changes: 49 additions & 0 deletions deps/v8_inspector/deps/jinja2/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
Jinja2
~~~~~~

Jinja2 is a template engine written in pure Python. It provides a
`Django`_ inspired non-XML syntax but supports inline expressions and
an optional `sandboxed`_ environment.

Nutshell
--------

Here a small example of a Jinja template::

{% extends 'base.html' %}
{% block title %}Memberlist{% endblock %}
{% block content %}
<ul>
{% for user in users %}
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>
{% endblock %}

Philosophy
----------

Application logic is for the controller, but don't make the template designer's
life difficult by restricting functionality too much.

For more information visit the new `Jinja2 webpage`_ and `documentation`_.

The `Jinja2 tip`_ is installable via `easy_install` with ``easy_install
Jinja2==dev``.

.. _sandboxed: http://en.wikipedia.org/wiki/Sandbox_(computer_security)
.. _Django: http://www.djangoproject.com/
.. _Jinja2 webpage: http://jinja.pocoo.org/
.. _documentation: http://jinja.pocoo.org/docs/
.. _Jinja2 tip: http://jinja.pocoo.org/docs/intro/#as-a-python-egg-via-easy-install

Builds
------

+---------------------+------------------------------------------------------------------------------+
| ``master`` | .. image:: https://travis-ci.org/mitsuhiko/jinja2.svg?branch=master |
| | :target: https://travis-ci.org/mitsuhiko/jinja2 |
+---------------------+------------------------------------------------------------------------------+
| ``2.7-maintenance`` | .. image:: https://travis-ci.org/mitsuhiko/jinja2.svg?branch=2.7-maintenance |
| | :target: https://travis-ci.org/mitsuhiko/jinja2 |
+---------------------+------------------------------------------------------------------------------+
132 changes: 132 additions & 0 deletions deps/v8_inspector/deps/jinja2/artwork/jinjalogo.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
118 changes: 118 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# Makefile for Sphinx documentation
#

# You can set these variables from the command line.
SPHINXOPTS =
SPHINXBUILD = sphinx-build
PAPER =
BUILDDIR = _build

# Internal variables.
PAPEROPT_a4 = -D latex_paper_size=a4
PAPEROPT_letter = -D latex_paper_size=letter
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .

.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp epub latex changes linkcheck doctest

help:
@echo "Please use \`make <target>' where <target> is one of"
@echo " html to make standalone HTML files"
@echo " dirhtml to make HTML files named index.html in directories"
@echo " singlehtml to make a single large HTML file"
@echo " pickle to make pickle files"
@echo " json to make JSON files"
@echo " htmlhelp to make HTML files and a HTML help project"
@echo " qthelp to make HTML files and a qthelp project"
@echo " devhelp to make HTML files and a Devhelp project"
@echo " epub to make an epub"
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
@echo " latexpdf to make LaTeX files and run them through pdflatex"
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"

clean:
-rm -rf $(BUILDDIR)/*

html:
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."

dirhtml:
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
@echo
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."

singlehtml:
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
@echo
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."

pickle:
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
@echo
@echo "Build finished; now you can process the pickle files."

json:
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
@echo
@echo "Build finished; now you can process the JSON files."

htmlhelp:
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
@echo
@echo "Build finished; now you can run HTML Help Workshop with the" \
".hhp project file in $(BUILDDIR)/htmlhelp."

qthelp:
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
@echo
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Flask.qhcp"
@echo "To view the help file:"
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Flask.qhc"

devhelp:
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) _build/devhelp
@echo
@echo "Build finished."
@echo "To view the help file:"
@echo "# mkdir -p $$HOME/.local/share/devhelp/Flask"
@echo "# ln -s _build/devhelp $$HOME/.local/share/devhelp/Flask"
@echo "# devhelp"

epub:
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
@echo
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."

latex:
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
@echo
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
@echo "Run \`make all-pdf' or \`make all-ps' in that directory to" \
"run these through (pdf)latex."

latexpdf: latex
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) _build/latex
@echo "Running LaTeX files through pdflatex..."
make -C _build/latex all-pdf
@echo "pdflatex finished; the PDF files are in _build/latex."

changes:
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
@echo
@echo "The overview file is in $(BUILDDIR)/changes."

linkcheck:
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
@echo
@echo "Link check complete; look for any errors in the above output " \
"or in $(BUILDDIR)/linkcheck/output.txt."

doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
Empty file.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
20 changes: 20 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/_templates/sidebarintro.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<h3>About Jinja2</h3>
<p>
Jinja2 is a full featured template engine for Python. It has full unicode
support, an optional integrated sandboxed execution environment, widely used
and BSD licensed.
</p>
<h3>Other Formats</h3>
<p>
You can download the documentation in other formats as well:
</p>
<ul>
<li><a href="http://jinja.pocoo.org/docs/jinja-docs.pdf">as PDF</a>
<li><a href="http://jinja.pocoo.org/docs/jinja-docs.zip">as zipped HTML</a>
</ul>
<h3>Useful Links</h3>
<ul>
<li><a href="http://jinja.pocoo.org/">The Jinja2 Website</a></li>
<li><a href="http://pypi.python.org/pypi/Jinja2">Jinja2 @ PyPI</a></li>
<li><a href="http://github.com/mitsuhiko/jinja2">Jinja2 @ github</a></li>
</ul>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<p class="logo"><a href="{{ pathto(master_doc) }}">
<img class="logo" src="{{ pathto('_static/jinja-small.png', 1) }}" alt="Logo"/>
</a></p>
37 changes: 37 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/_themes/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
Copyright (c) 2010 by Armin Ronacher.

Some rights reserved.

Redistribution and use in source and binary forms of the theme, with or
without modification, are permitted provided that the following conditions
are met:

* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.

* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.

* The names of the contributors may not be used to endorse or
promote products derived from this software without specific
prior written permission.

We kindly ask you to only use these themes in an unmodified manner just
for Flask and Flask-related products, not for unrelated projects. If you
like the visual style and want to use it for your own projects, please
consider making some larger changes to the themes (such as changing
font faces, sizes, colors or margins).

THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
31 changes: 31 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/_themes/README
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
Flask Sphinx Styles
===================

This repository contains sphinx styles for Flask and Flask related
projects. To use this style in your Sphinx documentation, follow
this guide:

1. put this folder as _themes into your docs folder. Alternatively
you can also use git submodules to check out the contents there.
2. add this to your conf.py:

sys.path.append(os.path.abspath('_themes'))
html_theme_path = ['_themes']
html_theme = 'flask'

The following themes exist:

- 'flask' - the standard flask documentation theme for large
projects
- 'flask_small' - small one-page theme. Intended to be used by
very small addon libraries for flask.

The following options exist for the flask_small theme:

[options]
index_logo = '' filename of a picture in _static
to be used as replacement for the
h1 in the index.rst file.
index_logo_height = 120px height of the index logo
github_fork = '' repository name on github for the
"fork me" badge
8 changes: 8 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/_themes/jinja/layout.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{%- extends "basic/layout.html" %}
{%- block relbar2 %}{% endblock %}
{%- block footer %}
<div class="footer">
&copy; Copyright {{ copyright }}.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a>.
</div>
{%- endblock %}
19 changes: 19 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/_themes/jinja/relations.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<h3>Related Topics</h3>
<ul>
<li><a href="{{ pathto(master_doc) }}">Documentation overview</a><ul>
{%- for parent in parents %}
<li><a href="{{ parent.link|e }}">{{ parent.title }}</a><ul>
{%- endfor %}
{%- if prev %}
<li>Previous: <a href="{{ prev.link|e }}" title="{{ _('previous chapter')
}}">{{ prev.title }}</a></li>
{%- endif %}
{%- if next %}
<li>Next: <a href="{{ next.link|e }}" title="{{ _('next chapter')
}}">{{ next.title }}</a></li>
{%- endif %}
{%- for parent in parents %}
</ul></li>
{%- endfor %}
</ul></li>
</ul>
396 changes: 396 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/_themes/jinja/static/jinja.css_t
Original file line number Diff line number Diff line change
@@ -0,0 +1,396 @@
/*
* jinja.css_t
* ~~~~~~~~~~~
*
* :copyright: Copyright 2011 by Armin Ronacher.
* :license: Flask Design License, see LICENSE for details.
*/

@import url(http://fonts.googleapis.com/css?family=Crimson+Text);

{% set page_width = '940px' %}
{% set sidebar_width = '220px' %}
{% set font_family = 'Georgia, serif' %}
{% set header_font_family = 'Crimson Text, ' ~ font_family %}

@import url("basic.css");

/* -- page layout ----------------------------------------------------------- */

body {
font-family: {{ font_family }};
font-size: 17px;
background-color: white;
color: #000;
margin: 0;
padding: 0;
}

div.document {
width: {{ page_width }};
margin: 30px auto 0 auto;
}

div.documentwrapper {
float: left;
width: 100%;
}

div.bodywrapper {
margin: 0 0 0 {{ sidebar_width }};
}

div.sphinxsidebar {
width: {{ sidebar_width }};
}

hr {
border: 1px solid #B1B4B6;
}

div.body {
background-color: #ffffff;
color: #3E4349;
padding: 0 30px 0 30px;
}

img.floatingflask {
padding: 0 0 10px 10px;
float: right;
}

div.footer {
width: {{ page_width }};
margin: 20px auto 30px auto;
font-size: 14px;
color: #888;
text-align: right;
}

div.footer a {
color: #888;
}

div.related {
display: none;
}

div.sphinxsidebar a {
color: #444;
text-decoration: none;
border-bottom: 1px dotted #999;
}

div.sphinxsidebar a:hover {
border-bottom: 1px solid #999;
}

div.sphinxsidebar {
font-size: 15px;
line-height: 1.5;
}

div.sphinxsidebarwrapper {
padding: 18px 10px;
}

div.sphinxsidebarwrapper p.logo {
padding: 0 0 20px 0;
margin: 0;
text-align: center;
}

div.sphinxsidebar h3,
div.sphinxsidebar h4 {
font-family: {{ font_family }};
color: #444;
font-size: 24px;
font-weight: normal;
margin: 0 0 5px 0;
padding: 0;
}

div.sphinxsidebar h4 {
font-size: 20px;
}

div.sphinxsidebar h3 a {
color: #444;
}

div.sphinxsidebar p.logo a,
div.sphinxsidebar h3 a,
div.sphinxsidebar p.logo a:hover,
div.sphinxsidebar h3 a:hover {
border: none;
}

div.sphinxsidebar p {
color: #555;
margin: 10px 0;
}

div.sphinxsidebar ul {
margin: 10px 0;
padding: 0;
color: #000;
}

div.sphinxsidebar input {
border: 1px solid #ccc;
font-family: {{ font_family }};
font-size: 14px;
}

div.sphinxsidebar form.search input[name="q"] {
width: 130px;
}

/* -- body styles ----------------------------------------------------------- */

a {
color: #aa0000;
text-decoration: underline;
}

a:hover {
color: #dd0000;
text-decoration: underline;
}

div.body h1,
div.body h2,
div.body h3,
div.body h4,
div.body h5,
div.body h6 {
font-family: {{ header_font_family }};
font-weight: normal;
margin: 30px 0px 10px 0px;
padding: 0;
color: black;
}

div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
div.body h2 { font-size: 180%; }
div.body h3 { font-size: 150%; }
div.body h4 { font-size: 130%; }
div.body h5 { font-size: 100%; }
div.body h6 { font-size: 100%; }

a.headerlink {
color: #ddd;
padding: 0 4px;
text-decoration: none;
}

a.headerlink:hover {
color: #444;
background: #eaeaea;
}

div.body p, div.body dd, div.body li {
line-height: 1.4em;
}

div.admonition {
background: #fafafa;
margin: 20px -30px;
padding: 10px 30px;
border-top: 1px solid #ccc;
border-bottom: 1px solid #ccc;
}

div.admonition tt.xref, div.admonition a tt {
border-bottom: 1px solid #fafafa;
}

dd div.admonition {
margin-left: -60px;
padding-left: 60px;
}

div.admonition p.admonition-title {
font-family: {{ font_family }};
font-weight: normal;
font-size: 24px;
margin: 0 0 10px 0;
padding: 0;
line-height: 1;
}

div.admonition p.last {
margin-bottom: 0;
}

div.highlight {
background-color: white;
}

dt:target, .highlight {
background: #FAF3E8;
}

div.note {
background-color: #eee;
border: 1px solid #ccc;
}

div.seealso {
background-color: #ffc;
border: 1px solid #ff6;
}

div.topic {
background-color: #eee;
}

p.admonition-title {
display: inline;
}

p.admonition-title:after {
content: ":";
}

pre, tt {
font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
font-size: 0.85em;
}

img.screenshot {
}

tt.descname, tt.descclassname {
font-size: 0.95em;
}

tt.descname {
padding-right: 0.08em;
}

img.screenshot {
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}

table.docutils {
border: 1px solid #888;
-moz-box-shadow: 2px 2px 4px #eee;
-webkit-box-shadow: 2px 2px 4px #eee;
box-shadow: 2px 2px 4px #eee;
}

table.docutils td, table.docutils th {
border: 1px solid #888;
padding: 0.25em 0.7em;
}

table.field-list, table.footnote {
border: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
box-shadow: none;
}

table.footnote {
margin: 15px 0;
width: 100%;
border: 1px solid #eee;
background: #fdfdfd;
font-size: 0.9em;
}

table.footnote + table.footnote {
margin-top: -15px;
border-top: none;
}

table.field-list th {
padding: 0 0.8em 0 0;
}

table.field-list td {
padding: 0;
}

table.footnote td.label {
width: 0px;
padding: 0.3em 0 0.3em 0.5em;
}

table.footnote td {
padding: 0.3em 0.5em;
}

dl {
margin: 0;
padding: 0;
}

dl dd {
margin-left: 30px;
}

blockquote {
margin: 0 0 0 30px;
padding: 0;
}

ul, ol {
margin: 10px 0 10px 30px;
padding: 0;
}

pre {
background: #eee;
padding: 7px 30px;
margin: 15px -30px;
line-height: 1.3em;
}

dl pre, blockquote pre, li pre {
margin-left: -60px;
padding-left: 60px;
}

dl dl pre {
margin-left: -90px;
padding-left: 90px;
}

tt {
background-color: #E8EFF0;
color: #222;
/* padding: 1px 2px; */
}

tt.xref, a tt {
background-color: #E8EFF0;
border-bottom: 1px solid white;
}

a.reference {
text-decoration: none;
border-bottom: 1px dotted #bb0000;
}

a.reference:hover {
border-bottom: 1px solid #dd0000;
}

a.footnote-reference {
text-decoration: none;
font-size: 0.7em;
vertical-align: top;
border-bottom: 1px dotted #bb0000;
}

a.footnote-reference:hover {
border-bottom: 1px solid #dd0000;
}

a:hover tt {
background: #EEE;
}
3 changes: 3 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/_themes/jinja/theme.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[theme]
inherit = basic
stylesheet = jinja.css
808 changes: 808 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/api.rst

Large diffs are not rendered by default.

56 changes: 56 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/cache_extension.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
from jinja2 import nodes
from jinja2.ext import Extension


class FragmentCacheExtension(Extension):
# a set of names that trigger the extension.
tags = set(['cache'])

def __init__(self, environment):
super(FragmentCacheExtension, self).__init__(environment)

# add the defaults to the environment
environment.extend(
fragment_cache_prefix='',
fragment_cache=None
)

def parse(self, parser):
# the first token is the token that started the tag. In our case
# we only listen to ``'cache'`` so this will be a name token with
# `cache` as value. We get the line number so that we can give
# that line number to the nodes we create by hand.
lineno = next(parser.stream).lineno

# now we parse a single expression that is used as cache key.
args = [parser.parse_expression()]

# if there is a comma, the user provided a timeout. If not use
# None as second parameter.
if parser.stream.skip_if('comma'):
args.append(parser.parse_expression())
else:
args.append(nodes.Const(None))

# now we parse the body of the cache block up to `endcache` and
# drop the needle (which would always be `endcache` in that case)
body = parser.parse_statements(['name:endcache'], drop_needle=True)

# now return a `CallBlock` node that calls our _cache_support
# helper method on this extension.
return nodes.CallBlock(self.call_method('_cache_support', args),
[], [], body).set_lineno(lineno)

def _cache_support(self, name, timeout, caller):
"""Helper callback."""
key = self.environment.fragment_cache_prefix + name

# try to load the block from the cache
# if there is no fragment in the cache, render it and store
# it in the cache.
rv = self.environment.fragment_cache.get(key)
if rv is not None:
return rv
rv = caller()
self.environment.fragment_cache.add(key, rv, timeout)
return rv
3 changes: 3 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/changelog.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
.. module:: jinja2

.. include:: ../CHANGES
160 changes: 160 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/conf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
# -*- coding: utf-8 -*-
#
# Jinja2 documentation build configuration file, created by
# sphinx-quickstart on Sun Apr 27 21:42:41 2008.
#
# This file is execfile()d with the current directory set to its containing dir.
#
# The contents of this file are pickled, so don't put values in the namespace
# that aren't pickleable (module imports are okay, they're removed automatically).
#
# All configuration values have a default value; values that are commented out
# serve to show the default value.

import sys, os

# If your extensions are in another directory, add it here. If the directory
# is relative to the documentation root, use os.path.abspath to make it
# absolute, like shown here.
sys.path.append(os.path.dirname(os.path.abspath(__file__)))

# General configuration
# ---------------------

# Add any Sphinx extension module names here, as strings. They can be extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'jinjaext']

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

# The suffix of source filenames.
source_suffix = '.rst'

# The master toctree document.
master_doc = 'index'

# General substitutions.
project = 'Jinja2'
copyright = '2008, Armin Ronacher'

# The default replacements for |version| and |release|, also used in various
# other places throughout the built documents.
#
# The short X.Y version.
import pkg_resources
try:
release = pkg_resources.get_distribution('Jinja2').version
except ImportError:
print 'To build the documentation, The distribution information of Jinja2'
print 'Has to be available. Either install the package into your'
print 'development environment or run "setup.py develop" to setup the'
print 'metadata. A virtualenv is recommended!'
sys.exit(1)
if 'dev' in release:
release = release.split('dev')[0] + 'dev'
version = '.'.join(release.split('.')[:2])

# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
#today = ''
# Else, today_fmt is used as the format for a strftime call.
today_fmt = '%B %d, %Y'

# List of documents that shouldn't be included in the build.
#unused_docs = []

# If true, '()' will be appended to :func: etc. cross-reference text.
#add_function_parentheses = True

# If true, the current module name will be prepended to all description
# unit titles (such as .. function::).
#add_module_names = True

# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
#show_authors = False

# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'jinjaext.JinjaStyle'


# Options for HTML output
# -----------------------

html_theme = 'jinja'
html_theme_path = ['_themes']

# The name for this set of Sphinx documents. If None, it defaults to
# "<project> v<release> documentation".
#html_title = None

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
html_static_path = ['_static']

# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
# using the given strftime format.
html_last_updated_fmt = '%b %d, %Y'

# If true, SmartyPants will be used to convert quotes and dashes to
# typographically correct entities.
#html_use_smartypants = True

# no modindex
html_use_modindex = False

# If true, the reST sources are included in the HTML build as _sources/<name>.
#html_copy_source = True

# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it.
#html_use_opensearch = False

# Output file base name for HTML help builder.
htmlhelp_basename = 'Jinja2doc'


# Options for LaTeX output
# ------------------------

# The paper size ('letter' or 'a4').
latex_paper_size = 'a4'

# The font size ('10pt', '11pt' or '12pt').
#latex_font_size = '10pt'

# Grouping the document tree into LaTeX files. List of tuples
# (source start file, target name, title, author, document class [howto/manual]).
latex_documents = [
('latexindex', 'Jinja2.tex', 'Jinja2 Documentation', 'Armin Ronacher',
'manual'),
]

# Additional stuff for LaTeX
latex_elements = {
'fontpkg': r'\usepackage{mathpazo}',
'papersize': 'a4paper',
'pointsize': '12pt',
'preamble': r'''
\usepackage{jinjastyle}
% i hate you latex
\DeclareUnicodeCharacter{14D}{o}
'''
}

latex_use_parts = True

latex_additional_files = ['jinjastyle.sty', 'logo.pdf']

# If false, no module index is generated.
latex_use_modindex = False

html_sidebars = {
'index': ['sidebarlogo.html', 'sidebarintro.html', 'sourcelink.html',
'searchbox.html'],
'**': ['sidebarlogo.html', 'localtoc.html', 'relations.html',
'sourcelink.html', 'searchbox.html']
}
23 changes: 23 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/contents.rst.inc
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
Jinja2 Documentation
--------------------

.. toctree::
:maxdepth: 2

intro
api
sandbox
templates
extensions
integration
switching
tricks

Additional Information
----------------------

.. toctree::
:maxdepth: 2

faq
changelog
346 changes: 346 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/extensions.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,346 @@
.. _jinja-extensions:

Extensions
==========

Jinja2 supports extensions that can add extra filters, tests, globals or even
extend the parser. The main motivation of extensions is to move often used
code into a reusable class like adding support for internationalization.


Adding Extensions
-----------------

Extensions are added to the Jinja2 environment at creation time. Once the
environment is created additional extensions cannot be added. To add an
extension pass a list of extension classes or import paths to the
`extensions` parameter of the :class:`Environment` constructor. The following
example creates a Jinja2 environment with the i18n extension loaded::

jinja_env = Environment(extensions=['jinja2.ext.i18n'])


.. _i18n-extension:

i18n Extension
--------------

**Import name:** `jinja2.ext.i18n`

The i18n extension can be used in combination with `gettext`_ or `babel`_. If
the i18n extension is enabled Jinja2 provides a `trans` statement that marks
the wrapped string as translatable and calls `gettext`.

After enabling, dummy `_` function that forwards calls to `gettext` is added
to the environment globals. An internationalized application then has to
provide a `gettext` function and optionally an `ngettext` function into the
namespace, either globally or for each rendering.

Environment Methods
~~~~~~~~~~~~~~~~~~~

After enabling the extension, the environment provides the following
additional methods:

.. method:: jinja2.Environment.install_gettext_translations(translations, newstyle=False)

Installs a translation globally for that environment. The translations
object provided must implement at least `ugettext` and `ungettext`.
The `gettext.NullTranslations` and `gettext.GNUTranslations` classes
as well as `Babel`_\s `Translations` class are supported.

.. versionchanged:: 2.5 newstyle gettext added

.. method:: jinja2.Environment.install_null_translations(newstyle=False)

Install dummy gettext functions. This is useful if you want to prepare
the application for internationalization but don't want to implement the
full internationalization system yet.

.. versionchanged:: 2.5 newstyle gettext added

.. method:: jinja2.Environment.install_gettext_callables(gettext, ngettext, newstyle=False)

Installs the given `gettext` and `ngettext` callables into the
environment as globals. They are supposed to behave exactly like the
standard library's :func:`gettext.ugettext` and
:func:`gettext.ungettext` functions.

If `newstyle` is activated, the callables are wrapped to work like
newstyle callables. See :ref:`newstyle-gettext` for more information.

.. versionadded:: 2.5

.. method:: jinja2.Environment.uninstall_gettext_translations()

Uninstall the translations again.

.. method:: jinja2.Environment.extract_translations(source)

Extract localizable strings from the given template node or source.

For every string found this function yields a ``(lineno, function,
message)`` tuple, where:

* `lineno` is the number of the line on which the string was found,
* `function` is the name of the `gettext` function used (if the
string was extracted from embedded Python code), and
* `message` is the string itself (a `unicode` object, or a tuple
of `unicode` objects for functions with multiple string arguments).

If `Babel`_ is installed, :ref:`the babel integration <babel-integration>`
can be used to extract strings for babel.

For a web application that is available in multiple languages but gives all
the users the same language (for example a multilingual forum software
installed for a French community) may load the translations once and add the
translation methods to the environment at environment generation time::

translations = get_gettext_translations()
env = Environment(extensions=['jinja2.ext.i18n'])
env.install_gettext_translations(translations)

The `get_gettext_translations` function would return the translator for the
current configuration. (For example by using `gettext.find`)

The usage of the `i18n` extension for template designers is covered as part
:ref:`of the template documentation <i18n-in-templates>`.

.. _gettext: http://docs.python.org/dev/library/gettext
.. _Babel: http://babel.edgewall.org/

.. _newstyle-gettext:

Newstyle Gettext
~~~~~~~~~~~~~~~~

.. versionadded:: 2.5

Starting with version 2.5 you can use newstyle gettext calls. These are
inspired by trac's internal gettext functions and are fully supported by
the babel extraction tool. They might not work as expected by other
extraction tools in case you are not using Babel's.

What's the big difference between standard and newstyle gettext calls? In
general they are less to type and less error prone. Also if they are used
in an autoescaping environment they better support automatic escaping.
Here are some common differences between old and new calls:

standard gettext:

.. sourcecode:: html+jinja

{{ gettext('Hello World!') }}
{{ gettext('Hello %(name)s!')|format(name='World') }}
{{ ngettext('%(num)d apple', '%(num)d apples', apples|count)|format(
num=apples|count
)}}

newstyle gettext looks like this instead:

.. sourcecode:: html+jinja

{{ gettext('Hello World!') }}
{{ gettext('Hello %(name)s!', name='World') }}
{{ ngettext('%(num)d apple', '%(num)d apples', apples|count) }}

The advantages of newstyle gettext are that you have less to type and that
named placeholders become mandatory. The latter sounds like a
disadvantage but solves a lot of troubles translators are often facing
when they are unable to switch the positions of two placeholder. With
newstyle gettext, all format strings look the same.

Furthermore with newstyle gettext, string formatting is also used if no
placeholders are used which makes all strings behave exactly the same.
Last but not least are newstyle gettext calls able to properly mark
strings for autoescaping which solves lots of escaping related issues many
templates are experiencing over time when using autoescaping.

Expression Statement
--------------------

**Import name:** `jinja2.ext.do`

The "do" aka expression-statement extension adds a simple `do` tag to the
template engine that works like a variable expression but ignores the
return value.

.. _loopcontrols-extension:

Loop Controls
-------------

**Import name:** `jinja2.ext.loopcontrols`

This extension adds support for `break` and `continue` in loops. After
enabling, Jinja2 provides those two keywords which work exactly like in
Python.

.. _with-extension:

With Statement
--------------

**Import name:** `jinja2.ext.with_`

.. versionadded:: 2.3

This extension adds support for the with keyword. Using this keyword it
is possible to enforce a nested scope in a template. Variables can be
declared directly in the opening block of the with statement or using a
standard `set` statement directly within.

.. _autoescape-extension:

Autoescape Extension
--------------------

**Import name:** `jinja2.ext.autoescape`

.. versionadded:: 2.4

The autoescape extension allows you to toggle the autoescape feature from
within the template. If the environment's :attr:`~Environment.autoescape`
setting is set to `False` it can be activated, if it's `True` it can be
deactivated. The setting overriding is scoped.


.. _writing-extensions:

Writing Extensions
------------------

.. module:: jinja2.ext

By writing extensions you can add custom tags to Jinja2. This is a non-trivial
task and usually not needed as the default tags and expressions cover all
common use cases. The i18n extension is a good example of why extensions are
useful. Another one would be fragment caching.

When writing extensions you have to keep in mind that you are working with the
Jinja2 template compiler which does not validate the node tree you are passing
to it. If the AST is malformed you will get all kinds of compiler or runtime
errors that are horrible to debug. Always make sure you are using the nodes
you create correctly. The API documentation below shows which nodes exist and
how to use them.

Example Extension
~~~~~~~~~~~~~~~~~

The following example implements a `cache` tag for Jinja2 by using the
`Werkzeug`_ caching contrib module:

.. literalinclude:: cache_extension.py
:language: python

And here is how you use it in an environment::

from jinja2 import Environment
from werkzeug.contrib.cache import SimpleCache

env = Environment(extensions=[FragmentCacheExtension])
env.fragment_cache = SimpleCache()

Inside the template it's then possible to mark blocks as cacheable. The
following example caches a sidebar for 300 seconds:

.. sourcecode:: html+jinja

{% cache 'sidebar', 300 %}
<div class="sidebar">
...
</div>
{% endcache %}

.. _Werkzeug: http://werkzeug.pocoo.org/

Extension API
~~~~~~~~~~~~~

Extensions always have to extend the :class:`jinja2.ext.Extension` class:

.. autoclass:: Extension
:members: preprocess, filter_stream, parse, attr, call_method

.. attribute:: identifier

The identifier of the extension. This is always the true import name
of the extension class and must not be changed.

.. attribute:: tags

If the extension implements custom tags this is a set of tag names
the extension is listening for.

Parser API
~~~~~~~~~~

The parser passed to :meth:`Extension.parse` provides ways to parse
expressions of different types. The following methods may be used by
extensions:

.. autoclass:: jinja2.parser.Parser
:members: parse_expression, parse_tuple, parse_assign_target,
parse_statements, free_identifier, fail

.. attribute:: filename

The filename of the template the parser processes. This is **not**
the load name of the template. For the load name see :attr:`name`.
For templates that were not loaded form the file system this is
`None`.

.. attribute:: name

The load name of the template.

.. attribute:: stream

The current :class:`~jinja2.lexer.TokenStream`

.. autoclass:: jinja2.lexer.TokenStream
:members: push, look, eos, skip, next, next_if, skip_if, expect

.. attribute:: current

The current :class:`~jinja2.lexer.Token`.

.. autoclass:: jinja2.lexer.Token
:members: test, test_any

.. attribute:: lineno

The line number of the token

.. attribute:: type

The type of the token. This string is interned so you may compare
it with arbitrary strings using the `is` operator.

.. attribute:: value

The value of the token.

There is also a utility function in the lexer module that can count newline
characters in strings:

.. autofunction:: jinja2.lexer.count_newlines

AST
~~~

The AST (Abstract Syntax Tree) is used to represent a template after parsing.
It's build of nodes that the compiler then converts into executable Python
code objects. Extensions that provide custom statements can return nodes to
execute custom Python code.

The list below describes all nodes that are currently available. The AST may
change between Jinja2 versions but will stay backwards compatible.

For more information have a look at the repr of :meth:`jinja2.Environment.parse`.

.. module:: jinja2.nodes

.. jinjanodes::

.. autoexception:: Impossible
191 changes: 191 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/faq.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
Frequently Asked Questions
==========================

This page answers some of the often asked questions about Jinja.

.. highlight:: html+jinja

Why is it called Jinja?
-----------------------

The name Jinja was chosen because it's the name of a Japanese temple and
temple and template share a similar pronunciation. It is not named after
the city in Uganda.

How fast is it?
---------------

We really hate benchmarks especially since they don't reflect much. The
performance of a template depends on many factors and you would have to
benchmark different engines in different situations. The benchmarks from the
testsuite show that Jinja2 has a similar performance to `Mako`_ and is between
10 and 20 times faster than Django's template engine or Genshi. These numbers
should be taken with tons of salt as the benchmarks that took these numbers
only test a few performance related situations such as looping. Generally
speaking the performance of a template engine doesn't matter much as the
usual bottleneck in a web application is either the database or the application
code.

.. _Mako: http://www.makotemplates.org/

How Compatible is Jinja2 with Django?
-------------------------------------

The default syntax of Jinja2 matches Django syntax in many ways. However
this similarity doesn't mean that you can use a Django template unmodified
in Jinja2. For example filter arguments use a function call syntax rather
than a colon to separate filter name and arguments. Additionally the
extension interface in Jinja is fundamentally different from the Django one
which means that your custom tags won't work any longer.

Generally speaking you will use much less custom extensions as the Jinja
template system allows you to use a certain subset of Python expressions
which can replace most Django extensions. For example instead of using
something like this::

{% load comments %}
{% get_latest_comments 10 as latest_comments %}
{% for comment in latest_comments %}
...
{% endfor %}

You will most likely provide an object with attributes to retrieve
comments from the database::

{% for comment in models.comments.latest(10) %}
...
{% endfor %}

Or directly provide the model for quick testing::

{% for comment in Comment.objects.order_by('-pub_date')[:10] %}
...
{% endfor %}

Please keep in mind that even though you may put such things into templates
it still isn't a good idea. Queries should go into the view code and not
the template!

Isn't it a terrible idea to put Logic into Templates?
-----------------------------------------------------

Without a doubt you should try to remove as much logic from templates as
possible. But templates without any logic mean that you have to do all
the processing in the code which is boring and stupid. A template engine
that does that is shipped with Python and called `string.Template`. Comes
without loops and if conditions and is by far the fastest template engine
you can get for Python.

So some amount of logic is required in templates to keep everyone happy.
And Jinja leaves it pretty much to you how much logic you want to put into
templates. There are some restrictions in what you can do and what not.

Jinja2 neither allows you to put arbitrary Python code into templates nor
does it allow all Python expressions. The operators are limited to the
most common ones and more advanced expressions such as list comprehensions
and generator expressions are not supported. This keeps the template engine
easier to maintain and templates more readable.

Why is Autoescaping not the Default?
------------------------------------

There are multiple reasons why automatic escaping is not the default mode
and also not the recommended one. While automatic escaping of variables
means that you will less likely have an XSS problem it also causes a huge
amount of extra processing in the template engine which can cause serious
performance problems. As Python doesn't provide a way to mark strings as
unsafe Jinja has to hack around that limitation by providing a custom
string class (the :class:`Markup` string) that safely interacts with safe
and unsafe strings.

With explicit escaping however the template engine doesn't have to perform
any safety checks on variables. Also a human knows not to escape integers
or strings that may never contain characters one has to escape or already
HTML markup. For example when iterating over a list over a table of
integers and floats for a table of statistics the template designer can
omit the escaping because he knows that integers or floats don't contain
any unsafe parameters.

Additionally Jinja2 is a general purpose template engine and not only used
for HTML/XML generation. For example you may generate LaTeX, emails,
CSS, JavaScript, or configuration files.

Why is the Context immutable?
-----------------------------

When writing a :func:`contextfunction` or something similar you may have
noticed that the context tries to stop you from modifying it. If you have
managed to modify the context by using an internal context API you may
have noticed that changes in the context don't seem to be visible in the
template. The reason for this is that Jinja uses the context only as
primary data source for template variables for performance reasons.

If you want to modify the context write a function that returns a variable
instead that one can assign to a variable by using set::

{% set comments = get_latest_comments() %}

My tracebacks look weird. What's happening?
--------------------------------------------

If the debugsupport module is not compiled and you are using a Python
installation without ctypes (Python 2.4 without ctypes, Jython or Google's
AppEngine) Jinja2 is unable to provide correct debugging information and
the traceback may be incomplete. There is currently no good workaround
for Jython or the AppEngine as ctypes is unavailable there and it's not
possible to use the debugsupport extension.

If you are working in the Google AppEngine development server you can
whitelist the ctypes module to restore the tracebacks. This however won't
work in production environments::

import os
if os.environ.get('SERVER_SOFTWARE', '').startswith('Dev'):
from google.appengine.tools.dev_appserver import HardenedModulesHook
HardenedModulesHook._WHITE_LIST_C_MODULES += ['_ctypes', 'gestalt']

Credit for this snippet goes to `Thomas Johansson
<http://stackoverflow.com/questions/3086091/debug-jinja2-in-google-app-engine/3694434#3694434>`_

Why is there no Python 2.3/2.4/2.5/3.1/3.2 support?
---------------------------------------------------

Python 2.3 is missing a lot of features that are used heavily in Jinja2. This
decision was made as with the upcoming Python 2.6 and 3.0 versions it becomes
harder to maintain the code for older Python versions. If you really need
Python 2.3 support you either have to use `Jinja 1`_ or other templating
engines that still support 2.3.

Python 2.4/2.5/3.1/3.2 support was removed when we switched to supporting
Python 2 and 3 by the same sourcecode (without using 2to3). It was required to
drop support because only Python 2.6/2.7 and >=3.3 support byte and unicode
literals in a way compatible to each other version. If you really need support
for older Python 2 (or 3) versions, you can just use Jinja2 2.6.

My Macros are overridden by something
-------------------------------------

In some situations the Jinja scoping appears arbitrary:

layout.tmpl:

.. sourcecode:: jinja

{% macro foo() %}LAYOUT{% endmacro %}
{% block body %}{% endblock %}

child.tmpl:

.. sourcecode:: jinja

{% extends 'layout.tmpl' %}
{% macro foo() %}CHILD{% endmacro %}
{% block body %}{{ foo() }}{% endblock %}

This will print ``LAYOUT`` in Jinja2. This is a side effect of having
the parent template evaluated after the child one. This allows child
templates passing information to the parent template. To avoid this
issue rename the macro or variable in the parent template to have an
uncommon prefix.

.. _Jinja 1: http://jinja.pocoo.org/1/
34 changes: 34 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
Welcome to Jinja2
=================

Jinja2 is a modern and designer-friendly templating language for Python,
modelled after Django's templates. It is fast, widely used and secure
with the optional sandboxed template execution environment:

.. sourcecode:: html+jinja

<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>

**Features:**

- sandboxed execution
- powerful automatic HTML escaping system for XSS prevention
- template inheritance
- compiles down to the optimal python code just in time
- optional ahead-of-time template compilation
- easy to debug. Line numbers of exceptions directly point to
the correct line in the template.
- configurable syntax

.. include:: contents.rst.inc

If you can't find the information you're looking for, have a look at the
index or try to find it using the search function:

* :ref:`genindex`
* :ref:`search`
101 changes: 101 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/integration.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
Integration
===========

Jinja2 provides some code for integration into other tools such as frameworks,
the `Babel`_ library or your favourite editor for fancy code highlighting.
This is a brief description of whats included.

Files to help integration are available
`here. <https://github.com/mitsuhiko/jinja2/tree/master/ext>`_

.. _babel-integration:

Babel Integration
-----------------

Jinja provides support for extracting gettext messages from templates via a
`Babel`_ extractor entry point called `jinja2.ext.babel_extract`. The Babel
support is implemented as part of the :ref:`i18n-extension` extension.

Gettext messages extracted from both `trans` tags and code expressions.

To extract gettext messages from templates, the project needs a Jinja2 section
in its Babel extraction method `mapping file`_:

.. sourcecode:: ini

[jinja2: **/templates/**.html]
encoding = utf-8

The syntax related options of the :class:`Environment` are also available as
configuration values in the mapping file. For example to tell the extraction
that templates use ``%`` as `line_statement_prefix` you can use this code:

.. sourcecode:: ini

[jinja2: **/templates/**.html]
encoding = utf-8
line_statement_prefix = %

:ref:`jinja-extensions` may also be defined by passing a comma separated list
of import paths as `extensions` value. The i18n extension is added
automatically.

.. versionchanged:: 2.7

Until 2.7 template syntax errors were always ignored. This was done
since many people are dropping non template html files into the
templates folder and it would randomly fail. The assumption was that
testsuites will catch syntax errors in templates anyways. If you don't
want that behavior you can add ``silent=false`` to the settings and
exceptions are propagated.

.. _mapping file: http://babel.edgewall.org/wiki/Documentation/messages.html#extraction-method-mapping-and-configuration

Pylons
------

With `Pylons`_ 0.9.7 onwards it's incredible easy to integrate Jinja into a
Pylons powered application.

The template engine is configured in `config/environment.py`. The configuration
for Jinja2 looks something like that::

from jinja2 import Environment, PackageLoader
config['pylons.app_globals'].jinja_env = Environment(
loader=PackageLoader('yourapplication', 'templates')
)

After that you can render Jinja templates by using the `render_jinja` function
from the `pylons.templating` module.

Additionally it's a good idea to set the Pylons' `c` object into strict mode.
Per default any attribute to not existing attributes on the `c` object return
an empty string and not an undefined object. To change this just use this
snippet and add it into your `config/environment.py`::

config['pylons.strict_c'] = True

.. _Pylons: http://www.pylonshq.com/

TextMate
--------

There is a bundle for TextMate that supports syntax highlighting for Jinja1 and Jinja2 for text based
templates as well as HTML. It also contains a few often used snippets.

.. _TextMate Bundle: https://github.com/mitsuhiko/jinja2-tmbundle

Vim
---

A syntax plugin for `Vim`_ exists in the Vim-scripts directory as well as the
`ext` folder at the root of the Jinja2 project. `The script
<http://www.vim.org/scripts/script.php?script_id=1856>`_ supports Jinja1 and
Jinja2. Once installed two file types are available `jinja` and `htmljinja`.
The first one for text based templates, the latter for HTML templates.

Copy the files into your `syntax` folder.

.. _Babel: http://babel.edgewall.org/
.. _Vim: http://www.vim.org/
123 changes: 123 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/intro.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
Introduction
============

This is the documentation for the Jinja2 general purpose templating language.
Jinja2 is a library for Python that is designed to be flexible, fast and secure.

If you have any exposure to other text-based template languages, such as Smarty or
Django, you should feel right at home with Jinja2. It's both designer and
developer friendly by sticking to Python's principles and adding functionality
useful for templating environments.

Prerequisites
-------------

Jinja2 works with Python 2.6.x, 2.7.x and >= 3.3. If you are using Python
3.2 you can use an older release of Jinja2 (2.6) as support for Python 3.2
was dropped in Jinja2 version 2.7.

If you wish to use the :class:`~jinja2.PackageLoader` class, you will also
need `setuptools`_ or `distribute`_ installed at runtime.

Installation
------------

You have multiple ways to install Jinja2. If you are unsure what to do, go
with the Python egg or tarball.

As a Python egg (via `easy_install`)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

You can install the most recent Jinja2 version using `easy_install`_ or `pip`_::

easy_install Jinja2
pip install Jinja2

This will install a Jinja2 egg in your Python installation's site-packages
directory.

(If you are installing from the Windows command line omit the `sudo` and make
sure to run the command as user with administrator rights)

From the tarball release
~~~~~~~~~~~~~~~~~~~~~~~~~

1. Download the most recent tarball from the `download page`_
2. Unpack the tarball
3. ``sudo python setup.py install``

Note that you either have to have `setuptools` or `distribute` installed;
the latter is preferred.

This will install Jinja2 into your Python installation's site-packages directory.

Installing the development version
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. Install `git`_
2. ``git clone git://github.com/mitsuhiko/jinja2.git``
3. ``cd jinja2``
4. ``ln -s jinja2 /usr/lib/python2.X/site-packages``

As an alternative to steps 4 you can also do ``python setup.py develop``
which will install the package via `distribute` in development mode. This also
has the advantage that the C extensions are compiled.

.. _download page: http://pypi.python.org/pypi/Jinja2
.. _distribute: http://pypi.python.org/pypi/distribute
.. _setuptools: http://peak.telecommunity.com/DevCenter/setuptools
.. _easy_install: http://peak.telecommunity.com/DevCenter/EasyInstall
.. _pip: http://pypi.python.org/pypi/pip
.. _git: http://git-scm.org/


MarkupSafe Dependency
~~~~~~~~~~~~~~~~~~~~~

As of version 2.7 Jinja2 depends on the `MarkupSafe`_ module. If you
install Jinja2 via `pip` or `easy_install` it will be installed
automatically for you.

.. _MarkupSafe: http://pypi.python.org/pypi/MarkupSafe

Basic API Usage
---------------

This section gives you a brief introduction to the Python API for Jinja2
templates.

The most basic way to create a template and render it is through
:class:`~jinja2.Template`. This however is not the recommended way to
work with it if your templates are not loaded from strings but the file
system or another data source:

>>> from jinja2 import Template
>>> template = Template('Hello {{ name }}!')
>>> template.render(name='John Doe')
u'Hello John Doe!'

By creating an instance of :class:`~jinja2.Template` you get back a new template
object that provides a method called :meth:`~jinja2.Template.render` which when
called with a dict or keyword arguments expands the template. The dict
or keywords arguments passed to the template are the so-called "context"
of the template.

What you can see here is that Jinja2 is using unicode internally and the
return value is an unicode string. So make sure that your application is
indeed using unicode internally.


Experimental Python 3 Support
-----------------------------

Jinja 2.7 brings experimental support for Python >=3.3. It means that all
unittests pass on the new version, but there might still be small bugs in
there and behavior might be inconsistent. If you notice any bugs, please
provide feedback in the `Jinja bug tracker`_.

Also please keep in mind that the documentation is written with Python 2
in mind, so you will have to adapt the shown code examples to Python 3 syntax
for yourself.


.. _Jinja bug tracker: http://github.com/mitsuhiko/jinja2/issues
194 changes: 194 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/jinjaext.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
# -*- coding: utf-8 -*-
"""
Jinja Documentation Extensions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Support for automatically documenting filters and tests.
:copyright: Copyright 2008 by Armin Ronacher.
:license: BSD.
"""
import collections
import os
import re
import inspect
import jinja2
from itertools import islice
from types import BuiltinFunctionType
from docutils import nodes
from docutils.statemachine import ViewList
from sphinx.ext.autodoc import prepare_docstring
from sphinx.application import TemplateBridge
from pygments.style import Style
from pygments.token import Keyword, Name, Comment, String, Error, \
Number, Operator, Generic
from jinja2 import Environment, FileSystemLoader


def parse_rst(state, content_offset, doc):
node = nodes.section()
# hack around title style bookkeeping
surrounding_title_styles = state.memo.title_styles
surrounding_section_level = state.memo.section_level
state.memo.title_styles = []
state.memo.section_level = 0
state.nested_parse(doc, content_offset, node, match_titles=1)
state.memo.title_styles = surrounding_title_styles
state.memo.section_level = surrounding_section_level
return node.children


class JinjaStyle(Style):
title = 'Jinja Style'
default_style = ""
styles = {
Comment: 'italic #aaaaaa',
Comment.Preproc: 'noitalic #B11414',
Comment.Special: 'italic #505050',

Keyword: 'bold #B80000',
Keyword.Type: '#808080',

Operator.Word: 'bold #B80000',

Name.Builtin: '#333333',
Name.Function: '#333333',
Name.Class: 'bold #333333',
Name.Namespace: 'bold #333333',
Name.Entity: 'bold #363636',
Name.Attribute: '#686868',
Name.Tag: 'bold #686868',
Name.Decorator: '#686868',

String: '#AA891C',
Number: '#444444',

Generic.Heading: 'bold #000080',
Generic.Subheading: 'bold #800080',
Generic.Deleted: '#aa0000',
Generic.Inserted: '#00aa00',
Generic.Error: '#aa0000',
Generic.Emph: 'italic',
Generic.Strong: 'bold',
Generic.Prompt: '#555555',
Generic.Output: '#888888',
Generic.Traceback: '#aa0000',

Error: '#F00 bg:#FAA'
}


_sig_re = re.compile(r'^[a-zA-Z_][a-zA-Z0-9_]*(\(.*?\))')


def format_function(name, aliases, func):
lines = inspect.getdoc(func).splitlines()
signature = '()'
if isinstance(func, BuiltinFunctionType):
match = _sig_re.match(lines[0])
if match is not None:
del lines[:1 + bool(lines and not lines[0])]
signature = match.group(1)
else:
try:
argspec = inspect.getargspec(func)
if getattr(func, 'environmentfilter', False) or \
getattr(func, 'contextfilter', False) or \
getattr(func, 'evalcontextfilter', False):
del argspec[0][0]
signature = inspect.formatargspec(*argspec)
except:
pass
result = ['.. function:: %s%s' % (name, signature), '']
result.extend(' ' + line for line in lines)
if aliases:
result.extend(('', ' :aliases: %s' % ', '.join(
'``%s``' % x for x in sorted(aliases))))
return result


def dump_functions(mapping):
def directive(dirname, arguments, options, content, lineno,
content_offset, block_text, state, state_machine):
reverse_mapping = {}
for name, func in mapping.items():
reverse_mapping.setdefault(func, []).append(name)
filters = []
for func, names in reverse_mapping.items():
aliases = sorted(names, key=lambda x: len(x))
name = aliases.pop()
filters.append((name, aliases, func))
filters.sort()

result = ViewList()
for name, aliases, func in filters:
for item in format_function(name, aliases, func):
result.append(item, '<jinjaext>')

node = nodes.paragraph()
state.nested_parse(result, content_offset, node)
return node.children
return directive


from jinja2.defaults import DEFAULT_FILTERS, DEFAULT_TESTS
jinja_filters = dump_functions(DEFAULT_FILTERS)
jinja_tests = dump_functions(DEFAULT_TESTS)


def jinja_nodes(dirname, arguments, options, content, lineno,
content_offset, block_text, state, state_machine):
from jinja2.nodes import Node
doc = ViewList()
def walk(node, indent):
p = ' ' * indent
sig = ', '.join(node.fields)
doc.append(p + '.. autoclass:: %s(%s)' % (node.__name__, sig), '')
if node.abstract:
members = []
for key, name in node.__dict__.items():
if not key.startswith('_') and \
not hasattr(node.__base__, key) and isinstance(name, collections.Callable):
members.append(key)
if members:
members.sort()
doc.append('%s :members: %s' % (p, ', '.join(members)), '')
if node.__base__ != object:
doc.append('', '')
doc.append('%s :Node type: :class:`%s`' %
(p, node.__base__.__name__), '')
doc.append('', '')
children = node.__subclasses__()
children.sort(key=lambda x: x.__name__.lower())
for child in children:
walk(child, indent)
walk(Node, 0)
return parse_rst(state, content_offset, doc)


def inject_toc(app, doctree, docname):
titleiter = iter(doctree.traverse(nodes.title))
try:
# skip first title, we are not interested in that one
next(titleiter)
title = next(titleiter)
# and check if there is at least another title
next(titleiter)
except StopIteration:
return
tocnode = nodes.section('')
tocnode['classes'].append('toc')
toctitle = nodes.section('')
toctitle['classes'].append('toctitle')
toctitle.append(nodes.title(text='Table Of Contents'))
tocnode.append(toctitle)
tocnode += doctree.document.settings.env.get_toc_for(docname)[0][1]
title.parent.insert(title.parent.children.index(title), tocnode)


def setup(app):
app.add_directive('jinjafilters', jinja_filters, 0, (0, 0, 0))
app.add_directive('jinjatests', jinja_tests, 0, (0, 0, 0))
app.add_directive('jinjanodes', jinja_nodes, 0, (0, 0, 0))
# uncomment for inline toc. links are broken unfortunately
##app.connect('doctree-resolved', inject_toc)
119 changes: 119 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/jinjastyle.sty
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
\definecolor{TitleColor}{rgb}{0,0,0}
\definecolor{InnerLinkColor}{rgb}{0,0,0}
\definecolor{OuterLinkColor}{rgb}{0.8,0,0}

\renewcommand{\maketitle}{%
\begin{titlepage}%
\let\footnotesize\small
\let\footnoterule\relax
\ifsphinxpdfoutput
\begingroup
% This \def is required to deal with multi-line authors; it
% changes \\ to ', ' (comma-space), making it pass muster for
% generating document info in the PDF file.
\def\\{, }
\pdfinfo{
/Author (\@author)
/Title (\@title)
}
\endgroup
\fi
\begin{flushright}%
%\sphinxlogo%
{\center
\vspace*{3cm}
\includegraphics{logo.pdf}
\vspace{3cm}
\par
{\rm\Huge \@title \par}%
{\em\LARGE \py@release\releaseinfo \par}
{\large
\@date \par
\py@authoraddress \par
}}%
\end{flushright}%\par
\@thanks
\end{titlepage}%
\cleardoublepage%
\setcounter{footnote}{0}%
\let\thanks\relax\let\maketitle\relax
%\gdef\@thanks{}\gdef\@author{}\gdef\@title{}
}

\fancypagestyle{normal}{
\fancyhf{}
\fancyfoot[LE,RO]{{\thepage}}
\fancyfoot[LO]{{\nouppercase{\rightmark}}}
\fancyfoot[RE]{{\nouppercase{\leftmark}}}
\fancyhead[LE,RO]{{ \@title, \py@release}}
\renewcommand{\headrulewidth}{0.4pt}
\renewcommand{\footrulewidth}{0.4pt}
}

\fancypagestyle{plain}{
\fancyhf{}
\fancyfoot[LE,RO]{{\thepage}}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0.4pt}
}

\titleformat{\section}{\Large}%
{\py@TitleColor\thesection}{0.5em}{\py@TitleColor}{\py@NormalColor}
\titleformat{\subsection}{\large}%
{\py@TitleColor\thesubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
\titleformat{\subsubsection}{}%
{\py@TitleColor\thesubsubsection}{0.5em}{\py@TitleColor}{\py@NormalColor}
\titleformat{\paragraph}{\large}%
{\py@TitleColor}{0em}{\py@TitleColor}{\py@NormalColor}

\ChNameVar{\raggedleft\normalsize}
\ChNumVar{\raggedleft \bfseries\Large}
\ChTitleVar{\raggedleft \rm\Huge}

\renewcommand\thepart{\@Roman\c@part}
\renewcommand\part{%
\pagestyle{plain}
\if@noskipsec \leavevmode \fi
\cleardoublepage
\vspace*{6cm}%
\@afterindentfalse
\secdef\@part\@spart}

\def\@part[#1]#2{%
\ifnum \c@secnumdepth >\m@ne
\refstepcounter{part}%
\addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
\else
\addcontentsline{toc}{part}{#1}%
\fi
{\parindent \z@ %\center
\interlinepenalty \@M
\normalfont
\ifnum \c@secnumdepth >\m@ne
\rm\Large \partname~\thepart
\par\nobreak
\fi
\MakeUppercase{\rm\Huge #2}%
\markboth{}{}\par}%
\nobreak
\vskip 8ex
\@afterheading}
\def\@spart#1{%
{\parindent \z@ %\center
\interlinepenalty \@M
\normalfont
\huge \bfseries #1\par}%
\nobreak
\vskip 3ex
\@afterheading}

% use inconsolata font
\usepackage{inconsolata}

% fix single quotes, for inconsolata. (does not work)
%%\usepackage{textcomp}
%%\begingroup
%% \catcode`'=\active
%% \g@addto@macro\@noligs{\let'\textsinglequote}
%% \endgroup
%%\endinput
6 changes: 6 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/latexindex.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
:orphan:

Jinja2 Documentation
====================

.. include:: contents.rst.inc
Binary file added deps/v8_inspector/deps/jinja2/docs/logo.pdf
Binary file not shown.
94 changes: 94 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/sandbox.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
Sandbox
=======

The Jinja2 sandbox can be used to evaluate untrusted code. Access to unsafe
attributes and methods is prohibited.

Assuming `env` is a :class:`SandboxedEnvironment` in the default configuration
the following piece of code shows how it works:

>>> env.from_string("{{ func.func_code }}").render(func=lambda:None)
u''
>>> env.from_string("{{ func.func_code.do_something }}").render(func=lambda:None)
Traceback (most recent call last):
...
SecurityError: access to attribute 'func_code' of 'function' object is unsafe.

API
---

.. module:: jinja2.sandbox

.. autoclass:: SandboxedEnvironment([options])
:members: is_safe_attribute, is_safe_callable, default_binop_table,
default_unop_table, intercepted_binops, intercepted_unops,
call_binop, call_unop

.. autoclass:: ImmutableSandboxedEnvironment([options])

.. autoexception:: SecurityError

.. autofunction:: unsafe

.. autofunction:: is_internal_attribute

.. autofunction:: modifies_known_mutable

.. admonition:: Note

The Jinja2 sandbox alone is no solution for perfect security. Especially
for web applications you have to keep in mind that users may create
templates with arbitrary HTML in so it's crucial to ensure that (if you
are running multiple users on the same server) they can't harm each other
via JavaScript insertions and much more.

Also the sandbox is only as good as the configuration. We strongly
recommend only passing non-shared resources to the template and use
some sort of whitelisting for attributes.

Also keep in mind that templates may raise runtime or compile time errors,
so make sure to catch them.

Operator Intercepting
---------------------

.. versionadded:: 2.6

For maximum performance Jinja2 will let operators call directly the type
specific callback methods. This means that it's not possible to have this
intercepted by overriding :meth:`Environment.call`. Furthermore a
conversion from operator to special method is not always directly possible
due to how operators work. For instance for divisions more than one
special method exist.

With Jinja 2.6 there is now support for explicit operator intercepting.
This can be used to customize specific operators as necessary. In order
to intercept an operator one has to override the
:attr:`SandboxedEnvironment.intercepted_binops` attribute. Once the
operator that needs to be intercepted is added to that set Jinja2 will
generate bytecode that calls the :meth:`SandboxedEnvironment.call_binop`
function. For unary operators the `unary` attributes and methods have to
be used instead.

The default implementation of :attr:`SandboxedEnvironment.call_binop`
will use the :attr:`SandboxedEnvironment.binop_table` to translate
operator symbols into callbacks performing the default operator behavior.

This example shows how the power (``**``) operator can be disabled in
Jinja2::

from jinja2.sandbox import SandboxedEnvironment


class MyEnvironment(SandboxedEnvironment):
intercepted_binops = frozenset(['**'])

def call_binop(self, context, operator, left, right):
if operator == '**':
return self.undefined('the power operator is unavailable')
return SandboxedEnvironment.call_binop(self, context,
operator, left, right)

Make sure to always call into the super method, even if you are not
intercepting the call. Jinja2 might internally call the method to
evaluate expressions.
226 changes: 226 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/switching.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,226 @@
Switching from other Template Engines
=====================================

.. highlight:: html+jinja

If you have used a different template engine in the past and want to switch
to Jinja2 here is a small guide that shows the basic syntactic and semantic
changes between some common, similar text template engines for Python.

Jinja1
------

Jinja2 is mostly compatible with Jinja1 in terms of API usage and template
syntax. The differences between Jinja1 and 2 are explained in the following
list.

API
~~~

Loaders
Jinja2 uses a different loader API. Because the internal representation
of templates changed there is no longer support for external caching
systems such as memcached. The memory consumed by templates is comparable
with regular Python modules now and external caching doesn't give any
advantage. If you have used a custom loader in the past have a look at
the new :ref:`loader API <loaders>`.

Loading templates from strings
In the past it was possible to generate templates from a string with the
default environment configuration by using `jinja.from_string`. Jinja2
provides a :class:`Template` class that can be used to do the same, but
with optional additional configuration.

Automatic unicode conversion
Jinja1 performed automatic conversion of bytestrings in a given encoding
into unicode objects. This conversion is no longer implemented as it
was inconsistent as most libraries are using the regular Python ASCII
bytestring to Unicode conversion. An application powered by Jinja2
*has to* use unicode internally everywhere or make sure that Jinja2 only
gets unicode strings passed.

i18n
Jinja1 used custom translators for internationalization. i18n is now
available as Jinja2 extension and uses a simpler, more gettext friendly
interface and has support for babel. For more details see
:ref:`i18n-extension`.

Internal methods
Jinja1 exposed a few internal methods on the environment object such
as `call_function`, `get_attribute` and others. While they were marked
as being an internal method it was possible to override them. Jinja2
doesn't have equivalent methods.

Sandbox
Jinja1 was running sandbox mode by default. Few applications actually
used that feature so it became optional in Jinja2. For more details
about the sandboxed execution see :class:`SandboxedEnvironment`.

Context
Jinja1 had a stacked context as storage for variables passed to the
environment. In Jinja2 a similar object exists but it doesn't allow
modifications nor is it a singleton. As inheritance is dynamic now
multiple context objects may exist during template evaluation.

Filters and Tests
Filters and tests are regular functions now. It's no longer necessary
and allowed to use factory functions.


Templates
~~~~~~~~~

Jinja2 has mostly the same syntax as Jinja1. What's different is that
macros require parentheses around the argument list now.

Additionally Jinja2 allows dynamic inheritance now and dynamic includes.
The old helper function `rendertemplate` is gone now, `include` can be used
instead. Includes no longer import macros and variable assignments, for
that the new `import` tag is used. This concept is explained in the
:ref:`import` documentation.

Another small change happened in the `for`-tag. The special loop variable
doesn't have a `parent` attribute, instead you have to alias the loop
yourself. See :ref:`accessing-the-parent-loop` for more details.


Django
------

If you have previously worked with Django templates, you should find
Jinja2 very familiar. In fact, most of the syntax elements look and
work the same.

However, Jinja2 provides some more syntax elements covered in the
documentation and some work a bit different.

This section covers the template changes. As the API is fundamentally
different we won't cover it here.

Method Calls
~~~~~~~~~~~~

In Django method calls work implicitly, while Jinja requires the explicit
Python syntax. Thus this Django code::

{% for page in user.get_created_pages %}
...
{% endfor %}

...looks like this in Jinja::

{% for page in user.get_created_pages() %}
...
{% endfor %}

This allows you to pass variables to the method, which is not possible in
Django. This syntax is also used for macros.

Filter Arguments
~~~~~~~~~~~~~~~~

Jinja2 provides more than one argument for filters. Also the syntax for
argument passing is different. A template that looks like this in Django::

{{ items|join:", " }}

looks like this in Jinja2::

{{ items|join(', ') }}

It is a bit more verbose, but it allows different types of arguments -
including variables - and more than one of them.

Tests
~~~~~

In addition to filters there also are tests you can perform using the is
operator. Here are some examples::

{% if user.user_id is odd %}
{{ user.username|e }} is odd
{% else %}
hmm. {{ user.username|e }} looks pretty normal
{% endif %}

Loops
~~~~~

For loops work very similarly to Django, but notably the Jinja2 special
variable for the loop context is called `loop`, not `forloop` as in Django.

In addition, the Django `empty` argument is called `else` in Jinja2. For
example, the Django template::

{% for item in items %}
{{ item }}
{% empty %}
No items!
{% endfor %}

...looks like this in Jinja2::

{% for item in items %}
{{ item }}
{% else %}
No items!
{% endfor %}

Cycle
~~~~~

The ``{% cycle %}`` tag does not exist in Jinja2; however, you can achieve the
same output by using the `cycle` method on the loop context special variable.

The following Django template::

{% for user in users %}
<li class="{% cycle 'odd' 'even' %}">{{ user }}</li>
{% endfor %}

...looks like this in Jinja2::

{% for user in users %}
<li class="{{ loop.cycle('odd', 'even') }}">{{ user }}</li>
{% endfor %}

There is no equivalent of ``{% cycle ... as variable %}``.


Mako
----

.. highlight:: html+mako

If you have used Mako so far and want to switch to Jinja2 you can configure
Jinja2 to look more like Mako:

.. sourcecode:: python

env = Environment('<%', '%>', '${', '}', '<%doc>', '</%doc>', '%', '##')

With an environment configured like that, Jinja2 should be able to interpret
a small subset of Mako templates. Jinja2 does not support embedded Python
code, so you would have to move that out of the template. The syntax for defs
(which are called macros in Jinja2) and template inheritance is different too.
The following Mako template::

<%inherit file="layout.html" />
<%def name="title()">Page Title</%def>
<ul>
% for item in list:
<li>${item}</li>
% endfor
</ul>

Looks like this in Jinja2 with the above configuration::

<% extends "layout.html" %>
<% block title %>Page Title<% endblock %>
<% block body %>
<ul>
% for item in list:
<li>${item}</li>
% endfor
</ul>
<% endblock %>
1,509 changes: 1,509 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/templates.rst

Large diffs are not rendered by default.

100 changes: 100 additions & 0 deletions deps/v8_inspector/deps/jinja2/docs/tricks.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
Tips and Tricks
===============

.. highlight:: html+jinja

This part of the documentation shows some tips and tricks for Jinja2
templates.


.. _null-master-fallback:

Null-Master Fallback
--------------------

Jinja2 supports dynamic inheritance and does not distinguish between parent
and child template as long as no `extends` tag is visited. While this leads
to the surprising behavior that everything before the first `extends` tag
including whitespace is printed out instead of being ignored, it can be used
for a neat trick.

Usually child templates extend from one template that adds a basic HTML
skeleton. However it's possible to put the `extends` tag into an `if` tag to
only extend from the layout template if the `standalone` variable evaluates
to false which it does per default if it's not defined. Additionally a very
basic skeleton is added to the file so that if it's indeed rendered with
`standalone` set to `True` a very basic HTML skeleton is added::

{% if not standalone %}{% extends 'master.html' %}{% endif -%}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<title>{% block title %}The Page Title{% endblock %}</title>
<link rel="stylesheet" href="style.css" type="text/css">
{% block body %}
<p>This is the page body.</p>
{% endblock %}


Alternating Rows
----------------

If you want to have different styles for each row of a table or
list you can use the `cycle` method on the `loop` object::

<ul>
{% for row in rows %}
<li class="{{ loop.cycle('odd', 'even') }}">{{ row }}</li>
{% endfor %}
</ul>

`cycle` can take an unlimited amount of strings. Each time this
tag is encountered the next item from the list is rendered.


Highlighting Active Menu Items
------------------------------

Often you want to have a navigation bar with an active navigation
item. This is really simple to achieve. Because assignments outside
of `block`\s in child templates are global and executed before the layout
template is evaluated it's possible to define the active menu item in the
child template::

{% extends "layout.html" %}
{% set active_page = "index" %}

The layout template can then access `active_page`. Additionally it makes
sense to define a default for that variable::

{% set navigation_bar = [
('/', 'index', 'Index'),
('/downloads/', 'downloads', 'Downloads'),
('/about/', 'about', 'About')
] -%}
{% set active_page = active_page|default('index') -%}
...
<ul id="navigation">
{% for href, id, caption in navigation_bar %}
<li{% if id == active_page %} class="active"{% endif
%}><a href="{{ href|e }}">{{ caption|e }}</a></li>
{% endfor %}
</ul>
...

.. _accessing-the-parent-loop:

Accessing the parent Loop
-------------------------

The special `loop` variable always points to the innermost loop. If it's
desired to have access to an outer loop it's possible to alias it::

<table>
{% for row in table %}
<tr>
{% set rowloop = loop %}
{% for cell in row %}
<td id="cell-{{ rowloop.index }}-{{ loop.index }}">{{ cell }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
13 changes: 13 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/basic/cycle.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
from jinja2 import Environment


env = Environment(line_statement_prefix="#", variable_start_string="${", variable_end_string="}")


print env.from_string("""\
<ul>
# for item in range(10)
<li class="${loop.cycle('odd', 'even')}">${item}</li>
# endfor
</ul>\
""").render()
7 changes: 7 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/basic/debugger.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from jinja2 import Environment
from jinja2.loaders import FileSystemLoader

env = Environment(loader=FileSystemLoader('templates'))

tmpl = env.get_template('broken.html')
print tmpl.render(seq=[3, 2, 4, 5, 3, 2, 0, 2, 1])
12 changes: 12 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/basic/inheritance.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from jinja2 import Environment
from jinja2.loaders import DictLoader


env = Environment(loader=DictLoader({
'a': '''[A[{% block body %}{% endblock %}]]''',
'b': '''{% extends 'a' %}{% block body %}[B]{% endblock %}''',
'c': '''{% extends 'b' %}{% block body %}###{{ super() }}###{% endblock %}'''
}))


print env.get_template('c').render()
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{% from 'subbroken.html' import may_break %}
<ul>
{% for item in seq %}
<li>{{ may_break(item) }}</li>
{% endfor %}
</ul>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{% macro may_break(item) -%}
[{{ item / 0 }}]
{%- endmacro %}
27 changes: 27 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/basic/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from jinja2 import Environment
from jinja2.loaders import DictLoader

env = Environment(loader=DictLoader({
'child.html': u'''\
{% extends master_layout or 'master.html' %}
{% include helpers = 'helpers.html' %}
{% macro get_the_answer() %}42{% endmacro %}
{% title = 'Hello World' %}
{% block body %}
{{ get_the_answer() }}
{{ helpers.conspirate() }}
{% endblock %}
''',
'master.html': u'''\
<!doctype html>
<title>{{ title }}</title>
{% block body %}{% endblock %}
''',
'helpers.html': u'''\
{% macro conspirate() %}23{% endmacro %}
'''
}))


tmpl = env.get_template("child.html")
print(tmpl.render())
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
from jinja2 import Environment


env = Environment(line_statement_prefix='%', variable_start_string="${", variable_end_string="}")
tmpl = env.from_string("""\
% macro foo()
${caller(42)}
% endmacro
<ul>
% for item in seq
<li>${item}</li>
% endfor
</ul>
% call(var) foo()
[${var}]
% endcall
% filter escape
<hello world>
% for item in [1, 2, 3]
- ${item}
% endfor
% endfilter
""")

print(tmpl.render(seq=range(10)))
12 changes: 12 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/basic/test_loop_filter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from jinja2 import Environment

tmpl = Environment().from_string("""\
<ul>
{%- for item in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] if item % 2 == 0 %}
<li>{{ loop.index }} / {{ loop.length }}: {{ item }}</li>
{%- endfor %}
</ul>
if condition: {{ 1 if foo else 0 }}
""")

print(tmpl.render(foo=True))
14 changes: 14 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/basic/translate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from jinja2 import Environment

env = Environment(extensions=['jinja2.ext.i18n'])
env.globals['gettext'] = {
'Hello %(user)s!': 'Hallo %(user)s!'
}.__getitem__
env.globals['ngettext'] = lambda s, p, n: {
'%(count)s user': '%(count)d Benutzer',
'%(count)s users': '%(count)d Benutzer'
}[n == 1 and s or p]
print env.from_string("""\
{% trans %}Hello {{ user }}!{% endtrans %}
{% trans count=users|count %}{{ count }} user{% pluralize %}{{ count }} users{% endtrans %}
""").render(user="someone", users=[1, 2, 3])
433 changes: 433 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/bench.py

Large diffs are not rendered by default.

52 changes: 52 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/profile.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
try:
from cProfile import Profile
except ImportError:
from profile import Profile
from pstats import Stats
from jinja2 import Environment as JinjaEnvironment

context = {
'page_title': 'mitsuhiko\'s benchmark',
'table': [dict(a=1,b=2,c=3,d=4,e=5,f=6,g=7,h=8,i=9,j=10) for x in range(1000)]
}

source = """\
% macro testmacro(x)
<span>${x}</span>
% endmacro
<!doctype html>
<html>
<head>
<title>${page_title|e}</title>
</head>
<body>
<div class="header">
<h1>${page_title|e}</h1>
</div>
<div class="table">
<table>
% for row in table
<tr>
% for cell in row
<td>${testmacro(cell)}</td>
% endfor
</tr>
% endfor
</table>
</div>
</body>
</html>\
"""
jinja_template = JinjaEnvironment(
line_statement_prefix='%',
variable_start_string="${",
variable_end_string="}"
).from_string(source)
print jinja_template.environment.compile(source, raw=True)


p = Profile()
p.runcall(lambda: jinja_template.render(context))
stats = Stats(p)
stats.sort_stats('time', 'calls')
stats.print_stats()
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<form action="{{ action }}" method="{{ method }}">{{ body }}</form>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<input type="{{ type }}" value="{{ value }}" name="{{ name }}">
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols }}">{{ value }}</textarea>
29 changes: 29 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/django/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{% extends "layout.html" %}
{% block page_title %}Index Page{% endblock %}
{% block body %}
{% for article in articles %}
{% if article.published %}
<div class="article">
<h2><a href="{{ article.href }}">{{ article.title }}</a></h2>
<p class="meta">written by <a href="{{ article.user.href }}">{{ article.user.username }}</a> on {{ article.pub_date|dateformat }}</p>
<div class="text">{{ article.body|safe }}</div>
</div>
{% endif %}
{% endfor %}
{% form %}
<dl>
<dt>Name</dt>
<dd>{% input_field 'name' %}</dd>
<dt>E-Mail</dt>
<dd>{% input_field 'email' %}</dd>
<dt>URL</dt>
<dd>{% input_field 'url' %}</dd>
<dt>Comment</dt>
<dd>{% textarea 'comment' %}</dd>
<dt>Captcha</dt>
<dd>{% input_field 'captcha' %}</dd>
</dl>
{% input_field '' 'submit' 'Submit' %}
{% input_field 'cancel' 'submit' 'Cancel' %}
{% endform %}
{% endblock %}
29 changes: 29 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/django/layout.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>{% block page_title %}{% endblock %} | RealWorld Benchmark</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="contents">
<div class="header">
<h1>RealWorld Benchmark</h1>
<blockquote><p>
A less stupid benchmark for Mako and Jinja2 to get an impression how
code changes affect runtime performance.
</p></blockquote>
</div>
<ul class="navigation">
{% for href, caption in page_navigation %}
<li><a href="{{ href }}">{{ caption }}</a></li>
{% endfor %}
</ul>
<div class="body">
{% block body %}{% endblock %}
</div>
<div class="footer">
&copy; Copyright 2008 by I don't know who.
</div>
</div>
</body>
</html>
135 changes: 135 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/djangoext.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
# -*- coding: utf-8 -*-
from rwbench import ROOT
from os.path import join
from django.conf import settings
settings.configure(
TEMPLATE_DIRS=(join(ROOT, 'django'),),
TEMPLATE_LOADERS=(
('django.template.loaders.cached.Loader', (
'django.template.loaders.filesystem.Loader',
)),
)
)
from django.template import loader as django_loader, Context as DjangoContext, \
Node, NodeList, Variable, TokenParser
from django import template as django_template_module
from django.template import Library


# for django extensions. We monkey patch our extensions in so that
# we don't have to initialize a more complex django setup.
django_extensions = django_template_module.Library()
django_template_module.builtins.append(django_extensions)


from rwbench import dateformat
django_extensions.filter(dateformat)


def var_or_none(x):
if x is not None:
return Variable(x)


# and more django extensions
@django_extensions.tag
def input_field(parser, token):
p = TokenParser(token.contents)
args = [p.value()]
while p.more():
args.append(p.value())
return InputFieldNode(*args)


@django_extensions.tag
def textarea(parser, token):
p = TokenParser(token.contents)
args = [p.value()]
while p.more():
args.append(p.value())
return TextareaNode(*args)


@django_extensions.tag
def form(parser, token):
p = TokenParser(token.contents)
args = []
while p.more():
args.append(p.value())
body = parser.parse(('endform',))
parser.delete_first_token()
return FormNode(body, *args)


class InputFieldNode(Node):

def __init__(self, name, type=None, value=None):
self.name = var_or_none(name)
self.type = var_or_none(type)
self.value = var_or_none(value)

def render(self, context):
name = self.name.resolve(context)
type = 'text'
value = ''
if self.type is not None:
type = self.type.resolve(context)
if self.value is not None:
value = self.value.resolve(context)
tmpl = django_loader.get_template('_input_field.html')
return tmpl.render(DjangoContext({
'name': name,
'type': type,
'value': value
}))


class TextareaNode(Node):

def __init__(self, name, rows=None, cols=None, value=None):
self.name = var_or_none(name)
self.rows = var_or_none(rows)
self.cols = var_or_none(cols)
self.value = var_or_none(value)

def render(self, context):
name = self.name.resolve(context)
rows = 10
cols = 40
value = ''
if self.rows is not None:
rows = int(self.rows.resolve(context))
if self.cols is not None:
cols = int(self.cols.resolve(context))
if self.value is not None:
value = self.value.resolve(context)
tmpl = django_loader.get_template('_textarea.html')
return tmpl.render(DjangoContext({
'name': name,
'rows': rows,
'cols': cols,
'value': value
}))


class FormNode(Node):

def __init__(self, body, action=None, method=None):
self.body = body
self.action = action
self.method = method

def render(self, context):
body = self.body.render(context)
action = ''
method = 'post'
if self.action is not None:
action = self.action.resolve(context)
if self.method is not None:
method = self.method.resolve(context)
tmpl = django_loader.get_template('_form.html')
return tmpl.render(DjangoContext({
'body': body,
'action': action,
'method': method
}))
12 changes: 12 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/genshi/helpers.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<div xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/"
py:strip="">

<py:def function="input_field(name='', value='', type='text')">
<input type="$type" value="$value" name="$name" />
</py:def>

<py:def function="textarea(name, value='', rows=10, cols=40)">
<textarea name="$name" rows="$rows" cols="cols">$value</textarea>
</py:def>

</div>
41 changes: 41 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/genshi/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<?python
from rwbench import dateformat
?>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:py="http://genshi.edgewall.org/">
<xi:include href="layout.html" />
<xi:include href="helpers.html" />
<head><title>Index Page</title></head>
<body>
<div class="article" py:for="article in articles">
<py:if test="article.published">
<h2><a href="${article.href}">${article.title}</a></h2>
<p class="meta">written by <a href="${article.user.href}"
>${article.user.username}</a> on ${dateformat(article.pub_date)}</p>
<div class="text">${Markup(article.body)}</div>
</py:if>
</div>
<!--
For a fair and balanced comparison we would have to use a def here
that wraps the form data but I don't know what would be the best
Genshi equivalent for that. Quite frankly I doubt that this makes
sense in Genshi anyways.
-->
<form action="" method="post">
<dl>
<dt>Name</dt>
<dd>${input_field('name')}</dd>
<dt>E-Mail</dt>
<dd>${input_field('email')}</dd>
<dt>URL</dt>
<dd>${input_field('url')}</dd>
<dt>Comment</dt>
<dd>${textarea('comment')}</dd>
<dt>Captcha</dt>
<dd>${input_field('captcha')}</dd>
</dl>
${input_field(type='submit', value='Submit')}
${input_field(name='cancel', type='submit', value='Cancel')}
</form>
</body>
</html>
30 changes: 30 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/genshi/layout.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:py="http://genshi.edgewall.org/" >
<py:match path="head" once="true">
<head>
<title>${select('title/text()')} | RealWorld Benchmark</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
</py:match>
<py:match path="body" once="true">
<body>
<div class="contents">
<div class="header">
<h1>RealWorld Benchmark</h1>
<blockquote><p>
A less stupid benchmark for Mako and Jinja2 to get an impression how
code changes affect runtime performance.
</p></blockquote>
</div>
<ul class="navigation">
<li py:for="href, caption in page_navigation"><a href="$href">$caption</a></li>
</ul>
<div class="body">
${select('*|text()')}
</div>
<div class="footer">
&copy; Copyright 2008 by I don't know who.
</div>
</div>
</body>
</py:match>
</html>
12 changes: 12 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/jinja/helpers.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{% macro input_field(name, value='', type='text') -%}
<input type="{{ type }}" value="{{ value|e }}" name="{{ name }}">
{%- endmacro %}

{% macro textarea(name, value='', rows=10, cols=40) -%}
<textarea name="{{ name }}" rows="{{ rows }}" cols="{{ cols }}">{{
value|e }}</textarea>
{%- endmacro %}

{% macro form(action='', method='post') -%}
<form action="{{ action|e }}" method="{{ method }}">{{ caller() }}</form>
{%- endmacro %}
29 changes: 29 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/jinja/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{% extends "layout.html" %}
{% from "helpers.html" import input_field, textarea, form %}
{% block page_title %}Index Page{% endblock %}
{% block body %}
{%- for article in articles if article.published %}
<div class="article">
<h2><a href="{{ article.href|e }}">{{ article.title|e }}</a></h2>
<p class="meta">written by <a href="{{ article.user.href|e
}}">{{ article.user.username|e }}</a> on {{ article.pub_date|dateformat }}</p>
<div class="text">{{ article.body }}</div>
</div>
{%- endfor %}
{%- call form() %}
<dl>
<dt>Name</dt>
<dd>{{ input_field('name') }}</dd>
<dt>E-Mail</dt>
<dd>{{ input_field('email') }}</dd>
<dt>URL</dt>
<dd>{{ input_field('url') }}</dd>
<dt>Comment</dt>
<dd>{{ textarea('comment') }}</dd>
<dt>Captcha</dt>
<dd>{{ input_field('captcha') }}</dd>
</dl>
{{ input_field(type='submit', value='Submit') }}
{{ input_field('cancel', type='submit', value='Cancel') }}
{%- endcall %}
{% endblock %}
29 changes: 29 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/jinja/layout.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>{% block page_title %}{% endblock %} | RealWorld Benchmark</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="contents">
<div class="header">
<h1>RealWorld Benchmark</h1>
<blockquote><p>
A less stupid benchmark for Mako and Jinja2 to get an impression how
code changes affect runtime performance.
</p></blockquote>
</div>
<ul class="navigation">
{%- for href, caption in page_navigation %}
<li><a href="{{ href|e }}">{{ caption }}</a></li>
{%- endfor %}
</ul>
<div class="body">
{% block body %}{% endblock %}
</div>
<div class="footer">
&copy; Copyright 2008 by I don't know who.
</div>
</div>
</body>
</html>
11 changes: 11 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/mako/helpers.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<%def name="input_field(name='', value='', type='text')">
<input type="${type}" value="${value|h}" name="${name}">
</%def>

<%def name="textarea(name, value='', rows=10, cols=40)">
<textarea name="${name}" rows="${rows}" cols="${cols}">${value|h}</textarea>
</%def>

<%def name="form(action='', method='post')">
<form action="${action|h}" method="${method}">${caller.body()}</form>
</%def>
31 changes: 31 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/mako/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<%!
from rwbench import dateformat
%>
<%inherit file="layout.html" />
<%namespace file="helpers.html" import="input_field, textarea, form" />
<%def name="page_title()">Index Page</%def>
% for article in articles:
<% if not article.published: continue %>
<div class="article">
<h2><a href="${article.href|h}">${article.title|h}</a></h2>
<p class="meta">written by <a href="${article.user.href|h
}">${article.user.username|h}</a> on ${dateformat(article.pub_date)}</p>
<div class="text">${article.body}</div>
</div>
% endfor
<%call expr="form()">
<dl>
<dt>Name</dt>
<dd>${input_field('name')}</dd>
<dt>E-Mail</dt>
<dd>${input_field('email')}</dd>
<dt>URL</dt>
<dd>${input_field('url')}</dd>
<dt>Comment</dt>
<dd>${textarea('comment')}</dd>
<dt>Captcha</dt>
<dd>${input_field('captcha')}</dd>
</dl>
${input_field(type='submit', value='Submit')}
${input_field(name='cancel', type='submit', value='Cancel')}
</%call>
30 changes: 30 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/mako/layout.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>${self.page_title()} | RealWorld Benchmark</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<div class="contents">
<div class="header">
<h1>RealWorld Benchmark</h1>
<blockquote><p>
A less stupid benchmark for Mako and Jinja2 to get an impression how
code changes affect runtime performance.
</p></blockquote>
</div>
<ul class="navigation">
% for href, caption in page_navigation:
<li><a href="${href|h}">${caption}</a></li>
% endfor
</ul>
<div class="body">
${self.body()}
</div>
<div class="footer">
&copy; Copyright 2008 by I don't know who.
</div>
</div>
</body>
</html>
<%def name="page_title()"></%def>
112 changes: 112 additions & 0 deletions deps/v8_inspector/deps/jinja2/examples/rwbench/rwbench.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
# -*- coding: utf-8 -*-
"""
RealWorldish Benchmark
~~~~~~~~~~~~~~~~~~~~~~
A more real-world benchmark of Jinja2. Like the other benchmark in the
Jinja2 repository this has no real-world usefulnes (despite the name).
Just go away and ignore it. NOW!
:copyright: (c) 2009 by the Jinja Team.
:license: BSD.
"""
import sys
from os.path import join, dirname, abspath
try:
from cProfile import Profile
except ImportError:
from profile import Profile
from pstats import Stats
ROOT = abspath(dirname(__file__))

from random import choice, randrange
from datetime import datetime
from timeit import Timer
from jinja2 import Environment, FileSystemLoader
from jinja2.utils import generate_lorem_ipsum
from mako.lookup import TemplateLookup
from genshi.template import TemplateLoader as GenshiTemplateLoader


def dateformat(x):
return x.strftime('%Y-%m-%d')


jinja_env = Environment(loader=FileSystemLoader(join(ROOT, 'jinja')))
jinja_env.filters['dateformat'] = dateformat
mako_lookup = TemplateLookup(directories=[join(ROOT, 'mako')])
genshi_loader = GenshiTemplateLoader([join(ROOT, 'genshi')])

class Article(object):

def __init__(self, id):
self.id = id
self.href = '/article/%d' % self.id
self.title = generate_lorem_ipsum(1, False, 5, 10)
self.user = choice(users)
self.body = generate_lorem_ipsum()
self.pub_date = datetime.utcfromtimestamp(randrange(10 ** 9, 2 * 10 ** 9))
self.published = True


class User(object):

def __init__(self, username):
self.href = '/user/%s' % username
self.username = username


users = map(User, [u'John Doe', u'Jane Doe', u'Peter Somewhat'])
articles = map(Article, range(20))
navigation = [
('index', 'Index'),
('about', 'About'),
('foo?bar=1', 'Foo with Bar'),
('foo?bar=2&s=x', 'Foo with X'),
('blah', 'Blub Blah'),
('hehe', 'Haha'),
] * 5

context = dict(users=users, articles=articles, page_navigation=navigation)


jinja_template = jinja_env.get_template('index.html')
mako_template = mako_lookup.get_template('index.html')
genshi_template = genshi_loader.load('index.html')


def test_jinja():
jinja_template.render(context)

def test_mako():
mako_template.render_unicode(**context)


from djangoext import django_loader, DjangoContext
def test_django():
# not cached because django is not thread safe and does
# not cache by itself so it would be unfair to cache it here.
django_template = django_loader.get_template('index.html')
django_template.render(DjangoContext(context))


def test_genshi():
genshi_template.generate(**context).render('html', doctype='html')


if __name__ == '__main__':
sys.stdout.write('Realworldish Benchmark:\n')
for test in 'jinja', 'mako', 'django', 'genshi':
t = Timer(setup='from __main__ import test_%s as bench' % test,
stmt='bench()')
sys.stdout.write(' >> %-20s<running>' % test)
sys.stdout.flush()
sys.stdout.write('\r %-20s%.4f seconds\n' % (test, t.timeit(number=200) / 200))

if '-p' in sys.argv:
print 'Jinja profile'
p = Profile()
p.runcall(test_jinja)
stats = Stats(p)
stats.sort_stats('time', 'calls')
stats.print_stats()
135 changes: 135 additions & 0 deletions deps/v8_inspector/deps/jinja2/ext/Vim/jinja.vim
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
" Vim syntax file
" Language: Jinja template
" Maintainer: Armin Ronacher <armin.ronacher@active-4.com>
" Last Change: 2008 May 9
" Version: 1.1
"
" Known Bugs:
" because of odd limitations dicts and the modulo operator
" appear wrong in the template.
"
" Changes:
"
" 2008 May 9: Added support for Jinja2 changes (new keyword rules)

" .vimrc variable to disable html highlighting
if !exists('g:jinja_syntax_html')
let g:jinja_syntax_html=1
endif

" For version 5.x: Clear all syntax items
" For version 6.x: Quit when a syntax file was already loaded
if !exists("main_syntax")
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
let main_syntax = 'jinja'
endif

" Pull in the HTML syntax.
if g:jinja_syntax_html
if version < 600
so <sfile>:p:h/html.vim
else
runtime! syntax/html.vim
unlet b:current_syntax
endif
endif

syntax case match

" Jinja template built-in tags and parameters (without filter, macro, is and raw, they
" have special threatment)
syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import

syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter
syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction
syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName

" Variable Names
syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[a-zA-Z_][a-zA-Z0-9_]*/
syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none False True None loop super caller varargs kwargs

" Filters
syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite nextgroup=jinjaFilter
syn match jinjaFilter contained /[a-zA-Z_][a-zA-Z0-9_]*/
syn match jinjaFunction contained /[a-zA-Z_][a-zA-Z0-9_]*/
syn match jinjaBlockName contained /[a-zA-Z_][a-zA-Z0-9_]*/

" Jinja template constants
syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\"/ end=/"/
syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\(\\\)\@<!\(\(\\\\\)\@>\)*\\'/ end=/'/
syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/

" Operators
syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/
syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/
syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute
syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/

" Jinja template tag and variable blocks
syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained
syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment

syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment

" Jinja template 'raw' tag
syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment

" Jinja comments
syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString

" Block start keywords. A bit tricker. We only highlight at the start of a
" tag block and only if the name is not followed by a comma or equals sign
" which usually means that we have to deal with an assignment.
syn match jinjaStatement containedin=jinjaTagBlock contained /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/

" and context modifiers
syn match jinjaStatement containedin=jinjaTagBlock contained /\<with\(out\)\?\s\+context\>/


" Define the default highlighting.
" For version 5.7 and earlier: only when not done already
" For version 5.8 and later: only when an item doesn't have highlighting yet
if version >= 508 || !exists("did_jinja_syn_inits")
if version < 508
let did_jinja_syn_inits = 1
command -nargs=+ HiLink hi link <args>
else
command -nargs=+ HiLink hi def link <args>
endif

HiLink jinjaPunctuation jinjaOperator
HiLink jinjaAttribute jinjaVariable
HiLink jinjaFunction jinjaFilter

HiLink jinjaTagDelim jinjaTagBlock
HiLink jinjaVarDelim jinjaVarBlock
HiLink jinjaCommentDelim jinjaComment
HiLink jinjaRawDelim jinja

HiLink jinjaSpecial Special
HiLink jinjaOperator Normal
HiLink jinjaRaw Normal
HiLink jinjaTagBlock PreProc
HiLink jinjaVarBlock PreProc
HiLink jinjaStatement Statement
HiLink jinjaFilter Function
HiLink jinjaBlockName Function
HiLink jinjaVariable Identifier
HiLink jinjaString Constant
HiLink jinjaNumber Constant
HiLink jinjaComment Comment

delcommand HiLink
endif

let b:current_syntax = "jinja"

if main_syntax == 'jinja'
unlet main_syntax
endif
768 changes: 768 additions & 0 deletions deps/v8_inspector/deps/jinja2/ext/django2jinja/django2jinja.py

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions deps/v8_inspector/deps/jinja2/ext/django2jinja/example.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.conf import settings
settings.configure(TEMPLATE_DIRS=['templates'], TEMPLATE_DEBUG=True)

from django2jinja import convert_templates, Writer

writer = Writer(use_jinja_autoescape=True)
convert_templates('converted', writer=writer)
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
{% extends "layout.html" %}
{% load i18n %}
{% block title %}Foo{% endblock %}
{% block page-body %}
{{ block.super }}
Hello {{ name|cut:"d" }}!

{% for item in seq reversed %}
{% if forloop.index|divisibleby:2 %}
<li class="{% cycle 'a' 'b' %}">{{ item }}</li>
{% endif %}
{% endfor %}
{% ifequal foo bar %}
haha
{% else %}
hmm
{% endifequal %}
{% filter upper %}
{% include "subtemplate.html" %}
{% include foo %}
{% endfilter %}
{% spaceless %}
Hello World
{{ foo }}
Hmm
{% endspaceless %}
{% templatetag opencomment %}...{% templatetag closecomment %}
{% url foo a, b, c=d %}
{% url foo a, b, c=d as hmm %}

{% with object.value as value %}
<img src='bar.gif' height='10' width='{% widthratio value 200 100 %}'>
{% endwith %}

<pre>{% debug %}</pre>

{% blocktrans with book|title as book_t and author|title as author_t %}
This is {{ book_t }} by {{ author_t }}
{% endblocktrans %}

{% blocktrans count list|length as counter %}
There is only one {{ name }} object.
{% plural %}
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}

{% blocktrans with name|escape as name count list|length as counter %}
There is only one {{ name }} object.
{% plural %}
There are {{ counter }} {{ name }} objects.
{% endblocktrans %}

{% blocktrans %}This string will have {{ value }} inside.{% endblocktrans %}

<p>{% trans "This is the title." %}</p>

{% regroup people by gender as grouped %}
{% endblock %}
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<title>{% block title %}{% endblock %}</title>
<div class="body">
{% block page-body %}{% endblock %}
</div>
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello World!
86 changes: 86 additions & 0 deletions deps/v8_inspector/deps/jinja2/ext/djangojinja2.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# -*- coding: utf-8 -*-
"""
djangojinja2
~~~~~~~~~~~~
Adds support for Jinja2 to Django.
Configuration variables:
======================= =============================================
Key Description
======================= =============================================
`JINJA2_TEMPLATE_DIRS` List of template folders
`JINJA2_EXTENSIONS` List of Jinja2 extensions to use
`JINJA2_CACHE_SIZE` The size of the Jinja2 template cache.
======================= =============================================
:copyright: (c) 2009 by the Jinja Team.
:license: BSD.
"""
from itertools import chain
from django.conf import settings
from django.http import HttpResponse
from django.core.exceptions import ImproperlyConfigured
from django.template.context import get_standard_processors
from django.template import TemplateDoesNotExist
from jinja2 import Environment, FileSystemLoader, TemplateNotFound
from jinja2.defaults import DEFAULT_NAMESPACE


# the environment is unconfigured until the first template is loaded.
_jinja_env = None


def get_env():
"""Get the Jinja2 env and initialize it if necessary."""
global _jinja_env
if _jinja_env is None:
_jinja_env = create_env()
return _jinja_env


def create_env():
"""Create a new Jinja2 environment."""
searchpath = list(settings.JINJA2_TEMPLATE_DIRS)
return Environment(loader=FileSystemLoader(searchpath),
auto_reload=settings.TEMPLATE_DEBUG,
cache_size=getattr(settings, 'JINJA2_CACHE_SIZE', 400),
extensions=getattr(settings, 'JINJA2_EXTENSIONS', ()))


def get_template(template_name, globals=None):
"""Load a template."""
try:
return get_env().get_template(template_name, globals=globals)
except TemplateNotFound, e:
raise TemplateDoesNotExist(str(e))


def select_template(templates, globals=None):
"""Try to load one of the given templates."""
env = get_env()
for template in templates:
try:
return env.get_template(template, globals=globals)
except TemplateNotFound:
continue
raise TemplateDoesNotExist(', '.join(templates))


def render_to_string(template_name, context=None, request=None,
processors=None):
"""Render a template into a string."""
context = dict(context or {})
if request is not None:
context['request'] = request
for processor in chain(get_standard_processors(), processors or ()):
context.update(processor(request))
return get_template(template_name).render(context)


def render_to_response(template_name, context=None, request=None,
processors=None, mimetype=None):
"""Render a template into a response object."""
return HttpResponse(render_to_string(template_name, context, request,
processors), mimetype=mimetype)
78 changes: 78 additions & 0 deletions deps/v8_inspector/deps/jinja2/ext/inlinegettext.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
# -*- coding: utf-8 -*-
"""
Inline Gettext
~~~~~~~~~~~~~~
An example extension for Jinja2 that supports inline gettext calls.
Requires the i18n extension to be loaded.
:copyright: (c) 2009 by the Jinja Team.
:license: BSD.
"""
import re
from jinja2.ext import Extension
from jinja2.lexer import Token, count_newlines
from jinja2.exceptions import TemplateSyntaxError


_outside_re = re.compile(r'\\?(gettext|_)\(')
_inside_re = re.compile(r'\\?[()]')


class InlineGettext(Extension):
"""This extension implements support for inline gettext blocks::
<h1>_(Welcome)</h1>
<p>_(This is a paragraph)</p>
Requires the i18n extension to be loaded and configured.
"""

def filter_stream(self, stream):
paren_stack = 0

for token in stream:
if token.type is not 'data':
yield token
continue

pos = 0
lineno = token.lineno

while 1:
if not paren_stack:
match = _outside_re.search(token.value, pos)
else:
match = _inside_re.search(token.value, pos)
if match is None:
break
new_pos = match.start()
if new_pos > pos:
preval = token.value[pos:new_pos]
yield Token(lineno, 'data', preval)
lineno += count_newlines(preval)
gtok = match.group()
if gtok[0] == '\\':
yield Token(lineno, 'data', gtok[1:])
elif not paren_stack:
yield Token(lineno, 'block_begin', None)
yield Token(lineno, 'name', 'trans')
yield Token(lineno, 'block_end', None)
paren_stack = 1
else:
if gtok == '(' or paren_stack > 1:
yield Token(lineno, 'data', gtok)
paren_stack += gtok == ')' and -1 or 1
if not paren_stack:
yield Token(lineno, 'block_begin', None)
yield Token(lineno, 'name', 'endtrans')
yield Token(lineno, 'block_end', None)
pos = match.end()

if pos < len(token.value):
yield Token(lineno, 'data', token.value[pos:])

if paren_stack:
raise TemplateSyntaxError('unclosed gettext expression',
token.lineno, stream.name,
stream.filename)
128 changes: 128 additions & 0 deletions deps/v8_inspector/deps/jinja2/ext/jinja.el
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
;;; jinja.el --- Jinja mode highlighting
;;
;; Author: Georg Brandl
;; Copyright: (c) 2009 by the Jinja Team
;; Last modified: 2008-05-22 23:04 by gbr
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Commentary:
;;
;; Mostly ripped off django-mode by Lennart Borgman.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;; This program is free software; you can redistribute it and/or
;; modify it under the terms of the GNU General Public License as
;; published by the Free Software Foundation; either version 2, or
;; (at your option) any later version.
;;
;; This program is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; General Public License for more details.
;;
;; You should have received a copy of the GNU General Public License
;; along with this program; see the file COPYING. If not, write to
;; the Free Software Foundation, Inc., 51 Franklin Street, Fifth
;; Floor, Boston, MA 02110-1301, USA.
;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;
;;; Code:

(defconst jinja-font-lock-keywords
(list
; (cons (rx "{% comment %}" (submatch (0+ anything))
; "{% endcomment %}") (list 1 font-lock-comment-face))
'("{# ?\\(.*?\\) ?#}" . (1 font-lock-comment-face))
'("{%-?\\|-?%}\\|{{\\|}}" . font-lock-preprocessor-face)
'("{#\\|#}" . font-lock-comment-delimiter-face)
;; first word in a block is a command
'("{%-?[ \t\n]*\\([a-zA-Z_]+\\)" . (1 font-lock-keyword-face))
;; variables
'("\\({{ ?\\)\\([^|]*?\\)\\(|.*?\\)? ?}}" . (1 font-lock-variable-name-face))
;; keywords and builtins
(cons (rx word-start
(or "in" "as" "recursive" "not" "and" "or" "if" "else"
"import" "with" "without" "context")
word-end)
font-lock-keyword-face)
(cons (rx word-start
(or "true" "false" "none" "loop" "self" "super")
word-end)
font-lock-builtin-face)
;; tests
'("\\(is\\)[ \t]*\\(not\\)[ \t]*\\([a-zA-Z_]+\\)"
(1 font-lock-keyword-face) (2 font-lock-keyword-face)
(3 font-lock-function-name-face))
;; builtin filters
(cons (rx
"|" (* space)
(submatch
(or "abs" "batch" "capitalize" "capture" "center" "count" "default"
"dformat" "dictsort" "e" "escape" "filesizeformat" "first"
"float" "format" "getattribute" "getitem" "groupby" "indent"
"int" "join" "jsonencode" "last" "length" "lower" "markdown"
"pprint" "random" "replace" "reverse" "round" "rst" "slice"
"sort" "string" "striptags" "sum" "textile" "title" "trim"
"truncate" "upper" "urlencode" "urlize" "wordcount" "wordwrap"
"xmlattr")))
(list 1 font-lock-builtin-face))
)
"Minimal highlighting expressions for Jinja mode")

(define-derived-mode jinja-mode nil "Jinja"
"Simple Jinja mode for use with `mumamo-mode'.
This mode only provides syntax highlighting."
;;(set (make-local-variable 'comment-start) "{#")
;;(set (make-local-variable 'comment-end) "#}")
(setq font-lock-defaults '(jinja-font-lock-keywords)))

;; mumamo stuff
(when (require 'mumamo nil t)

(defun mumamo-chunk-jinja3 (pos max)
"Find {# ... #}"
(mumamo-quick-chunk-forward pos max "{#" "#}" 'borders 'jinja-mode))

(defun mumamo-chunk-jinja2 (pos max)
"Find {{ ... }}"
(mumamo-quick-chunk-forward pos max "{{" "}}" 'borders 'jinja-mode))

(defun mumamo-chunk-jinja (pos max)
"Find {% ... %}"
(mumamo-quick-chunk-forward pos max "{%" "%}" 'borders 'jinja-mode))

;;;###autoload
(define-mumamo-multi-major-mode jinja-html-mumamo
"Turn on multiple major modes for Jinja with main mode `html-mode'.
This also covers inlined style and javascript."
("Jinja HTML Family" html-mode
(mumamo-chunk-jinja
mumamo-chunk-jinja2
mumamo-chunk-jinja3
mumamo-chunk-inlined-style
mumamo-chunk-inlined-script
mumamo-chunk-style=
mumamo-chunk-onjs=
)))

;;;###autoload
(define-mumamo-multi-major-mode jinja-nxhtml-mumamo
"Turn on multiple major modes for Jinja with main mode `nxhtml-mode'.
This also covers inlined style and javascript."
("Jinja nXhtml Family" nxhtml-mode
(mumamo-chunk-jinja
mumamo-chunk-jinja2
mumamo-chunk-jinja3
mumamo-chunk-inlined-style
mumamo-chunk-inlined-script
mumamo-chunk-style=
mumamo-chunk-onjs=
)))
)

(provide 'jinja)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; jinja.el ends here
70 changes: 70 additions & 0 deletions deps/v8_inspector/deps/jinja2/jinja2/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# -*- coding: utf-8 -*-
"""
jinja2
~~~~~~
Jinja2 is a template engine written in pure Python. It provides a
Django inspired non-XML syntax but supports inline expressions and
an optional sandboxed environment.
Nutshell
--------
Here a small example of a Jinja2 template::
{% extends 'base.html' %}
{% block title %}Memberlist{% endblock %}
{% block content %}
<ul>
{% for user in users %}
<li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>
{% endblock %}
:copyright: (c) 2010 by the Jinja Team.
:license: BSD, see LICENSE for more details.
"""
__docformat__ = 'restructuredtext en'
__version__ = '2.9.dev'

# high level interface
from jinja2.environment import Environment, Template

# loaders
from jinja2.loaders import BaseLoader, FileSystemLoader, PackageLoader, \
DictLoader, FunctionLoader, PrefixLoader, ChoiceLoader, \
ModuleLoader

# bytecode caches
from jinja2.bccache import BytecodeCache, FileSystemBytecodeCache, \
MemcachedBytecodeCache

# undefined types
from jinja2.runtime import Undefined, DebugUndefined, StrictUndefined, \
make_logging_undefined

# exceptions
from jinja2.exceptions import TemplateError, UndefinedError, \
TemplateNotFound, TemplatesNotFound, TemplateSyntaxError, \
TemplateAssertionError

# decorators and public utilities
from jinja2.filters import environmentfilter, contextfilter, \
evalcontextfilter
from jinja2.utils import Markup, escape, clear_caches, \
environmentfunction, evalcontextfunction, contextfunction, \
is_undefined

__all__ = [
'Environment', 'Template', 'BaseLoader', 'FileSystemLoader',
'PackageLoader', 'DictLoader', 'FunctionLoader', 'PrefixLoader',
'ChoiceLoader', 'BytecodeCache', 'FileSystemBytecodeCache',
'MemcachedBytecodeCache', 'Undefined', 'DebugUndefined',
'StrictUndefined', 'TemplateError', 'UndefinedError', 'TemplateNotFound',
'TemplatesNotFound', 'TemplateSyntaxError', 'TemplateAssertionError',
'ModuleLoader', 'environmentfilter', 'contextfilter', 'Markup', 'escape',
'environmentfunction', 'contextfunction', 'clear_caches', 'is_undefined',
'evalcontextfilter', 'evalcontextfunction', 'make_logging_undefined',
]
102 changes: 102 additions & 0 deletions deps/v8_inspector/deps/jinja2/jinja2/_compat.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# -*- coding: utf-8 -*-
"""
jinja2._compat
~~~~~~~~~~~~~~
Some py2/py3 compatibility support based on a stripped down
version of six so we don't have to depend on a specific version
of it.
:copyright: Copyright 2013 by the Jinja team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""
import sys

PY2 = sys.version_info[0] == 2
PYPY = hasattr(sys, 'pypy_translation_info')
_identity = lambda x: x


if not PY2:
unichr = chr
range_type = range
text_type = str
string_types = (str,)
integer_types = (int,)

iterkeys = lambda d: iter(d.keys())
itervalues = lambda d: iter(d.values())
iteritems = lambda d: iter(d.items())

import pickle
from io import BytesIO, StringIO
NativeStringIO = StringIO

def reraise(tp, value, tb=None):
if value.__traceback__ is not tb:
raise value.with_traceback(tb)
raise value

ifilter = filter
imap = map
izip = zip
intern = sys.intern

implements_iterator = _identity
implements_to_string = _identity
encode_filename = _identity
get_next = lambda x: x.__next__

else:
unichr = unichr
text_type = unicode
range_type = xrange
string_types = (str, unicode)
integer_types = (int, long)

iterkeys = lambda d: d.iterkeys()
itervalues = lambda d: d.itervalues()
iteritems = lambda d: d.iteritems()

import cPickle as pickle
from cStringIO import StringIO as BytesIO, StringIO
NativeStringIO = BytesIO

exec('def reraise(tp, value, tb=None):\n raise tp, value, tb')

from itertools import imap, izip, ifilter
intern = intern

def implements_iterator(cls):
cls.next = cls.__next__
del cls.__next__
return cls

def implements_to_string(cls):
cls.__unicode__ = cls.__str__
cls.__str__ = lambda x: x.__unicode__().encode('utf-8')
return cls

get_next = lambda x: x.next

def encode_filename(filename):
if isinstance(filename, unicode):
return filename.encode('utf-8')
return filename


def with_metaclass(meta, *bases):
"""Create a base class with a metaclass."""
# This requires a bit of explanation: the basic idea is to make a
# dummy metaclass for one level of class instantiation that replaces
# itself with the actual metaclass.
class metaclass(type):
def __new__(cls, name, this_bases, d):
return meta(name, bases, d)
return type.__new__(metaclass, 'temporary_class', (), {})


try:
from urllib.parse import quote_from_bytes as url_quote
except ImportError:
from urllib import quote as url_quote
132 changes: 132 additions & 0 deletions deps/v8_inspector/deps/jinja2/jinja2/_stringdefs.py

Large diffs are not rendered by default.

362 changes: 362 additions & 0 deletions deps/v8_inspector/deps/jinja2/jinja2/bccache.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,362 @@
# -*- coding: utf-8 -*-
"""
jinja2.bccache
~~~~~~~~~~~~~~
This module implements the bytecode cache system Jinja is optionally
using. This is useful if you have very complex template situations and
the compiliation of all those templates slow down your application too
much.
Situations where this is useful are often forking web applications that
are initialized on the first request.
:copyright: (c) 2010 by the Jinja Team.
:license: BSD.
"""
from os import path, listdir
import os
import sys
import stat
import errno
import marshal
import tempfile
import fnmatch
from hashlib import sha1
from jinja2.utils import open_if_exists
from jinja2._compat import BytesIO, pickle, PY2, text_type


# marshal works better on 3.x, one hack less required
if not PY2:
marshal_dump = marshal.dump
marshal_load = marshal.load
else:

def marshal_dump(code, f):
if isinstance(f, file):
marshal.dump(code, f)
else:
f.write(marshal.dumps(code))

def marshal_load(f):
if isinstance(f, file):
return marshal.load(f)
return marshal.loads(f.read())


bc_version = 2

# magic version used to only change with new jinja versions. With 2.6
# we change this to also take Python version changes into account. The
# reason for this is that Python tends to segfault if fed earlier bytecode
# versions because someone thought it would be a good idea to reuse opcodes
# or make Python incompatible with earlier versions.
bc_magic = 'j2'.encode('ascii') + \
pickle.dumps(bc_version, 2) + \
pickle.dumps((sys.version_info[0] << 24) | sys.version_info[1])


class Bucket(object):
"""Buckets are used to store the bytecode for one template. It's created
and initialized by the bytecode cache and passed to the loading functions.
The buckets get an internal checksum from the cache assigned and use this
to automatically reject outdated cache material. Individual bytecode
cache subclasses don't have to care about cache invalidation.
"""

def __init__(self, environment, key, checksum):
self.environment = environment
self.key = key
self.checksum = checksum
self.reset()

def reset(self):
"""Resets the bucket (unloads the bytecode)."""
self.code = None

def load_bytecode(self, f):
"""Loads bytecode from a file or file like object."""
# make sure the magic header is correct
magic = f.read(len(bc_magic))
if magic != bc_magic:
self.reset()
return
# the source code of the file changed, we need to reload
checksum = pickle.load(f)
if self.checksum != checksum:
self.reset()
return
# if marshal_load fails then we need to reload
try:
self.code = marshal_load(f)
except (EOFError, ValueError, TypeError):
self.reset()
return

def write_bytecode(self, f):
"""Dump the bytecode into the file or file like object passed."""
if self.code is None:
raise TypeError('can\'t write empty bucket')
f.write(bc_magic)
pickle.dump(self.checksum, f, 2)
marshal_dump(self.code, f)

def bytecode_from_string(self, string):
"""Load bytecode from a string."""
self.load_bytecode(BytesIO(string))

def bytecode_to_string(self):
"""Return the bytecode as string."""
out = BytesIO()
self.write_bytecode(out)
return out.getvalue()


class BytecodeCache(object):
"""To implement your own bytecode cache you have to subclass this class
and override :meth:`load_bytecode` and :meth:`dump_bytecode`. Both of
these methods are passed a :class:`~jinja2.bccache.Bucket`.
A very basic bytecode cache that saves the bytecode on the file system::
from os import path
class MyCache(BytecodeCache):
def __init__(self, directory):
self.directory = directory
def load_bytecode(self, bucket):
filename = path.join(self.directory, bucket.key)
if path.exists(filename):
with open(filename, 'rb') as f:
bucket.load_bytecode(f)
def dump_bytecode(self, bucket):
filename = path.join(self.directory, bucket.key)
with open(filename, 'wb') as f:
bucket.write_bytecode(f)
A more advanced version of a filesystem based bytecode cache is part of
Jinja2.
"""

def load_bytecode(self, bucket):
"""Subclasses have to override this method to load bytecode into a
bucket. If they are not able to find code in the cache for the
bucket, it must not do anything.
"""
raise NotImplementedError()

def dump_bytecode(self, bucket):
"""Subclasses have to override this method to write the bytecode
from a bucket back to the cache. If it unable to do so it must not
fail silently but raise an exception.
"""
raise NotImplementedError()

def clear(self):
"""Clears the cache. This method is not used by Jinja2 but should be
implemented to allow applications to clear the bytecode cache used
by a particular environment.
"""

def get_cache_key(self, name, filename=None):
"""Returns the unique hash key for this template name."""
hash = sha1(name.encode('utf-8'))
if filename is not None:
filename = '|' + filename
if isinstance(filename, text_type):
filename = filename.encode('utf-8')
hash.update(filename)
return hash.hexdigest()

def get_source_checksum(self, source):
"""Returns a checksum for the source."""
return sha1(source.encode('utf-8')).hexdigest()

def get_bucket(self, environment, name, filename, source):
"""Return a cache bucket for the given template. All arguments are
mandatory but filename may be `None`.
"""
key = self.get_cache_key(name, filename)
checksum = self.get_source_checksum(source)
bucket = Bucket(environment, key, checksum)
self.load_bytecode(bucket)
return bucket

def set_bucket(self, bucket):
"""Put the bucket into the cache."""
self.dump_bytecode(bucket)


class FileSystemBytecodeCache(BytecodeCache):
"""A bytecode cache that stores bytecode on the filesystem. It accepts
two arguments: The directory where the cache items are stored and a
pattern string that is used to build the filename.
If no directory is specified a default cache directory is selected. On
Windows the user's temp directory is used, on UNIX systems a directory
is created for the user in the system temp directory.
The pattern can be used to have multiple separate caches operate on the
same directory. The default pattern is ``'__jinja2_%s.cache'``. ``%s``
is replaced with the cache key.
>>> bcc = FileSystemBytecodeCache('/tmp/jinja_cache', '%s.cache')
This bytecode cache supports clearing of the cache using the clear method.
"""

def __init__(self, directory=None, pattern='__jinja2_%s.cache'):
if directory is None:
directory = self._get_default_cache_dir()
self.directory = directory
self.pattern = pattern

def _get_default_cache_dir(self):
def _unsafe_dir():
raise RuntimeError('Cannot determine safe temp directory. You '
'need to explicitly provide one.')

tmpdir = tempfile.gettempdir()

# On windows the temporary directory is used specific unless
# explicitly forced otherwise. We can just use that.
if os.name == 'nt':
return tmpdir
if not hasattr(os, 'getuid'):
_unsafe_dir()

dirname = '_jinja2-cache-%d' % os.getuid()
actual_dir = os.path.join(tmpdir, dirname)

try:
os.mkdir(actual_dir, stat.S_IRWXU)
except OSError as e:
if e.errno != errno.EEXIST:
raise
try:
os.chmod(actual_dir, stat.S_IRWXU)
actual_dir_stat = os.lstat(actual_dir)
if actual_dir_stat.st_uid != os.getuid() \
or not stat.S_ISDIR(actual_dir_stat.st_mode) \
or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU:
_unsafe_dir()
except OSError as e:
if e.errno != errno.EEXIST:
raise

actual_dir_stat = os.lstat(actual_dir)
if actual_dir_stat.st_uid != os.getuid() \
or not stat.S_ISDIR(actual_dir_stat.st_mode) \
or stat.S_IMODE(actual_dir_stat.st_mode) != stat.S_IRWXU:
_unsafe_dir()

return actual_dir

def _get_cache_filename(self, bucket):
return path.join(self.directory, self.pattern % bucket.key)

def load_bytecode(self, bucket):
f = open_if_exists(self._get_cache_filename(bucket), 'rb')
if f is not None:
try:
bucket.load_bytecode(f)
finally:
f.close()

def dump_bytecode(self, bucket):
f = open(self._get_cache_filename(bucket), 'wb')
try:
bucket.write_bytecode(f)
finally:
f.close()

def clear(self):
# imported lazily here because google app-engine doesn't support
# write access on the file system and the function does not exist
# normally.
from os import remove
files = fnmatch.filter(listdir(self.directory), self.pattern % '*')
for filename in files:
try:
remove(path.join(self.directory, filename))
except OSError:
pass


class MemcachedBytecodeCache(BytecodeCache):
"""This class implements a bytecode cache that uses a memcache cache for
storing the information. It does not enforce a specific memcache library
(tummy's memcache or cmemcache) but will accept any class that provides
the minimal interface required.
Libraries compatible with this class:
- `werkzeug <http://werkzeug.pocoo.org/>`_.contrib.cache
- `python-memcached <http://www.tummy.com/Community/software/python-memcached/>`_
- `cmemcache <http://gijsbert.org/cmemcache/>`_
(Unfortunately the django cache interface is not compatible because it
does not support storing binary data, only unicode. You can however pass
the underlying cache client to the bytecode cache which is available
as `django.core.cache.cache._client`.)
The minimal interface for the client passed to the constructor is this:
.. class:: MinimalClientInterface
.. method:: set(key, value[, timeout])
Stores the bytecode in the cache. `value` is a string and
`timeout` the timeout of the key. If timeout is not provided
a default timeout or no timeout should be assumed, if it's
provided it's an integer with the number of seconds the cache
item should exist.
.. method:: get(key)
Returns the value for the cache key. If the item does not
exist in the cache the return value must be `None`.
The other arguments to the constructor are the prefix for all keys that
is added before the actual cache key and the timeout for the bytecode in
the cache system. We recommend a high (or no) timeout.
This bytecode cache does not support clearing of used items in the cache.
The clear method is a no-operation function.
.. versionadded:: 2.7
Added support for ignoring memcache errors through the
`ignore_memcache_errors` parameter.
"""

def __init__(self, client, prefix='jinja2/bytecode/', timeout=None,
ignore_memcache_errors=True):
self.client = client
self.prefix = prefix
self.timeout = timeout
self.ignore_memcache_errors = ignore_memcache_errors

def load_bytecode(self, bucket):
try:
code = self.client.get(self.prefix + bucket.key)
except Exception:
if not self.ignore_memcache_errors:
raise
code = None
if code is not None:
bucket.bytecode_from_string(code)

def dump_bytecode(self, bucket):
args = (self.prefix + bucket.key, bucket.bytecode_to_string())
if self.timeout is not None:
args += (self.timeout,)
try:
self.client.set(*args)
except Exception:
if not self.ignore_memcache_errors:
raise
1,686 changes: 1,686 additions & 0 deletions deps/v8_inspector/deps/jinja2/jinja2/compiler.py

Large diffs are not rendered by default.

32 changes: 32 additions & 0 deletions deps/v8_inspector/deps/jinja2/jinja2/constants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# -*- coding: utf-8 -*-
"""
jinja.constants
~~~~~~~~~~~~~~~
Various constants.
:copyright: (c) 2010 by the Jinja Team.
:license: BSD, see LICENSE for more details.
"""


#: list of lorem ipsum words used by the lipsum() helper function
LOREM_IPSUM_WORDS = u'''\
a ac accumsan ad adipiscing aenean aliquam aliquet amet ante aptent arcu at
auctor augue bibendum blandit class commodo condimentum congue consectetuer
consequat conubia convallis cras cubilia cum curabitur curae cursus dapibus
diam dictum dictumst dignissim dis dolor donec dui duis egestas eget eleifend
elementum elit enim erat eros est et etiam eu euismod facilisi facilisis fames
faucibus felis fermentum feugiat fringilla fusce gravida habitant habitasse hac
hendrerit hymenaeos iaculis id imperdiet in inceptos integer interdum ipsum
justo lacinia lacus laoreet lectus leo libero ligula litora lobortis lorem
luctus maecenas magna magnis malesuada massa mattis mauris metus mi molestie
mollis montes morbi mus nam nascetur natoque nec neque netus nibh nisi nisl non
nonummy nostra nulla nullam nunc odio orci ornare parturient pede pellentesque
penatibus per pharetra phasellus placerat platea porta porttitor posuere
potenti praesent pretium primis proin pulvinar purus quam quis quisque rhoncus
ridiculus risus rutrum sagittis sapien scelerisque sed sem semper senectus sit
sociis sociosqu sodales sollicitudin suscipit suspendisse taciti tellus tempor
tempus tincidunt torquent tortor tristique turpis ullamcorper ultrices
ultricies urna ut varius vehicula vel velit venenatis vestibulum vitae vivamus
viverra volutpat vulputate'''
350 changes: 350 additions & 0 deletions deps/v8_inspector/deps/jinja2/jinja2/debug.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,350 @@
# -*- coding: utf-8 -*-
"""
jinja2.debug
~~~~~~~~~~~~
Implements the debug interface for Jinja. This module does some pretty
ugly stuff with the Python traceback system in order to achieve tracebacks
with correct line numbers, locals and contents.
:copyright: (c) 2010 by the Jinja Team.
:license: BSD, see LICENSE for more details.
"""
import sys
import traceback
from types import TracebackType, CodeType
from jinja2.utils import missing, internal_code
from jinja2.exceptions import TemplateSyntaxError
from jinja2._compat import iteritems, reraise, PY2

# on pypy we can take advantage of transparent proxies
try:
from __pypy__ import tproxy
except ImportError:
tproxy = None


# how does the raise helper look like?
try:
exec("raise TypeError, 'foo'")
except SyntaxError:
raise_helper = 'raise __jinja_exception__[1]'
except TypeError:
raise_helper = 'raise __jinja_exception__[0], __jinja_exception__[1]'


class TracebackFrameProxy(object):
"""Proxies a traceback frame."""

def __init__(self, tb):
self.tb = tb
self._tb_next = None

@property
def tb_next(self):
return self._tb_next

def set_next(self, next):
if tb_set_next is not None:
try:
tb_set_next(self.tb, next and next.tb or None)
except Exception:
# this function can fail due to all the hackery it does
# on various python implementations. We just catch errors
# down and ignore them if necessary.
pass
self._tb_next = next

@property
def is_jinja_frame(self):
return '__jinja_template__' in self.tb.tb_frame.f_globals

def __getattr__(self, name):
return getattr(self.tb, name)


def make_frame_proxy(frame):
proxy = TracebackFrameProxy(frame)
if tproxy is None:
return proxy
def operation_handler(operation, *args, **kwargs):
if operation in ('__getattribute__', '__getattr__'):
return getattr(proxy, args[0])
elif operation == '__setattr__':
proxy.__setattr__(*args, **kwargs)
else:
return getattr(proxy, operation)(*args, **kwargs)
return tproxy(TracebackType, operation_handler)


class ProcessedTraceback(object):
"""Holds a Jinja preprocessed traceback for printing or reraising."""

def __init__(self, exc_type, exc_value, frames):
assert frames, 'no frames for this traceback?'
self.exc_type = exc_type
self.exc_value = exc_value
self.frames = frames

# newly concatenate the frames (which are proxies)
prev_tb = None
for tb in self.frames:
if prev_tb is not None:
prev_tb.set_next(tb)
prev_tb = tb
prev_tb.set_next(None)

def render_as_text(self, limit=None):
"""Return a string with the traceback."""
lines = traceback.format_exception(self.exc_type, self.exc_value,
self.frames[0], limit=limit)
return ''.join(lines).rstrip()

def render_as_html(self, full=False):
"""Return a unicode string with the traceback as rendered HTML."""
from jinja2.debugrenderer import render_traceback
return u'%s\n\n<!--\n%s\n-->' % (
render_traceback(self, full=full),
self.render_as_text().decode('utf-8', 'replace')
)

@property
def is_template_syntax_error(self):
"""`True` if this is a template syntax error."""
return isinstance(self.exc_value, TemplateSyntaxError)

@property
def exc_info(self):
"""Exception info tuple with a proxy around the frame objects."""
return self.exc_type, self.exc_value, self.frames[0]

@property
def standard_exc_info(self):
"""Standard python exc_info for re-raising"""
tb = self.frames[0]
# the frame will be an actual traceback (or transparent proxy) if
# we are on pypy or a python implementation with support for tproxy
if type(tb) is not TracebackType:
tb = tb.tb
return self.exc_type, self.exc_value, tb


def make_traceback(exc_info, source_hint=None):
"""Creates a processed traceback object from the exc_info."""
exc_type, exc_value, tb = exc_info
if isinstance(exc_value, TemplateSyntaxError):
exc_info = translate_syntax_error(exc_value, source_hint)
initial_skip = 0
else:
initial_skip = 1
return translate_exception(exc_info, initial_skip)


def translate_syntax_error(error, source=None):
"""Rewrites a syntax error to please traceback systems."""
error.source = source
error.translated = True
exc_info = (error.__class__, error, None)
filename = error.filename
if filename is None:
filename = '<unknown>'
return fake_exc_info(exc_info, filename, error.lineno)


def translate_exception(exc_info, initial_skip=0):
"""If passed an exc_info it will automatically rewrite the exceptions
all the way down to the correct line numbers and frames.
"""
tb = exc_info[2]
frames = []

# skip some internal frames if wanted
for x in range(initial_skip):
if tb is not None:
tb = tb.tb_next
initial_tb = tb

while tb is not None:
# skip frames decorated with @internalcode. These are internal
# calls we can't avoid and that are useless in template debugging
# output.
if tb.tb_frame.f_code in internal_code:
tb = tb.tb_next
continue

# save a reference to the next frame if we override the current
# one with a faked one.
next = tb.tb_next

# fake template exceptions
template = tb.tb_frame.f_globals.get('__jinja_template__')
if template is not None:
lineno = template.get_corresponding_lineno(tb.tb_lineno)
tb = fake_exc_info(exc_info[:2] + (tb,), template.filename,
lineno)[2]

frames.append(make_frame_proxy(tb))
tb = next

# if we don't have any exceptions in the frames left, we have to
# reraise it unchanged.
# XXX: can we backup here? when could this happen?
if not frames:
reraise(exc_info[0], exc_info[1], exc_info[2])

return ProcessedTraceback(exc_info[0], exc_info[1], frames)


def fake_exc_info(exc_info, filename, lineno):
"""Helper for `translate_exception`."""
exc_type, exc_value, tb = exc_info

# figure the real context out
if tb is not None:
real_locals = tb.tb_frame.f_locals.copy()
ctx = real_locals.get('context')
if ctx:
locals = ctx.get_all()
else:
locals = {}
for name, value in iteritems(real_locals):
if name.startswith('l_') and value is not missing:
locals[name[2:]] = value

# if there is a local called __jinja_exception__, we get
# rid of it to not break the debug functionality.
locals.pop('__jinja_exception__', None)
else:
locals = {}

# assamble fake globals we need
globals = {
'__name__': filename,
'__file__': filename,
'__jinja_exception__': exc_info[:2],

# we don't want to keep the reference to the template around
# to not cause circular dependencies, but we mark it as Jinja
# frame for the ProcessedTraceback
'__jinja_template__': None
}

# and fake the exception
code = compile('\n' * (lineno - 1) + raise_helper, filename, 'exec')

# if it's possible, change the name of the code. This won't work
# on some python environments such as google appengine
try:
if tb is None:
location = 'template'
else:
function = tb.tb_frame.f_code.co_name
if function == 'root':
location = 'top-level template code'
elif function.startswith('block_'):
location = 'block "%s"' % function[6:]
else:
location = 'template'

if PY2:
code = CodeType(0, code.co_nlocals, code.co_stacksize,
code.co_flags, code.co_code, code.co_consts,
code.co_names, code.co_varnames, filename,
location, code.co_firstlineno,
code.co_lnotab, (), ())
else:
code = CodeType(0, code.co_kwonlyargcount,
code.co_nlocals, code.co_stacksize,
code.co_flags, code.co_code, code.co_consts,
code.co_names, code.co_varnames, filename,
location, code.co_firstlineno,
code.co_lnotab, (), ())
except Exception as e:
pass

# execute the code and catch the new traceback
try:
exec(code, globals, locals)
except:
exc_info = sys.exc_info()
new_tb = exc_info[2].tb_next

# return without this frame
return exc_info[:2] + (new_tb,)


def _init_ugly_crap():
"""This function implements a few ugly things so that we can patch the
traceback objects. The function returned allows resetting `tb_next` on
any python traceback object. Do not attempt to use this on non cpython
interpreters
"""
import ctypes
from types import TracebackType

if PY2:
# figure out size of _Py_ssize_t for Python 2:
if hasattr(ctypes.pythonapi, 'Py_InitModule4_64'):
_Py_ssize_t = ctypes.c_int64
else:
_Py_ssize_t = ctypes.c_int
else:
# platform ssize_t on Python 3
_Py_ssize_t = ctypes.c_ssize_t

# regular python
class _PyObject(ctypes.Structure):
pass
_PyObject._fields_ = [
('ob_refcnt', _Py_ssize_t),
('ob_type', ctypes.POINTER(_PyObject))
]

# python with trace
if hasattr(sys, 'getobjects'):
class _PyObject(ctypes.Structure):
pass
_PyObject._fields_ = [
('_ob_next', ctypes.POINTER(_PyObject)),
('_ob_prev', ctypes.POINTER(_PyObject)),
('ob_refcnt', _Py_ssize_t),
('ob_type', ctypes.POINTER(_PyObject))
]

class _Traceback(_PyObject):
pass
_Traceback._fields_ = [
('tb_next', ctypes.POINTER(_Traceback)),
('tb_frame', ctypes.POINTER(_PyObject)),
('tb_lasti', ctypes.c_int),
('tb_lineno', ctypes.c_int)
]

def tb_set_next(tb, next):
"""Set the tb_next attribute of a traceback object."""
if not (isinstance(tb, TracebackType) and
(next is None or isinstance(next, TracebackType))):
raise TypeError('tb_set_next arguments must be traceback objects')
obj = _Traceback.from_address(id(tb))
if tb.tb_next is not None:
old = _Traceback.from_address(id(tb.tb_next))
old.ob_refcnt -= 1
if next is None:
obj.tb_next = ctypes.POINTER(_Traceback)()
else:
next = _Traceback.from_address(id(next))
next.ob_refcnt += 1
obj.tb_next = ctypes.pointer(next)

return tb_set_next


# try to get a tb_set_next implementation if we don't have transparent
# proxies.
tb_set_next = None
if tproxy is None:
try:
tb_set_next = _init_ugly_crap()
except:
pass
del _init_ugly_crap
43 changes: 43 additions & 0 deletions deps/v8_inspector/deps/jinja2/jinja2/defaults.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
"""
jinja2.defaults
~~~~~~~~~~~~~~~
Jinja default filters and tags.
:copyright: (c) 2010 by the Jinja Team.
:license: BSD, see LICENSE for more details.
"""
from jinja2._compat import range_type
from jinja2.utils import generate_lorem_ipsum, Cycler, Joiner


# defaults for the parser / lexer
BLOCK_START_STRING = '{%'
BLOCK_END_STRING = '%}'
VARIABLE_START_STRING = '{{'
VARIABLE_END_STRING = '}}'
COMMENT_START_STRING = '{#'
COMMENT_END_STRING = '#}'
LINE_STATEMENT_PREFIX = None
LINE_COMMENT_PREFIX = None
TRIM_BLOCKS = False
LSTRIP_BLOCKS = False
NEWLINE_SEQUENCE = '\n'
KEEP_TRAILING_NEWLINE = False


# default filters, tests and namespace
from jinja2.filters import FILTERS as DEFAULT_FILTERS
from jinja2.tests import TESTS as DEFAULT_TESTS
DEFAULT_NAMESPACE = {
'range': range_type,
'dict': dict,
'lipsum': generate_lorem_ipsum,
'cycler': Cycler,
'joiner': Joiner
}


# export all constants
__all__ = tuple(x for x in locals().keys() if x.isupper())
Loading